@psync/patch-package 1.0.2 → 1.0.3
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/dist/strictMode.js +24 -4
- package/package.json +1 -1
package/dist/strictMode.js
CHANGED
|
@@ -26,6 +26,9 @@ function createStrictBaseline({ packageName, resolution, appPath, }) {
|
|
|
26
26
|
return {
|
|
27
27
|
async getOriginalTarballFiles() {
|
|
28
28
|
// CASE 1: file:./path -> walk local directory and return relative paths
|
|
29
|
+
if (process.env.PATCH_PACKAGE_DEBUG) {
|
|
30
|
+
process.stderr.write(`[strict] resolving ${packageName} resolution=${JSON.stringify(resolution)}\n`);
|
|
31
|
+
}
|
|
29
32
|
if (resolution.startsWith("file:")) {
|
|
30
33
|
const localPath = (0, path_2.resolve)(appPath, resolution.slice("file:".length));
|
|
31
34
|
if (!(0, fs_1.existsSync)(localPath))
|
|
@@ -65,13 +68,30 @@ function createStrictBaseline({ packageName, resolution, appPath, }) {
|
|
|
65
68
|
if (!version.match(/^v?\d/))
|
|
66
69
|
return null;
|
|
67
70
|
try {
|
|
71
|
+
if (process.env.PATCH_PACKAGE_DEBUG) {
|
|
72
|
+
process.stderr.write(`[strict] case 4: name=${name} version=${version}\n`);
|
|
73
|
+
}
|
|
68
74
|
const tarballUrl = await fetchTarballUrlFromRegistry(name, version);
|
|
69
|
-
if (!tarballUrl)
|
|
75
|
+
if (!tarballUrl) {
|
|
76
|
+
if (process.env.PATCH_PACKAGE_DEBUG) {
|
|
77
|
+
process.stderr.write(`[strict] registry lookup returned no tarball URL\n`);
|
|
78
|
+
}
|
|
70
79
|
return null;
|
|
80
|
+
}
|
|
81
|
+
if (process.env.PATCH_PACKAGE_DEBUG) {
|
|
82
|
+
process.stderr.write(`[strict] downloading ${tarballUrl}\n`);
|
|
83
|
+
}
|
|
71
84
|
const tarball = await fetchBuffer(tarballUrl);
|
|
72
|
-
|
|
85
|
+
const entries = listTarGzEntries(tarball);
|
|
86
|
+
if (process.env.PATCH_PACKAGE_DEBUG) {
|
|
87
|
+
process.stderr.write(`[strict] parsed ${entries.length} entries from tarball\n`);
|
|
88
|
+
}
|
|
89
|
+
return new Set(entries);
|
|
73
90
|
}
|
|
74
|
-
catch {
|
|
91
|
+
catch (e) {
|
|
92
|
+
if (process.env.PATCH_PACKAGE_DEBUG) {
|
|
93
|
+
process.stderr.write(`[strict] case 4 threw: ${e.message}\n`);
|
|
94
|
+
}
|
|
75
95
|
return null;
|
|
76
96
|
}
|
|
77
97
|
},
|
|
@@ -296,4 +316,4 @@ function pruneEmptyDirs(root) {
|
|
|
296
316
|
}
|
|
297
317
|
recurse(root);
|
|
298
318
|
}
|
|
299
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaWN0TW9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdHJpY3RNb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMkNBLG9EQTZEQztBQXlIRCw0Q0FrREM7QUF5QkQsMENBZUM7QUEzVEQsK0JBQWlDO0FBQ2pDLGlDQUErRDtBQUMvRCwrQkFHYTtBQUNiLDZCQUF5QjtBQUN6Qix1Q0FBcUM7QUFDckMsMkJBQWlFO0FBQ2pFLCtCQUEyQjtBQUMzQixpQ0FBK0M7QUFzQi9DOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxFQUNuQyxXQUFXLEVBQ1gsVUFBVSxFQUNWLE9BQU8sR0FLUjtJQUNDLE9BQU87UUFDTCxLQUFLLENBQUMsdUJBQXVCO1lBQzNCLHdFQUF3RTtZQUN4RSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxTQUFTLEdBQUcsSUFBQSxjQUFXLEVBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7Z0JBQ3hFLElBQUksQ0FBQyxJQUFBLGVBQVUsRUFBQyxTQUFTLENBQUM7b0JBQUUsT0FBTyxJQUFJLENBQUE7Z0JBQ3ZDLElBQUksQ0FBQztvQkFDSCxJQUFJLElBQUEsYUFBUSxFQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7d0JBQ3RDLE9BQU8sa0JBQWtCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFBO29CQUNqRCxDQUFDO2dCQUNILENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLE9BQU8sSUFBSSxDQUFBO2dCQUNiLENBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUE7WUFDYixDQUFDO1lBRUQsK0RBQStEO1lBQy9ELElBQ0UsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQzNCLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUM5Qix5Q0FBeUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQzFELENBQUM7Z0JBQ0QsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDcEMsSUFBSSxDQUFDO29CQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO29CQUN0QyxPQUFPLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7Z0JBQzNDLENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLE9BQU8sSUFBSSxDQUFBO2dCQUNiLENBQUM7WUFDSCxDQUFDO1lBRUQsK0JBQStCO1lBQy9CLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ2pFLE9BQU8sSUFBSSxDQUFBO1lBQ2IsQ0FBQztZQUVELG9FQUFvRTtZQUNwRSxvREFBb0Q7WUFDcEQsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQy9DLE1BQU0sSUFBSSxHQUFHLGFBQWEsQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFBO1lBQzlDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFBO1lBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQTtZQUN4QyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxVQUFVLEdBQUcsTUFBTSwyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7Z0JBQ25FLElBQUksQ0FBQyxVQUFVO29CQUFFLE9BQU8sSUFBSSxDQUFBO2dCQUM1QixNQUFNLE9BQU8sR0FBRyxNQUFNLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtnQkFDN0MsT0FBTyxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1lBQzNDLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsT0FBTyxJQUFJLENBQUE7WUFDYixDQUFDO1FBQ0gsQ0FBQztLQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsVUFBa0I7SUFJdkMsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDNUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNuQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNkLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFDdkUsQ0FBQztRQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFDdkIsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUE7SUFDaEMsQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFBO0FBQ1gsQ0FBQztBQUVELG9GQUFvRjtBQUNwRixTQUFTLGtCQUFrQixDQUFDLElBQVksRUFBRSxPQUFlO0lBQ3ZELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUE7SUFDN0IsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFBLGdCQUFXLEVBQUMsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNsRSxNQUFNLEdBQUcsR0FBRyxJQUFBLFdBQUksRUFBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQzFELElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDeEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUE7WUFDbEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDaEQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNkLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUMxQixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLDJCQUEyQixDQUNsQyxJQUFZLEVBQ1osT0FBZTtJQUVmLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxHQUFHLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDNUIsTUFBTSxHQUFHLEdBQUcsOEJBQThCLFdBQVcsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFBO0lBQ3RGLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUM5QixTQUFTLENBQUMsR0FBRyxDQUFDO2FBQ1gsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDYixNQUFNLE9BQU8sR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQTtZQUNuQyxRQUFRLENBQUMsT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3hELENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNoQyxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxHQUFXO0lBQzlCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDdkMsSUFBSSxNQUFXLENBQUE7UUFDZixJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsSUFBSSxTQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDdkIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQ3pDLE9BQU07UUFDUixDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQVksQ0FBQyxDQUFDLENBQUMsY0FBVyxDQUFBO1FBQ3JFLE1BQU0sSUFBSSxHQUFHO1lBQ1gsTUFBTSxFQUFFLEtBQUs7WUFDYixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDekIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDOUQsSUFBSSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU07WUFDckMsT0FBTyxFQUFFO2dCQUNQLFlBQVksRUFBRSxlQUFlO2dCQUM3QixNQUFNLEVBQUUsK0JBQStCO2FBQ3hDO1NBQ3FDLENBQUE7UUFDeEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzVCLElBQ0UsR0FBRyxDQUFDLFVBQVU7Z0JBQ2QsR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHO2dCQUNyQixHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUc7Z0JBQ3BCLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUNwQixDQUFDO2dCQUNELFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUE7Z0JBQ3pELEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtnQkFDWixPQUFNO1lBQ1IsQ0FBQztZQUNELElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDM0IsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLFVBQVUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUE7Z0JBQ3ZELEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtnQkFDWixPQUFNO1lBQ1IsQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQTtZQUMzQixHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQVMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQzdDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNwRCxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUMxQixDQUFDLENBQUMsQ0FBQTtRQUNGLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ3hCLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUN6QixHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FDckQsQ0FBQTtRQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUNYLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQVc7SUFDNUIsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3pFLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsS0FBYTtJQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFBLGlCQUFVLEVBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0IsTUFBTSxHQUFHLEdBQWEsRUFBRSxDQUFBO0lBQ3hCLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQTtJQUN2QixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUE7SUFFdEIseUVBQXlFO0lBQ3pFLDBEQUEwRDtJQUMxRCxJQUFJLGFBQWEsR0FBa0IsSUFBSSxDQUFBO0lBRXZDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQTtJQUNkLE9BQU8sTUFBTSxHQUFHLFdBQVcsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUMsSUFDRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqQixHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ2hFLENBQUM7WUFDRCxNQUFLO1FBQ1AsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQzFDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUNwRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUV2RCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzVDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQTtRQUVqRSxtRUFBbUU7UUFDbkUsSUFBSSxRQUFRLEtBQUssR0FBRyxJQUFJLFFBQVEsS0FBSyxHQUFHLElBQUksUUFBUSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzdELE1BQU0sSUFBSSxXQUFXLEdBQUcsVUFBVSxDQUFBO1lBQ2xDLFNBQVE7UUFDVixDQUFDO1FBRUQsSUFBSSxhQUFhLEtBQUssSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ25DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDcEMsYUFBYSxHQUFHLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ3RFLENBQUM7UUFFRCxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDcEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDaEQsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDbkIsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2hCLENBQUM7UUFFRCxNQUFNLElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQTtJQUNwQyxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDO0FBRUQsd0VBQXdFO0FBQ3hFLFNBQVMsV0FBVyxDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQUUsTUFBYztJQUM5RCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUE7SUFDbkQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvQixPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ3pFLENBQUM7QUFFRCwyREFBMkQ7QUFDM0QsU0FBUyxVQUFVLENBQUMsQ0FBUztJQUMzQixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUMzQyxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3RCLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUM3QixDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUE7QUFDVixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixlQUFlLENBQzdCLFFBQWdCLEVBQ2hCLFFBQXFCO0lBRXJCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQTtJQUNkLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUU7UUFDdkMsSUFBSSxDQUFDLElBQUEsYUFBUSxFQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUFFLE9BQU07UUFDdkMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFBLHFCQUFVLEVBQUMsT0FBTyxDQUFDLENBQUE7WUFDbkIsTUFBTSxFQUFFLENBQUE7UUFDVixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDRixjQUFjLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDeEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFBO0FBQ25CLENBQUM7QUFFRCxTQUFTLElBQUksQ0FDWCxJQUFZLEVBQ1osS0FBaUQ7SUFFakQsU0FBUyxPQUFPLENBQUMsT0FBZSxFQUFFLE9BQWU7UUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBQSxnQkFBVyxFQUFDLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzdELEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7WUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBQSxXQUFJLEVBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUMxQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQTtZQUNsRSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUN4QixPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQzdCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQzNCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDbkIsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLElBQVk7SUFDbEMsU0FBUyxPQUFPLENBQUMsR0FBVztRQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFBLGdCQUFXLEVBQUMsR0FBRyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDekQsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtnQkFBRSxTQUFRO1lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUEsV0FBSSxFQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2hCLENBQUM7UUFDRCxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksSUFBQSxnQkFBVyxFQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUM7Z0JBQ0gsSUFBQSxjQUFTLEVBQUMsR0FBRyxDQUFDLENBQUE7WUFDaEIsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxTQUFTO1lBQ1gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGd1bnppcFN5bmMgfSBmcm9tIFwiemxpYlwiXG5pbXBvcnQgeyByZXF1ZXN0IGFzIGh0dHBzUmVxdWVzdCwgUmVxdWVzdE9wdGlvbnMgfSBmcm9tIFwiaHR0cHNcIlxuaW1wb3J0IHtcbiAgcmVxdWVzdCBhcyBodHRwUmVxdWVzdCxcbiAgUmVxdWVzdE9wdGlvbnMgYXMgSHR0cFJlcXVlc3RPcHRpb25zLFxufSBmcm9tIFwiaHR0cFwiXG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwidXJsXCJcbmltcG9ydCB7IHJlbW92ZVN5bmMgfSBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHsgZXhpc3RzU3luYywgc3RhdFN5bmMsIHJlYWRkaXJTeW5jLCBybWRpclN5bmMgfSBmcm9tIFwiZnNcIlxuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCJcbmltcG9ydCB7IHJlc29sdmUgYXMgcmVzb2x2ZVBhdGggfSBmcm9tIFwiLi9wYXRoXCJcblxuLyoqXG4gKiBTdHJpY3QtbW9kZSBzdXBwb3J0IGZvciBgcGF0Y2gtcGFja2FnZWAuXG4gKlxuICogSW4gc3RyaWN0IG1vZGUsIGFmdGVyIHRoZSB1c2VyJ3MgZWRpdGVkIGNvcHkgb2YgdGhlIHBhY2thZ2UgaGFzIGJlZW5cbiAqIHN0YWdlZCBpbiB0aGUgdGVtcCBnaXQgcmVwbywgYW55IGZpbGUgd2hvc2UgcGF0aCB3YXMgTk9UIHBhcnQgb2YgdGhlXG4gKiBvcmlnaW5hbCBwdWJsaXNoZWQgcGFja2FnZSAodGhlIHRhcmJhbGwgYXQgdGhlIHJlc29sdmVkIFVSTCkgaXMgcmVtb3ZlZFxuICogZnJvbSB0aGUgdHJlZSBiZWZvcmUgY29tcHV0aW5nIHRoZSBkaWZmLiBUaGlzIHByZXZlbnRzIHRoZVxuICogXCItLS0gL2Rldi9udWxsXCIgKFwibmV3IGZpbGVcIikgZW50cmllcyB0aGF0IGFwcGVhciB3aGVuIGEgcGFja2FnZSBtYW5hZ2VyXG4gKiBpbnN0YWxsIGluIHRoZSB0ZW1wIGRpcmVjdG9yeSBwcm9kdWNlcyBhIHNsaWdodGx5IGRpZmZlcmVudCBmaWxlIGxheW91dFxuICogdGhhbiB0aGUgdXNlcidzIGBub2RlX21vZHVsZXNgIGNvcHkuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgd2hlbiB0aGUgYmFzZWxpbmUgY2Fubm90IGJlIGRldGVybWluZWQg4oCUIGNhbGxlcnMgd2FybiB0aGVcbiAqIHVzZXIgYW5kIHByb2NlZWQgd2l0aG91dCBzdHJpY3QgZmlsdGVyaW5nLlxuICovXG5leHBvcnQgdHlwZSBTdHJpY3RCYXNlbGluZVByb3ZpZGVyID0ge1xuICAvKiogU2V0IG9mIHJlbGF0aXZlIGZpbGUgcGF0aHMgKGZvcndhcmQgc2xhc2hlcykgdGhhdCB0aGUgb3JpZ2luYWxcbiAgICogcHVibGlzaGVkIHBhY2thZ2UgY29udGFpbmVkLCBvciBgbnVsbGAgaWYgbm90IGRldGVybWluYWJsZS4gKi9cbiAgZ2V0T3JpZ2luYWxUYXJiYWxsRmlsZXMoKTogUHJvbWlzZTxTZXQ8c3RyaW5nPiB8IG51bGw+XG59XG5cbi8qKlxuICogQnVpbGQgYSBiYXNlbGluZSBwcm92aWRlciBmb3IgYSBnaXZlbiBwYWNrYWdlIHJlc29sdXRpb24uXG4gKlxuICogYHJlc29sdXRpb25gIGlzIHdoYXRldmVyIGBnZXRQYWNrYWdlUmVzb2x1dGlvbmAgcmV0dXJuZWQg4oCUIHR5cGljYWxseTpcbiAqICAtIFwiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9mb28vLS9mb28tMS4yLjMudGd6I3NoYTUxMi0uLi5cIiAgKHlhcm4gLyBidW4ubG9ja2IpXG4gKiAgLSBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zvby8tL2Zvby0xLjIuMy50Z3pcIiAgICAgICAgICAgICAgIChucG0gdmlhIGxvY2tmaWxlKVxuICogIC0gXCIxLjIuM1wiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbi1vbmx5LCBlLmcuIGJ1bi5sb2NrIHRleHQpXG4gKiAgLSBcIm5wbTpiYXJAMS4yLjNcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGlhcylcbiAqICAtIFwiZmlsZTouL3BhdGhcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsIGZpbGUpXG4gKiAgLSBcImdpdCtodHRwczovLy4uLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnaXQgdXJsKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RyaWN0QmFzZWxpbmUoe1xuICBwYWNrYWdlTmFtZSxcbiAgcmVzb2x1dGlvbixcbiAgYXBwUGF0aCxcbn06IHtcbiAgcGFja2FnZU5hbWU6IHN0cmluZ1xuICByZXNvbHV0aW9uOiBzdHJpbmdcbiAgYXBwUGF0aDogc3RyaW5nXG59KTogU3RyaWN0QmFzZWxpbmVQcm92aWRlciB7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0T3JpZ2luYWxUYXJiYWxsRmlsZXMoKSB7XG4gICAgICAvLyBDQVNFIDE6IGZpbGU6Li9wYXRoIC0+IHdhbGsgbG9jYWwgZGlyZWN0b3J5IGFuZCByZXR1cm4gcmVsYXRpdmUgcGF0aHNcbiAgICAgIGlmIChyZXNvbHV0aW9uLnN0YXJ0c1dpdGgoXCJmaWxlOlwiKSkge1xuICAgICAgICBjb25zdCBsb2NhbFBhdGggPSByZXNvbHZlUGF0aChhcHBQYXRoLCByZXNvbHV0aW9uLnNsaWNlKFwiZmlsZTpcIi5sZW5ndGgpKVxuICAgICAgICBpZiAoIWV4aXN0c1N5bmMobG9jYWxQYXRoKSkgcmV0dXJuIG51bGxcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoc3RhdFN5bmMobG9jYWxQYXRoKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Fsa0xvY2FsRGlyZWN0b3J5KGxvY2FsUGF0aCwgbG9jYWxQYXRoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICAvLyBDQVNFIDI6IGxvb2tzIGxpa2UgYSAudGd6IFVSTCAtPiBkb3dubG9hZCwgZ3VuemlwLCBwYXJzZSB0YXJcbiAgICAgIGlmIChcbiAgICAgICAgcmVzb2x1dGlvbi5lbmRzV2l0aChcIi50Z3pcIikgfHxcbiAgICAgICAgcmVzb2x1dGlvbi5lbmRzV2l0aChcIi50YXIuZ3pcIikgfHxcbiAgICAgICAgL1xcYmh0dHBzPzpcXC9cXC8uKlxcLih0Z3p8dGFyXFwuZ3opKFxcP3wjfCQpL2kudGVzdChyZXNvbHV0aW9uKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHJlc29sdXRpb24uc3BsaXQoXCIjXCIpWzBdXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdGFyYmFsbCA9IGF3YWl0IGZldGNoQnVmZmVyKHVybClcbiAgICAgICAgICByZXR1cm4gbmV3IFNldChsaXN0VGFyR3pFbnRyaWVzKHRhcmJhbGwpKVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENBU0UgMzogbG9va3MgbGlrZSBhIGdpdCBVUkxcbiAgICAgIGlmIChyZXNvbHV0aW9uLnN0YXJ0c1dpdGgoXCJnaXQrXCIpIHx8IHJlc29sdXRpb24uZW5kc1dpdGgoXCIuZ2l0XCIpKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIC8vIENBU0UgNDogcGxhaW4gdmVyc2lvbiBsaWtlIFwiMS4yLjNcIiwgcG9zc2libHkgd2l0aCBhbiBgbnBtOmAgYWxpYXNcbiAgICAgIC8vIC0+IHJlc29sdmUgdmlhIHRoZSBucG0gcmVnaXN0cnkgbWV0YWRhdGEgZW5kcG9pbnRcbiAgICAgIGNvbnN0IGFsaWFzUmVzb2x2ZWQgPSBwYXJzZU5wbUFsaWFzKHJlc29sdXRpb24pXG4gICAgICBjb25zdCBuYW1lID0gYWxpYXNSZXNvbHZlZC5uYW1lID8/IHBhY2thZ2VOYW1lXG4gICAgICBjb25zdCB2ZXJzaW9uID0gYWxpYXNSZXNvbHZlZC52ZXJzaW9uID8/IHJlc29sdXRpb25cbiAgICAgIGlmICghdmVyc2lvbi5tYXRjaCgvXnY/XFxkLykpIHJldHVybiBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0YXJiYWxsVXJsID0gYXdhaXQgZmV0Y2hUYXJiYWxsVXJsRnJvbVJlZ2lzdHJ5KG5hbWUsIHZlcnNpb24pXG4gICAgICAgIGlmICghdGFyYmFsbFVybCkgcmV0dXJuIG51bGxcbiAgICAgICAgY29uc3QgdGFyYmFsbCA9IGF3YWl0IGZldGNoQnVmZmVyKHRhcmJhbGxVcmwpXG4gICAgICAgIHJldHVybiBuZXcgU2V0KGxpc3RUYXJHekVudHJpZXModGFyYmFsbCkpXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICB9LFxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTnBtQWxpYXMocmVzb2x1dGlvbjogc3RyaW5nKToge1xuICBuYW1lPzogc3RyaW5nXG4gIHZlcnNpb24/OiBzdHJpbmdcbn0ge1xuICBpZiAocmVzb2x1dGlvbi5zdGFydHNXaXRoKFwibnBtOlwiKSkge1xuICAgIGNvbnN0IHJlc3QgPSByZXNvbHV0aW9uLnNsaWNlKFwibnBtOlwiLmxlbmd0aClcbiAgICBjb25zdCBhdElkeCA9IHJlc3QubGFzdEluZGV4T2YoXCJAXCIpXG4gICAgaWYgKGF0SWR4ID4gMCkge1xuICAgICAgcmV0dXJuIHsgbmFtZTogcmVzdC5zbGljZSgwLCBhdElkeCksIHZlcnNpb246IHJlc3Quc2xpY2UoYXRJZHggKyAxKSB9XG4gICAgfVxuICAgIHJldHVybiB7IG5hbWU6IHJlc3QgfVxuICB9XG4gIGlmICgvXnY/XFxkLy50ZXN0KHJlc29sdXRpb24pKSB7XG4gICAgcmV0dXJuIHsgdmVyc2lvbjogcmVzb2x1dGlvbiB9XG4gIH1cbiAgcmV0dXJuIHt9XG59XG5cbi8qKiBXYWxrcyBhIGxvY2FsIGRpcmVjdG9yeSByZWN1cnNpdmVseSBhbmQgcmV0dXJucyBmb3J3YXJkLXNsYXNoIHJlbGF0aXZlIHBhdGhzLiAqL1xuZnVuY3Rpb24gd2Fsa0xvY2FsRGlyZWN0b3J5KHJvb3Q6IHN0cmluZywgY3VycmVudDogc3RyaW5nKTogU2V0PHN0cmluZz4ge1xuICBjb25zdCBvdXQgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlYWRkaXJTeW5jKGN1cnJlbnQsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkge1xuICAgIGNvbnN0IGFicyA9IGpvaW4oY3VycmVudCwgZW50cnkubmFtZSlcbiAgICBjb25zdCByZWwgPSBhYnMuc2xpY2Uocm9vdC5sZW5ndGggKyAxKS5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKVxuICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBvdXQuYWRkKHJlbCArIFwiL1wiKVxuICAgICAgZm9yIChjb25zdCBzdWIgb2Ygd2Fsa0xvY2FsRGlyZWN0b3J5KHJvb3QsIGFicykpIHtcbiAgICAgICAgb3V0LmFkZChzdWIpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlbnRyeS5pc0ZpbGUoKSkge1xuICAgICAgb3V0LmFkZChyZWwpXG4gICAgfVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuLyoqXG4gKiBGZXRjaGVzIHRoZSBgZGlzdC50YXJiYWxsYCBVUkwgZm9yIGEgcGFja2FnZSB2ZXJzaW9uIGZyb20gdGhlIG5wbSByZWdpc3RyeVxuICogbWV0YWRhdGEgZW5kcG9pbnQuIFJldHVybnMgbnVsbCBpZiB0aGUgcGFja2FnZS92ZXJzaW9uIGNhbid0IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiBmZXRjaFRhcmJhbGxVcmxGcm9tUmVnaXN0cnkoXG4gIG5hbWU6IHN0cmluZyxcbiAgdmVyc2lvbjogc3RyaW5nLFxuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIGNvbnN0IGVuY29kZWROYW1lID0gbmFtZS5zdGFydHNXaXRoKFwiQFwiKVxuICAgID8gXCJAXCIgKyBlbmNvZGVVUklDb21wb25lbnQobmFtZS5zbGljZSgxKSlcbiAgICA6IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKVxuICBjb25zdCB1cmwgPSBgaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJHtlbmNvZGVkTmFtZX0vJHtlbmNvZGVVUklDb21wb25lbnQodmVyc2lvbil9YFxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmVQKSA9PiB7XG4gICAgZmV0Y2hKc29uKHVybClcbiAgICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmJhbGwgPSBqc29uPy5kaXN0Py50YXJiYWxsXG4gICAgICAgIHJlc29sdmVQKHR5cGVvZiB0YXJiYWxsID09PSBcInN0cmluZ1wiID8gdGFyYmFsbCA6IG51bGwpXG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHJlc29sdmVQKG51bGwpKVxuICB9KVxufVxuXG5mdW5jdGlvbiBmZXRjaEJ1ZmZlcih1cmw6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZVAsIHJlamVjdFApID0+IHtcbiAgICBsZXQgcGFyc2VkOiBVUkxcbiAgICB0cnkge1xuICAgICAgcGFyc2VkID0gbmV3IFVSTCh1cmwpXG4gICAgfSBjYXRjaCB7XG4gICAgICByZWplY3RQKG5ldyBFcnJvcihgSW52YWxpZCBVUkw6ICR7dXJsfWApKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IGxpYiA9IHBhcnNlZC5wcm90b2NvbCA9PT0gXCJodHRwczpcIiA/IGh0dHBzUmVxdWVzdCA6IGh0dHBSZXF1ZXN0XG4gICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIGhvc3RuYW1lOiBwYXJzZWQuaG9zdG5hbWUsXG4gICAgICBwb3J0OiBwYXJzZWQucG9ydCB8fCAocGFyc2VkLnByb3RvY29sID09PSBcImh0dHBzOlwiID8gNDQzIDogODApLFxuICAgICAgcGF0aDogcGFyc2VkLnBhdGhuYW1lICsgcGFyc2VkLnNlYXJjaCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgXCJVc2VyLUFnZW50XCI6IFwicGF0Y2gtcGFja2FnZVwiLFxuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtLCAqLypcIixcbiAgICAgIH0sXG4gICAgfSBhcyBSZXF1ZXN0T3B0aW9ucyAmIEh0dHBSZXF1ZXN0T3B0aW9uc1xuICAgIGNvbnN0IHJlcSA9IGxpYihvcHRzLCAocmVzKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHJlcy5zdGF0dXNDb2RlICYmXG4gICAgICAgIHJlcy5zdGF0dXNDb2RlID49IDMwMCAmJlxuICAgICAgICByZXMuc3RhdHVzQ29kZSA8IDQwMCAmJlxuICAgICAgICByZXMuaGVhZGVycy5sb2NhdGlvblxuICAgICAgKSB7XG4gICAgICAgIGZldGNoQnVmZmVyKHJlcy5oZWFkZXJzLmxvY2F0aW9uKS50aGVuKHJlc29sdmVQLCByZWplY3RQKVxuICAgICAgICByZXMucmVzdW1lKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAocmVzLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICByZWplY3RQKG5ldyBFcnJvcihgSFRUUCAke3Jlcy5zdGF0dXNDb2RlfSBmb3IgJHt1cmx9YCkpXG4gICAgICAgIHJlcy5yZXN1bWUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXVxuICAgICAgcmVzLm9uKFwiZGF0YVwiLCAoYzogQnVmZmVyKSA9PiBjaHVua3MucHVzaChjKSlcbiAgICAgIHJlcy5vbihcImVuZFwiLCAoKSA9PiByZXNvbHZlUChCdWZmZXIuY29uY2F0KGNodW5rcykpKVxuICAgICAgcmVzLm9uKFwiZXJyb3JcIiwgcmVqZWN0UClcbiAgICB9KVxuICAgIHJlcS5vbihcImVycm9yXCIsIHJlamVjdFApXG4gICAgcmVxLnNldFRpbWVvdXQoMTUwMDAsICgpID0+XG4gICAgICByZXEuZGVzdHJveShuZXcgRXJyb3IoXCJUYXJiYWxsIGRvd25sb2FkIHRpbWVkIG91dFwiKSksXG4gICAgKVxuICAgIHJlcS5lbmQoKVxuICB9KVxufVxuXG5mdW5jdGlvbiBmZXRjaEpzb24odXJsOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICByZXR1cm4gZmV0Y2hCdWZmZXIodXJsKS50aGVuKChidWYpID0+IEpTT04ucGFyc2UoYnVmLnRvU3RyaW5nKFwidXRmOFwiKSkpXG59XG5cbi8qKlxuICogTGlzdHMgdGhlIGZpbGUgcGF0aHMgaW5zaWRlIGEgZ3ppcHBlZCB0YXJiYWxsIGJ1ZmZlci5cbiAqXG4gKiBUYXIgZm9ybWF0OiA1MTItYnl0ZSBoZWFkZXIgKyA8c2l6ZT4gYnl0ZXMgb2YgZmlsZSBjb250ZW50LCBwYWRkZWQgdG9cbiAqIHRoZSBuZXh0IDUxMi1ieXRlIGJvdW5kYXJ5LiBXZSBkb24ndCBleHRyYWN0IGZpbGUgY29udGVudHMg4oCUIG9ubHkgdGhlXG4gKiBgbmFtZWAgZmllbGQgb2YgZWFjaCBoZWFkZXIgaXMgcmVhZCwgd2hpY2ggaXMgZW5vdWdoIHRvIGNvbXB1dGUgdGhlXG4gKiBiYXNlbGluZSBmaWxlIHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RUYXJHekVudHJpZXModGFyR3o6IEJ1ZmZlcik6IHN0cmluZ1tdIHtcbiAgY29uc3QgdGFyID0gZ3VuemlwU3luYyh0YXJHeilcbiAgY29uc3Qgb3V0OiBzdHJpbmdbXSA9IFtdXG4gIGNvbnN0IEhFQURFUl9TSVpFID0gNTEyXG4gIGNvbnN0IEJMT0NLX1NJWkUgPSA1MTJcblxuICAvLyBDb21tb24gcHJlZml4IChlLmcuIFwicGFja2FnZS9cIikgdGhhdCBucG0gYW5kIHlhcm4gYWRkIHRvIGV2ZXJ5IGVudHJ5IOKAlFxuICAvLyBzdHJpcHBlZCBzbyBwYXRocyBtYXRjaCB0aGUgdXNlcidzIG5vZGVfbW9kdWxlcyBsYXlvdXQuXG4gIGxldCBsZWFkaW5nUHJlZml4OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuXG4gIGxldCBvZmZzZXQgPSAwXG4gIHdoaWxlIChvZmZzZXQgKyBIRUFERVJfU0laRSA8PSB0YXIubGVuZ3RoKSB7XG4gICAgaWYgKFxuICAgICAgdGFyW29mZnNldF0gPT09IDAgJiZcbiAgICAgIHRhci5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIEhFQURFUl9TSVpFKS5ldmVyeSgoYikgPT4gYiA9PT0gMClcbiAgICApIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9IHJlYWRDU3RyaW5nKHRhciwgb2Zmc2V0LCAxMDApXG4gICAgY29uc3Qgc2l6ZU9jdGFsID0gcmVhZENTdHJpbmcodGFyLCBvZmZzZXQgKyAxMjQsIDEyKVxuICAgIGNvbnN0IHR5cGVGbGFnID0gU3RyaW5nLmZyb21DaGFyQ29kZSh0YXJbb2Zmc2V0ICsgMTU2XSlcblxuICAgIGNvbnN0IGVudHJ5U2l6ZSA9IHBhcnNlT2N0YWwoc2l6ZU9jdGFsKSB8fCAwXG4gICAgY29uc3QgcGFkZGVkU2l6ZSA9IE1hdGguY2VpbChlbnRyeVNpemUgLyBCTE9DS19TSVpFKSAqIEJMT0NLX1NJWkVcblxuICAgIC8vIFBBWCBleHRlbmRlZCBoZWFkZXIgLyBsb25nLW5hbWUgcmVkaXJlY3Qg4oCUIHNraXAgaXRzIGJsb2NrcyBvbmx5LlxuICAgIGlmICh0eXBlRmxhZyA9PT0gXCJ4XCIgfHwgdHlwZUZsYWcgPT09IFwiZ1wiIHx8IHR5cGVGbGFnID09PSBcIkxcIikge1xuICAgICAgb2Zmc2V0ICs9IEhFQURFUl9TSVpFICsgcGFkZGVkU2l6ZVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAobGVhZGluZ1ByZWZpeCA9PT0gbnVsbCAmJiBuYW1lKSB7XG4gICAgICBjb25zdCBmaXJzdFNsYXNoID0gbmFtZS5pbmRleE9mKFwiL1wiKVxuICAgICAgbGVhZGluZ1ByZWZpeCA9IGZpcnN0U2xhc2ggPj0gMCA/IG5hbWUuc2xpY2UoMCwgZmlyc3RTbGFzaCArIDEpIDogXCJcIlxuICAgIH1cblxuICAgIGlmIChsZWFkaW5nUHJlZml4ICYmIG5hbWUuc3RhcnRzV2l0aChsZWFkaW5nUHJlZml4KSkge1xuICAgICAgY29uc3QgY2xlYW5lZCA9IG5hbWUuc2xpY2UobGVhZGluZ1ByZWZpeC5sZW5ndGgpXG4gICAgICBpZiAoY2xlYW5lZCAmJiAhY2xlYW5lZC5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgb3V0LnB1c2goY2xlYW5lZClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5hbWUgJiYgIW5hbWUuZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgICBvdXQucHVzaChuYW1lKVxuICAgIH1cblxuICAgIG9mZnNldCArPSBIRUFERVJfU0laRSArIHBhZGRlZFNpemVcbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cblxuLyoqIFJlYWQgYSBOVUwtdGVybWluYXRlZCBVVEYtOCBzdHJpbmcgb2YgYG1heExlbmAgYnl0ZXMgYXQgYG9mZnNldGAuICovXG5mdW5jdGlvbiByZWFkQ1N0cmluZyhidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIG1heExlbjogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3Qgc2xpY2UgPSBidWYuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBtYXhMZW4pXG4gIGNvbnN0IG51bElkeCA9IHNsaWNlLmluZGV4T2YoMClcbiAgcmV0dXJuIHNsaWNlLnN1YmFycmF5KDAsIG51bElkeCA8IDAgPyBtYXhMZW4gOiBudWxJZHgpLnRvU3RyaW5nKFwidXRmOFwiKVxufVxuXG4vKiogUGFyc2UgYW4gb2N0YWwgc3RyaW5nIChlLmcuIFwiMDAwMTQyXCIpIGludG8gYSBudW1iZXIuICovXG5mdW5jdGlvbiBwYXJzZU9jdGFsKHM6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHRyaW1tZWQgPSBzLnJlcGxhY2UoL1xcMC9nLCBcIlwiKS50cmltKClcbiAgaWYgKCF0cmltbWVkKSByZXR1cm4gMFxuICBpZiAoL15bMC03XSskLy50ZXN0KHRyaW1tZWQpKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHRyaW1tZWQsIDgpXG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGZpbGVzIGZyb20gYHRyZWVSb290YCB3aG9zZSByZWxhdGl2ZSBwYXRocyAoZm9yd2FyZCBzbGFzaGVzLCBzYW5zXG4gKiBsZWFkaW5nIGAuL2ApIGFyZSBOT1QgaW4gYGJhc2VsaW5lYC4gQW55IGRpcmVjdG9yeSB0aGF0IGJlY29tZXMgZW1wdHkgYXNcbiAqIGEgc2lkZSBlZmZlY3QgaXMgYWxzbyByZW1vdmVkLCBzbyBnaXQgZG9lc24ndCBpbmNsdWRlIGVtcHR5LWRpciBub2lzZSBpblxuICogdGhlIHJlc3VsdGluZyBwYXRjaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBydW5lVG9CYXNlbGluZShcbiAgdHJlZVJvb3Q6IHN0cmluZyxcbiAgYmFzZWxpbmU6IFNldDxzdHJpbmc+LFxuKTogeyBwcnVuZWQ6IG51bWJlciB9IHtcbiAgbGV0IHBydW5lZCA9IDBcbiAgd2Fsayh0cmVlUm9vdCwgKGFic1BhdGgsIHJlbGF0aXZlUGF0aCkgPT4ge1xuICAgIGlmICghc3RhdFN5bmMoYWJzUGF0aCkuaXNGaWxlKCkpIHJldHVyblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSByZWxhdGl2ZVBhdGgucmVwbGFjZSgvXFxcXC9nLCBcIi9cIilcbiAgICBpZiAoIWJhc2VsaW5lLmhhcyhub3JtYWxpemVkKSkge1xuICAgICAgcmVtb3ZlU3luYyhhYnNQYXRoKVxuICAgICAgcHJ1bmVkKytcbiAgICB9XG4gIH0pXG4gIHBydW5lRW1wdHlEaXJzKHRyZWVSb290KVxuICByZXR1cm4geyBwcnVuZWQgfVxufVxuXG5mdW5jdGlvbiB3YWxrKFxuICByb290OiBzdHJpbmcsXG4gIHZpc2l0OiAoYWJzUGF0aDogc3RyaW5nLCByZWxQYXRoOiBzdHJpbmcpID0+IHZvaWQsXG4pOiB2b2lkIHtcbiAgZnVuY3Rpb24gcmVjdXJzZShhYnNQYXRoOiBzdHJpbmcsIHJlbFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJpZXMgPSByZWFkZGlyU3luYyhhYnNQYXRoLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSlcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IGNoaWxkQWJzID0gam9pbihhYnNQYXRoLCBlbnRyeS5uYW1lKVxuICAgICAgY29uc3QgY2hpbGRSZWwgPSByZWxQYXRoID8gYCR7cmVsUGF0aH0vJHtlbnRyeS5uYW1lfWAgOiBlbnRyeS5uYW1lXG4gICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICByZWN1cnNlKGNoaWxkQWJzLCBjaGlsZFJlbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpc2l0KGNoaWxkQWJzLCBjaGlsZFJlbClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmVjdXJzZShyb290LCBcIlwiKVxufVxuXG5mdW5jdGlvbiBwcnVuZUVtcHR5RGlycyhyb290OiBzdHJpbmcpOiB2b2lkIHtcbiAgZnVuY3Rpb24gcmVjdXJzZShkaXI6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJpZXMgPSByZWFkZGlyU3luYyhkaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KVxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgaWYgKCFlbnRyeS5pc0RpcmVjdG9yeSgpKSBjb250aW51ZVxuICAgICAgY29uc3QgY2hpbGQgPSBqb2luKGRpciwgZW50cnkubmFtZSlcbiAgICAgIHJlY3Vyc2UoY2hpbGQpXG4gICAgfVxuICAgIGlmIChkaXIgIT09IHJvb3QgJiYgcmVhZGRpclN5bmMoZGlyKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJtZGlyU3luYyhkaXIpXG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJlY3Vyc2Uocm9vdClcbn1cbiJdfQ==
|
|
319
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaWN0TW9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zdHJpY3RNb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMkNBLG9EQTRGQztBQXlIRCw0Q0FrREM7QUF5QkQsMENBZUM7QUExVkQsK0JBQWlDO0FBQ2pDLGlDQUErRDtBQUMvRCwrQkFHYTtBQUNiLDZCQUF5QjtBQUN6Qix1Q0FBcUM7QUFDckMsMkJBQWlFO0FBQ2pFLCtCQUEyQjtBQUMzQixpQ0FBK0M7QUFzQi9DOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxFQUNuQyxXQUFXLEVBQ1gsVUFBVSxFQUNWLE9BQU8sR0FLUjtJQUNDLE9BQU87UUFDTCxLQUFLLENBQUMsdUJBQXVCO1lBQzNCLHdFQUF3RTtZQUN4RSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2xCLHNCQUFzQixXQUFXLGVBQWUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUMvRSxDQUFBO1lBQ0gsQ0FBQztZQUNELElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFBLGNBQVcsRUFBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtnQkFDeEUsSUFBSSxDQUFDLElBQUEsZUFBVSxFQUFDLFNBQVMsQ0FBQztvQkFBRSxPQUFPLElBQUksQ0FBQTtnQkFDdkMsSUFBSSxDQUFDO29CQUNILElBQUksSUFBQSxhQUFRLEVBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQzt3QkFDdEMsT0FBTyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUE7b0JBQ2pELENBQUM7Z0JBQ0gsQ0FBQztnQkFB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QUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1lBQzNCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDbkIsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLElBQVk7SUFDbEMsU0FBUyxPQUFPLENBQUMsR0FBVztRQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFBLGdCQUFXLEVBQUMsR0FBRyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDekQsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtnQkFBRSxTQUFRO1lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUEsV0FBSSxFQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2hCLENBQUM7UUFDRCxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksSUFBQSxnQkFBVyxFQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUM7Z0JBQ0gsSUFBQSxjQUFTLEVBQUMsR0FBRyxDQUFDLENBQUE7WUFDaEIsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxTQUFTO1lBQ1gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGd1bnppcFN5bmMgfSBmcm9tIFwiemxpYlwiXG5pbXBvcnQgeyByZXF1ZXN0IGFzIGh0dHBzUmVxdWVzdCwgUmVxdWVzdE9wdGlvbnMgfSBmcm9tIFwiaHR0cHNcIlxuaW1wb3J0IHtcbiAgcmVxdWVzdCBhcyBodHRwUmVxdWVzdCxcbiAgUmVxdWVzdE9wdGlvbnMgYXMgSHR0cFJlcXVlc3RPcHRpb25zLFxufSBmcm9tIFwiaHR0cFwiXG5pbXBvcnQgeyBVUkwgfSBmcm9tIFwidXJsXCJcbmltcG9ydCB7IHJlbW92ZVN5bmMgfSBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHsgZXhpc3RzU3luYywgc3RhdFN5bmMsIHJlYWRkaXJTeW5jLCBybWRpclN5bmMgfSBmcm9tIFwiZnNcIlxuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCJcbmltcG9ydCB7IHJlc29sdmUgYXMgcmVzb2x2ZVBhdGggfSBmcm9tIFwiLi9wYXRoXCJcblxuLyoqXG4gKiBTdHJpY3QtbW9kZSBzdXBwb3J0IGZvciBgcGF0Y2gtcGFja2FnZWAuXG4gKlxuICogSW4gc3RyaWN0IG1vZGUsIGFmdGVyIHRoZSB1c2VyJ3MgZWRpdGVkIGNvcHkgb2YgdGhlIHBhY2thZ2UgaGFzIGJlZW5cbiAqIHN0YWdlZCBpbiB0aGUgdGVtcCBnaXQgcmVwbywgYW55IGZpbGUgd2hvc2UgcGF0aCB3YXMgTk9UIHBhcnQgb2YgdGhlXG4gKiBvcmlnaW5hbCBwdWJsaXNoZWQgcGFja2FnZSAodGhlIHRhcmJhbGwgYXQgdGhlIHJlc29sdmVkIFVSTCkgaXMgcmVtb3ZlZFxuICogZnJvbSB0aGUgdHJlZSBiZWZvcmUgY29tcHV0aW5nIHRoZSBkaWZmLiBUaGlzIHByZXZlbnRzIHRoZVxuICogXCItLS0gL2Rldi9udWxsXCIgKFwibmV3IGZpbGVcIikgZW50cmllcyB0aGF0IGFwcGVhciB3aGVuIGEgcGFja2FnZSBtYW5hZ2VyXG4gKiBpbnN0YWxsIGluIHRoZSB0ZW1wIGRpcmVjdG9yeSBwcm9kdWNlcyBhIHNsaWdodGx5IGRpZmZlcmVudCBmaWxlIGxheW91dFxuICogdGhhbiB0aGUgdXNlcidzIGBub2RlX21vZHVsZXNgIGNvcHkuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgd2hlbiB0aGUgYmFzZWxpbmUgY2Fubm90IGJlIGRldGVybWluZWQg4oCUIGNhbGxlcnMgd2FybiB0aGVcbiAqIHVzZXIgYW5kIHByb2NlZWQgd2l0aG91dCBzdHJpY3QgZmlsdGVyaW5nLlxuICovXG5leHBvcnQgdHlwZSBTdHJpY3RCYXNlbGluZVByb3ZpZGVyID0ge1xuICAvKiogU2V0IG9mIHJlbGF0aXZlIGZpbGUgcGF0aHMgKGZvcndhcmQgc2xhc2hlcykgdGhhdCB0aGUgb3JpZ2luYWxcbiAgICogcHVibGlzaGVkIHBhY2thZ2UgY29udGFpbmVkLCBvciBgbnVsbGAgaWYgbm90IGRldGVybWluYWJsZS4gKi9cbiAgZ2V0T3JpZ2luYWxUYXJiYWxsRmlsZXMoKTogUHJvbWlzZTxTZXQ8c3RyaW5nPiB8IG51bGw+XG59XG5cbi8qKlxuICogQnVpbGQgYSBiYXNlbGluZSBwcm92aWRlciBmb3IgYSBnaXZlbiBwYWNrYWdlIHJlc29sdXRpb24uXG4gKlxuICogYHJlc29sdXRpb25gIGlzIHdoYXRldmVyIGBnZXRQYWNrYWdlUmVzb2x1dGlvbmAgcmV0dXJuZWQg4oCUIHR5cGljYWxseTpcbiAqICAtIFwiaHR0cHM6Ly9yZWdpc3RyeS55YXJucGtnLmNvbS9mb28vLS9mb28tMS4yLjMudGd6I3NoYTUxMi0uLi5cIiAgKHlhcm4gLyBidW4ubG9ja2IpXG4gKiAgLSBcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2Zvby8tL2Zvby0xLjIuMy50Z3pcIiAgICAgICAgICAgICAgIChucG0gdmlhIGxvY2tmaWxlKVxuICogIC0gXCIxLjIuM1wiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmVyc2lvbi1vbmx5LCBlLmcuIGJ1bi5sb2NrIHRleHQpXG4gKiAgLSBcIm5wbTpiYXJAMS4yLjNcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGlhcylcbiAqICAtIFwiZmlsZTouL3BhdGhcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvY2FsIGZpbGUpXG4gKiAgLSBcImdpdCtodHRwczovLy4uLlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnaXQgdXJsKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RyaWN0QmFzZWxpbmUoe1xuICBwYWNrYWdlTmFtZSxcbiAgcmVzb2x1dGlvbixcbiAgYXBwUGF0aCxcbn06IHtcbiAgcGFja2FnZU5hbWU6IHN0cmluZ1xuICByZXNvbHV0aW9uOiBzdHJpbmdcbiAgYXBwUGF0aDogc3RyaW5nXG59KTogU3RyaWN0QmFzZWxpbmVQcm92aWRlciB7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0T3JpZ2luYWxUYXJiYWxsRmlsZXMoKSB7XG4gICAgICAvLyBDQVNFIDE6IGZpbGU6Li9wYXRoIC0+IHdhbGsgbG9jYWwgZGlyZWN0b3J5IGFuZCByZXR1cm4gcmVsYXRpdmUgcGF0aHNcbiAgICAgIGlmIChwcm9jZXNzLmVudi5QQVRDSF9QQUNLQUdFX0RFQlVHKSB7XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKFxuICAgICAgICAgIGBbc3RyaWN0XSByZXNvbHZpbmcgJHtwYWNrYWdlTmFtZX0gcmVzb2x1dGlvbj0ke0pTT04uc3RyaW5naWZ5KHJlc29sdXRpb24pfVxcbmAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChyZXNvbHV0aW9uLnN0YXJ0c1dpdGgoXCJmaWxlOlwiKSkge1xuICAgICAgICBjb25zdCBsb2NhbFBhdGggPSByZXNvbHZlUGF0aChhcHBQYXRoLCByZXNvbHV0aW9uLnNsaWNlKFwiZmlsZTpcIi5sZW5ndGgpKVxuICAgICAgICBpZiAoIWV4aXN0c1N5bmMobG9jYWxQYXRoKSkgcmV0dXJuIG51bGxcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoc3RhdFN5bmMobG9jYWxQYXRoKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Fsa0xvY2FsRGlyZWN0b3J5KGxvY2FsUGF0aCwgbG9jYWxQYXRoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICAvLyBDQVNFIDI6IGxvb2tzIGxpa2UgYSAudGd6IFVSTCAtPiBkb3dubG9hZCwgZ3VuemlwLCBwYXJzZSB0YXJcbiAgICAgIGlmIChcbiAgICAgICAgcmVzb2x1dGlvbi5lbmRzV2l0aChcIi50Z3pcIikgfHxcbiAgICAgICAgcmVzb2x1dGlvbi5lbmRzV2l0aChcIi50YXIuZ3pcIikgfHxcbiAgICAgICAgL1xcYmh0dHBzPzpcXC9cXC8uKlxcLih0Z3p8dGFyXFwuZ3opKFxcP3wjfCQpL2kudGVzdChyZXNvbHV0aW9uKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHJlc29sdXRpb24uc3BsaXQoXCIjXCIpWzBdXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdGFyYmFsbCA9IGF3YWl0IGZldGNoQnVmZmVyKHVybClcbiAgICAgICAgICByZXR1cm4gbmV3IFNldChsaXN0VGFyR3pFbnRyaWVzKHRhcmJhbGwpKVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENBU0UgMzogbG9va3MgbGlrZSBhIGdpdCBVUkxcbiAgICAgIGlmIChyZXNvbHV0aW9uLnN0YXJ0c1dpdGgoXCJnaXQrXCIpIHx8IHJlc29sdXRpb24uZW5kc1dpdGgoXCIuZ2l0XCIpKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIC8vIENBU0UgNDogcGxhaW4gdmVyc2lvbiBsaWtlIFwiMS4yLjNcIiwgcG9zc2libHkgd2l0aCBhbiBgbnBtOmAgYWxpYXNcbiAgICAgIC8vIC0+IHJlc29sdmUgdmlhIHRoZSBucG0gcmVnaXN0cnkgbWV0YWRhdGEgZW5kcG9pbnRcbiAgICAgIGNvbnN0IGFsaWFzUmVzb2x2ZWQgPSBwYXJzZU5wbUFsaWFzKHJlc29sdXRpb24pXG4gICAgICBjb25zdCBuYW1lID0gYWxpYXNSZXNvbHZlZC5uYW1lID8/IHBhY2thZ2VOYW1lXG4gICAgICBjb25zdCB2ZXJzaW9uID0gYWxpYXNSZXNvbHZlZC52ZXJzaW9uID8/IHJlc29sdXRpb25cbiAgICAgIGlmICghdmVyc2lvbi5tYXRjaCgvXnY/XFxkLykpIHJldHVybiBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuUEFUQ0hfUEFDS0FHRV9ERUJVRykge1xuICAgICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKFxuICAgICAgICAgICAgYFtzdHJpY3RdIGNhc2UgNDogbmFtZT0ke25hbWV9IHZlcnNpb249JHt2ZXJzaW9ufVxcbmAsXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmJhbGxVcmwgPSBhd2FpdCBmZXRjaFRhcmJhbGxVcmxGcm9tUmVnaXN0cnkobmFtZSwgdmVyc2lvbilcbiAgICAgICAgaWYgKCF0YXJiYWxsVXJsKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52LlBBVENIX1BBQ0tBR0VfREVCVUcpIHtcbiAgICAgICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKFxuICAgICAgICAgICAgICBgW3N0cmljdF0gcmVnaXN0cnkgbG9va3VwIHJldHVybmVkIG5vIHRhcmJhbGwgVVJMXFxuYCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuUEFUQ0hfUEFDS0FHRV9ERUJVRykge1xuICAgICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBbc3RyaWN0XSBkb3dubG9hZGluZyAke3RhcmJhbGxVcmx9XFxuYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXJiYWxsID0gYXdhaXQgZmV0Y2hCdWZmZXIodGFyYmFsbFVybClcbiAgICAgICAgY29uc3QgZW50cmllcyA9IGxpc3RUYXJHekVudHJpZXModGFyYmFsbClcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52LlBBVENIX1BBQ0tBR0VfREVCVUcpIHtcbiAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShcbiAgICAgICAgICAgIGBbc3RyaWN0XSBwYXJzZWQgJHtlbnRyaWVzLmxlbmd0aH0gZW50cmllcyBmcm9tIHRhcmJhbGxcXG5gLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFNldChlbnRyaWVzKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuUEFUQ0hfUEFDS0FHRV9ERUJVRykge1xuICAgICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKFxuICAgICAgICAgICAgYFtzdHJpY3RdIGNhc2UgNCB0aHJldzogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1cXG5gLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgIH0sXG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VOcG1BbGlhcyhyZXNvbHV0aW9uOiBzdHJpbmcpOiB7XG4gIG5hbWU/OiBzdHJpbmdcbiAgdmVyc2lvbj86IHN0cmluZ1xufSB7XG4gIGlmIChyZXNvbHV0aW9uLnN0YXJ0c1dpdGgoXCJucG06XCIpKSB7XG4gICAgY29uc3QgcmVzdCA9IHJlc29sdXRpb24uc2xpY2UoXCJucG06XCIubGVuZ3RoKVxuICAgIGNvbnN0IGF0SWR4ID0gcmVzdC5sYXN0SW5kZXhPZihcIkBcIilcbiAgICBpZiAoYXRJZHggPiAwKSB7XG4gICAgICByZXR1cm4geyBuYW1lOiByZXN0LnNsaWNlKDAsIGF0SWR4KSwgdmVyc2lvbjogcmVzdC5zbGljZShhdElkeCArIDEpIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgbmFtZTogcmVzdCB9XG4gIH1cbiAgaWYgKC9edj9cXGQvLnRlc3QocmVzb2x1dGlvbikpIHtcbiAgICByZXR1cm4geyB2ZXJzaW9uOiByZXNvbHV0aW9uIH1cbiAgfVxuICByZXR1cm4ge31cbn1cblxuLyoqIFdhbGtzIGEgbG9jYWwgZGlyZWN0b3J5IHJlY3Vyc2l2ZWx5IGFuZCByZXR1cm5zIGZvcndhcmQtc2xhc2ggcmVsYXRpdmUgcGF0aHMuICovXG5mdW5jdGlvbiB3YWxrTG9jYWxEaXJlY3Rvcnkocm9vdDogc3RyaW5nLCBjdXJyZW50OiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB7XG4gIGNvbnN0IG91dCA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgZW50cnkgb2YgcmVhZGRpclN5bmMoY3VycmVudCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pKSB7XG4gICAgY29uc3QgYWJzID0gam9pbihjdXJyZW50LCBlbnRyeS5uYW1lKVxuICAgIGNvbnN0IHJlbCA9IGFicy5zbGljZShyb290Lmxlbmd0aCArIDEpLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpXG4gICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIG91dC5hZGQocmVsICsgXCIvXCIpXG4gICAgICBmb3IgKGNvbnN0IHN1YiBvZiB3YWxrTG9jYWxEaXJlY3Rvcnkocm9vdCwgYWJzKSkge1xuICAgICAgICBvdXQuYWRkKHN1YilcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRmlsZSgpKSB7XG4gICAgICBvdXQuYWRkKHJlbClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG4vKipcbiAqIEZldGNoZXMgdGhlIGBkaXN0LnRhcmJhbGxgIFVSTCBmb3IgYSBwYWNrYWdlIHZlcnNpb24gZnJvbSB0aGUgbnBtIHJlZ2lzdHJ5XG4gKiBtZXRhZGF0YSBlbmRwb2ludC4gUmV0dXJucyBudWxsIGlmIHRoZSBwYWNrYWdlL3ZlcnNpb24gY2FuJ3QgYmUgZm91bmQuXG4gKi9cbmZ1bmN0aW9uIGZldGNoVGFyYmFsbFVybEZyb21SZWdpc3RyeShcbiAgbmFtZTogc3RyaW5nLFxuICB2ZXJzaW9uOiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgY29uc3QgZW5jb2RlZE5hbWUgPSBuYW1lLnN0YXJ0c1dpdGgoXCJAXCIpXG4gICAgPyBcIkBcIiArIGVuY29kZVVSSUNvbXBvbmVudChuYW1lLnNsaWNlKDEpKVxuICAgIDogZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpXG4gIGNvbnN0IHVybCA9IGBodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8ke2VuY29kZWROYW1lfS8ke2VuY29kZVVSSUNvbXBvbmVudCh2ZXJzaW9uKX1gXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZVApID0+IHtcbiAgICBmZXRjaEpzb24odXJsKVxuICAgICAgLnRoZW4oKGpzb24pID0+IHtcbiAgICAgICAgY29uc3QgdGFyYmFsbCA9IGpzb24/LmRpc3Q/LnRhcmJhbGxcbiAgICAgICAgcmVzb2x2ZVAodHlwZW9mIHRhcmJhbGwgPT09IFwic3RyaW5nXCIgPyB0YXJiYWxsIDogbnVsbClcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4gcmVzb2x2ZVAobnVsbCkpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGZldGNoQnVmZmVyKHVybDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlUCwgcmVqZWN0UCkgPT4ge1xuICAgIGxldCBwYXJzZWQ6IFVSTFxuICAgIHRyeSB7XG4gICAgICBwYXJzZWQgPSBuZXcgVVJMKHVybClcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJlamVjdFAobmV3IEVycm9yKGBJbnZhbGlkIFVSTDogJHt1cmx9YCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgbGliID0gcGFyc2VkLnByb3RvY29sID09PSBcImh0dHBzOlwiID8gaHR0cHNSZXF1ZXN0IDogaHR0cFJlcXVlc3RcbiAgICBjb25zdCBvcHRzID0ge1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgaG9zdG5hbWU6IHBhcnNlZC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IHBhcnNlZC5wb3J0IHx8IChwYXJzZWQucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIgPyA0NDMgOiA4MCksXG4gICAgICBwYXRoOiBwYXJzZWQucGF0aG5hbWUgKyBwYXJzZWQuc2VhcmNoLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBcIlVzZXItQWdlbnRcIjogXCJwYXRjaC1wYWNrYWdlXCIsXG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0sICovKlwiLFxuICAgICAgfSxcbiAgICB9IGFzIFJlcXVlc3RPcHRpb25zICYgSHR0cFJlcXVlc3RPcHRpb25zXG4gICAgY29uc3QgcmVxID0gbGliKG9wdHMsIChyZXMpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgJiZcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgPj0gMzAwICYmXG4gICAgICAgIHJlcy5zdGF0dXNDb2RlIDwgNDAwICYmXG4gICAgICAgIHJlcy5oZWFkZXJzLmxvY2F0aW9uXG4gICAgICApIHtcbiAgICAgICAgZmV0Y2hCdWZmZXIocmVzLmhlYWRlcnMubG9jYXRpb24pLnRoZW4ocmVzb2x2ZVAsIHJlamVjdFApXG4gICAgICAgIHJlcy5yZXN1bWUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgIHJlamVjdFAobmV3IEVycm9yKGBIVFRQICR7cmVzLnN0YXR1c0NvZGV9IGZvciAke3VybH1gKSlcbiAgICAgICAgcmVzLnJlc3VtZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdXG4gICAgICByZXMub24oXCJkYXRhXCIsIChjOiBCdWZmZXIpID0+IGNodW5rcy5wdXNoKGMpKVxuICAgICAgcmVzLm9uKFwiZW5kXCIsICgpID0+IHJlc29sdmVQKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSkpXG4gICAgICByZXMub24oXCJlcnJvclwiLCByZWplY3RQKVxuICAgIH0pXG4gICAgcmVxLm9uKFwiZXJyb3JcIiwgcmVqZWN0UClcbiAgICByZXEuc2V0VGltZW91dCgxNTAwMCwgKCkgPT5cbiAgICAgIHJlcS5kZXN0cm95KG5ldyBFcnJvcihcIlRhcmJhbGwgZG93bmxvYWQgdGltZWQgb3V0XCIpKSxcbiAgICApXG4gICAgcmVxLmVuZCgpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGZldGNoSnNvbih1cmw6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gIHJldHVybiBmZXRjaEJ1ZmZlcih1cmwpLnRoZW4oKGJ1ZikgPT4gSlNPTi5wYXJzZShidWYudG9TdHJpbmcoXCJ1dGY4XCIpKSlcbn1cblxuLyoqXG4gKiBMaXN0cyB0aGUgZmlsZSBwYXRocyBpbnNpZGUgYSBnemlwcGVkIHRhcmJhbGwgYnVmZmVyLlxuICpcbiAqIFRhciBmb3JtYXQ6IDUxMi1ieXRlIGhlYWRlciArIDxzaXplPiBieXRlcyBvZiBmaWxlIGNvbnRlbnQsIHBhZGRlZCB0b1xuICogdGhlIG5leHQgNTEyLWJ5dGUgYm91bmRhcnkuIFdlIGRvbid0IGV4dHJhY3QgZmlsZSBjb250ZW50cyDigJQgb25seSB0aGVcbiAqIGBuYW1lYCBmaWVsZCBvZiBlYWNoIGhlYWRlciBpcyByZWFkLCB3aGljaCBpcyBlbm91Z2ggdG8gY29tcHV0ZSB0aGVcbiAqIGJhc2VsaW5lIGZpbGUgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdFRhckd6RW50cmllcyh0YXJHejogQnVmZmVyKTogc3RyaW5nW10ge1xuICBjb25zdCB0YXIgPSBndW56aXBTeW5jKHRhckd6KVxuICBjb25zdCBvdXQ6IHN0cmluZ1tdID0gW11cbiAgY29uc3QgSEVBREVSX1NJWkUgPSA1MTJcbiAgY29uc3QgQkxPQ0tfU0laRSA9IDUxMlxuXG4gIC8vIENvbW1vbiBwcmVmaXggKGUuZy4gXCJwYWNrYWdlL1wiKSB0aGF0IG5wbSBhbmQgeWFybiBhZGQgdG8gZXZlcnkgZW50cnkg4oCUXG4gIC8vIHN0cmlwcGVkIHNvIHBhdGhzIG1hdGNoIHRoZSB1c2VyJ3Mgbm9kZV9tb2R1bGVzIGxheW91dC5cbiAgbGV0IGxlYWRpbmdQcmVmaXg6IHN0cmluZyB8IG51bGwgPSBudWxsXG5cbiAgbGV0IG9mZnNldCA9IDBcbiAgd2hpbGUgKG9mZnNldCArIEhFQURFUl9TSVpFIDw9IHRhci5sZW5ndGgpIHtcbiAgICBpZiAoXG4gICAgICB0YXJbb2Zmc2V0XSA9PT0gMCAmJlxuICAgICAgdGFyLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgSEVBREVSX1NJWkUpLmV2ZXJ5KChiKSA9PiBiID09PSAwKVxuICAgICkge1xuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lID0gcmVhZENTdHJpbmcodGFyLCBvZmZzZXQsIDEwMClcbiAgICBjb25zdCBzaXplT2N0YWwgPSByZWFkQ1N0cmluZyh0YXIsIG9mZnNldCArIDEyNCwgMTIpXG4gICAgY29uc3QgdHlwZUZsYWcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRhcltvZmZzZXQgKyAxNTZdKVxuXG4gICAgY29uc3QgZW50cnlTaXplID0gcGFyc2VPY3RhbChzaXplT2N0YWwpIHx8IDBcbiAgICBjb25zdCBwYWRkZWRTaXplID0gTWF0aC5jZWlsKGVudHJ5U2l6ZSAvIEJMT0NLX1NJWkUpICogQkxPQ0tfU0laRVxuXG4gICAgLy8gUEFYIGV4dGVuZGVkIGhlYWRlciAvIGxvbmctbmFtZSByZWRpcmVjdCDigJQgc2tpcCBpdHMgYmxvY2tzIG9ubHkuXG4gICAgaWYgKHR5cGVGbGFnID09PSBcInhcIiB8fCB0eXBlRmxhZyA9PT0gXCJnXCIgfHwgdHlwZUZsYWcgPT09IFwiTFwiKSB7XG4gICAgICBvZmZzZXQgKz0gSEVBREVSX1NJWkUgKyBwYWRkZWRTaXplXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChsZWFkaW5nUHJlZml4ID09PSBudWxsICYmIG5hbWUpIHtcbiAgICAgIGNvbnN0IGZpcnN0U2xhc2ggPSBuYW1lLmluZGV4T2YoXCIvXCIpXG4gICAgICBsZWFkaW5nUHJlZml4ID0gZmlyc3RTbGFzaCA+PSAwID8gbmFtZS5zbGljZSgwLCBmaXJzdFNsYXNoICsgMSkgOiBcIlwiXG4gICAgfVxuXG4gICAgaWYgKGxlYWRpbmdQcmVmaXggJiYgbmFtZS5zdGFydHNXaXRoKGxlYWRpbmdQcmVmaXgpKSB7XG4gICAgICBjb25zdCBjbGVhbmVkID0gbmFtZS5zbGljZShsZWFkaW5nUHJlZml4Lmxlbmd0aClcbiAgICAgIGlmIChjbGVhbmVkICYmICFjbGVhbmVkLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICBvdXQucHVzaChjbGVhbmVkKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmFtZSAmJiAhbmFtZS5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgIG91dC5wdXNoKG5hbWUpXG4gICAgfVxuXG4gICAgb2Zmc2V0ICs9IEhFQURFUl9TSVpFICsgcGFkZGVkU2l6ZVxuICB9XG5cbiAgcmV0dXJuIG91dFxufVxuXG4vKiogUmVhZCBhIE5VTC10ZXJtaW5hdGVkIFVURi04IHN0cmluZyBvZiBgbWF4TGVuYCBieXRlcyBhdCBgb2Zmc2V0YC4gKi9cbmZ1bmN0aW9uIHJlYWRDU3RyaW5nKGJ1ZjogQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgbWF4TGVuOiBudW1iZXIpOiBzdHJpbmcge1xuICBjb25zdCBzbGljZSA9IGJ1Zi5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIG1heExlbilcbiAgY29uc3QgbnVsSWR4ID0gc2xpY2UuaW5kZXhPZigwKVxuICByZXR1cm4gc2xpY2Uuc3ViYXJyYXkoMCwgbnVsSWR4IDwgMCA/IG1heExlbiA6IG51bElkeCkudG9TdHJpbmcoXCJ1dGY4XCIpXG59XG5cbi8qKiBQYXJzZSBhbiBvY3RhbCBzdHJpbmcgKGUuZy4gXCIwMDAxNDJcIikgaW50byBhIG51bWJlci4gKi9cbmZ1bmN0aW9uIHBhcnNlT2N0YWwoczogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgdHJpbW1lZCA9IHMucmVwbGFjZSgvXFwwL2csIFwiXCIpLnRyaW0oKVxuICBpZiAoIXRyaW1tZWQpIHJldHVybiAwXG4gIGlmICgvXlswLTddKyQvLnRlc3QodHJpbW1lZCkpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQodHJpbW1lZCwgOClcbiAgfVxuICByZXR1cm4gMFxufVxuXG4vKipcbiAqIFJlbW92ZXMgZmlsZXMgZnJvbSBgdHJlZVJvb3RgIHdob3NlIHJlbGF0aXZlIHBhdGhzIChmb3J3YXJkIHNsYXNoZXMsIHNhbnNcbiAqIGxlYWRpbmcgYC4vYCkgYXJlIE5PVCBpbiBgYmFzZWxpbmVgLiBBbnkgZGlyZWN0b3J5IHRoYXQgYmVjb21lcyBlbXB0eSBhc1xuICogYSBzaWRlIGVmZmVjdCBpcyBhbHNvIHJlbW92ZWQsIHNvIGdpdCBkb2Vzbid0IGluY2x1ZGUgZW1wdHktZGlyIG5vaXNlIGluXG4gKiB0aGUgcmVzdWx0aW5nIHBhdGNoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmVUb0Jhc2VsaW5lKFxuICB0cmVlUm9vdDogc3RyaW5nLFxuICBiYXNlbGluZTogU2V0PHN0cmluZz4sXG4pOiB7IHBydW5lZDogbnVtYmVyIH0ge1xuICBsZXQgcHJ1bmVkID0gMFxuICB3YWxrKHRyZWVSb290LCAoYWJzUGF0aCwgcmVsYXRpdmVQYXRoKSA9PiB7XG4gICAgaWYgKCFzdGF0U3luYyhhYnNQYXRoKS5pc0ZpbGUoKSkgcmV0dXJuXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHJlbGF0aXZlUGF0aC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKVxuICAgIGlmICghYmFzZWxpbmUuaGFzKG5vcm1hbGl6ZWQpKSB7XG4gICAgICByZW1vdmVTeW5jKGFic1BhdGgpXG4gICAgICBwcnVuZWQrK1xuICAgIH1cbiAgfSlcbiAgcHJ1bmVFbXB0eURpcnModHJlZVJvb3QpXG4gIHJldHVybiB7IHBydW5lZCB9XG59XG5cbmZ1bmN0aW9uIHdhbGsoXG4gIHJvb3Q6IHN0cmluZyxcbiAgdmlzaXQ6IChhYnNQYXRoOiBzdHJpbmcsIHJlbFBhdGg6IHN0cmluZykgPT4gdm9pZCxcbik6IHZvaWQge1xuICBmdW5jdGlvbiByZWN1cnNlKGFic1BhdGg6IHN0cmluZywgcmVsUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZW50cmllcyA9IHJlYWRkaXJTeW5jKGFic1BhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KVxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgY29uc3QgY2hpbGRBYnMgPSBqb2luKGFic1BhdGgsIGVudHJ5Lm5hbWUpXG4gICAgICBjb25zdCBjaGlsZFJlbCA9IHJlbFBhdGggPyBgJHtyZWxQYXRofS8ke2VudHJ5Lm5hbWV9YCA6IGVudHJ5Lm5hbWVcbiAgICAgIGlmIChlbnRyeS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIHJlY3Vyc2UoY2hpbGRBYnMsIGNoaWxkUmVsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmlzaXQoY2hpbGRBYnMsIGNoaWxkUmVsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZWN1cnNlKHJvb3QsIFwiXCIpXG59XG5cbmZ1bmN0aW9uIHBydW5lRW1wdHlEaXJzKHJvb3Q6IHN0cmluZyk6IHZvaWQge1xuICBmdW5jdGlvbiByZWN1cnNlKGRpcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZW50cmllcyA9IHJlYWRkaXJTeW5jKGRpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBpZiAoIWVudHJ5LmlzRGlyZWN0b3J5KCkpIGNvbnRpbnVlXG4gICAgICBjb25zdCBjaGlsZCA9IGpvaW4oZGlyLCBlbnRyeS5uYW1lKVxuICAgICAgcmVjdXJzZShjaGlsZClcbiAgICB9XG4gICAgaWYgKGRpciAhPT0gcm9vdCAmJiByZWFkZGlyU3luYyhkaXIpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcm1kaXJTeW5jKGRpcilcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmVjdXJzZShyb290KVxufVxuIl19
|