@hestia-earth/ui-components 0.13.0 → 0.13.2
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/esm2020/files/files-error-summary.model.mjs +4 -3
- package/esm2020/files/files-error.model.mjs +10 -5
- package/esm2020/files/files-form/files-form.component.mjs +3 -3
- package/esm2020/files/files-upload-errors/files-upload-errors.component.mjs +121 -0
- package/esm2020/files/files.module.mjs +8 -4
- package/esm2020/files/index.mjs +2 -1
- package/esm2020/impact-assessments/impact-assessments-products/impact-assessments-products.component.mjs +3 -2
- package/fesm2015/hestia-earth-ui-components.mjs +135 -15
- package/fesm2015/hestia-earth-ui-components.mjs.map +1 -1
- package/fesm2020/hestia-earth-ui-components.mjs +135 -15
- package/fesm2020/hestia-earth-ui-components.mjs.map +1 -1
- package/files/files-error.model.d.ts +1 -1
- package/files/files-upload-errors/files-upload-errors.component.d.ts +66 -0
- package/files/files.module.d.ts +8 -7
- package/files/index.d.ts +1 -0
- package/package.json +2 -1
|
@@ -32,8 +32,9 @@ export const buildSummary = (nodes = [], errors = [], summaryData = []) => from(
|
|
|
32
32
|
const node = get(nodes, error.nodeIndex, null);
|
|
33
33
|
const label = (dataPath ? dataPath.label : node?.type) || '';
|
|
34
34
|
const term = error.params?.term || findNodeTerm(node, error);
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
prev[message] = prev[message] || {};
|
|
36
|
+
const key = [level, label].join('.');
|
|
37
|
+
set(prev[message], key, get(prev[message], key, []));
|
|
37
38
|
prev[message][level][label].push({ node, error, term });
|
|
38
39
|
return prev;
|
|
39
40
|
}, {}), mergeMap(data => from(Object.keys(data)).pipe(filter(message => !!message), mergeMap(message => Object.entries(data[message])
|
|
@@ -47,4 +48,4 @@ export const buildSummary = (nodes = [], errors = [], summaryData = []) => from(
|
|
|
47
48
|
count: summaries.length,
|
|
48
49
|
showErrors: summaryShowErrors(summaryData, { level: level, path, message })
|
|
49
50
|
})))), filter(({ formattedMessage }) => !!formattedMessage))), toArray(), map(values => values.sort(({ level }) => level === 'error' ? -1 : 1)));
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3Itc3VtbWFyeS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9maWxlcy9maWxlcy1lcnJvci1zdW1tYXJ5Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDN0IsT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDO0FBQzdCLE9BQU8sRUFBc0IsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTdDLE9BQU8sRUFFTCxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUN4RCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQTJCbkQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUE0QixFQUFFLEdBQVcsRUFBRSxFQUFFO0lBQzdELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxHQUFHLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRSxPQUFPLFFBQVEsS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3BFLENBQUMsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBNEIsRUFBRSxFQUFFLFFB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QUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHJlZHVjZSwgdG9BcnJheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLmdldCc7XG5pbXBvcnQgc2V0IGZyb20gJ2xvZGFzaC5zZXQnO1xuaW1wb3J0IHsgSlNPTiBhcyBIZXN0aWFKc29uLCBTY2hlbWFUeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5cbmltcG9ydCB7XG4gIElWYWxpZGF0aW9uRXJyb3IsIElWYWxpZGF0aW9uRXJyb3JXaXRoSW5kZXgsIHZhbGlkYXRpb25FcnJvckxldmVsLFxuICBjb2RlLCBmaWx0ZXJFcnJvciwgZm9ybWF0RXJyb3IsIG5vZGVMaW5rLCBwYXJzZURhdGFQYXRoXG59IGZyb20gJy4vZmlsZXMtZXJyb3IubW9kZWwnO1xuaW1wb3J0IHsgZGF0YVBhdGhUb0tleSB9IGZyb20gJy4vZmlsZXMtZm9ybS5tb2RlbCc7XG5cbmludGVyZmFjZSBJU3VtbWFyeUVycm9yIHtcbiAgbm9kZTogSGVzdGlhSnNvbjxTY2hlbWFUeXBlPjtcbiAgZXJyb3I6IElWYWxpZGF0aW9uRXJyb3I7XG4gIHRlcm0/OiBhbnk7XG59XG5cbmludGVyZmFjZSBJU3VtbWFyeUdyb3VwZWQge1xuICBbbWVzc2FnZTogc3RyaW5nXToge1xuICAgIFtsZXZlbDogc3RyaW5nXToge1xuICAgICAgW2xhYmVsOiBzdHJpbmddOiBJU3VtbWFyeUVycm9yW107XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU3VtbWFyeSB7XG4gIGxldmVsOiB2YWxpZGF0aW9uRXJyb3JMZXZlbDtcbiAgcGF0aDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGZvcm1hdHRlZE1lc3NhZ2U6IHN0cmluZztcbiAgY291bnQ6IG51bWJlcjtcbiAgc2hvd0Vycm9yczogYm9vbGVhbjtcbiAgZXJyb3JzOiBJU3VtbWFyeUVycm9yW107XG4gIHRlcm1zPzogc3RyaW5nO1xufVxuXG5jb25zdCBub2RlVGVybSA9IChub2RlOiBIZXN0aWFKc29uPFNjaGVtYVR5cGU+LCBrZXk6IHN0cmluZykgPT4ge1xuICBjb25zdCB0ZXJtVHlwZSA9IGdldChub2RlLCBgJHtrZXl9LnR5cGVgLCBnZXQobm9kZSwgYCR7a2V5fS5AdHlwZWAsIG51bGwpKTtcbiAgcmV0dXJuIHRlcm1UeXBlID09PSBTY2hlbWFUeXBlLlRlcm0gPyBnZXQobm9kZSwga2V5LCBudWxsKSA6IG51bGw7XG59O1xuXG5jb25zdCBmaW5kTm9kZVRlcm0gPSAobm9kZTogSGVzdGlhSnNvbjxTY2hlbWFUeXBlPiwgeyBkYXRhUGF0aCB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PlxuICBub2RlVGVybShub2RlLCBkYXRhUGF0aFRvS2V5KGRhdGFQYXRoKSkgfHxcbiAgbm9kZVRlcm0obm9kZSwgYCR7ZGF0YVBhdGhUb0tleShkYXRhUGF0aCl9LnRlcm1gKSB8fFxuICBub2RlVGVybShub2RlLCBkYXRhUGF0aFRvS2V5KGRhdGFQYXRoLCB0cnVlKSkgfHxcbiAgbm9kZVRlcm0obm9kZSwgYCR7ZGF0YVBhdGhUb0tleShkYXRhUGF0aCwgdHJ1ZSl9LnRlcm1gKTtcblxuY29uc3QgdW5pcXVlVGVybXMgPSAoZXJyb3JzOiBJU3VtbWFyeUVycm9yW10pID0+IHVuaXF1ZShcbiAgZXJyb3JzXG4gICAgLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm0gPyBub2RlTGluayh0ZXJtKSB8fCBjb2RlKHRlcm0ubmFtZSB8fCB0ZXJtWydAaWQnXSB8fCB0ZXJtLmlkKSA6IG51bGwpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuKTtcblxuY29uc3Qgc3VtbWFyeVNob3dFcnJvcnMgPSAoc3VtbWFyeURhdGE6IElTdW1tYXJ5W10sIHsgcGF0aCwgbGV2ZWwsIG1lc3NhZ2UgfTogUGFydGlhbDxJU3VtbWFyeT4pID0+XG4gIHN1bW1hcnlEYXRhLmZpbmQoc3VtbWFyeSA9PlxuICAgIHN1bW1hcnkucGF0aCA9PT0gcGF0aCAmJiBzdW1tYXJ5LmxldmVsID09PSBsZXZlbCAmJiBzdW1tYXJ5Lm1lc3NhZ2UgPT09IG1lc3NhZ2VcbiAgKT8uc2hvd0Vycm9ycyB8fCB0cnVlO1xuXG4vKipcbiAqIEJ1aWxkIHRoZSBzdW1tYXJ5IG9iamVjdHMuXG4gKlxuICogQHBhcmFtIG5vZGVzIFRoZSBsaXN0IG9mIG5vZGVzLlxuICogQHBhcmFtIGVycm9ycyBUaGUgbGlzdCBvZiBlcnJvcnMgcGVyIG5vZGUuXG4gKiBAcGFyYW0gc3VtbWFyeURhdGEgVGhlIHByZXZpb3VzbHkgY29tcHV0ZWQgc3VtbWFyeSBvYmplY3RzLlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkU3VtbWFyeSA9IChcbiAgbm9kZXM6IEhlc3RpYUpzb248U2NoZW1hVHlwZT5bXSA9IFtdLFxuICBlcnJvcnM6IChJVmFsaWRhdGlvbkVycm9yW10gfCBJVmFsaWRhdGlvbkVycm9yV2l0aEluZGV4KVtdID0gW10sXG4gIHN1bW1hcnlEYXRhOiBJU3VtbWFyeVtdID0gW11cbikgPT5cbiAgZnJvbShlcnJvcnMpLnBpcGUoXG4gICAgbWVyZ2VNYXAoZXJyb3IgPT4gJ2Vycm9yJyBpbiBlcnJvciA/IChlcnJvciBhcyBJVmFsaWRhdGlvbkVycm9yV2l0aEluZGV4KS5lcnJvciA6IGVycm9yKSxcbiAgICBmaWx0ZXIoZmlsdGVyRXJyb3IpLFxuICAgIHJlZHVjZSgocHJldiwgZXJyb3IpID0+IHtcbiAgICAgIGNvbnN0IHsgbGV2ZWwsIG1lc3NhZ2UgfSA9IGVycm9yO1xuICAgICAgY29uc3QgW2RhdGFQYXRoXSA9IHBhcnNlRGF0YVBhdGgoZXJyb3IuZGF0YVBhdGgpO1xuICAgICAgY29uc3Qgbm9kZSA9IGdldChub2RlcywgZXJyb3Iubm9kZUluZGV4LCBudWxsKTtcbiAgICAgIGNvbnN0IGxhYmVsID0gKGRhdGFQYXRoID8gZGF0YVBhdGgubGFiZWwgOiBub2RlPy50eXBlKSB8fCAnJztcbiAgICAgIGNvbnN0IHRlcm0gPSBlcnJvci5wYXJhbXM/LnRlcm0gfHwgZmluZE5vZGVUZXJtKG5vZGUsIGVycm9yKTtcbiAgICAgIGNvbnN0IGtleSA9IFttZXNzYWdlLCBsZXZlbCwgbGFiZWxdLmpvaW4oJy4nKTtcbiAgICAgIHNldChwcmV2LCBrZXksIGdldChwcmV2LCBrZXksIFtdKSk7XG4gICAgICBwcmV2W21lc3NhZ2VdW2xldmVsXVtsYWJlbF0ucHVzaCh7IG5vZGUsIGVycm9yLCB0ZXJtIH0pO1xuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwge30gYXMgSVN1bW1hcnlHcm91cGVkKSxcbiAgICBtZXJnZU1hcChkYXRhID0+IGZyb20oT2JqZWN0LmtleXMoZGF0YSkpLnBpcGUoXG4gICAgICBmaWx0ZXIobWVzc2FnZSA9PiAhIW1lc3NhZ2UpLFxuICAgICAgbWVyZ2VNYXAobWVzc2FnZSA9PlxuICAgICAgICBPYmplY3QuZW50cmllcyhkYXRhW21lc3NhZ2VdKVxuICAgICAgICAuZmxhdE1hcCgoW2xldmVsLCBwYXRoc10pID0+IE9iamVjdC5lbnRyaWVzKHBhdGhzKS5tYXAoKFtwYXRoLCBzdW1tYXJpZXNdKSA9PiAoe1xuICAgICAgICAgIGxldmVsLFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBmb3JtYXR0ZWRNZXNzYWdlOiBmb3JtYXRFcnJvcihzdW1tYXJpZXNbMF0uZXJyb3IsIHN1bW1hcmllcy5sZW5ndGgpPy5tZXNzYWdlLFxuICAgICAgICAgIHRlcm1zOiB1bmlxdWVUZXJtcyhzdW1tYXJpZXMpLmpvaW4oJyA7ICcpLFxuICAgICAgICAgIGVycm9yczogc3VtbWFyaWVzLFxuICAgICAgICAgIGNvdW50OiBzdW1tYXJpZXMubGVuZ3RoLFxuICAgICAgICAgIHNob3dFcnJvcnM6IHN1bW1hcnlTaG93RXJyb3JzKHN1bW1hcnlEYXRhLCB7IGxldmVsOiBsZXZlbCBhcyB2YWxpZGF0aW9uRXJyb3JMZXZlbCwgcGF0aCwgbWVzc2FnZSB9KVxuICAgICAgICB9IGFzIElTdW1tYXJ5KSkpXG4gICAgICApLFxuICAgICAgZmlsdGVyKCh7IGZvcm1hdHRlZE1lc3NhZ2UgfSkgPT4gISFmb3JtYXR0ZWRNZXNzYWdlKVxuICAgICkpLFxuICAgIHRvQXJyYXkoKSxcbiAgICBtYXAodmFsdWVzID0+IHZhbHVlcy5zb3J0KCh7IGxldmVsIH0pID0+IGxldmVsID09PSAnZXJyb3InID8gLTEgOiAxKSlcbiAgKTtcbiJdfQ==
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3Itc3VtbWFyeS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9maWxlcy9maWxlcy1lcnJvci1zdW1tYXJ5Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDN0IsT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDO0FBQzdCLE9BQU8sRUFBc0IsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTdDLE9BQU8sRUFFTCxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUN4RCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQTJCbkQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUE0QixFQUFFLEdBQVcsRUFBRSxFQUFFO0lBQzdELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxHQUFHLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRSxPQUFPLFFBQVEsS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3BFLENBQUMsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBNEIsRUFBRSxFQUFFLFFB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RUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FDckQsQ0FBQyxFQUNGLE9BQU8sRUFBRSxFQUNULEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDdEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgcmVkdWNlLCB0b0FycmF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0JztcbmltcG9ydCBzZXQgZnJvbSAnbG9kYXNoLnNldCc7XG5pbXBvcnQgeyBKU09OIGFzIEhlc3RpYUpzb24sIFNjaGVtYVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcblxuaW1wb3J0IHtcbiAgSVZhbGlkYXRpb25FcnJvciwgSVZhbGlkYXRpb25FcnJvcldpdGhJbmRleCwgdmFsaWRhdGlvbkVycm9yTGV2ZWwsXG4gIGNvZGUsIGZpbHRlckVycm9yLCBmb3JtYXRFcnJvciwgbm9kZUxpbmssIHBhcnNlRGF0YVBhdGhcbn0gZnJvbSAnLi9maWxlcy1lcnJvci5tb2RlbCc7XG5pbXBvcnQgeyBkYXRhUGF0aFRvS2V5IH0gZnJvbSAnLi9maWxlcy1mb3JtLm1vZGVsJztcblxuaW50ZXJmYWNlIElTdW1tYXJ5RXJyb3Ige1xuICBub2RlOiBIZXN0aWFKc29uPFNjaGVtYVR5cGU+O1xuICBlcnJvcjogSVZhbGlkYXRpb25FcnJvcjtcbiAgdGVybT86IGFueTtcbn1cblxuaW50ZXJmYWNlIElTdW1tYXJ5R3JvdXBlZCB7XG4gIFttZXNzYWdlOiBzdHJpbmddOiB7XG4gICAgW2xldmVsOiBzdHJpbmddOiB7XG4gICAgICBbbGFiZWw6IHN0cmluZ106IElTdW1tYXJ5RXJyb3JbXTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdW1tYXJ5IHtcbiAgbGV2ZWw6IHZhbGlkYXRpb25FcnJvckxldmVsO1xuICBwYXRoOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZm9ybWF0dGVkTWVzc2FnZTogc3RyaW5nO1xuICBjb3VudDogbnVtYmVyO1xuICBzaG93RXJyb3JzOiBib29sZWFuO1xuICBlcnJvcnM6IElTdW1tYXJ5RXJyb3JbXTtcbiAgdGVybXM/OiBzdHJpbmc7XG59XG5cbmNvbnN0IG5vZGVUZXJtID0gKG5vZGU6IEhlc3RpYUpzb248U2NoZW1hVHlwZT4sIGtleTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHRlcm1UeXBlID0gZ2V0KG5vZGUsIGAke2tleX0udHlwZWAsIGdldChub2RlLCBgJHtrZXl9LkB0eXBlYCwgbnVsbCkpO1xuICByZXR1cm4gdGVybVR5cGUgPT09IFNjaGVtYVR5cGUuVGVybSA/IGdldChub2RlLCBrZXksIG51bGwpIDogbnVsbDtcbn07XG5cbmNvbnN0IGZpbmROb2RlVGVybSA9IChub2RlOiBIZXN0aWFKc29uPFNjaGVtYVR5cGU+LCB7IGRhdGFQYXRoIH06IElWYWxpZGF0aW9uRXJyb3IpID0+XG4gIG5vZGVUZXJtKG5vZGUsIGRhdGFQYXRoVG9LZXkoZGF0YVBhdGgpKSB8fFxuICBub2RlVGVybShub2RlLCBgJHtkYXRhUGF0aFRvS2V5KGRhdGFQYXRoKX0udGVybWApIHx8XG4gIG5vZGVUZXJtKG5vZGUsIGRhdGFQYXRoVG9LZXkoZGF0YVBhdGgsIHRydWUpKSB8fFxuICBub2RlVGVybShub2RlLCBgJHtkYXRhUGF0aFRvS2V5KGRhdGFQYXRoLCB0cnVlKX0udGVybWApO1xuXG5jb25zdCB1bmlxdWVUZXJtcyA9IChlcnJvcnM6IElTdW1tYXJ5RXJyb3JbXSkgPT4gdW5pcXVlKFxuICBlcnJvcnNcbiAgICAubWFwKCh7IHRlcm0gfSkgPT4gdGVybSA/IG5vZGVMaW5rKHRlcm0pIHx8IGNvZGUodGVybS5uYW1lIHx8IHRlcm1bJ0BpZCddIHx8IHRlcm0uaWQpIDogbnVsbClcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4pO1xuXG5jb25zdCBzdW1tYXJ5U2hvd0Vycm9ycyA9IChzdW1tYXJ5RGF0YTogSVN1bW1hcnlbXSwgeyBwYXRoLCBsZXZlbCwgbWVzc2FnZSB9OiBQYXJ0aWFsPElTdW1tYXJ5PikgPT5cbiAgc3VtbWFyeURhdGEuZmluZChzdW1tYXJ5ID0+XG4gICAgc3VtbWFyeS5wYXRoID09PSBwYXRoICYmIHN1bW1hcnkubGV2ZWwgPT09IGxldmVsICYmIHN1bW1hcnkubWVzc2FnZSA9PT0gbWVzc2FnZVxuICApPy5zaG93RXJyb3JzIHx8IHRydWU7XG5cbi8qKlxuICogQnVpbGQgdGhlIHN1bW1hcnkgb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gbm9kZXMgVGhlIGxpc3Qgb2Ygbm9kZXMuXG4gKiBAcGFyYW0gZXJyb3JzIFRoZSBsaXN0IG9mIGVycm9ycyBwZXIgbm9kZS5cbiAqIEBwYXJhbSBzdW1tYXJ5RGF0YSBUaGUgcHJldmlvdXNseSBjb21wdXRlZCBzdW1tYXJ5IG9iamVjdHMuXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgYnVpbGRTdW1tYXJ5ID0gKFxuICBub2RlczogSGVzdGlhSnNvbjxTY2hlbWFUeXBlPltdID0gW10sXG4gIGVycm9yczogKElWYWxpZGF0aW9uRXJyb3JbXSB8IElWYWxpZGF0aW9uRXJyb3JXaXRoSW5kZXgpW10gPSBbXSxcbiAgc3VtbWFyeURhdGE6IElTdW1tYXJ5W10gPSBbXVxuKSA9PlxuICBmcm9tKGVycm9ycykucGlwZShcbiAgICBtZXJnZU1hcChlcnJvciA9PiAnZXJyb3InIGluIGVycm9yID8gKGVycm9yIGFzIElWYWxpZGF0aW9uRXJyb3JXaXRoSW5kZXgpLmVycm9yIDogZXJyb3IpLFxuICAgIGZpbHRlcihmaWx0ZXJFcnJvciksXG4gICAgcmVkdWNlKChwcmV2LCBlcnJvcikgPT4ge1xuICAgICAgY29uc3QgeyBsZXZlbCwgbWVzc2FnZSB9ID0gZXJyb3I7XG4gICAgICBjb25zdCBbZGF0YVBhdGhdID0gcGFyc2VEYXRhUGF0aChlcnJvci5kYXRhUGF0aCk7XG4gICAgICBjb25zdCBub2RlID0gZ2V0KG5vZGVzLCBlcnJvci5ub2RlSW5kZXgsIG51bGwpO1xuICAgICAgY29uc3QgbGFiZWwgPSAoZGF0YVBhdGggPyBkYXRhUGF0aC5sYWJlbCA6IG5vZGU/LnR5cGUpIHx8ICcnO1xuICAgICAgY29uc3QgdGVybSA9IGVycm9yLnBhcmFtcz8udGVybSB8fCBmaW5kTm9kZVRlcm0obm9kZSwgZXJyb3IpO1xuICAgICAgcHJldlttZXNzYWdlXSA9IHByZXZbbWVzc2FnZV0gfHwge307XG4gICAgICBjb25zdCBrZXkgPSBbbGV2ZWwsIGxhYmVsXS5qb2luKCcuJyk7XG4gICAgICBzZXQocHJldlttZXNzYWdlXSwga2V5LCBnZXQocHJldlttZXNzYWdlXSwga2V5LCBbXSkpO1xuICAgICAgcHJldlttZXNzYWdlXVtsZXZlbF1bbGFiZWxdLnB1c2goeyBub2RlLCBlcnJvciwgdGVybSB9KTtcbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIHt9IGFzIElTdW1tYXJ5R3JvdXBlZCksXG4gICAgbWVyZ2VNYXAoZGF0YSA9PiBmcm9tKE9iamVjdC5rZXlzKGRhdGEpKS5waXBlKFxuICAgICAgZmlsdGVyKG1lc3NhZ2UgPT4gISFtZXNzYWdlKSxcbiAgICAgIG1lcmdlTWFwKG1lc3NhZ2UgPT5cbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZGF0YVttZXNzYWdlXSlcbiAgICAgICAgLmZsYXRNYXAoKFtsZXZlbCwgcGF0aHNdKSA9PiBPYmplY3QuZW50cmllcyhwYXRocykubWFwKChbcGF0aCwgc3VtbWFyaWVzXSkgPT4gKHtcbiAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgZm9ybWF0dGVkTWVzc2FnZTogZm9ybWF0RXJyb3Ioc3VtbWFyaWVzWzBdLmVycm9yLCBzdW1tYXJpZXMubGVuZ3RoKT8ubWVzc2FnZSxcbiAgICAgICAgICB0ZXJtczogdW5pcXVlVGVybXMoc3VtbWFyaWVzKS5qb2luKCcgOyAnKSxcbiAgICAgICAgICBlcnJvcnM6IHN1bW1hcmllcyxcbiAgICAgICAgICBjb3VudDogc3VtbWFyaWVzLmxlbmd0aCxcbiAgICAgICAgICBzaG93RXJyb3JzOiBzdW1tYXJ5U2hvd0Vycm9ycyhzdW1tYXJ5RGF0YSwgeyBsZXZlbDogbGV2ZWwgYXMgdmFsaWRhdGlvbkVycm9yTGV2ZWwsIHBhdGgsIG1lc3NhZ2UgfSlcbiAgICAgICAgfSBhcyBJU3VtbWFyeSkpKVxuICAgICAgKSxcbiAgICAgIGZpbHRlcigoeyBmb3JtYXR0ZWRNZXNzYWdlIH0pID0+ICEhZm9ybWF0dGVkTWVzc2FnZSlcbiAgICApKSxcbiAgICB0b0FycmF5KCksXG4gICAgbWFwKHZhbHVlcyA9PiB2YWx1ZXMuc29ydCgoeyBsZXZlbCB9KSA9PiBsZXZlbCA9PT0gJ2Vycm9yJyA/IC0xIDogMSkpXG4gICk7XG4iXX0=
|
|
@@ -210,14 +210,14 @@ const customErrorMessage = {
|
|
|
210
210
|
'pastureGrass key units must be \'ha\'': ({ params }) => `The Term ${code(params?.term.name)} can't be used as a key for Pasture grass.
|
|
211
211
|
Please use the Term describing the plant with the units ${code(params.expected)} instead.
|
|
212
212
|
This will help us gap-fill the amount of grass consumed by the herd.`,
|
|
213
|
-
'is outside confidence interval': ({ params }) => `${params?.outliers.map(value => `The product value ${code(value)} is ${value > params?.min ? 'above' : 'below'} ${code(`${(params?.threshold + ((1 - params?.threshold) / 2)) * 100}%`)} of all ${code(params?.term.name)} data in ${code(params?.country.name)} on the Hestia platform.`)}
|
|
213
|
+
'is outside confidence interval': ({ dataPath, params }) => `${params?.outliers.map(value => `The ${dataPath.includes('product') ? 'product' : 'value'} value ${code(value)} is ${value > params?.min ? 'above' : 'below'} ${code(`${(params?.threshold + ((1 - params?.threshold) / 2)) * 100}%`)} of all ${params.group ? code(params.group) : code(params?.term.name)} data in ${code(params?.country.name)} on the Hestia platform.`)}
|
|
214
214
|
Please double-check ${params?.outliers.length > 1 ? 'these values' : 'this value'} before submitting.`,
|
|
215
215
|
'should be equal to boundary': ({ params }) => `The calculated area from ${code('boundary')} is ${code(params.expected)}.
|
|
216
216
|
This may be an error if the boundary represents the area under cultivation.`,
|
|
217
217
|
'must specify the fate of cropResidue': () => `For sites of type cropland or permanent pasture, if data completeness is marked true for crop residue,
|
|
218
218
|
the fate of the residue must be fully specified.
|
|
219
219
|
The fate must be added using:
|
|
220
|
-
<ul class="is-pl-3 is-list-style-disc">
|
|
220
|
+
<ul class="is-pl-3 is-list-style-disc is-nowrap">
|
|
221
221
|
<li>the ${glossaryTypeLink(TermTermType.cropResidueManagement)} practices;</li>
|
|
222
222
|
<li>the ${glossaryTypeLink(TermTermType.cropResidue)} products</li>
|
|
223
223
|
</ul>
|
|
@@ -227,13 +227,18 @@ const customErrorMessage = {
|
|
|
227
227
|
You have not specified the fate of the crop residue.
|
|
228
228
|
Adding this information will improve emissions and soil carbon stock calculations.
|
|
229
229
|
The fate can be added using:
|
|
230
|
-
<ul class="is-pl-3 is-list-style-disc">
|
|
230
|
+
<ul class="is-pl-3 is-list-style-disc is-nowrap">
|
|
231
231
|
<li>the ${glossaryTypeLink(TermTermType.cropResidueManagement)} practices;</li>
|
|
232
232
|
<li>the ${glossaryTypeLink(TermTermType.cropResidue)} products;</li>
|
|
233
233
|
</ul>
|
|
234
234
|
Remember to set ${code('completeness.cropResidue')} to ${code('true')}
|
|
235
235
|
if the above and below ground crop residue quantities and fates are specified.
|
|
236
|
-
|
|
236
|
+
`,
|
|
237
|
+
'should have the same privacy as the related source': ({ params }) => `To link to a ${params?.defaultSource?.dataPrivate ? 'private' : 'public'} Source,
|
|
238
|
+
this Node needs to be ${params?.defaultSource?.dataPrivate ? 'private' : 'public'} as well.
|
|
239
|
+
Please set ${code('dataPrivate')}=${code(`${params?.defaultSource?.dataPrivate}`)}.`,
|
|
240
|
+
'should not use not relevant model': () => `All emissions should generally have a method tier, which states how the data were modelled or how the data were collected.
|
|
241
|
+
Please see the ${schemaLink('Emission#methodTier', 'schema')} for the options available and definitions of the options.`
|
|
237
242
|
};
|
|
238
243
|
export const formatCustomErrorMessage = (message, error, errorCount = 1) => {
|
|
239
244
|
const formattedMessage = message && message in customErrorMessage ?
|
|
@@ -256,4 +261,4 @@ export const filterError = (error) => [
|
|
|
256
261
|
isFailingKeywordError
|
|
257
262
|
].every(func => !func(error));
|
|
258
263
|
export const missingNodeErrors = (errors) => errors.filter(({ keyword, params }) => keyword === 'required' && (params?.missingProperty === '@type' || params?.missingProperty === '@id'));
|
|
259
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmlsZXMvZmlsZXMtZXJyb3IubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBUSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBMkJoRCxNQUFNLGVBQWUsR0FBRyx5Q0FBeUMsQ0FBQztBQUVsRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDN0MsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLENBQUM7QUFDaEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZLElBQUkscUJB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QyxPQUFPLEtBQUssVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsS0FBSyxPQUFPLElBQUksTUFBTSxFQUFFLGVBQWUsS0FBSyxLQUFLLENBQUMsQ0FDckcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCB7IFNjaGVtYVR5cGUsIFNpdGVTaXRlVHlwZSwgVGVybSwgVGVybVRlcm1UeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgdG9QcmVjaXNpb24sIGtleVRvTGFiZWwgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcblxuaW1wb3J0IHsgdGVybVR5cGVMYWJlbCB9IGZyb20gJy4uL3Rlcm1zL3Rlcm1zLm1vZGVsJztcbmltcG9ydCB7IHBhdGhUb0FwaURvY3NQYXRoIH0gZnJvbSAnLi4vZW5naW5lL2VuZ2luZS5zZXJ2aWNlJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLi9jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgcGx1cmFsaXplIH0gZnJvbSAnLi4vY29tbW9uL3BsdXJhbGl6ZSc7XG5cbi8vIFRPRE86IGFkZCBtb3JlIHZhbGlkYXRpb24ga2V5d29yZCBhbmQgcGFyYW1zXG5leHBvcnQgdHlwZSB2YWxpZGF0aW9uRXJyb3JMZXZlbCA9ICdlcnJvcicgfCAnd2FybmluZyc7XG5leHBvcnQgdHlwZSB2YWxpZGF0aW9uRXJyb3JQYXJhbSA9ICdtaXNzaW5nUHJvcGVydHknIHwgJ3R5cGUnIHwgJ3Rlcm0nIHwgJ21vZGVsJyB8ICdwcm9kdWN0JyB8ICdyYW5nZScgfCAnbm9kZScgfFxuICAnYWxsb3dlZFZhbHVlcycgfCAnYWRkaXRpb25hbFByb3BlcnR5JyB8ICdleHBlY3RlZCcgfCAnZGVmYXVsdCcgfCAnY3VycmVudCcgfCAncGVyY2VudGFnZScgfCAna2V5cycgfCAndGhyZXNob2xkJyB8XG4gICdvdXRsaWVycycgfCAnY291bnRyeScgfCAnbWluJyB8ICdtYXgnO1xuZXhwb3J0IHR5cGUgdmFsaWRhdGlvbkVycm9yS2V5d29yZCA9ICdyZXF1aXJlZCcgfCAndHlwZScgfCAnaWYnIHwgJ3RoZW4nO1xuXG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0aW9uRXJyb3Ige1xuICBpbmRleD86IG51bWJlcjtcbiAgbm9kZUluZGV4PzogbnVtYmVyO1xuICBsZXZlbD86IHZhbGlkYXRpb25FcnJvckxldmVsO1xuICBkYXRhUGF0aD86IHN0cmluZztcbiAgc2NoZW1hUGF0aD86IHN0cmluZztcbiAga2V5d29yZD86IHZhbGlkYXRpb25FcnJvcktleXdvcmQ7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgcGFyYW1zPzogeyBba2V5IGluIHZhbGlkYXRpb25FcnJvclBhcmFtXT86IGFueSB9O1xuICBtYXBFcnJvcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRpb25FcnJvcldpdGhJbmRleCB7XG4gIGVycm9yOiBJVmFsaWRhdGlvbkVycm9yW107XG4gIGluZGV4OiBudW1iZXI7XG4gIGNoYW5nZWQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBtYXBFcnJvck1lc3NhZ2UgPSAnZG9lcyBub3QgY29udGFpbiBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlJztcblxuZXhwb3J0IGNvbnN0IHBhcnNlRGF0YVBhdGggPSAoZGF0YVBhdGggPSAnJykgPT4ge1xuICBjb25zdCBbXywgLi4ucGF0aHNdID0gZGF0YVBhdGguc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHBhdGhzLm1hcChwYXRoID0+ICh7IHBhdGgsIGxhYmVsOiBrZXlUb0xhYmVsKHBhdGgucmVwbGFjZSgvXFxbXFxkK1xcXS9nLCAnJykpIH0pKTtcbn07XG5cbmNvbnN0IGNvbnRhY3RVc0VtYWlsID0gJ2NvbW11bml0eUBoZXN0aWEuZWFydGgnO1xuY29uc3QgZXh0ZXJuYWxMaW5rID0gKGhyZWY6IHN0cmluZywgdGV4dDogc3RyaW5nKSA9PiBgPGEgaHJlZj1cIiR7aHJlZn1cIiB0YXJnZXQ9XCJfYmxhbmtcIj4ke3RleHR9PC9hPmA7XG5jb25zdCBnbG9zc2FyeUxpbmsgPSAodGV4dDogc3RyaW5nKSA9PlxuICBleHRlcm5hbExpbmsoYCR7YmFzZVVybCgpfS9nbG9zc2FyeWAsIHRleHQpO1xuY29uc3QgZ2xvc3NhcnlUeXBlTGluayA9ICh0eXBlOiBUZXJtVGVybVR5cGUsIHRleHQgPSB0ZXJtVHlwZUxhYmVsKHR5cGUpKSA9PlxuICBleHRlcm5hbExpbmsoYCR7YmFzZVVybCgpfS9nbG9zc2FyeT90ZXJtVHlwZT0ke3R5cGV9YCwgdGV4dCk7XG5jb25zdCB0ZXJtTGluayA9ICh7IGlkLCBuYW1lIH06IFBhcnRpYWw8VGVybT4pID0+XG4gIGV4dGVybmFsTGluayhgJHtiYXNlVXJsKCl9L3Rlcm0vJHtpZH1gLCBuYW1lISk7XG5leHBvcnQgY29uc3Qgbm9kZUxpbmsgPSAoeyAnQHR5cGUnOiB0eXBlLCAnQGlkJzogaWQsIG5hbWUgfSkgPT5cbiAgdHlwZSAmJiBpZCA/IGA8YSBocmVmPVwiLyR7dHlwZS50b0xvd2VyQ2FzZSgpfS8ke2lkfVwiIHRhcmdldD1cIl9ibGFua1wiPiR7bmFtZSB8fCBpZH08L2E+YCA6IG51bGw7XG5jb25zdCBzY2hlbWFMaW5rID0gKHR5cGU6IHN0cmluZywgdGl0bGUgPSB0eXBlKSA9PiBgPGEgaHJlZj1cIiR7YmFzZVVybCgpfS9zY2hlbWEvJHt0eXBlfVwiIHRhcmdldD1cIl9ibGFua1wiPiR7dGl0bGV9PC9hPmA7XG5leHBvcnQgY29uc3QgY29kZSA9ICh0ZXh0OiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKSA9PiBgPGNvZGU+JHt0ZXh0fTwvY29kZT5gO1xuY29uc3QgZGF0ZUZvcm1hdE1lc3NhZ2UgPVxuICBgc2hvdWxkIGZvbGxvdyB0aGUgSVNPIDg2MDEgZGF0ZSBmb3JtYXQsIGUuZy4gJHtjb2RlKDIwMDApfSwgb3IgJHtjb2RlKCcyMDAwLTEyJyl9LCBvciAke2NvZGUoJzIwMDAtMTItMzAnKX1gO1xuY29uc3QgY29udGFjdFVzID0gKHRleHQgPSAnY29udGFjdCB1cycpID0+IGA8YSBocmVmPVwibWFpbHRvOiR7Y29udGFjdFVzRW1haWx9XCI+JHt0ZXh0fTwvYT5gO1xuY29uc3QgbW9kZWxMaW5rID0gKHRlcm06IFRlcm0sIG1vZGVsOiBUZXJtKSA9PiBgXG4gIDxhIGhyZWY9XCIke3BhdGhUb0FwaURvY3NQYXRoKG1vZGVsWydAaWQnXSwgdGVybVsnQGlkJ10pfVwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgIDxzcGFuIGNsYXNzPVwicHItMVwiPiR7bW9kZWwubmFtZX08L3NwYW4+XG4gICAgPHNwYW4+KFZpZXcgRG9jcyk8L3NwYW4+XG4gIDwvYT5cbmA7XG5jb25zdCB0aHJlc2hvbGQgPSAodmFsdWU6IG51bWJlcikgPT4gY29kZShgJHt2YWx1ZSAqIDEwMH0lYCk7XG5cbmNvbnN0IG5vVGlsbGFnZTogUGFydGlhbDxUZXJtPiA9IHtpZDogJ25vVGlsbGFnZScsIG5hbWU6ICdObyB0aWxsYWdlJ307XG5cbmV4cG9ydCBjb25zdCBtaXNzaW5nTm9kZUVycm9yTWVzc2FnZSA9ICh7ICdAdHlwZSc6IF90LCB0eXBlLCBuYW1lIH06IGFueSkgPT5cbiAgKF90IHx8IHR5cGUpID09PSAnVGVybScgP1xuICAgIGAke25hbWUgPyBgVGhlIHRlcm0gXCIke25hbWV9XCJgIDogJ1RoaXMgdGVybSd9IGRvZXNuJ3QgbWF0Y2ggYSB0ZXJtIGluIHRoZSAke2dsb3NzYXJ5TGluaygnR2xvc3Nhcnkgb2YgVGVybXMnKX0uXG4gIFBsZWFzZSBjaGVjayB0aGUgJHtnbG9zc2FyeUxpbmsoJ0dsb3NzYXJ5Jyl9IGZvciB0aGUgY29ycmVjdCAke2NvZGUoJ0BpZCcpfSBvciAke2NvZGUoJ25hbWUnKX0gYW5kIHNwZWxsaW5nLmBcbiAgICA6IGBUaGlzICR7c2NoZW1hTGluayhfdCB8fCB0eXBlKX0gZG9lcyBub3QgZXhpc3QgaW4gSGVzdGlhLiBJZiB5b3UgYXJlIHRyeWluZyB0byBsaW5rIHRvIGFuIGV4aXN0aW5nXG4gICR7c2NoZW1hTGluayhfdCB8fCB0eXBlKX0gaW4gSGVzdGlhLCBwbGVhc2UgY2hlY2sgdGhlICR7Y29kZSgnbmFtZScpfSBvciAke2NvZGUoJ0BpZCcpfSBpcyBjb3JyZWN0LlxuICBJZiB5b3UgYXJlIHRyeWluZyB0byBjcmVhdGUgYSBuZXcgJHtzY2hlbWFMaW5rKF90IHx8IHR5cGUpfSwgcGxlYXNlIGlkZW50aWZ5IGl0IHdpdGggYW4gJHtjb2RlKCdpZCcpfSBmaWVsZC5gO1xuXG5jb25zdCBpZE5vdEZvdW5kRXJyb3IgPSBgRG9lcyBub3QgZXhpc3QgaW4gSGVzdGlhLlxuICBJZiB5b3UgYXJlIHVzaW5nIHRoZSAke2NvZGUoJ25hbWUnKX0gb2YgdGhlIFRlcm0sIHBsZWFzZSBtYWtlIHN1cmUgdG8gdXNlICR7Y29kZSgndGVybS5uYW1lJyl9IGNvbHVtbiBpbnN0ZWFkLmA7XG5cbi8vIHNldCBtZXNzYWdlIGFzIGVtcHR5IHRvIG5vdCBkaXNwbGF5IGl0XG5jb25zdCBjdXN0b21FcnJvck1lc3NhZ2U6IHtcbiAgW2tleTogc3RyaW5nXTogKGVycm9yOiBJVmFsaWRhdGlvbkVycm9yLCBlcnJvckNvdW50OiBudW1iZXIpID0+IHN0cmluZztcbn0gPSB7XG4gICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXCdAaWRcXCcnOiAoKSA9PiBpZE5vdEZvdW5kRXJyb3IsXG4gICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXCdAdHlwZVxcJyc6ICgpID0+ICcnLFxuICAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFwnaWRcXCcnOiAoKSA9PiBpZE5vdEZvdW5kRXJyb3IsXG4gICdzaG91bGQgbWF0Y2ggZXhhY3RseSBvbmUgc2NoZW1hIGluIG9uZU9mJzogKCkgPT4gJycsXG4gICdzaG91bGQgbWF0Y2ggc29tZSBzY2hlbWEgaW4gYW55T2YnOiAoKSA9PiAnJyxcbiAgJ3Nob3VsZCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBlcnJvckNvdW50ID09PSAxID9cbiAgICAgIGBUaGUgZm9sbG93aW5nIGZpZWxkIGRvZXMgbm90IGV4aXN0OiAke3BhcmFtcz8uYWRkaXRpb25hbFByb3BlcnR5fSBvciBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNhc2UuYCA6XG4gICAgICBgc2hvdWxkIG5vdCBoYXZlIGFkZGl0aW9uYWwgcHJvcGVydGllc2AsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl5cXFxcZHsxM30kXCInOiAoKSA9PiBgc2hvdWxkIGJlIGNvbXBvc2VkIG9mIDEzIG51bWJlcnNgLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeWzAtOV17NH0oLVswLTldezJ9KT8oLVswLTldezJ9KT8kXCInOiAoKSA9PiBkYXRlRm9ybWF0TWVzc2FnZSxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXihbMC05XXs0fXwtKSgtWzAtOV17Mn0pPygtWzAtOV17Mn0pPyRcIic6ICgpID0+IGRhdGVGb3JtYXRNZXNzYWdlLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeKFswLTldezR9fC0pKC1bMC05XXsyfSk/KC1bMC05XXsyfSk/KFtUXVswLTJdWzAtOV1cXDpbMC01XVswLTldXFw6WzAtNV1bMC05XSgoXFwrfFxcLSlbMC0xXVswLTldOlswLTVdWzAtOV0pPyk/JFwiJzogKCkgPT4gZGF0ZUZvcm1hdE1lc3NhZ2UsXG4gICdzaG91bGQgYmUgbGlua2VkIHRvIGFuIGV4aXN0aW5nIG5vZGUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgWW91ciBzdWJtaXNzaW9uIGRvZXMgbm90IGNvbnRhaW4gdGhlICR7cGFyYW1zPy5ub2RlPy50eXBlfSB3aXRoICR7Y29kZShgaWQ9JHtwYXJhbXM/Lm5vZGU/LmlkfWApfS5cbiAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBsaW5rIHRvIGFuIGV4aXN0aW5nICR7cGFyYW1zPy5ub2RlPy50eXBlfSBvbiB0aGUgSGVzdGlhIHBsYXRmb3JtLCB5b3UgbXVzdCB1c2UgJHtjb2RlKGBAaWQ9JHtwYXJhbXM/Lm5vZGU/LmlkfWApfSBpbnN0ZWFkLlxuICAgIE90aGVyd2lzZSB5b3UgbXVzdCBpbmNsdWRlIGEgZnVsbCAke3BhcmFtcz8ubm9kZT8udHlwZX0gd2l0aCBpZCAke2NvZGUocGFyYW1zPy5ub2RlPy5pZCl9LmAsXG4gICdtdXN0IGJlIHdpdGhpbiB0aGUgY291bnRyeSc6ICgpID0+IGBUaGUgY291bnRyeSBwcm92aWRlZCBkb2VzIG5vdCBjb250YWluIHRoZSByZWdpb24gcHJvdmlkZWQuIFBsZWFzZSBjaGVja1xuICB0aGUgY291bnRyeSBmb3IgZXJyb3JzIG9yIHRoZSByZWdpb24gZm9yIGVycm9ycywgYW5kIHJlZmVyZW5jZSB0aGUgJHtnbG9zc2FyeUxpbmsoJ0dsb3NzYXJ5IG9mIFRlcm1zJyl9LmAsXG4gIFttYXBFcnJvck1lc3NhZ2VdOiAoeyBkYXRhUGF0aCB9KSA9PlxuICAgIGRhdGFQYXRoID09PSAnLnJlZ2lvbicgPyBgVGhlIHJlZ2lvbiBwcm92aWRlZCBkb2VzIG5vdCBjb250YWluIHRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIHByb3ZpZGVkLiBQbGVhc2UgY2hlY2sgdGhlXG4gIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgZm9yIGVycm9ycyBvciB0aGUgcmVnaW9uIGZvciBlcnJvciwgYW5kIHJlZmVyZW5jZSB0aGUgJHtnbG9zc2FyeUxpbmsoJ0dsb3NzYXJ5IG9mIFRlcm1zJyl9LmAgOlxuICAgIGBUaGUgY291bnRyeSBwcm92aWRlZCBkb2VzIG5vdCBjb250YWluIHRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIHByb3ZpZGVkLiBQbGVhc2UgY2hlY2sgdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGVcbiAgZm9yIGVycm9ycyBvciB0aGUgY291bnRyeSBmb3IgZXJyb3JzLCBhbmQgcmVmZXJlbmNlIHRoZSAke2dsb3NzYXJ5TGluaygnR2xvc3Nhcnkgb2YgVGVybXMnKX0uYCxcbiAgJ3N1bSBub3QgZXF1YWwgdG8gMTAwJSBmb3Igc2FuZENvbnRlbnQsIHNpbHRDb250ZW50LCBjbGF5Q29udGVudCc6XG4gICAgKCkgPT4gYFRoZSBzdW0gb2YgU2FuZCwgU2lsdCwgYW5kIENsYXkgY29udGVudCBzaG91bGQgZXF1YWwgMTAwJSBmb3IgZWFjaCBzb2lsIGRlcHRoIGludGVydmFsLmAsXG4gICdpcyBvdXRzaWRlIHRoZSBhbGxvd2VkIHJhbmdlJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gcGFyYW1zPy50ZXJtXG4gICAgICAgICAgICA/IGBUaGUgdmFsdWUgZm9yICR7Y29kZShwYXJhbXM/LnRlcm1bJ0BpZCddIHx8IHBhcmFtcz8udGVybS5uYW1lKX0gaXMgb3V0c2lkZSB0aGUgcmFuZ2UgZXN0YWJsaXNoZWQgZm9yIHRoZSBzb2lsIHRleHR1cmUgeW91IHByb3ZpZGVkLlxuICAgICAgICAgICAgRm9yIHRoaXMgc29pbCB0ZXh0dXJlLCB0aGUgbWF4aW11bSAke2NvZGUocGFyYW1zPy50ZXJtWydAaWQnXSB8fCBwYXJhbXM/LnRlcm0ubmFtZSl9IGlzICR7cGFyYW1zPy5yYW5nZT8ubWF4fSBhbmQgdGhlIG1pbmltdW0gaXMgJHtwYXJhbXM/LnJhbmdlPy5taW59LmBcbiAgICAgICAgICAgIDogYERvZXMgbm90IG1hdGNoIHRoZSBwb3NzaWJsZSByYW5nZXMgb2Ygc2FuZCwgc2lsdCBhbmQgY2xheSBjb250ZW50LmBcbiAgICAgICAgOiBgRWFjaCBzb2lsIHRleHR1cmUgaGFzIGEgbWF4aW11bSBhbmQgbWluaW11bSB2YWx1ZSBmb3Igc2FuZCwgc2lsdCwgYW5kIGNsYXkgY29udGVudC5cbiAgICAgICAgQXQgbGVhc3Qgb25lIG1lYXN1cmVtZW50IG9mIHNhbmQsIHNpbHQsIG9yIGNsYXkgY29udGVudCBkb2VzIG5vdCBtYXRjaCB0aGUgcG9zc2libGUgcmFuZ2UgZm9yIHRoZSBzcGVjaWZpZWQgc29pbCB0ZXh0dXJlLmBcbiAgICB9XG4gICAgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgUGxlYXNlIGNoZWNrIHRoZSBtZWFzdXJlbWVudCwgaXRzIGRlcHRoIGludGVydmFscywgYW5kIHRoZSBkYXRlcyBvZiB0aGUgbWVhc3VyZW1lbnQgb3IgdXBkYXRlIHRoZSBzb2lsIHRleHR1cmUgaWYgbmVlZGVkLmBcbiAgICAgICAgOiBgUGxlYXNlIGNoZWNrIHlvdXIgbWVhc3VyZW1lbnRzLCB0aGVpciBkZXB0aCBpbnRlcnZhbHMsIGFuZCB0aGUgZGF0ZXMgb2YgdGhlIG1lYXN1cmVtZW50cyBvciB1cGRhdGUgdGhlIHNvaWwgdGV4dHVyZXMgaWYgbmVlZGVkLmBcbiAgICB9YCxcbiAgJ3Nob3VsZCBiZSBlcXVhbCB0byBvbmUgb2YgdGhlIGFsbG93ZWQgdmFsdWVzJzpcbiAgICAoeyBwYXJhbXMgfSkgPT4gYG11c3QgaGF2ZSBvbmUgb2YgdGhlc2UgdmFsdWVzOiAke3BhcmFtcz8uYWxsb3dlZFZhbHVlcy5tYXAoY29kZSkuam9pbignLCAnKX1gLFxuICAnaXMgbm90IGFsbG93ZWQgZm9yIHRoaXMgY2hhcmFjdGVyaXNlZEluZGljYXRvcic6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke2Vycm9yQ291bnQgPT09IDEgP1xuICAgICAgYCR7XG4gICAgICAgIHBhcmFtcz8uYWxsb3dlZFZhbHVlcy5sZW5ndGggP1xuICAgICAgICAgIGBjYW4gb25seSBiZSB1c2VkIHdpdGggb25lIG9mIHRoZXNlIG1ldGhvZHM6ICR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfWAgOlxuICAgICAgICAgIGBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZSBhbnkgbWV0aG9kIGFsbG93ZWQuIFBsZWFzZSAke2NvbnRhY3RVcygpfSB0byBjaGFuZ2UgdGhpcy5gXG4gICAgICB9LmAgOlxuICAgICAgYFNvbWUgVGVybXMgYXJlIG5vdCBhbGxvd2VkIHdpdGggdGhlIG1ldGhvZCB5b3Ugc2VsZWN0ZWQuYH1cbiAgICBZb3UgY2FuIGZpbmQgdGhlIGxpc3Qgb2YgYWxsb3dlZCBtZXRob2RzIGZvciBlYWNoIFRlcm0gYnkgY2xpY2tpbmcgb24gdGhlbS5gLFxuICAnc2hvdWxkIGNvbnRhaW4gYSB2YWxpZCBpdGVtJzogKHsgZGF0YVBhdGggfSkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCEpO1xuICAgIHJldHVybiBwYXRocy5sZW5ndGggPj0gMiA/XG4gICAgICBgVGhlICR7cGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0ucGF0aH0gcmVsYXRlZCB0byB0aGlzICR7cGx1cmFsaXplKHBhdGhzW3BhdGhzLmxlbmd0aCAtIDJdLmxhYmVsLCAxKX0gYXJlIGludmFsaWRgIDpcbiAgICAgIGBUaGUgJHtwYXRoc1swXS5wYXRofSBhcmUgaW52YWxpZGA7XG4gIH0sXG4gICdtYXkgYmUgYmV0d2VlbiAwIGFuZCAxMDAnOiAoKSA9PiAncGVyY2VudGFnZXMgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwLCBub3QgMCBhbmQgMS4gVGhpcyBtYXkgYmUgYW4gZXJyb3IuJyxcbiAgJ21heSBub3QgYWxsIGJlIHNldCB0byBmYWxzZSc6ICgpID0+XG4gICAgYEV2ZXJ5IHZhbHVlIGluIHRoZSBkYXRhIGNvbXBsZXRlbmVzcyBhc3Nlc3NtZW50IGlzICR7Y29kZSgnZmFsc2UnKX0uIFlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gZmlsbCBpdCBpbi5cbiAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBmaWxsIGl0IGluLCBwbGVhc2Ugc2VlIHRoZSAke3NjaGVtYUxpbmsoJ0N5Y2xlI2NvbXBsZXRlbmVzcycsICdzY2hlbWEnKX0uYCxcbiAgJ21heSBub3QgYmUgZW1wdHknOiAoKSA9PiAnaWYgdGhpcyB2YWx1ZSBzaWduaWZpZXMgbm8gZGF0YSwgSGVzdGlhIG9ubHkgYWNjZXB0cyBcIi1cIiBvciBlbXB0eSBmb3Igbm8gZGF0YScsXG4gICdtYXkgbm90IGJlIDAnOiAoeyBkYXRhUGF0aCB9LCBlcnJvckNvdW50KSA9PiB7XG4gICAgY29uc3QgcGF0aHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoISk7XG4gICAgcmV0dXJuIGBBZGRpbmcgYSB2YWx1ZSAke2Vycm9yQ291bnQgPT09IDEgPyBgIHRvIGV2ZXJ5ICR7cGF0aHNbMF0ubGFiZWx9IGAgOiAnICd9IGlzIGhpZ2hseSByZWNvbW1lbmRlZFxuICAgICAgYXMgd2l0aG91dCB0aGlzIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjYWxjdWxhdGUgdGhlIEltcGFjdCBBc3Nlc3NtZW50LlxuICAgICAgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB3ZSByZWNvbW1lbmQgc2V0dGluZyB2YWx1ZSB0byAwLmA7XG4gIH0sXG4gICd0aGUgc3VtIG9mIGFib3ZlIGdyb3VuZCBjcm9wIHJlc2lkdWUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyc6ICgpID0+XG4gICAgYEZvciBzaXRlcyBvZiB0eXBlICR7Y29kZShTaXRlU2l0ZVR5cGUuY3JvcGxhbmQpfSBvciAke2NvZGUoU2l0ZVNpdGVUeXBlWydwZXJtYW5lbnQgcGFzdHVyZSddKX0sXG4gICAgaWYgZGF0YSBjb21wbGV0ZW5lc3MgaXMgbWFya2VkIHRydWUgZm9yIGNyb3AgcmVzaWR1ZSxcbiAgICB0aGUgc3VtIG9mIHRoZSBBYm92ZSBncm91bmQgY3JvcCByZXNpZHVlIHRlcm1zIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gemVybyxcbiAgICBhbmQgQmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHplcm8uYCxcbiAgJ2xvbmdGYWxsb3dQZXJpb2QgbXVzdCBiZSBsb3dlciB0aGFuIDUgeWVhcnMnOiAoKSA9PlxuICAgIGBZb3VyIGxvbmdGYWxsb3dQZXJpb2QgaXMgZ3JlYXRlciB0aGFuIGZpdmUgeWVhcnMuXG4gICAgRmFsbG93IGlzIGRlZmluZWQgYnkgRkFPU1RBVCBhcyBsYW5kIGxlZnQgdW5jdWx0aXZhdGVkIGZvciBiZXR3ZWVuIDEgYW5kIDUgeWVhcnMsXG4gICAgYW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB1c2VkIGZvciBIZXN0aWEgYWxzby5gLFxuICAnc2hvdWxkIGJlIHdpdGhpbiBwZXJjZW50YWdlIG9mIGRlZmF1bHQgdmFsdWUnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBlcnJvckNvdW50ID09PSAxID9cbiAgICAgIGBpcyDCsSR7dGhyZXNob2xkKHBhcmFtcz8udGhyZXNob2xkKX0gZGlmZmVyZW50IHRvIG91ciBkZWZhdWx0IHZhbHVlIHdoaWNoIGlzICR7cGFyYW1zPy5kZWZhdWx0fS5cbiAgICAgIFBsZWFzZSBjaGVjayB5b3VyIHVwbG9hZGVkIGRhdGEgYXMgdGhpcyBtYXkgYmUgYW4gZXJyb3IuYCA6XG4gICAgICBgaXMgc3Vic3RhbnRpYWxseSBkaWZmZXJlbnQgdGhhbiBvdXIgZGVmYXVsdCB2YWx1ZS4gUGxlYXNlIGNoZWNrIHlvdXIgdXBsb2FkZWQgZGF0YSBhcyB0aGlzIG1heSBiZSBhbiBlcnJvci5gLFxuICAndGhlIHZhbHVlIHByb3ZpZGVkIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIG1vZGVsIHJlc3VsdCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBUaGUgZXhwZWN0ZWQgcmVzdWx0IGZvciAke2NvZGUocGFyYW1zPy50ZXJtLm5hbWUpfVxuICAgICR7cGFyYW1zPy5tb2RlbD8ubmFtZSA/IGB1c2luZyAke21vZGVsTGluayhwYXJhbXM/LnRlcm0sIHBhcmFtcz8ubW9kZWwpfSBgIDogJyd9XG4gICAgZnJvbSB0aGUgZGF0YSBwcm92aWRlZCBpbiB0aGUgdXBsb2FkIGlzICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYCR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmV4cGVjdGVkLCAzKSl9LCBidXQgdGhlIHZhbHVlIGluIHRoZSB1cGxvYWQgaXMgJHtjb2RlKHRvUHJlY2lzaW9uKHBhcmFtcz8uY3VycmVudCwgMykpfS5cbiAgICAgICAgJHtwYXJhbXM/LnRocmVzaG9sZCA/IGBPdXIgdGhyZXNob2xkIGlzIMKxJHt0aHJlc2hvbGQocGFyYW1zPy50aHJlc2hvbGQpfS5gIDogJyd9XG4gICAgICAgIFBsZWFzZSBlaXRoZXI6XG4gICAgICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kZWNpbWFsXCI+XG4gICAgICAgIDxsaT5DaGVjayB0aGUgJHtwYXJhbXM/LnRlcm0udGVybVR5cGV9IHZhbHVlIHlvdSBwcm92aWRlZDs8L2xpPlxuICAgICAgICA8bGk+Q2hlY2sgdGhlIGRhdGEgeW91IHByb3ZpZGVkIHdoaWNoIGlzIHRoZSBpbnB1dCBpbnRvIHRoaXMgbW9kZWw7PC9saT5cbiAgICAgICAgPGxpPkNhcmVmdWxseSByZWFkIHRoZSBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaWYgd2UgdXNlZCBhIGRlZmF1bHQgcHJvcGVydHkgYXMgcGFydCBvZiB0aGUgY2FsY3VsYXRpb25zLjwvbGk+XG4gICAgICAgIDwvdWw+YFxuICAgICAgICA6ICdub3QgY29uc2lzdGVudCB3aXRoIHRoZSBtb2RlbCByZXN1bHQuJ1xuICAgIH1gLFxuICAndGhlIG1lYXN1cmVtZW50IHByb3ZpZGVkIG1pZ2h0IGJlIGluIGVycm9yJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYFRoZSBleHBlY3RlZCB2YWx1ZSBmb3IgJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX1cbiAgICAke3BhcmFtcz8ubW9kZWw/Lm5hbWUgPyBgdXNpbmcgJHttb2RlbExpbmsocGFyYW1zPy50ZXJtLCBwYXJhbXM/Lm1vZGVsKX0gYCA6ICcnfVxuICAgIGZyb20gdGhlIGRhdGEgcHJvdmlkZWQgaW4gdGhlIHVwbG9hZCBpcyAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGAke2NvZGUodG9QcmVjaXNpb24ocGFyYW1zPy5leHBlY3RlZCwgMykpfSwgYnV0IHRoZSB2YWx1ZSBpbiB0aGUgdXBsb2FkIGlzICR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmN1cnJlbnQsIDMpKX0uXG4gICAgICAgICR7cGFyYW1zPy50aHJlc2hvbGQgPyBgT3VyIHRocmVzaG9sZCBpcyDCsSR7dGhyZXNob2xkKHBhcmFtcz8udGhyZXNob2xkKX0uYCA6ICcnfWAgOlxuICAgICAgICBgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgbW9kZWwgcmVzdWx0LmBcbiAgICB9YCxcbiAgJ211c3QgYmUgZXF1YWwgdG8gcHJldmlvdXMgcHJvZHVjdCBtdWx0aXBsaWVkIGJ5IHRoZSBzaGFyZSc6ICgpID0+XG4gICAgYFByb2R1Y3RzIGZyb20gYSB0cmFuc2Zvcm1hdGlvbiB3aGljaCBhcmUgYW4gSW5wdXQgaW4gdG8gdGhlIG5leHQgdHJhbnNmb3JtYXRpb24gbXVzdCBmb2xsb3cgdGhlIGZvbGxvd2luZyBydWxlOlxuICAgICR7Y29kZSgncHJldmlvdXMucHJvZHVjdC52YWx1ZSAqIGN1cnJlbnQudHJhbnNmb3JtZWRTaGFyZSAvIDEwMCA9PSBjdXJyZW50LmlucHV0LnZhbHVlJyl9YCxcbiAgJ2F0IGxlYXN0IG9uZSBJbnB1dCBtdXN0IGJlIGEgUHJvZHVjdCBvZiB0aGUgQ3ljbGUnOiAoKSA9PlxuICAgIGBBIFRyYW5zZm9ybWF0aW9uIGNvbnZlcnRzIGEgUHJvZHVjdCBmcm9tIGEgQ3ljbGUgaW50byBhbm90aGVyIFByb2R1Y3QuXG4gICAgVGhlcmVmb3JlLCBhdCBsZWFzdCBvbmUgSW5wdXQgaW50byB0aGUgVHJhbnNmb3JtYXRpb24gbXVzdCBiZSBhIFByb2R1Y3Qgb2YgdGhlIEN5Y2xlLmAsXG4gICdtdXN0IGhhdmUgb25seSBvbmUgZW50cnkgd2l0aCB0aGUgc2FtZSB0ZXJtLnRlcm1UeXBlID0gZXhjcmV0YU1hbmFnZW1lbnQnOiAoKSA9PlxuICAgIGBUaGVyZSBjYW4gb25seSBiZSBvbmUgUHJhY3RpY2Ugb2YgdHlwZSBleGNyZXRhTWFuYWdlbWVudCBpbiBhIEN5Y2xlLlxuICAgIFRvIHJlcHJlc2VudCBtdWx0aXBsZSBleGNyZXRhIG1hbmFnZW1lbnQgc3lzdGVtcyBlaXRoZXIgdXNlIG11bHRpcGxlIEN5Y2xlcyBhbmQgbGluayB0aGVtIHRvZ2V0aGVyLFxuICAgIG9yIHVzZSBUcmFuc2Zvcm1hdGlvbnMgd2l0aGluIGEgQ3ljbGUgYW5kIGxpbmsgdGhvc2UgdG9nZXRoZXIuYCxcbiAgJ211c3QgYmUgaW5jbHVkZWQgYXMgYW4gSW5wdXQnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgVGhlIGV4Y3JldGEgUHJvZHVjdHMgYXJlIG5vdCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSBleGNyZXRhIElucHV0cy5cbiAgICAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGBFLmcuLCB5b3UgY2Fubm90IGdldCAke1xuICAgICAgICAgIGNvZGUocGFyYW1zPy50ZXJtPy5uYW1lKVxuICAgICAgICB9IGZyb20gJHtcbiAgICAgICAgICAocGFyYW1zPy5leHBlY3RlZCB8fCBbXSkubWFwKHYgPT4gY29kZShrZXlUb0xhYmVsKHYpKSkuam9pbignIG9yICcpXG4gICAgICAgIH0uYCA6XG4gICAgICAgICcnXG4gICAgfVxuICAgIFBsZWFzZSBjaGVjayB0aGUgSW5wdXRzIGFuZCBQcm9kdWN0cyBvZiB0aGUgVHJhbnNmb3JtYXRpb24uYCxcbiAgJ211c3QgYWRkIHRoZSBsaW5rZWQgaW5wdXRzIHRvIHRoZSBjeWNsZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGBZb3UgaGF2ZSBzdGF0ZWQgdGhhdCAke2NvZGUocGFyYW1zPy50ZXJtPy5uYW1lKX0gd2FzIGNyZWF0ZWQgYnkgdGhlIGZvbGxvd2luZyBJbnB1dHMgJHtcbiAgICAgICAgICBwYXJhbXM/LmV4cGVjdGVkPy5tYXAoZSA9PiBjb2RlKGUubmFtZSkpLmpvaW4oJyAsICcpXG4gICAgICAgIH1gOlxuICAgICAgICAnWW91IGhhdmUgc3RhdGVkIHNvbWUgRW1pc3Npb25zIHdlcmUgY3JlYXRlZCBieSBzb21lIElucHV0cydcbiAgICB9LlxuICAgIEhvd2V2ZXIsIHRoZXNlIElucHV0cyBkbyBub3QgZXhpc3QgaW4gdGhlIEN5Y2xlLlxuICAgIFBsZWFzZSBhZGQgdGhlc2UgSW5wdXRzLCBldmVuIGlmIHlvdSBkbyBub3QgaGF2ZSBhIHZhbHVlIGZvciB0aGVtLmAsXG4gICdtdXN0IGFkZCB0aGUgbGlua2VkIHRyYW5zZm9ybWF0aW9ucyB0byB0aGUgY3ljbGUnOiAoeyBsZXZlbCwgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID9cbiAgICAgICAgYFlvdSBoYXZlIHNwZWNpZmllZCB0aGF0JHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9IHdhcyBjcmVhdGVkIGR1cmluZyBhIFRyYW5zZm9ybWF0aW9uIHdpdGggdGhlIFRlcm0gbmFtZSAke2NvZGUocGFyYW1zPy5leHBlY3RlZD8ubmFtZSl9YCA6XG4gICAgICAgICdZb3UgaGF2ZSBzdGF0ZWQgc29tZSBFbWlzc2lvbnMgd2VyZSBjcmVhdGVkIGJ5IHNvbWUgVHJhbnNmb3JtYXRpb25zJ1xuICAgIH0uXG4gICAgSG93ZXZlciwgd2UgY2Fubm90IGZpbmQgYSBUcmFuc2Zvcm1hdGlvbiB3aXRoaW4gdGhlIEN5Y2xlIHdpdGggdGhpcyBUZXJtIG5hbWUuXG4gICAgJHtcbiAgICAgIGxldmVsID09PSAnZXJyb3InID9cbiAgICAgICAgJ1BsZWFzZSBjaGVjayB0aGUgVGVybXMgdXNlZCBpbiB0aGUgRW1pc3Npb25zIGFuZC9vciB0aGUgVHJhbnNmb3JtYXRpb25zLicgOlxuICAgICAgICAnWW91IG1heSB3YW50IHRvIGFkZCB0aGlzIFRyYW5zZm9ybWF0aW9uLidcbiAgICB9YCxcbiAgJ2V2ZXJ5IGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGJlIHVuaXF1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGlzIEJsYW5rIE5vZGUgaXMgZHVwbGljYXRlZC4gRXZlcnkgQmxhbmsgTm9kZSBzaG91bGQgYmUgdW5pcXVlLlxuICAgIFVuaXF1ZW5lc3MgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZm9sbG93aW5nIGZpZWxkczogJHtcbiAgICAgIChwYXJhbXM/LmtleXMgfHwgW10pLm1hcChjb2RlKS5qb2luKCcsICcpXG4gICAgfWAsXG4gICdtdXN0IGNvbnRhaW4gYXMgbWFueSBpdGVtcyBhcyB2YWx1ZXMnOiAoeyBwYXJhbXMsIGRhdGFQYXRoIH0pID0+XG4gICAgYFRoZSBudW1iZXIgb2YgJHtjb2RlKGRhdGFQYXRoLnNwbGl0KCcuJykucG9wKCkpfSBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgJHtjb2RlKCd2YWx1ZScpfS5cbiAgICBDdXJyZW50bHkgdGhlcmUgYXJlICR7cGFyYW1zPy5jdXJyZW50fSAke2NvZGUoZGF0YVBhdGguc3BsaXQoJy4nKS5wb3AoKSl9IGJ1dCAke3BhcmFtcz8uZXhwZWN0ZWR9ICR7Y29kZSgndmFsdWUnKX0uYCxcbiAgJ2lzIHRvbyBnZW5lcmljJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgUHJvZHVjdCAke2NvZGUocGFyYW1zPy5wcm9kdWN0Py5uYW1lKX0gaG93ZXZlcixcbiAgICB5b3UgaGF2ZSB1c2VkIGEgZ2VuZXJpYyAke2dsb3NzYXJ5VHlwZUxpbmsocGFyYW1zPy50ZXJtPy50ZXJtVHlwZSl9IHRlcm0gJHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9LlxuICAgIFVzZSBhIG1vcmUgc3BlY2lmaWMgdGVybSBmb3IgdGhlICR7XG4gICAgICBnbG9zc2FyeVR5cGVMaW5rKHBhcmFtcz8udGVybT8udGVybVR5cGUpXG4gICAgfSB3aGljaCByZWZsZWN0cyB0aGUgc3BlY2lmaWMgJHtcbiAgICAgIGdsb3NzYXJ5VHlwZUxpbmsocGFyYW1zPy5wcm9kdWN0Py50ZXJtVHlwZSlcbiAgICB9LmAsXG4gICdpcyBtaXNzaW5nIHJlcXVpcmVkIGJpYmxpb2dyYXBoaWMgaW5mb3JtYXRpb24nOiAoKSA9PlxuICAgIGBUaGUgYXV0b21hdGljIGJpYmxpb2dyYXBoeSBzZWFyY2ggZmFpbGVkIGZvciB0aGlzIEJpYmxpb2dyYXBoeS4gRWl0aGVyOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kZWNpbWFsXCI+XG4gICAgPGxpPk1hbnVhbGx5IGZpbGwtaW4gdGhlIDxiPnJlcXVpcmVkPC9iPiBiaWJsaW9ncmFwaGljIGluZm9ybWF0aW9uIGFzIHBlciAke3NjaGVtYUxpbmsoU2NoZW1hVHlwZS5CaWJsaW9ncmFwaHksICdvdXIgc2NoZW1hJyl9LjwvbGk+XG4gICAgPGxpPlByb3ZpZGUgdGhlICR7Y29kZSgnZG9jdW1lbnRET0knKX0gYXMgd2VsbCBhcyB0aGUgJHtjb2RlKCd0aXRsZScpfS48L2xpPlxuICAgIDxsaT5DaGVjayB0aGUgJHtjb2RlKCdkb2N1bWVudERPSScpfSBhbmQgJHtjb2RlKCd0aXRsZScpfSBmb3IgdHlwb3MgYWdhaW5zdCB0aGUgJHtleHRlcm5hbExpbmsoJ2h0dHBzOi8vd3d3Lm1lbmRlbGV5LmNvbScsICdNZW5kZWxleSBjYXRhbG9ndWUnKX0uPC9saT5cbiAgICA8L3VsPmAsXG4gICdzaG91bGQgYmUgbG93ZXIgdGhhbiBtYXggc2l6ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgYm91bmRhcnkgb3IgcmVnaW9uIGlzID4ke3BhcmFtcz8uZXhwZWN0ZWR9a20yIGFuZCBpcyB0b28gbGFyZ2UgdG8gcmVsaWFibHkgZ2FwIGZpbGwgTWVhc3VyZW1lbnRzLlxuICAgIElmIHlvdSBhcmUgYWJsZSB0byB1c2UgYSBtb3JlIHNwZWNpZmljIHJlZ2lvbiwgcGxlYXNlIGRvLmAsXG4gICdhbiBleGNyZXRhIGlucHV0IGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgYW4gZXhjcmV0YU1hbmFnZW1lbnQgcHJhY3RpY2UnOiAoeyBkYXRhUGF0aCB9KSA9PiB7XG4gICAgY29uc3QgcGF0aHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoISk7XG4gICAgcmV0dXJuIGBFeGNyZXRhIG1hbmFnZW1lbnQgaXMgdGhlIGNvbnZlcnNpb24gb2YgZXhjcmV0YSB0byBhbm90aGVyIHR5cGUgb2YgZXhjcmV0YS5cbiAgICAgIFlvdSBoYXZlIGFkZGVkIGFuIGV4Y3JldGFNYW5hZ2VtZW50IFByYWN0aWNlIHRvIHRoaXMgJHtwYXRoc1swXS5sYWJlbH0gYnV0IHRoZXJlIGlzIG5vIGV4Y3JldGEgSW5wdXQuXG4gICAgICBUbyByZXByZXNlbnQgZXhjcmV0YSBtYW5hZ2VtZW50LCB1c2UgYSAke3BhdGhzWzBdLmxhYmVsfSB3aXRoIGV4Y3JldGEgYXMgYW4gSW5wdXQgYW5kIGV4Y3JldGFNYW5hZ2VtZW50IGFzIGEgUHJhY3RpY2UuYDtcbiAgfSxcbiAgJ29ubHkgMSBwcmltYXJ5IHByb2R1Y3QgYWxsb3dlZCc6ICgpID0+ICdUaGVyZSBjYW4gb25seSBiZSBvbmUgcHJpbWFyeSBwcm9kdWN0IGluIGVhY2ggQ3ljbGUuJyxcbiAgJ2lzIG5vdCBhbGxvd2VkIGluIGNvbWJpbmF0aW9uIHdpdGggbm9UaWxsYWdlJzogKCkgPT5cbiAgICBgVGhpcyBvcGVyYXRpb24gaW52b2x2ZXMgdGlsbGFnZSwgeWV0IHlvdSBoYXZlIHNwZWNpZmllZCB0aGUgUHJhY3RpY2UgJHt0ZXJtTGluayhub1RpbGxhZ2UpfS5cbiAgICBFaXRoZXIgY2hhbmdlIHRoaXMgb3BlcmF0aW9uIG9yIHRoZSBQcmFjdGljZS5gLFxuICAnc2hvdWxkIGNvbnRhaW4gYSB0aWxsYWdlIHByYWN0aWNlJzogKCkgPT5cbiAgICBgV2UgcmVjb21tZW5kIHNwZWNpZnlpbmcgdGhlIHR5cGUgb2YgdGlsbGFnZSB1c2VkIGZvciB0aGlzIEN5Y2xlLlxuICAgIFBsZWFzZSBzZWUgdGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUudGlsbGFnZSl9IGdsb3NzYXJ5LmAsXG4gICdtdXN0IHNldCB2YWx1ZSBmb3IgZXZlcnkgdGlsbGFnZSBwcmFjdGljZSc6ICgpID0+XG4gICAgYEVpdGhlciBzcGVjaWZ5IGEgc2luZ2xlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUudGlsbGFnZSl9IHByYWN0aWNlIG9yIGFkZCBhIHZhbHVlIHRvIGFsbCBwcmFjdGljZXMuYCxcbiAgJ3N1bSBub3QgZXF1YWwgdG8gMTAwJSBmb3IgdGlsbGFnZSBwcmFjdGljZXMnOiAoKSA9PlxuICAgIGBUaGUgc3VtIG9mICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUudGlsbGFnZSl9IHByYWN0aWNlcyBtdXN0IGVxdWFsIDEwMCUuYCxcbiAgJ2NhbiBvbmx5IGhhdmUgMSB0aWxsYWdlIHByYWN0aWNlIHdpdGhvdXQgYSB2YWx1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBJdCBpcyBub3QgcG9zc2libGUgZm9yIGEgQ3ljbGUgdG8gaGF2ZSB0aGUgZm9sbG93aW5nIHRpbGxhZ2UgUHJhY3RpY2VzOlxuICAgICR7KHBhcmFtcz8uY3VycmVudCA/PyBbXSkubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSkuam9pbignIGFuZCAnKX0gYXQgdGhlIHNhbWUgdGltZS5cbiAgICBJZiBtdWx0aXBsZSB0aWxsYWdlIHByYWN0aWNlcyBkaWQgb2NjdXIsIHBsZWFzZSBzcGVjaWZ5IHRoZSBwZXJjZW50YWdlIG9mIGFyZWEgdGhleSBvY2N1cnJlZCBvbi5gLFxuICAnY2FuIG5vdCBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgQ3ljbGUnOiAoKSA9PiAnWW91IGNhbiBub3QgbGluayBhbiBJbnB1dCB0byB0aGUgSW1wYWN0IEFzc2Vzc21lbnQgb2YgdGhlIHNhbWUgQ3ljbGUuJyxcbiAgLy8gZGVwcmVjYXRlZCwgcmVtb3ZlIHdoZW4gbWVzc2FnZSBpcyBub3QgYmVpbmcgdXNlZCBhbnltb3JlXG4gICdtdXN0IGJlIDAgZm9yIHByb2R1Y3QgdmFsdWUgMCc6ICh7IGRhdGFQYXRoLCBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB0aGUgJHtjb2RlKGRhdGFQYXRoPy5zcGxpdCgnLicpLnBvcCgpISl9IG9mICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gY29kZShwYXJhbXM/LnRlcm0ubmFtZSkgOiAndGhhdCBwcm9kdWN0J1xuICAgIH0gbXVzdCBhbHNvIGJlIHplcm8uYCxcbiAgJ2Vjb25vbWljVmFsdWVTaGFyZSBtdXN0IGJlIDAgZm9yIHByb2R1Y3QgdmFsdWUgMCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHRoZSBlY29ub21pY1ZhbHVlU2hhcmUgb2YgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgPyBjb2RlKHBhcmFtcz8udGVybS5uYW1lKSA6ICd0aGF0IHByb2R1Y3QnXG4gICAgfSBtdXN0IGFsc28gYmUgemVyby5gLFxuICAncmV2ZW51ZSBtdXN0IGJlIDAgZm9yIHByb2R1Y3QgdmFsdWUgMCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHRoZSByZXZlbnVlIG9mICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gY29kZShwYXJhbXM/LnRlcm0ubmFtZSkgOiAndGhhdCBwcm9kdWN0J1xuICAgIH0gbXVzdCBhbHNvIGJlIHplcm8uYCxcbiAgJ3Nob3VsZCBhZGQgYSBzb3VyY2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgV2UgcmVjb21tZW5kIGFkZGluZyBhIFNvdXJjZSB0byBhbGwgZGF0YSBpdGVtcy5cbiAgICBUaGlzIGNhbiBiZSBkb25lIGJ5IGFkZGluZyB0aGUgJHtjb2RlKHBhcmFtcz8uY3VycmVudCl9IGZpZWxkLlxuICAgIFNvdXJjZXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGZvciBlYWNoIGRhdGEgaXRlbSAoaS5lLiwgZWFjaCBJbnB1dCwgRW1pc3Npb24sIFByb2R1Y3QsIFByYWN0aWNlLCBNZWFzdXJlbWVudCwgb3IgSW5mcmFzdHJ1Y3R1cmUpLmAsXG4gICdjb3ZlciBjcm9wIGN5Y2xlIGNvbnRhaW5zIG5vbiBjb3ZlciBjcm9wIHByb2R1Y3QnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBzcGVjaWZpZWQgdGhhdCB0aGlzIGNyb3AgaXMgYSBjb3ZlciBjcm9wIHVzaW5nIGEgUHJhY3RpY2UuXG4gICAgQSBjb3ZlciBjcm9wIGlzIGRlZmluZWQgYXMgXCJhIGNyb3Agd2hpY2ggaXMgbGVmdCBpbiB0aGUgZmllbGQgd2l0aG91dCBhbnkgZnJhY3Rpb24gaGFydmVzdGVkIGJ5IHRoZSBlbmQgb2YgdGhlIEN5Y2xlXCIuXG4gICAgVGhlIFByb2R1Y3RzIG9mIHRoaXMgQ3ljbGUgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoaXMgY3JvcCBiZWluZyBhIGNvdmVyIGNyb3AuXG4gICAgUGxlYXNlIGNoZWNrIHRoZSBQcm9kdWN0cyBvciB0aGUgUHJhY3RpY2VzLmAsXG4gICdzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGN5Y2xlIHByb2R1Y3RzJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID9cbiAgICAgICAgYFRoZSBQcm9kdWN0ICR7Y29kZShwYXJhbXMucHJvZHVjdC5uYW1lKX0gZG9lcyBub3QgZXhpc3QgaW4gdGhlIEN5Y2xlIHdpdGggaWQgJHtjb2RlKHBhcmFtcy5ub2RlLmlkKX1gIDpcbiAgICAgICAgJ1RoZSBJbXBhY3RBc3Nlc3NtZW50IFByb2R1Y3QgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGxpbmtlZCBDeWNsZSdcbiAgICB9LlxuICAgIFBsZWFzZSBhZGQgdGhlIFByb2R1Y3QgaW4gdGhlIEN5Y2xlIG9yIHJlbW92ZSB0aGUgbGluayB3aXRoIHRoZSBDeWNsZS5gLFxuICAnbXVsdGlwbGUgSW1wYWN0QXNzZXNzbWVudCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIFByb2R1Y3Qgb2YgdGhlIHNhbWUgQ3ljbGUnOiAoKSA9PlxuICAgIGBPbmx5IDEgSW1wYWN0IEFzc2Vzc21lbnQgY2FuIGJlIHJlbGF0ZWQgdG8gdGhpcyBQcm9kdWN0LlxuICAgIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHByb2R1Y3QgaXMgY29ycmVjdCBvciB0aGUgY3ljbGUuaWQgeW91IGFyZSByZWZlcnJpbmcgdG8gaXMgY29ycmVjdC5gLFxuICAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbGFuZCBvY2N1cGF0aW9uJzogKCkgPT5cbiAgICBgTGFuZCB0cmFuc2Zvcm1hdGlvbiBzaG91bGQgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGxhbmQgb2NjdXBhdGlvblxuICAgIChsYW5kIHRyYW5zZm9ybWF0aW9uIGlzIHRoZSBhbW91bnQgb2YgbGFuZCBjb252ZXJ0ZWQgYmV0d2VlbiBzb21lIGRhdGUgaW4gdGhlIHBhc3QgYW5kIHRoZSBjdXJyZW50IHllYXIsXG4gICAgZGl2aWRlZCBieSBhbiBhbW9ydGl6YXRpb24gcGVyaW9kLCBzbyBpdCBzaG91bGQgYWx3YXlzIGJlIGxlc3MgdGhhbiBsYW5kIG9jY3VwYXRpb24gYnkgZGVmaW5pdGlvbikuYCxcbiAgJ3Nob3VsZCBiZSBsaW5rZWQgdG8gYW4gZW1pc3Npb24gaW4gdGhlIEN5Y2xlJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gYCR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9IGV4aXN0c2AgOiAnU29tZSBFbWlzc2lvbnMgZXhpc3QnXG4gICAgfSBpbiBib3RoIHRoZSBDeWNsZSBhbmQgdGhlIFRyYW5zZm9ybWF0aW9uIGJ1dCAke2Vycm9yQ291bnQgPT09IDEgPyAnaXQgaXMnIDogJ3RoZXkgYXJlJ30gbm90IGxpbmtlZCB1c2luZyAke1xuICAgICAgY29kZSgnY3ljbGUuZW1pc3Npb25zLlgudHJhbnNmb3JtYXRpb24udGVybScpXG4gICAgfS4gVGhpcyBtYXkgYmUgYW4gZXJyb3IuYCxcbiAgJ3Nob3VsZCBhZGQgYW4gYW5pbWFsIHByb2R1Y3Rpb24gc3lzdGVtJzogKCkgPT5cbiAgICBgRm9yIGFuaW1hbCBwcm9kdWN0aW9uIGN5Y2xlcywgd2UgcmVjb21tZW5kIHNwZWNpZnlpbmcgdGhlIGFuaW1hbCBwcm9kdWN0aW9uICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuc3lzdGVtKX0gYXMgYSBQcmFjdGljZS5cbiAgICBZb3UgY2FuIGZpbmQgYSBsaXN0IG9mIHN5c3RlbXMgaW4gdGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuc3lzdGVtLCAnR2xvc3NhcnknKX0uYCxcbiAgJ211c3QgYmUgc2V0IHRvIGZhbHNlIHdoZW4gc3BlY2lmeWluZyBmdWVsIHVzZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBJZiBtYWNoaW5lcnkgZnVlbCAoJHtwYXJhbXM/LmFsbG93ZWRWYWx1ZXMubWFwKGNvZGUpLmpvaW4oJywgJyl9KSBpcyB1c2VkIGR1cmluZyBhIEN5Y2xlLFxuICAgIGJ1dCB0aGVyZSBpcyBubyBkYXRhIG9uIHRoZSBhbW91bnQgb2YgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5tYXRlcmlhbCl9IHVzZWQgZm9yIGFncmljdWx0dXJhbCBlcXVpcG1lbnQsXG4gICAgdGhlbiAke2NvZGUoJ2NvbXBsZXRlbmVzcy5tYXRlcmlhbCcpfSBtdXN0IGJlICR7Y29kZSgnZmFsc2UnKX0uYCxcbiAgJ211c3QgYmUgYmVsb3cgb3IgZXF1YWwgdG8gMSBmb3IgdW5pdCBpbiBoYSc6ICgpID0+XG4gICAgYFRoZSBtYXhpbXVtIHZhbHVlIGZvciBhIHByb2R1Y3Qgd2l0aCB1bml0cyAke2NvZGUoJ2hhJyl9IG9uIGEgQ3ljbGUgd2l0aCBhICR7XG4gICAgICBzY2hlbWFMaW5rKCdDeWNsZSNmdW5jdGlvbmFsVW5pdCcsICdmdW5jdGlvbmFsIHVuaXQnKVxuICAgIH0gb2YgJHtjb2RlKCcxIGhhJyl9IGlzICR7Y29kZSgnMScpfS5cbiAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBhZGQgYSBwcm9kdWN0IHdpdGggdGhlIHVuaXRzICR7Y29kZSgna2cnKX0sIHVzZSBhIGRpZmZlcmVudCB0ZXJtLmAsXG4gICdwYXN0dXJlR3Jhc3Mga2V5IHVuaXRzIG11c3QgYmUgXFwnaGFcXCcnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIFRlcm0gJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX0gY2FuJ3QgYmUgdXNlZCBhcyBhIGtleSBmb3IgUGFzdHVyZSBncmFzcy5cbiAgICBQbGVhc2UgdXNlIHRoZSBUZXJtIGRlc2NyaWJpbmcgdGhlIHBsYW50IHdpdGggdGhlIHVuaXRzICR7Y29kZShwYXJhbXMuZXhwZWN0ZWQpfSBpbnN0ZWFkLlxuICAgIFRoaXMgd2lsbCBoZWxwIHVzIGdhcC1maWxsIHRoZSBhbW91bnQgb2YgZ3Jhc3MgY29uc3VtZWQgYnkgdGhlIGhlcmQuYCxcbiAgJ2lzIG91dHNpZGUgY29uZmlkZW5jZSBpbnRlcnZhbCc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGAke1xuICAgICAgcGFyYW1zPy5vdXRsaWVycy5tYXAodmFsdWUgPT5cbiAgICAgICAgYFRoZSBwcm9kdWN0IHZhbHVlICR7Y29kZSh2YWx1ZSl9IGlzICR7XG4gICAgICAgICAgdmFsdWUgPiBwYXJhbXM/Lm1pbiA/ICdhYm92ZScgOiAnYmVsb3cnXG4gICAgICAgIH0gJHtcbiAgICAgICAgICBjb2RlKGAkeyhwYXJhbXM/LnRocmVzaG9sZCArICgoMS1wYXJhbXM/LnRocmVzaG9sZCkgLyAyKSkgKiAxMDB9JWApXG4gICAgICAgIH0gb2YgYWxsICR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9IGRhdGEgaW4gJHtjb2RlKHBhcmFtcz8uY291bnRyeS5uYW1lKX0gb24gdGhlIEhlc3RpYSBwbGF0Zm9ybS5gXG4gICAgICApXG4gICAgfVxuICAgIFBsZWFzZSBkb3VibGUtY2hlY2sgJHtwYXJhbXM/Lm91dGxpZXJzLmxlbmd0aCA+IDEgPyAndGhlc2UgdmFsdWVzJyA6ICd0aGlzIHZhbHVlJ30gYmVmb3JlIHN1Ym1pdHRpbmcuYCxcbiAgJ3Nob3VsZCBiZSBlcXVhbCB0byBib3VuZGFyeSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgY2FsY3VsYXRlZCBhcmVhIGZyb20gJHtjb2RlKCdib3VuZGFyeScpfSBpcyAke2NvZGUocGFyYW1zLmV4cGVjdGVkKX0uXG4gICAgVGhpcyBtYXkgYmUgYW4gZXJyb3IgaWYgdGhlIGJvdW5kYXJ5IHJlcHJlc2VudHMgdGhlIGFyZWEgdW5kZXIgY3VsdGl2YXRpb24uYCxcbiAgJ211c3Qgc3BlY2lmeSB0aGUgZmF0ZSBvZiBjcm9wUmVzaWR1ZSc6ICgpID0+XG4gICAgYEZvciBzaXRlcyBvZiB0eXBlIGNyb3BsYW5kIG9yIHBlcm1hbmVudCBwYXN0dXJlLCBpZiBkYXRhIGNvbXBsZXRlbmVzcyBpcyBtYXJrZWQgdHJ1ZSBmb3IgY3JvcCByZXNpZHVlLFxuICAgIHRoZSBmYXRlIG9mIHRoZSByZXNpZHVlIG11c3QgYmUgZnVsbHkgc3BlY2lmaWVkLlxuICAgIFRoZSBmYXRlIG11c3QgYmUgYWRkZWQgdXNpbmc6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2NcIj5cbiAgICA8bGk+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWVNYW5hZ2VtZW50KX0gcHJhY3RpY2VzOzwvbGk+XG4gICAgPGxpPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlKX0gcHJvZHVjdHM8L2xpPlxuICAgIDwvdWw+XG4gICAgd2hlcmUgdGhlIHN1bSBvZiBhYm92ZSBncm91bmQgY3JvcCByZXNpZHVlIGFuZCBiZWxvdyBncm91bmQgY3JvcCByZXNpZHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm87XG4gICAgYCxcbiAgJ3Nob3VsZCBzcGVjaWZ5IHRoZSBmYXRlIG9mIGNyb3BSZXNpZHVlJzogKCkgPT5cbiAgICBgXG4gICAgWW91IGhhdmUgbm90IHNwZWNpZmllZCB0aGUgZmF0ZSBvZiB0aGUgY3JvcCByZXNpZHVlLlxuICAgIEFkZGluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgaW1wcm92ZSBlbWlzc2lvbnMgYW5kIHNvaWwgY2FyYm9uIHN0b2NrIGNhbGN1bGF0aW9ucy5cbiAgICBUaGUgZmF0ZSBjYW4gYmUgYWRkZWQgdXNpbmc6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2NcIj5cbiAgICA8bGk+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWVNYW5hZ2VtZW50KX0gcHJhY3RpY2VzOzwvbGk+XG4gICAgPGxpPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlKX0gcHJvZHVjdHM7PC9saT5cbiAgICA8L3VsPlxuICAgIFJlbWVtYmVyIHRvIHNldCAke2NvZGUoJ2NvbXBsZXRlbmVzcy5jcm9wUmVzaWR1ZScpfSB0byAke2NvZGUoJ3RydWUnKX1cbiAgICBpZiB0aGUgYWJvdmUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUgcXVhbnRpdGllcyBhbmQgZmF0ZXMgYXJlIHNwZWNpZmllZC5cbiAgICBgXG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0Q3VzdG9tRXJyb3JNZXNzYWdlID0gKG1lc3NhZ2U/OiBzdHJpbmcsIGVycm9yPzogSVZhbGlkYXRpb25FcnJvciwgZXJyb3JDb3VudCA9IDEpID0+IHtcbiAgY29uc3QgZm9ybWF0dGVkTWVzc2FnZSA9IG1lc3NhZ2UgJiYgbWVzc2FnZSBpbiBjdXN0b21FcnJvck1lc3NhZ2UgP1xuICAgIGN1c3RvbUVycm9yTWVzc2FnZVttZXNzYWdlXShlcnJvciEsIGVycm9yQ291bnQpIDpcbiAgICBtZXNzYWdlO1xuICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZSA/IGA8cCBjbGFzcz1cImlzLW5vcm1hbFwiPiR7Zm9ybWF0dGVkTWVzc2FnZX08L3A+YCA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEVycm9yID0gKGVycm9yPzogSVZhbGlkYXRpb25FcnJvciwgZXJyb3JDb3VudCA9IDEpOiBJVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkID0+IGVycm9yID8gKHtcbiAgbGV2ZWw6ICdlcnJvcicsXG4gIC4uLmVycm9yLFxuICBtYXBFcnJvcjogZXJyb3IubWVzc2FnZSA9PT0gbWFwRXJyb3JNZXNzYWdlLFxuICBtZXNzYWdlOiBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UoZXJyb3IubWVzc2FnZSwgZXJyb3IsIGVycm9yQ291bnQpXG59KSA6IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IGVycm9ySGFzRXJyb3IgPSAoZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yKSA9PiBlcnJvciAmJiAoZXJyb3IubGV2ZWwgPT09ICdlcnJvcicgfHwgIWVycm9yLmxldmVsKTtcblxuZXhwb3J0IGNvbnN0IGVycm9ySGFzV2FybmluZyA9IChlcnJvcj86IElWYWxpZGF0aW9uRXJyb3IpID0+IGVycm9yICYmIGVycm9yLmxldmVsID09PSAnd2FybmluZyc7XG5cbmV4cG9ydCBjb25zdCBpc01pc3NpbmdQcm9wZXJ0eUVycm9yID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+ICEhcGFyYW1zICYmICdtaXNzaW5nUHJvcGVydHknIGluIHBhcmFtcztcblxuZXhwb3J0IGNvbnN0IGlzTWlzc2luZ09uZU9mRXJyb3IgPSAoeyBrZXl3b3JkLCBzY2hlbWFQYXRoIH06IElWYWxpZGF0aW9uRXJyb3IpID0+XG4gIGtleXdvcmQgPT09ICdyZXF1aXJlZCcgJiYgKHNjaGVtYVBhdGggfHwgJycpLmluY2x1ZGVzKCdvbmVPZicpO1xuXG5jb25zdCBpc0ZhaWxpbmdLZXl3b3JkRXJyb3IgPSAoeyBwYXJhbXMgfTogSVZhbGlkYXRpb25FcnJvcikgPT4gISFwYXJhbXMgJiYgJ2ZhaWxpbmdLZXl3b3JkJyBpbiBwYXJhbXM7XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJFcnJvciA9IChlcnJvcjogSVZhbGlkYXRpb25FcnJvcikgPT4gW1xuICBpc0ZhaWxpbmdLZXl3b3JkRXJyb3Jcbl0uZXZlcnkoZnVuYyA9PiAhZnVuYyhlcnJvcikpO1xuXG5leHBvcnQgY29uc3QgbWlzc2luZ05vZGVFcnJvcnMgPSAoZXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10pID0+XG4gIGVycm9ycy5maWx0ZXIoKHsga2V5d29yZCwgcGFyYW1zIH0pID0+XG4gICAga2V5d29yZCA9PT0gJ3JlcXVpcmVkJyAmJiAocGFyYW1zPy5taXNzaW5nUHJvcGVydHkgPT09ICdAdHlwZScgfHwgcGFyYW1zPy5taXNzaW5nUHJvcGVydHkgPT09ICdAaWQnKVxuICApO1xuIl19
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmlsZXMvZmlsZXMtZXJyb3IubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBUSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBMkJoRCxNQUFNLGVBQWUsR0FBRyx5Q0FBeUMsQ0FBQztBQUVsRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDN0MsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLENBQUM7QUFDaEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZLElBQUkscUJB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RWhILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFvQixFQUFFLEVBQUUsQ0FDL0UsT0FBTyxLQUFLLFVBQVUsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFakUsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFvQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLGdCQUFnQixJQUFJLE1BQU0sQ0FBQztBQUV2RyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUF1QixFQUFFLEVBQUUsQ0FBQztJQUN0RCxxQkFBcUI7Q0FDdEIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRTlCLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBMEIsRUFBRSxFQUFFLENBQzlELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQ3BDLE9BQU8sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxLQUFLLE9BQU8sSUFBSSxNQUFNLEVBQUUsZUFBZSxLQUFLLEtBQUssQ0FBQyxDQUNyRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0IHsgU2NoZW1hVHlwZSwgU2l0ZVNpdGVUeXBlLCBUZXJtLCBUZXJtVGVybVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB0b1ByZWNpc2lvbiwga2V5VG9MYWJlbCB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuXG5pbXBvcnQgeyB0ZXJtVHlwZUxhYmVsIH0gZnJvbSAnLi4vdGVybXMvdGVybXMubW9kZWwnO1xuaW1wb3J0IHsgcGF0aFRvQXBpRG9jc1BhdGggfSBmcm9tICcuLi9lbmdpbmUvZW5naW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgYmFzZVVybCB9IGZyb20gJy4uL2NvbW1vbi91dGlscyc7XG5pbXBvcnQgeyBwbHVyYWxpemUgfSBmcm9tICcuLi9jb21tb24vcGx1cmFsaXplJztcblxuLy8gVE9ETzogYWRkIG1vcmUgdmFsaWRhdGlvbiBrZXl3b3JkIGFuZCBwYXJhbXNcbmV4cG9ydCB0eXBlIHZhbGlkYXRpb25FcnJvckxldmVsID0gJ2Vycm9yJyB8ICd3YXJuaW5nJztcbmV4cG9ydCB0eXBlIHZhbGlkYXRpb25FcnJvclBhcmFtID0gJ21pc3NpbmdQcm9wZXJ0eScgfCAndHlwZScgfCAndGVybScgfCAnbW9kZWwnIHwgJ3Byb2R1Y3QnIHwgJ3JhbmdlJyB8ICdub2RlJyB8XG4gICdhbGxvd2VkVmFsdWVzJyB8ICdhZGRpdGlvbmFsUHJvcGVydHknIHwgJ2V4cGVjdGVkJyB8ICdkZWZhdWx0JyB8ICdjdXJyZW50JyB8ICdwZXJjZW50YWdlJyB8ICdrZXlzJyB8ICd0aHJlc2hvbGQnIHxcbiAgJ291dGxpZXJzJyB8ICdjb3VudHJ5JyB8ICdtaW4nIHwgJ21heCcgfCAnZGVmYXVsdFNvdXJjZScgfCAnZ3JvdXAnO1xuZXhwb3J0IHR5cGUgdmFsaWRhdGlvbkVycm9yS2V5d29yZCA9ICdyZXF1aXJlZCcgfCAndHlwZScgfCAnaWYnIHwgJ3RoZW4nO1xuXG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0aW9uRXJyb3Ige1xuICBpbmRleD86IG51bWJlcjtcbiAgbm9kZUluZGV4PzogbnVtYmVyO1xuICBsZXZlbD86IHZhbGlkYXRpb25FcnJvckxldmVsO1xuICBkYXRhUGF0aD86IHN0cmluZztcbiAgc2NoZW1hUGF0aD86IHN0cmluZztcbiAga2V5d29yZD86IHZhbGlkYXRpb25FcnJvcktleXdvcmQ7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgcGFyYW1zPzogeyBba2V5IGluIHZhbGlkYXRpb25FcnJvclBhcmFtXT86IGFueSB9O1xuICBtYXBFcnJvcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZhbGlkYXRpb25FcnJvcldpdGhJbmRleCB7XG4gIGVycm9yOiBJVmFsaWRhdGlvbkVycm9yW107XG4gIGluZGV4OiBudW1iZXI7XG4gIGNoYW5nZWQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBtYXBFcnJvck1lc3NhZ2UgPSAnZG9lcyBub3QgY29udGFpbiBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlJztcblxuZXhwb3J0IGNvbnN0IHBhcnNlRGF0YVBhdGggPSAoZGF0YVBhdGggPSAnJykgPT4ge1xuICBjb25zdCBbXywgLi4ucGF0aHNdID0gZGF0YVBhdGguc3BsaXQoJy4nKTtcbiAgcmV0dXJuIHBhdGhzLm1hcChwYXRoID0+ICh7IHBhdGgsIGxhYmVsOiBrZXlUb0xhYmVsKHBhdGgucmVwbGFjZSgvXFxbXFxkK1xcXS9nLCAnJykpIH0pKTtcbn07XG5cbmNvbnN0IGNvbnRhY3RVc0VtYWlsID0gJ2NvbW11bml0eUBoZXN0aWEuZWFydGgnO1xuY29uc3QgZXh0ZXJuYWxMaW5rID0gKGhyZWY6IHN0cmluZywgdGV4dDogc3RyaW5nKSA9PiBgPGEgaHJlZj1cIiR7aHJlZn1cIiB0YXJnZXQ9XCJfYmxhbmtcIj4ke3RleHR9PC9hPmA7XG5jb25zdCBnbG9zc2FyeUxpbmsgPSAodGV4dDogc3RyaW5nKSA9PlxuICBleHRlcm5hbExpbmsoYCR7YmFzZVVybCgpfS9nbG9zc2FyeWAsIHRleHQpO1xuY29uc3QgZ2xvc3NhcnlUeXBlTGluayA9ICh0eXBlOiBUZXJtVGVybVR5cGUsIHRleHQgPSB0ZXJtVHlwZUxhYmVsKHR5cGUpKSA9PlxuICBleHRlcm5hbExpbmsoYCR7YmFzZVVybCgpfS9nbG9zc2FyeT90ZXJtVHlwZT0ke3R5cGV9YCwgdGV4dCk7XG5jb25zdCB0ZXJtTGluayA9ICh7IGlkLCBuYW1lIH06IFBhcnRpYWw8VGVybT4pID0+XG4gIGV4dGVybmFsTGluayhgJHtiYXNlVXJsKCl9L3Rlcm0vJHtpZH1gLCBuYW1lISk7XG5leHBvcnQgY29uc3Qgbm9kZUxpbmsgPSAoeyAnQHR5cGUnOiB0eXBlLCAnQGlkJzogaWQsIG5hbWUgfSkgPT5cbiAgdHlwZSAmJiBpZCA/IGA8YSBocmVmPVwiLyR7dHlwZS50b0xvd2VyQ2FzZSgpfS8ke2lkfVwiIHRhcmdldD1cIl9ibGFua1wiPiR7bmFtZSB8fCBpZH08L2E+YCA6IG51bGw7XG5jb25zdCBzY2hlbWFMaW5rID0gKHR5cGU6IHN0cmluZywgdGl0bGUgPSB0eXBlKSA9PiBgPGEgaHJlZj1cIiR7YmFzZVVybCgpfS9zY2hlbWEvJHt0eXBlfVwiIHRhcmdldD1cIl9ibGFua1wiPiR7dGl0bGV9PC9hPmA7XG5leHBvcnQgY29uc3QgY29kZSA9ICh0ZXh0OiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKSA9PiBgPGNvZGU+JHt0ZXh0fTwvY29kZT5gO1xuY29uc3QgZGF0ZUZvcm1hdE1lc3NhZ2UgPVxuICBgc2hvdWxkIGZvbGxvdyB0aGUgSVNPIDg2MDEgZGF0ZSBmb3JtYXQsIGUuZy4gJHtjb2RlKDIwMDApfSwgb3IgJHtjb2RlKCcyMDAwLTEyJyl9LCBvciAke2NvZGUoJzIwMDAtMTItMzAnKX1gO1xuY29uc3QgY29udGFjdFVzID0gKHRleHQgPSAnY29udGFjdCB1cycpID0+IGA8YSBocmVmPVwibWFpbHRvOiR7Y29udGFjdFVzRW1haWx9XCI+JHt0ZXh0fTwvYT5gO1xuY29uc3QgbW9kZWxMaW5rID0gKHRlcm06IFRlcm0sIG1vZGVsOiBUZXJtKSA9PiBgXG4gIDxhIGhyZWY9XCIke3BhdGhUb0FwaURvY3NQYXRoKG1vZGVsWydAaWQnXSwgdGVybVsnQGlkJ10pfVwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgIDxzcGFuIGNsYXNzPVwicHItMVwiPiR7bW9kZWwubmFtZX08L3NwYW4+XG4gICAgPHNwYW4+KFZpZXcgRG9jcyk8L3NwYW4+XG4gIDwvYT5cbmA7XG5jb25zdCB0aHJlc2hvbGQgPSAodmFsdWU6IG51bWJlcikgPT4gY29kZShgJHt2YWx1ZSAqIDEwMH0lYCk7XG5cbmNvbnN0IG5vVGlsbGFnZTogUGFydGlhbDxUZXJtPiA9IHtpZDogJ25vVGlsbGFnZScsIG5hbWU6ICdObyB0aWxsYWdlJ307XG5cbmV4cG9ydCBjb25zdCBtaXNzaW5nTm9kZUVycm9yTWVzc2FnZSA9ICh7ICdAdHlwZSc6IF90LCB0eXBlLCBuYW1lIH06IGFueSkgPT5cbiAgKF90IHx8IHR5cGUpID09PSAnVGVybScgP1xuICAgIGAke25hbWUgPyBgVGhlIHRlcm0gXCIke25hbWV9XCJgIDogJ1RoaXMgdGVybSd9IGRvZXNuJ3QgbWF0Y2ggYSB0ZXJtIGluIHRoZSAke2dsb3NzYXJ5TGluaygnR2xvc3Nhcnkgb2YgVGVybXMnKX0uXG4gIFBsZWFzZSBjaGVjayB0aGUgJHtnbG9zc2FyeUxpbmsoJ0dsb3NzYXJ5Jyl9IGZvciB0aGUgY29ycmVjdCAke2NvZGUoJ0BpZCcpfSBvciAke2NvZGUoJ25hbWUnKX0gYW5kIHNwZWxsaW5nLmBcbiAgICA6IGBUaGlzICR7c2NoZW1hTGluayhfdCB8fCB0eXBlKX0gZG9lcyBub3QgZXhpc3QgaW4gSGVzdGlhLiBJZiB5b3UgYXJlIHRyeWluZyB0byBsaW5rIHRvIGFuIGV4aXN0aW5nXG4gICR7c2NoZW1hTGluayhfdCB8fCB0eXBlKX0gaW4gSGVzdGlhLCBwbGVhc2UgY2hlY2sgdGhlICR7Y29kZSgnbmFtZScpfSBvciAke2NvZGUoJ0BpZCcpfSBpcyBjb3JyZWN0LlxuICBJZiB5b3UgYXJlIHRyeWluZyB0byBjcmVhdGUgYSBuZXcgJHtzY2hlbWFMaW5rKF90IHx8IHR5cGUpfSwgcGxlYXNlIGlkZW50aWZ5IGl0IHdpdGggYW4gJHtjb2RlKCdpZCcpfSBmaWVsZC5gO1xuXG5jb25zdCBpZE5vdEZvdW5kRXJyb3IgPSBgRG9lcyBub3QgZXhpc3QgaW4gSGVzdGlhLlxuICBJZiB5b3UgYXJlIHVzaW5nIHRoZSAke2NvZGUoJ25hbWUnKX0gb2YgdGhlIFRlcm0sIHBsZWFzZSBtYWtlIHN1cmUgdG8gdXNlICR7Y29kZSgndGVybS5uYW1lJyl9IGNvbHVtbiBpbnN0ZWFkLmA7XG5cbi8vIHNldCBtZXNzYWdlIGFzIGVtcHR5IHRvIG5vdCBkaXNwbGF5IGl0XG5jb25zdCBjdXN0b21FcnJvck1lc3NhZ2U6IHtcbiAgW2tleTogc3RyaW5nXTogKGVycm9yOiBJVmFsaWRhdGlvbkVycm9yLCBlcnJvckNvdW50OiBudW1iZXIpID0+IHN0cmluZztcbn0gPSB7XG4gICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXCdAaWRcXCcnOiAoKSA9PiBpZE5vdEZvdW5kRXJyb3IsXG4gICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXCdAdHlwZVxcJyc6ICgpID0+ICcnLFxuICAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFwnaWRcXCcnOiAoKSA9PiBpZE5vdEZvdW5kRXJyb3IsXG4gICdzaG91bGQgbWF0Y2ggZXhhY3RseSBvbmUgc2NoZW1hIGluIG9uZU9mJzogKCkgPT4gJycsXG4gICdzaG91bGQgbWF0Y2ggc29tZSBzY2hlbWEgaW4gYW55T2YnOiAoKSA9PiAnJyxcbiAgJ3Nob3VsZCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBlcnJvckNvdW50ID09PSAxID9cbiAgICAgIGBUaGUgZm9sbG93aW5nIGZpZWxkIGRvZXMgbm90IGV4aXN0OiAke3BhcmFtcz8uYWRkaXRpb25hbFByb3BlcnR5fSBvciBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNhc2UuYCA6XG4gICAgICBgc2hvdWxkIG5vdCBoYXZlIGFkZGl0aW9uYWwgcHJvcGVydGllc2AsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl5cXFxcZHsxM30kXCInOiAoKSA9PiBgc2hvdWxkIGJlIGNvbXBvc2VkIG9mIDEzIG51bWJlcnNgLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeWzAtOV17NH0oLVswLTldezJ9KT8oLVswLTldezJ9KT8kXCInOiAoKSA9PiBkYXRlRm9ybWF0TWVzc2FnZSxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXihbMC05XXs0fXwtKSgtWzAtOV17Mn0pPygtWzAtOV17Mn0pPyRcIic6ICgpID0+IGRhdGVGb3JtYXRNZXNzYWdlLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeKFswLTldezR9fC0pKC1bMC05XXsyfSk/KC1bMC05XXsyfSk/KFtUXVswLTJdWzAtOV1cXDpbMC01XVswLTldXFw6WzAtNV1bMC05XSgoXFwrfFxcLSlbMC0xXVswLTldOlswLTVdWzAtOV0pPyk/JFwiJzogKCkgPT4gZGF0ZUZvcm1hdE1lc3NhZ2UsXG4gICdzaG91bGQgYmUgbGlua2VkIHRvIGFuIGV4aXN0aW5nIG5vZGUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgWW91ciBzdWJtaXNzaW9uIGRvZXMgbm90IGNvbnRhaW4gdGhlICR7cGFyYW1zPy5ub2RlPy50eXBlfSB3aXRoICR7Y29kZShgaWQ9JHtwYXJhbXM/Lm5vZGU/LmlkfWApfS5cbiAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBsaW5rIHRvIGFuIGV4aXN0aW5nICR7cGFyYW1zPy5ub2RlPy50eXBlfSBvbiB0aGUgSGVzdGlhIHBsYXRmb3JtLCB5b3UgbXVzdCB1c2UgJHtjb2RlKGBAaWQ9JHtwYXJhbXM/Lm5vZGU/LmlkfWApfSBpbnN0ZWFkLlxuICAgIE90aGVyd2lzZSB5b3UgbXVzdCBpbmNsdWRlIGEgZnVsbCAke3BhcmFtcz8ubm9kZT8udHlwZX0gd2l0aCBpZCAke2NvZGUocGFyYW1zPy5ub2RlPy5pZCl9LmAsXG4gICdtdXN0IGJlIHdpdGhpbiB0aGUgY291bnRyeSc6ICgpID0+IGBUaGUgY291bnRyeSBwcm92aWRlZCBkb2VzIG5vdCBjb250YWluIHRoZSByZWdpb24gcHJvdmlkZWQuIFBsZWFzZSBjaGVja1xuICB0aGUgY291bnRyeSBmb3IgZXJyb3JzIG9yIHRoZSByZWdpb24gZm9yIGVycm9ycywgYW5kIHJlZmVyZW5jZSB0aGUgJHtnbG9zc2FyeUxpbmsoJ0dsb3NzYXJ5IG9mIFRlcm1zJyl9LmAsXG4gIFttYXBFcnJvck1lc3NhZ2VdOiAoeyBkYXRhUGF0aCB9KSA9PlxuICAgIGRhdGFQYXRoID09PSAnLnJlZ2lvbicgPyBgVGhlIHJlZ2lvbiBwcm92aWRlZCBkb2VzIG5vdCBjb250YWluIHRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIHByb3ZpZGVkLiBQbGVhc2UgY2hlY2sgdGhlXG4gIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgZm9yIGVycm9ycyBvciB0aGUgcmVnaW9uIGZvciBlcnJvciwgYW5kIHJlZmVyZW5jZSB0aGUgJHtnbG9zc2FyeUxpbmsoJ0dsb3NzYXJ5IG9mIFRlcm1zJyl9LmAgOlxuICAgIGBUaGUgY291bnRyeSBwcm92aWRlZCBkb2VzIG5vdCBjb250YWluIHRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIHByb3ZpZGVkLiBQbGVhc2UgY2hlY2sgdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGVcbiAgZm9yIGVycm9ycyBvciB0aGUgY291bnRyeSBmb3IgZXJyb3JzLCBhbmQgcmVmZXJlbmNlIHRoZSAke2dsb3NzYXJ5TGluaygnR2xvc3Nhcnkgb2YgVGVybXMnKX0uYCxcbiAgJ3N1bSBub3QgZXF1YWwgdG8gMTAwJSBmb3Igc2FuZENvbnRlbnQsIHNpbHRDb250ZW50LCBjbGF5Q29udGVudCc6XG4gICAgKCkgPT4gYFRoZSBzdW0gb2YgU2FuZCwgU2lsdCwgYW5kIENsYXkgY29udGVudCBzaG91bGQgZXF1YWwgMTAwJSBmb3IgZWFjaCBzb2lsIGRlcHRoIGludGVydmFsLmAsXG4gICdpcyBvdXRzaWRlIHRoZSBhbGxvd2VkIHJhbmdlJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gcGFyYW1zPy50ZXJtXG4gICAgICAgICAgICA/IGBUaGUgdmFsdWUgZm9yICR7Y29kZShwYXJhbXM/LnRlcm1bJ0BpZCddIHx8IHBhcmFtcz8udGVybS5uYW1lKX0gaXMgb3V0c2lkZSB0aGUgcmFuZ2UgZXN0YWJsaXNoZWQgZm9yIHRoZSBzb2lsIHRleHR1cmUgeW91IHByb3ZpZGVkLlxuICAgICAgICAgICAgRm9yIHRoaXMgc29pbCB0ZXh0dXJlLCB0aGUgbWF4aW11bSAke2NvZGUocGFyYW1zPy50ZXJtWydAaWQnXSB8fCBwYXJhbXM/LnRlcm0ubmFtZSl9IGlzICR7cGFyYW1zPy5yYW5nZT8ubWF4fSBhbmQgdGhlIG1pbmltdW0gaXMgJHtwYXJhbXM/LnJhbmdlPy5taW59LmBcbiAgICAgICAgICAgIDogYERvZXMgbm90IG1hdGNoIHRoZSBwb3NzaWJsZSByYW5nZXMgb2Ygc2FuZCwgc2lsdCBhbmQgY2xheSBjb250ZW50LmBcbiAgICAgICAgOiBgRWFjaCBzb2lsIHRleHR1cmUgaGFzIGEgbWF4aW11bSBhbmQgbWluaW11bSB2YWx1ZSBmb3Igc2FuZCwgc2lsdCwgYW5kIGNsYXkgY29udGVudC5cbiAgICAgICAgQXQgbGVhc3Qgb25lIG1lYXN1cmVtZW50IG9mIHNhbmQsIHNpbHQsIG9yIGNsYXkgY29udGVudCBkb2VzIG5vdCBtYXRjaCB0aGUgcG9zc2libGUgcmFuZ2UgZm9yIHRoZSBzcGVjaWZpZWQgc29pbCB0ZXh0dXJlLmBcbiAgICB9XG4gICAgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgUGxlYXNlIGNoZWNrIHRoZSBtZWFzdXJlbWVudCwgaXRzIGRlcHRoIGludGVydmFscywgYW5kIHRoZSBkYXRlcyBvZiB0aGUgbWVhc3VyZW1lbnQgb3IgdXBkYXRlIHRoZSBzb2lsIHRleHR1cmUgaWYgbmVlZGVkLmBcbiAgICAgICAgOiBgUGxlYXNlIGNoZWNrIHlvdXIgbWVhc3VyZW1lbnRzLCB0aGVpciBkZXB0aCBpbnRlcnZhbHMsIGFuZCB0aGUgZGF0ZXMgb2YgdGhlIG1lYXN1cmVtZW50cyBvciB1cGRhdGUgdGhlIHNvaWwgdGV4dHVyZXMgaWYgbmVlZGVkLmBcbiAgICB9YCxcbiAgJ3Nob3VsZCBiZSBlcXVhbCB0byBvbmUgb2YgdGhlIGFsbG93ZWQgdmFsdWVzJzpcbiAgICAoeyBwYXJhbXMgfSkgPT4gYG11c3QgaGF2ZSBvbmUgb2YgdGhlc2UgdmFsdWVzOiAke3BhcmFtcz8uYWxsb3dlZFZhbHVlcy5tYXAoY29kZSkuam9pbignLCAnKX1gLFxuICAnaXMgbm90IGFsbG93ZWQgZm9yIHRoaXMgY2hhcmFjdGVyaXNlZEluZGljYXRvcic6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke2Vycm9yQ291bnQgPT09IDEgP1xuICAgICAgYCR7XG4gICAgICAgIHBhcmFtcz8uYWxsb3dlZFZhbHVlcy5sZW5ndGggP1xuICAgICAgICAgIGBjYW4gb25seSBiZSB1c2VkIHdpdGggb25lIG9mIHRoZXNlIG1ldGhvZHM6ICR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfWAgOlxuICAgICAgICAgIGBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZSBhbnkgbWV0aG9kIGFsbG93ZWQuIFBsZWFzZSAke2NvbnRhY3RVcygpfSB0byBjaGFuZ2UgdGhpcy5gXG4gICAgICB9LmAgOlxuICAgICAgYFNvbWUgVGVybXMgYXJlIG5vdCBhbGxvd2VkIHdpdGggdGhlIG1ldGhvZCB5b3Ugc2VsZWN0ZWQuYH1cbiAgICBZb3UgY2FuIGZpbmQgdGhlIGxpc3Qgb2YgYWxsb3dlZCBtZXRob2RzIGZvciBlYWNoIFRlcm0gYnkgY2xpY2tpbmcgb24gdGhlbS5gLFxuICAnc2hvdWxkIGNvbnRhaW4gYSB2YWxpZCBpdGVtJzogKHsgZGF0YVBhdGggfSkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCEpO1xuICAgIHJldHVybiBwYXRocy5sZW5ndGggPj0gMiA/XG4gICAgICBgVGhlICR7cGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0ucGF0aH0gcmVsYXRlZCB0byB0aGlzICR7cGx1cmFsaXplKHBhdGhzW3BhdGhzLmxlbmd0aCAtIDJdLmxhYmVsLCAxKX0gYXJlIGludmFsaWRgIDpcbiAgICAgIGBUaGUgJHtwYXRoc1swXS5wYXRofSBhcmUgaW52YWxpZGA7XG4gIH0sXG4gICdtYXkgYmUgYmV0d2VlbiAwIGFuZCAxMDAnOiAoKSA9PiAncGVyY2VudGFnZXMgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwLCBub3QgMCBhbmQgMS4gVGhpcyBtYXkgYmUgYW4gZXJyb3IuJyxcbiAgJ21heSBub3QgYWxsIGJlIHNldCB0byBmYWxzZSc6ICgpID0+XG4gICAgYEV2ZXJ5IHZhbHVlIGluIHRoZSBkYXRhIGNvbXBsZXRlbmVzcyBhc3Nlc3NtZW50IGlzICR7Y29kZSgnZmFsc2UnKX0uIFlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gZmlsbCBpdCBpbi5cbiAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBmaWxsIGl0IGluLCBwbGVhc2Ugc2VlIHRoZSAke3NjaGVtYUxpbmsoJ0N5Y2xlI2NvbXBsZXRlbmVzcycsICdzY2hlbWEnKX0uYCxcbiAgJ21heSBub3QgYmUgZW1wdHknOiAoKSA9PiAnaWYgdGhpcyB2YWx1ZSBzaWduaWZpZXMgbm8gZGF0YSwgSGVzdGlhIG9ubHkgYWNjZXB0cyBcIi1cIiBvciBlbXB0eSBmb3Igbm8gZGF0YScsXG4gICdtYXkgbm90IGJlIDAnOiAoeyBkYXRhUGF0aCB9LCBlcnJvckNvdW50KSA9PiB7XG4gICAgY29uc3QgcGF0aHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoISk7XG4gICAgcmV0dXJuIGBBZGRpbmcgYSB2YWx1ZSAke2Vycm9yQ291bnQgPT09IDEgPyBgIHRvIGV2ZXJ5ICR7cGF0aHNbMF0ubGFiZWx9IGAgOiAnICd9IGlzIGhpZ2hseSByZWNvbW1lbmRlZFxuICAgICAgYXMgd2l0aG91dCB0aGlzIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjYWxjdWxhdGUgdGhlIEltcGFjdCBBc3Nlc3NtZW50LlxuICAgICAgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB3ZSByZWNvbW1lbmQgc2V0dGluZyB2YWx1ZSB0byAwLmA7XG4gIH0sXG4gICd0aGUgc3VtIG9mIGFib3ZlIGdyb3VuZCBjcm9wIHJlc2lkdWUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyc6ICgpID0+XG4gICAgYEZvciBzaXRlcyBvZiB0eXBlICR7Y29kZShTaXRlU2l0ZVR5cGUuY3JvcGxhbmQpfSBvciAke2NvZGUoU2l0ZVNpdGVUeXBlWydwZXJtYW5lbnQgcGFzdHVyZSddKX0sXG4gICAgaWYgZGF0YSBjb21wbGV0ZW5lc3MgaXMgbWFya2VkIHRydWUgZm9yIGNyb3AgcmVzaWR1ZSxcbiAgICB0aGUgc3VtIG9mIHRoZSBBYm92ZSBncm91bmQgY3JvcCByZXNpZHVlIHRlcm1zIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gemVybyxcbiAgICBhbmQgQmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIHplcm8uYCxcbiAgJ2xvbmdGYWxsb3dQZXJpb2QgbXVzdCBiZSBsb3dlciB0aGFuIDUgeWVhcnMnOiAoKSA9PlxuICAgIGBZb3VyIGxvbmdGYWxsb3dQZXJpb2QgaXMgZ3JlYXRlciB0aGFuIGZpdmUgeWVhcnMuXG4gICAgRmFsbG93IGlzIGRlZmluZWQgYnkgRkFPU1RBVCBhcyBsYW5kIGxlZnQgdW5jdWx0aXZhdGVkIGZvciBiZXR3ZWVuIDEgYW5kIDUgeWVhcnMsXG4gICAgYW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB1c2VkIGZvciBIZXN0aWEgYWxzby5gLFxuICAnc2hvdWxkIGJlIHdpdGhpbiBwZXJjZW50YWdlIG9mIGRlZmF1bHQgdmFsdWUnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBlcnJvckNvdW50ID09PSAxID9cbiAgICAgIGBpcyDCsSR7dGhyZXNob2xkKHBhcmFtcz8udGhyZXNob2xkKX0gZGlmZmVyZW50IHRvIG91ciBkZWZhdWx0IHZhbHVlIHdoaWNoIGlzICR7cGFyYW1zPy5kZWZhdWx0fS5cbiAgICAgIFBsZWFzZSBjaGVjayB5b3VyIHVwbG9hZGVkIGRhdGEgYXMgdGhpcyBtYXkgYmUgYW4gZXJyb3IuYCA6XG4gICAgICBgaXMgc3Vic3RhbnRpYWxseSBkaWZmZXJlbnQgdGhhbiBvdXIgZGVmYXVsdCB2YWx1ZS4gUGxlYXNlIGNoZWNrIHlvdXIgdXBsb2FkZWQgZGF0YSBhcyB0aGlzIG1heSBiZSBhbiBlcnJvci5gLFxuICAndGhlIHZhbHVlIHByb3ZpZGVkIGlzIG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIG1vZGVsIHJlc3VsdCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBUaGUgZXhwZWN0ZWQgcmVzdWx0IGZvciAke2NvZGUocGFyYW1zPy50ZXJtLm5hbWUpfVxuICAgICR7cGFyYW1zPy5tb2RlbD8ubmFtZSA/IGB1c2luZyAke21vZGVsTGluayhwYXJhbXM/LnRlcm0sIHBhcmFtcz8ubW9kZWwpfSBgIDogJyd9XG4gICAgZnJvbSB0aGUgZGF0YSBwcm92aWRlZCBpbiB0aGUgdXBsb2FkIGlzICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYCR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmV4cGVjdGVkLCAzKSl9LCBidXQgdGhlIHZhbHVlIGluIHRoZSB1cGxvYWQgaXMgJHtjb2RlKHRvUHJlY2lzaW9uKHBhcmFtcz8uY3VycmVudCwgMykpfS5cbiAgICAgICAgJHtwYXJhbXM/LnRocmVzaG9sZCA/IGBPdXIgdGhyZXNob2xkIGlzIMKxJHt0aHJlc2hvbGQocGFyYW1zPy50aHJlc2hvbGQpfS5gIDogJyd9XG4gICAgICAgIFBsZWFzZSBlaXRoZXI6XG4gICAgICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kZWNpbWFsXCI+XG4gICAgICAgIDxsaT5DaGVjayB0aGUgJHtwYXJhbXM/LnRlcm0udGVybVR5cGV9IHZhbHVlIHlvdSBwcm92aWRlZDs8L2xpPlxuICAgICAgICA8bGk+Q2hlY2sgdGhlIGRhdGEgeW91IHByb3ZpZGVkIHdoaWNoIGlzIHRoZSBpbnB1dCBpbnRvIHRoaXMgbW9kZWw7PC9saT5cbiAgICAgICAgPGxpPkNhcmVmdWxseSByZWFkIHRoZSBkb2N1bWVudGF0aW9uIHRvIHVuZGVyc3RhbmQgaWYgd2UgdXNlZCBhIGRlZmF1bHQgcHJvcGVydHkgYXMgcGFydCBvZiB0aGUgY2FsY3VsYXRpb25zLjwvbGk+XG4gICAgICAgIDwvdWw+YFxuICAgICAgICA6ICdub3QgY29uc2lzdGVudCB3aXRoIHRoZSBtb2RlbCByZXN1bHQuJ1xuICAgIH1gLFxuICAndGhlIG1lYXN1cmVtZW50IHByb3ZpZGVkIG1pZ2h0IGJlIGluIGVycm9yJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYFRoZSBleHBlY3RlZCB2YWx1ZSBmb3IgJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX1cbiAgICAke3BhcmFtcz8ubW9kZWw/Lm5hbWUgPyBgdXNpbmcgJHttb2RlbExpbmsocGFyYW1zPy50ZXJtLCBwYXJhbXM/Lm1vZGVsKX0gYCA6ICcnfVxuICAgIGZyb20gdGhlIGRhdGEgcHJvdmlkZWQgaW4gdGhlIHVwbG9hZCBpcyAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGAke2NvZGUodG9QcmVjaXNpb24ocGFyYW1zPy5leHBlY3RlZCwgMykpfSwgYnV0IHRoZSB2YWx1ZSBpbiB0aGUgdXBsb2FkIGlzICR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmN1cnJlbnQsIDMpKX0uXG4gICAgICAgICR7cGFyYW1zPy50aHJlc2hvbGQgPyBgT3VyIHRocmVzaG9sZCBpcyDCsSR7dGhyZXNob2xkKHBhcmFtcz8udGhyZXNob2xkKX0uYCA6ICcnfWAgOlxuICAgICAgICBgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgbW9kZWwgcmVzdWx0LmBcbiAgICB9YCxcbiAgJ211c3QgYmUgZXF1YWwgdG8gcHJldmlvdXMgcHJvZHVjdCBtdWx0aXBsaWVkIGJ5IHRoZSBzaGFyZSc6ICgpID0+XG4gICAgYFByb2R1Y3RzIGZyb20gYSB0cmFuc2Zvcm1hdGlvbiB3aGljaCBhcmUgYW4gSW5wdXQgaW4gdG8gdGhlIG5leHQgdHJhbnNmb3JtYXRpb24gbXVzdCBmb2xsb3cgdGhlIGZvbGxvd2luZyBydWxlOlxuICAgICR7Y29kZSgncHJldmlvdXMucHJvZHVjdC52YWx1ZSAqIGN1cnJlbnQudHJhbnNmb3JtZWRTaGFyZSAvIDEwMCA9PSBjdXJyZW50LmlucHV0LnZhbHVlJyl9YCxcbiAgJ2F0IGxlYXN0IG9uZSBJbnB1dCBtdXN0IGJlIGEgUHJvZHVjdCBvZiB0aGUgQ3ljbGUnOiAoKSA9PlxuICAgIGBBIFRyYW5zZm9ybWF0aW9uIGNvbnZlcnRzIGEgUHJvZHVjdCBmcm9tIGEgQ3ljbGUgaW50byBhbm90aGVyIFByb2R1Y3QuXG4gICAgVGhlcmVmb3JlLCBhdCBsZWFzdCBvbmUgSW5wdXQgaW50byB0aGUgVHJhbnNmb3JtYXRpb24gbXVzdCBiZSBhIFByb2R1Y3Qgb2YgdGhlIEN5Y2xlLmAsXG4gICdtdXN0IGhhdmUgb25seSBvbmUgZW50cnkgd2l0aCB0aGUgc2FtZSB0ZXJtLnRlcm1UeXBlID0gZXhjcmV0YU1hbmFnZW1lbnQnOiAoKSA9PlxuICAgIGBUaGVyZSBjYW4gb25seSBiZSBvbmUgUHJhY3RpY2Ugb2YgdHlwZSBleGNyZXRhTWFuYWdlbWVudCBpbiBhIEN5Y2xlLlxuICAgIFRvIHJlcHJlc2VudCBtdWx0aXBsZSBleGNyZXRhIG1hbmFnZW1lbnQgc3lzdGVtcyBlaXRoZXIgdXNlIG11bHRpcGxlIEN5Y2xlcyBhbmQgbGluayB0aGVtIHRvZ2V0aGVyLFxuICAgIG9yIHVzZSBUcmFuc2Zvcm1hdGlvbnMgd2l0aGluIGEgQ3ljbGUgYW5kIGxpbmsgdGhvc2UgdG9nZXRoZXIuYCxcbiAgJ211c3QgYmUgaW5jbHVkZWQgYXMgYW4gSW5wdXQnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgVGhlIGV4Y3JldGEgUHJvZHVjdHMgYXJlIG5vdCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSBleGNyZXRhIElucHV0cy5cbiAgICAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGBFLmcuLCB5b3UgY2Fubm90IGdldCAke1xuICAgICAgICAgIGNvZGUocGFyYW1zPy50ZXJtPy5uYW1lKVxuICAgICAgICB9IGZyb20gJHtcbiAgICAgICAgICAocGFyYW1zPy5leHBlY3RlZCB8fCBbXSkubWFwKHYgPT4gY29kZShrZXlUb0xhYmVsKHYpKSkuam9pbignIG9yICcpXG4gICAgICAgIH0uYCA6XG4gICAgICAgICcnXG4gICAgfVxuICAgIFBsZWFzZSBjaGVjayB0aGUgSW5wdXRzIGFuZCBQcm9kdWN0cyBvZiB0aGUgVHJhbnNmb3JtYXRpb24uYCxcbiAgJ211c3QgYWRkIHRoZSBsaW5rZWQgaW5wdXRzIHRvIHRoZSBjeWNsZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/XG4gICAgICAgIGBZb3UgaGF2ZSBzdGF0ZWQgdGhhdCAke2NvZGUocGFyYW1zPy50ZXJtPy5uYW1lKX0gd2FzIGNyZWF0ZWQgYnkgdGhlIGZvbGxvd2luZyBJbnB1dHMgJHtcbiAgICAgICAgICBwYXJhbXM/LmV4cGVjdGVkPy5tYXAoZSA9PiBjb2RlKGUubmFtZSkpLmpvaW4oJyAsICcpXG4gICAgICAgIH1gOlxuICAgICAgICAnWW91IGhhdmUgc3RhdGVkIHNvbWUgRW1pc3Npb25zIHdlcmUgY3JlYXRlZCBieSBzb21lIElucHV0cydcbiAgICB9LlxuICAgIEhvd2V2ZXIsIHRoZXNlIElucHV0cyBkbyBub3QgZXhpc3QgaW4gdGhlIEN5Y2xlLlxuICAgIFBsZWFzZSBhZGQgdGhlc2UgSW5wdXRzLCBldmVuIGlmIHlvdSBkbyBub3QgaGF2ZSBhIHZhbHVlIGZvciB0aGVtLmAsXG4gICdtdXN0IGFkZCB0aGUgbGlua2VkIHRyYW5zZm9ybWF0aW9ucyB0byB0aGUgY3ljbGUnOiAoeyBsZXZlbCwgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID9cbiAgICAgICAgYFlvdSBoYXZlIHNwZWNpZmllZCB0aGF0JHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9IHdhcyBjcmVhdGVkIGR1cmluZyBhIFRyYW5zZm9ybWF0aW9uIHdpdGggdGhlIFRlcm0gbmFtZSAke2NvZGUocGFyYW1zPy5leHBlY3RlZD8ubmFtZSl9YCA6XG4gICAgICAgICdZb3UgaGF2ZSBzdGF0ZWQgc29tZSBFbWlzc2lvbnMgd2VyZSBjcmVhdGVkIGJ5IHNvbWUgVHJhbnNmb3JtYXRpb25zJ1xuICAgIH0uXG4gICAgSG93ZXZlciwgd2UgY2Fubm90IGZpbmQgYSBUcmFuc2Zvcm1hdGlvbiB3aXRoaW4gdGhlIEN5Y2xlIHdpdGggdGhpcyBUZXJtIG5hbWUuXG4gICAgJHtcbiAgICAgIGxldmVsID09PSAnZXJyb3InID9cbiAgICAgICAgJ1BsZWFzZSBjaGVjayB0aGUgVGVybXMgdXNlZCBpbiB0aGUgRW1pc3Npb25zIGFuZC9vciB0aGUgVHJhbnNmb3JtYXRpb25zLicgOlxuICAgICAgICAnWW91IG1heSB3YW50IHRvIGFkZCB0aGlzIFRyYW5zZm9ybWF0aW9uLidcbiAgICB9YCxcbiAgJ2V2ZXJ5IGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGJlIHVuaXF1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGlzIEJsYW5rIE5vZGUgaXMgZHVwbGljYXRlZC4gRXZlcnkgQmxhbmsgTm9kZSBzaG91bGQgYmUgdW5pcXVlLlxuICAgIFVuaXF1ZW5lc3MgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZm9sbG93aW5nIGZpZWxkczogJHtcbiAgICAgIChwYXJhbXM/LmtleXMgfHwgW10pLm1hcChjb2RlKS5qb2luKCcsICcpXG4gICAgfWAsXG4gICdtdXN0IGNvbnRhaW4gYXMgbWFueSBpdGVtcyBhcyB2YWx1ZXMnOiAoeyBwYXJhbXMsIGRhdGFQYXRoIH0pID0+XG4gICAgYFRoZSBudW1iZXIgb2YgJHtjb2RlKGRhdGFQYXRoLnNwbGl0KCcuJykucG9wKCkpfSBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgJHtjb2RlKCd2YWx1ZScpfS5cbiAgICBDdXJyZW50bHkgdGhlcmUgYXJlICR7cGFyYW1zPy5jdXJyZW50fSAke2NvZGUoZGF0YVBhdGguc3BsaXQoJy4nKS5wb3AoKSl9IGJ1dCAke3BhcmFtcz8uZXhwZWN0ZWR9ICR7Y29kZSgndmFsdWUnKX0uYCxcbiAgJ2lzIHRvbyBnZW5lcmljJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgUHJvZHVjdCAke2NvZGUocGFyYW1zPy5wcm9kdWN0Py5uYW1lKX0gaG93ZXZlcixcbiAgICB5b3UgaGF2ZSB1c2VkIGEgZ2VuZXJpYyAke2dsb3NzYXJ5VHlwZUxpbmsocGFyYW1zPy50ZXJtPy50ZXJtVHlwZSl9IHRlcm0gJHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9LlxuICAgIFVzZSBhIG1vcmUgc3BlY2lmaWMgdGVybSBmb3IgdGhlICR7XG4gICAgICBnbG9zc2FyeVR5cGVMaW5rKHBhcmFtcz8udGVybT8udGVybVR5cGUpXG4gICAgfSB3aGljaCByZWZsZWN0cyB0aGUgc3BlY2lmaWMgJHtcbiAgICAgIGdsb3NzYXJ5VHlwZUxpbmsocGFyYW1zPy5wcm9kdWN0Py50ZXJtVHlwZSlcbiAgICB9LmAsXG4gICdpcyBtaXNzaW5nIHJlcXVpcmVkIGJpYmxpb2dyYXBoaWMgaW5mb3JtYXRpb24nOiAoKSA9PlxuICAgIGBUaGUgYXV0b21hdGljIGJpYmxpb2dyYXBoeSBzZWFyY2ggZmFpbGVkIGZvciB0aGlzIEJpYmxpb2dyYXBoeS4gRWl0aGVyOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kZWNpbWFsXCI+XG4gICAgPGxpPk1hbnVhbGx5IGZpbGwtaW4gdGhlIDxiPnJlcXVpcmVkPC9iPiBiaWJsaW9ncmFwaGljIGluZm9ybWF0aW9uIGFzIHBlciAke3NjaGVtYUxpbmsoU2NoZW1hVHlwZS5CaWJsaW9ncmFwaHksICdvdXIgc2NoZW1hJyl9LjwvbGk+XG4gICAgPGxpPlByb3ZpZGUgdGhlICR7Y29kZSgnZG9jdW1lbnRET0knKX0gYXMgd2VsbCBhcyB0aGUgJHtjb2RlKCd0aXRsZScpfS48L2xpPlxuICAgIDxsaT5DaGVjayB0aGUgJHtjb2RlKCdkb2N1bWVudERPSScpfSBhbmQgJHtjb2RlKCd0aXRsZScpfSBmb3IgdHlwb3MgYWdhaW5zdCB0aGUgJHtleHRlcm5hbExpbmsoJ2h0dHBzOi8vd3d3Lm1lbmRlbGV5LmNvbScsICdNZW5kZWxleSBjYXRhbG9ndWUnKX0uPC9saT5cbiAgICA8L3VsPmAsXG4gICdzaG91bGQgYmUgbG93ZXIgdGhhbiBtYXggc2l6ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgYm91bmRhcnkgb3IgcmVnaW9uIGlzID4ke3BhcmFtcz8uZXhwZWN0ZWR9a20yIGFuZCBpcyB0b28gbGFyZ2UgdG8gcmVsaWFibHkgZ2FwIGZpbGwgTWVhc3VyZW1lbnRzLlxuICAgIElmIHlvdSBhcmUgYWJsZSB0byB1c2UgYSBtb3JlIHNwZWNpZmljIHJlZ2lvbiwgcGxlYXNlIGRvLmAsXG4gICdhbiBleGNyZXRhIGlucHV0IGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgYW4gZXhjcmV0YU1hbmFnZW1lbnQgcHJhY3RpY2UnOiAoeyBkYXRhUGF0aCB9KSA9PiB7XG4gICAgY29uc3QgcGF0aHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoISk7XG4gICAgcmV0dXJuIGBFeGNyZXRhIG1hbmFnZW1lbnQgaXMgdGhlIGNvbnZlcnNpb24gb2YgZXhjcmV0YSB0byBhbm90aGVyIHR5cGUgb2YgZXhjcmV0YS5cbiAgICAgIFlvdSBoYXZlIGFkZGVkIGFuIGV4Y3JldGFNYW5hZ2VtZW50IFByYWN0aWNlIHRvIHRoaXMgJHtwYXRoc1swXS5sYWJlbH0gYnV0IHRoZXJlIGlzIG5vIGV4Y3JldGEgSW5wdXQuXG4gICAgICBUbyByZXByZXNlbnQgZXhjcmV0YSBtYW5hZ2VtZW50LCB1c2UgYSAke3BhdGhzWzBdLmxhYmVsfSB3aXRoIGV4Y3JldGEgYXMgYW4gSW5wdXQgYW5kIGV4Y3JldGFNYW5hZ2VtZW50IGFzIGEgUHJhY3RpY2UuYDtcbiAgfSxcbiAgJ29ubHkgMSBwcmltYXJ5IHByb2R1Y3QgYWxsb3dlZCc6ICgpID0+ICdUaGVyZSBjYW4gb25seSBiZSBvbmUgcHJpbWFyeSBwcm9kdWN0IGluIGVhY2ggQ3ljbGUuJyxcbiAgJ2lzIG5vdCBhbGxvd2VkIGluIGNvbWJpbmF0aW9uIHdpdGggbm9UaWxsYWdlJzogKCkgPT5cbiAgICBgVGhpcyBvcGVyYXRpb24gaW52b2x2ZXMgdGlsbGFnZSwgeWV0IHlvdSBoYXZlIHNwZWNpZmllZCB0aGUgUHJhY3RpY2UgJHt0ZXJtTGluayhub1RpbGxhZ2UpfS5cbiAgICBFaXRoZXIgY2hhbmdlIHRoaXMgb3BlcmF0aW9uIG9yIHRoZSBQcmFjdGljZS5gLFxuICAnc2hvdWxkIGNvbnRhaW4gYSB0aWxsYWdlIHByYWN0aWNlJzogKCkgPT5cbiAgICBgV2UgcmVjb21tZW5kIHNwZWNpZnlpbmcgdGhlIHR5cGUgb2YgdGlsbGFnZSB1c2VkIGZvciB0aGlzIEN5Y2xlLlxuICAgIFBsZWFzZSBzZWUgdGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUudGlsbGFnZSl9IGdsb3NzYXJ5LmAsXG4gICdtdXN0IHNldCB2YWx1ZSBmb3IgZXZlcnkgdGlsbGFnZSBwcmFjdGljZSc6ICgpID0+XG4gICAgYEVpdGhlciBzcGVjaWZ5IGEgc2luZ2xlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUudGlsbGFnZSl9IHByYWN0aWNlIG9yIGFkZCBhIHZhbHVlIHRvIGFsbCBwcmFjdGljZXMuYCxcbiAgJ3N1bSBub3QgZXF1YWwgdG8gMTAwJSBmb3IgdGlsbGFnZSBwcmFjdGljZXMnOiAoKSA9PlxuICAgIGBUaGUgc3VtIG9mICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUudGlsbGFnZSl9IHByYWN0aWNlcyBtdXN0IGVxdWFsIDEwMCUuYCxcbiAgJ2NhbiBvbmx5IGhhdmUgMSB0aWxsYWdlIHByYWN0aWNlIHdpdGhvdXQgYSB2YWx1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBJdCBpcyBub3QgcG9zc2libGUgZm9yIGEgQ3ljbGUgdG8gaGF2ZSB0aGUgZm9sbG93aW5nIHRpbGxhZ2UgUHJhY3RpY2VzOlxuICAgICR7KHBhcmFtcz8uY3VycmVudCA/PyBbXSkubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSkuam9pbignIGFuZCAnKX0gYXQgdGhlIHNhbWUgdGltZS5cbiAgICBJZiBtdWx0aXBsZSB0aWxsYWdlIHByYWN0aWNlcyBkaWQgb2NjdXIsIHBsZWFzZSBzcGVjaWZ5IHRoZSBwZXJjZW50YWdlIG9mIGFyZWEgdGhleSBvY2N1cnJlZCBvbi5gLFxuICAnY2FuIG5vdCBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgQ3ljbGUnOiAoKSA9PiAnWW91IGNhbiBub3QgbGluayBhbiBJbnB1dCB0byB0aGUgSW1wYWN0IEFzc2Vzc21lbnQgb2YgdGhlIHNhbWUgQ3ljbGUuJyxcbiAgLy8gZGVwcmVjYXRlZCwgcmVtb3ZlIHdoZW4gbWVzc2FnZSBpcyBub3QgYmVpbmcgdXNlZCBhbnltb3JlXG4gICdtdXN0IGJlIDAgZm9yIHByb2R1Y3QgdmFsdWUgMCc6ICh7IGRhdGFQYXRoLCBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB0aGUgJHtjb2RlKGRhdGFQYXRoPy5zcGxpdCgnLicpLnBvcCgpISl9IG9mICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gY29kZShwYXJhbXM/LnRlcm0ubmFtZSkgOiAndGhhdCBwcm9kdWN0J1xuICAgIH0gbXVzdCBhbHNvIGJlIHplcm8uYCxcbiAgJ2Vjb25vbWljVmFsdWVTaGFyZSBtdXN0IGJlIDAgZm9yIHByb2R1Y3QgdmFsdWUgMCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHRoZSBlY29ub21pY1ZhbHVlU2hhcmUgb2YgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgPyBjb2RlKHBhcmFtcz8udGVybS5uYW1lKSA6ICd0aGF0IHByb2R1Y3QnXG4gICAgfSBtdXN0IGFsc28gYmUgemVyby5gLFxuICAncmV2ZW51ZSBtdXN0IGJlIDAgZm9yIHByb2R1Y3QgdmFsdWUgMCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHRoZSByZXZlbnVlIG9mICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gY29kZShwYXJhbXM/LnRlcm0ubmFtZSkgOiAndGhhdCBwcm9kdWN0J1xuICAgIH0gbXVzdCBhbHNvIGJlIHplcm8uYCxcbiAgJ3Nob3VsZCBhZGQgYSBzb3VyY2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgV2UgcmVjb21tZW5kIGFkZGluZyBhIFNvdXJjZSB0byBhbGwgZGF0YSBpdGVtcy5cbiAgICBUaGlzIGNhbiBiZSBkb25lIGJ5IGFkZGluZyB0aGUgJHtjb2RlKHBhcmFtcz8uY3VycmVudCl9IGZpZWxkLlxuICAgIFNvdXJjZXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGZvciBlYWNoIGRhdGEgaXRlbSAoaS5lLiwgZWFjaCBJbnB1dCwgRW1pc3Npb24sIFByb2R1Y3QsIFByYWN0aWNlLCBNZWFzdXJlbWVudCwgb3IgSW5mcmFzdHJ1Y3R1cmUpLmAsXG4gICdjb3ZlciBjcm9wIGN5Y2xlIGNvbnRhaW5zIG5vbiBjb3ZlciBjcm9wIHByb2R1Y3QnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBzcGVjaWZpZWQgdGhhdCB0aGlzIGNyb3AgaXMgYSBjb3ZlciBjcm9wIHVzaW5nIGEgUHJhY3RpY2UuXG4gICAgQSBjb3ZlciBjcm9wIGlzIGRlZmluZWQgYXMgXCJhIGNyb3Agd2hpY2ggaXMgbGVmdCBpbiB0aGUgZmllbGQgd2l0aG91dCBhbnkgZnJhY3Rpb24gaGFydmVzdGVkIGJ5IHRoZSBlbmQgb2YgdGhlIEN5Y2xlXCIuXG4gICAgVGhlIFByb2R1Y3RzIG9mIHRoaXMgQ3ljbGUgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoaXMgY3JvcCBiZWluZyBhIGNvdmVyIGNyb3AuXG4gICAgUGxlYXNlIGNoZWNrIHRoZSBQcm9kdWN0cyBvciB0aGUgUHJhY3RpY2VzLmAsXG4gICdzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGN5Y2xlIHByb2R1Y3RzJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID9cbiAgICAgICAgYFRoZSBQcm9kdWN0ICR7Y29kZShwYXJhbXMucHJvZHVjdC5uYW1lKX0gZG9lcyBub3QgZXhpc3QgaW4gdGhlIEN5Y2xlIHdpdGggaWQgJHtjb2RlKHBhcmFtcy5ub2RlLmlkKX1gIDpcbiAgICAgICAgJ1RoZSBJbXBhY3RBc3Nlc3NtZW50IFByb2R1Y3QgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGxpbmtlZCBDeWNsZSdcbiAgICB9LlxuICAgIFBsZWFzZSBhZGQgdGhlIFByb2R1Y3QgaW4gdGhlIEN5Y2xlIG9yIHJlbW92ZSB0aGUgbGluayB3aXRoIHRoZSBDeWNsZS5gLFxuICAnbXVsdGlwbGUgSW1wYWN0QXNzZXNzbWVudCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIFByb2R1Y3Qgb2YgdGhlIHNhbWUgQ3ljbGUnOiAoKSA9PlxuICAgIGBPbmx5IDEgSW1wYWN0IEFzc2Vzc21lbnQgY2FuIGJlIHJlbGF0ZWQgdG8gdGhpcyBQcm9kdWN0LlxuICAgIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHByb2R1Y3QgaXMgY29ycmVjdCBvciB0aGUgY3ljbGUuaWQgeW91IGFyZSByZWZlcnJpbmcgdG8gaXMgY29ycmVjdC5gLFxuICAnbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbGFuZCBvY2N1cGF0aW9uJzogKCkgPT5cbiAgICBgTGFuZCB0cmFuc2Zvcm1hdGlvbiBzaG91bGQgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGxhbmQgb2NjdXBhdGlvblxuICAgIChsYW5kIHRyYW5zZm9ybWF0aW9uIGlzIHRoZSBhbW91bnQgb2YgbGFuZCBjb252ZXJ0ZWQgYmV0d2VlbiBzb21lIGRhdGUgaW4gdGhlIHBhc3QgYW5kIHRoZSBjdXJyZW50IHllYXIsXG4gICAgZGl2aWRlZCBieSBhbiBhbW9ydGl6YXRpb24gcGVyaW9kLCBzbyBpdCBzaG91bGQgYWx3YXlzIGJlIGxlc3MgdGhhbiBsYW5kIG9jY3VwYXRpb24gYnkgZGVmaW5pdGlvbikuYCxcbiAgJ3Nob3VsZCBiZSBsaW5rZWQgdG8gYW4gZW1pc3Npb24gaW4gdGhlIEN5Y2xlJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gYCR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9IGV4aXN0c2AgOiAnU29tZSBFbWlzc2lvbnMgZXhpc3QnXG4gICAgfSBpbiBib3RoIHRoZSBDeWNsZSBhbmQgdGhlIFRyYW5zZm9ybWF0aW9uIGJ1dCAke2Vycm9yQ291bnQgPT09IDEgPyAnaXQgaXMnIDogJ3RoZXkgYXJlJ30gbm90IGxpbmtlZCB1c2luZyAke1xuICAgICAgY29kZSgnY3ljbGUuZW1pc3Npb25zLlgudHJhbnNmb3JtYXRpb24udGVybScpXG4gICAgfS4gVGhpcyBtYXkgYmUgYW4gZXJyb3IuYCxcbiAgJ3Nob3VsZCBhZGQgYW4gYW5pbWFsIHByb2R1Y3Rpb24gc3lzdGVtJzogKCkgPT5cbiAgICBgRm9yIGFuaW1hbCBwcm9kdWN0aW9uIGN5Y2xlcywgd2UgcmVjb21tZW5kIHNwZWNpZnlpbmcgdGhlIGFuaW1hbCBwcm9kdWN0aW9uICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuc3lzdGVtKX0gYXMgYSBQcmFjdGljZS5cbiAgICBZb3UgY2FuIGZpbmQgYSBsaXN0IG9mIHN5c3RlbXMgaW4gdGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuc3lzdGVtLCAnR2xvc3NhcnknKX0uYCxcbiAgJ211c3QgYmUgc2V0IHRvIGZhbHNlIHdoZW4gc3BlY2lmeWluZyBmdWVsIHVzZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBJZiBtYWNoaW5lcnkgZnVlbCAoJHtwYXJhbXM/LmFsbG93ZWRWYWx1ZXMubWFwKGNvZGUpLmpvaW4oJywgJyl9KSBpcyB1c2VkIGR1cmluZyBhIEN5Y2xlLFxuICAgIGJ1dCB0aGVyZSBpcyBubyBkYXRhIG9uIHRoZSBhbW91bnQgb2YgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5tYXRlcmlhbCl9IHVzZWQgZm9yIGFncmljdWx0dXJhbCBlcXVpcG1lbnQsXG4gICAgdGhlbiAke2NvZGUoJ2NvbXBsZXRlbmVzcy5tYXRlcmlhbCcpfSBtdXN0IGJlICR7Y29kZSgnZmFsc2UnKX0uYCxcbiAgJ211c3QgYmUgYmVsb3cgb3IgZXF1YWwgdG8gMSBmb3IgdW5pdCBpbiBoYSc6ICgpID0+XG4gICAgYFRoZSBtYXhpbXVtIHZhbHVlIGZvciBhIHByb2R1Y3Qgd2l0aCB1bml0cyAke2NvZGUoJ2hhJyl9IG9uIGEgQ3ljbGUgd2l0aCBhICR7XG4gICAgICBzY2hlbWFMaW5rKCdDeWNsZSNmdW5jdGlvbmFsVW5pdCcsICdmdW5jdGlvbmFsIHVuaXQnKVxuICAgIH0gb2YgJHtjb2RlKCcxIGhhJyl9IGlzICR7Y29kZSgnMScpfS5cbiAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBhZGQgYSBwcm9kdWN0IHdpdGggdGhlIHVuaXRzICR7Y29kZSgna2cnKX0sIHVzZSBhIGRpZmZlcmVudCB0ZXJtLmAsXG4gICdwYXN0dXJlR3Jhc3Mga2V5IHVuaXRzIG11c3QgYmUgXFwnaGFcXCcnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIFRlcm0gJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX0gY2FuJ3QgYmUgdXNlZCBhcyBhIGtleSBmb3IgUGFzdHVyZSBncmFzcy5cbiAgICBQbGVhc2UgdXNlIHRoZSBUZXJtIGRlc2NyaWJpbmcgdGhlIHBsYW50IHdpdGggdGhlIHVuaXRzICR7Y29kZShwYXJhbXMuZXhwZWN0ZWQpfSBpbnN0ZWFkLlxuICAgIFRoaXMgd2lsbCBoZWxwIHVzIGdhcC1maWxsIHRoZSBhbW91bnQgb2YgZ3Jhc3MgY29uc3VtZWQgYnkgdGhlIGhlcmQuYCxcbiAgJ2lzIG91dHNpZGUgY29uZmlkZW5jZSBpbnRlcnZhbCc6ICh7IGRhdGFQYXRoLCBwYXJhbXMgfSkgPT5cbiAgICBgJHtcbiAgICAgIHBhcmFtcz8ub3V0bGllcnMubWFwKHZhbHVlID0+XG4gICAgICAgIGBUaGUgJHtcbiAgICAgICAgICBkYXRhUGF0aC5pbmNsdWRlcygncHJvZHVjdCcpID8gJ3Byb2R1Y3QnIDogJ3ZhbHVlJ1xuICAgICAgICB9IHZhbHVlICR7Y29kZSh2YWx1ZSl9IGlzICR7XG4gICAgICAgICAgdmFsdWUgPiBwYXJhbXM/Lm1pbiA/ICdhYm92ZScgOiAnYmVsb3cnXG4gICAgICAgIH0gJHtcbiAgICAgICAgICBjb2RlKGAkeyhwYXJhbXM/LnRocmVzaG9sZCArICgoMS1wYXJhbXM/LnRocmVzaG9sZCkgLyAyKSkgKiAxMDB9JWApXG4gICAgICAgIH0gb2YgYWxsICR7cGFyYW1zLmdyb3VwID8gY29kZShwYXJhbXMuZ3JvdXApIDogY29kZShwYXJhbXM/LnRlcm0ubmFtZSl9IGRhdGEgaW4gJHtjb2RlKHBhcmFtcz8uY291bnRyeS5uYW1lKX0gb24gdGhlIEhlc3RpYSBwbGF0Zm9ybS5gXG4gICAgICApXG4gICAgfVxuICAgIFBsZWFzZSBkb3VibGUtY2hlY2sgJHtwYXJhbXM/Lm91dGxpZXJzLmxlbmd0aCA+IDEgPyAndGhlc2UgdmFsdWVzJyA6ICd0aGlzIHZhbHVlJ30gYmVmb3JlIHN1Ym1pdHRpbmcuYCxcbiAgJ3Nob3VsZCBiZSBlcXVhbCB0byBib3VuZGFyeSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgY2FsY3VsYXRlZCBhcmVhIGZyb20gJHtjb2RlKCdib3VuZGFyeScpfSBpcyAke2NvZGUocGFyYW1zLmV4cGVjdGVkKX0uXG4gICAgVGhpcyBtYXkgYmUgYW4gZXJyb3IgaWYgdGhlIGJvdW5kYXJ5IHJlcHJlc2VudHMgdGhlIGFyZWEgdW5kZXIgY3VsdGl2YXRpb24uYCxcbiAgJ211c3Qgc3BlY2lmeSB0aGUgZmF0ZSBvZiBjcm9wUmVzaWR1ZSc6ICgpID0+XG4gICAgYEZvciBzaXRlcyBvZiB0eXBlIGNyb3BsYW5kIG9yIHBlcm1hbmVudCBwYXN0dXJlLCBpZiBkYXRhIGNvbXBsZXRlbmVzcyBpcyBtYXJrZWQgdHJ1ZSBmb3IgY3JvcCByZXNpZHVlLFxuICAgIHRoZSBmYXRlIG9mIHRoZSByZXNpZHVlIG11c3QgYmUgZnVsbHkgc3BlY2lmaWVkLlxuICAgIFRoZSBmYXRlIG11c3QgYmUgYWRkZWQgdXNpbmc6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2MgaXMtbm93cmFwXCI+XG4gICAgPGxpPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlTWFuYWdlbWVudCl9IHByYWN0aWNlczs8L2xpPlxuICAgIDxsaT50aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5jcm9wUmVzaWR1ZSl9IHByb2R1Y3RzPC9saT5cbiAgICA8L3VsPlxuICAgIHdoZXJlIHRoZSBzdW0gb2YgYWJvdmUgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBhbmQgYmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvO1xuICAgIGAsXG4gICdzaG91bGQgc3BlY2lmeSB0aGUgZmF0ZSBvZiBjcm9wUmVzaWR1ZSc6ICgpID0+XG4gICAgYFxuICAgIFlvdSBoYXZlIG5vdCBzcGVjaWZpZWQgdGhlIGZhdGUgb2YgdGhlIGNyb3AgcmVzaWR1ZS5cbiAgICBBZGRpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGltcHJvdmUgZW1pc3Npb25zIGFuZCBzb2lsIGNhcmJvbiBzdG9jayBjYWxjdWxhdGlvbnMuXG4gICAgVGhlIGZhdGUgY2FuIGJlIGFkZGVkIHVzaW5nOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kaXNjIGlzLW5vd3JhcFwiPlxuICAgIDxsaT50aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5jcm9wUmVzaWR1ZU1hbmFnZW1lbnQpfSBwcmFjdGljZXM7PC9saT5cbiAgICA8bGk+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWUpfSBwcm9kdWN0czs8L2xpPlxuICAgIDwvdWw+XG4gICAgUmVtZW1iZXIgdG8gc2V0ICR7Y29kZSgnY29tcGxldGVuZXNzLmNyb3BSZXNpZHVlJyl9IHRvICR7Y29kZSgndHJ1ZScpfVxuICAgIGlmIHRoZSBhYm92ZSBhbmQgYmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBxdWFudGl0aWVzIGFuZCBmYXRlcyBhcmUgc3BlY2lmaWVkLlxuICAgIGAsXG4gICdzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcml2YWN5IGFzIHRoZSByZWxhdGVkIHNvdXJjZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUbyBsaW5rIHRvIGEgJHtwYXJhbXM/LmRlZmF1bHRTb3VyY2U/LmRhdGFQcml2YXRlID8gJ3ByaXZhdGUnIDogJ3B1YmxpYyd9IFNvdXJjZSxcbiAgICB0aGlzIE5vZGUgbmVlZHMgdG8gYmUgJHtwYXJhbXM/LmRlZmF1bHRTb3VyY2U/LmRhdGFQcml2YXRlID8gJ3ByaXZhdGUnIDogJ3B1YmxpYyd9IGFzIHdlbGwuXG4gICAgUGxlYXNlIHNldCAke2NvZGUoJ2RhdGFQcml2YXRlJyl9PSR7Y29kZShgJHtwYXJhbXM/LmRlZmF1bHRTb3VyY2U/LmRhdGFQcml2YXRlfWApfS5gLFxuICAnc2hvdWxkIG5vdCB1c2Ugbm90IHJlbGV2YW50IG1vZGVsJzogKCkgPT5cbiAgICBgQWxsIGVtaXNzaW9ucyBzaG91bGQgZ2VuZXJhbGx5IGhhdmUgYSBtZXRob2QgdGllciwgd2hpY2ggc3RhdGVzIGhvdyB0aGUgZGF0YSB3ZXJlIG1vZGVsbGVkIG9yIGhvdyB0aGUgZGF0YSB3ZXJlIGNvbGxlY3RlZC5cbiAgICBQbGVhc2Ugc2VlIHRoZSAke3NjaGVtYUxpbmsoJ0VtaXNzaW9uI21ldGhvZFRpZXInLCAnc2NoZW1hJyl9IGZvciB0aGUgb3B0aW9ucyBhdmFpbGFibGUgYW5kIGRlZmluaXRpb25zIG9mIHRoZSBvcHRpb25zLmBcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UgPSAobWVzc2FnZT86IHN0cmluZywgZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yLCBlcnJvckNvdW50ID0gMSkgPT4ge1xuICBjb25zdCBmb3JtYXR0ZWRNZXNzYWdlID0gbWVzc2FnZSAmJiBtZXNzYWdlIGluIGN1c3RvbUVycm9yTWVzc2FnZSA/XG4gICAgY3VzdG9tRXJyb3JNZXNzYWdlW21lc3NhZ2VdKGVycm9yISwgZXJyb3JDb3VudCkgOlxuICAgIG1lc3NhZ2U7XG4gIHJldHVybiBmb3JtYXR0ZWRNZXNzYWdlID8gYDxwIGNsYXNzPVwiaXMtbm9ybWFsXCI+JHtmb3JtYXR0ZWRNZXNzYWdlfTwvcD5gIDogJyc7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RXJyb3IgPSAoZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yLCBlcnJvckNvdW50ID0gMSk6IElWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQgPT4gZXJyb3IgPyAoe1xuICBsZXZlbDogJ2Vycm9yJyxcbiAgLi4uZXJyb3IsXG4gIG1hcEVycm9yOiBlcnJvci5tZXNzYWdlID09PSBtYXBFcnJvck1lc3NhZ2UsXG4gIG1lc3NhZ2U6IGZvcm1hdEN1c3RvbUVycm9yTWVzc2FnZShlcnJvci5tZXNzYWdlLCBlcnJvciwgZXJyb3JDb3VudClcbn0pIDogdW5kZWZpbmVkO1xuXG5leHBvcnQgY29uc3QgZXJyb3JIYXNFcnJvciA9IChlcnJvcj86IElWYWxpZGF0aW9uRXJyb3IpID0+IGVycm9yICYmIChlcnJvci5sZXZlbCA9PT0gJ2Vycm9yJyB8fCAhZXJyb3IubGV2ZWwpO1xuXG5leHBvcnQgY29uc3QgZXJyb3JIYXNXYXJuaW5nID0gKGVycm9yPzogSVZhbGlkYXRpb25FcnJvcikgPT4gZXJyb3IgJiYgZXJyb3IubGV2ZWwgPT09ICd3YXJuaW5nJztcblxuZXhwb3J0IGNvbnN0IGlzTWlzc2luZ1Byb3BlcnR5RXJyb3IgPSAoeyBwYXJhbXMgfTogSVZhbGlkYXRpb25FcnJvcikgPT4gISFwYXJhbXMgJiYgJ21pc3NpbmdQcm9wZXJ0eScgaW4gcGFyYW1zO1xuXG5leHBvcnQgY29uc3QgaXNNaXNzaW5nT25lT2ZFcnJvciA9ICh7IGtleXdvcmQsIHNjaGVtYVBhdGggfTogSVZhbGlkYXRpb25FcnJvcikgPT5cbiAga2V5d29yZCA9PT0gJ3JlcXVpcmVkJyAmJiAoc2NoZW1hUGF0aCB8fCAnJykuaW5jbHVkZXMoJ29uZU9mJyk7XG5cbmNvbnN0IGlzRmFpbGluZ0tleXdvcmRFcnJvciA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PiAhIXBhcmFtcyAmJiAnZmFpbGluZ0tleXdvcmQnIGluIHBhcmFtcztcblxuZXhwb3J0IGNvbnN0IGZpbHRlckVycm9yID0gKGVycm9yOiBJVmFsaWRhdGlvbkVycm9yKSA9PiBbXG4gIGlzRmFpbGluZ0tleXdvcmRFcnJvclxuXS5ldmVyeShmdW5jID0+ICFmdW5jKGVycm9yKSk7XG5cbmV4cG9ydCBjb25zdCBtaXNzaW5nTm9kZUVycm9ycyA9IChlcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSkgPT5cbiAgZXJyb3JzLmZpbHRlcigoeyBrZXl3b3JkLCBwYXJhbXMgfSkgPT5cbiAgICBrZXl3b3JkID09PSAncmVxdWlyZWQnICYmIChwYXJhbXM/Lm1pc3NpbmdQcm9wZXJ0eSA9PT0gJ0B0eXBlJyB8fCBwYXJhbXM/Lm1pc3NpbmdQcm9wZXJ0eSA9PT0gJ0BpZCcpXG4gICk7XG4iXX0=
|