@hestia-earth/ui-components 0.23.7 → 0.23.8
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/common/logs-utils.d.ts +1 -1
- package/esm2022/common/logs-utils.mjs +3 -3
- package/esm2022/files/files-error.model.mjs +6 -4
- package/esm2022/node/node-logs-file/node-logs-file.component.mjs +3 -3
- package/esm2022/node/node-value-details/node-value-details.component.mjs +2 -1
- package/fesm2022/hestia-earth-ui-components.mjs +10 -7
- package/fesm2022/hestia-earth-ui-components.mjs.map +1 -1
- package/package.json +5 -4
package/common/logs-utils.d.ts
CHANGED
|
@@ -14,4 +14,4 @@ export interface ILine {
|
|
|
14
14
|
export declare const parseData: (data: any) => ILine;
|
|
15
15
|
export declare const parseLines: (text: any) => ILine[];
|
|
16
16
|
export declare const parseMessage: (message: string) => {};
|
|
17
|
-
export declare const logToCsv: (lines: ILine[]) =>
|
|
17
|
+
export declare const logToCsv: (lines: ILine[]) => string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { json2csv } from 'json-2-csv';
|
|
2
2
|
export var Level;
|
|
3
3
|
(function (Level) {
|
|
4
4
|
Level["debug"] = "DEBUG";
|
|
@@ -49,7 +49,7 @@ const formatLine = ({ data: { timestamp, message } }) => ({
|
|
|
49
49
|
timestamp,
|
|
50
50
|
...parseMessage(message)
|
|
51
51
|
});
|
|
52
|
-
export const logToCsv = (lines) =>
|
|
52
|
+
export const logToCsv = (lines) => json2csv(lines.map(formatLine).filter(data => Object.keys(data).length > 1), {
|
|
53
53
|
emptyFieldValue: ''
|
|
54
54
|
});
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ncy11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vbG9ncy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXRDLE1BQU0sQ0FBTixJQUFZLEtBS1g7QUFMRCxXQUFZLEtBQUs7SUFDZix3QkFBZSxDQUFBO0lBQ2Ysc0JBQWEsQ0FBQTtJQUNiLDRCQUFtQixDQUFBO0lBQ25CLHdCQUFlLENBQUE7QUFDakIsQ0FBQyxFQUxXLEtBQUssS0FBTCxLQUFLLFFBS2hCO0FBRUQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFTM0MsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRTtJQUNqQyxJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3pCO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztLQUMvQjtBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFHO0lBQ25CLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLGVBQWU7SUFDOUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsaUJBQWlCO0lBQ2hDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7SUFDaEIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsa0JBQWtCO0NBQ3BDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUNyQyxDQUFDO0lBQ0MsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQzFCLElBQUk7SUFDSixLQUFLLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO0NBQ2xCLENBQVUsQ0FBQztBQUVkLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQ3RDLE9BQU8sSUFBSSxLQUFLLFFBQVE7SUFDdEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7SUFDL0UsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFFeEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUM3QixDQUNFLENBQUM7SUFDQyxHQUFHLEVBQUUsVUFBVTtJQUNmLElBQUksRUFBRSxVQUFVO0lBQ2hCLElBQUksRUFBRSxFQUFFO0lBQ1IsSUFBSSxFQUFFLEVBQUU7Q0FDVCxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUNmLENBQUMsSUFBSSxFQUFFLENBQUM7QUFFWCxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBRTNGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQzlDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQ3hDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN0QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsT0FBTztRQUNMLEdBQUcsSUFBSTtRQUNQLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUM5QyxDQUFDO0FBQ0osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBRVQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELFNBQVM7SUFDVCxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7Q0FDekIsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FDekMsUUFBUSxDQUNOLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQ2xFO0lBQ0UsZUFBZSxFQUFFLEVBQUU7Q0FDcEIsQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsganNvbjJjc3YgfSBmcm9tICdqc29uLTItY3N2JztcblxuZXhwb3J0IGVudW0gTGV2ZWwge1xuICBkZWJ1ZyA9ICdERUJVRycsXG4gIGluZm8gPSAnSU5GTycsXG4gIHdhcm5pbmcgPSAnV0FSTklORycsXG4gIGVycm9yID0gJ0VSUk9SJ1xufVxuXG5leHBvcnQgY29uc3QgbGV2ZWxzID0gT2JqZWN0LnZhbHVlcyhMZXZlbCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpbmUge1xuICBjb2RlOiBzdHJpbmc7XG4gIGRhdGE6IGFueTtcbiAgY2xhc3M6IHN0cmluZztcbiAgbGV2ZWw6IExldmVsO1xufVxuXG5jb25zdCBwYXJzZUxpbmUgPSAodGV4dDogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB7IGxldmVsOiBMZXZlbC5kZWJ1ZyB9O1xuICB9XG59O1xuXG5jb25zdCBsZXZlbFRvQ2xhc3MgPSB7XG4gIFtMZXZlbC5kZWJ1Z106ICdoYXMtdGV4dC1pbmZvJyxcbiAgW0xldmVsLmVycm9yXTogJ2hhcy10ZXh0LWRhbmdlcicsXG4gIFtMZXZlbC5pbmZvXTogJycsXG4gIFtMZXZlbC53YXJuaW5nXTogJ2hhcy10ZXh0LXdhcm5pbmcnXG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VEYXRhID0gKGRhdGE6IGFueSkgPT5cbiAgKHtcbiAgICBjb2RlOiBKU09OLnN0cmluZ2lmeShkYXRhKSxcbiAgICBkYXRhLFxuICAgIGNsYXNzOiBsZXZlbFRvQ2xhc3NbZGF0YS5sZXZlbF0sXG4gICAgbGV2ZWw6IGRhdGEubGV2ZWxcbiAgfSkgYXMgSUxpbmU7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUxpbmVzID0gKHRleHQ6IGFueSkgPT5cbiAgdHlwZW9mIHRleHQgPT09ICdzdHJpbmcnXG4gICAgPyAodGV4dCB8fCAnJykudHJpbSgpLnNwbGl0KCdcXG4nKS5maWx0ZXIoQm9vbGVhbikubWFwKHBhcnNlTGluZSkubWFwKHBhcnNlRGF0YSlcbiAgICA6IFtwYXJzZURhdGEodGV4dCldO1xuXG5jb25zdCBjc3ZLZXkgPSAoa2V5OiBzdHJpbmcpID0+XG4gIChcbiAgICAoe1xuICAgICAga2V5OiAna2V5L3Rlcm0nLFxuICAgICAgdGVybTogJ2tleS90ZXJtJyxcbiAgICAgIHRpbWU6ICcnLFxuICAgICAgdW5pdDogJydcbiAgICB9KVtrZXldIHx8IGtleVxuICApLnRyaW0oKTtcblxuY29uc3QgY3N2VmFsdWUgPSAodmFsdWU6IHN0cmluZykgPT4gKHZhbHVlIHx8ICcnKS5yZXBsYWNlKCdbJywgJycpLnJlcGxhY2UoJ10nLCAnJykudHJpbSgpO1xuXG5leHBvcnQgY29uc3QgcGFyc2VNZXNzYWdlID0gKG1lc3NhZ2U6IHN0cmluZykgPT5cbiAgbWVzc2FnZS5zcGxpdCgnLCcpLnJlZHVjZSgocHJldiwgcGFydHMpID0+IHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYXJ0cy5zcGxpdCgnPScpO1xuICAgIGNvbnN0IHZhbCA9IGNzdlZhbHVlKHZhbHVlKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucHJldixcbiAgICAgIC4uLihrZXkgJiYgdmFsID8geyBbY3N2S2V5KGtleSldOiB2YWwgfSA6IHt9KVxuICAgIH07XG4gIH0sIHt9KTtcblxuY29uc3QgZm9ybWF0TGluZSA9ICh7IGRhdGE6IHsgdGltZXN0YW1wLCBtZXNzYWdlIH0gfTogSUxpbmUpID0+ICh7XG4gIHRpbWVzdGFtcCxcbiAgLi4ucGFyc2VNZXNzYWdlKG1lc3NhZ2UpXG59KTtcblxuZXhwb3J0IGNvbnN0IGxvZ1RvQ3N2ID0gKGxpbmVzOiBJTGluZVtdKSA9PlxuICBqc29uMmNzdihcbiAgICBsaW5lcy5tYXAoZm9ybWF0TGluZSkuZmlsdGVyKGRhdGEgPT4gT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID4gMSksXG4gICAge1xuICAgICAgZW1wdHlGaWVsZFZhbHVlOiAnJ1xuICAgIH1cbiAgKTtcbiJdfQ==
|
|
@@ -253,9 +253,11 @@ const customErrorMessage = {
|
|
|
253
253
|
The Products of this Cycle are incompatible with this crop being a cover crop.
|
|
254
254
|
Please check the Products or the Practices.`,
|
|
255
255
|
'should be included in the cycle products': ({ params }, errorCount) => `${errorCount === 1
|
|
256
|
-
? `The Product ${code(params.product.name)}
|
|
257
|
-
: 'The
|
|
258
|
-
|
|
256
|
+
? `The Product ${code(params.product.name)} cannot be found in the Cycle with id ${code(params.node.id)}`
|
|
257
|
+
: 'The Product in the Impact Assessment cannot be found in the linked Cycle'}.
|
|
258
|
+
This could be simply because the product does not exist in the Cycle: in this case, add it to the Cycle or remove the Impact Assessment.
|
|
259
|
+
It could also be because you have multiple Products in the Cycle using the same Term, but having different Properties or different fields:
|
|
260
|
+
in this case, ensure all of the Properties and fields which make the Product unique are copied into the Impact Assessment.`,
|
|
259
261
|
'multiple ImpactAssessment are associated with the same Product of the same Cycle': () => `Only one Impact Assessment can be related to this Product.
|
|
260
262
|
Please make sure the product is correct or the cycle.id you are referring to is correct.`,
|
|
261
263
|
'multiple ImpactAssessment are associated with this Product': () => `Only one Impact Assessment can be related to this Product.
|
|
@@ -387,4 +389,4 @@ export const isMissingOneOfError = ({ keyword, schemaPath }) => keyword === 'req
|
|
|
387
389
|
const isFailingKeywordError = ({ params }) => !!params && 'failingKeyword' in params;
|
|
388
390
|
export const filterError = (error) => [isFailingKeywordError].every(func => !func(error));
|
|
389
391
|
export const missingNodeErrors = (errors) => errors.filter(({ keyword, params }) => keyword === 'required' && (params?.missingProperty === '@type' || params?.missingProperty === '@id'));
|
|
390
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmlsZXMvZmlsZXMtZXJyb3IubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQVEsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xILE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFFBQVEsRUFDUixPQUFPLEVBQ1AsSUFBSSxFQUNKLGFBQWEsRUFDYixZQUFZLEVBQ1osWUFBWSxFQUNaLFFBQVEsRUFDUixlQUFlLEVBQ2YsVUFBVSxFQUNYLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBNkRoRCxNQUFNLGVBQWUsR0FBRyx5Q0FBeUMsQ0FBQztBQVVsRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFlLEVBQUU7SUFDMUQsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLFFBQVE7U0FDM0IsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztTQUM5QixPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQztTQUM1QixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdEIsTUFBTSxLQUFLLEdB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LENBQUMsRUFBRSxNQUFNLEVBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLElBQUksTUFBTSxDQUFDO0FBRXZHLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRTVHLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsTUFBMEIsRUFBRSxFQUFFLENBQzlELE1BQU0sQ0FBQyxNQUFNLENBQ1gsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQ3RCLE9BQU8sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLEVBQUUsZUFBZSxLQUFLLE9BQU8sSUFBSSxNQUFNLEVBQUUsZUFBZSxLQUFLLEtBQUssQ0FBQyxDQUN2RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlbGVzcy1lc2NhcGUgKi9cbmltcG9ydCB7IEN5Y2xlRnVuY3Rpb25hbFVuaXQsIE5vZGVUeXBlLCBTY2hlbWFUeXBlLCBUZXJtLCBUZXJtVGVybVR5cGUsIGlzVHlwZVZhbGlkIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgdG9QcmVjaXNpb24sIGtleVRvTGFiZWwsIHVuaXF1ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuXG5pbXBvcnQgeyB0ZXJtVHlwZUxhYmVsIH0gZnJvbSAnLi4vdGVybXMvdGVybXMubW9kZWwnO1xuaW1wb3J0IHsgcGF0aFRvQXBpRG9jc1BhdGggfSBmcm9tICcuLi9lbmdpbmUvZW5naW5lLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgUmVwb3NpdG9yeSxcbiAgVGVtcGxhdGUsXG4gIGJhc2VVcmwsXG4gIGNvZGUsXG4gIGNvbnRhY3RVc0xpbmssXG4gIGV4dGVybmFsTGluayxcbiAgZ2xvc3NhcnlMaW5rLFxuICBub2RlTGluayxcbiAgcmVwb3J0SXNzdWVMaW5rLFxuICBzY2hlbWFMaW5rXG59IGZyb20gJy4uL2NvbW1vbi91dGlscyc7XG5pbXBvcnQgeyBwbHVyYWxpemUgfSBmcm9tICcuLi9jb21tb24vcGx1cmFsaXplJztcblxuLy8gVE9ETzogYWRkIG1vcmUgdmFsaWRhdGlvbiBrZXl3b3JkIGFuZCBwYXJhbXNcbmV4cG9ydCB0eXBlIHZhbGlkYXRpb25FcnJvckxldmVsID0gJ2Vycm9yJyB8ICd3YXJuaW5nJztcbmV4cG9ydCB0eXBlIHZhbGlkYXRpb25FcnJvclBhcmFtID1cbiAgfCAnbWlzc2luZ1Byb3BlcnR5J1xuICB8ICd0eXBlJ1xuICB8ICd0ZXJtJ1xuICB8ICd0ZXJtVHlwZSdcbiAgfCAnbW9kZWwnXG4gIHwgJ3Byb2R1Y3QnXG4gIHwgJ3JhbmdlJ1xuICB8ICdub2RlJ1xuICB8ICdhbGxvd2VkVmFsdWVzJ1xuICB8ICdhbGxvd2VkVmFsdWUnXG4gIHwgJ2FkZGl0aW9uYWxQcm9wZXJ0eSdcbiAgfCAnZXhwZWN0ZWQnXG4gIHwgJ2RlZmF1bHQnXG4gIHwgJ2N1cnJlbnQnXG4gIHwgJ3BlcmNlbnRhZ2UnXG4gIHwgJ2tleXMnXG4gIHwgJ3RocmVzaG9sZCdcbiAgfCAnb3V0bGllcnMnXG4gIHwgJ2NvdW50cnknXG4gIHwgJ21pbidcbiAgfCAnbWF4J1xuICB8ICdkZWZhdWx0U291cmNlJ1xuICB8ICdzb3VyY2UnXG4gIHwgJ2dyb3VwJ1xuICB8ICdtZXNzYWdlJ1xuICB8ICdkaXN0YW5jZSdcbiAgfCAnc2l0ZVR5cGUnXG4gIHwgJ3Byb2R1Y3RzJ1xuICB8ICd1bml0cydcbiAgfCAnZHVwbGljYXRlZEluZGV4ZXMnXG4gIHwgJ2ludmFsaWRDb29yZGluYXRlcyc7XG5leHBvcnQgdHlwZSB2YWxpZGF0aW9uRXJyb3JLZXl3b3JkID0gJ3JlcXVpcmVkJyB8ICd0eXBlJyB8ICdpZicgfCAndGhlbicgfCAnbm90JztcblxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdGlvbkVycm9yIHtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIG5vZGVJbmRleD86IG51bWJlcjtcbiAgbGV2ZWw/OiB2YWxpZGF0aW9uRXJyb3JMZXZlbDtcbiAgZGF0YVBhdGg/OiBzdHJpbmc7XG4gIHNjaGVtYVBhdGg/OiBzdHJpbmc7XG4gIGtleXdvcmQ/OiB2YWxpZGF0aW9uRXJyb3JLZXl3b3JkO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHBhcmFtcz86IHsgW2tleSBpbiB2YWxpZGF0aW9uRXJyb3JQYXJhbV0/OiBhbnkgfTtcbiAgbWFwRXJyb3I/OiBib29sZWFuO1xuICBzY2hlbWE/OiB7XG4gICAgcmVxdWlyZWQ/OiBzdHJpbmdbXTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVmFsaWRhdGlvbkVycm9yV2l0aEluZGV4IHtcbiAgZXJyb3I6IElWYWxpZGF0aW9uRXJyb3JbXTtcbiAgaW5kZXg6IG51bWJlcjtcbiAgY2hhbmdlZD86IGJvb2xlYW47XG59XG5cbnR5cGUgaGFuZGxlRXJyb3JGdW5jID0gKGVycm9yOiBJVmFsaWRhdGlvbkVycm9yLCBlcnJvckNvdW50PzogbnVtYmVyLCBhbGxFcnJvcnM/OiBJVmFsaWRhdGlvbkVycm9yW10pID0+IHN0cmluZztcblxuY29uc3QgbWFwRXJyb3JNZXNzYWdlID0gJ2RvZXMgbm90IGNvbnRhaW4gbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSc7XG5cbmludGVyZmFjZSBJRGF0YVBhdGgge1xuICBwYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIdW1hbiByZWFkYWJsZSB2ZXJzaW9uIG9mIHRoZSBwYXRoLlxuICAgKi9cbiAgbGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlRGF0YVBhdGggPSAoZGF0YVBhdGggPSAnJyk6IElEYXRhUGF0aFtdID0+IHtcbiAgY29uc3QgW18sIC4uLnBhdGhzXSA9IGRhdGFQYXRoXG4gICAgLnJlcGxhY2UoL1tcXFtcXF1cXCdcXCdcXFwiXFxcIl0vZywgJycpXG4gICAgLnJlcGxhY2UoLyhcXHcpKFxcQCkvZywgJyQxLkAnKVxuICAgIC5zcGxpdCgnLicpO1xuICByZXR1cm4gcGF0aHMubWFwKHBhdGggPT4ge1xuICAgIGNvbnN0IGxhYmVsID0gcGF0aC5yZXBsYWNlKC9bXFxkXFxAXSsvZywgJycpO1xuICAgIGNvbnN0IHR5cGUgPSBwbHVyYWxpemUoa2V5VG9MYWJlbChsYWJlbCksIDEpIGFzIFNjaGVtYVR5cGU7XG4gICAgY29uc3QgaXNTY2hlbWFUeXBlID0gaXNUeXBlVmFsaWQoeyB0eXBlIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBwYXRoLnJlcGxhY2UoLyhcXGQrKS9nLCAnWyQxXScpLFxuICAgICAgbGFiZWw6IGlzU2NoZW1hVHlwZSA/IHR5cGUgOiBgPGNvZGU+JHtwbHVyYWxpemUobGFiZWwsIDEpfTwvY29kZT5gXG4gICAgfTtcbiAgfSk7XG59O1xuXG5jb25zdCBhbGxvd2VkRGF0YVBhdGhzTGFiZWxzID0gT2JqZWN0LnZhbHVlcyhTY2hlbWFUeXBlKTtcbi8vIFRPRE86IHNlZSBpZiB3ZSB3YW50IHRvIGlnbm9yZSBUZXJtIGxhYmVsIGFuZCBzaG93IHRoZSBibGFuayBub2RlIGluc3RlYWRcbi8vIGNvbnN0IGFsbG93ZWREYXRhUGF0aHNMYWJlbHMgPSBPYmplY3QudmFsdWVzKFNjaGVtYVR5cGUpLmZpbHRlcih2ID0+ICFbU2NoZW1hVHlwZS5UZXJtXS5pbmNsdWRlcyh2KSk7XG5cbmV4cG9ydCBjb25zdCBkYXRhUGF0aExhYmVsID0gKGRhdGFQYXRoID0gJycpID0+XG4gIHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgLmZpbHRlcigoeyBsYWJlbCB9KSA9PiBhbGxvd2VkRGF0YVBhdGhzTGFiZWxzLmluY2x1ZGVzKGxhYmVsIGFzIFNjaGVtYVR5cGUpKVxuICAgIC5wb3AoKT8ubGFiZWw7XG5cbmNvbnN0IGdsb3NzYXJ5VHlwZUxpbmsgPSAodHlwZTogVGVybVRlcm1UeXBlLCB0ZXh0ID0gdGVybVR5cGVMYWJlbCh0eXBlKSkgPT5cbiAgZXh0ZXJuYWxMaW5rKGAke2Jhc2VVcmwoKX0vZ2xvc3Nhcnk/dGVybVR5cGU9JHt0eXBlfWAsIHRleHQpO1xuY29uc3QgdGVybUxpbmsgPSAoeyBpZCwgbmFtZSB9OiBQYXJ0aWFsPFRlcm0+KSA9PiBleHRlcm5hbExpbmsoYCR7YmFzZVVybCgpfS90ZXJtLyR7aWR9YCwgbmFtZSB8fCBpZCk7XG5jb25zdCBkYXRlRm9ybWF0TWVzc2FnZSA9IGBzaG91bGQgZm9sbG93IHRoZSBJU08gODYwMSBkYXRlIGZvcm1hdCwgZS5nLiAke2NvZGUoMjAwMCl9LCBvciAke2NvZGUoJzIwMDAtMTInKX0sIG9yICR7Y29kZShcbiAgJzIwMDAtMTItMzAnXG4pfWA7XG5jb25zdCBtb2RlbExpbmsgPSAodGVybTogVGVybSwgbW9kZWw6IFRlcm0pID0+IGBcbiAgPGEgaHJlZj1cIiR7cGF0aFRvQXBpRG9jc1BhdGgobW9kZWxbJ0BpZCddLCB0ZXJtWydAaWQnXSl9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJwci0xXCI+JHttb2RlbC5uYW1lfTwvc3Bhbj5cbiAgICA8c3Bhbj4oVmlldyBEb2NzKTwvc3Bhbj5cbiAgPC9hPlxuYDtcbmNvbnN0IHRocmVzaG9sZCA9ICh2YWx1ZTogbnVtYmVyKSA9PiBjb2RlKGAke3ZhbHVlICogMTAwfSVgKTtcblxuY29uc3Qgbm9UaWxsYWdlOiBQYXJ0aWFsPFRlcm0+ID0geyBpZDogJ25vVGlsbGFnZScsIG5hbWU6ICdObyB0aWxsYWdlJyB9O1xuY29uc3QgcGFzdHVyZUdyYXNzOiBQYXJ0aWFsPFRlcm0+ID0geyBpZDogJ3Bhc3R1cmVHcmFzcycsIG5hbWU6ICdQYXN0dXJlIGdyYXNzJyB9O1xuXG5jb25zdCBpZE5vdEZvdW5kRGVmYXVsdE1lc3NhZ2UgPSBgXG4gIElmIHlvdSBhcmUgdXNpbmcgdGhlICR7Y29kZSgnbmFtZScpfSBvZiB0aGUgVGVybSwgbWFrZSBzdXJlIHRvIHVzZSAke2NvZGUoJ3Rlcm0ubmFtZScpfSBjb2x1bW47XG4gIGlmIHlvdSBhcmUgdXNpbmcgdGhlICR7Y29kZSgnQGlkJyl9IG9mIHRoZSBUZXJtLCB1c2UgdGhlICR7Y29kZSgndGVybS5AaWQnKX0gY29sdW1uIGluc3RlYWQuXG5gLnRyaW0oKTtcblxuZXhwb3J0IGNvbnN0IGlzTWlncmF0aW9uRXJyb3IgPSAoeyBwYXJhbXMgfTogSVZhbGlkYXRpb25FcnJvcikgPT4gcGFyYW1zPy5jdXJyZW50ICYmICdleHBlY3RlZCcgaW4gcGFyYW1zO1xuXG5leHBvcnQgY29uc3QgbWlncmF0aW9uRXJyb3JNZXNzYWdlID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+XG4gIHBhcmFtcz8uZXhwZWN0ZWRcbiAgICA/IGBUaGUgVGVybSAke2NvZGUocGFyYW1zLmN1cnJlbnQpfSB3YXMgdXBkYXRlZCwgcGxlYXNlIHVzZSB0aGlzIFRlcm0gaW5zdGVhZDogJHtjb2RlKHBhcmFtcy5leHBlY3RlZCl9LmBcbiAgICA6IGBUaGUgVGVybSAke2NvZGUocGFyYW1zLmN1cnJlbnQpfSB3YXMgZGVsZXRlZC4gUGxlYXNlIHNlYXJjaCB0aGUgJHtnbG9zc2FyeUxpbmsoJ0dsb3NzYXJ5Jyl9IGZvciBhIG5ldyBUZXJtLmA7XG5cbmNvbnN0IGlkTm90Rm91bmRFcnJvcjogaGFuZGxlRXJyb3JGdW5jID0gKF9lcnJvciwgX2Vycm9yQ291bnQsIGFsbEVycm9ycykgPT4ge1xuICBjb25zdCBtaWdyYXRpb25FcnJvcnMgPSBhbGxFcnJvcnMuZmlsdGVyKGlzTWlncmF0aW9uRXJyb3IpO1xuICBjb25zdCBub01pZ3JhdGlvbkVycm9ycyA9IGFsbEVycm9ycy5maWx0ZXIoZXJyb3IgPT4gIWlzTWlncmF0aW9uRXJyb3IoZXJyb3IpKTtcbiAgcmV0dXJuIGBcbiAgICA8cD5Eb2VzIG5vdCBleGlzdCBpbiBIZXN0aWEuPC9wPlxuICAgICR7bm9NaWdyYXRpb25FcnJvcnMubGVuZ3RoID8gYDxwPiR7aWROb3RGb3VuZERlZmF1bHRNZXNzYWdlfTwvcD5gIDogJyd9XG4gICAgJHt1bmlxdWUobWlncmF0aW9uRXJyb3JzLm1hcChtaWdyYXRpb25FcnJvck1lc3NhZ2UpKS5qb2luKCc8L2JyPicpfVxuICBgO1xufTtcblxuLy8gc2V0IG1lc3NhZ2UgYXMgZW1wdHkgdG8gbm90IGRpc3BsYXkgaXRcbmNvbnN0IGN1c3RvbUVycm9yTWVzc2FnZToge1xuICBba2V5OiBzdHJpbmddOiBoYW5kbGVFcnJvckZ1bmM7XG59ID0ge1xuICBcInNob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICdAaWQnXCI6IGlkTm90Rm91bmRFcnJvcixcbiAgXCJzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSAnQHR5cGUnXCI6ICgpID0+ICcnLFxuICBcInNob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICdpZCdcIjogaWROb3RGb3VuZEVycm9yLFxuICAnc2hvdWxkIG1hdGNoIGV4YWN0bHkgb25lIHNjaGVtYSBpbiBvbmVPZic6ICgpID0+ICcnLFxuICAnc2hvdWxkIG1hdGNoIHNvbWUgc2NoZW1hIGluIGFueU9mJzogKCkgPT4gJycsXG4gICdzaG91bGQgbWF0Y2ggXCJ0aGVuXCIgc2NoZW1hJzogKCkgPT4gJycsXG4gICdzaG91bGQgTk9UIGhhdmUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgPyBgVGhlIGZvbGxvd2luZyBmaWVsZCBkb2VzIG5vdCBleGlzdDogJHtwYXJhbXM/LmFkZGl0aW9uYWxQcm9wZXJ0eX0gb3IgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjYXNlLmBcbiAgICAgIDogYFNob3VsZCBub3QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMuYCxcbiAgJ3Nob3VsZCBOT1QgYmUgdmFsaWQnOiAoeyBzY2hlbWEgfSkgPT5cbiAgICBzY2hlbWE/LnJlcXVpcmVkPy5pbmNsdWRlcygnYXJlYVBlcmNlbnQnKVxuICAgICAgPyBgSWYgdGhlIHRlcm0gdW5pdHMgaXMgYWxyZWFkeSBpbiAke2NvZGUoJyUgYXJlYScpfSwganVzdCB1c2UgJHtjb2RlKCd2YWx1ZScpfS4gRG9udCB1c2UgJHtjb2RlKCdhcmVhUGVyY2VudCcpfS5gXG4gICAgICA6IHNjaGVtYT8ucmVxdWlyZWQ/LmluY2x1ZGVzKCd0cmFuc2Zvcm1hdGlvbicpXG4gICAgICA/ICdBIHRyYW5zZm9ybWF0aW9uIGNhbiBub3QgYmUgYWRkZWQgaGVyZS4nXG4gICAgICA6IHNjaGVtYT8ucmVxdWlyZWQ/LmluY2x1ZGVzKCdmcm9tQ3ljbGUnKVxuICAgICAgPyBgVGhpcyBmaWVsZCBjYW4gb25seSBiZSBhZGRlZCB0byB0aGUgJHtzY2hlbWFMaW5rKCdUcmFuc2Zvcm1hdGlvbiNpbnB1dHMnLCAnaW5wdXRzIG9mIGEgVHJhbnNmb3JtYXRpb24nKX0uYFxuICAgICAgOiAnU2hvdWxkIG5vdCBiZSB1c2VkIGluIHRoaXMgY2FzZS4nLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeXFxcXGR7MTN9JFwiJzogKCkgPT4gYHNob3VsZCBiZSBjb21wb3NlZCBvZiAxMyBudW1iZXJzYCxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXlswLTldezR9KC1bMC05XXsyfSk/KC1bMC05XXsyfSk/JFwiJzogKCkgPT4gZGF0ZUZvcm1hdE1lc3NhZ2UsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl4oWzAtOV17NH18LSkoLVswLTldezJ9KT8oLVswLTldezJ9KT8kXCInOiAoKSA9PiBkYXRlRm9ybWF0TWVzc2FnZSxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXihbMC05XXs0fXwtKSgtWzAtOV17Mn0pPygtWzAtOV17Mn0pPyhbVF1bMC0yXVswLTldOlswLTVdWzAtOV06WzAtNV1bMC05XSgoK3wtKVswLTFdWzAtOV06WzAtNV1bMC05XSk/KT8kXCInOlxuICAgICgpID0+IGRhdGVGb3JtYXRNZXNzYWdlLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeMTAuKGQpKy8oUykrJFwiJzogKCkgPT5cbiAgICBgVGhlIERPSSBzaG91bGQgbm90IGluY2x1ZGUgdGhlIGRvbWFpbiBuYW1lLCBlLmcuICR7Y29kZSgnMTAuMTAwMC8xODInKX0gaW5zdGVhZCBvZiAke2NvZGUoXG4gICAgICAnaHR0cHM6Ly9kb2kub3JnLzEwLjEwMDAvMTgyJ1xuICAgICl9YCxcbiAgJ3Nob3VsZCBiZSBsaW5rZWQgdG8gYW4gZXhpc3Rpbmcgbm9kZSc6IChlcnJvciwgX2Vycm9yQ291bnQsIGFsbEVycm9ycykgPT5cbiAgICBhbGxFcnJvcnM/Lmxlbmd0aFxuICAgICAgPyBgWW91ciB1cGxvYWQgZG9lcyBub3QgY29udGFpbiB0aGUgZm9sbG93aW5nIE5vZGVzOlxuICAgICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2MgaXMtbm93cmFwXCI+XG4gICAgICAke3VuaXF1ZShcbiAgICAgICAgYWxsRXJyb3JzLm1hcCgoeyBwYXJhbXMgfSkgPT4gYDxsaT4ke3BhcmFtcz8ubm9kZT8udHlwZX0gd2l0aCAke2NvZGUoYGlkPSR7cGFyYW1zPy5ub2RlPy5pZH1gKX08L2xpPmApXG4gICAgICApLmpvaW4oJ1xcbicpfVxuICAgICAgPC91bD5cbiAgICAgIElmIHlvdSBhcmUgdHJ5aW5nIHRvIGxpbmsgdG8gYW4gZXhpc3RpbmcgTm9kZSBvbiB0aGUgSGVzdGlhIHBsYXRmb3JtLCB5b3UgbXVzdCB1c2UgJHtjb2RlKCdAaWQnKX0gZmllbGQgaW5zdGVhZC5cbiAgICAgIE90aGVyd2lzZSB5b3UgbXVzdCBpbmNsdWRlIGEgZnVsbCAke3VuaXF1ZShcbiAgICAgICAgYWxsRXJyb3JzLm1hcCgoeyBwYXJhbXMgfSkgPT4gYCR7cGFyYW1zPy5ub2RlPy50eXBlfSB3aXRoIGlkICR7Y29kZShwYXJhbXM/Lm5vZGU/LmlkKX0uYClcbiAgICAgICkuam9pbignLCAnKX1gXG4gICAgICA6IGBZb3VyIHVwbG9hZCBkb2VzIG5vdCBjb250YWluIGEgJHtlcnJvci5wYXJhbXM/Lm5vZGU/LnR5cGV9IHdpdGggJHtjb2RlKGBpZD0ke2Vycm9yLnBhcmFtcz8ubm9kZT8uaWR9YCl9LlxuICAgICAgSWYgeW91IGFyZSB0cnlpbmcgdG8gbGluayB0byBhbiBleGlzdGluZyBOb2RlIG9uIHRoZSBIZXN0aWEgcGxhdGZvcm0sIHlvdSBtdXN0IHVzZSAke2NvZGUoJ0BpZCcpfSBmaWVsZCBpbnN0ZWFkLlxuICAgICAgT3RoZXJ3aXNlIHlvdSBtdXN0IGluY2x1ZGUgYSBmdWxsICR7ZXJyb3IucGFyYW1zPy5ub2RlPy50eXBlfSB3aXRoIGlkICR7Y29kZShlcnJvci5wYXJhbXM/Lm5vZGU/LmlkKX0uYCxcbiAgJ211c3QgYmUgd2l0aGluIHRoZSBjb3VudHJ5JzogKCkgPT4gYFRoZSBjb3VudHJ5IHByb3ZpZGVkIGRvZXMgbm90IGNvbnRhaW4gdGhlIHJlZ2lvbiBwcm92aWRlZC4gUGxlYXNlIGNoZWNrXG4gIHRoZSBjb3VudHJ5IGZvciBlcnJvcnMgb3IgdGhlIHJlZ2lvbiBmb3IgZXJyb3JzLCBhbmQgcmVmZXJlbmNlIHRoZSAke2dsb3NzYXJ5TGluaygnR2xvc3Nhcnkgb2YgVGVybXMnKX0uYCxcbiAgW21hcEVycm9yTWVzc2FnZV06ICh7IGRhdGFQYXRoLCBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICA/IGBUaGUgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBwcm92aWRlZCBhcmUke1xuICAgICAgICAgIHBhcmFtcz8uZGlzdGFuY2UgPyBgICR7cGFyYW1zPy5kaXN0YW5jZX1rbXNgIDogJydcbiAgICAgICAgfSBvdXRzaWRlIG9mIHRoZSAke2RhdGFQYXRoLnN1YnN0cmluZygxKX0gcHJvdmlkZWQuXG4gICAgICBQbGVhc2UgY2hlY2sgdGhlIGxvbmdpdHVkZSBhbmQgbGF0aXR1ZGUgZm9yIGVycm9ycyBvciBjaGVjayBpZiB0aGUgd3JvbmcgJHtkYXRhUGF0aC5zdWJzdHJpbmcoXG4gICAgICAgIDFcbiAgICAgICl9IGZyb20gdGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUucmVnaW9uLCAnR2xvc3NhcnknKX0gd2FzIHVzZWQuXG4gICAgICAke1xuICAgICAgICBwYXJhbXM/LmV4cGVjdGVkXG4gICAgICAgICAgPyBgSGludDogdGhlIGNvb3JkaW5hdGVzIGFwcGVhciB0byBiZSBsb2NhdGVkIGluIHRoZSBmb2xsb3dpbmcgJHtkYXRhUGF0aC5zdWJzdHJpbmcoMSl9OiAke3Rlcm1MaW5rKHtcbiAgICAgICAgICAgICAgaWQ6ICdwYXJhbXMuZXhwZWN0ZWQnXG4gICAgICAgICAgICB9KX1gXG4gICAgICAgICAgOiAnJ1xuICAgICAgfWBcbiAgICAgIDogYFRoZSByZWdpb24gcHJvdmlkZWQgZG9lcyBub3QgY29udGFpbiB0aGUgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBwcm92aWRlZC5cbiAgICAgIFBsZWFzZSBjaGVjayB0aGUgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBmb3IgZXJyb3JzIG9yIHRoZSByZWdpb24gZm9yIGVycm9yLCBhbmQgcmVmZXJlbmNlIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoXG4gICAgICAgIFRlcm1UZXJtVHlwZS5yZWdpb24sXG4gICAgICAgICdHbG9zc2FyeSBvZiBUZXJtcydcbiAgICAgICl9LmAsXG4gICdzdW0gbm90IGVxdWFsIHRvIDEwMCUgZm9yIHNhbmRDb250ZW50LCBzaWx0Q29udGVudCwgY2xheUNvbnRlbnQnOiAoKSA9PlxuICAgIGBUaGUgc3VtIG9mIFNhbmQsIFNpbHQsIGFuZCBDbGF5IGNvbnRlbnQgc2hvdWxkIGVxdWFsIDEwMCUgZm9yIGVhY2ggc29pbCBkZXB0aCBpbnRlcnZhbC5gLFxuICAnaXMgb3V0c2lkZSB0aGUgYWxsb3dlZCByYW5nZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IHBhcmFtcz8udGVybVxuICAgICAgICAgID8gYFRoZSB2YWx1ZSBmb3IgJHtjb2RlKFxuICAgICAgICAgICAgICBwYXJhbXM/LnRlcm1bJ0BpZCddIHx8IHBhcmFtcz8udGVybS5uYW1lXG4gICAgICAgICAgICApfSBpcyBvdXRzaWRlIHRoZSByYW5nZSBlc3RhYmxpc2hlZCBmb3IgdGhlIHNvaWwgdGV4dHVyZSB5b3UgcHJvdmlkZWQuXG4gICAgICAgICAgICBGb3IgdGhpcyBzb2lsIHRleHR1cmUsIHRoZSBtYXhpbXVtICR7Y29kZShwYXJhbXM/LnRlcm1bJ0BpZCddIHx8IHBhcmFtcz8udGVybS5uYW1lKX0gaXMgJHtwYXJhbXM/LnJhbmdlXG4gICAgICAgICAgICAgID8ubWF4fSBhbmQgdGhlIG1pbmltdW0gaXMgJHtwYXJhbXM/LnJhbmdlPy5taW59LmBcbiAgICAgICAgICA6IGBEb2VzIG5vdCBtYXRjaCB0aGUgcG9zc2libGUgcmFuZ2VzIG9mIHNhbmQsIHNpbHQgYW5kIGNsYXkgY29udGVudC5gXG4gICAgICAgIDogYEVhY2ggc29pbCB0ZXh0dXJlIGhhcyBhIG1heGltdW0gYW5kIG1pbmltdW0gdmFsdWUgZm9yIHNhbmQsIHNpbHQsIGFuZCBjbGF5IGNvbnRlbnQuXG4gICAgICAgIEF0IGxlYXN0IG9uZSBtZWFzdXJlbWVudCBvZiBzYW5kLCBzaWx0LCBvciBjbGF5IGNvbnRlbnQgZG9lcyBub3QgbWF0Y2ggdGhlIHBvc3NpYmxlIHJhbmdlIGZvciB0aGUgc3BlY2lmaWVkIHNvaWwgdGV4dHVyZS5gXG4gICAgfVxuICAgICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYFBsZWFzZSBjaGVjayB0aGUgbWVhc3VyZW1lbnQsIGl0cyBkZXB0aCBpbnRlcnZhbHMsIGFuZCB0aGUgZGF0ZXMgb2YgdGhlIG1lYXN1cmVtZW50IG9yIHVwZGF0ZSB0aGUgc29pbCB0ZXh0dXJlIGlmIG5lZWRlZC5gXG4gICAgICAgIDogYFBsZWFzZSBjaGVjayB5b3VyIG1lYXN1cmVtZW50cywgdGhlaXIgZGVwdGggaW50ZXJ2YWxzLCBhbmQgdGhlIGRhdGVzIG9mIHRoZSBtZWFzdXJlbWVudHMgb3IgdXBkYXRlIHRoZSBzb2lsIHRleHR1cmVzIGlmIG5lZWRlZC5gXG4gICAgfWAsXG4gICdzaG91bGQgYmUgZXF1YWwgdG8gb25lIG9mIHRoZSBhbGxvd2VkIHZhbHVlcyc6ICh7IHBhcmFtcywgZGF0YVBhdGggfSkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCk7XG4gICAgY29uc3QgdmFsdWVzID1cbiAgICAgIHBhdGhzLmxlbmd0aCA+PSAyID8gcGx1cmFsaXplKHBhdGhzW3BhdGhzLmxlbmd0aCAtIDFdLnBhdGgsIHBhcmFtcz8uYWxsb3dlZFZhbHVlcz8ubGVuZ3RoIHx8IDApIDogJ3ZhbHVlcyc7XG4gICAgcmV0dXJuIGBPbmx5IHRoZSAke3BhdGhzLmxlbmd0aCA9PT0gMyA/IGAke3BhdGhzWzFdLmxhYmVsfSB3aXRoIHRoZSBgIDogJyd9Zm9sbG93aW5nICR7dmFsdWVzfSBhcmUgcGVybWl0dGVkIGZvciAke1xuICAgICAgcGF0aHNbMF0ubGFiZWxcbiAgICB9OiAke3BhcmFtcz8uYWxsb3dlZFZhbHVlcy5tYXAoY29kZSkuam9pbignLCAnKX0uXG4gICAgICBQbGVhc2UgZWl0aGVyIGNoYW5nZSB0aGUgJHtcbiAgICAgICAgcGF0aHMubGVuZ3RoID49IDIgPyBwYXRoc1sxXS5sYWJlbCA6IHBhdGhzWzBdLmxhYmVsXG4gICAgICB9IHlvdSBhcmUgdXNpbmcgYW5kIGVuc3VyZSBpdCBoYXMgb25lIG9mIHRoZSAke3ZhbHVlc30gbGlzdGVkIGFib3ZlLFxuICAgICAgb3IgZm9sbG93IHRoZSBzY2hlbWEgdG8gaWRlbnRpZnkgd2hlcmUgdGhpcyAke3BhdGhzLmxlbmd0aCA+PSAyID8gcGF0aHNbMV0ubGFiZWwgOiBwYXRoc1swXS5sYWJlbH0gY2FuIGJlIGFkZGVkLmA7XG4gIH0sXG4gICdzaG91bGQgYmUgZXF1YWwgdG8gY29uc3RhbnQnOiAoeyBwYXJhbXMgfSkgPT4gYE11c3QgYmU6ICR7Y29kZShwYXJhbXM/LmFsbG93ZWRWYWx1ZSl9YCxcbiAgJ2lzIG5vdCBhbGxvd2VkIGZvciB0aGlzIGNoYXJhY3RlcmlzZWRJbmRpY2F0b3InOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgJHtcbiAgICAgICAgICAgIHBhcmFtcz8uYWxsb3dlZFZhbHVlcy5sZW5ndGhcbiAgICAgICAgICAgICAgPyBgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIG9uZSBvZiB0aGVzZSBtZXRob2RzOiAke3BhcmFtcz8uYWxsb3dlZFZhbHVlcy5tYXAoY29kZSkuam9pbignLCAnKX1gXG4gICAgICAgICAgICAgIDogYGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIGFueSBtZXRob2QgYWxsb3dlZC4gUGxlYXNlICR7Y29udGFjdFVzTGluaygpfSB0byBjaGFuZ2UgdGhpcy5gXG4gICAgICAgICAgfS5gXG4gICAgICAgIDogYFNvbWUgVGVybXMgYXJlIG5vdCBhbGxvd2VkIHdpdGggdGhlIG1ldGhvZCB5b3Ugc2VsZWN0ZWQuYFxuICAgIH1cbiAgICBZb3UgY2FuIGZpbmQgdGhlIGxpc3Qgb2YgYWxsb3dlZCBtZXRob2RzIGZvciBlYWNoIFRlcm0gYnkgY2xpY2tpbmcgb24gdGhlbS5gLFxuICAnc2hvdWxkIGNvbnRhaW4gYSB2YWxpZCBpdGVtJzogKHsgZGF0YVBhdGggfSkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCEpO1xuICAgIHJldHVybiBwYXRocy5sZW5ndGggPj0gMlxuICAgICAgPyBgVGhlICR7cGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0ucGF0aH0gcmVsYXRlZCB0byB0aGlzICR7cGx1cmFsaXplKHBhdGhzW3BhdGhzLmxlbmd0aCAtIDJdLmxhYmVsLCAxKX0gYXJlIGludmFsaWRgXG4gICAgICA6IGBUaGUgJHtwYXRoc1swXS5wYXRofSBhcmUgaW52YWxpZGA7XG4gIH0sXG4gICdtYXkgYmUgYmV0d2VlbiAwIGFuZCAxMDAnOiAoKSA9PiAnUGVyY2VudGFnZXMgc2hvdWxkIGJlIGJldHdlZW4gMCBhbmQgMTAwLCBub3QgMCBhbmQgMS4gVGhpcyBtYXkgYmUgYW4gZXJyb3IuJyxcbiAgJ21heSBub3QgYWxsIGJlIHNldCB0byBmYWxzZSc6ICgpID0+XG4gICAgYEV2ZXJ5IHZhbHVlIGluIHRoZSBkYXRhIGNvbXBsZXRlbmVzcyBhc3Nlc3NtZW50IGlzICR7Y29kZShmYWxzZSl9LiBZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGZpbGwgaXQgaW4uXG4gIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZmlsbCBpdCBpbiwgcGxlYXNlIHNlZSB0aGUgJHtzY2hlbWFMaW5rKCdDeWNsZSNjb21wbGV0ZW5lc3MnLCAnc2NoZW1hJyl9LmAsXG4gICdtYXkgbm90IGJlIGVtcHR5JzogKCkgPT4gJ2lmIHRoaXMgdmFsdWUgc2lnbmlmaWVzIG5vIGRhdGEsIEhlc3RpYSBvbmx5IGFjY2VwdHMgXCItXCIgb3IgZW1wdHkgZm9yIG5vIGRhdGEnLFxuICAnbWF5IG5vdCBiZSAwJzogKHsgZGF0YVBhdGggfSwgZXJyb3JDb3VudCkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCEpO1xuICAgIHJldHVybiBgQWRkaW5nIGEgdmFsdWUgJHtlcnJvckNvdW50ID09PSAxID8gYCB0byBldmVyeSAke3BhdGhzWzBdLmxhYmVsfSBgIDogJyAnfSBpcyBoaWdobHkgcmVjb21tZW5kZWQuXG4gICAgICBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHdlIHJlY29tbWVuZCBzZXR0aW5nIHZhbHVlIHRvIDAuYDtcbiAgfSxcbiAgJ2xvbmdGYWxsb3dQZXJpb2QgbXVzdCBiZSBsb3dlciB0aGFuIDUgeWVhcnMnOiAoKSA9PlxuICAgIGBZb3VyIGxvbmdGYWxsb3dQZXJpb2QgaXMgZ3JlYXRlciB0aGFuIGZpdmUgeWVhcnMuXG4gICAgRmFsbG93IGlzIGRlZmluZWQgYnkgRkFPU1RBVCBhcyBsYW5kIGxlZnQgdW5jdWx0aXZhdGVkIGZvciBiZXR3ZWVuIDEgYW5kIDUgeWVhcnMsXG4gICAgYW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB1c2VkIGZvciBIZXN0aWEgYWxzby5gLFxuICAnc2hvdWxkIGJlIHdpdGhpbiBwZXJjZW50YWdlIG9mIGRlZmF1bHQgdmFsdWUnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICA/IGBUaGlzIHZhbHVlIGlzIMKxJHt0aHJlc2hvbGQocGFyYW1zPy50aHJlc2hvbGQpfSBkaWZmZXJlbnQgdG8gb3VyIGRlZmF1bHQgdmFsdWUgd2hpY2ggaXMgJHtwYXJhbXM/LmRlZmF1bHR9LlxuICAgICAgUGxlYXNlIGNoZWNrIHlvdXIgdXBsb2FkZWQgZGF0YSBhcyB0aGlzIG1heSBiZSBhbiBlcnJvci5gXG4gICAgICA6IGBUaGlzIHZhbHVlIGlzIHN1YnN0YW50aWFsbHkgZGlmZmVyZW50IHRoYW4gb3VyIGRlZmF1bHQgdmFsdWUuXG4gICAgICBQbGVhc2UgY2hlY2sgeW91ciB1cGxvYWRlZCBkYXRhIGFzIHRoaXMgbWF5IGJlIGFuIGVycm9yLmAsXG4gICd0aGUgdmFsdWUgcHJvdmlkZWQgaXMgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgbW9kZWwgcmVzdWx0JzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYFRoZSBleHBlY3RlZCByZXN1bHQgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgZm9yICR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9ICR7XG4gICAgICAgICAgICBwYXJhbXM/Lm1vZGVsPy5uYW1lID8gYHVzaW5nICR7bW9kZWxMaW5rKHBhcmFtcz8udGVybSwgcGFyYW1zPy5tb2RlbCl9IGAgOiAnJ1xuICAgICAgICAgIH1gXG4gICAgICAgIDogJydcbiAgICB9XG4gICAgZnJvbSB0aGUgZGF0YSBwcm92aWRlZCBpbiB0aGUgdXBsb2FkIGlzICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYCR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmV4cGVjdGVkLCAzKSl9LCBidXQgdGhlIHZhbHVlIGluIHRoZSB1cGxvYWQgaXMgJHtjb2RlKFxuICAgICAgICAgICAgdG9QcmVjaXNpb24ocGFyYW1zPy5jdXJyZW50LCAzKVxuICAgICAgICAgICl9LlxuICAgICAgICAke3BhcmFtcz8udGhyZXNob2xkID8gYE91ciB0aHJlc2hvbGQgaXMgwrEke3RocmVzaG9sZChwYXJhbXM/LnRocmVzaG9sZCl9LmAgOiAnJ31cbiAgICAgICAgUGxlYXNlIGVpdGhlcjpcbiAgICAgICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRlY2ltYWxcIj5cbiAgICAgICAgPGxpPkNoZWNrIHRoZSAke3BhcmFtcz8udGVybS50ZXJtVHlwZX0gdmFsdWUgeW91IHByb3ZpZGVkOzwvbGk+XG4gICAgICAgIDxsaT5DaGVjayB0aGUgZGF0YSB5b3UgcHJvdmlkZWQgd2hpY2ggaXMgdGhlIGlucHV0IGludG8gdGhpcyBtb2RlbDs8L2xpPlxuICAgICAgICA8bGk+Q2FyZWZ1bGx5IHJlYWQgdGhlIGRvY3VtZW50YXRpb24gdG8gdW5kZXJzdGFuZCBpZiB3ZSB1c2VkIGEgZGVmYXVsdCBwcm9wZXJ0eSBhcyBwYXJ0IG9mIHRoZSBjYWxjdWxhdGlvbnMuPC9saT5cbiAgICAgICAgPC91bD5gXG4gICAgICAgIDogJ25vdCBjb25zaXN0ZW50IHdpdGggdGhlIG1vZGVsIHJlc3VsdC4nXG4gICAgfWAsXG4gICd0aGUgbWVhc3VyZW1lbnQgcHJvdmlkZWQgbWlnaHQgYmUgaW4gZXJyb3InOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgVGhlIGV4cGVjdGVkIHZhbHVlIGZvciAke2NvZGUocGFyYW1zPy50ZXJtLm5hbWUpfVxuICAgICR7cGFyYW1zPy5tb2RlbD8ubmFtZSA/IGB1c2luZyAke21vZGVsTGluayhwYXJhbXM/LnRlcm0sIHBhcmFtcz8ubW9kZWwpfSBgIDogJyd9XG4gICAgZnJvbSB0aGUgZGF0YSBwcm92aWRlZCBpbiB0aGUgdXBsb2FkIGlzICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYCR7Y29kZSh0b1ByZWNpc2lvbihwYXJhbXM/LmV4cGVjdGVkLCAzKSl9LCBidXQgdGhlIHZhbHVlIGluIHRoZSB1cGxvYWQgaXMgJHtjb2RlKFxuICAgICAgICAgICAgdG9QcmVjaXNpb24ocGFyYW1zPy5jdXJyZW50LCAzKVxuICAgICAgICAgICl9LlxuICAgICAgICAke3BhcmFtcz8udGhyZXNob2xkID8gYE91ciB0aHJlc2hvbGQgaXMgwrEke3RocmVzaG9sZChwYXJhbXM/LnRocmVzaG9sZCl9LmAgOiAnJ31gXG4gICAgICAgIDogYG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIG1vZGVsIHJlc3VsdC5gXG4gICAgfWAsXG4gICdtdXN0IGJlIGVxdWFsIHRvIHByZXZpb3VzIHByb2R1Y3QgbXVsdGlwbGllZCBieSB0aGUgc2hhcmUnOiAoKSA9PlxuICAgIGBQcm9kdWN0cyBmcm9tIGEgdHJhbnNmb3JtYXRpb24gd2hpY2ggYXJlIGFuIElucHV0IGluIHRvIHRoZSBuZXh0IHRyYW5zZm9ybWF0aW9uIG11c3QgZm9sbG93IHRoZSBmb2xsb3dpbmcgcnVsZTpcbiAgICAke2NvZGUoJ3ByZXZpb3VzLnByb2R1Y3QudmFsdWUgKiBjdXJyZW50LnRyYW5zZm9ybWVkU2hhcmUgLyAxMDAgPT0gY3VycmVudC5pbnB1dC52YWx1ZScpfWAsXG4gICdhdCBsZWFzdCBvbmUgSW5wdXQgbXVzdCBiZSBhIFByb2R1Y3Qgb2YgdGhlIEN5Y2xlJzogKCkgPT5cbiAgICBgQSBUcmFuc2Zvcm1hdGlvbiBjb252ZXJ0cyBhIFByb2R1Y3QgZnJvbSBhIEN5Y2xlIGludG8gYW5vdGhlciBQcm9kdWN0LlxuICAgIFRoZXJlZm9yZSwgYXQgbGVhc3Qgb25lIElucHV0IGludG8gdGhlIFRyYW5zZm9ybWF0aW9uIG11c3QgYmUgYSBQcm9kdWN0IG9mIHRoZSBDeWNsZS5gLFxuICAnbXVzdCBoYXZlIG9ubHkgb25lIGVudHJ5IHdpdGggdGhlIHNhbWUgdGVybS50ZXJtVHlwZSA9IGV4Y3JldGFNYW5hZ2VtZW50JzogKCkgPT5cbiAgICBgVGhlcmUgY2FuIG9ubHkgYmUgb25lIFByYWN0aWNlIG9mIHR5cGUgZXhjcmV0YU1hbmFnZW1lbnQgaW4gYSBDeWNsZS5cbiAgICBUbyByZXByZXNlbnQgbXVsdGlwbGUgZXhjcmV0YSBtYW5hZ2VtZW50IHN5c3RlbXMgZWl0aGVyIHVzZSBtdWx0aXBsZSBDeWNsZXMgYW5kIGxpbmsgdGhlbSB0b2dldGhlcixcbiAgICBvciB1c2UgVHJhbnNmb3JtYXRpb25zIHdpdGhpbiBhIEN5Y2xlIGFuZCBsaW5rIHRob3NlIHRvZ2V0aGVyLmAsXG4gICdtdXN0IGJlIGluY2x1ZGVkIGFzIGFuIElucHV0JzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYFRoZSBleGNyZXRhIFByb2R1Y3RzIGFyZSBub3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgZXhjcmV0YSBJbnB1dHMuXG4gICAgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgRS5nLiwgeW91IGNhbm5vdCBnZXQgJHtjb2RlKHBhcmFtcz8udGVybT8ubmFtZSl9IGZyb20gJHsocGFyYW1zPy5leHBlY3RlZCB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAodiA9PiBjb2RlKGtleVRvTGFiZWwodikpKVxuICAgICAgICAgICAgLmpvaW4oJyBvciAnKX0uYFxuICAgICAgICA6ICcnXG4gICAgfVxuICAgIFBsZWFzZSBjaGVjayB0aGUgSW5wdXRzIGFuZCBQcm9kdWN0cyBvZiB0aGUgVHJhbnNmb3JtYXRpb24uYCxcbiAgJ211c3QgYWRkIHRoZSBsaW5rZWQgaW5wdXRzIHRvIHRoZSBjeWNsZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBZb3UgaGF2ZSBzdGF0ZWQgdGhhdCAke2NvZGUocGFyYW1zPy50ZXJtPy5uYW1lKX0gd2FzIGNyZWF0ZWQgYnkgdGhlIGZvbGxvd2luZyBJbnB1dHMgJHtwYXJhbXM/LmV4cGVjdGVkXG4gICAgICAgICAgICA/Lm1hcChlID0+IGNvZGUoZS5uYW1lKSlcbiAgICAgICAgICAgIC5qb2luKCcgLCAnKX1gXG4gICAgICAgIDogJ1lvdSBoYXZlIHN0YXRlZCBzb21lIEVtaXNzaW9ucyB3ZXJlIGNyZWF0ZWQgYnkgc29tZSBJbnB1dHMnXG4gICAgfS5cbiAgICBIb3dldmVyLCB0aGVzZSBJbnB1dHMgZG8gbm90IGV4aXN0IGluIHRoZSBDeWNsZS5cbiAgICBQbGVhc2UgYWRkIHRoZXNlIElucHV0cywgZXZlbiBpZiB5b3UgZG8gbm90IGhhdmUgYSB2YWx1ZSBmb3IgdGhlbS5gLFxuICAnbXVzdCBhZGQgdGhlIGxpbmtlZCB0cmFuc2Zvcm1hdGlvbnMgdG8gdGhlIGN5Y2xlJzogKHsgbGV2ZWwsIHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBZb3UgaGF2ZSBzcGVjaWZpZWQgdGhhdCR7Y29kZShcbiAgICAgICAgICAgIHBhcmFtcz8udGVybT8ubmFtZVxuICAgICAgICAgICl9IHdhcyBjcmVhdGVkIGR1cmluZyBhIFRyYW5zZm9ybWF0aW9uIHdpdGggdGhlIFRlcm0gbmFtZSAke2NvZGUocGFyYW1zPy5leHBlY3RlZD8ubmFtZSl9YFxuICAgICAgICA6ICdZb3UgaGF2ZSBzdGF0ZWQgc29tZSBFbWlzc2lvbnMgd2VyZSBjcmVhdGVkIGJ5IHNvbWUgVHJhbnNmb3JtYXRpb25zJ1xuICAgIH0uXG4gICAgSG93ZXZlciwgd2UgY2Fubm90IGZpbmQgYSBUcmFuc2Zvcm1hdGlvbiB3aXRoaW4gdGhlIEN5Y2xlIHdpdGggdGhpcyBUZXJtIG5hbWUuXG4gICAgJHtcbiAgICAgIGxldmVsID09PSAnZXJyb3InXG4gICAgICAgID8gJ1BsZWFzZSBjaGVjayB0aGUgVGVybXMgdXNlZCBpbiB0aGUgRW1pc3Npb25zIGFuZC9vciB0aGUgVHJhbnNmb3JtYXRpb25zLidcbiAgICAgICAgOiAnWW91IG1heSB3YW50IHRvIGFkZCB0aGlzIFRyYW5zZm9ybWF0aW9uLidcbiAgICB9YCxcbiAgJ2V2ZXJ5IG5vZGUgc2hvdWxkIGJlIHVuaXF1ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGlzIE5vZGUgaXMgZHVwbGljYXRlZC4gRXZlcnkgTm9kZSBzaG91bGQgYmUgdW5pcXVlLlxuICAgIFVuaXF1ZW5lc3MgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZm9sbG93aW5nIGZpZWxkczogJHsocGFyYW1zPy5rZXlzIHx8IFtdKS5tYXAoY29kZSkuam9pbignLCAnKX1gLFxuICAnZXZlcnkgaXRlbSBpbiB0aGUgbGlzdCBzaG91bGQgYmUgdW5pcXVlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoaXMgYmxhbmsgbm9kZSBpcyBkdXBsaWNhdGVkJHtcbiAgICAgIHBhcmFtcz8uZHVwbGljYXRlZEluZGV4ZXM/Lmxlbmd0aFxuICAgICAgICA/IGAgd2l0aCB0aGUgYmxhbmsgJHtwbHVyYWxpemUoXG4gICAgICAgICAgICAnbm9kZScsXG4gICAgICAgICAgICBwYXJhbXMuZHVwbGljYXRlZEluZGV4ZXMubGVuZ3RoXG4gICAgICAgICAgKX0gd2l0aCBudW1iZXJlZDogJHtwYXJhbXMuZHVwbGljYXRlZEluZGV4ZXMuam9pbignLCAnKX1gXG4gICAgICAgIDogJydcbiAgICB9LiBFdmVyeSBibGFuayBub2RlIHNob3VsZCBiZSB1bmlxdWUuXG4gICAgVW5pcXVlbmVzcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBmb2xsb3dpbmcgZmllbGRzOiAkeyhwYXJhbXM/LmtleXMgfHwgW10pLm1hcChjb2RlKS5qb2luKCcsICcpfWAsXG4gICdtdXN0IGNvbnRhaW4gYXMgbWFueSBpdGVtcyBhcyB2YWx1ZXMnOiAoeyBwYXJhbXMsIGRhdGFQYXRoIH0pID0+XG4gICAgYFRoZSBudW1iZXIgb2YgJHtjb2RlKGRhdGFQYXRoLnNwbGl0KCcuJykucG9wKCkpfSBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgJHtjb2RlKCd2YWx1ZScpfS5cbiAgICBDdXJyZW50bHkgdGhlcmUgYXJlICR7cGFyYW1zPy5jdXJyZW50fSAke2NvZGUoZGF0YVBhdGguc3BsaXQoJy4nKS5wb3AoKSl9IGJ1dCAke3BhcmFtcz8uZXhwZWN0ZWR9ICR7Y29kZShcbiAgICAgICd2YWx1ZSdcbiAgICApfS5gLFxuICAnaXMgdG9vIGdlbmVyaWMnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgWW91IGhhdmUgdGhlIGZvbGxvd2luZyBQcm9kdWN0ICR7Y29kZShwYXJhbXM/LnByb2R1Y3Q/Lm5hbWUpfSBob3dldmVyLFxuICAgIHlvdSBoYXZlIHVzZWQgYSBnZW5lcmljICR7Z2xvc3NhcnlUeXBlTGluayhwYXJhbXM/LnRlcm0/LnRlcm1UeXBlKX0gdGVybSAke2NvZGUocGFyYW1zPy50ZXJtPy5uYW1lKX0uXG4gICAgVXNlIGEgbW9yZSBzcGVjaWZpYyB0ZXJtIGZvciB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFxuICAgICAgcGFyYW1zPy50ZXJtPy50ZXJtVHlwZVxuICAgICl9IHdoaWNoIHJlZmxlY3RzIHRoZSBzcGVjaWZpYyAke2dsb3NzYXJ5VHlwZUxpbmsocGFyYW1zPy5wcm9kdWN0Py50ZXJtVHlwZSl9LmAsXG4gICdzaG91bGQgbm90IHVzZSBpZGVudGljYWwgdGVybXMgd2l0aCBkaWZmZXJlbnQgdW5pdHMnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgWW91IGhhdmUgYWRkZWQgdGhlIHNhbWUgJHtjb2RlKHBhcmFtcz8udGVybT8udGVybVR5cGUpfSBpbiAke3BhcmFtcz8udW5pdHNcbiAgICAgID8ubWFwKHVuaXQgPT4gY29kZSh1bml0KSlcbiAgICAgIC5qb2luKCcgYW5kICcpfSB1bml0cy5cbiAgICBJZiB0aGVzZSB0ZXJtcyByZWZlciB0byB0aGUgc2FtZSAke2NvZGUocGFyYW1zPy50ZXJtPy50ZXJtVHlwZSl9LCB0aGlzIHdpbGwgbGVhZCB0byBkb3VibGUgY291bnRpbmcuJHtcbiAgICAgIHBhcmFtcz8udW5pdHM/LmluY2x1ZGVzKCdrZyBOJylcbiAgICAgICAgPyBgIEluc3RlYWQgdXNlIHRoZSAke3Rlcm1MaW5rKHsgaWQ6ICduaXRyb2dlbkNvbnRlbnQnLCBuYW1lOiAnTml0cm9nZW4gQ29udGVudCcgfSl9IFByb3BlcnR5IG9uIHRoZSAke2NvZGUoXG4gICAgICAgICAgICAna2cnXG4gICAgICAgICAgKX0gdGVybSB0byBkZWZpbmUgdGhlIG5pdHJvZ2VuIGNvbnRlbnQgb2YgdGhlICR7Y29kZShwYXJhbXM/LnRlcm0/LnRlcm1UeXBlKX0uYFxuICAgICAgICA6ICcnXG4gICAgfWAsXG4gICdpcyBtaXNzaW5nIHJlcXVpcmVkIGJpYmxpb2dyYXBoaWMgaW5mb3JtYXRpb24nOiAoKSA9PlxuICAgIGBUaGUgYXV0b21hdGljIGJpYmxpb2dyYXBoeSBzZWFyY2ggZmFpbGVkIGZvciB0aGlzIEJpYmxpb2dyYXBoeS4gRWl0aGVyOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kZWNpbWFsXCI+XG4gICAgPGxpPk1hbnVhbGx5IGZpbGwtaW4gdGhlIDxiPnJlcXVpcmVkPC9iPiBiaWJsaW9ncmFwaGljIGluZm9ybWF0aW9uIGFzIHBlciAke3NjaGVtYUxpbmsoXG4gICAgICBTY2hlbWFUeXBlLkJpYmxpb2dyYXBoeSxcbiAgICAgICdvdXIgc2NoZW1hJ1xuICAgICl9LjwvbGk+XG4gICAgPGxpPlByb3ZpZGUgdGhlICR7Y29kZSgnZG9jdW1lbnRET0knKX0gYXMgd2VsbCBhcyB0aGUgJHtjb2RlKCd0aXRsZScpfS48L2xpPlxuICAgIDxsaT5DaGVjayB0aGUgJHtjb2RlKCdkb2N1bWVudERPSScpfSBhbmQgJHtjb2RlKCd0aXRsZScpfSBmb3IgdHlwb3MgYWdhaW5zdCB0aGUgJHtleHRlcm5hbExpbmsoXG4gICAgICAnaHR0cHM6Ly93d3cubWVuZGVsZXkuY29tJyxcbiAgICAgICdNZW5kZWxleSBjYXRhbG9ndWUnXG4gICAgKX0uPC9saT5cbiAgICA8L3VsPmAsXG4gICdzaG91bGQgYmUgbG93ZXIgdGhhbiBtYXggc2l6ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgYm91bmRhcnkgb3IgcmVnaW9uIGlzID4ke3BhcmFtcz8uZXhwZWN0ZWR9a20yIGFuZCBpcyB0b28gbGFyZ2UgdG8gcmVsaWFibHkgZ2FwIGZpbGwgTWVhc3VyZW1lbnRzLlxuICAgIElmIHlvdSBhcmUgYWJsZSB0byB1c2UgYSBtb3JlIHNwZWNpZmljIHJlZ2lvbiBvciBzbWFsbGVyIGJvdW5kYXJ5LCBwbGVhc2UgZG8uYCxcbiAgJ2FuIGV4Y3JldGEgaW5wdXQgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyBhbiBleGNyZXRhTWFuYWdlbWVudCBwcmFjdGljZSc6ICh7IGRhdGFQYXRoIH0pID0+IHtcbiAgICBjb25zdCBwYXRocyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGghKTtcbiAgICByZXR1cm4gYEV4Y3JldGEgbWFuYWdlbWVudCBpcyB0aGUgY29udmVyc2lvbiBvZiBleGNyZXRhIHRvIGFueSB0eXBlIG9mIHByb2R1Y3QgKGUuZy4sIGFub3RoZXIgdHlwZSBvZiBleGNyZXRhIG9yIG9yZ2FuaWMgZmVydGlsaXNlcikuXG4gICAgICBZb3UgaGF2ZSBhZGRlZCBhbiAke2NvZGUoJ2V4Y3JldGFNYW5hZ2VtZW50Jyl9IFByYWN0aWNlIHRvIHRoaXMgJHtwYXRoc1swXS5sYWJlbH0gYnV0IHRoZXJlIGlzIG5vIGV4Y3JldGEgSW5wdXQuXG4gICAgICBUbyByZXByZXNlbnQgZXhjcmV0YSBtYW5hZ2VtZW50LCB1c2UgYSAke3BhdGhzWzBdLmxhYmVsfSB3aXRoIGV4Y3JldGEgYXMgYW4gSW5wdXQgYW5kICR7Y29kZShcbiAgICAgICAgJ2V4Y3JldGFNYW5hZ2VtZW50J1xuICAgICAgKX0gYXMgYSBQcmFjdGljZS5gO1xuICB9LFxuICAnb25seSAxIHByaW1hcnkgcHJvZHVjdCBhbGxvd2VkJzogKCkgPT4gJ1RoZXJlIGNhbiBvbmx5IGJlIG9uZSBwcmltYXJ5IHByb2R1Y3QgaW4gZWFjaCBDeWNsZS4nLFxuICAnaXMgbm90IGFsbG93ZWQgaW4gY29tYmluYXRpb24gd2l0aCBub1RpbGxhZ2UnOiAoKSA9PlxuICAgIGBUaGlzIG9wZXJhdGlvbiBpbnZvbHZlcyB0aWxsYWdlLCB5ZXQgeW91IGhhdmUgc3BlY2lmaWVkIHRoZSBQcmFjdGljZSAke3Rlcm1MaW5rKG5vVGlsbGFnZSl9LlxuICAgIEVpdGhlciBjaGFuZ2UgdGhpcyBvcGVyYXRpb24gb3IgdGhlIFByYWN0aWNlLmAsXG4gICdzaG91bGQgY29udGFpbiBhIHRpbGxhZ2UgcHJhY3RpY2UnOiAoKSA9PlxuICAgIGBXZSByZWNvbW1lbmQgc3BlY2lmeWluZyB0aGUgdHlwZSBvZiB0aWxsYWdlIHVzZWQgZm9yIHRoaXMgQ3ljbGUuXG4gICAgUGxlYXNlIHNlZSB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS50aWxsYWdlKX0gZ2xvc3NhcnkuYCxcbiAgJ211c3Qgc2V0IHZhbHVlIGZvciBldmVyeSB0aWxsYWdlIHByYWN0aWNlJzogKCkgPT5cbiAgICBgRWl0aGVyIHNwZWNpZnkgYSBzaW5nbGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS50aWxsYWdlKX0gcHJhY3RpY2Ugb3IgYWRkIGEgdmFsdWUgdG8gYWxsIHByYWN0aWNlcy5gLFxuICAnc3VtIG5vdCBlcXVhbCB0byAxMDAlIGZvciB0aWxsYWdlIHByYWN0aWNlcyc6ICgpID0+XG4gICAgYFRoZSBzdW0gb2YgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS50aWxsYWdlKX0gcHJhY3RpY2VzIG11c3QgZXF1YWwgMTAwJS5gLFxuICAnY2FuIG9ubHkgaGF2ZSAxIHRpbGxhZ2UgcHJhY3RpY2Ugd2l0aG91dCBhIHZhbHVlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYEl0IGlzIG5vdCBwb3NzaWJsZSBmb3IgYSBDeWNsZSB0byBoYXZlIHRoZSBmb2xsb3dpbmcgdGlsbGFnZSBQcmFjdGljZXM6XG4gICAgJHsocGFyYW1zPy5jdXJyZW50ID8/IFtdKS5tYXAoKHsgbmFtZSB9KSA9PiBuYW1lKS5qb2luKCcgYW5kICcpfSBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIElmIG11bHRpcGxlIHRpbGxhZ2UgcHJhY3RpY2VzIGRpZCBvY2N1ciwgcGxlYXNlIHNwZWNpZnkgdGhlIHBlcmNlbnRhZ2Ugb2YgYXJlYSB0aGV5IG9jY3VycmVkIG9uLmAsXG4gICdjYW4gbm90IGJlIGxpbmtlZCB0byB0aGUgc2FtZSBDeWNsZSc6ICgpID0+ICdZb3UgY2FuIG5vdCBsaW5rIGFuIElucHV0IHRvIHRoZSBJbXBhY3QgQXNzZXNzbWVudCBvZiB0aGUgc2FtZSBDeWNsZS4nLFxuICAvLyBkZXByZWNhdGVkLCByZW1vdmUgd2hlbiBtZXNzYWdlIGlzIG5vdCBiZWluZyB1c2VkIGFueW1vcmVcbiAgJ211c3QgYmUgMCBmb3IgcHJvZHVjdCB2YWx1ZSAwJzogKHsgZGF0YVBhdGgsIHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHRoZSAke2NvZGUoZGF0YVBhdGg/LnNwbGl0KCcuJykucG9wKCkpfSBvZiAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGNvZGUocGFyYW1zPy50ZXJtLm5hbWUpIDogJ3RoYXQgcHJvZHVjdCdcbiAgICB9IG11c3QgYWxzbyBiZSB6ZXJvLmAsXG4gICdlY29ub21pY1ZhbHVlU2hhcmUgbXVzdCBiZSAwIGZvciBwcm9kdWN0IHZhbHVlIDAnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB0aGUgZWNvbm9taWNWYWx1ZVNoYXJlIG9mICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gY29kZShwYXJhbXM/LnRlcm0ubmFtZSkgOiAndGhhdCBwcm9kdWN0J1xuICAgIH0gbXVzdCBhbHNvIGJlIHplcm8uYCxcbiAgJ3JldmVudWUgbXVzdCBiZSAwIGZvciBwcm9kdWN0IHZhbHVlIDAnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgSWYgdGhlIGFtb3VudCBwcm9kdWNlZCBpcyB6ZXJvLCB0aGUgcmV2ZW51ZSBvZiAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGNvZGUocGFyYW1zPy50ZXJtLm5hbWUpIDogJ3RoYXQgcHJvZHVjdCdcbiAgICB9IG11c3QgYWxzbyBiZSB6ZXJvLmAsXG4gICdzaG91bGQgYWRkIGEgc291cmNlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFdlIHJlY29tbWVuZCBhZGRpbmcgYSBTb3VyY2UgdG8gYWxsIGRhdGEgaXRlbXMuXG4gICAgVGhpcyBjYW4gYmUgZG9uZSBieSBhZGRpbmcgdGhlICR7Y29kZShwYXJhbXM/LmN1cnJlbnQpfSBmaWVsZC5cbiAgICBTb3VyY2VzIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBmb3IgZWFjaCBkYXRhIGl0ZW0gKGkuZS4sIGVhY2ggSW5wdXQsIEVtaXNzaW9uLCBQcm9kdWN0LCBQcmFjdGljZSwgTWVhc3VyZW1lbnQsIG9yIEluZnJhc3RydWN0dXJlKS5gLFxuICAnY292ZXIgY3JvcCBjeWNsZSBjb250YWlucyBub24gY292ZXIgY3JvcCBwcm9kdWN0JzogKCkgPT5cbiAgICBgWW91IGhhdmUgc3BlY2lmaWVkIHRoYXQgdGhpcyBjcm9wIGlzIGEgY292ZXIgY3JvcCB1c2luZyBhIFByYWN0aWNlLlxuICAgIEEgY292ZXIgY3JvcCBpcyBkZWZpbmVkIGFzIFwiYSBjcm9wIHdoaWNoIGlzIGxlZnQgaW4gdGhlIGZpZWxkIHdpdGhvdXQgYW55IGZyYWN0aW9uIGhhcnZlc3RlZCBieSB0aGUgZW5kIG9mIHRoZSBDeWNsZVwiLlxuICAgIFRoZSBQcm9kdWN0cyBvZiB0aGlzIEN5Y2xlIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGlzIGNyb3AgYmVpbmcgYSBjb3ZlciBjcm9wLlxuICAgIFBsZWFzZSBjaGVjayB0aGUgUHJvZHVjdHMgb3IgdGhlIFByYWN0aWNlcy5gLFxuICAnc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBjeWNsZSBwcm9kdWN0cyc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBUaGUgUHJvZHVjdCAke2NvZGUocGFyYW1zLnByb2R1Y3QubmFtZSl9IGRvZXMgbm90IGV4aXN0IGluIHRoZSBDeWNsZSB3aXRoIGlkICR7Y29kZShwYXJhbXMubm9kZS5pZCl9YFxuICAgICAgICA6ICdUaGUgSW1wYWN0QXNzZXNzbWVudCBQcm9kdWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBsaW5rZWQgQ3ljbGUnXG4gICAgfS5cbiAgICBQbGVhc2UgYWRkIHRoZSBQcm9kdWN0IGluIHRoZSBDeWNsZSBvciByZW1vdmUgdGhlIGxpbmsgd2l0aCB0aGUgQ3ljbGUuYCxcbiAgJ211bHRpcGxlIEltcGFjdEFzc2Vzc21lbnQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZSBQcm9kdWN0IG9mIHRoZSBzYW1lIEN5Y2xlJzogKCkgPT5cbiAgICBgT25seSBvbmUgSW1wYWN0IEFzc2Vzc21lbnQgY2FuIGJlIHJlbGF0ZWQgdG8gdGhpcyBQcm9kdWN0LlxuICAgIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHByb2R1Y3QgaXMgY29ycmVjdCBvciB0aGUgY3ljbGUuaWQgeW91IGFyZSByZWZlcnJpbmcgdG8gaXMgY29ycmVjdC5gLFxuICAnbXVsdGlwbGUgSW1wYWN0QXNzZXNzbWVudCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUHJvZHVjdCc6ICgpID0+XG4gICAgYE9ubHkgb25lIEltcGFjdCBBc3Nlc3NtZW50IGNhbiBiZSByZWxhdGVkIHRvIHRoaXMgUHJvZHVjdC5cbiAgICBQbGVhc2UgbWFrZSBzdXJlIHRoZSBwcm9kdWN0IG9mIHRoZSByZWxhdGVkIEltcGFjdEFzc2Vzc21lbnRzIGFyZSBjb3JyZWN0IG9yIHRoZSBjeWNsZS5pZCBpcyBjb3JyZWN0LmAsXG4gICdtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBsYW5kIG9jY3VwYXRpb24nOiAoKSA9PlxuICAgIGBMYW5kIHRyYW5zZm9ybWF0aW9uIHNob3VsZCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbGFuZCBvY2N1cGF0aW9uXG4gICAgKGxhbmQgdHJhbnNmb3JtYXRpb24gaXMgdGhlIGFtb3VudCBvZiBsYW5kIGNvbnZlcnRlZCBiZXR3ZWVuIHNvbWUgZGF0ZSBpbiB0aGUgcGFzdCBhbmQgdGhlIGN1cnJlbnQgeWVhcixcbiAgICBkaXZpZGVkIGJ5IGFuIGFtb3J0aXphdGlvbiBwZXJpb2QsIHNvIGl0IHNob3VsZCBhbHdheXMgYmUgbGVzcyB0aGFuIGxhbmQgb2NjdXBhdGlvbiBieSBkZWZpbml0aW9uKS5gLFxuICAnc2hvdWxkIGJlIGxpbmtlZCB0byBhbiBlbWlzc2lvbiBpbiB0aGUgQ3ljbGUnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgPyBgJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX0gZXhpc3RzYCA6ICdTb21lIEVtaXNzaW9ucyBleGlzdCdcbiAgICB9IGluIGJvdGggdGhlIEN5Y2xlIGFuZCB0aGUgVHJhbnNmb3JtYXRpb24gYnV0ICR7ZXJyb3JDb3VudCA9PT0gMSA/ICdpdCBpcycgOiAndGhleSBhcmUnfSBub3QgbGlua2VkIHVzaW5nICR7Y29kZShcbiAgICAgICdjeWNsZS5lbWlzc2lvbnMuWC50cmFuc2Zvcm1hdGlvbi50ZXJtJ1xuICAgICl9LiBUaGlzIG1heSBiZSBhbiBlcnJvci5gLFxuICAnc2hvdWxkIGFkZCBhbiBhbmltYWwgcHJvZHVjdGlvbiBzeXN0ZW0nOiAoKSA9PlxuICAgIGBGb3IgYW5pbWFsIHByb2R1Y3Rpb24gY3ljbGVzLCB3ZSByZWNvbW1lbmQgc3BlY2lmeWluZyB0aGUgYW5pbWFsIHByb2R1Y3Rpb24gJHtnbG9zc2FyeVR5cGVMaW5rKFxuICAgICAgVGVybVRlcm1UeXBlLnN5c3RlbVxuICAgICl9IGFzIGEgUHJhY3RpY2UuXG4gICAgWW91IGNhbiBmaW5kIGEgbGlzdCBvZiBzeXN0ZW1zIGluIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnN5c3RlbSwgJ0dsb3NzYXJ5Jyl9LmAsXG4gICdtdXN0IGJlIHNldCB0byBmYWxzZSB3aGVuIHNwZWNpZnlpbmcgZnVlbCB1c2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgSWYgbWFjaGluZXJ5IGZ1ZWwgKCR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfSkgaXMgdXNlZCBkdXJpbmcgYSBDeWNsZSxcbiAgICBidXQgdGhlcmUgaXMgbm8gZGF0YSBvbiB0aGUgYW1vdW50IG9mICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUubWF0ZXJpYWwpfSB1c2VkIGZvciBhZ3JpY3VsdHVyYWwgZXF1aXBtZW50LFxuICAgIHRoZW4gJHtjb2RlKCdjb21wbGV0ZW5lc3MubWF0ZXJpYWwnKX0gbXVzdCBiZSAke2NvZGUoJ2ZhbHNlJyl9LmAsXG4gICdtdXN0IGJlIGJlbG93IG9yIGVxdWFsIHRvIDEgZm9yIHVuaXQgaW4gaGEnOiAoKSA9PlxuICAgIGBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgYSBwcm9kdWN0IHdpdGggdW5pdHMgJHtjb2RlKCdoYScpfSBvbiBhIEN5Y2xlIHdpdGggYSAke3NjaGVtYUxpbmsoXG4gICAgICAnQ3ljbGUjZnVuY3Rpb25hbFVuaXQnLFxuICAgICAgJ2Z1bmN0aW9uYWwgdW5pdCdcbiAgICApfSBvZiAke2NvZGUoJzEgaGEnKX0gaXMgJHtjb2RlKCcxJyl9LlxuICAgIElmIHlvdSBhcmUgdHJ5aW5nIHRvIGFkZCBhIHByb2R1Y3Qgd2l0aCB0aGUgdW5pdHMgJHtjb2RlKCdrZycpfSwgdXNlIGEgZGlmZmVyZW50IHRlcm0uYCxcbiAgXCJwYXN0dXJlR3Jhc3Mga2V5IHRlcm1UeXBlIG11c3QgYmUgJ2xhbmRDb3ZlcidcIjogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBUZXJtICR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9IGNhbid0IGJlIHVzZWQgYXMgYSBrZXkgZm9yICR7dGVybUxpbmsocGFzdHVyZUdyYXNzKX0uXG4gICAgUGxlYXNlLCB1c2UgYSB0ZXJtIHdpdGggdGVybVR5cGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5sYW5kQ292ZXIpfSBpbnN0ZWFkLlxuICAgIFRoaXMgd2lsbCBoZWxwIHVzIGdhcC1maWxsIHRoZSBhbW91bnQgb2YgZ3Jhc3MgY29uc3VtZWQgYnkgdGhlIGhlcmQuYCxcbiAgJ3RoZSBzdW0gb2YgYWxsIHBhc3R1cmVHcmFzcyB2YWx1ZXMgbXVzdCBiZSAxMDAnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIHN1bSBvZiBhbGwgJHt0ZXJtTGluayhwYXN0dXJlR3Jhc3MpfSB2YWx1ZXMgbXVzdCBiZSBlcXVhbCB0byAke3BhcmFtcy5leHBlY3RlZH0lLmAsXG4gICdpcyBvdXRzaWRlIGNvbmZpZGVuY2UgaW50ZXJ2YWwnOiAoZXJyb3IsIGVycm9yQ291bnQsIGFsbEVycm9ycykgPT5cbiAgICBgJHt1bmlxdWUoXG4gICAgICAoYWxsRXJyb3JzLmxlbmd0aCA/IGFsbEVycm9ycyA6IFtlcnJvcl0pLmZsYXRNYXAoXG4gICAgICAgICh7IGRhdGFQYXRoLCBwYXJhbXMgfSkgPT5cbiAgICAgICAgICBwYXJhbXM/Lm91dGxpZXJzPy5tYXAoXG4gICAgICAgICAgICB2YWx1ZSA9PlxuICAgICAgICAgICAgICBgVGhlICR7ZGF0YVBhdGguaW5jbHVkZXMoJ3Byb2R1Y3QnKSA/ICdwcm9kdWN0JyA6ICdpbnB1dCd9IHZhbHVlICR7XG4gICAgICAgICAgICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGAke2NvZGUodmFsdWUpfSBgIDogJydcbiAgICAgICAgICAgICAgfWlzICR7dmFsdWUgPiBwYXJhbXM/Lm1pbiA/ICdhYm92ZScgOiAnYmVsb3cnfSAke1xuICAgICAgICAgICAgICAgIHBhcmFtcz8udGhyZXNob2xkID8gYCR7Y29kZShgJHsocGFyYW1zLnRocmVzaG9sZCArICgxIC0gcGFyYW1zLnRocmVzaG9sZCkgLyAyKSAqIDEwMH0lYCl9IG9mYCA6ICcnXG4gICAgICAgICAgICAgIH0gYWxsICR7cGFyYW1zPy5ncm91cCA/IGNvZGUocGFyYW1zLmdyb3VwKSA6IGNvZGUocGFyYW1zPy50ZXJtPy5uYW1lKX0gZGF0YSBpbiAke2NvZGUoXG4gICAgICAgICAgICAgICAgcGFyYW1zPy5jb3VudHJ5Lm5hbWVcbiAgICAgICAgICAgICAgKX0gb24gdGhlIEhlc3RpYSBwbGF0Zm9ybS5gXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgICkuam9pbignPC9icj4nKX1cbiAgICA8L2JyPlxuICAgIFBsZWFzZSBkb3VibGUtY2hlY2sgdGhlc2UgdmFsdWVzIGJlZm9yZSBzdWJtaXR0aW5nLmAsXG4gICdzaG91bGQgYmUgZXF1YWwgdG8gYm91bmRhcnknOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIGNhbGN1bGF0ZWQgYXJlYSBmcm9tICR7Y29kZSgnYm91bmRhcnknKX0gaXMgJHtjb2RlKHBhcmFtcz8uZXhwZWN0ZWQpfS5cbiAgICBUaGlzIG1heSBiZSBhbiBlcnJvciBpZiB0aGUgYm91bmRhcnkgcmVwcmVzZW50cyB0aGUgYXJlYSB1bmRlciBjdWx0aXZhdGlvbi5gLFxuICAnbXVzdCBzcGVjaWZ5IHRoZSBmYXRlIG9mIGNyb3BSZXNpZHVlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYEZvciBzaXRlcyBvZiB0eXBlICR7cGFyYW1zLnNpdGVUeXBlLm1hcChjb2RlKS5qb2luKCcgb3IgJyl9LFxuICAgIGlmIGRhdGEgY29tcGxldGVuZXNzIGlzIG1hcmtlZCAke2NvZGUoXG4gICAgICB0cnVlXG4gICAgKX0gZm9yIGNyb3AgcmVzaWR1ZSwgdGhlIGZhdGVzIGFuZCBxdWFudGl0aWVzIG9mIHRoZSByZXNpZHVlIG11c3QgYmUgc3BlY2lmaWVkLlxuICAgIDxici8+XG4gICAgVGhlIHF1YW50aXR5IG11c3QgaW5jbHVkZSBib3RoIGFib3ZlIGFuZCBiZWxvdyBncm91bmQgY3JvcCByZXNpZHVlLCB3aGVyZSB0aGUgc3VtIG9mIGFib3ZlIGdyb3VuZCBjcm9wIHJlc2lkdWUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby5cbiAgICBUaGlzIGNhbiBiZSBhZGRlZCB1c2luZyB0aGUgdGVybXM6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2MgaXMtbm93cmFwXCI+XG4gICAgPGxpPiR7dGVybUxpbmsoeyBpZDogJ2JlbG93R3JvdW5kQ3JvcFJlc2lkdWUnLCBuYW1lOiAnQmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZScgfSl9OyBhbmQ8L2xpPlxuICAgIDxsaT4ke3Rlcm1MaW5rKHsgaWQ6ICdhYm92ZUdyb3VuZENyb3BSZXNpZHVlVG90YWwnLCBuYW1lOiAnQWJvdmUgZ3JvdW5kIGNyb3AgcmVzaWR1ZSB0b3RhbCcgfSl9LjwvbGk+XG4gICAgPC91bD5cbiAgICA8YnIvPlxuICAgIFRoZSBmYXRlIGNhbiBiZSBhZGRlZCB1c2luZzpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICA8bGk+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWVNYW5hZ2VtZW50KX0gcHJhY3RpY2VzOyBhbmQvb3I8L2xpPlxuICAgIDxsaT50aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5jcm9wUmVzaWR1ZSl9IHByb2R1Y3RzPC9saT5cbiAgICA8L3VsPlxuICAgIGAsXG4gICdzaG91bGQgc3BlY2lmeSB0aGUgZmF0ZSBvZiBjcm9wUmVzaWR1ZSc6ICgpID0+XG4gICAgYFlvdSBoYXZlIG5vdCBzcGVjaWZpZWQgdGhlIGZhdGUgb2YgdGhlIGNyb3AgcmVzaWR1ZS5cbiAgICBBZGRpbmcgdGhpcyBpbmZvcm1hdGlvbiB3aWxsIGltcHJvdmUgZW1pc3Npb25zIGFuZCBzb2lsIGNhcmJvbiBzdG9jayBjYWxjdWxhdGlvbnMuXG4gICAgVGhlIGZhdGUgY2FuIGJlIGFkZGVkIHVzaW5nOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kaXNjIGlzLW5vd3JhcFwiPlxuICAgIDxsaT50aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5jcm9wUmVzaWR1ZU1hbmFnZW1lbnQpfSBwcmFjdGljZXM7IGFuZC9vcjwvbGk+XG4gICAgPGxpPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlKX0gcHJvZHVjdHM7PC9saT5cbiAgICA8L3VsPlxuICAgIFJlbWVtYmVyIHRvIHNldCAke2NvZGUoJ2NvbXBsZXRlbmVzcy5jcm9wUmVzaWR1ZScpfSB0byAke2NvZGUoXG4gICAgICB0cnVlXG4gICAgKX0gaWYgYm90aCB0aGUgYWJvdmUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUgcXVhbnRpdGllcyBhbmQgZmF0ZXMgYXJlIHNwZWNpZmllZC5gLFxuICAnc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJpdmFjeSBhcyB0aGUgcmVsYXRlZCBzb3VyY2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVG8gbGluayB0byBhICR7KHBhcmFtcz8uZGVmYXVsdFNvdXJjZSB8fCBwYXJhbXM/LnNvdXJjZSk/LmRhdGFQcml2YXRlID8gJ3ByaXZhdGUnIDogJ3B1YmxpYyd9IFNvdXJjZSxcbiAgICB0aGlzIE5vZGUgbmVlZHMgdG8gYmUgJHsocGFyYW1zPy5kZWZhdWx0U291cmNlIHx8IHBhcmFtcz8uc291cmNlKT8uZGF0YVByaXZhdGUgPyAncHJpdmF0ZScgOiAncHVibGljJ30gYXMgd2VsbC5cbiAgICBQbGVhc2Ugc2V0ICR7Y29kZSgnZGF0YVByaXZhdGUnKX09JHtjb2RlKGAkeyhwYXJhbXM/LmRlZmF1bHRTb3VyY2UgfHwgcGFyYW1zPy5zb3VyY2UpPy5kYXRhUHJpdmF0ZX1gKX0uYCxcbiAgJ3Nob3VsZCBub3QgdXNlIG5vdCByZWxldmFudCBtb2RlbCc6ICgpID0+XG4gICAgYEFsbCBlbWlzc2lvbnMgc2hvdWxkIGdlbmVyYWxseSBoYXZlIGEgbWV0aG9kIHRpZXIsIHdoaWNoIHN0YXRlcyBob3cgdGhlIGRhdGEgd2VyZSBtb2RlbGxlZCBvciBob3cgdGhlIGRhdGEgd2VyZSBjb2xsZWN0ZWQuXG4gICAgUGxlYXNlIHNlZSB0aGUgJHtzY2hlbWFMaW5rKFxuICAgICAgJ0VtaXNzaW9uI21ldGhvZFRpZXInLFxuICAgICAgJ3NjaGVtYSdcbiAgICApfSBmb3IgdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGFuZCBkZWZpbml0aW9ucyBvZiB0aGUgb3B0aW9ucy5gLFxuICAnc2hvdWxkIG5vdCB1c2Ugbm90IHJlbGV2YW50IG1ldGhvZFRpZXInOiAoKSA9PlxuICAgIGBBbGwgZW1pc3Npb25zIHNob3VsZCBnZW5lcmFsbHkgaGF2ZSBhIG1ldGhvZCB0aWVyLCB3aGljaCBzdGF0ZXMgaG93IHRoZSBkYXRhIHdlcmUgbW9kZWxsZWQgb3IgaG93IHRoZSBkYXRhIHdlcmUgY29sbGVjdGVkLlxuICAgIFBsZWFzZSBzZWUgdGhlICR7c2NoZW1hTGluayhcbiAgICAgICdFbWlzc2lvbiNtZXRob2RUaWVyJyxcbiAgICAgICdzY2hlbWEnXG4gICAgKX0gZm9yIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBhbmQgZGVmaW5pdGlvbnMgb2YgdGhlIG9wdGlvbnMuYCxcbiAgJ2luZ3JlZGllbnRzIHNob3VsZCBiZSBjb21wbGV0ZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBEYXRhIGNvbXBsZXRlbmVzcyBmb3IgJHtjb2RlKCdpbmdyZWRpZW50Jyl9IG11c3QgYmUgdHJ1ZSBmb3Igc2l0ZSBvZiB0eXBlICR7cGFyYW1zLnNpdGVUeXBlfWAsXG4gICdtdXN0IGhhdmUgaW5wdXRzIHRvIHJlcHJlc2VudCBpbmdyZWRpZW50cyc6ICgpID0+XG4gICAgYERhdGEgY29tcGxldGVuZXNzIGZvciAke2NvZGUoJ2luZ3JlZGllbnQnKX0gY2Fubm90IGJlIHRydWUgaWYgdGhlcmUgYXJlIG5vIElucHV0cy5gLFxuICAnbXVzdCBoYXZlIGlucHV0cyByZXByZXNlbnRpbmcgdGhlIGZvcmFnZSB3aGVuIHNldCB0byB0cnVlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoaXMgQ3ljbGUgaW5jbHVkZXMgYW5pbWFscyAke3BhcmFtcz8uc2l0ZVR5cGUgPyBgb24gJHtwYXJhbXMuc2l0ZVR5cGV9YCA6ICcnfSBhbmQgY29tcGxldGVuZXNzIGlzIHNldCB0byAke2NvZGUoXG4gICAgICB0cnVlXG4gICAgKX0gZm9yICR7Y29kZSgnZ3JhemVkRm9yYWdlJyl9LlxuICAgIEhvd2V2ZXIsIHRoZXJlIGFyZSBubyBJbnB1dHMgcmVwcmVzZW50aW5nIHRoZSBmb3JhZ2UgaW50YWtlIGJ5IGFuaW1hbHMgaW4gdGhlIEN5Y2xlIChJbnB1dHMgd2l0aCB0ZXJtcyB3aGljaCBjb250YWluIHRoZSB3b3JkcyBcImZyZXNoIGZvcmFnZVwiIGFuZCBhICR7Y29kZShcbiAgICAgICd2YWx1ZSdcbiAgICApfSkuXG4gICAgRWl0aGVyLCBzZXQgY29tcGxldGVuZXNzIHRvICR7Y29kZShmYWxzZSl9IGZvciAke2NvZGUoXG4gICAgICAnZ3JhemVkRm9yYWdlJ1xuICAgICl9LCBtYWtlIHN1cmUgYWxsIFwiZnJlc2ggZm9yYWdlXCIgSW5wdXRzIGhhdmUgYSAke2NvZGUoXG4gICAgICAndmFsdWUnXG4gICAgKX0sIG9yIGFkZCBvbmUgb3IgbW9yZSBJbnB1dHMgcmVwcmVzZW50aW5nIHRoZSBmb3JhZ2UgaW50YWtlLmAsXG4gICdtdXN0IHNwZWNpZnkgaXMgaXQgYW4gYW5pbWFsIGZlZWQnOiAoKSA9PlxuICAgIGBUaGlzIEN5Y2xlIGlzIGFuIGFuaW1hbCBwcm9kdWN0aW9uIEN5Y2xlIGFuZCB0aGlzIElucHV0IGNvdWxkIGJlIGFuIGFuaW1hbCBmZWVkIG9yIGNvdWxkIGJlIGZvciBhbm90aGVyIHVzZS5cbiAgICBQbGVhc2Ugc3BlY2lmeSB0aGUgJHtzY2hlbWFMaW5rKCdJbnB1dCNpc0FuaW1hbEZlZWQnLCAnaXNBbmltYWxGZWVkJyl9IGZpZWxkIG9uIHRoaXMgSW5wdXQuXG4gICAgS25vd2luZyB0aGUgZmF0ZSBpcyBlc3NlbnRpYWwgdG8gZGlzdGluZ3Vpc2ggSW5wdXRzIGJldHdlZW4gdGhvc2Ugd2hpY2ggYXJlIGZlZCB0byBhbmltYWxzIGFuZCB0aG9zZSB3aGljaCBhcmUgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuYCxcbiAgJ3Nob3VsZCBzcGVjaWZ5IGEgdHJlYXRtZW50IHdoZW4gZXhwZXJpbWVudERlc2lnbiBpcyBzcGVjaWZpZWQnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBzcGVjaWZpZWQgdGhhdCB0aGlzIFNvdXJjZSB1c2VzIGFuIGV4cGVyaW1lbnRhbCBkZXNpZ24sIGJ1dCBoYXZlIG5vdCBzcGVjaWZpZWQgdGhlIHRyZWF0bWVudCBmb3IgdGhpcyBDeWNsZS5cbiAgICBBZGRpbmcgdGhlIHRyZWF0bWVudCBwcm92aWRlcyBpbXBvcnRhbnQgbWV0YS1kYXRhIGFuZCB3aWxsIGVuYWJsZSBncmVhdGVyIHJlLXVzZSBvZiB0aGVzZSBkYXRhLlxuICAgIEFkZCB0aGUgJHtzY2hlbWFMaW5rKCdDeWNsZSN0cmVhdG1lbnQnLCAndHJlYXRtZW50Jyl9IGZpZWxkIHRvIHRoZSBDeWNsZS5cbiAgICBOb3RlIHRoYXQgdGhlIGZpZWxkICR7c2NoZW1hTGluayhcbiAgICAgICdDeWNsZSNjb21tZXJjaWFsUHJhY3RpY2VUcmVhdG1lbnQnLFxuICAgICAgJ2NvbW1lcmNpYWxQcmFjdGljZVRyZWF0bWVudCdcbiAgICApfSBiZWNvbWVzIHJlcXVpcmVkIGlmIHRyZWF0bWVudCBpcyBzcGVjaWZpZWQuYCxcbiAgJ3Nob3VsZCBub3Qgc3BlY2lmeSBib3RoIGxpdmVBbmltYWwgYW5kIGFuaW1hbFByb2R1Y3QnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBhZGRlZCBib3RoIGEgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5saXZlQW5pbWFsKX0gYW5kICR7Z2xvc3NhcnlUeXBlTGluayhcbiAgICAgIFRlcm1UZXJtVHlwZS5hbmltYWxQcm9kdWN0XG4gICAgKX0gdGVybSBhcyBQcm9kdWN0cy5cbiAgICBJZiB0aGVzZSB0ZXJtcyByZWZlciB0byB0aGUgc2FtZSBhbmltYWxzLCB0aGlzIHdpbGwgbGVhZCB0byBkb3VibGUgY291bnRpbmc6XG4gICAgaW5zdGVhZCB1c2UgYSBQcm9wZXJ0eSBvbiB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFxuICAgICAgVGVybVRlcm1UeXBlLmxpdmVBbmltYWxcbiAgICApfSB0ZXJtIHRvIGRlZmluZSB0aGUgcXVhbnRpdHkgb2YgbGl2ZXdlaWdodCBwZXIgaGVhZCwgY2FyY2FzcyB3ZWlnaHQgcGVyIGhlYWQsIGV0Yy5gLFxuICAnbXVzdCBhZGQgYW4gZXhjcmV0YSBwcm9kdWN0IHdpdGggYSBsaXZlQW5pbWFsIHByb2R1Y3QnOiAoKSA9PlxuICAgIGBBbmltYWwgcHJvZHVjdGlvbiBDeWNsZXMgY3JlYXRlIGV4Y3JldGEuXG4gICAgVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgJHtjb2RlKFRlcm1UZXJtVHlwZS5leGNyZXRhKX0gcHJvZHVjdCBpbiB0aGlzIEN5Y2xlLlxuICAgIFBsZWFzZSBhZGQgYW4gJHtjb2RlKFRlcm1UZXJtVHlwZS5leGNyZXRhKX0gUHJvZHVjdCB0byB0aGUgQ3ljbGUuXG4gICAgWW91IGRvIG5vdCBuZWVkIHRvIHNldCBhICR7Y29kZSgndmFsdWUnKX0gZm9yIHRoZSBQcm9kdWN0LCBidXQgYWRkaW5nIGEgJHtjb2RlKCd2YWx1ZScpfSBpcyBkZXNpcmFibGUuYCxcbiAgJ3ZhbHVlIHNob3VsZCBzdW0gdG8gMTAwIG9yIGxlc3MgYWNyb3NzIHdhdGVyIHJlZ2ltZSBwcmFjdGljZXMnOiAoKSA9PlxuICAgIGBUaGUgdG90YWwgJSBhcmVhIGNvdmVyZWQgYnkgdGhlICR7Y29kZShUZXJtVGVybVR5cGUud2F0ZXJSZWdpbWUpfSBwcmFjdGljZXMgeW91IHNwZWNpZmllZCBpcyBub3QgZXF1YWwgdG8gJHtjb2RlKFxuICAgICAgMTAwXG4gICAgKX0uXG4gICAgTWFrZSBzdXJlIHRvIGFkZCBhbnkgbWlzc2luZyBwcmFjdGljZSBpZiBuZWVkZWQgYW5kL29yIGFkanVzdCB0aGUgdmFsdWVzIG9mIHRoZSAke2NvZGUoXG4gICAgICBUZXJtVGVybVR5cGUud2F0ZXJSZWdpbWVcbiAgICApfSBwcmFjdGljZXMgeW91IGFscmVhZHkgcmVjb3JkZWQuYCxcbiAgJ3JpY2UgcHJvZHVjdHMgbm90IGFsbG93ZWQgZm9yIHRoaXMgd2F0ZXIgcmVnaW1lIHByYWN0aWNlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoaXMgcHJhY3RpY2UgaXMgbm90IGFsbG93ZWQgd2l0aCB0aGUgcHJvZHVjdHMgJHtwYXJhbXMucHJvZHVjdHM/Lm1hcChwID0+IGNvZGUocC5uYW1lIHx8IHBbJ0BpZCddKSl9LlxuICAgIFJlY29yZGluZyB0aGUgcmlnaHQgd2F0ZXIgcmVnaW1lIGZvciByaWNlIGVuc3VyZXMgbWV0aGFuZSBlbWlzc2lvbnMgZnJvbSBmbG9vZGVkIGZpZWxkcyBhcmUgY29ycmVjdGx5IHJlY2FsY3VsYXRlZC5cbiAgICBUbyBmaXggdGhpcyBlcnJvciwgZWl0aGVyIGNoYW5nZSB0aGUgcHJhY3RpY2Ugb3IgdGhlIHByb2R1Y3RzLmAsXG4gICdtdXN0IG5vdCBiZSBlcXVhbCB0byAxIGhhJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYCR7Y29kZShDeWNsZUZ1bmN0aW9uYWxVbml0WycxIGhhJ10pfSBjYW5ub3QgYmUgdXNlZCBhcyAke3NjaGVtYUxpbmsoXG4gICAgICAnQ3ljbGUjZnVuY3Rpb25hbFVuaXQnLFxuICAgICAgJ2Z1bmN0aW9uYWxVbml0J1xuICAgICl9IGZvciBDeWNsZXMgbGlua2VkIHRvIFNpdGVzIHdpdGggJHtzY2hlbWFMaW5rKCdTaXRlI3NpdGVUeXBlJywgJ3NpdGVUeXBlJyl9ID0gJHtjb2RlKHBhcmFtcz8uc2l0ZVR5cGUpfS5cbiAgICBFaXRoZXIgY2hhbmdlIHRoZSAke3NjaGVtYUxpbmsoJ0N5Y2xlI2Z1bmN0aW9uYWxVbml0JywgJ2Z1bmN0aW9uYWxVbml0Jyl9IHRvICR7Y29kZShcbiAgICAgIEN5Y2xlRnVuY3Rpb25hbFVuaXQucmVsYXRpdmVcbiAgICApfSBvciBjaGFuZ2UgdGhlICR7c2NoZW1hTGluaygnU2l0ZSNzaXRlVHlwZScsICdzaXRlVHlwZScpfS5gLFxuICAnc2hvdWxkIHNwZWNpZnkgYSB2YWx1ZSB3aGVuIEhlc3RpYSBoYXMgYSBkZWZhdWx0IG9uZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBBcyB5b3UgaGF2ZSBub3Qgc3BlY2lmaWVkIGEgJHtjb2RlKCd2YWx1ZScpfSwgd2Ugd2lsbCBhc3N1bWUgdGhlIHZhbHVlIGlzICR7Y29kZShwYXJhbXM/LmV4cGVjdGVkKX0uXG4gICAgSWYgdGhpcyBpcyBpbmNvcnJlY3QsIHBlbGFzZSBhZGQgYSB2YWx1ZS5gLFxuICAnc2hvdWxkIGNvbnRhaW4gYXQgbGVhc3Qgb25lIG1hbmFnZW1lbnQgbm9kZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGAke1xuICAgICAgcGFyYW1zPy50ZXJtVHlwZVxuICAgICAgICA/IGBEb2VzIG5vdCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0ICR7Y29kZShwYXJhbXMudGVybVR5cGUpfS5cbiAgICAgICAgUGxlYXNlIGNvbnNpZGVyIGFkZGluZyBhIGhpc3Rvcnkgb2YgJHtjb2RlKFxuICAgICAgICAgIHBhcmFtcy50ZXJtVHlwZVxuICAgICAgICApfSBmb3IgYXMgbWFueSB5ZWFycyBhcyBwb3NzaWJsZSBpbiB0aGUgTWFuYWdlbWVudCBibGFuayBub2Rlcy5gXG4gICAgICAgIDogYFRoZXJlIGlzIG5vIE1hbmFnZW1lbnQgbm9kZSBwcmVzZW50IGluIHRoaXMgdXBsb2FkLlxuICAgICAgICBXZSByZWNvbW1lbmQgYWRkaW5nIHRoaXMgdG8gdGhlIFNpdGUsIGluY2x1ZGluZyBpbmZvcm1hdGlvbiBhYm91dCBjdXJyZW50IGFuZCBoaXN0b3JpY2FsIHRpbGxhZ2UuXG4gICAgICAgIGBcbiAgICB9XG4gICAgV2UgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gbW9kZWwgQ088c3ViPjI8L3N1Yj4gZW1pc3Npb25zIGZyb20gc29pbCBvcmdhbmljIGNhcmJvbiBjaGFuZ2UuYCxcbiAgJ2NhbiBub3QgYmUgdXNlZCBvbiB0aGlzIHRlcm1UeXBlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoaXMgUHJvcGVydHkgY2FuIG9ubHkgYmUgdXNlZCBvbiBibGFuayBub2RlcyB3aXRoIHRoZSBmb2xsb3dpbmcgJHtjb2RlKCd0ZXJtLnRlcm1UeXBlJyl9OiAke3BhcmFtcy5leHBlY3RlZFxuICAgICAgLm1hcChjb2RlKVxuICAgICAgLmpvaW4oJywgJyl9LmAsXG4gICdub3QgYSB2YWxpZCBHZW9KU09OJzogKHsgcGFyYW1zIH0pID0+IGBcbiAgJHtcbiAgICBwYXJhbXM/LmludmFsaWRDb29yZGluYXRlcyA9PT0gJ3RydWUnXG4gICAgICA/IGBHZW9KU09OIGRhdGEgc2hvdWxkIGZvbGxvdyB0aGUgV0dTODQgZGF0dW0uXG4gIFdlIGhhdmUgZm91bmQgY29vcmRpbmF0ZXMgb3V0c2lkZSBvZiB0aGUgLTE4MCB0byArMTgwIHJhbmdlIHdoaWNoIGlzIG5vdCBwb3NzaWJsZSB1bmRlciBXR1M4NC5cbiAgUGxlYXNlIGNoZWNrIHRoZSBkYXR1bSBvciBjaGVjayBmb3Igb3RoZXIgcG9zc2libGUgZXJyb3JzLmBcbiAgICAgIDogJ1RoaXMgR2VvSlNPTiBhcHBlYXJzIHRvIGJlIGludmFsaWQuJ1xuICB9XG4gIFlvdSBjYW4gdmFsaWRhdGUgeW91ciBHZW9KU09OIHVzaW5nIGFuIG9ubGluZSB0b29sIGxpa2UgPGEgaHJlZj1cImh0dHBzOi8vZ2VvanNvbi5pby9cIj5nZW9qc29uLmlvPC9hPi5cbiAgSWYgeW91IHRoaW5rIHRoaXMgaXMgYSBtaXN0YWtlLCBwbGVhc2UgcmVwb3J0IHRoZSBlcnJvciAke3JlcG9ydElzc3VlTGluayhSZXBvc2l0b3J5LnNjaGVtYSwgVGVtcGxhdGUuYnVnKX0uYCxcbiAgJ3Nob3VsZCBhZGQgdGhlIHRlcm0gc3RvY2tpbmdEZW5zaXR5UGVybWFuZW50UGFzdHVyZUF2ZXJhZ2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgWW91IGRpZCBub3Qgc3BlY2lmeSAke25vZGVMaW5rKHsgJ0B0eXBlJzogTm9kZVR5cGUuVGVybSwgJ0BpZCc6IHBhcmFtcy5leHBlY3RlZCB9KX0uXG4gICAgQWRkaW5nIHRoaXMgUHJhY3RpY2UgaXMgZXNzZW50aWFsIGZvciBDeWNsZXMgd2l0aCByZWxhdGl2ZSBmdW5jdGlvbmFsIHVuaXQgd2hpY2ggaGFwcGVuIGVudGlyZWx5IG9yIHBhcnRpYWxseSBvbiBwZXJtYW5lbnQgcGFzdHVyZS5cbiAgICBXaXRob3V0IHRoaXMgaW5mb3JtYXRpb24gSGVzdGlhIGNhbm5vdCBjYWxjdWxhdGUgYW5pbWFsIHJlbGF0ZWQgZW1pc3Npb25zLmAsXG4gICdzaG91bGQgc3BlY2lmeSB0aGUgaGVyZCBjb21wb3NpdGlvbic6ICgpID0+XG4gICAgYFdlIHJlY29tbWVuZCBhZGRpbmcgaW5mb3JtYXRpb24gb24gdGhlIGhlcmQgY29tcG9zaXRpb24gdXNpbmcgdGhlIEFuaW1hbCBub2RlLlxuICAgIFdpdGhvdXQgdGhpcywgd2UgY2Fubm90IHJlLW1vZGVsIG1hbnkgYW5pbWFsIHJlbGF0ZWQgSW5wdXRzLCBQcm9kdWN0cywgYW5kIEVtaXNzaW9ucy5gXG59O1xuXG5jb25zdCBwYXJzZURlZmF1bHRNZXNzYWdlID0gKG1lc3NhZ2U/OiBzdHJpbmcpID0+XG4gIGA8c3BhbiBjbGFzcz1cImlzLWNhcGl0YWxpemVkLWZpcnN0LWxldHRlclwiPiR7XG4gICAgbWVzc2FnZT8uc3RhcnRzV2l0aCgnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHknKVxuICAgICAgPyBtZXNzYWdlLnJlcGxhY2UoXCInXCIsICc8Y29kZT4nKS5yZXBsYWNlKFwiJ1wiLCAnPC9jb2RlPicpXG4gICAgICA6IG1lc3NhZ2VcbiAgfTwvc3Bhbj5gO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0Q3VzdG9tRXJyb3JNZXNzYWdlID0gKFxuICBtZXNzYWdlPzogc3RyaW5nLFxuICBlcnJvcj86IElWYWxpZGF0aW9uRXJyb3IsXG4gIGFsbEVycm9yczogSVZhbGlkYXRpb25FcnJvcltdID0gW11cbikgPT4ge1xuICBjb25zdCBmb3JtYXR0ZWRNZXNzYWdlID0gY3VzdG9tRXJyb3JNZXNzYWdlPy5bbWVzc2FnZV1cbiAgICA/IGN1c3RvbUVycm9yTWVzc2FnZVttZXNzYWdlXShlcnJvciEsIGFsbEVycm9ycy5sZW5ndGggfHwgMSwgYWxsRXJyb3JzKVxuICAgIDogcGFyc2VEZWZhdWx0TWVzc2FnZShtZXNzYWdlKTtcbiAgcmV0dXJuIGZvcm1hdHRlZE1lc3NhZ2UgPyBgPHAgY2xhc3M9XCJpcy1ub3JtYWxcIj4ke2Zvcm1hdHRlZE1lc3NhZ2V9PC9wPmAgOiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRFcnJvciA9IChcbiAgZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yLFxuICBhbGxFcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSA9IFtdXG4pOiBJVmFsaWRhdGlvbkVycm9yIHwgdW5kZWZpbmVkID0+XG4gIGVycm9yXG4gICAgPyB7XG4gICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAuLi5lcnJvcixcbiAgICAgICAgbWFwRXJyb3I6IGVycm9yLm1lc3NhZ2UgPT09IG1hcEVycm9yTWVzc2FnZSxcbiAgICAgICAgbWVzc2FnZTogZm9ybWF0Q3VzdG9tRXJyb3JNZXNzYWdlKGVycm9yLm1lc3NhZ2UsIGVycm9yLCBhbGxFcnJvcnMpXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbmV4cG9ydCBjb25zdCBlcnJvckhhc0Vycm9yID0gKGVycm9yPzogSVZhbGlkYXRpb25FcnJvcikgPT4gZXJyb3IgJiYgKGVycm9yLmxldmVsID09PSAnZXJyb3InIHx8ICFlcnJvci5sZXZlbCk7XG5cbmV4cG9ydCBjb25zdCBlcnJvckhhc1dhcm5pbmcgPSAoZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yKSA9PiBlcnJvciAmJiBlcnJvci5sZXZlbCA9PT0gJ3dhcm5pbmcnO1xuXG5leHBvcnQgY29uc3QgaXNNaXNzaW5nUHJvcGVydHlFcnJvciA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PiAhIXBhcmFtcyAmJiAnbWlzc2luZ1Byb3BlcnR5JyBpbiBwYXJhbXM7XG5cbmV4cG9ydCBjb25zdCBpc01pc3NpbmdPbmVPZkVycm9yID0gKHsga2V5d29yZCwgc2NoZW1hUGF0aCB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PlxuICBrZXl3b3JkID09PSAncmVxdWlyZWQnICYmIChzY2hlbWFQYXRoIHx8ICcnKS5pbmNsdWRlcygnb25lT2YnKTtcblxuY29uc3QgaXNGYWlsaW5nS2V5d29yZEVycm9yID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+ICEhcGFyYW1zICYmICdmYWlsaW5nS2V5d29yZCcgaW4gcGFyYW1zO1xuXG5leHBvcnQgY29uc3QgZmlsdGVyRXJyb3IgPSAoZXJyb3I6IElWYWxpZGF0aW9uRXJyb3IpID0+IFtpc0ZhaWxpbmdLZXl3b3JkRXJyb3JdLmV2ZXJ5KGZ1bmMgPT4gIWZ1bmMoZXJyb3IpKTtcblxuZXhwb3J0IGNvbnN0IG1pc3NpbmdOb2RlRXJyb3JzID0gKGVycm9yczogSVZhbGlkYXRpb25FcnJvcltdKSA9PlxuICBlcnJvcnMuZmlsdGVyKFxuICAgICh7IGtleXdvcmQsIHBhcmFtcyB9KSA9PlxuICAgICAga2V5d29yZCA9PT0gJ3JlcXVpcmVkJyAmJiAocGFyYW1zPy5taXNzaW5nUHJvcGVydHkgPT09ICdAdHlwZScgfHwgcGFyYW1zPy5taXNzaW5nUHJvcGVydHkgPT09ICdAaWQnKVxuICApO1xuIl19
|
|
392
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZXJyb3IubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmlsZXMvZmlsZXMtZXJyb3IubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLDRCQUE0QjtBQUM1QixzQ0FBc0M7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQVEsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xILE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM3RCxPQUFPLEVBQ0wsVUFBVSxFQUNWLFFBQVEsRUFDUixPQUFPLEVBQ1AsSUFBSSxFQUNKLGFBQWEsRUFDYixZQUFZLEVBQ1osWUFBWSxFQUNaLFFBQVEsRUFDUixlQUFlLEVBQ2YsVUFBVSxFQUNYLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBNkRoRCxNQUFNLGVBQWUsR0FBRyx5Q0FBeUMsQ0FBQztBQVVsRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLEdBQUcsRUFBRSxFQUFlLEVBQUU7SUFDMUQsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxHQUFHLFFBQVE7U0FDM0IsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztTQUM5QixPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQztTQUM1QixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDdEIsTUFBTSxLQUFLLEdB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QUcsQ0FBQyxFQUFFLE1BQU0sRUFBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxnQkFBZ0IsSUFBSSxNQUFNLENBQUM7QUFFdkcsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBdUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFNUcsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUEwQixFQUFFLEVBQUUsQ0FDOUQsTUFBTSxDQUFDLE1BQU0sQ0FDWCxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FDdEIsT0FBTyxLQUFLLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLEtBQUssT0FBTyxJQUFJLE1BQU0sRUFBRSxlQUFlLEtBQUssS0FBSyxDQUFDLENBQ3ZHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWVzY2FwZSAqL1xuaW1wb3J0IHsgQ3ljbGVGdW5jdGlvbmFsVW5pdCwgTm9kZVR5cGUsIFNjaGVtYVR5cGUsIFRlcm0sIFRlcm1UZXJtVHlwZSwgaXNUeXBlVmFsaWQgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyB0b1ByZWNpc2lvbiwga2V5VG9MYWJlbCwgdW5pcXVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5cbmltcG9ydCB7IHRlcm1UeXBlTGFiZWwgfSBmcm9tICcuLi90ZXJtcy90ZXJtcy5tb2RlbCc7XG5pbXBvcnQgeyBwYXRoVG9BcGlEb2NzUGF0aCB9IGZyb20gJy4uL2VuZ2luZS9lbmdpbmUuc2VydmljZSc7XG5pbXBvcnQge1xuICBSZXBvc2l0b3J5LFxuICBUZW1wbGF0ZSxcbiAgYmFzZVVybCxcbiAgY29kZSxcbiAgY29udGFjdFVzTGluayxcbiAgZXh0ZXJuYWxMaW5rLFxuICBnbG9zc2FyeUxpbmssXG4gIG5vZGVMaW5rLFxuICByZXBvcnRJc3N1ZUxpbmssXG4gIHNjaGVtYUxpbmtcbn0gZnJvbSAnLi4vY29tbW9uL3V0aWxzJztcbmltcG9ydCB7IHBsdXJhbGl6ZSB9IGZyb20gJy4uL2NvbW1vbi9wbHVyYWxpemUnO1xuXG4vLyBUT0RPOiBhZGQgbW9yZSB2YWxpZGF0aW9uIGtleXdvcmQgYW5kIHBhcmFtc1xuZXhwb3J0IHR5cGUgdmFsaWRhdGlvbkVycm9yTGV2ZWwgPSAnZXJyb3InIHwgJ3dhcm5pbmcnO1xuZXhwb3J0IHR5cGUgdmFsaWRhdGlvbkVycm9yUGFyYW0gPVxuICB8ICdtaXNzaW5nUHJvcGVydHknXG4gIHwgJ3R5cGUnXG4gIHwgJ3Rlcm0nXG4gIHwgJ3Rlcm1UeXBlJ1xuICB8ICdtb2RlbCdcbiAgfCAncHJvZHVjdCdcbiAgfCAncmFuZ2UnXG4gIHwgJ25vZGUnXG4gIHwgJ2FsbG93ZWRWYWx1ZXMnXG4gIHwgJ2FsbG93ZWRWYWx1ZSdcbiAgfCAnYWRkaXRpb25hbFByb3BlcnR5J1xuICB8ICdleHBlY3RlZCdcbiAgfCAnZGVmYXVsdCdcbiAgfCAnY3VycmVudCdcbiAgfCAncGVyY2VudGFnZSdcbiAgfCAna2V5cydcbiAgfCAndGhyZXNob2xkJ1xuICB8ICdvdXRsaWVycydcbiAgfCAnY291bnRyeSdcbiAgfCAnbWluJ1xuICB8ICdtYXgnXG4gIHwgJ2RlZmF1bHRTb3VyY2UnXG4gIHwgJ3NvdXJjZSdcbiAgfCAnZ3JvdXAnXG4gIHwgJ21lc3NhZ2UnXG4gIHwgJ2Rpc3RhbmNlJ1xuICB8ICdzaXRlVHlwZSdcbiAgfCAncHJvZHVjdHMnXG4gIHwgJ3VuaXRzJ1xuICB8ICdkdXBsaWNhdGVkSW5kZXhlcydcbiAgfCAnaW52YWxpZENvb3JkaW5hdGVzJztcbmV4cG9ydCB0eXBlIHZhbGlkYXRpb25FcnJvcktleXdvcmQgPSAncmVxdWlyZWQnIHwgJ3R5cGUnIHwgJ2lmJyB8ICd0aGVuJyB8ICdub3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0aW9uRXJyb3Ige1xuICBpbmRleD86IG51bWJlcjtcbiAgbm9kZUluZGV4PzogbnVtYmVyO1xuICBsZXZlbD86IHZhbGlkYXRpb25FcnJvckxldmVsO1xuICBkYXRhUGF0aD86IHN0cmluZztcbiAgc2NoZW1hUGF0aD86IHN0cmluZztcbiAga2V5d29yZD86IHZhbGlkYXRpb25FcnJvcktleXdvcmQ7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgcGFyYW1zPzogeyBba2V5IGluIHZhbGlkYXRpb25FcnJvclBhcmFtXT86IGFueSB9O1xuICBtYXBFcnJvcj86IGJvb2xlYW47XG4gIHNjaGVtYT86IHtcbiAgICByZXF1aXJlZD86IHN0cmluZ1tdO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElWYWxpZGF0aW9uRXJyb3JXaXRoSW5kZXgge1xuICBlcnJvcjogSVZhbGlkYXRpb25FcnJvcltdO1xuICBpbmRleDogbnVtYmVyO1xuICBjaGFuZ2VkPzogYm9vbGVhbjtcbn1cblxudHlwZSBoYW5kbGVFcnJvckZ1bmMgPSAoZXJyb3I6IElWYWxpZGF0aW9uRXJyb3IsIGVycm9yQ291bnQ/OiBudW1iZXIsIGFsbEVycm9ycz86IElWYWxpZGF0aW9uRXJyb3JbXSkgPT4gc3RyaW5nO1xuXG5jb25zdCBtYXBFcnJvck1lc3NhZ2UgPSAnZG9lcyBub3QgY29udGFpbiBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlJztcblxuaW50ZXJmYWNlIElEYXRhUGF0aCB7XG4gIHBhdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIEh1bWFuIHJlYWRhYmxlIHZlcnNpb24gb2YgdGhlIHBhdGguXG4gICAqL1xuICBsYWJlbDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VEYXRhUGF0aCA9IChkYXRhUGF0aCA9ICcnKTogSURhdGFQYXRoW10gPT4ge1xuICBjb25zdCBbXywgLi4ucGF0aHNdID0gZGF0YVBhdGhcbiAgICAucmVwbGFjZSgvW1xcW1xcXVxcJ1xcJ1xcXCJcXFwiXS9nLCAnJylcbiAgICAucmVwbGFjZSgvKFxcdykoXFxAKS9nLCAnJDEuQCcpXG4gICAgLnNwbGl0KCcuJyk7XG4gIHJldHVybiBwYXRocy5tYXAocGF0aCA9PiB7XG4gICAgY29uc3QgbGFiZWwgPSBwYXRoLnJlcGxhY2UoL1tcXGRcXEBdKy9nLCAnJyk7XG4gICAgY29uc3QgdHlwZSA9IHBsdXJhbGl6ZShrZXlUb0xhYmVsKGxhYmVsKSwgMSkgYXMgU2NoZW1hVHlwZTtcbiAgICBjb25zdCBpc1NjaGVtYVR5cGUgPSBpc1R5cGVWYWxpZCh7IHR5cGUgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGg6IHBhdGgucmVwbGFjZSgvKFxcZCspL2csICdbJDFdJyksXG4gICAgICBsYWJlbDogaXNTY2hlbWFUeXBlID8gdHlwZSA6IGA8Y29kZT4ke3BsdXJhbGl6ZShsYWJlbCwgMSl9PC9jb2RlPmBcbiAgICB9O1xuICB9KTtcbn07XG5cbmNvbnN0IGFsbG93ZWREYXRhUGF0aHNMYWJlbHMgPSBPYmplY3QudmFsdWVzKFNjaGVtYVR5cGUpO1xuLy8gVE9ETzogc2VlIGlmIHdlIHdhbnQgdG8gaWdub3JlIFRlcm0gbGFiZWwgYW5kIHNob3cgdGhlIGJsYW5rIG5vZGUgaW5zdGVhZFxuLy8gY29uc3QgYWxsb3dlZERhdGFQYXRoc0xhYmVscyA9IE9iamVjdC52YWx1ZXMoU2NoZW1hVHlwZSkuZmlsdGVyKHYgPT4gIVtTY2hlbWFUeXBlLlRlcm1dLmluY2x1ZGVzKHYpKTtcblxuZXhwb3J0IGNvbnN0IGRhdGFQYXRoTGFiZWwgPSAoZGF0YVBhdGggPSAnJykgPT5cbiAgcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICAuZmlsdGVyKCh7IGxhYmVsIH0pID0+IGFsbG93ZWREYXRhUGF0aHNMYWJlbHMuaW5jbHVkZXMobGFiZWwgYXMgU2NoZW1hVHlwZSkpXG4gICAgLnBvcCgpPy5sYWJlbDtcblxuY29uc3QgZ2xvc3NhcnlUeXBlTGluayA9ICh0eXBlOiBUZXJtVGVybVR5cGUsIHRleHQgPSB0ZXJtVHlwZUxhYmVsKHR5cGUpKSA9PlxuICBleHRlcm5hbExpbmsoYCR7YmFzZVVybCgpfS9nbG9zc2FyeT90ZXJtVHlwZT0ke3R5cGV9YCwgdGV4dCk7XG5jb25zdCB0ZXJtTGluayA9ICh7IGlkLCBuYW1lIH06IFBhcnRpYWw8VGVybT4pID0+IGV4dGVybmFsTGluayhgJHtiYXNlVXJsKCl9L3Rlcm0vJHtpZH1gLCBuYW1lIHx8IGlkKTtcbmNvbnN0IGRhdGVGb3JtYXRNZXNzYWdlID0gYHNob3VsZCBmb2xsb3cgdGhlIElTTyA4NjAxIGRhdGUgZm9ybWF0LCBlLmcuICR7Y29kZSgyMDAwKX0sIG9yICR7Y29kZSgnMjAwMC0xMicpfSwgb3IgJHtjb2RlKFxuICAnMjAwMC0xMi0zMCdcbil9YDtcbmNvbnN0IG1vZGVsTGluayA9ICh0ZXJtOiBUZXJtLCBtb2RlbDogVGVybSkgPT4gYFxuICA8YSBocmVmPVwiJHtwYXRoVG9BcGlEb2NzUGF0aChtb2RlbFsnQGlkJ10sIHRlcm1bJ0BpZCddKX1cIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICA8c3BhbiBjbGFzcz1cInByLTFcIj4ke21vZGVsLm5hbWV9PC9zcGFuPlxuICAgIDxzcGFuPihWaWV3IERvY3MpPC9zcGFuPlxuICA8L2E+XG5gO1xuY29uc3QgdGhyZXNob2xkID0gKHZhbHVlOiBudW1iZXIpID0+IGNvZGUoYCR7dmFsdWUgKiAxMDB9JWApO1xuXG5jb25zdCBub1RpbGxhZ2U6IFBhcnRpYWw8VGVybT4gPSB7IGlkOiAnbm9UaWxsYWdlJywgbmFtZTogJ05vIHRpbGxhZ2UnIH07XG5jb25zdCBwYXN0dXJlR3Jhc3M6IFBhcnRpYWw8VGVybT4gPSB7IGlkOiAncGFzdHVyZUdyYXNzJywgbmFtZTogJ1Bhc3R1cmUgZ3Jhc3MnIH07XG5cbmNvbnN0IGlkTm90Rm91bmREZWZhdWx0TWVzc2FnZSA9IGBcbiAgSWYgeW91IGFyZSB1c2luZyB0aGUgJHtjb2RlKCduYW1lJyl9IG9mIHRoZSBUZXJtLCBtYWtlIHN1cmUgdG8gdXNlICR7Y29kZSgndGVybS5uYW1lJyl9IGNvbHVtbjtcbiAgaWYgeW91IGFyZSB1c2luZyB0aGUgJHtjb2RlKCdAaWQnKX0gb2YgdGhlIFRlcm0sIHVzZSB0aGUgJHtjb2RlKCd0ZXJtLkBpZCcpfSBjb2x1bW4gaW5zdGVhZC5cbmAudHJpbSgpO1xuXG5leHBvcnQgY29uc3QgaXNNaWdyYXRpb25FcnJvciA9ICh7IHBhcmFtcyB9OiBJVmFsaWRhdGlvbkVycm9yKSA9PiBwYXJhbXM/LmN1cnJlbnQgJiYgJ2V4cGVjdGVkJyBpbiBwYXJhbXM7XG5cbmV4cG9ydCBjb25zdCBtaWdyYXRpb25FcnJvck1lc3NhZ2UgPSAoeyBwYXJhbXMgfTogSVZhbGlkYXRpb25FcnJvcikgPT5cbiAgcGFyYW1zPy5leHBlY3RlZFxuICAgID8gYFRoZSBUZXJtICR7Y29kZShwYXJhbXMuY3VycmVudCl9IHdhcyB1cGRhdGVkLCBwbGVhc2UgdXNlIHRoaXMgVGVybSBpbnN0ZWFkOiAke2NvZGUocGFyYW1zLmV4cGVjdGVkKX0uYFxuICAgIDogYFRoZSBUZXJtICR7Y29kZShwYXJhbXMuY3VycmVudCl9IHdhcyBkZWxldGVkLiBQbGVhc2Ugc2VhcmNoIHRoZSAke2dsb3NzYXJ5TGluaygnR2xvc3NhcnknKX0gZm9yIGEgbmV3IFRlcm0uYDtcblxuY29uc3QgaWROb3RGb3VuZEVycm9yOiBoYW5kbGVFcnJvckZ1bmMgPSAoX2Vycm9yLCBfZXJyb3JDb3VudCwgYWxsRXJyb3JzKSA9PiB7XG4gIGNvbnN0IG1pZ3JhdGlvbkVycm9ycyA9IGFsbEVycm9ycy5maWx0ZXIoaXNNaWdyYXRpb25FcnJvcik7XG4gIGNvbnN0IG5vTWlncmF0aW9uRXJyb3JzID0gYWxsRXJyb3JzLmZpbHRlcihlcnJvciA9PiAhaXNNaWdyYXRpb25FcnJvcihlcnJvcikpO1xuICByZXR1cm4gYFxuICAgIDxwPkRvZXMgbm90IGV4aXN0IGluIEhlc3RpYS48L3A+XG4gICAgJHtub01pZ3JhdGlvbkVycm9ycy5sZW5ndGggPyBgPHA+JHtpZE5vdEZvdW5kRGVmYXVsdE1lc3NhZ2V9PC9wPmAgOiAnJ31cbiAgICAke3VuaXF1ZShtaWdyYXRpb25FcnJvcnMubWFwKG1pZ3JhdGlvbkVycm9yTWVzc2FnZSkpLmpvaW4oJzwvYnI+Jyl9XG4gIGA7XG59O1xuXG4vLyBzZXQgbWVzc2FnZSBhcyBlbXB0eSB0byBub3QgZGlzcGxheSBpdFxuY29uc3QgY3VzdG9tRXJyb3JNZXNzYWdlOiB7XG4gIFtrZXk6IHN0cmluZ106IGhhbmRsZUVycm9yRnVuYztcbn0gPSB7XG4gIFwic2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgJ0BpZCdcIjogaWROb3RGb3VuZEVycm9yLFxuICBcInNob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICdAdHlwZSdcIjogKCkgPT4gJycsXG4gIFwic2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgJ2lkJ1wiOiBpZE5vdEZvdW5kRXJyb3IsXG4gICdzaG91bGQgbWF0Y2ggZXhhY3RseSBvbmUgc2NoZW1hIGluIG9uZU9mJzogKCkgPT4gJycsXG4gICdzaG91bGQgbWF0Y2ggc29tZSBzY2hlbWEgaW4gYW55T2YnOiAoKSA9PiAnJyxcbiAgJ3Nob3VsZCBtYXRjaCBcInRoZW5cIiBzY2hlbWEnOiAoKSA9PiAnJyxcbiAgJ3Nob3VsZCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICA/IGBUaGUgZm9sbG93aW5nIGZpZWxkIGRvZXMgbm90IGV4aXN0OiAke3BhcmFtcz8uYWRkaXRpb25hbFByb3BlcnR5fSBvciBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNhc2UuYFxuICAgICAgOiBgU2hvdWxkIG5vdCBoYXZlIGFkZGl0aW9uYWwgcHJvcGVydGllcy5gLFxuICAnc2hvdWxkIE5PVCBiZSB2YWxpZCc6ICh7IHNjaGVtYSB9KSA9PlxuICAgIHNjaGVtYT8ucmVxdWlyZWQ/LmluY2x1ZGVzKCdhcmVhUGVyY2VudCcpXG4gICAgICA/IGBJZiB0aGUgdGVybSB1bml0cyBpcyBhbHJlYWR5IGluICR7Y29kZSgnJSBhcmVhJyl9LCBqdXN0IHVzZSAke2NvZGUoJ3ZhbHVlJyl9LiBEb250IHVzZSAke2NvZGUoJ2FyZWFQZXJjZW50Jyl9LmBcbiAgICAgIDogc2NoZW1hPy5yZXF1aXJlZD8uaW5jbHVkZXMoJ3RyYW5zZm9ybWF0aW9uJylcbiAgICAgID8gJ0EgdHJhbnNmb3JtYXRpb24gY2FuIG5vdCBiZSBhZGRlZCBoZXJlLidcbiAgICAgIDogc2NoZW1hPy5yZXF1aXJlZD8uaW5jbHVkZXMoJ2Zyb21DeWNsZScpXG4gICAgICA/IGBUaGlzIGZpZWxkIGNhbiBvbmx5IGJlIGFkZGVkIHRvIHRoZSAke3NjaGVtYUxpbmsoJ1RyYW5zZm9ybWF0aW9uI2lucHV0cycsICdpbnB1dHMgb2YgYSBUcmFuc2Zvcm1hdGlvbicpfS5gXG4gICAgICA6ICdTaG91bGQgbm90IGJlIHVzZWQgaW4gdGhpcyBjYXNlLicsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl5cXFxcZHsxM30kXCInOiAoKSA9PiBgc2hvdWxkIGJlIGNvbXBvc2VkIG9mIDEzIG51bWJlcnNgLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeWzAtOV17NH0oLVswLTldezJ9KT8oLVswLTldezJ9KT8kXCInOiAoKSA9PiBkYXRlRm9ybWF0TWVzc2FnZSxcbiAgJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiXihbMC05XXs0fXwtKSgtWzAtOV17Mn0pPygtWzAtOV17Mn0pPyRcIic6ICgpID0+IGRhdGVGb3JtYXRNZXNzYWdlLFxuICAnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCJeKFswLTldezR9fC0pKC1bMC05XXsyfSk/KC1bMC05XXsyfSk/KFtUXVswLTJdWzAtOV06WzAtNV1bMC05XTpbMC01XVswLTldKCgrfC0pWzAtMV1bMC05XTpbMC01XVswLTldKT8pPyRcIic6XG4gICAgKCkgPT4gZGF0ZUZvcm1hdE1lc3NhZ2UsXG4gICdzaG91bGQgbWF0Y2ggcGF0dGVybiBcIl4xMC4oZCkrLyhTKSskXCInOiAoKSA9PlxuICAgIGBUaGUgRE9JIHNob3VsZCBub3QgaW5jbHVkZSB0aGUgZG9tYWluIG5hbWUsIGUuZy4gJHtjb2RlKCcxMC4xMDAwLzE4MicpfSBpbnN0ZWFkIG9mICR7Y29kZShcbiAgICAgICdodHRwczovL2RvaS5vcmcvMTAuMTAwMC8xODInXG4gICAgKX1gLFxuICAnc2hvdWxkIGJlIGxpbmtlZCB0byBhbiBleGlzdGluZyBub2RlJzogKGVycm9yLCBfZXJyb3JDb3VudCwgYWxsRXJyb3JzKSA9PlxuICAgIGFsbEVycm9ycz8ubGVuZ3RoXG4gICAgICA/IGBZb3VyIHVwbG9hZCBkb2VzIG5vdCBjb250YWluIHRoZSBmb2xsb3dpbmcgTm9kZXM6XG4gICAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICAgICR7dW5pcXVlKFxuICAgICAgICBhbGxFcnJvcnMubWFwKCh7IHBhcmFtcyB9KSA9PiBgPGxpPiR7cGFyYW1zPy5ub2RlPy50eXBlfSB3aXRoICR7Y29kZShgaWQ9JHtwYXJhbXM/Lm5vZGU/LmlkfWApfTwvbGk+YClcbiAgICAgICkuam9pbignXFxuJyl9XG4gICAgICA8L3VsPlxuICAgICAgSWYgeW91IGFyZSB0cnlpbmcgdG8gbGluayB0byBhbiBleGlzdGluZyBOb2RlIG9uIHRoZSBIZXN0aWEgcGxhdGZvcm0sIHlvdSBtdXN0IHVzZSAke2NvZGUoJ0BpZCcpfSBmaWVsZCBpbnN0ZWFkLlxuICAgICAgT3RoZXJ3aXNlIHlvdSBtdXN0IGluY2x1ZGUgYSBmdWxsICR7dW5pcXVlKFxuICAgICAgICBhbGxFcnJvcnMubWFwKCh7IHBhcmFtcyB9KSA9PiBgJHtwYXJhbXM/Lm5vZGU/LnR5cGV9IHdpdGggaWQgJHtjb2RlKHBhcmFtcz8ubm9kZT8uaWQpfS5gKVxuICAgICAgKS5qb2luKCcsICcpfWBcbiAgICAgIDogYFlvdXIgdXBsb2FkIGRvZXMgbm90IGNvbnRhaW4gYSAke2Vycm9yLnBhcmFtcz8ubm9kZT8udHlwZX0gd2l0aCAke2NvZGUoYGlkPSR7ZXJyb3IucGFyYW1zPy5ub2RlPy5pZH1gKX0uXG4gICAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBsaW5rIHRvIGFuIGV4aXN0aW5nIE5vZGUgb24gdGhlIEhlc3RpYSBwbGF0Zm9ybSwgeW91IG11c3QgdXNlICR7Y29kZSgnQGlkJyl9IGZpZWxkIGluc3RlYWQuXG4gICAgICBPdGhlcndpc2UgeW91IG11c3QgaW5jbHVkZSBhIGZ1bGwgJHtlcnJvci5wYXJhbXM/Lm5vZGU/LnR5cGV9IHdpdGggaWQgJHtjb2RlKGVycm9yLnBhcmFtcz8ubm9kZT8uaWQpfS5gLFxuICAnbXVzdCBiZSB3aXRoaW4gdGhlIGNvdW50cnknOiAoKSA9PiBgVGhlIGNvdW50cnkgcHJvdmlkZWQgZG9lcyBub3QgY29udGFpbiB0aGUgcmVnaW9uIHByb3ZpZGVkLiBQbGVhc2UgY2hlY2tcbiAgdGhlIGNvdW50cnkgZm9yIGVycm9ycyBvciB0aGUgcmVnaW9uIGZvciBlcnJvcnMsIGFuZCByZWZlcmVuY2UgdGhlICR7Z2xvc3NhcnlMaW5rKCdHbG9zc2FyeSBvZiBUZXJtcycpfS5gLFxuICBbbWFwRXJyb3JNZXNzYWdlXTogKHsgZGF0YVBhdGgsIHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgID8gYFRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIHByb3ZpZGVkIGFyZSR7XG4gICAgICAgICAgcGFyYW1zPy5kaXN0YW5jZSA/IGAgJHtwYXJhbXM/LmRpc3RhbmNlfWttc2AgOiAnJ1xuICAgICAgICB9IG91dHNpZGUgb2YgdGhlICR7ZGF0YVBhdGguc3Vic3RyaW5nKDEpfSBwcm92aWRlZC5cbiAgICAgIFBsZWFzZSBjaGVjayB0aGUgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBmb3IgZXJyb3JzIG9yIGNoZWNrIGlmIHRoZSB3cm9uZyAke2RhdGFQYXRoLnN1YnN0cmluZyhcbiAgICAgICAgMVxuICAgICAgKX0gZnJvbSB0aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5yZWdpb24sICdHbG9zc2FyeScpfSB3YXMgdXNlZC5cbiAgICAgICR7XG4gICAgICAgIHBhcmFtcz8uZXhwZWN0ZWRcbiAgICAgICAgICA/IGBIaW50OiB0aGUgY29vcmRpbmF0ZXMgYXBwZWFyIHRvIGJlIGxvY2F0ZWQgaW4gdGhlIGZvbGxvd2luZyAke2RhdGFQYXRoLnN1YnN0cmluZygxKX06ICR7dGVybUxpbmsoe1xuICAgICAgICAgICAgICBpZDogJ3BhcmFtcy5leHBlY3RlZCdcbiAgICAgICAgICAgIH0pfWBcbiAgICAgICAgICA6ICcnXG4gICAgICB9YFxuICAgICAgOiBgVGhlIHJlZ2lvbiBwcm92aWRlZCBkb2VzIG5vdCBjb250YWluIHRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIHByb3ZpZGVkLlxuICAgICAgUGxlYXNlIGNoZWNrIHRoZSBsb25naXR1ZGUgYW5kIGxhdGl0dWRlIGZvciBlcnJvcnMgb3IgdGhlIHJlZ2lvbiBmb3IgZXJyb3IsIGFuZCByZWZlcmVuY2UgdGhlICR7Z2xvc3NhcnlUeXBlTGluayhcbiAgICAgICAgVGVybVRlcm1UeXBlLnJlZ2lvbixcbiAgICAgICAgJ0dsb3NzYXJ5IG9mIFRlcm1zJ1xuICAgICAgKX0uYCxcbiAgJ3N1bSBub3QgZXF1YWwgdG8gMTAwJSBmb3Igc2FuZENvbnRlbnQsIHNpbHRDb250ZW50LCBjbGF5Q29udGVudCc6ICgpID0+XG4gICAgYFRoZSBzdW0gb2YgU2FuZCwgU2lsdCwgYW5kIENsYXkgY29udGVudCBzaG91bGQgZXF1YWwgMTAwJSBmb3IgZWFjaCBzb2lsIGRlcHRoIGludGVydmFsLmAsXG4gICdpcyBvdXRzaWRlIHRoZSBhbGxvd2VkIHJhbmdlJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gcGFyYW1zPy50ZXJtXG4gICAgICAgICAgPyBgVGhlIHZhbHVlIGZvciAke2NvZGUoXG4gICAgICAgICAgICAgIHBhcmFtcz8udGVybVsnQGlkJ10gfHwgcGFyYW1zPy50ZXJtLm5hbWVcbiAgICAgICAgICAgICl9IGlzIG91dHNpZGUgdGhlIHJhbmdlIGVzdGFibGlzaGVkIGZvciB0aGUgc29pbCB0ZXh0dXJlIHlvdSBwcm92aWRlZC5cbiAgICAgICAgICAgIEZvciB0aGlzIHNvaWwgdGV4dHVyZSwgdGhlIG1heGltdW0gJHtjb2RlKHBhcmFtcz8udGVybVsnQGlkJ10gfHwgcGFyYW1zPy50ZXJtLm5hbWUpfSBpcyAke3BhcmFtcz8ucmFuZ2VcbiAgICAgICAgICAgICAgPy5tYXh9IGFuZCB0aGUgbWluaW11bSBpcyAke3BhcmFtcz8ucmFuZ2U/Lm1pbn0uYFxuICAgICAgICAgIDogYERvZXMgbm90IG1hdGNoIHRoZSBwb3NzaWJsZSByYW5nZXMgb2Ygc2FuZCwgc2lsdCBhbmQgY2xheSBjb250ZW50LmBcbiAgICAgICAgOiBgRWFjaCBzb2lsIHRleHR1cmUgaGFzIGEgbWF4aW11bSBhbmQgbWluaW11bSB2YWx1ZSBmb3Igc2FuZCwgc2lsdCwgYW5kIGNsYXkgY29udGVudC5cbiAgICAgICAgQXQgbGVhc3Qgb25lIG1lYXN1cmVtZW50IG9mIHNhbmQsIHNpbHQsIG9yIGNsYXkgY29udGVudCBkb2VzIG5vdCBtYXRjaCB0aGUgcG9zc2libGUgcmFuZ2UgZm9yIHRoZSBzcGVjaWZpZWQgc29pbCB0ZXh0dXJlLmBcbiAgICB9XG4gICAgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgUGxlYXNlIGNoZWNrIHRoZSBtZWFzdXJlbWVudCwgaXRzIGRlcHRoIGludGVydmFscywgYW5kIHRoZSBkYXRlcyBvZiB0aGUgbWVhc3VyZW1lbnQgb3IgdXBkYXRlIHRoZSBzb2lsIHRleHR1cmUgaWYgbmVlZGVkLmBcbiAgICAgICAgOiBgUGxlYXNlIGNoZWNrIHlvdXIgbWVhc3VyZW1lbnRzLCB0aGVpciBkZXB0aCBpbnRlcnZhbHMsIGFuZCB0aGUgZGF0ZXMgb2YgdGhlIG1lYXN1cmVtZW50cyBvciB1cGRhdGUgdGhlIHNvaWwgdGV4dHVyZXMgaWYgbmVlZGVkLmBcbiAgICB9YCxcbiAgJ3Nob3VsZCBiZSBlcXVhbCB0byBvbmUgb2YgdGhlIGFsbG93ZWQgdmFsdWVzJzogKHsgcGFyYW1zLCBkYXRhUGF0aCB9KSA9PiB7XG4gICAgY29uc3QgcGF0aHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKTtcbiAgICBjb25zdCB2YWx1ZXMgPVxuICAgICAgcGF0aHMubGVuZ3RoID49IDIgPyBwbHVyYWxpemUocGF0aHNbcGF0aHMubGVuZ3RoIC0gMV0ucGF0aCwgcGFyYW1zPy5hbGxvd2VkVmFsdWVzPy5sZW5ndGggfHwgMCkgOiAndmFsdWVzJztcbiAgICByZXR1cm4gYE9ubHkgdGhlICR7cGF0aHMubGVuZ3RoID09PSAzID8gYCR7cGF0aHNbMV0ubGFiZWx9IHdpdGggdGhlIGAgOiAnJ31mb2xsb3dpbmcgJHt2YWx1ZXN9IGFyZSBwZXJtaXR0ZWQgZm9yICR7XG4gICAgICBwYXRoc1swXS5sYWJlbFxuICAgIH06ICR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfS5cbiAgICAgIFBsZWFzZSBlaXRoZXIgY2hhbmdlIHRoZSAke1xuICAgICAgICBwYXRocy5sZW5ndGggPj0gMiA/IHBhdGhzWzFdLmxhYmVsIDogcGF0aHNbMF0ubGFiZWxcbiAgICAgIH0geW91IGFyZSB1c2luZyBhbmQgZW5zdXJlIGl0IGhhcyBvbmUgb2YgdGhlICR7dmFsdWVzfSBsaXN0ZWQgYWJvdmUsXG4gICAgICBvciBmb2xsb3cgdGhlIHNjaGVtYSB0byBpZGVudGlmeSB3aGVyZSB0aGlzICR7cGF0aHMubGVuZ3RoID49IDIgPyBwYXRoc1sxXS5sYWJlbCA6IHBhdGhzWzBdLmxhYmVsfSBjYW4gYmUgYWRkZWQuYDtcbiAgfSxcbiAgJ3Nob3VsZCBiZSBlcXVhbCB0byBjb25zdGFudCc6ICh7IHBhcmFtcyB9KSA9PiBgTXVzdCBiZTogJHtjb2RlKHBhcmFtcz8uYWxsb3dlZFZhbHVlKX1gLFxuICAnaXMgbm90IGFsbG93ZWQgZm9yIHRoaXMgY2hhcmFjdGVyaXNlZEluZGljYXRvcic6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGAke1xuICAgICAgICAgICAgcGFyYW1zPy5hbGxvd2VkVmFsdWVzLmxlbmd0aFxuICAgICAgICAgICAgICA/IGBjYW4gb25seSBiZSB1c2VkIHdpdGggb25lIG9mIHRoZXNlIG1ldGhvZHM6ICR7cGFyYW1zPy5hbGxvd2VkVmFsdWVzLm1hcChjb2RlKS5qb2luKCcsICcpfWBcbiAgICAgICAgICAgICAgOiBgZG9lcyBub3QgY3VycmVudGx5IGhhdmUgYW55IG1ldGhvZCBhbGxvd2VkLiBQbGVhc2UgJHtjb250YWN0VXNMaW5rKCl9IHRvIGNoYW5nZSB0aGlzLmBcbiAgICAgICAgICB9LmBcbiAgICAgICAgOiBgU29tZSBUZXJtcyBhcmUgbm90IGFsbG93ZWQgd2l0aCB0aGUgbWV0aG9kIHlvdSBzZWxlY3RlZC5gXG4gICAgfVxuICAgIFlvdSBjYW4gZmluZCB0aGUgbGlzdCBvZiBhbGxvd2VkIG1ldGhvZHMgZm9yIGVhY2ggVGVybSBieSBjbGlja2luZyBvbiB0aGVtLmAsXG4gICdzaG91bGQgY29udGFpbiBhIHZhbGlkIGl0ZW0nOiAoeyBkYXRhUGF0aCB9KSA9PiB7XG4gICAgY29uc3QgcGF0aHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoISk7XG4gICAgcmV0dXJuIHBhdGhzLmxlbmd0aCA+PSAyXG4gICAgICA/IGBUaGUgJHtwYXRoc1twYXRocy5sZW5ndGggLSAxXS5wYXRofSByZWxhdGVkIHRvIHRoaXMgJHtwbHVyYWxpemUocGF0aHNbcGF0aHMubGVuZ3RoIC0gMl0ubGFiZWwsIDEpfSBhcmUgaW52YWxpZGBcbiAgICAgIDogYFRoZSAke3BhdGhzWzBdLnBhdGh9IGFyZSBpbnZhbGlkYDtcbiAgfSxcbiAgJ21heSBiZSBiZXR3ZWVuIDAgYW5kIDEwMCc6ICgpID0+ICdQZXJjZW50YWdlcyBzaG91bGQgYmUgYmV0d2VlbiAwIGFuZCAxMDAsIG5vdCAwIGFuZCAxLiBUaGlzIG1heSBiZSBhbiBlcnJvci4nLFxuICAnbWF5IG5vdCBhbGwgYmUgc2V0IHRvIGZhbHNlJzogKCkgPT5cbiAgICBgRXZlcnkgdmFsdWUgaW4gdGhlIGRhdGEgY29tcGxldGVuZXNzIGFzc2Vzc21lbnQgaXMgJHtjb2RlKGZhbHNlKX0uIFlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gZmlsbCBpdCBpbi5cbiAgRm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBmaWxsIGl0IGluLCBwbGVhc2Ugc2VlIHRoZSAke3NjaGVtYUxpbmsoJ0N5Y2xlI2NvbXBsZXRlbmVzcycsICdzY2hlbWEnKX0uYCxcbiAgJ21heSBub3QgYmUgZW1wdHknOiAoKSA9PiAnaWYgdGhpcyB2YWx1ZSBzaWduaWZpZXMgbm8gZGF0YSwgSGVzdGlhIG9ubHkgYWNjZXB0cyBcIi1cIiBvciBlbXB0eSBmb3Igbm8gZGF0YScsXG4gICdtYXkgbm90IGJlIDAnOiAoeyBkYXRhUGF0aCB9LCBlcnJvckNvdW50KSA9PiB7XG4gICAgY29uc3QgcGF0aHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoISk7XG4gICAgcmV0dXJuIGBBZGRpbmcgYSB2YWx1ZSAke2Vycm9yQ291bnQgPT09IDEgPyBgIHRvIGV2ZXJ5ICR7cGF0aHNbMF0ubGFiZWx9IGAgOiAnICd9IGlzIGhpZ2hseSByZWNvbW1lbmRlZC5cbiAgICAgIElmIHRoZSBhbW91bnQgcHJvZHVjZWQgaXMgemVybywgd2UgcmVjb21tZW5kIHNldHRpbmcgdmFsdWUgdG8gMC5gO1xuICB9LFxuICAnbG9uZ0ZhbGxvd1BlcmlvZCBtdXN0IGJlIGxvd2VyIHRoYW4gNSB5ZWFycyc6ICgpID0+XG4gICAgYFlvdXIgbG9uZ0ZhbGxvd1BlcmlvZCBpcyBncmVhdGVyIHRoYW4gZml2ZSB5ZWFycy5cbiAgICBGYWxsb3cgaXMgZGVmaW5lZCBieSBGQU9TVEFUIGFzIGxhbmQgbGVmdCB1bmN1bHRpdmF0ZWQgZm9yIGJldHdlZW4gMSBhbmQgNSB5ZWFycyxcbiAgICBhbmQgdGhpcyBkZWZpbml0aW9uIGlzIHVzZWQgZm9yIEhlc3RpYSBhbHNvLmAsXG4gICdzaG91bGQgYmUgd2l0aGluIHBlcmNlbnRhZ2Ugb2YgZGVmYXVsdCB2YWx1ZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgID8gYFRoaXMgdmFsdWUgaXMgwrEke3RocmVzaG9sZChwYXJhbXM/LnRocmVzaG9sZCl9IGRpZmZlcmVudCB0byBvdXIgZGVmYXVsdCB2YWx1ZSB3aGljaCBpcyAke3BhcmFtcz8uZGVmYXVsdH0uXG4gICAgICBQbGVhc2UgY2hlY2sgeW91ciB1cGxvYWRlZCBkYXRhIGFzIHRoaXMgbWF5IGJlIGFuIGVycm9yLmBcbiAgICAgIDogYFRoaXMgdmFsdWUgaXMgc3Vic3RhbnRpYWxseSBkaWZmZXJlbnQgdGhhbiBvdXIgZGVmYXVsdCB2YWx1ZS5cbiAgICAgIFBsZWFzZSBjaGVjayB5b3VyIHVwbG9hZGVkIGRhdGEgYXMgdGhpcyBtYXkgYmUgYW4gZXJyb3IuYCxcbiAgJ3RoZSB2YWx1ZSBwcm92aWRlZCBpcyBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBtb2RlbCByZXN1bHQnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgVGhlIGV4cGVjdGVkIHJlc3VsdCAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBmb3IgJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX0gJHtcbiAgICAgICAgICAgIHBhcmFtcz8ubW9kZWw/Lm5hbWUgPyBgdXNpbmcgJHttb2RlbExpbmsocGFyYW1zPy50ZXJtLCBwYXJhbXM/Lm1vZGVsKX0gYCA6ICcnXG4gICAgICAgICAgfWBcbiAgICAgICAgOiAnJ1xuICAgIH1cbiAgICBmcm9tIHRoZSBkYXRhIHByb3ZpZGVkIGluIHRoZSB1cGxvYWQgaXMgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgJHtjb2RlKHRvUHJlY2lzaW9uKHBhcmFtcz8uZXhwZWN0ZWQsIDMpKX0sIGJ1dCB0aGUgdmFsdWUgaW4gdGhlIHVwbG9hZCBpcyAke2NvZGUoXG4gICAgICAgICAgICB0b1ByZWNpc2lvbihwYXJhbXM/LmN1cnJlbnQsIDMpXG4gICAgICAgICAgKX0uXG4gICAgICAgICR7cGFyYW1zPy50aHJlc2hvbGQgPyBgT3VyIHRocmVzaG9sZCBpcyDCsSR7dGhyZXNob2xkKHBhcmFtcz8udGhyZXNob2xkKX0uYCA6ICcnfVxuICAgICAgICBQbGVhc2UgZWl0aGVyOlxuICAgICAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGVjaW1hbFwiPlxuICAgICAgICA8bGk+Q2hlY2sgdGhlICR7cGFyYW1zPy50ZXJtLnRlcm1UeXBlfSB2YWx1ZSB5b3UgcHJvdmlkZWQ7PC9saT5cbiAgICAgICAgPGxpPkNoZWNrIHRoZSBkYXRhIHlvdSBwcm92aWRlZCB3aGljaCBpcyB0aGUgaW5wdXQgaW50byB0aGlzIG1vZGVsOzwvbGk+XG4gICAgICAgIDxsaT5DYXJlZnVsbHkgcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiB0byB1bmRlcnN0YW5kIGlmIHdlIHVzZWQgYSBkZWZhdWx0IHByb3BlcnR5IGFzIHBhcnQgb2YgdGhlIGNhbGN1bGF0aW9ucy48L2xpPlxuICAgICAgICA8L3VsPmBcbiAgICAgICAgOiAnbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgbW9kZWwgcmVzdWx0LidcbiAgICB9YCxcbiAgJ3RoZSBtZWFzdXJlbWVudCBwcm92aWRlZCBtaWdodCBiZSBpbiBlcnJvcic6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBUaGUgZXhwZWN0ZWQgdmFsdWUgZm9yICR7Y29kZShwYXJhbXM/LnRlcm0ubmFtZSl9XG4gICAgJHtwYXJhbXM/Lm1vZGVsPy5uYW1lID8gYHVzaW5nICR7bW9kZWxMaW5rKHBhcmFtcz8udGVybSwgcGFyYW1zPy5tb2RlbCl9IGAgOiAnJ31cbiAgICBmcm9tIHRoZSBkYXRhIHByb3ZpZGVkIGluIHRoZSB1cGxvYWQgaXMgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDFcbiAgICAgICAgPyBgJHtjb2RlKHRvUHJlY2lzaW9uKHBhcmFtcz8uZXhwZWN0ZWQsIDMpKX0sIGJ1dCB0aGUgdmFsdWUgaW4gdGhlIHVwbG9hZCBpcyAke2NvZGUoXG4gICAgICAgICAgICB0b1ByZWNpc2lvbihwYXJhbXM/LmN1cnJlbnQsIDMpXG4gICAgICAgICAgKX0uXG4gICAgICAgICR7cGFyYW1zPy50aHJlc2hvbGQgPyBgT3VyIHRocmVzaG9sZCBpcyDCsSR7dGhyZXNob2xkKHBhcmFtcz8udGhyZXNob2xkKX0uYCA6ICcnfWBcbiAgICAgICAgOiBgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgbW9kZWwgcmVzdWx0LmBcbiAgICB9YCxcbiAgJ211c3QgYmUgZXF1YWwgdG8gcHJldmlvdXMgcHJvZHVjdCBtdWx0aXBsaWVkIGJ5IHRoZSBzaGFyZSc6ICgpID0+XG4gICAgYFByb2R1Y3RzIGZyb20gYSB0cmFuc2Zvcm1hdGlvbiB3aGljaCBhcmUgYW4gSW5wdXQgaW4gdG8gdGhlIG5leHQgdHJhbnNmb3JtYXRpb24gbXVzdCBmb2xsb3cgdGhlIGZvbGxvd2luZyBydWxlOlxuICAgICR7Y29kZSgncHJldmlvdXMucHJvZHVjdC52YWx1ZSAqIGN1cnJlbnQudHJhbnNmb3JtZWRTaGFyZSAvIDEwMCA9PSBjdXJyZW50LmlucHV0LnZhbHVlJyl9YCxcbiAgJ2F0IGxlYXN0IG9uZSBJbnB1dCBtdXN0IGJlIGEgUHJvZHVjdCBvZiB0aGUgQ3ljbGUnOiAoKSA9PlxuICAgIGBBIFRyYW5zZm9ybWF0aW9uIGNvbnZlcnRzIGEgUHJvZHVjdCBmcm9tIGEgQ3ljbGUgaW50byBhbm90aGVyIFByb2R1Y3QuXG4gICAgVGhlcmVmb3JlLCBhdCBsZWFzdCBvbmUgSW5wdXQgaW50byB0aGUgVHJhbnNmb3JtYXRpb24gbXVzdCBiZSBhIFByb2R1Y3Qgb2YgdGhlIEN5Y2xlLmAsXG4gICdtdXN0IGhhdmUgb25seSBvbmUgZW50cnkgd2l0aCB0aGUgc2FtZSB0ZXJtLnRlcm1UeXBlID0gZXhjcmV0YU1hbmFnZW1lbnQnOiAoKSA9PlxuICAgIGBUaGVyZSBjYW4gb25seSBiZSBvbmUgUHJhY3RpY2Ugb2YgdHlwZSBleGNyZXRhTWFuYWdlbWVudCBpbiBhIEN5Y2xlLlxuICAgIFRvIHJlcHJlc2VudCBtdWx0aXBsZSBleGNyZXRhIG1hbmFnZW1lbnQgc3lzdGVtcyBlaXRoZXIgdXNlIG11bHRpcGxlIEN5Y2xlcyBhbmQgbGluayB0aGVtIHRvZ2V0aGVyLFxuICAgIG9yIHVzZSBUcmFuc2Zvcm1hdGlvbnMgd2l0aGluIGEgQ3ljbGUgYW5kIGxpbmsgdGhvc2UgdG9nZXRoZXIuYCxcbiAgJ211c3QgYmUgaW5jbHVkZWQgYXMgYW4gSW5wdXQnOiAoeyBwYXJhbXMgfSwgZXJyb3JDb3VudCkgPT5cbiAgICBgVGhlIGV4Y3JldGEgUHJvZHVjdHMgYXJlIG5vdCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSBleGNyZXRhIElucHV0cy5cbiAgICAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMVxuICAgICAgICA/IGBFLmcuLCB5b3UgY2Fubm90IGdldCAke2NvZGUocGFyYW1zPy50ZXJtPy5uYW1lKX0gZnJvbSAkeyhwYXJhbXM/LmV4cGVjdGVkIHx8IFtdKVxuICAgICAgICAgICAgLm1hcCh2ID0+IGNvZGUoa2V5VG9MYWJlbCh2KSkpXG4gICAgICAgICAgICAuam9pbignIG9yICcpfS5gXG4gICAgICAgIDogJydcbiAgICB9XG4gICAgUGxlYXNlIGNoZWNrIHRoZSBJbnB1dHMgYW5kIFByb2R1Y3RzIG9mIHRoZSBUcmFuc2Zvcm1hdGlvbi5gLFxuICAnbXVzdCBhZGQgdGhlIGxpbmtlZCBpbnB1dHMgdG8gdGhlIGN5Y2xlJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYFlvdSBoYXZlIHN0YXRlZCB0aGF0ICR7Y29kZShwYXJhbXM/LnRlcm0/Lm5hbWUpfSB3YXMgY3JlYXRlZCBieSB0aGUgZm9sbG93aW5nIElucHV0cyAke3BhcmFtcz8uZXhwZWN0ZWRcbiAgICAgICAgICAgID8ubWFwKGUgPT4gY29kZShlLm5hbWUpKVxuICAgICAgICAgICAgLmpvaW4oJyAsICcpfWBcbiAgICAgICAgOiAnWW91IGhhdmUgc3RhdGVkIHNvbWUgRW1pc3Npb25zIHdlcmUgY3JlYXRlZCBieSBzb21lIElucHV0cydcbiAgICB9LlxuICAgIEhvd2V2ZXIsIHRoZXNlIElucHV0cyBkbyBub3QgZXhpc3QgaW4gdGhlIEN5Y2xlLlxuICAgIFBsZWFzZSBhZGQgdGhlc2UgSW5wdXRzLCBldmVuIGlmIHlvdSBkbyBub3QgaGF2ZSBhIHZhbHVlIGZvciB0aGVtLmAsXG4gICdtdXN0IGFkZCB0aGUgbGlua2VkIHRyYW5zZm9ybWF0aW9ucyB0byB0aGUgY3ljbGUnOiAoeyBsZXZlbCwgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYFlvdSBoYXZlIHNwZWNpZmllZCB0aGF0JHtjb2RlKFxuICAgICAgICAgICAgcGFyYW1zPy50ZXJtPy5uYW1lXG4gICAgICAgICAgKX0gd2FzIGNyZWF0ZWQgZHVyaW5nIGEgVHJhbnNmb3JtYXRpb24gd2l0aCB0aGUgVGVybSBuYW1lICR7Y29kZShwYXJhbXM/LmV4cGVjdGVkPy5uYW1lKX1gXG4gICAgICAgIDogJ1lvdSBoYXZlIHN0YXRlZCBzb21lIEVtaXNzaW9ucyB3ZXJlIGNyZWF0ZWQgYnkgc29tZSBUcmFuc2Zvcm1hdGlvbnMnXG4gICAgfS5cbiAgICBIb3dldmVyLCB3ZSBjYW5ub3QgZmluZCBhIFRyYW5zZm9ybWF0aW9uIHdpdGhpbiB0aGUgQ3ljbGUgd2l0aCB0aGlzIFRlcm0gbmFtZS5cbiAgICAke1xuICAgICAgbGV2ZWwgPT09ICdlcnJvcidcbiAgICAgICAgPyAnUGxlYXNlIGNoZWNrIHRoZSBUZXJtcyB1c2VkIGluIHRoZSBFbWlzc2lvbnMgYW5kL29yIHRoZSBUcmFuc2Zvcm1hdGlvbnMuJ1xuICAgICAgICA6ICdZb3UgbWF5IHdhbnQgdG8gYWRkIHRoaXMgVHJhbnNmb3JtYXRpb24uJ1xuICAgIH1gLFxuICAnZXZlcnkgbm9kZSBzaG91bGQgYmUgdW5pcXVlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoaXMgTm9kZSBpcyBkdXBsaWNhdGVkLiBFdmVyeSBOb2RlIHNob3VsZCBiZSB1bmlxdWUuXG4gICAgVW5pcXVlbmVzcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBmb2xsb3dpbmcgZmllbGRzOiAkeyhwYXJhbXM/LmtleXMgfHwgW10pLm1hcChjb2RlKS5qb2luKCcsICcpfWAsXG4gICdldmVyeSBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBiZSB1bmlxdWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBibGFuayBub2RlIGlzIGR1cGxpY2F0ZWQke1xuICAgICAgcGFyYW1zPy5kdXBsaWNhdGVkSW5kZXhlcz8ubGVuZ3RoXG4gICAgICAgID8gYCB3aXRoIHRoZSBibGFuayAke3BsdXJhbGl6ZShcbiAgICAgICAgICAgICdub2RlJyxcbiAgICAgICAgICAgIHBhcmFtcy5kdXBsaWNhdGVkSW5kZXhlcy5sZW5ndGhcbiAgICAgICAgICApfSB3aXRoIG51bWJlcmVkOiAke3BhcmFtcy5kdXBsaWNhdGVkSW5kZXhlcy5qb2luKCcsICcpfWBcbiAgICAgICAgOiAnJ1xuICAgIH0uIEV2ZXJ5IGJsYW5rIG5vZGUgc2hvdWxkIGJlIHVuaXF1ZS5cbiAgICBVbmlxdWVuZXNzIGlzIGRldGVybWluZWQgYnkgdGhlIGZvbGxvd2luZyBmaWVsZHM6ICR7KHBhcmFtcz8ua2V5cyB8fCBbXSkubWFwKGNvZGUpLmpvaW4oJywgJyl9YCxcbiAgJ211c3QgY29udGFpbiBhcyBtYW55IGl0ZW1zIGFzIHZhbHVlcyc6ICh7IHBhcmFtcywgZGF0YVBhdGggfSkgPT5cbiAgICBgVGhlIG51bWJlciBvZiAke2NvZGUoZGF0YVBhdGguc3BsaXQoJy4nKS5wb3AoKSl9IG11c3QgbWF0Y2ggdGhlIG51bWJlciBvZiAke2NvZGUoJ3ZhbHVlJyl9LlxuICAgIEN1cnJlbnRseSB0aGVyZSBhcmUgJHtwYXJhbXM/LmN1cnJlbnR9ICR7Y29kZShkYXRhUGF0aC5zcGxpdCgnLicpLnBvcCgpKX0gYnV0ICR7cGFyYW1zPy5leHBlY3RlZH0gJHtjb2RlKFxuICAgICAgJ3ZhbHVlJ1xuICAgICl9LmAsXG4gICdpcyB0b28gZ2VuZXJpYyc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBZb3UgaGF2ZSB0aGUgZm9sbG93aW5nIFByb2R1Y3QgJHtjb2RlKHBhcmFtcz8ucHJvZHVjdD8ubmFtZSl9IGhvd2V2ZXIsXG4gICAgeW91IGhhdmUgdXNlZCBhIGdlbmVyaWMgJHtnbG9zc2FyeVR5cGVMaW5rKHBhcmFtcz8udGVybT8udGVybVR5cGUpfSB0ZXJtICR7Y29kZShwYXJhbXM/LnRlcm0/Lm5hbWUpfS5cbiAgICBVc2UgYSBtb3JlIHNwZWNpZmljIHRlcm0gZm9yIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoXG4gICAgICBwYXJhbXM/LnRlcm0/LnRlcm1UeXBlXG4gICAgKX0gd2hpY2ggcmVmbGVjdHMgdGhlIHNwZWNpZmljICR7Z2xvc3NhcnlUeXBlTGluayhwYXJhbXM/LnByb2R1Y3Q/LnRlcm1UeXBlKX0uYCxcbiAgJ3Nob3VsZCBub3QgdXNlIGlkZW50aWNhbCB0ZXJtcyB3aXRoIGRpZmZlcmVudCB1bml0cyc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBZb3UgaGF2ZSBhZGRlZCB0aGUgc2FtZSAke2NvZGUocGFyYW1zPy50ZXJtPy50ZXJtVHlwZSl9IGluICR7cGFyYW1zPy51bml0c1xuICAgICAgPy5tYXAodW5pdCA9PiBjb2RlKHVuaXQpKVxuICAgICAgLmpvaW4oJyBhbmQgJyl9IHVuaXRzLlxuICAgIElmIHRoZXNlIHRlcm1zIHJlZmVyIHRvIHRoZSBzYW1lICR7Y29kZShwYXJhbXM/LnRlcm0/LnRlcm1UeXBlKX0sIHRoaXMgd2lsbCBsZWFkIHRvIGRvdWJsZSBjb3VudGluZy4ke1xuICAgICAgcGFyYW1zPy51bml0cz8uaW5jbHVkZXMoJ2tnIE4nKVxuICAgICAgICA/IGAgSW5zdGVhZCB1c2UgdGhlICR7dGVybUxpbmsoeyBpZDogJ25pdHJvZ2VuQ29udGVudCcsIG5hbWU6ICdOaXRyb2dlbiBDb250ZW50JyB9KX0gUHJvcGVydHkgb24gdGhlICR7Y29kZShcbiAgICAgICAgICAgICdrZydcbiAgICAgICAgICApfSB0ZXJtIHRvIGRlZmluZSB0aGUgbml0cm9nZW4gY29udGVudCBvZiB0aGUgJHtjb2RlKHBhcmFtcz8udGVybT8udGVybVR5cGUpfS5gXG4gICAgICAgIDogJydcbiAgICB9YCxcbiAgJ2lzIG1pc3NpbmcgcmVxdWlyZWQgYmlibGlvZ3JhcGhpYyBpbmZvcm1hdGlvbic6ICgpID0+XG4gICAgYFRoZSBhdXRvbWF0aWMgYmlibGlvZ3JhcGh5IHNlYXJjaCBmYWlsZWQgZm9yIHRoaXMgQmlibGlvZ3JhcGh5LiBFaXRoZXI6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRlY2ltYWxcIj5cbiAgICA8bGk+TWFudWFsbHkgZmlsbC1pbiB0aGUgPGI+cmVxdWlyZWQ8L2I+IGJpYmxpb2dyYXBoaWMgaW5mb3JtYXRpb24gYXMgcGVyICR7c2NoZW1hTGluayhcbiAgICAgIFNjaGVtYVR5cGUuQmlibGlvZ3JhcGh5LFxuICAgICAgJ291ciBzY2hlbWEnXG4gICAgKX0uPC9saT5cbiAgICA8bGk+UHJvdmlkZSB0aGUgJHtjb2RlKCdkb2N1bWVudERPSScpfSBhcyB3ZWxsIGFzIHRoZSAke2NvZGUoJ3RpdGxlJyl9LjwvbGk+XG4gICAgPGxpPkNoZWNrIHRoZSAke2NvZGUoJ2RvY3VtZW50RE9JJyl9IGFuZCAke2NvZGUoJ3RpdGxlJyl9IGZvciB0eXBvcyBhZ2FpbnN0IHRoZSAke2V4dGVybmFsTGluayhcbiAgICAgICdodHRwczovL3d3dy5tZW5kZWxleS5jb20nLFxuICAgICAgJ01lbmRlbGV5IGNhdGFsb2d1ZSdcbiAgICApfS48L2xpPlxuICAgIDwvdWw+YCxcbiAgJ3Nob3VsZCBiZSBsb3dlciB0aGFuIG1heCBzaXplJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYFRoZSBib3VuZGFyeSBvciByZWdpb24gaXMgPiR7cGFyYW1zPy5leHBlY3RlZH1rbTIgYW5kIGlzIHRvbyBsYXJnZSB0byByZWxpYWJseSBnYXAgZmlsbCBNZWFzdXJlbWVudHMuXG4gICAgSWYgeW91IGFyZSBhYmxlIHRvIHVzZSBhIG1vcmUgc3BlY2lmaWMgcmVnaW9uIG9yIHNtYWxsZXIgYm91bmRhcnksIHBsZWFzZSBkby5gLFxuICAnYW4gZXhjcmV0YSBpbnB1dCBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIGFuIGV4Y3JldGFNYW5hZ2VtZW50IHByYWN0aWNlJzogKHsgZGF0YVBhdGggfSkgPT4ge1xuICAgIGNvbnN0IHBhdGhzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aCEpO1xuICAgIHJldHVybiBgRXhjcmV0YSBtYW5hZ2VtZW50IGlzIHRoZSBjb252ZXJzaW9uIG9mIGV4Y3JldGEgdG8gYW55IHR5cGUgb2YgcHJvZHVjdCAoZS5nLiwgYW5vdGhlciB0eXBlIG9mIGV4Y3JldGEgb3Igb3JnYW5pYyBmZXJ0aWxpc2VyKS5cbiAgICAgIFlvdSBoYXZlIGFkZGVkIGFuICR7Y29kZSgnZXhjcmV0YU1hbmFnZW1lbnQnKX0gUHJhY3RpY2UgdG8gdGhpcyAke3BhdGhzWzBdLmxhYmVsfSBidXQgdGhlcmUgaXMgbm8gZXhjcmV0YSBJbnB1dC5cbiAgICAgIFRvIHJlcHJlc2VudCBleGNyZXRhIG1hbmFnZW1lbnQsIHVzZSBhICR7cGF0aHNbMF0ubGFiZWx9IHdpdGggZXhjcmV0YSBhcyBhbiBJbnB1dCBhbmQgJHtjb2RlKFxuICAgICAgICAnZXhjcmV0YU1hbmFnZW1lbnQnXG4gICAgICApfSBhcyBhIFByYWN0aWNlLmA7XG4gIH0sXG4gICdvbmx5IDEgcHJpbWFyeSBwcm9kdWN0IGFsbG93ZWQnOiAoKSA9PiAnVGhlcmUgY2FuIG9ubHkgYmUgb25lIHByaW1hcnkgcHJvZHVjdCBpbiBlYWNoIEN5Y2xlLicsXG4gICdpcyBub3QgYWxsb3dlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG5vVGlsbGFnZSc6ICgpID0+XG4gICAgYFRoaXMgb3BlcmF0aW9uIGludm9sdmVzIHRpbGxhZ2UsIHlldCB5b3UgaGF2ZSBzcGVjaWZpZWQgdGhlIFByYWN0aWNlICR7dGVybUxpbmsobm9UaWxsYWdlKX0uXG4gICAgRWl0aGVyIGNoYW5nZSB0aGlzIG9wZXJhdGlvbiBvciB0aGUgUHJhY3RpY2UuYCxcbiAgJ3Nob3VsZCBjb250YWluIGEgdGlsbGFnZSBwcmFjdGljZSc6ICgpID0+XG4gICAgYFdlIHJlY29tbWVuZCBzcGVjaWZ5aW5nIHRoZSB0eXBlIG9mIHRpbGxhZ2UgdXNlZCBmb3IgdGhpcyBDeWNsZS5cbiAgICBQbGVhc2Ugc2VlIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnRpbGxhZ2UpfSBnbG9zc2FyeS5gLFxuICAnbXVzdCBzZXQgdmFsdWUgZm9yIGV2ZXJ5IHRpbGxhZ2UgcHJhY3RpY2UnOiAoKSA9PlxuICAgIGBFaXRoZXIgc3BlY2lmeSBhIHNpbmdsZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnRpbGxhZ2UpfSBwcmFjdGljZSBvciBhZGQgYSB2YWx1ZSB0byBhbGwgcHJhY3RpY2VzLmAsXG4gICdzdW0gbm90IGVxdWFsIHRvIDEwMCUgZm9yIHRpbGxhZ2UgcHJhY3RpY2VzJzogKCkgPT5cbiAgICBgVGhlIHN1bSBvZiAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLnRpbGxhZ2UpfSBwcmFjdGljZXMgbXVzdCBlcXVhbCAxMDAlLmAsXG4gICdjYW4gb25seSBoYXZlIDEgdGlsbGFnZSBwcmFjdGljZSB3aXRob3V0IGEgdmFsdWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgSXQgaXMgbm90IHBvc3NpYmxlIGZvciBhIEN5Y2xlIHRvIGhhdmUgdGhlIGZvbGxvd2luZyB0aWxsYWdlIFByYWN0aWNlczpcbiAgICAkeyhwYXJhbXM/LmN1cnJlbnQgPz8gW10pLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpLmpvaW4oJyBhbmQgJyl9IGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgSWYgbXVsdGlwbGUgdGlsbGFnZSBwcmFjdGljZXMgZGlkIG9jY3VyLCBwbGVhc2Ugc3BlY2lmeSB0aGUgcGVyY2VudGFnZSBvZiBhcmVhIHRoZXkgb2NjdXJyZWQgb24uYCxcbiAgJ2NhbiBub3QgYmUgbGlua2VkIHRvIHRoZSBzYW1lIEN5Y2xlJzogKCkgPT4gJ1lvdSBjYW4gbm90IGxpbmsgYW4gSW5wdXQgdG8gdGhlIEltcGFjdCBBc3Nlc3NtZW50IG9mIHRoZSBzYW1lIEN5Y2xlLicsXG4gIC8vIGRlcHJlY2F0ZWQsIHJlbW92ZSB3aGVuIG1lc3NhZ2UgaXMgbm90IGJlaW5nIHVzZWQgYW55bW9yZVxuICAnbXVzdCBiZSAwIGZvciBwcm9kdWN0IHZhbHVlIDAnOiAoeyBkYXRhUGF0aCwgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYElmIHRoZSBhbW91bnQgcHJvZHVjZWQgaXMgemVybywgdGhlICR7Y29kZShkYXRhUGF0aD8uc3BsaXQoJy4nKS5wb3AoKSl9IG9mICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gY29kZShwYXJhbXM/LnRlcm0ubmFtZSkgOiAndGhhdCBwcm9kdWN0J1xuICAgIH0gbXVzdCBhbHNvIGJlIHplcm8uYCxcbiAgJ2Vjb25vbWljVmFsdWVTaGFyZSBtdXN0IGJlIDAgZm9yIHByb2R1Y3QgdmFsdWUgMCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHRoZSBlY29ub21pY1ZhbHVlU2hhcmUgb2YgJHtcbiAgICAgIGVycm9yQ291bnQgPT09IDEgPyBjb2RlKHBhcmFtcz8udGVybS5uYW1lKSA6ICd0aGF0IHByb2R1Y3QnXG4gICAgfSBtdXN0IGFsc28gYmUgemVyby5gLFxuICAncmV2ZW51ZSBtdXN0IGJlIDAgZm9yIHByb2R1Y3QgdmFsdWUgMCc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGBJZiB0aGUgYW1vdW50IHByb2R1Y2VkIGlzIHplcm8sIHRoZSByZXZlbnVlIG9mICR7XG4gICAgICBlcnJvckNvdW50ID09PSAxID8gY29kZShwYXJhbXM/LnRlcm0ubmFtZSkgOiAndGhhdCBwcm9kdWN0J1xuICAgIH0gbXVzdCBhbHNvIGJlIHplcm8uYCxcbiAgJ3Nob3VsZCBhZGQgYSBzb3VyY2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgV2UgcmVjb21tZW5kIGFkZGluZyBhIFNvdXJjZSB0byBhbGwgZGF0YSBpdGVtcy5cbiAgICBUaGlzIGNhbiBiZSBkb25lIGJ5IGFkZGluZyB0aGUgJHtjb2RlKHBhcmFtcz8uY3VycmVudCl9IGZpZWxkLlxuICAgIFNvdXJjZXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGZvciBlYWNoIGRhdGEgaXRlbSAoaS5lLiwgZWFjaCBJbnB1dCwgRW1pc3Npb24sIFByb2R1Y3QsIFByYWN0aWNlLCBNZWFzdXJlbWVudCwgb3IgSW5mcmFzdHJ1Y3R1cmUpLmAsXG4gICdjb3ZlciBjcm9wIGN5Y2xlIGNvbnRhaW5zIG5vbiBjb3ZlciBjcm9wIHByb2R1Y3QnOiAoKSA9PlxuICAgIGBZb3UgaGF2ZSBzcGVjaWZpZWQgdGhhdCB0aGlzIGNyb3AgaXMgYSBjb3ZlciBjcm9wIHVzaW5nIGEgUHJhY3RpY2UuXG4gICAgQSBjb3ZlciBjcm9wIGlzIGRlZmluZWQgYXMgXCJhIGNyb3Agd2hpY2ggaXMgbGVmdCBpbiB0aGUgZmllbGQgd2l0aG91dCBhbnkgZnJhY3Rpb24gaGFydmVzdGVkIGJ5IHRoZSBlbmQgb2YgdGhlIEN5Y2xlXCIuXG4gICAgVGhlIFByb2R1Y3RzIG9mIHRoaXMgQ3ljbGUgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoaXMgY3JvcCBiZWluZyBhIGNvdmVyIGNyb3AuXG4gICAgUGxlYXNlIGNoZWNrIHRoZSBQcm9kdWN0cyBvciB0aGUgUHJhY3RpY2VzLmAsXG4gICdzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGN5Y2xlIHByb2R1Y3RzJzogKHsgcGFyYW1zIH0sIGVycm9yQ291bnQpID0+XG4gICAgYCR7XG4gICAgICBlcnJvckNvdW50ID09PSAxXG4gICAgICAgID8gYFRoZSBQcm9kdWN0ICR7Y29kZShwYXJhbXMucHJvZHVjdC5uYW1lKX0gY2Fubm90IGJlIGZvdW5kIGluIHRoZSBDeWNsZSB3aXRoIGlkICR7Y29kZShwYXJhbXMubm9kZS5pZCl9YFxuICAgICAgICA6ICdUaGUgUHJvZHVjdCBpbiB0aGUgSW1wYWN0IEFzc2Vzc21lbnQgY2Fubm90IGJlIGZvdW5kIGluIHRoZSBsaW5rZWQgQ3ljbGUnXG4gICAgfS5cbiAgICBUaGlzIGNvdWxkIGJlIHNpbXBseSBiZWNhdXNlIHRoZSBwcm9kdWN0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBDeWNsZTogaW4gdGhpcyBjYXNlLCBhZGQgaXQgdG8gdGhlIEN5Y2xlIG9yIHJlbW92ZSB0aGUgSW1wYWN0IEFzc2Vzc21lbnQuXG4gICAgSXQgY291bGQgYWxzbyBiZSBiZWNhdXNlIHlvdSBoYXZlIG11bHRpcGxlIFByb2R1Y3RzIGluIHRoZSBDeWNsZSB1c2luZyB0aGUgc2FtZSBUZXJtLCBidXQgaGF2aW5nIGRpZmZlcmVudCBQcm9wZXJ0aWVzIG9yIGRpZmZlcmVudCBmaWVsZHM6XG4gICAgaW4gdGhpcyBjYXNlLCBlbnN1cmUgYWxsIG9mIHRoZSBQcm9wZXJ0aWVzIGFuZCBmaWVsZHMgd2hpY2ggbWFrZSB0aGUgUHJvZHVjdCB1bmlxdWUgYXJlIGNvcGllZCBpbnRvIHRoZSBJbXBhY3QgQXNzZXNzbWVudC5gLFxuICAnbXVsdGlwbGUgSW1wYWN0QXNzZXNzbWVudCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lIFByb2R1Y3Qgb2YgdGhlIHNhbWUgQ3ljbGUnOiAoKSA9PlxuICAgIGBPbmx5IG9uZSBJbXBhY3QgQXNzZXNzbWVudCBjYW4gYmUgcmVsYXRlZCB0byB0aGlzIFByb2R1Y3QuXG4gICAgUGxlYXNlIG1ha2Ugc3VyZSB0aGUgcHJvZHVjdCBpcyBjb3JyZWN0IG9yIHRoZSBjeWNsZS5pZCB5b3UgYXJlIHJlZmVycmluZyB0byBpcyBjb3JyZWN0LmAsXG4gICdtdWx0aXBsZSBJbXBhY3RBc3Nlc3NtZW50IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBQcm9kdWN0JzogKCkgPT5cbiAgICBgT25seSBvbmUgSW1wYWN0IEFzc2Vzc21lbnQgY2FuIGJlIHJlbGF0ZWQgdG8gdGhpcyBQcm9kdWN0LlxuICAgIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHByb2R1Y3Qgb2YgdGhlIHJlbGF0ZWQgSW1wYWN0QXNzZXNzbWVudHMgYXJlIGNvcnJlY3Qgb3IgdGhlIGN5Y2xlLmlkIGlzIGNvcnJlY3QuYCxcbiAgJ211c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGxhbmQgb2NjdXBhdGlvbic6ICgpID0+XG4gICAgYExhbmQgdHJhbnNmb3JtYXRpb24gc2hvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBsYW5kIG9jY3VwYXRpb25cbiAgICAobGFuZCB0cmFuc2Zvcm1hdGlvbiBpcyB0aGUgYW1vdW50IG9mIGxhbmQgY29udmVydGVkIGJldHdlZW4gc29tZSBkYXRlIGluIHRoZSBwYXN0IGFuZCB0aGUgY3VycmVudCB5ZWFyLFxuICAgIGRpdmlkZWQgYnkgYW4gYW1vcnRpemF0aW9uIHBlcmlvZCwgc28gaXQgc2hvdWxkIGFsd2F5cyBiZSBsZXNzIHRoYW4gbGFuZCBvY2N1cGF0aW9uIGJ5IGRlZmluaXRpb24pLmAsXG4gICdzaG91bGQgYmUgbGlua2VkIHRvIGFuIGVtaXNzaW9uIGluIHRoZSBDeWNsZSc6ICh7IHBhcmFtcyB9LCBlcnJvckNvdW50KSA9PlxuICAgIGAke1xuICAgICAgZXJyb3JDb3VudCA9PT0gMSA/IGAke2NvZGUocGFyYW1zPy50ZXJtLm5hbWUpfSBleGlzdHNgIDogJ1NvbWUgRW1pc3Npb25zIGV4aXN0J1xuICAgIH0gaW4gYm90aCB0aGUgQ3ljbGUgYW5kIHRoZSBUcmFuc2Zvcm1hdGlvbiBidXQgJHtlcnJvckNvdW50ID09PSAxID8gJ2l0IGlzJyA6ICd0aGV5IGFyZSd9IG5vdCBsaW5rZWQgdXNpbmcgJHtjb2RlKFxuICAgICAgJ2N5Y2xlLmVtaXNzaW9ucy5YLnRyYW5zZm9ybWF0aW9uLnRlcm0nXG4gICAgKX0uIFRoaXMgbWF5IGJlIGFuIGVycm9yLmAsXG4gICdzaG91bGQgYWRkIGFuIGFuaW1hbCBwcm9kdWN0aW9uIHN5c3RlbSc6ICgpID0+XG4gICAgYEZvciBhbmltYWwgcHJvZHVjdGlvbiBjeWNsZXMsIHdlIHJlY29tbWVuZCBzcGVjaWZ5aW5nIHRoZSBhbmltYWwgcHJvZHVjdGlvbiAke2dsb3NzYXJ5VHlwZUxpbmsoXG4gICAgICBUZXJtVGVybVR5cGUuc3lzdGVtXG4gICAgKX0gYXMgYSBQcmFjdGljZS5cbiAgICBZb3UgY2FuIGZpbmQgYSBsaXN0IG9mIHN5c3RlbXMgaW4gdGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuc3lzdGVtLCAnR2xvc3NhcnknKX0uYCxcbiAgJ211c3QgYmUgc2V0IHRvIGZhbHNlIHdoZW4gc3BlY2lmeWluZyBmdWVsIHVzZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBJZiBtYWNoaW5lcnkgZnVlbCAoJHtwYXJhbXM/LmFsbG93ZWRWYWx1ZXMubWFwKGNvZGUpLmpvaW4oJywgJyl9KSBpcyB1c2VkIGR1cmluZyBhIEN5Y2xlLFxuICAgIGJ1dCB0aGVyZSBpcyBubyBkYXRhIG9uIHRoZSBhbW91bnQgb2YgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5tYXRlcmlhbCl9IHVzZWQgZm9yIGFncmljdWx0dXJhbCBlcXVpcG1lbnQsXG4gICAgdGhlbiAke2NvZGUoJ2NvbXBsZXRlbmVzcy5tYXRlcmlhbCcpfSBtdXN0IGJlICR7Y29kZSgnZmFsc2UnKX0uYCxcbiAgJ211c3QgYmUgYmVsb3cgb3IgZXF1YWwgdG8gMSBmb3IgdW5pdCBpbiBoYSc6ICgpID0+XG4gICAgYFRoZSBtYXhpbXVtIHZhbHVlIGZvciBhIHByb2R1Y3Qgd2l0aCB1bml0cyAke2NvZGUoJ2hhJyl9IG9uIGEgQ3ljbGUgd2l0aCBhICR7c2NoZW1hTGluayhcbiAgICAgICdDeWNsZSNmdW5jdGlvbmFsVW5pdCcsXG4gICAgICAnZnVuY3Rpb25hbCB1bml0J1xuICAgICl9IG9mICR7Y29kZSgnMSBoYScpfSBpcyAke2NvZGUoJzEnKX0uXG4gICAgSWYgeW91IGFyZSB0cnlpbmcgdG8gYWRkIGEgcHJvZHVjdCB3aXRoIHRoZSB1bml0cyAke2NvZGUoJ2tnJyl9LCB1c2UgYSBkaWZmZXJlbnQgdGVybS5gLFxuICBcInBhc3R1cmVHcmFzcyBrZXkgdGVybVR5cGUgbXVzdCBiZSAnbGFuZENvdmVyJ1wiOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhlIFRlcm0gJHtjb2RlKHBhcmFtcz8udGVybS5uYW1lKX0gY2FuJ3QgYmUgdXNlZCBhcyBhIGtleSBmb3IgJHt0ZXJtTGluayhwYXN0dXJlR3Jhc3MpfS5cbiAgICBQbGVhc2UsIHVzZSBhIHRlcm0gd2l0aCB0ZXJtVHlwZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmxhbmRDb3Zlcil9IGluc3RlYWQuXG4gICAgVGhpcyB3aWxsIGhlbHAgdXMgZ2FwLWZpbGwgdGhlIGFtb3VudCBvZiBncmFzcyBjb25zdW1lZCBieSB0aGUgaGVyZC5gLFxuICAndGhlIHN1bSBvZiBhbGwgcGFzdHVyZUdyYXNzIHZhbHVlcyBtdXN0IGJlIDEwMCc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgc3VtIG9mIGFsbCAke3Rlcm1MaW5rKHBhc3R1cmVHcmFzcyl9IHZhbHVlcyBtdXN0IGJlIGVxdWFsIHRvICR7cGFyYW1zLmV4cGVjdGVkfSUuYCxcbiAgJ2lzIG91dHNpZGUgY29uZmlkZW5jZSBpbnRlcnZhbCc6IChlcnJvciwgZXJyb3JDb3VudCwgYWxsRXJyb3JzKSA9PlxuICAgIGAke3VuaXF1ZShcbiAgICAgIChhbGxFcnJvcnMubGVuZ3RoID8gYWxsRXJyb3JzIDogW2Vycm9yXSkuZmxhdE1hcChcbiAgICAgICAgKHsgZGF0YVBhdGgsIHBhcmFtcyB9KSA9PlxuICAgICAgICAgIHBhcmFtcz8ub3V0bGllcnM/Lm1hcChcbiAgICAgICAgICAgIHZhbHVlID0+XG4gICAgICAgICAgICAgIGBUaGUgJHtkYXRhUGF0aC5pbmNsdWRlcygncHJvZHVjdCcpID8gJ3Byb2R1Y3QnIDogJ2lucHV0J30gdmFsdWUgJHtcbiAgICAgICAgICAgICAgICBlcnJvckNvdW50ID09PSAxID8gYCR7Y29kZSh2YWx1ZSl9IGAgOiAnJ1xuICAgICAgICAgICAgICB9aXMgJHt2YWx1ZSA+IHBhcmFtcz8ubWluID8gJ2Fib3ZlJyA6ICdiZWxvdyd9ICR7XG4gICAgICAgICAgICAgICAgcGFyYW1zPy50aHJlc2hvbGQgPyBgJHtjb2RlKGAkeyhwYXJhbXMudGhyZXNob2xkICsgKDEgLSBwYXJhbXMudGhyZXNob2xkKSAvIDIpICogMTAwfSVgKX0gb2ZgIDogJydcbiAgICAgICAgICAgICAgfSBhbGwgJHtwYXJhbXM/Lmdyb3VwID8gY29kZShwYXJhbXMuZ3JvdXApIDogY29kZShwYXJhbXM/LnRlcm0/Lm5hbWUpfSBkYXRhIGluICR7Y29kZShcbiAgICAgICAgICAgICAgICBwYXJhbXM/LmNvdW50cnkubmFtZVxuICAgICAgICAgICAgICApfSBvbiB0aGUgSGVzdGlhIHBsYXRmb3JtLmBcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKS5qb2luKCc8L2JyPicpfVxuICAgIDwvYnI+XG4gICAgUGxlYXNlIGRvdWJsZS1jaGVjayB0aGVzZSB2YWx1ZXMgYmVmb3JlIHN1Ym1pdHRpbmcuYCxcbiAgJ3Nob3VsZCBiZSBlcXVhbCB0byBib3VuZGFyeSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUaGUgY2FsY3VsYXRlZCBhcmVhIGZyb20gJHtjb2RlKCdib3VuZGFyeScpfSBpcyAke2NvZGUocGFyYW1zPy5leHBlY3RlZCl9LlxuICAgIFRoaXMgbWF5IGJlIGFuIGVycm9yIGlmIHRoZSBib3VuZGFyeSByZXByZXNlbnRzIHRoZSBhcmVhIHVuZGVyIGN1bHRpdmF0aW9uLmAsXG4gICdtdXN0IHNwZWNpZnkgdGhlIGZhdGUgb2YgY3JvcFJlc2lkdWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgRm9yIHNpdGVzIG9mIHR5cGUgJHtwYXJhbXMuc2l0ZVR5cGUubWFwKGNvZGUpLmpvaW4oJyBvciAnKX0sXG4gICAgaWYgZGF0YSBjb21wbGV0ZW5lc3MgaXMgbWFya2VkICR7Y29kZShcbiAgICAgIHRydWVcbiAgICApfSBmb3IgY3JvcCByZXNpZHVlLCB0aGUgZmF0ZXMgYW5kIHF1YW50aXRpZXMgb2YgdGhlIHJlc2lkdWUgbXVzdCBiZSBzcGVjaWZpZWQuXG4gICAgPGJyLz5cbiAgICBUaGUgcXVhbnRpdHkgbXVzdCBpbmNsdWRlIGJvdGggYWJvdmUgYW5kIGJlbG93IGdyb3VuZCBjcm9wIHJlc2lkdWUsIHdoZXJlIHRoZSBzdW0gb2YgYWJvdmUgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBhbmQgYmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLlxuICAgIFRoaXMgY2FuIGJlIGFkZGVkIHVzaW5nIHRoZSB0ZXJtczpcbiAgICA8dWwgY2xhc3M9XCJpcy1wbC0zIGlzLWxpc3Qtc3R5bGUtZGlzYyBpcy1ub3dyYXBcIj5cbiAgICA8bGk+JHt0ZXJtTGluayh7IGlkOiAnYmVsb3dHcm91bmRDcm9wUmVzaWR1ZScsIG5hbWU6ICdCZWxvdyBncm91bmQgY3JvcCByZXNpZHVlJyB9KX07IGFuZDwvbGk+XG4gICAgPGxpPiR7dGVybUxpbmsoeyBpZDogJ2Fib3ZlR3JvdW5kQ3JvcFJlc2lkdWVUb3RhbCcsIG5hbWU6ICdBYm92ZSBncm91bmQgY3JvcCByZXNpZHVlIHRvdGFsJyB9KX0uPC9saT5cbiAgICA8L3VsPlxuICAgIDxici8+XG4gICAgVGhlIGZhdGUgY2FuIGJlIGFkZGVkIHVzaW5nOlxuICAgIDx1bCBjbGFzcz1cImlzLXBsLTMgaXMtbGlzdC1zdHlsZS1kaXNjIGlzLW5vd3JhcFwiPlxuICAgIDxsaT50aGUgJHtnbG9zc2FyeVR5cGVMaW5rKFRlcm1UZXJtVHlwZS5jcm9wUmVzaWR1ZU1hbmFnZW1lbnQpfSBwcmFjdGljZXM7IGFuZC9vcjwvbGk+XG4gICAgPGxpPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlKX0gcHJvZHVjdHM8L2xpPlxuICAgIDwvdWw+XG4gICAgYCxcbiAgJ3Nob3VsZCBzcGVjaWZ5IHRoZSBmYXRlIG9mIGNyb3BSZXNpZHVlJzogKCkgPT5cbiAgICBgWW91IGhhdmUgbm90IHNwZWNpZmllZCB0aGUgZmF0ZSBvZiB0aGUgY3JvcCByZXNpZHVlLlxuICAgIEFkZGluZyB0aGlzIGluZm9ybWF0aW9uIHdpbGwgaW1wcm92ZSBlbWlzc2lvbnMgYW5kIHNvaWwgY2FyYm9uIHN0b2NrIGNhbGN1bGF0aW9ucy5cbiAgICBUaGUgZmF0ZSBjYW4gYmUgYWRkZWQgdXNpbmc6XG4gICAgPHVsIGNsYXNzPVwiaXMtcGwtMyBpcy1saXN0LXN0eWxlLWRpc2MgaXMtbm93cmFwXCI+XG4gICAgPGxpPnRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmNyb3BSZXNpZHVlTWFuYWdlbWVudCl9IHByYWN0aWNlczsgYW5kL29yPC9saT5cbiAgICA8bGk+dGhlICR7Z2xvc3NhcnlUeXBlTGluayhUZXJtVGVybVR5cGUuY3JvcFJlc2lkdWUpfSBwcm9kdWN0czs8L2xpPlxuICAgIDwvdWw+XG4gICAgUmVtZW1iZXIgdG8gc2V0ICR7Y29kZSgnY29tcGxldGVuZXNzLmNyb3BSZXNpZHVlJyl9IHRvICR7Y29kZShcbiAgICAgIHRydWVcbiAgICApfSBpZiBib3RoIHRoZSBhYm92ZSBhbmQgYmVsb3cgZ3JvdW5kIGNyb3AgcmVzaWR1ZSBxdWFudGl0aWVzIGFuZCBmYXRlcyBhcmUgc3BlY2lmaWVkLmAsXG4gICdzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcml2YWN5IGFzIHRoZSByZWxhdGVkIHNvdXJjZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBUbyBsaW5rIHRvIGEgJHsocGFyYW1zPy5kZWZhdWx0U291cmNlIHx8IHBhcmFtcz8uc291cmNlKT8uZGF0YVByaXZhdGUgPyAncHJpdmF0ZScgOiAncHVibGljJ30gU291cmNlLFxuICAgIHRoaXMgTm9kZSBuZWVkcyB0byBiZSAkeyhwYXJhbXM/LmRlZmF1bHRTb3VyY2UgfHwgcGFyYW1zPy5zb3VyY2UpPy5kYXRhUHJpdmF0ZSA/ICdwcml2YXRlJyA6ICdwdWJsaWMnfSBhcyB3ZWxsLlxuICAgIFBsZWFzZSBzZXQgJHtjb2RlKCdkYXRhUHJpdmF0ZScpfT0ke2NvZGUoYCR7KHBhcmFtcz8uZGVmYXVsdFNvdXJjZSB8fCBwYXJhbXM/LnNvdXJjZSk/LmRhdGFQcml2YXRlfWApfS5gLFxuICAnc2hvdWxkIG5vdCB1c2Ugbm90IHJlbGV2YW50IG1vZGVsJzogKCkgPT5cbiAgICBgQWxsIGVtaXNzaW9ucyBzaG91bGQgZ2VuZXJhbGx5IGhhdmUgYSBtZXRob2QgdGllciwgd2hpY2ggc3RhdGVzIGhvdyB0aGUgZGF0YSB3ZXJlIG1vZGVsbGVkIG9yIGhvdyB0aGUgZGF0YSB3ZXJlIGNvbGxlY3RlZC5cbiAgICBQbGVhc2Ugc2VlIHRoZSAke3NjaGVtYUxpbmsoXG4gICAgICAnRW1pc3Npb24jbWV0aG9kVGllcicsXG4gICAgICAnc2NoZW1hJ1xuICAgICl9IGZvciB0aGUgb3B0aW9ucyBhdmFpbGFibGUgYW5kIGRlZmluaXRpb25zIG9mIHRoZSBvcHRpb25zLmAsXG4gICdzaG91bGQgbm90IHVzZSBub3QgcmVsZXZhbnQgbWV0aG9kVGllcic6ICgpID0+XG4gICAgYEFsbCBlbWlzc2lvbnMgc2hvdWxkIGdlbmVyYWxseSBoYXZlIGEgbWV0aG9kIHRpZXIsIHdoaWNoIHN0YXRlcyBob3cgdGhlIGRhdGEgd2VyZSBtb2RlbGxlZCBvciBob3cgdGhlIGRhdGEgd2VyZSBjb2xsZWN0ZWQuXG4gICAgUGxlYXNlIHNlZSB0aGUgJHtzY2hlbWFMaW5rKFxuICAgICAgJ0VtaXNzaW9uI21ldGhvZFRpZXInLFxuICAgICAgJ3NjaGVtYSdcbiAgICApfSBmb3IgdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGFuZCBkZWZpbml0aW9ucyBvZiB0aGUgb3B0aW9ucy5gLFxuICAnaW5ncmVkaWVudHMgc2hvdWxkIGJlIGNvbXBsZXRlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYERhdGEgY29tcGxldGVuZXNzIGZvciAke2NvZGUoJ2luZ3JlZGllbnQnKX0gbXVzdCBiZSB0cnVlIGZvciBzaXRlIG9mIHR5cGUgJHtwYXJhbXMuc2l0ZVR5cGV9YCxcbiAgJ211c3QgaGF2ZSBpbnB1dHMgdG8gcmVwcmVzZW50IGluZ3JlZGllbnRzJzogKCkgPT5cbiAgICBgRGF0YSBjb21wbGV0ZW5lc3MgZm9yICR7Y29kZSgnaW5ncmVkaWVudCcpfSBjYW5ub3QgYmUgdHJ1ZSBpZiB0aGVyZSBhcmUgbm8gSW5wdXRzLmAsXG4gICdtdXN0IGhhdmUgaW5wdXRzIHJlcHJlc2VudGluZyB0aGUgZm9yYWdlIHdoZW4gc2V0IHRvIHRydWUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBDeWNsZSBpbmNsdWRlcyBhbmltYWxzICR7cGFyYW1zPy5zaXRlVHlwZSA/IGBvbiAke3BhcmFtcy5zaXRlVHlwZX1gIDogJyd9IGFuZCBjb21wbGV0ZW5lc3MgaXMgc2V0IHRvICR7Y29kZShcbiAgICAgIHRydWVcbiAgICApfSBmb3IgJHtjb2RlKCdncmF6ZWRGb3JhZ2UnKX0uXG4gICAgSG93ZXZlciwgdGhlcmUgYXJlIG5vIElucHV0cyByZXByZXNlbnRpbmcgdGhlIGZvcmFnZSBpbnRha2UgYnkgYW5pbWFscyBpbiB0aGUgQ3ljbGUgKElucHV0cyB3aXRoIHRlcm1zIHdoaWNoIGNvbnRhaW4gdGhlIHdvcmRzIFwiZnJlc2ggZm9yYWdlXCIgYW5kIGEgJHtjb2RlKFxuICAgICAgJ3ZhbHVlJ1xuICAgICl9KS5cbiAgICBFaXRoZXIsIHNldCBjb21wbGV0ZW5lc3MgdG8gJHtjb2RlKGZhbHNlKX0gZm9yICR7Y29kZShcbiAgICAgICdncmF6ZWRGb3JhZ2UnXG4gICAgKX0sIG1ha2Ugc3VyZSBhbGwgXCJmcmVzaCBmb3JhZ2VcIiBJbnB1dHMgaGF2ZSBhICR7Y29kZShcbiAgICAgICd2YWx1ZSdcbiAgICApfSwgb3IgYWRkIG9uZSBvciBtb3JlIElucHV0cyByZXByZXNlbnRpbmcgdGhlIGZvcmFnZSBpbnRha2UuYCxcbiAgJ211c3Qgc3BlY2lmeSBpcyBpdCBhbiBhbmltYWwgZmVlZCc6ICgpID0+XG4gICAgYFRoaXMgQ3ljbGUgaXMgYW4gYW5pbWFsIHByb2R1Y3Rpb24gQ3ljbGUgYW5kIHRoaXMgSW5wdXQgY291bGQgYmUgYW4gYW5pbWFsIGZlZWQgb3IgY291bGQgYmUgZm9yIGFub3RoZXIgdXNlLlxuICAgIFBsZWFzZSBzcGVjaWZ5IHRoZSAke3NjaGVtYUxpbmsoJ0lucHV0I2lzQW5pbWFsRmVlZCcsICdpc0FuaW1hbEZlZWQnKX0gZmllbGQgb24gdGhpcyBJbnB1dC5cbiAgICBLbm93aW5nIHRoZSBmYXRlIGlzIGVzc2VudGlhbCB0byBkaXN0aW5ndWlzaCBJbnB1dHMgYmV0d2VlbiB0aG9zZSB3aGljaCBhcmUgZmVkIHRvIGFuaW1hbHMgYW5kIHRob3NlIHdoaWNoIGFyZSB1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy5gLFxuICAnc2hvdWxkIHNwZWNpZnkgYSB0cmVhdG1lbnQgd2hlbiBleHBlcmltZW50RGVzaWduIGlzIHNwZWNpZmllZCc6ICgpID0+XG4gICAgYFlvdSBoYXZlIHNwZWNpZmllZCB0aGF0IHRoaXMgU291cmNlIHVzZXMgYW4gZXhwZXJpbWVudGFsIGRlc2lnbiwgYnV0IGhhdmUgbm90IHNwZWNpZmllZCB0aGUgdHJlYXRtZW50IGZvciB0aGlzIEN5Y2xlLlxuICAgIEFkZGluZyB0aGUgdHJlYXRtZW50IHByb3ZpZGVzIGltcG9ydGFudCBtZXRhLWRhdGEgYW5kIHdpbGwgZW5hYmxlIGdyZWF0ZXIgcmUtdXNlIG9mIHRoZXNlIGRhdGEuXG4gICAgQWRkIHRoZSAke3NjaGVtYUxpbmsoJ0N5Y2xlI3RyZWF0bWVudCcsICd0cmVhdG1lbnQnKX0gZmllbGQgdG8gdGhlIEN5Y2xlLlxuICAgIE5vdGUgdGhhdCB0aGUgZmllbGQgJHtzY2hlbWFMaW5rKFxuICAgICAgJ0N5Y2xlI2NvbW1lcmNpYWxQcmFjdGljZVRyZWF0bWVudCcsXG4gICAgICAnY29tbWVyY2lhbFByYWN0aWNlVHJlYXRtZW50J1xuICAgICl9IGJlY29tZXMgcmVxdWlyZWQgaWYgdHJlYXRtZW50IGlzIHNwZWNpZmllZC5gLFxuICAnc2hvdWxkIG5vdCBzcGVjaWZ5IGJvdGggbGl2ZUFuaW1hbCBhbmQgYW5pbWFsUHJvZHVjdCc6ICgpID0+XG4gICAgYFlvdSBoYXZlIGFkZGVkIGJvdGggYSAke2dsb3NzYXJ5VHlwZUxpbmsoVGVybVRlcm1UeXBlLmxpdmVBbmltYWwpfSBhbmQgJHtnbG9zc2FyeVR5cGVMaW5rKFxuICAgICAgVGVybVRlcm1UeXBlLmFuaW1hbFByb2R1Y3RcbiAgICApfSB0ZXJtIGFzIFByb2R1Y3RzLlxuICAgIElmIHRoZXNlIHRlcm1zIHJlZmVyIHRvIHRoZSBzYW1lIGFuaW1hbHMsIHRoaXMgd2lsbCBsZWFkIHRvIGRvdWJsZSBjb3VudGluZzpcbiAgICBpbnN0ZWFkIHVzZSBhIFByb3BlcnR5IG9uIHRoZSAke2dsb3NzYXJ5VHlwZUxpbmsoXG4gICAgICBUZXJtVGVybVR5cGUubGl2ZUFuaW1hbFxuICAgICl9IHRlcm0gdG8gZGVmaW5lIHRoZSBxdWFudGl0eSBvZiBsaXZld2VpZ2h0IHBlciBoZWFkLCBjYXJjYXNzIHdlaWdodCBwZXIgaGVhZCwgZXRjLmAsXG4gICdtdXN0IGFkZCBhbiBleGNyZXRhIHByb2R1Y3Qgd2l0aCBhIGxpdmVBbmltYWwgcHJvZHVjdCc6ICgpID0+XG4gICAgYEFuaW1hbCBwcm9kdWN0aW9uIEN5Y2xlcyBjcmVhdGUgZXhjcmV0YS5cbiAgICBUaGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSAke2NvZGUoVGVybVRlcm1UeXBlLmV4Y3JldGEpfSBwcm9kdWN0IGluIHRoaXMgQ3ljbGUuXG4gICAgUGxlYXNlIGFkZCBhbiAke2NvZGUoVGVybVRlcm1UeXBlLmV4Y3JldGEpfSBQcm9kdWN0IHRvIHRoZSBDeWNsZS5cbiAgICBZb3UgZG8gbm90IG5lZWQgdG8gc2V0IGEgJHtjb2RlKCd2YWx1ZScpfSBmb3IgdGhlIFByb2R1Y3QsIGJ1dCBhZGRpbmcgYSAke2NvZGUoJ3ZhbHVlJyl9IGlzIGRlc2lyYWJsZS5gLFxuICAndmFsdWUgc2hvdWxkIHN1bSB0byAxMDAgb3IgbGVzcyBhY3Jvc3Mgd2F0ZXIgcmVnaW1lIHByYWN0aWNlcyc6ICgpID0+XG4gICAgYFRoZSB0b3RhbCAlIGFyZWEgY292ZXJlZCBieSB0aGUgJHtjb2RlKFRlcm1UZXJtVHlwZS53YXRlclJlZ2ltZSl9IHByYWN0aWNlcyB5b3Ugc3BlY2lmaWVkIGlzIG5vdCBlcXVhbCB0byAke2NvZGUoXG4gICAgICAxMDBcbiAgICApfS5cbiAgICBNYWtlIHN1cmUgdG8gYWRkIGFueSBtaXNzaW5nIHByYWN0aWNlIGlmIG5lZWRlZCBhbmQvb3IgYWRqdXN0IHRoZSB2YWx1ZXMgb2YgdGhlICR7Y29kZShcbiAgICAgIFRlcm1UZXJtVHlwZS53YXRlclJlZ2ltZVxuICAgICl9IHByYWN0aWNlcyB5b3UgYWxyZWFkeSByZWNvcmRlZC5gLFxuICAncmljZSBwcm9kdWN0cyBub3QgYWxsb3dlZCBmb3IgdGhpcyB3YXRlciByZWdpbWUgcHJhY3RpY2UnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBwcmFjdGljZSBpcyBub3QgYWxsb3dlZCB3aXRoIHRoZSBwcm9kdWN0cyAke3BhcmFtcy5wcm9kdWN0cz8ubWFwKHAgPT4gY29kZShwLm5hbWUgfHwgcFsnQGlkJ10pKX0uXG4gICAgUmVjb3JkaW5nIHRoZSByaWdodCB3YXRlciByZWdpbWUgZm9yIHJpY2UgZW5zdXJlcyBtZXRoYW5lIGVtaXNzaW9ucyBmcm9tIGZsb29kZWQgZmllbGRzIGFyZSBjb3JyZWN0bHkgcmVjYWxjdWxhdGVkLlxuICAgIFRvIGZpeCB0aGlzIGVycm9yLCBlaXRoZXIgY2hhbmdlIHRoZSBwcmFjdGljZSBvciB0aGUgcHJvZHVjdHMuYCxcbiAgJ211c3Qgbm90IGJlIGVxdWFsIHRvIDEgaGEnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgJHtjb2RlKEN5Y2xlRnVuY3Rpb25hbFVuaXRbJzEgaGEnXSl9IGNhbm5vdCBiZSB1c2VkIGFzICR7c2NoZW1hTGluayhcbiAgICAgICdDeWNsZSNmdW5jdGlvbmFsVW5pdCcsXG4gICAgICAnZnVuY3Rpb25hbFVuaXQnXG4gICAgKX0gZm9yIEN5Y2xlcyBsaW5rZWQgdG8gU2l0ZXMgd2l0aCAke3NjaGVtYUxpbmsoJ1NpdGUjc2l0ZVR5cGUnLCAnc2l0ZVR5cGUnKX0gPSAke2NvZGUocGFyYW1zPy5zaXRlVHlwZSl9LlxuICAgIEVpdGhlciBjaGFuZ2UgdGhlICR7c2NoZW1hTGluaygnQ3ljbGUjZnVuY3Rpb25hbFVuaXQnLCAnZnVuY3Rpb25hbFVuaXQnKX0gdG8gJHtjb2RlKFxuICAgICAgQ3ljbGVGdW5jdGlvbmFsVW5pdC5yZWxhdGl2ZVxuICAgICl9IG9yIGNoYW5nZSB0aGUgJHtzY2hlbWFMaW5rKCdTaXRlI3NpdGVUeXBlJywgJ3NpdGVUeXBlJyl9LmAsXG4gICdzaG91bGQgc3BlY2lmeSBhIHZhbHVlIHdoZW4gSGVzdGlhIGhhcyBhIGRlZmF1bHQgb25lJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYEFzIHlvdSBoYXZlIG5vdCBzcGVjaWZpZWQgYSAke2NvZGUoJ3ZhbHVlJyl9LCB3ZSB3aWxsIGFzc3VtZSB0aGUgdmFsdWUgaXMgJHtjb2RlKHBhcmFtcz8uZXhwZWN0ZWQpfS5cbiAgICBJZiB0aGlzIGlzIGluY29ycmVjdCwgcGVsYXNlIGFkZCBhIHZhbHVlLmAsXG4gICdzaG91bGQgY29udGFpbiBhdCBsZWFzdCBvbmUgbWFuYWdlbWVudCBub2RlJzogKHsgcGFyYW1zIH0pID0+XG4gICAgYCR7XG4gICAgICBwYXJhbXM/LnRlcm1UeXBlXG4gICAgICAgID8gYERvZXMgbm90IGNvbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgJHtjb2RlKHBhcmFtcy50ZXJtVHlwZSl9LlxuICAgICAgICBQbGVhc2UgY29uc2lkZXIgYWRkaW5nIGEgaGlzdG9yeSBvZiAke2NvZGUoXG4gICAgICAgICAgcGFyYW1zLnRlcm1UeXBlXG4gICAgICAgICl9IGZvciBhcyBtYW55IHllYXJzIGFzIHBvc3NpYmxlIGluIHRoZSBNYW5hZ2VtZW50IGJsYW5rIG5vZGVzLmBcbiAgICAgICAgOiBgVGhlcmUgaXMgbm8gTWFuYWdlbWVudCBub2RlIHByZXNlbnQgaW4gdGhpcyB1cGxvYWQuXG4gICAgICAgIFdlIHJlY29tbWVuZCBhZGRpbmcgdGhpcyB0byB0aGUgU2l0ZSwgaW5jbHVkaW5nIGluZm9ybWF0aW9uIGFib3V0IGN1cnJlbnQgYW5kIGhpc3RvcmljYWwgdGlsbGFnZS5cbiAgICAgICAgYFxuICAgIH1cbiAgICBXZSB1c2UgdGhpcyBpbmZvcm1hdGlvbiB0byBtb2RlbCBDTzxzdWI+Mjwvc3ViPiBlbWlzc2lvbnMgZnJvbSBzb2lsIG9yZ2FuaWMgY2FyYm9uIGNoYW5nZS5gLFxuICAnY2FuIG5vdCBiZSB1c2VkIG9uIHRoaXMgdGVybVR5cGUnOiAoeyBwYXJhbXMgfSkgPT5cbiAgICBgVGhpcyBQcm9wZXJ0eSBjYW4gb25seSBiZSB1c2VkIG9uIGJsYW5rIG5vZGVzIHdpdGggdGhlIGZvbGxvd2luZyAke2NvZGUoJ3Rlcm0udGVybVR5cGUnKX06ICR7cGFyYW1zLmV4cGVjdGVkXG4gICAgICAubWFwKGNvZGUpXG4gICAgICAuam9pbignLCAnKX0uYCxcbiAgJ25vdCBhIHZhbGlkIEdlb0pTT04nOiAoeyBwYXJhbXMgfSkgPT4gYFxuICAke1xuICAgIHBhcmFtcz8uaW52YWxpZENvb3JkaW5hdGVzID09PSAndHJ1ZSdcbiAgICAgID8gYEdlb0pTT04gZGF0YSBzaG91bGQgZm9sbG93IHRoZSBXR1M4NCBkYXR1bS5cbiAgV2UgaGF2ZSBmb3VuZCBjb29yZGluYXRlcyBvdXRzaWRlIG9mIHRoZSAtMTgwIHRvICsxODAgcmFuZ2Ugd2hpY2ggaXMgbm90IHBvc3NpYmxlIHVuZGVyIFdHUzg0LlxuICBQbGVhc2UgY2hlY2sgdGhlIGRhdHVtIG9yIGNoZWNrIGZvciBvdGhlciBwb3NzaWJsZSBlcnJvcnMuYFxuICAgICAgOiAnVGhpcyBHZW9KU09OIGFwcGVhcnMgdG8gYmUgaW52YWxpZC4nXG4gIH1cbiAgWW91IGNhbiB2YWxpZGF0ZSB5b3VyIEdlb0pTT04gdXNpbmcgYW4gb25saW5lIHRvb2wgbGlrZSA8YSBocmVmPVwiaHR0cHM6Ly9nZW9qc29uLmlvL1wiPmdlb2pzb24uaW88L2E+LlxuICBJZiB5b3UgdGhpbmsgdGhpcyBpcyBhIG1pc3Rha2UsIHBsZWFzZSByZXBvcnQgdGhlIGVycm9yICR7cmVwb3J0SXNzdWVMaW5rKFJlcG9zaXRvcnkuc2NoZW1hLCBUZW1wbGF0ZS5idWcpfS5gLFxuICAnc2hvdWxkIGFkZCB0aGUgdGVybSBzdG9ja2luZ0RlbnNpdHlQZXJtYW5lbnRQYXN0dXJlQXZlcmFnZSc6ICh7IHBhcmFtcyB9KSA9PlxuICAgIGBZb3UgZGlkIG5vdCBzcGVjaWZ5ICR7bm9kZUxpbmsoeyAnQHR5cGUnOiBOb2RlVHlwZS5UZXJtLCAnQGlkJzogcGFyYW1zLmV4cGVjdGVkIH0pfS5cbiAgICBBZGRpbmcgdGhpcyBQcmFjdGljZSBpcyBlc3NlbnRpYWwgZm9yIEN5Y2xlcyB3aXRoIHJlbGF0aXZlIGZ1bmN0aW9uYWwgdW5pdCB3aGljaCBoYXBwZW4gZW50aXJlbHkgb3IgcGFydGlhbGx5IG9uIHBlcm1hbmVudCBwYXN0dXJlLlxuICAgIFdpdGhvdXQgdGhpcyBpbmZvcm1hdGlvbiBIZXN0aWEgY2Fubm90IGNhbGN1bGF0ZSBhbmltYWwgcmVsYXRlZCBlbWlzc2lvbnMuYCxcbiAgJ3Nob3VsZCBzcGVjaWZ5IHRoZSBoZXJkIGNvbXBvc2l0aW9uJzogKCkgPT5cbiAgICBgV2UgcmVjb21tZW5kIGFkZGluZyBpbmZvcm1hdGlvbiBvbiB0aGUgaGVyZCBjb21wb3NpdGlvbiB1c2luZyB0aGUgQW5pbWFsIG5vZGUuXG4gICAgV2l0aG91dCB0aGlzLCB3ZSBjYW5ub3QgcmUtbW9kZWwgbWFueSBhbmltYWwgcmVsYXRlZCBJbnB1dHMsIFByb2R1Y3RzLCBhbmQgRW1pc3Npb25zLmBcbn07XG5cbmNvbnN0IHBhcnNlRGVmYXVsdE1lc3NhZ2UgPSAobWVzc2FnZT86IHN0cmluZykgPT5cbiAgYDxzcGFuIGNsYXNzPVwiaXMtY2FwaXRhbGl6ZWQtZmlyc3QtbGV0dGVyXCI+JHtcbiAgICBtZXNzYWdlPy5zdGFydHNXaXRoKCdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eScpXG4gICAgICA/IG1lc3NhZ2UucmVwbGFjZShcIidcIiwgJzxjb2RlPicpLnJlcGxhY2UoXCInXCIsICc8L2NvZGU+JylcbiAgICAgIDogbWVzc2FnZVxuICB9PC9zcGFuPmA7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UgPSAoXG4gIG1lc3NhZ2U/OiBzdHJpbmcsXG4gIGVycm9yPzogSVZhbGlkYXRpb25FcnJvcixcbiAgYWxsRXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10gPSBbXVxuKSA9PiB7XG4gIGNvbnN0IGZvcm1hdHRlZE1lc3NhZ2UgPSBjdXN0b21FcnJvck1lc3NhZ2U/LlttZXNzYWdlXVxuICAgID8gY3VzdG9tRXJyb3JNZXNzYWdlW21lc3NhZ2VdKGVycm9yISwgYWxsRXJyb3JzLmxlbmd0aCB8fCAxLCBhbGxFcnJvcnMpXG4gICAgOiBwYXJzZURlZmF1bHRNZXNzYWdlKG1lc3NhZ2UpO1xuICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZSA/IGA8cCBjbGFzcz1cImlzLW5vcm1hbFwiPiR7Zm9ybWF0dGVkTWVzc2FnZX08L3A+YCA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEVycm9yID0gKFxuICBlcnJvcj86IElWYWxpZGF0aW9uRXJyb3IsXG4gIGFsbEVycm9yczogSVZhbGlkYXRpb25FcnJvcltdID0gW11cbik6IElWYWxpZGF0aW9uRXJyb3IgfCB1bmRlZmluZWQgPT5cbiAgZXJyb3JcbiAgICA/IHtcbiAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgIC4uLmVycm9yLFxuICAgICAgICBtYXBFcnJvcjogZXJyb3IubWVzc2FnZSA9PT0gbWFwRXJyb3JNZXNzYWdlLFxuICAgICAgICBtZXNzYWdlOiBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UoZXJyb3IubWVzc2FnZSwgZXJyb3IsIGFsbEVycm9ycylcbiAgICAgIH1cbiAgICA6IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IGVycm9ySGFzRXJyb3IgPSAoZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yKSA9PiBlcnJvciAmJiAoZXJyb3IubGV2ZWwgPT09ICdlcnJvcicgfHwgIWVycm9yLmxldmVsKTtcblxuZXhwb3J0IGNvbnN0IGVycm9ySGFzV2FybmluZyA9IChlcnJvcj86IElWYWxpZGF0aW9uRXJyb3IpID0+IGVycm9yICYmIGVycm9yLmxldmVsID09PSAnd2FybmluZyc7XG5cbmV4cG9ydCBjb25zdCBpc01pc3NpbmdQcm9wZXJ0eUVycm9yID0gKHsgcGFyYW1zIH06IElWYWxpZGF0aW9uRXJyb3IpID0+ICEhcGFyYW1zICYmICdtaXNzaW5nUHJvcGVydHknIGluIHBhcmFtcztcblxuZXhwb3J0IGNvbnN0IGlzTWlzc2luZ09uZU9mRXJyb3IgPSAoeyBrZXl3b3JkLCBzY2hlbWFQYXRoIH06IElWYWxpZGF0aW9uRXJyb3IpID0+XG4gIGtleXdvcmQgPT09ICdyZXF1aXJlZCcgJiYgKHNjaGVtYVBhdGggfHwgJycpLmluY2x1ZGVzKCdvbmVPZicpO1xuXG5jb25zdCBpc0ZhaWxpbmdLZXl3b3JkRXJyb3IgPSAoeyBwYXJhbXMgfTogSVZhbGlkYXRpb25FcnJvcikgPT4gISFwYXJhbXMgJiYgJ2ZhaWxpbmdLZXl3b3JkJyBpbiBwYXJhbXM7XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJFcnJvciA9IChlcnJvcjogSVZhbGlkYXRpb25FcnJvcikgPT4gW2lzRmFpbGluZ0tleXdvcmRFcnJvcl0uZXZlcnkoZnVuYyA9PiAhZnVuYyhlcnJvcikpO1xuXG5leHBvcnQgY29uc3QgbWlzc2luZ05vZGVFcnJvcnMgPSAoZXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10pID0+XG4gIGVycm9ycy5maWx0ZXIoXG4gICAgKHsga2V5d29yZCwgcGFyYW1zIH0pID0+XG4gICAgICBrZXl3b3JkID09PSAncmVxdWlyZWQnICYmIChwYXJhbXM/Lm1pc3NpbmdQcm9wZXJ0eSA9PT0gJ0B0eXBlJyB8fCBwYXJhbXM/Lm1pc3NpbmdQcm9wZXJ0eSA9PT0gJ0BpZCcpXG4gICk7XG4iXX0=
|
|
@@ -36,8 +36,8 @@ export class NodeLogsFileComponent {
|
|
|
36
36
|
this.applyFilters();
|
|
37
37
|
}), tap(() => (this.loading = false)));
|
|
38
38
|
}
|
|
39
|
-
|
|
40
|
-
this.csvContent = this.domSanitizer.bypassSecurityTrustResourceUrl(`data:text/html;charset=utf-8,${encodeURIComponent(
|
|
39
|
+
updateCsvContent() {
|
|
40
|
+
this.csvContent = this.domSanitizer.bypassSecurityTrustResourceUrl(`data:text/html;charset=utf-8,${encodeURIComponent(logToCsv(this.allLogs))}`);
|
|
41
41
|
}
|
|
42
42
|
applyFilters() {
|
|
43
43
|
this.nodeLogLines = this.allLogs
|
|
@@ -56,4 +56,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImpor
|
|
|
56
56
|
}], dataState: [{
|
|
57
57
|
type: Input
|
|
58
58
|
}] } });
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1sb2dzLWZpbGUvbm9kZS1sb2dzLWZpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1sb2dzLWZpbGUvbm9kZS1sb2dzLWZpbGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFbEYsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQWEsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJekQsT0FBTyxFQUFTLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7O0FBUXJGLE1BQU0sT0FBTyxxQkFBcUI7SUFtQmhDLFlBQ1UsWUFBMEIsRUFDMUIsV0FBMEI7UUFEMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFwQjVCLFlBQU8sR0FBWSxFQUFFLENBQUM7UUFPdkIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNkLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsa0JBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQzNCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFaEIsaUJBQVksR0FBWSxFQUFFLENBQUM7UUFFM0IsY0FBUyxHQUFHLFNBQVMsQ0FBQztJQUsxQixDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLEdBQUcsSUFBSSxDQUFDLElBQUk7WUFDWixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQy9DLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsRUFDakMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO1lBQzdGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQ2xDLENBQUM7SUFDSixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyw4QkFBOEIsQ0FDaEUsZ0NBQWdDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUM3RSxDQUFDO0lBQ0osQ0FBQztJQUVNLFlBQVk7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTzthQUM3QixNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ2xGLE1BQU0sQ0FDTCxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUNYLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25HLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQ25HLENBQUM7SUFDTixDQUFDOzhHQXZEVSxxQkFBcUI7a0dBQXJCLHFCQUFxQiwyR0NoQmxDLDh1RUE4REE7OzJGRDlDYSxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0UsbUJBQW1CLG1CQUdaLHVCQUF1QixDQUFDLE1BQU07K0hBTXhDLElBQUk7c0JBRFYsS0FBSztnQkFHQyxTQUFTO3NCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERhdGFTdGF0ZSwgZmlsZVRvRXh0IH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHsgSlNPTkxELCBOb2RlVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcblxuaW1wb3J0IHsgSGVOb2RlU2VydmljZSB9IGZyb20gJy4uL25vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBJTGluZSwgTGV2ZWwsIGxldmVscywgcGFyc2VMaW5lcywgbG9nVG9Dc3YgfSBmcm9tICcuLi8uLi9jb21tb24vbG9ncy11dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLW5vZGUtbG9ncy1maWxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUtbG9ncy1maWxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbm9kZS1sb2dzLWZpbGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTm9kZUxvZ3NGaWxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBhbGxMb2dzOiBJTGluZVtdID0gW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIG5vZGU/OiBKU09OTEQ8Tm9kZVR5cGU+O1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YVN0YXRlPzogRGF0YVN0YXRlO1xuXG4gIHB1YmxpYyBzaG93RmlsdGVycyA9IGZhbHNlO1xuICBwdWJsaWMgTGV2ZWwgPSBMZXZlbDtcbiAgcHVibGljIG1vZGVsRmlsdGVyID0gJyc7XG4gIHB1YmxpYyB0ZXJtRmlsdGVyID0gJyc7XG4gIHB1YmxpYyBzZWxlY3RlZExldmVsID0gTGV2ZWwuaW5mbztcbiAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIG5vZGVMb2c/OiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHB1YmxpYyBub2RlTG9nTGluZXM6IElMaW5lW10gPSBbXTtcbiAgcHVibGljIGNzdkNvbnRlbnQ/OiBTYWZlUmVzb3VyY2VVcmw7XG4gIHB1YmxpYyBmaWxlVG9FeHQgPSBmaWxlVG9FeHQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIG5vZGVTZXJ2aWNlOiBIZU5vZGVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm5vZGVMb2cgPSBvZih7XG4gICAgICAuLi50aGlzLm5vZGUsXG4gICAgICBkYXRhU3RhdGU6IHRoaXMuZGF0YVN0YXRlXG4gICAgfSkucGlwZShcbiAgICAgIHRhcCgoKSA9PiAodGhpcy5sb2FkaW5nID0gdHJ1ZSkpLFxuICAgICAgbWVyZ2VNYXAobm9kZSA9PiB0aGlzLm5vZGVTZXJ2aWNlLmdldExvZyhub2RlKSksXG4gICAgICBtYXAodmFsdWUgPT4gdmFsdWUgfHwgJ05vIGxvZ3MuJyksXG4gICAgICB0YXAodmFsdWUgPT4ge1xuICAgICAgICB0aGlzLmFsbExvZ3MgPSBwYXJzZUxpbmVzKHZhbHVlKS5maWx0ZXIoKHsgZGF0YSB9KSA9PiBkYXRhLmxvZ2dlciA9PT0gJ2hlc3RpYV9lYXJ0aC5tb2RlbHMnKTtcbiAgICAgICAgdGhpcy51cGRhdGVDc3ZDb250ZW50KCk7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgoKSA9PiAodGhpcy5sb2FkaW5nID0gZmFsc2UpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNzdkNvbnRlbnQoKSB7XG4gICAgdGhpcy5jc3ZDb250ZW50ID0gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKFxuICAgICAgYGRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQobG9nVG9Dc3YodGhpcy5hbGxMb2dzKSl9YFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHlGaWx0ZXJzKCkge1xuICAgIHRoaXMubm9kZUxvZ0xpbmVzID0gdGhpcy5hbGxMb2dzXG4gICAgICAuZmlsdGVyKCh7IGxldmVsIH0pID0+IGxldmVscy5pbmRleE9mKGxldmVsKSA+PSBsZXZlbHMuaW5kZXhPZih0aGlzLnNlbGVjdGVkTGV2ZWwpKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHsgY29kZSB9KSA9PlxuICAgICAgICAgICghdGhpcy5tb2RlbEZpbHRlciB8fCBjb2RlLnRvTG9jYWxlTG93ZXJDYXNlKCkuaW5jbHVkZXMoYG1vZGVsPSR7dGhpcy5tb2RlbEZpbHRlci50b0xvd2VyQ2FzZSgpfWApKSAmJlxuICAgICAgICAgICghdGhpcy50ZXJtRmlsdGVyIHx8IGNvZGUudG9Mb2NhbGVMb3dlckNhc2UoKS5pbmNsdWRlcyhgdGVybT0ke3RoaXMudGVybUZpbHRlci50b0xvd2VyQ2FzZSgpfWApKVxuICAgICAgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImlzLXJlbGF0aXZlXCI+XG4gIDxkaXYgY2xhc3M9XCJjb3B5LWNsaXBib2FyZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBoYXMtYWRkb25zXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0ZpbHRlcnNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQgaXMtc2Vjb25kYXJ5IGlzLXNtYWxsXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwibW9kZWxGaWx0ZXJcIlxuICAgICAgICAgICAgaWQ9XCJtb2RlbEZpbHRlclwiXG4gICAgICAgICAgICAoaW5wdXQpPVwiYXBwbHlGaWx0ZXJzKClcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgYnkgTWV0aG9kIC8gTW9kZWxcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQgaXMtc2Vjb25kYXJ5IGlzLXNtYWxsXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVybUZpbHRlclwiXG4gICAgICAgICAgICBpZD1cInRlcm1GaWx0ZXJcIlxuICAgICAgICAgICAgKGlucHV0KT1cImFwcGx5RmlsdGVycygpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGJ5IFRlcm1cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNlY29uZGFyeSBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cImFwcGx5RmlsdGVycygpXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZExldmVsXCIgaWQ9XCJzZWxlY3RlZExldmVsXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxldmVsIG9mIExldmVsIHwga2V5c1wiIFt2YWx1ZV09XCJsZXZlbC52YWx1ZVwiPnt7IGxldmVsLnZhbHVlIH19PC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dGaWx0ZXJzID0gIXNob3dGaWx0ZXJzXCJcbiAgICAgICAgICBbbmdiVG9vbHRpcF09XCJzaG93RmlsdGVycyA/ICdIaWRlIGZpbHRlcnMnIDogJ1Nob3cgZmlsdGVycydcIlxuICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiPlxuICAgICAgICAgIDxmYS1pY29uIGljb249XCJmaWx0ZXJcIj48L2ZhLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgICA8aGUtY2xpcGJvYXJkXG4gICAgICAgICAgY2xpcGJvYXJkQ2xhc3M9XCJidXR0b24gaXMtc2Vjb25kYXJ5IGlzLXNtYWxsXCJcbiAgICAgICAgICBbdmFsdWVdPVwibm9kZUxvZyB8IGFzeW5jXCJcbiAgICAgICAgICBbaGlkZVRleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgW2ljb25dPVwiWydmYXInLCAnY2xvbmUnXVwiXG4gICAgICAgICAgc2l6ZT1cImxnXCJcbiAgICAgICAgICByb3RhdGU9XCIxODBcIj48L2hlLWNsaXBib2FyZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPGFcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1pbmZvIGlzLXNtYWxsXCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgIFtocmVmXT1cImNzdkNvbnRlbnRcIlxuICAgICAgICAgIFtkb3dubG9hZF09XCJmaWxlVG9FeHQobm9kZT8uWydAaWQnXSwgJ2NzdicpXCI+XG4gICAgICAgICAgPGZhLWljb24gaWNvbj1cImRvd25sb2FkXCI+PC9mYS1pY29uPlxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPHByZVxuICAgIGNsYXNzPVwicGwtMyBwdC0zIG1sLTNcIj48Y29kZSBjbGFzcz1cImlzLWJsb2NrIHt7bGluZS5jbGFzc319XCIgKm5nRm9yPVwibGV0IGxpbmUgb2Ygbm9kZUxvZ0xpbmVzXCI+e3tsaW5lLmRhdGEudGltZXN0YW1wfX0ge3soJ1snICsgbGluZS5kYXRhLmxldmVsICsgJ106JykucGFkRW5kKDksICcgJyl9fSB7e2xpbmUuZGF0YS5tZXNzYWdlfX08L2NvZGU+PC9wcmU+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -33,6 +33,7 @@ const additionalKeys = [
|
|
|
33
33
|
const tableKeys = [
|
|
34
34
|
'aniamals',
|
|
35
35
|
'inputs',
|
|
36
|
+
'properties',
|
|
36
37
|
'transformation',
|
|
37
38
|
'operation',
|
|
38
39
|
'impactAssessment',
|
|
@@ -79,4 +80,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImpor
|
|
|
79
80
|
}], dataState: [{
|
|
80
81
|
type: Input
|
|
81
82
|
}] } });
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS12YWx1ZS1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtdmFsdWUtZGV0YWlscy9ub2RlLXZhbHVlLWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS12YWx1ZS1kZXRhaWxzL25vZGUtdmFsdWUtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUdsRixPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFFN0IsT0FBTyxFQUFFLGlCQUFpQixFQUFnQixNQUFNLHlCQUF5QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7QUFFN0MsbURBQW1EO0FBQ25ELE1BQU0sY0FBYyxHQUFHO0lBQ3JCLEtBQUs7SUFDTCx3QkFBd0I7SUFDeEIsYUFBYTtJQUNiLFNBQVM7SUFDVCxrQkFBa0I7SUFDbEIsY0FBYztJQUNkLGlCQUFpQjtJQUNqQixNQUFNO0lBQ04sUUFBUTtJQUNSLFNBQVM7SUFDVCxhQUFhO0lBQ2IsT0FBTztJQUNQLFVBQVU7SUFDVixNQUFNO0lBQ04sU0FBUztJQUNULG9CQUFvQjtJQUNwQixXQUFXO0lBQ1gsa0JBQWtCO0lBQ2xCLFlBQVk7SUFDWixjQUFjO0lBQ2QsTUFBTTtDQUNQLENBQUM7QUFDRixNQUFNLFNBQVMsR0FBRztJQUNoQixVQUFVO0lBQ1YsUUFBUTtJQUNSLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsV0FBVztJQUNYLGtCQUFrQjtJQUNsQixPQUFPO0lBQ1AsWUFBWTtJQUNaLE9BQU87SUFDUCxhQUFhO0lBQ2IsWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixZQUFZO0lBQ1osWUFBWTtDQUNiLENBQUM7QUFRRixNQUFNLE9BQU8seUJBQXlCO0lBTnRDO1FBZ0JTLFlBQU8sR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUNwQixTQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZDLG1CQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLGNBQVMsR0FBRyxTQUFTLENBQUM7S0FpQjlCO0lBZkMsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxJQUFXLElBQUk7UUFDYixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxZQUFZLENBQUMsR0FBVztRQUM3QixPQUFPLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDeEYsQ0FBQzs4R0E3QlUseUJBQXlCO2tHQUF6Qix5QkFBeUIseUpDdkR0QyxpdURBc0RBOzsyRkRDYSx5QkFBeUI7a0JBTnJDLFNBQVM7K0JBQ0UsdUJBQXVCLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUlyQyxJQUFJO3NCQURiLEtBQUs7Z0JBR0ksUUFBUTtzQkFEakIsS0FBSztnQkFHSSxPQUFPO3NCQURoQixLQUFLO2dCQUdJLFNBQVM7c0JBRGxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhU3RhdGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2FwaSc7XG5pbXBvcnQgeyBOb2RlVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoLmdldCc7XG5cbmltcG9ydCB7IGdyb3VwcGVkVmFsdWVLZXlzLCBJR3JvdXBlZE5vZGUgfSBmcm9tICcuLi8uLi9jb21tb24vbm9kZS11dGlscyc7XG5pbXBvcnQgeyBiYXNlVXJsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcblxuLy8gVE9ETzogY29tcHV0ZSBmcm9tIHRoZSBsaXN0IG9mIHVuaXF1ZSBwcm9wZXJ0aWVzXG5jb25zdCBhZGRpdGlvbmFsS2V5cyA9IFtcbiAgJ2tleScsXG4gICdtZXRob2RNb2RlbERlc2NyaXB0aW9uJyxcbiAgJ2Rlc2NyaXB0aW9uJyxcbiAgJ3ByaW1hcnknLFxuICAnZW1pc3Npb25EdXJhdGlvbicsXG4gICdvYnNlcnZhdGlvbnMnLFxuICAnc3RhdHNEZWZpbml0aW9uJyxcbiAgJ3Rlcm0nLFxuICAnc291cmNlJyxcbiAgJ3ZhcmlldHknLFxuICAncmVsaWFiaWxpdHknLFxuICAncHJpY2UnLFxuICAnY3VycmVuY3knLFxuICAnY29zdCcsXG4gICdyZXZlbnVlJyxcbiAgJ2Vjb25vbWljVmFsdWVTaGFyZScsXG4gICdvcGVyYXRpb24nLFxuICAnaW1wYWN0QXNzZXNzbWVudCcsXG4gICdwcm9wZXJ0aWVzJyxcbiAgJ2lzQW5pbWFsRmVlZCcsXG4gICdmYXRlJ1xuXTtcbmNvbnN0IHRhYmxlS2V5cyA9IFtcbiAgJ2FuaWFtYWxzJyxcbiAgJ2lucHV0cycsXG4gICdwcm9wZXJ0aWVzJyxcbiAgJ3RyYW5zZm9ybWF0aW9uJyxcbiAgJ29wZXJhdGlvbicsXG4gICdpbXBhY3RBc3Nlc3NtZW50JyxcbiAgJ3ZhbHVlJyxcbiAgJ3Rlcm0udW5pdHMnLFxuICAnZGF0ZXMnLFxuICAnbWV0aG9kTW9kZWwnLFxuICAnbWV0aG9kVGllcicsXG4gICdzdGF0c0RlZmluaXRpb24nLFxuICAnZGVwdGhVcHBlcicsXG4gICdkZXB0aExvd2VyJ1xuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaGUtbm9kZS12YWx1ZS1kZXRhaWxzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUtdmFsdWUtZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25vZGUtdmFsdWUtZGV0YWlscy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBOb2RlVmFsdWVEZXRhaWxzQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGRhdGE/OiBJR3JvdXBlZE5vZGU8VD47XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBub2RlVHlwZT86IE5vZGVUeXBlO1xuICBASW5wdXQoKVxuICBwcm90ZWN0ZWQgZGF0YUtleT86IHN0cmluZztcbiAgQElucHV0KClcbiAgcHJvdGVjdGVkIGRhdGFTdGF0ZT86IERhdGFTdGF0ZTtcblxuICBwdWJsaWMgYmFzZVVybCA9IGJhc2VVcmwoKTtcbiAgcHVibGljIGtleXMgPSBbJ3ZhbHVlJywgLi4uZ3JvdXBwZWRWYWx1ZUtleXNdO1xuICBwdWJsaWMgYWRkaXRpb25hbEtleXMgPSBhZGRpdGlvbmFsS2V5cztcbiAgcHVibGljIHRhYmxlS2V5cyA9IHRhYmxlS2V5cztcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnRhYmxlS2V5cyA9IHRhYmxlS2V5cy5maWx0ZXIoa2V5ID0+ICh0aGlzLmRhdGE/Lm5vZGVzIHx8IFtdKS5zb21lKG5vZGUgPT4gISFnZXQobm9kZSwga2V5KSkpO1xuICB9XG5cbiAgcHVibGljIGdldCB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/Lm5vZGVzWzBdWydAdHlwZSddO1xuICB9XG5cbiAgcHVibGljIGdldCBzaG93SW5saW5lKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/Lm5vZGVzPy5sZW5ndGggPT09IDE7XG4gIH1cblxuICBwdWJsaWMgZGVmYXVsdFZhbHVlKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFsnaW1wYWN0QXNzZXNzbWVudCcsICd0cmFuc2Zvcm1hdGlvbiddLmluY2x1ZGVzKGtleSkgPyAnTi9BIChmcm9tIEN5Y2xlKScgOiAnJztcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqYmluZE9uY2U9XCJkYXRhXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93SW5saW5lOyBlbHNlIGFzVGFibGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5c1wiPlxuICAgICAgPGhlLWxpbmsta2V5LXZhbHVlXG4gICAgICAgIFtub2RlXT1cImRhdGEhLm5vZGVzWzBdXCJcbiAgICAgICAgW25vZGVUeXBlXT1cIm5vZGVUeXBlXCJcbiAgICAgICAgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGVcIlxuICAgICAgICBbZGF0YUtleV09XCJkYXRhS2V5XCJcbiAgICAgICAgW2tleV09XCJrZXlcIj48L2hlLWxpbmsta2V5LXZhbHVlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGtleSBvZiBhZGRpdGlvbmFsS2V5c1wiPlxuICAgICAgPGhlLWxpbmsta2V5LXZhbHVlXG4gICAgICAgIFtub2RlXT1cImRhdGEhLm5vZGVzWzBdXCJcbiAgICAgICAgW25vZGVUeXBlXT1cIm5vZGVUeXBlXCJcbiAgICAgICAgW2RhdGFTdGF0ZV09XCJkYXRhU3RhdGVcIlxuICAgICAgICBbZGF0YUtleV09XCJkYXRhS2V5XCJcbiAgICAgICAgW2tleV09XCJrZXlcIj48L2hlLWxpbmsta2V5LXZhbHVlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2FzVGFibGU+XG4gIDxoZS1saW5rLWtleS12YWx1ZVxuICAgIFtub2RlXT1cImRhdGEhLm5vZGVzWzBdXCJcbiAgICBbbm9kZVR5cGVdPVwibm9kZVR5cGVcIlxuICAgIFtkYXRhU3RhdGVdPVwiZGF0YVN0YXRlXCJcbiAgICBbZGF0YUtleV09XCJkYXRhS2V5XCJcbiAgICBrZXk9XCJ0ZXJtXCI+PC9oZS1saW5rLWtleS12YWx1ZT5cblxuICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyIG10LTJcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1kYXJrIGlzLW5hcnJvdyBpcy1zdHJpcGVkXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0aCAqbmdGb3I9XCJsZXQga2V5IG9mIHRhYmxlS2V5c1wiPlxuICAgICAgICAgIDxhIGNsYXNzPVwiaXMtZGFya1wiIFtocmVmXT1cImJhc2VVcmwgKyAnL3NjaGVtYS8nICsgdHlwZSArICcjJyArIGtleS5zcGxpdCgnLicpWzBdXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICA8Yj57eyBrZXkuaW5jbHVkZXMoJy4nKSA/IGtleS5zcGxpdCgnLicpWzFdIDoga2V5IH19PC9iPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC90aD5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgbm9kZSBvZiBkYXRhIS5ub2Rlc1wiPlxuICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQga2V5IG9mIHRhYmxlS2V5c1wiPlxuICAgICAgICAgICAgPGhlLWxpbmsta2V5LXZhbHVlXG4gICAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgICBbbm9kZVR5cGVdPVwibm9kZVR5cGVcIlxuICAgICAgICAgICAgICBbZGF0YVN0YXRlXT1cImRhdGFTdGF0ZVwiXG4gICAgICAgICAgICAgIFtkYXRhS2V5XT1cImRhdGFLZXlcIlxuICAgICAgICAgICAgICBba2V5XT1cImtleVwiXG4gICAgICAgICAgICAgIFtkZWZhdWx0VmFsdWVdPVwiZGVmYXVsdFZhbHVlKGtleSlcIj48L2hlLWxpbmsta2V5LXZhbHVlPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|