gitlab-ci-local 4.50.0 → 4.50.1
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/package.json +2 -3
- package/src/parser-includes.js +2 -2
- package/src/parser.js +2 -2
- package/src/schema/schema.json +19 -38
- package/src/utils.js +3 -3
- package/src/validator.js +4 -8
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "Tired of pushing to test your .gitlab-ci.yml?",
|
|
4
4
|
"main": "src/index.js",
|
|
5
5
|
"bin": "src/index.js",
|
|
6
|
-
"version": "4.50.
|
|
6
|
+
"version": "4.50.1",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"pkg-linux": "pkg src/index.js --public -t node18-linux-x64 -o bin/linux/gitlab-ci-local && chmod +x bin/linux/gitlab-ci-local && gzip -c bin/linux/gitlab-ci-local > bin/linux.gz",
|
|
9
9
|
"pkg-macos": "pkg src/index.js --public -t node18-macos-x64 -o bin/macos/gitlab-ci-local && gzip -c bin/macos/gitlab-ci-local > bin/macos.gz",
|
|
@@ -22,8 +22,7 @@
|
|
|
22
22
|
"dev": "touch .gitlab-ci.yml && nodemon -e ts --watch src --watch .gitlab-ci.yml --exec ts-node src/index.ts"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"ajv": "
|
|
26
|
-
"ajv-formats": "^3.0.1",
|
|
25
|
+
"ajv": "8.x.x",
|
|
27
26
|
"axios": "0.28.x",
|
|
28
27
|
"base64url": "3.x.x",
|
|
29
28
|
"camelcase": "6.x.x",
|
package/src/parser-includes.js
CHANGED
|
@@ -118,7 +118,7 @@ class ParserIncludes {
|
|
|
118
118
|
const files = [`${componentName}.yml`, `${componentName}/template.yml`, null];
|
|
119
119
|
for (const f of files) {
|
|
120
120
|
(0, assert_1.default)(f !== null, `This GitLab CI configuration is invalid: component: \`${value["component"]}\`. One of the file [${files}] must exists in \`${domain}/${projectPath}\``);
|
|
121
|
-
if (!(await utils_1.Utils.remoteFileExist(f, ref, domain, projectPath, gitData.remote.schema)))
|
|
121
|
+
if (!(await utils_1.Utils.remoteFileExist(cwd, f, ref, domain, projectPath, gitData.remote.schema, gitData.remote.port)))
|
|
122
122
|
continue;
|
|
123
123
|
const fileDoc = {
|
|
124
124
|
include: {
|
|
@@ -248,4 +248,4 @@ function validateIncludeLocal(filePath) {
|
|
|
248
248
|
(0, assert_1.default)(!filePath.startsWith("./"), `\`${filePath}\` for include:local is invalid. Gitlab does not support relative path (ie. cannot start with \`./\`).`);
|
|
249
249
|
(0, assert_1.default)(!filePath.includes(".."), `\`${filePath}\` for include:local is invalid. Gitlab does not support directory traversal.`);
|
|
250
250
|
}
|
|
251
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLWluY2x1ZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLWluY2x1ZGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQThCO0FBQzlCLHdEQUEwQjtBQUcxQixpREFBOEM7QUFDOUMsa0RBQTBCO0FBQzFCLHFDQUFnQztBQUNoQyxrREFBMEI7QUFDMUIsb0RBQTRCO0FBQzVCLGdEQUF3QjtBQVl4QixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsQ0FBQyxrR0FBa0c7QUFFL0gsTUFBYSxjQUFjO0lBQ2YsTUFBTSxDQUFDLEtBQUssR0FBVyxDQUFDLENBQUM7SUFFakMsTUFBTSxDQUFDLFVBQVU7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUUsVUFBZSxFQUFFLElBQStCO1FBQy9ELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUEsZ0JBQU0sRUFDRixJQUFJLENBQUMsS0FBSyxJQUFJLGVBQWUsR0FBRyxDQUFDLEVBQUUsK0JBQStCO1FBQ2xFLElBQUEsZUFBSyxFQUFBLG1FQUFtRSxlQUFlLGlDQUFpQyxDQUMzSCxDQUFDO1FBQ0YsSUFBSSxZQUFZLEdBQVUsRUFBRSxDQUFDO1FBQzdCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLEVBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBQyxHQUFHLElBQUksQ0FBQztRQUV0RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhFLHlFQUF5RTtRQUN6RSxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUks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LElBQUEsZ0JBQU0sRUFBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxRQUFRLHdHQUF3RyxDQUFDLENBQUM7SUFDMUosSUFBQSxnQkFBTSxFQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFFBQVEsK0VBQStFLENBQUMsQ0FBQztBQUNuSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi93cml0ZS1zdHJlYW1zXCI7XG5pbXBvcnQge0dpdERhdGF9IGZyb20gXCIuL2dpdC1kYXRhXCI7XG5pbXBvcnQgYXNzZXJ0LCB7QXNzZXJ0aW9uRXJyb3J9IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7UGFyc2VyfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCBnbG9iYnkgZnJvbSBcImdsb2JieVwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxudHlwZSBQYXJzZXJJbmNsdWRlc0luaXRPcHRpb25zID0ge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIHN0YXRlRGlyOiBzdHJpbmc7XG4gICAgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG4gICAgZ2l0RGF0YTogR2l0RGF0YTtcbiAgICBmZXRjaEluY2x1ZGVzOiBib29sZWFuO1xuICAgIHZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gICAgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuO1xufTtcblxuY29uc3QgTUFYSU1VTV9JTkNMVURFID0gMTUwOyAvLyBodHRwczovL2RvY3MuZ2l0bGFiLmNvbS9lZS9hZG1pbmlzdHJhdGlvbi9zZXR0aW5ncy9jb250aW51b3VzX2ludGVncmF0aW9uLmh0bWwjbWF4aW11bS1pbmNsdWRlc1xuXG5leHBvcnQgY2xhc3MgUGFyc2VySW5jbHVkZXMge1xuICAgIHByaXZhdGUgc3RhdGljIGNvdW50OiBudW1iZXIgPSAwO1xuXG4gICAgc3RhdGljIHJlc2V0Q291bnQgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgaW5pdCAoZ2l0bGFiRGF0YTogYW55LCBvcHRzOiBQYXJzZXJJbmNsdWRlc0luaXRPcHRpb25zKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICB0aGlzLmNvdW50Kys7XG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICAgIHRoaXMuY291bnQgPD0gTUFYSU1VTV9JTkNMVURFICsgMSwgLy8gMXN0IGluaXQgY2FsbCBpcyBub3QgY291bnRlZFxuICAgICAgICAgICAgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBNYXhpbXVtIG9mIHtibHVlQnJpZ2h0ICR7TUFYSU1VTV9JTkNMVURFfX0gbmVzdGVkIGluY2x1ZGVzIGFyZSBhbGxvd2VkIS5gXG4gICAgICAgICk7XG4gICAgICAgIGxldCBpbmNsdWRlRGF0YXM6IGFueVtdID0gW107XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGNvbnN0IHtzdGF0ZURpciwgY3dkLCBmZXRjaEluY2x1ZGVzLCBnaXREYXRhLCBleHBhbmRWYXJpYWJsZXN9ID0gb3B0cztcblxuICAgICAgICBjb25zdCBpbmNsdWRlID0gdGhpcy5leHBhbmRJbmNsdWRlKGdpdGxhYkRhdGE/LmluY2x1ZGUsIG9wdHMudmFyaWFibGVzKTtcblxuICAgICAgICAvLyBGaW5kIGZpbGVzIHRvIGZldGNoIGZyb20gcmVtb3RlIGFuZCBwbGFjZSBpbiAuZ2l0bGFiLWNpLWxvY2FsL2luY2x1ZGVzXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaW5jbHVkZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlW1wicnVsZXNcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmNsdWRlX3J1bGVzID0gdmFsdWVbXCJydWxlc1wiXTtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlc1Jlc3VsdCA9IFV0aWxzLmdldFJ1bGVzUmVzdWx0KHtjd2QsIHJ1bGVzOiBpbmNsdWRlX3J1bGVzLCB2YXJpYWJsZXM6IG9wdHMudmFyaWFibGVzfSwgZ2l0RGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKHJ1bGVzUmVzdWx0LndoZW4gPT09IFwibmV2ZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWVbXCJsb2NhbFwiXSkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlSW5jbHVkZUxvY2FsKHZhbHVlW1wibG9jYWxcIl0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZ2xvYmJ5KHZhbHVlW1wibG9jYWxcIl0ucmVwbGFjZSgvXlxcLy8sIFwiXCIpLCB7ZG90OiB0cnVlLCBjd2R9KTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHttZXNzYWdlOiBgTG9jYWwgaW5jbHVkZSBmaWxlIGNhbm5vdCBiZSBmb3VuZCAke3ZhbHVlW1wibG9jYWxcIl19YH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJmaWxlXCJdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlVmFsdWUgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZVtcImZpbGVcIl0pID8gdmFsdWVbXCJmaWxlXCJdIDogW3ZhbHVlW1wiZmlsZVwiXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmRvd25sb2FkSW5jbHVkZVByb2plY3RGaWxlKGN3ZCwgc3RhdGVEaXIsIHZhbHVlW1wicHJvamVjdFwiXSwgdmFsdWVbXCJyZWZcIl0gfHwgXCJIRUFEXCIsIGZpbGVWYWx1ZSwgZ2l0RGF0YSwgZmV0Y2hJbmNsdWRlcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJ0ZW1wbGF0ZVwiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtwcm9qZWN0LCByZWYsIGZpbGUsIGRvbWFpbn0gPSB0aGlzLmNvdmVydFRlbXBsYXRlVG9Qcm9qZWN0RmlsZSh2YWx1ZVtcInRlbXBsYXRlXCJdKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly8ke2RvbWFpbn0vJHtwcm9qZWN0fS8tL3Jhdy8ke3JlZn0vJHtmaWxlfWA7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmRvd25sb2FkSW5jbHVkZVJlbW90ZShjd2QsIHN0YXRlRGlyLCB1cmwsIGZldGNoSW5jbHVkZXMpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJyZW1vdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuZG93bmxvYWRJbmNsdWRlUmVtb3RlKGN3ZCwgc3RhdGVEaXIsIHZhbHVlW1wicmVtb3RlXCJdLCBmZXRjaEluY2x1ZGVzKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGluY2x1ZGUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVtcInJ1bGVzXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5jbHVkZV9ydWxlcyA9IHZhbHVlW1wicnVsZXNcIl07XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZXNSZXN1bHQgPSBVdGlscy5nZXRSdWxlc1Jlc3VsdCh7Y3dkLCBydWxlczogaW5jbHVkZV9ydWxlcywgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlc30sIGdpdERhdGEpO1xuICAgICAgICAgICAgICAgIGlmIChydWxlc1Jlc3VsdC53aGVuID09PSBcIm5ldmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlW1wibG9jYWxcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGdsb2JieShbdmFsdWVbXCJsb2NhbFwiXS5yZXBsYWNlKC9eXFwvLywgXCJcIildLCB7ZG90OiB0cnVlLCBjd2R9KTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxvY2FsRmlsZSBvZiBmaWxlcykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKGAke2N3ZH0vJHtsb2NhbEZpbGV9YCwge2lucHV0czogdmFsdWUuaW5wdXRzIHx8IHt9fSwgZXhwYW5kVmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZURhdGFzID0gaW5jbHVkZURhdGFzLmNvbmNhdChhd2FpdCB0aGlzLmluaXQoY29udGVudCwgb3B0cykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJwcm9qZWN0XCJdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWxlVmFsdWUgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZVtcImZpbGVcIl0pID8gdmFsdWVbXCJmaWxlXCJdIDogW3ZhbHVlW1wiZmlsZVwiXV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZURvYyA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChcbiAgICAgICAgICAgICAgICAgICAgICAgIGAke2N3ZH0vJHtzdGF0ZURpcn0vaW5jbHVkZXMvJHtnaXREYXRhLnJlbW90ZS5ob3N0fS8ke3ZhbHVlW1wicHJvamVjdFwiXX0vJHt2YWx1ZVtcInJlZlwiXSB8fCBcIkhFQURcIn0vJHtmaWxlVmFsdWV9YFxuICAgICAgICAgICAgICAgICAgICAgICAgLCB7aW5wdXRzOiB2YWx1ZS5pbnB1dHMgfHwge319XG4gICAgICAgICAgICAgICAgICAgICAgICAsIGV4cGFuZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4cGFuZCBsb2NhbCBpbmNsdWRlcyBpbnNpZGUgYSBcInByb2plY3RcIi1saWtlIGluY2x1ZGVcbiAgICAgICAgICAgICAgICAgICAgZmlsZURvY1tcImluY2x1ZGVcIl0gPSB0aGlzLmV4cGFuZEluY2x1ZGUoZmlsZURvY1tcImluY2x1ZGVcIl0sIG9wdHMudmFyaWFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgZmlsZURvY1tcImluY2x1ZGVcIl0uZm9yRWFjaCgoaW5uZXI6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlubmVyW1wibG9jYWxcIl0pIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVEb2NbXCJpbmNsdWRlXCJdW2ldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3Q6IHZhbHVlW1wicHJvamVjdFwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBpbm5lcltcImxvY2FsXCJdLnJlcGxhY2UoL15cXC8vLCBcIlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY6IHZhbHVlW1wicmVmXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZURhdGFzID0gaW5jbHVkZURhdGFzLmNvbmNhdChhd2FpdCB0aGlzLmluaXQoZmlsZURvYywgb3B0cykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJjb21wb25lbnRcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7ZG9tYWluLCBwcm9qZWN0UGF0aCwgY29tcG9uZW50TmFtZSwgcmVmfSA9IHRoaXMucGFyc2VJbmNsdWRlQ29tcG9uZW50KHZhbHVlW1wiY29tcG9uZW50XCJdKTtcbiAgICAgICAgICAgICAgICAvLyBjb252ZXJ0cyBjb21wb25lbnQgdG8gcHJvamVjdFxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gW2Ake2NvbXBvbmVudE5hbWV9LnltbGAsIGAke2NvbXBvbmVudE5hbWV9L3RlbXBsYXRlLnltbGAsIG51bGxdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZiBvZiBmaWxlcykge1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZiAhPT0gbnVsbCwgYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogY29tcG9uZW50OiBcXGAke3ZhbHVlW1wiY29tcG9uZW50XCJdfVxcYC4gT25lIG9mIHRoZSBmaWxlIFske2ZpbGVzfV0gbXVzdCBleGlzdHMgaW4gXFxgJHtkb21haW59LyR7cHJvamVjdFBhdGh9XFxgYCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGF3YWl0IFV0aWxzLnJlbW90ZUZpbGVFeGlzdChmLCByZWYsIGRvbWFpbiwgcHJvamVjdFBhdGgsIGdpdERhdGEucmVtb3RlLnNjaGVtYSkpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZURvYyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0OiBwcm9qZWN0UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogcmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZURhdGFzID0gaW5jbHVkZURhdGFzLmNvbmNhdChhd2FpdCB0aGlzLmluaXQoZmlsZURvYywgb3B0cykpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1widGVtcGxhdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7cHJvamVjdCwgcmVmLCBmaWxlLCBkb21haW59ID0gdGhpcy5jb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUodmFsdWVbXCJ0ZW1wbGF0ZVwiXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZnNVcmwgPSBVdGlscy5mc1VybChgaHR0cHM6Ly8ke2RvbWFpbn0vJHtwcm9qZWN0fS8tL3Jhdy8ke3JlZn0vJHtmaWxlfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEb2MgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoXG4gICAgICAgICAgICAgICAgICAgIGAke2N3ZH0vJHtzdGF0ZURpcn0vaW5jbHVkZXMvJHtmc1VybH1gLCB7aW5wdXRzOiB2YWx1ZS5pbnB1dHMgfHwge319LCBleHBhbmRWYXJpYWJsZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGZpbGVEb2MsIG9wdHMpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJyZW1vdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmc1VybCA9IFV0aWxzLmZzVXJsKHZhbHVlW1wicmVtb3RlXCJdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRG9jID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKFxuICAgICAgICAgICAgICAgICAgICBgJHtjd2R9LyR7c3RhdGVEaXJ9L2luY2x1ZGVzLyR7ZnNVcmx9YCwge2lucHV0czogdmFsdWUuaW5wdXRzIHx8IHt9fSwgZXhwYW5kVmFyaWFibGVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpbmNsdWRlRGF0YXMgPSBpbmNsdWRlRGF0YXMuY29uY2F0KGF3YWl0IHRoaXMuaW5pdChmaWxlRG9jLCBvcHRzKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYERpZG4ndCB1bmRlcnN0YW5kIGluY2x1ZGUgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5jbHVkZURhdGFzLnB1c2goZ2l0bGFiRGF0YSk7XG4gICAgICAgIHJldHVybiBpbmNsdWRlRGF0YXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGV4cGFuZEluY2x1ZGUgKGk6IGFueSwgdmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSk6IGFueVtdIHtcbiAgICAgICAgbGV0IGluY2x1ZGUgPSBpIHx8IFtdO1xuICAgICAgICBpZiAoaW5jbHVkZSAmJiBpbmNsdWRlLmxlbmd0aCA9PSBudWxsKSB7XG4gICAgICAgICAgICBpbmNsdWRlID0gWyBpIF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBpbmNsdWRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpbmNsdWRlID0gW2luY2x1ZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhpbmNsdWRlKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIiAmJiAoZW50cnkuc3RhcnRzV2l0aChcImh0dHBzOlwiKSB8fCBlbnRyeS5zdGFydHNXaXRoKFwiaHR0cDpcIikpKSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZVtpbmRleF0gPSB7XCJyZW1vdGVcIjogZW50cnl9O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlW2luZGV4XSA9IHtcImxvY2FsXCI6IGVudHJ5fTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZVtpbmRleF0gPSBlbnRyeTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBpbmNsdWRlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeVtrZXldID0gVXRpbHMuZXhwYW5kVGV4dCh2YWx1ZSwgdmFyaWFibGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbmNsdWRlO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUgKHRlbXBsYXRlOiBzdHJpbmcpOiB7cHJvamVjdDogc3RyaW5nOyByZWY6IHN0cmluZzsgZmlsZTogc3RyaW5nOyBkb21haW46IHN0cmluZ30ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9tYWluOiBcImdpdGxhYi5jb21cIixcbiAgICAgICAgICAgIHByb2plY3Q6IFwiZ2l0bGFiLW9yZy9naXRsYWJcIixcbiAgICAgICAgICAgIHJlZjogXCJIRUFEXCIsXG4gICAgICAgICAgICBmaWxlOiBgbGliL2dpdGxhYi9jaS90ZW1wbGF0ZXMvJHt0ZW1wbGF0ZX1gLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZUluY2x1ZGVDb21wb25lbnQgKGNvbXBvbmVudDogc3RyaW5nKToge2RvbWFpbjogc3RyaW5nOyBwcm9qZWN0UGF0aDogc3RyaW5nOyBjb21wb25lbnROYW1lOiBzdHJpbmc7IHJlZjogc3RyaW5nfSB7XG4gICAgICAgIGFzc2VydCghY29tcG9uZW50LmluY2x1ZGVzKFwiOi8vXCIpLCBgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBjb21wb25lbnQ6IFxcYCR7Y29tcG9uZW50fVxcYCBzaG91bGQgbm90IGNvbnRhaW4gcHJvdG9jb2xgKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKD88ZG9tYWluPlteL1xcc10rKVxcLyg/PHByb2plY3RQYXRoPi4rKVxcLyg/PGNvbXBvbmVudE5hbWU+W15AXSspQCg/PHJlZj4uKykvOyAvLyByZWdleHIuY29tLzd2N2htXG4gICAgICAgIGNvbnN0IGdpdFJlbW90ZU1hdGNoID0gcGF0dGVybi5leGVjKGNvbXBvbmVudCk7XG5cbiAgICAgICAgaWYgKGdpdFJlbW90ZU1hdGNoPy5ncm91cHMgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKGBUaGlzIGlzIGEgYnVnLCBwbGVhc2UgY3JlYXRlIGEgZ2l0aHViIGlzc3VlIGlmIHRoaXMgaXMgc29tZXRoaW5nIHlvdSdyZSBleHBlY3RpbmcgdG8gd29yay4gaW5wdXQ6ICR7Y29tcG9uZW50fWApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9tYWluOiBnaXRSZW1vdGVNYXRjaC5ncm91cHNbXCJkb21haW5cIl0sXG4gICAgICAgICAgICBwcm9qZWN0UGF0aDogZ2l0UmVtb3RlTWF0Y2guZ3JvdXBzW1wicHJvamVjdFBhdGhcIl0sXG4gICAgICAgICAgICBjb21wb25lbnROYW1lOiBgdGVtcGxhdGVzLyR7Z2l0UmVtb3RlTWF0Y2guZ3JvdXBzW1wiY29tcG9uZW50TmFtZVwiXX1gLFxuICAgICAgICAgICAgcmVmOiBnaXRSZW1vdGVNYXRjaC5ncm91cHNbXCJyZWZcIl0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGRvd25sb2FkSW5jbHVkZVJlbW90ZSAoY3dkOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIHVybDogc3RyaW5nLCBmZXRjaEluY2x1ZGVzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGZzVXJsID0gVXRpbHMuZnNVcmwodXJsKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vaW5jbHVkZXMvJHtmc1VybH1gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHModGFyZ2V0KSAmJiAhZmV0Y2hJbmNsdWRlcykgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MuZ2V0KHVybCk7XG4gICAgICAgICAgICBhd2FpdCBmcy5vdXRwdXRGaWxlKHRhcmdldCwgcmVzLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6IGBSZW1vdGUgaW5jbHVkZSBjb3VsZCBub3QgYmUgZmV0Y2hlZCAke3VybH1cXG4ke2V9YH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGRvd25sb2FkSW5jbHVkZVByb2plY3RGaWxlIChjd2Q6IHN0cmluZywgc3RhdGVEaXI6IHN0cmluZywgcHJvamVjdDogc3RyaW5nLCByZWY6IHN0cmluZywgZmlsZTogc3RyaW5nLCBnaXREYXRhOiBHaXREYXRhLCBmZXRjaEluY2x1ZGVzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlbW90ZSA9IGdpdERhdGEucmVtb3RlO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZSgvXlxcLysvLCBcIlwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGAke3N0YXRlRGlyfS9pbmNsdWRlcy8ke3JlbW90ZS5ob3N0fS8ke3Byb2plY3R9LyR7cmVmfWA7XG4gICAgICAgICAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhgJHtjd2R9LyR7dGFyZ2V0fS8ke25vcm1hbGl6ZWRGaWxlfWApICYmICFmZXRjaEluY2x1ZGVzKSByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChyZW1vdGUuc2NoZW1hLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gXCJ0bXAtXCIgKyBNYXRoLnJhbmRvbSgpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmRpcm5hbWUoYCR7Y3dkfS8ke3RhcmdldH0vJHtub3JtYWxpemVkRmlsZX1gKSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgXG4gICAgICAgICAgICAgICAgICAgIGNkICR7Y3dkfS8ke3N0YXRlRGlyfSBcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBnaXQgY2xvbmUgLS1icmFuY2ggXCIke3JlZn1cIiAtbiAtLWRlcHRoPTEgLS1maWx0ZXI9dHJlZTowIFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtyZW1vdGUuc2NoZW1hfTovLyR7cmVtb3RlLmhvc3R9LyR7cHJvamVjdH0uZ2l0IFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjd2R9LyR7dGFyZ2V0fS4ke2V4dH0gXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2QgJHtjd2R9LyR7dGFyZ2V0fS4ke2V4dH0gXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgLS1uby1jb25lICR7bm9ybWFsaXplZEZpbGV9IFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGdpdCBjaGVja291dCBcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBjZCAke2N3ZH0vJHtzdGF0ZURpcn0gXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgY3AgJHtjd2R9LyR7dGFyZ2V0fS4ke2V4dH0vJHtub3JtYWxpemVkRmlsZX0gXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjd2R9LyR7dGFyZ2V0fS8ke25vcm1hbGl6ZWRGaWxlfVxuICAgICAgICAgICAgICAgICAgICBgLCBjd2QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYCR7Y3dkfS8ke3RhcmdldH1gKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5iYXNoKGBzZXQgLWVvdSBwaXBlZmFpbDsgZ2l0IGFyY2hpdmUgLS1yZW1vdGU9c3NoOi8vZ2l0QCR7cmVtb3RlLmhvc3R9OiR7cmVtb3RlLnBvcnR9LyR7cHJvamVjdH0uZ2l0ICR7cmVmfSAke25vcm1hbGl6ZWRGaWxlfSB8IHRhciAtZiAtIC14QyAke3RhcmdldH0vYCwgY3dkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHttZXNzYWdlOiBgUHJvamVjdCBpbmNsdWRlIGNvdWxkIG5vdCBiZSBmZXRjaGVkIHsgcHJvamVjdDogJHtwcm9qZWN0fSwgcmVmOiAke3JlZn0sIGZpbGU6ICR7bm9ybWFsaXplZEZpbGV9IH1cXG4ke2V9YH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUluY2x1ZGVMb2NhbCAoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIGFzc2VydCghZmlsZVBhdGguc3RhcnRzV2l0aChcIi4vXCIpLCBgXFxgJHtmaWxlUGF0aH1cXGAgZm9yIGluY2x1ZGU6bG9jYWwgaXMgaW52YWxpZC4gR2l0bGFiIGRvZXMgbm90IHN1cHBvcnQgcmVsYXRpdmUgcGF0aCAoaWUuIGNhbm5vdCBzdGFydCB3aXRoIFxcYC4vXFxgKS5gKTtcbiAgICBhc3NlcnQoIWZpbGVQYXRoLmluY2x1ZGVzKFwiLi5cIiksIGBcXGAke2ZpbGVQYXRofVxcYCBmb3IgaW5jbHVkZTpsb2NhbCBpcyBpbnZhbGlkLiBHaXRsYWIgZG9lcyBub3Qgc3VwcG9ydCBkaXJlY3RvcnkgdHJhdmVyc2FsLmApO1xufVxuIl19
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLWluY2x1ZGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLWluY2x1ZGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQThCO0FBQzlCLHdEQUEwQjtBQUcxQixpREFBOEM7QUFDOUMsa0RBQTBCO0FBQzFCLHFDQUFnQztBQUNoQyxrREFBMEI7QUFDMUIsb0RBQTRCO0FBQzVCLGdEQUF3QjtBQVl4QixNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsQ0FBQyxrR0FBa0c7QUFFL0gsTUFBYSxjQUFjO0lBQ2YsTUFBTSxDQUFDLEtBQUssR0FBVyxDQUFDLENBQUM7SUFFakMsTUFBTSxDQUFDLFVBQVU7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUUsVUFBZSxFQUFFLElBQStCO1FBQy9ELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUEsZ0JBQU0sRUFDRixJQUFJLENBQUMsS0FBSyxJQUFJLGVBQWUsR0FBRyxDQUFDLEVBQUUsK0JBQStCO1FBQ2xFLElBQUEsZUFBSyxFQUFBLG1FQUFtRSxlQUFlLGlDQUFpQyxDQUMzSCxDQUFDO1FBQ0YsSUFBSSxZQUFZLEdBQVUsRUFBRSxDQUFDO1FBQzdCLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLEVBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBQyxHQUFHLElBQUksQ0FBQztRQUV0RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhFLHlFQUF5RTtRQUN6RSxLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUks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d0NBeU5DO0FBRUQsU0FBUyxvQkFBb0IsQ0FBRSxRQUFnQjtJQUMzQyxJQUFBLGdCQUFNLEVBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUSx3R0FBd0csQ0FBQyxDQUFDO0lBQzFKLElBQUEsZ0JBQU0sRUFBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxRQUFRLCtFQUErRSxDQUFDLENBQUM7QUFDbkksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VXRpbHN9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQge1dyaXRlU3RyZWFtc30gZnJvbSBcIi4vd3JpdGUtc3RyZWFtc1wiO1xuaW1wb3J0IHtHaXREYXRhfSBmcm9tIFwiLi9naXQtZGF0YVwiO1xuaW1wb3J0IGFzc2VydCwge0Fzc2VydGlvbkVycm9yfSBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQge1BhcnNlcn0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgZ2xvYmJ5IGZyb20gXCJnbG9iYnlcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbnR5cGUgUGFyc2VySW5jbHVkZXNJbml0T3B0aW9ucyA9IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBzdGF0ZURpcjogc3RyaW5nO1xuICAgIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zO1xuICAgIGdpdERhdGE6IEdpdERhdGE7XG4gICAgZmV0Y2hJbmNsdWRlczogYm9vbGVhbjtcbiAgICB2YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbjtcbn07XG5cbmNvbnN0IE1BWElNVU1fSU5DTFVERSA9IDE1MDsgLy8gaHR0cHM6Ly9kb2NzLmdpdGxhYi5jb20vZWUvYWRtaW5pc3RyYXRpb24vc2V0dGluZ3MvY29udGludW91c19pbnRlZ3JhdGlvbi5odG1sI21heGltdW0taW5jbHVkZXNcblxuZXhwb3J0IGNsYXNzIFBhcnNlckluY2x1ZGVzIHtcbiAgICBwcml2YXRlIHN0YXRpYyBjb3VudDogbnVtYmVyID0gMDtcblxuICAgIHN0YXRpYyByZXNldENvdW50ICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDA7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGluaXQgKGdpdGxhYkRhdGE6IGFueSwgb3B0czogUGFyc2VySW5jbHVkZXNJbml0T3B0aW9ucyk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgdGhpcy5jb3VudCsrO1xuICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICB0aGlzLmNvdW50IDw9IE1BWElNVU1fSU5DTFVERSArIDEsIC8vIDFzdCBpbml0IGNhbGwgaXMgbm90IGNvdW50ZWRcbiAgICAgICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogTWF4aW11bSBvZiB7Ymx1ZUJyaWdodCAke01BWElNVU1fSU5DTFVERX19IG5lc3RlZCBpbmNsdWRlcyBhcmUgYWxsb3dlZCEuYFxuICAgICAgICApO1xuICAgICAgICBsZXQgaW5jbHVkZURhdGFzOiBhbnlbXSA9IFtdO1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICBjb25zdCB7c3RhdGVEaXIsIGN3ZCwgZmV0Y2hJbmNsdWRlcywgZ2l0RGF0YSwgZXhwYW5kVmFyaWFibGVzfSA9IG9wdHM7XG5cbiAgICAgICAgY29uc3QgaW5jbHVkZSA9IHRoaXMuZXhwYW5kSW5jbHVkZShnaXRsYWJEYXRhPy5pbmNsdWRlLCBvcHRzLnZhcmlhYmxlcyk7XG5cbiAgICAgICAgLy8gRmluZCBmaWxlcyB0byBmZXRjaCBmcm9tIHJlbW90ZSBhbmQgcGxhY2UgaW4gLmdpdGxhYi1jaS1sb2NhbC9pbmNsdWRlc1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGluY2x1ZGUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVtcInJ1bGVzXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5jbHVkZV9ydWxlcyA9IHZhbHVlW1wicnVsZXNcIl07XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZXNSZXN1bHQgPSBVdGlscy5nZXRSdWxlc1Jlc3VsdCh7Y3dkLCBydWxlczogaW5jbHVkZV9ydWxlcywgdmFyaWFibGVzOiBvcHRzLnZhcmlhYmxlc30sIGdpdERhdGEpO1xuICAgICAgICAgICAgICAgIGlmIChydWxlc1Jlc3VsdC53aGVuID09PSBcIm5ldmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZhbHVlW1wibG9jYWxcIl0pIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZUluY2x1ZGVMb2NhbCh2YWx1ZVtcImxvY2FsXCJdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGdsb2JieSh2YWx1ZVtcImxvY2FsXCJdLnJlcGxhY2UoL15cXC8vLCBcIlwiKSwge2RvdDogdHJ1ZSwgY3dkfSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYExvY2FsIGluY2x1ZGUgZmlsZSBjYW5ub3QgYmUgZm91bmQgJHt2YWx1ZVtcImxvY2FsXCJdfWB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wiZmlsZVwiXSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZVZhbHVlIG9mIEFycmF5LmlzQXJyYXkodmFsdWVbXCJmaWxlXCJdKSA/IHZhbHVlW1wiZmlsZVwiXSA6IFt2YWx1ZVtcImZpbGVcIl1dKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5kb3dubG9hZEluY2x1ZGVQcm9qZWN0RmlsZShjd2QsIHN0YXRlRGlyLCB2YWx1ZVtcInByb2plY3RcIl0sIHZhbHVlW1wicmVmXCJdIHx8IFwiSEVBRFwiLCBmaWxlVmFsdWUsIGdpdERhdGEsIGZldGNoSW5jbHVkZXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1widGVtcGxhdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7cHJvamVjdCwgcmVmLCBmaWxlLCBkb21haW59ID0gdGhpcy5jb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUodmFsdWVbXCJ0ZW1wbGF0ZVwiXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gYGh0dHBzOi8vJHtkb21haW59LyR7cHJvamVjdH0vLS9yYXcvJHtyZWZ9LyR7ZmlsZX1gO1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5kb3dubG9hZEluY2x1ZGVSZW1vdGUoY3dkLCBzdGF0ZURpciwgdXJsLCBmZXRjaEluY2x1ZGVzKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wicmVtb3RlXCJdKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmRvd25sb2FkSW5jbHVkZVJlbW90ZShjd2QsIHN0YXRlRGlyLCB2YWx1ZVtcInJlbW90ZVwiXSwgZmV0Y2hJbmNsdWRlcykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBpbmNsdWRlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVbXCJydWxlc1wiXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluY2x1ZGVfcnVsZXMgPSB2YWx1ZVtcInJ1bGVzXCJdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJ1bGVzUmVzdWx0ID0gVXRpbHMuZ2V0UnVsZXNSZXN1bHQoe2N3ZCwgcnVsZXM6IGluY2x1ZGVfcnVsZXMsIHZhcmlhYmxlczogb3B0cy52YXJpYWJsZXN9LCBnaXREYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAocnVsZXNSZXN1bHQud2hlbiA9PT0gXCJuZXZlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZVtcImxvY2FsXCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBnbG9iYnkoW3ZhbHVlW1wibG9jYWxcIl0ucmVwbGFjZSgvXlxcLy8sIFwiXCIpXSwge2RvdDogdHJ1ZSwgY3dkfSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBsb2NhbEZpbGUgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9LyR7bG9jYWxGaWxlfWAsIHtpbnB1dHM6IHZhbHVlLmlucHV0cyB8fCB7fX0sIGV4cGFuZFZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGNvbnRlbnQsIG9wdHMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wicHJvamVjdFwiXSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZVZhbHVlIG9mIEFycmF5LmlzQXJyYXkodmFsdWVbXCJmaWxlXCJdKSA/IHZhbHVlW1wiZmlsZVwiXSA6IFt2YWx1ZVtcImZpbGVcIl1dKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEb2MgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoXG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtjd2R9LyR7c3RhdGVEaXJ9L2luY2x1ZGVzLyR7Z2l0RGF0YS5yZW1vdGUuaG9zdH0vJHt2YWx1ZVtcInByb2plY3RcIl19LyR7dmFsdWVbXCJyZWZcIl0gfHwgXCJIRUFEXCJ9LyR7ZmlsZVZhbHVlfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICwge2lucHV0czogdmFsdWUuaW5wdXRzIHx8IHt9fVxuICAgICAgICAgICAgICAgICAgICAgICAgLCBleHBhbmRWYXJpYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHBhbmQgbG9jYWwgaW5jbHVkZXMgaW5zaWRlIGEgXCJwcm9qZWN0XCItbGlrZSBpbmNsdWRlXG4gICAgICAgICAgICAgICAgICAgIGZpbGVEb2NbXCJpbmNsdWRlXCJdID0gdGhpcy5leHBhbmRJbmNsdWRlKGZpbGVEb2NbXCJpbmNsdWRlXCJdLCBvcHRzLnZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVEb2NbXCJpbmNsdWRlXCJdLmZvckVhY2goKGlubmVyOiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbm5lcltcImxvY2FsXCJdKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlRG9jW1wiaW5jbHVkZVwiXVtpXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0OiB2YWx1ZVtcInByb2plY3RcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZTogaW5uZXJbXCJsb2NhbFwiXS5yZXBsYWNlKC9eXFwvLywgXCJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiB2YWx1ZVtcInJlZlwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGZpbGVEb2MsIG9wdHMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1wiY29tcG9uZW50XCJdKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qge2RvbWFpbiwgcHJvamVjdFBhdGgsIGNvbXBvbmVudE5hbWUsIHJlZn0gPSB0aGlzLnBhcnNlSW5jbHVkZUNvbXBvbmVudCh2YWx1ZVtcImNvbXBvbmVudFwiXSk7XG4gICAgICAgICAgICAgICAgLy8gY29udmVydHMgY29tcG9uZW50IHRvIHByb2plY3RcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlcyA9IFtgJHtjb21wb25lbnROYW1lfS55bWxgLCBgJHtjb21wb25lbnROYW1lfS90ZW1wbGF0ZS55bWxgLCBudWxsXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGYgIT09IG51bGwsIGBUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IGNvbXBvbmVudDogXFxgJHt2YWx1ZVtcImNvbXBvbmVudFwiXX1cXGAuIE9uZSBvZiB0aGUgZmlsZSBbJHtmaWxlc31dIG11c3QgZXhpc3RzIGluIFxcYCR7ZG9tYWlufS8ke3Byb2plY3RQYXRofVxcYGApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShhd2FpdCBVdGlscy5yZW1vdGVGaWxlRXhpc3QoY3dkLCBmLCByZWYsIGRvbWFpbiwgcHJvamVjdFBhdGgsIGdpdERhdGEucmVtb3RlLnNjaGVtYSwgZ2l0RGF0YS5yZW1vdGUucG9ydCkpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZURvYyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0OiBwcm9qZWN0UGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogcmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZURhdGFzID0gaW5jbHVkZURhdGFzLmNvbmNhdChhd2FpdCB0aGlzLmluaXQoZmlsZURvYywgb3B0cykpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlW1widGVtcGxhdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7cHJvamVjdCwgcmVmLCBmaWxlLCBkb21haW59ID0gdGhpcy5jb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUodmFsdWVbXCJ0ZW1wbGF0ZVwiXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZnNVcmwgPSBVdGlscy5mc1VybChgaHR0cHM6Ly8ke2RvbWFpbn0vJHtwcm9qZWN0fS8tL3Jhdy8ke3JlZn0vJHtmaWxlfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVEb2MgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoXG4gICAgICAgICAgICAgICAgICAgIGAke2N3ZH0vJHtzdGF0ZURpcn0vaW5jbHVkZXMvJHtmc1VybH1gLCB7aW5wdXRzOiB2YWx1ZS5pbnB1dHMgfHwge319LCBleHBhbmRWYXJpYWJsZXNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGluY2x1ZGVEYXRhcyA9IGluY2x1ZGVEYXRhcy5jb25jYXQoYXdhaXQgdGhpcy5pbml0KGZpbGVEb2MsIG9wdHMpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVbXCJyZW1vdGVcIl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmc1VybCA9IFV0aWxzLmZzVXJsKHZhbHVlW1wicmVtb3RlXCJdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlRG9jID0gYXdhaXQgUGFyc2VyLmxvYWRZYW1sKFxuICAgICAgICAgICAgICAgICAgICBgJHtjd2R9LyR7c3RhdGVEaXJ9L2luY2x1ZGVzLyR7ZnNVcmx9YCwge2lucHV0czogdmFsdWUuaW5wdXRzIHx8IHt9fSwgZXhwYW5kVmFyaWFibGVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpbmNsdWRlRGF0YXMgPSBpbmNsdWRlRGF0YXMuY29uY2F0KGF3YWl0IHRoaXMuaW5pdChmaWxlRG9jLCBvcHRzKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7bWVzc2FnZTogYERpZG4ndCB1bmRlcnN0YW5kIGluY2x1ZGUgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5jbHVkZURhdGFzLnB1c2goZ2l0bGFiRGF0YSk7XG4gICAgICAgIHJldHVybiBpbmNsdWRlRGF0YXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGV4cGFuZEluY2x1ZGUgKGk6IGFueSwgdmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSk6IGFueVtdIHtcbiAgICAgICAgbGV0IGluY2x1ZGUgPSBpIHx8IFtdO1xuICAgICAgICBpZiAoaW5jbHVkZSAmJiBpbmNsdWRlLmxlbmd0aCA9PSBudWxsKSB7XG4gICAgICAgICAgICBpbmNsdWRlID0gWyBpIF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBpbmNsdWRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBpbmNsdWRlID0gW2luY2x1ZGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhpbmNsdWRlKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIiAmJiAoZW50cnkuc3RhcnRzV2l0aChcImh0dHBzOlwiKSB8fCBlbnRyeS5zdGFydHNXaXRoKFwiaHR0cDpcIikpKSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZVtpbmRleF0gPSB7XCJyZW1vdGVcIjogZW50cnl9O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBpbmNsdWRlW2luZGV4XSA9IHtcImxvY2FsXCI6IGVudHJ5fTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5jbHVkZVtpbmRleF0gPSBlbnRyeTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBpbmNsdWRlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeVtrZXldID0gVXRpbHMuZXhwYW5kVGV4dCh2YWx1ZSwgdmFyaWFibGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbmNsdWRlO1xuICAgIH1cblxuICAgIHN0YXRpYyBjb3ZlcnRUZW1wbGF0ZVRvUHJvamVjdEZpbGUgKHRlbXBsYXRlOiBzdHJpbmcpOiB7cHJvamVjdDogc3RyaW5nOyByZWY6IHN0cmluZzsgZmlsZTogc3RyaW5nOyBkb21haW46IHN0cmluZ30ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9tYWluOiBcImdpdGxhYi5jb21cIixcbiAgICAgICAgICAgIHByb2plY3Q6IFwiZ2l0bGFiLW9yZy9naXRsYWJcIixcbiAgICAgICAgICAgIHJlZjogXCJIRUFEXCIsXG4gICAgICAgICAgICBmaWxlOiBgbGliL2dpdGxhYi9jaS90ZW1wbGF0ZXMvJHt0ZW1wbGF0ZX1gLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZUluY2x1ZGVDb21wb25lbnQgKGNvbXBvbmVudDogc3RyaW5nKToge2RvbWFpbjogc3RyaW5nOyBwcm9qZWN0UGF0aDogc3RyaW5nOyBjb21wb25lbnROYW1lOiBzdHJpbmc7IHJlZjogc3RyaW5nfSB7XG4gICAgICAgIGFzc2VydCghY29tcG9uZW50LmluY2x1ZGVzKFwiOi8vXCIpLCBgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBjb21wb25lbnQ6IFxcYCR7Y29tcG9uZW50fVxcYCBzaG91bGQgbm90IGNvbnRhaW4gcHJvdG9jb2xgKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKD88ZG9tYWluPlteL1xcc10rKVxcLyg/PHByb2plY3RQYXRoPi4rKVxcLyg/PGNvbXBvbmVudE5hbWU+W15AXSspQCg/PHJlZj4uKykvOyAvLyByZWdleHIuY29tLzd2N2htXG4gICAgICAgIGNvbnN0IGdpdFJlbW90ZU1hdGNoID0gcGF0dGVybi5leGVjKGNvbXBvbmVudCk7XG5cbiAgICAgICAgaWYgKGdpdFJlbW90ZU1hdGNoPy5ncm91cHMgPT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKGBUaGlzIGlzIGEgYnVnLCBwbGVhc2UgY3JlYXRlIGEgZ2l0aHViIGlzc3VlIGlmIHRoaXMgaXMgc29tZXRoaW5nIHlvdSdyZSBleHBlY3RpbmcgdG8gd29yay4gaW5wdXQ6ICR7Y29tcG9uZW50fWApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZG9tYWluOiBnaXRSZW1vdGVNYXRjaC5ncm91cHNbXCJkb21haW5cIl0sXG4gICAgICAgICAgICBwcm9qZWN0UGF0aDogZ2l0UmVtb3RlTWF0Y2guZ3JvdXBzW1wicHJvamVjdFBhdGhcIl0sXG4gICAgICAgICAgICBjb21wb25lbnROYW1lOiBgdGVtcGxhdGVzLyR7Z2l0UmVtb3RlTWF0Y2guZ3JvdXBzW1wiY29tcG9uZW50TmFtZVwiXX1gLFxuICAgICAgICAgICAgcmVmOiBnaXRSZW1vdGVNYXRjaC5ncm91cHNbXCJyZWZcIl0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGRvd25sb2FkSW5jbHVkZVJlbW90ZSAoY3dkOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIHVybDogc3RyaW5nLCBmZXRjaEluY2x1ZGVzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGZzVXJsID0gVXRpbHMuZnNVcmwodXJsKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGAke2N3ZH0vJHtzdGF0ZURpcn0vaW5jbHVkZXMvJHtmc1VybH1gO1xuICAgICAgICAgICAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHModGFyZ2V0KSAmJiAhZmV0Y2hJbmNsdWRlcykgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MuZ2V0KHVybCk7XG4gICAgICAgICAgICBhd2FpdCBmcy5vdXRwdXRGaWxlKHRhcmdldCwgcmVzLmRhdGEpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6IGBSZW1vdGUgaW5jbHVkZSBjb3VsZCBub3QgYmUgZmV0Y2hlZCAke3VybH1cXG4ke2V9YH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGRvd25sb2FkSW5jbHVkZVByb2plY3RGaWxlIChjd2Q6IHN0cmluZywgc3RhdGVEaXI6IHN0cmluZywgcHJvamVjdDogc3RyaW5nLCByZWY6IHN0cmluZywgZmlsZTogc3RyaW5nLCBnaXREYXRhOiBHaXREYXRhLCBmZXRjaEluY2x1ZGVzOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlbW90ZSA9IGdpdERhdGEucmVtb3RlO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZSgvXlxcLysvLCBcIlwiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGAke3N0YXRlRGlyfS9pbmNsdWRlcy8ke3JlbW90ZS5ob3N0fS8ke3Byb2plY3R9LyR7cmVmfWA7XG4gICAgICAgICAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhgJHtjd2R9LyR7dGFyZ2V0fS8ke25vcm1hbGl6ZWRGaWxlfWApICYmICFmZXRjaEluY2x1ZGVzKSByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChyZW1vdGUuc2NoZW1hLnN0YXJ0c1dpdGgoXCJodHRwXCIpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0ID0gXCJ0bXAtXCIgKyBNYXRoLnJhbmRvbSgpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmRpcm5hbWUoYCR7Y3dkfS8ke3RhcmdldH0vJHtub3JtYWxpemVkRmlsZX1gKSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgXG4gICAgICAgICAgICAgICAgICAgIGNkICR7Y3dkfS8ke3N0YXRlRGlyfSBcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBnaXQgY2xvbmUgLS1icmFuY2ggXCIke3JlZn1cIiAtbiAtLWRlcHRoPTEgLS1maWx0ZXI9dHJlZTowIFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtyZW1vdGUuc2NoZW1hfTovLyR7cmVtb3RlLmhvc3R9LyR7cHJvamVjdH0uZ2l0IFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjd2R9LyR7dGFyZ2V0fS4ke2V4dH0gXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgY2QgJHtjd2R9LyR7dGFyZ2V0fS4ke2V4dH0gXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2l0IHNwYXJzZS1jaGVja291dCBzZXQgLS1uby1jb25lICR7bm9ybWFsaXplZEZpbGV9IFxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGdpdCBjaGVja291dCBcXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBjZCAke2N3ZH0vJHtzdGF0ZURpcn0gXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgY3AgJHtjd2R9LyR7dGFyZ2V0fS4ke2V4dH0vJHtub3JtYWxpemVkRmlsZX0gXFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjd2R9LyR7dGFyZ2V0fS8ke25vcm1hbGl6ZWRGaWxlfVxuICAgICAgICAgICAgICAgICAgICBgLCBjd2QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYCR7Y3dkfS8ke3RhcmdldH1gKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5iYXNoKGBzZXQgLWVvdSBwaXBlZmFpbDsgZ2l0IGFyY2hpdmUgLS1yZW1vdGU9c3NoOi8vZ2l0QCR7cmVtb3RlLmhvc3R9OiR7cmVtb3RlLnBvcnR9LyR7cHJvamVjdH0uZ2l0ICR7cmVmfSAke25vcm1hbGl6ZWRGaWxlfSB8IHRhciAtZiAtIC14QyAke3RhcmdldH0vYCwgY3dkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHttZXNzYWdlOiBgUHJvamVjdCBpbmNsdWRlIGNvdWxkIG5vdCBiZSBmZXRjaGVkIHsgcHJvamVjdDogJHtwcm9qZWN0fSwgcmVmOiAke3JlZn0sIGZpbGU6ICR7bm9ybWFsaXplZEZpbGV9IH1cXG4ke2V9YH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUluY2x1ZGVMb2NhbCAoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIGFzc2VydCghZmlsZVBhdGguc3RhcnRzV2l0aChcIi4vXCIpLCBgXFxgJHtmaWxlUGF0aH1cXGAgZm9yIGluY2x1ZGU6bG9jYWwgaXMgaW52YWxpZC4gR2l0bGFiIGRvZXMgbm90IHN1cHBvcnQgcmVsYXRpdmUgcGF0aCAoaWUuIGNhbm5vdCBzdGFydCB3aXRoIFxcYC4vXFxgKS5gKTtcbiAgICBhc3NlcnQoIWZpbGVQYXRoLmluY2x1ZGVzKFwiLi5cIiksIGBcXGAke2ZpbGVQYXRofVxcYCBmb3IgaW5jbHVkZTpsb2NhbCBpcyBpbnZhbGlkLiBHaXRsYWIgZG9lcyBub3Qgc3VwcG9ydCBkaXJlY3RvcnkgdHJhdmVyc2FsLmApO1xufVxuIl19
|
package/src/parser.js
CHANGED
|
@@ -191,7 +191,7 @@ class Parser {
|
|
|
191
191
|
let jobNeedsLength = [];
|
|
192
192
|
if (this.argv.needs && this.argv.job.length > 0) {
|
|
193
193
|
const found = this.jobs.find(j => j.baseName === job);
|
|
194
|
-
if (found
|
|
194
|
+
if (found?.needs) {
|
|
195
195
|
jobNeedsLength = found.needs.map(f => f.job.length);
|
|
196
196
|
}
|
|
197
197
|
}
|
|
@@ -344,4 +344,4 @@ function validateInput(inputValue, ctx) {
|
|
|
344
344
|
console.log((0, chalk_1.default) `{black.bgYellowBright WARN } spec:inputs:regex is currently not supported via gitlab-ci-local. This will just be a no-op.`);
|
|
345
345
|
}
|
|
346
346
|
}
|
|
347
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLGdEQUF3QjtBQUN4Qiw4REFBcUM7QUFDckMsNkNBQStCO0FBQy9CLDhDQUFnQztBQUNoQyxrRUFBeUM7QUFDekMsK0JBQTBCO0FBQzFCLDhEQUFnRDtBQUNoRCxtQ0FBOEI7QUFDOUIsb0RBQTRCO0FBQzVCLDJDQUFzQztBQUN0QyxxREFBdUM7QUFDdkMseUNBQW1DO0FBQ25DLHVEQUFpRDtBQUNqRCwyQ0FBc0M7QUFDdEMsaUVBQTBEO0FBRzFELGlFQUF1RTtBQUV2RSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFFdkUsTUFBYSxNQUFNO0lBRVAsT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUN2QixXQUFXLENBQU07SUFDakIsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFFakMsSUFBSSxDQUFRO0lBQ1osSUFBSSxDQUFPO0lBQ1gsWUFBWSxDQUFlO0lBQzNCLFdBQVcsQ0FBUztJQUNwQixlQUFlLENBQVU7SUFFbEMsWUFBcUIsSUFBVSxFQUFFLFlBQTBCLEVBQUUsV0FBbUIsRUFBRSxJQUFXLEVBQUUsZUFBd0I7UUFDbkgsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBRSxJQUFVLEVBQUUsWUFBMEIsRUFBRSxXQUFtQixFQUFFLElBQVcsRUFBRSxrQkFBMkIsSUFBSTtRQUMxSCxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDbEYsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzlCLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BCLE1BQU0sUUFBUSxHQUFHLE1BQU0scUJBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBSyxFQUFBLGtEQUFrRCxJQUFBLHVCQUFZLEVBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNHLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7WUFDN0IsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSxXQUFXLE9BQU8sS0FBSyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELDBFQUEwRTtRQUMxRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIscUJBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFBLGVBQUssRUFBQSx5Q0FBeUMsSUFBQSx1QkFBWSxFQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0csQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNOLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDdkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDekMsTUFBTSxPQUFPLEdBQUcsTUFBTSxrQkFBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdEQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLHlDQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sbUJBQW1CLEdBQUcsSUFBQSwyQkFBdUIsRUFBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sbUJBQW1CLEdBQUcsYUFBSyxDQUFDLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDOUUsTUFBTSxTQUFTLEdBQUcsRUFBQyxHQUFHLG1CQUFtQixFQUFFLEdBQUcsbUJBQW1CLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFDLENBQUM7UUFDckYsTUFBTSxRQUFRLEdBQUcsYUFBSyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVsRCxJQUFJLFlBQVksR0FBVSxDQUFDLEVBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUNuRixNQUFNLFlBQVksR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV2RixZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLGdDQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUMvTCxnQ0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRTVCLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyx1QkFBdUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3pHLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sZ0NBQWMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcE0sZ0NBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUU1QixNQUFNLFVBQVUsR0FBUSxJQUFBLHFCQUFVLEVBQUMsRUFBRSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFFeEQsc0NBQXNDO1FBQ3RDLFlBQVksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDL0MsWUFBWSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLFlBQVksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsWUFBWSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV0QyxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFBLGVBQUssRUFBQSxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3hHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3RDLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBRWpDLHVGQUF1RjtRQUN2RixhQUFLLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNsRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xFLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQztnQkFDbkIsSUFBSSxLQUFLLEtBQUssSUFBSTtvQkFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsaUNBQWlDO2dCQUNqRSxJQUFBLGdCQUFNLEVBQ0YsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFDdEQsSUFBQSxlQUFLLEVBQUEsZUFBZSxPQUFPLG9EQUFvRCxHQUFHLElBQUksS0FBSyxFQUFFLENBQ2hHLENBQUM7Z0JBQ0YsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDakUsSUFBQSxnQkFBTSxFQUNGLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQ3RELElBQUEsZUFBSyxFQUFBLGVBQWUsT0FBTyxhQUFhLENBQUMscURBQXFELEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FDL0csQ0FBQztvQkFDRixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZELENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUU5Qix5Q0FBeUM7UUFDekMsYUFBSyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDbEQsSUFBQSxnQkFBTSxFQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUUscUJBQXFCLENBQUMsQ0FBQztZQUMvQyxJQUFBLGdCQUFNLEVBQUMsa0JBQWtCLElBQUksSUFBSSxFQUFFLDJCQUEyQixDQUFDLENBQUM7WUFFaEUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLE1BQU0sMkJBQTJCLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNuRixLQUFLLE1BQU0sdUJBQXVCLElBQUksMkJBQTJCLEVBQUUsQ0FBQztnQkFDaEUsSUFBSSxhQUFhLEdBQUcsT0FBTyxDQUFDO2dCQUM1QixJQUFJLHVCQUF1QixFQUFFLENBQUM7b0JBQzFCLGFBQWEsR0FBRyxHQUFHLE9BQU8sTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLHVCQUF1QixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUM5RixDQUFDO3FCQUFNLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUMzQyxhQUFhLEdBQUcsR0FBRyxPQUFPLE1BQU0sU0FBUyxJQUFJLDJCQUEyQixDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUN2RixDQUFDO2dCQUVELE1BQU0sR0FBRyxHQUFHLElBQUksU0FBRyxDQUFDO29CQUNoQixJQUFJO29CQUNKLFlBQVk7b0JBQ1osSUFBSSxFQUFFLE9BQU87b0JBQ2IsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLFFBQVEsRUFBRSxPQUFPO29CQUNqQixlQUFlLEVBQUUsVUFBVSxDQUFDLFNBQVM7b0JBQ3JDLFdBQVcsRUFBRSxXQUFXO29CQUN4QixtQkFBbUI7b0JBQ25CLE9BQU87b0JBQ1Asa0JBQWtCO29CQUNsQixlQUFlLEVBQUUsdUJBQXVCO29CQUN4QyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUk7b0JBQ3hELFVBQVUsRUFBRSwyQkFBMkIsQ0FBQyxNQUFNO29CQUM5QyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7aUJBQ3hDLENBQUMsQ0FBQztnQkFDSCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25ELElBQUEsZ0JBQU0sRUFBQyxVQUFVLEVBQUUsSUFBQSxlQUFLLEVBQUEsaUJBQWlCLEdBQUcsQ0FBQyxLQUFLLCtCQUErQixHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDOUYsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BCLFNBQVMsRUFBRSxDQUFDO1lBQ2hCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILHVEQUF1RDtRQUN2RCxpRkFBaUY7UUFDakYsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzNFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDcEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNqQixJQUFJLGNBQWMsR0FBYSxFQUFFLENBQUM7Z0JBRWxDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM5QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLENBQUM7b0JBQ3RELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO3dCQUM5QyxjQUFjLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN4RCxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsTUFBTSxTQUFTLEdBQUcsT0FBTyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDeEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO1lBQ3JGLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6RixDQUFDO1FBQ0wsQ0FBQztRQUVELDZCQUE2QjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3RCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILGtDQUFrQztRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3RCLEdBQUcsQ0FBQyxTQUFTLEdBQUcscUJBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFFLFFBQWdCLEVBQUUsTUFBVyxFQUFFLEVBQUUsa0JBQTJCLElBQUk7UUFDbkYsTUFBTSxPQUFPLEdBQUcsR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXpDLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLHdCQUF3QixHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLEtBQUssTUFBTSxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQzNCLGdCQUFnQixHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzlGLGNBQWMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7Z0JBQzNGLHdCQUF3QixHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUM7Z0JBQzVILGdCQUFnQixHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLDJDQUEyQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7Z0JBRWpILE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksUUFBUSxJQUFJLENBQUMsZ0JBQWdCLElBQUksZ0JBQWdCLElBQUksY0FBYyxJQUFJLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztvQkFDbkcsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO3dCQUNuQixjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLHdCQUF3QixDQUFDLENBQUM7d0JBQzlELEtBQUssRUFBRSxDQUFDO29CQUNaLENBQUM7b0JBQ0QsSUFBSSxjQUFjLEVBQUUsQ0FBQzt3QkFDakIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO3dCQUNqRSxLQUFLLEVBQUUsQ0FBQztvQkFDWixDQUFDO29CQUNELElBQUksd0JBQXdCLEVBQUUsQ0FBQzt3QkFDM0IsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO3dCQUNyRSxLQUFLLEVBQUUsQ0FBQztvQkFDWixDQUFDO29CQUNELElBQUksZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDbkIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxxQkFBcUIsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLFdBQVcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUN4RyxLQUFLLEVBQUUsQ0FBQztvQkFDWixDQUFDO29CQUNELGdCQUFnQixHQUFHLElBQUksQ0FBQztvQkFDeEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO29CQUN4QixjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUN0Qix3QkFBd0IsR0FBRyxJQUFJLENBQUM7Z0JBQ3BDLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUM7WUFDWixDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDOUMsSUFBSSxFQUFFLFVBQVU7WUFDaEIsU0FBUyxFQUFFLFVBQVUsSUFBSTtnQkFDckIsT0FBTyxFQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUMsQ0FBQztZQUNqQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQzNELElBQUksUUFBUSxDQUFDO1FBRWIsSUFBSSxDQUFDO1lBQ0QsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBQyxNQUFNLEVBQUMsQ0FBVSxDQUFDO1FBQ2hGLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLHdCQUF3QixFQUFFLENBQUM7Z0JBQzNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBQSxlQUFLLEVBQUEsNEZBQTRGLENBQUMsQ0FBQztnQkFDL0csUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFVLENBQUM7WUFDNUYsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE1BQU0sQ0FBQyxDQUFDO1lBQ1osQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQztZQUFFLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTdDLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLG1CQUFtQixHQUFRLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QyxNQUFNLDRCQUE0QixHQUFRLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV0RCxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsNEJBQTRCLENBQUM7aUJBQzFFLE9BQU8sQ0FDSiw0RkFBNEYsQ0FBQyxtQkFBbUI7Y0FDOUcsQ0FBQyxDQUFTLEVBQUUsZ0JBQXdCLEVBQUUsc0JBQThCLEVBQUUsRUFBRTtnQkFDdEUsTUFBTSxjQUFjLEdBQUcsY0FBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzlELE1BQU0sT0FBTyxHQUFHO29CQUNaLGdCQUFnQjtvQkFDaEIsc0JBQXNCO29CQUN0QixtQkFBbUI7b0JBQ25CLGNBQWM7b0JBQ2QsR0FBRyxHQUFHO2lCQUNULENBQUM7Z0JBRUYsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBRW5DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzdDLDhCQUE4QjtnQkFDOUIsSUFBSSxPQUFNLENBQUMsU0FBUyxDQUFDLElBQUksUUFBUSxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUMxRixPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7Z0JBQ0QsT0FBTyxTQUFTLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUM7WUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQztDQUNKO0FBM1NELHdCQTJTQztBQUVELFNBQVMsZ0JBQWdCLENBQUUsUUFBYTtJQUNwQyxPQUFPLE1BQU0sSUFBSSxRQUFRLENBQUM7QUFDOUIsQ0FBQztBQUVELFNBQVMsOEJBQThCLENBQUUsR0FBUTtJQUM3QyxNQUFNLEVBQUMsc0JBQXNCLEVBQUUsY0FBYyxFQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3JELElBQUksc0JBQXNCLElBQUksRUFBRSxFQUFFLENBQUM7UUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFBLGVBQUssRUFBQSx1SUFBdUksQ0FBQyxDQUFDO0lBQzlKLENBQUM7SUFDRCxJQUFBLGdCQUFNLEVBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxhQUFhLEVBQUUsSUFBQSxlQUFLLEVBQUEsMERBQTBELGNBQWMsaURBQWlELENBQUMsQ0FBQztBQUN0TSxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUUsR0FBUTtJQUM1QixNQUFNLEVBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBQyxHQUFHLEdBQUcsQ0FBQztJQUM1RSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQzFHLElBQUEsZ0JBQU0sRUFBQyxVQUFVLEtBQUssU0FBUyxFQUFFLElBQUEsZUFBSyxFQUFBLDBEQUEwRCxjQUFjLHNCQUFzQixnQkFBZ0Isa0RBQWtELENBQUMsQ0FBQztJQUN4TSxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDO0FBRUQsU0FBUyx3QkFBd0IsQ0FBRSxHQUFRO0lBQ3ZDLE1BQU0sRUFBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUMsR0FBRyxHQUFHLENBQUM7SUFDcEUsTUFBTSwwQkFBMEIsR0FBRyxJQUFBLGVBQUssRUFBQSwwREFBMEQsY0FBYyxxQ0FBcUMsZ0JBQWdCLEtBQUssQ0FBQztJQUMzSyxJQUFBLGdCQUFNLEVBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssU0FBUyxFQUFFLDBCQUEwQixDQUFDLENBQUM7QUFDMUcsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFFLFVBQWUsRUFBRSxHQUFRO0lBQzdDLE1BQU0sRUFBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUMsR0FBRyxHQUFHLENBQUM7SUFFcEUsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUMzRSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ1YsSUFBQSxnQkFBTSxFQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQy9CLElBQUEsZUFBSyxFQUFBLDBEQUEwRCxjQUFjLHNCQUFzQixnQkFBZ0IsNEJBQTRCLFVBQVUsc0VBQXNFLENBQUMsQ0FBQztJQUN6TyxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksSUFBSSxRQUFRLENBQUM7SUFDakYsSUFBQSxnQkFBTSxFQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDaEQsSUFBQSxlQUFLLEVBQUEsMERBQTBELGNBQWMsdUNBQXVDLGdCQUFnQiwyQ0FBMkMsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUM3TCxJQUFBLGdCQUFNLEVBQUMsT0FBTyxVQUFVLElBQUksSUFBSSxFQUM1QixJQUFBLGVBQUssRUFBQSwwREFBMEQsY0FBYyxzQkFBc0IsZ0JBQWdCLGtEQUFrRCxJQUFJLElBQUksQ0FBQyxDQUFDO0lBRW5MLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDdkUsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNSLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBQSxlQUFLLEVBQUEsNEhBQTRILENBQUMsQ0FBQztJQUNuSixDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgZGVlcEV4dGVuZCBmcm9tIFwiZGVlcC1leHRlbmRcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tIFwianMteWFtbFwiO1xuaW1wb3J0IHByZXR0eUhydGltZSBmcm9tIFwicHJldHR5LWhydGltZVwiO1xuaW1wb3J0IHtKb2J9IGZyb20gXCIuL2pvYlwiO1xuaW1wb3J0ICogYXMgRGF0YUV4cGFuZGVyIGZyb20gXCIuL2RhdGEtZXhwYW5kZXJcIjtcbmltcG9ydCB7VXRpbHN9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7VmFsaWRhdG9yfSBmcm9tIFwiLi92YWxpZGF0b3JcIjtcbmltcG9ydCAqIGFzIHBhcmFsbGVsIGZyb20gXCIuL3BhcmFsbGVsXCI7XG5pbXBvcnQge0dpdERhdGF9IGZyb20gXCIuL2dpdC1kYXRhXCI7XG5pbXBvcnQge1BhcnNlckluY2x1ZGVzfSBmcm9tIFwiLi9wYXJzZXItaW5jbHVkZXNcIjtcbmltcG9ydCB7UHJvZHVjZXJzfSBmcm9tIFwiLi9wcm9kdWNlcnNcIjtcbmltcG9ydCB7VmFyaWFibGVzRnJvbUZpbGVzfSBmcm9tIFwiLi92YXJpYWJsZXMtZnJvbS1maWxlc1wiO1xuaW1wb3J0IHtBcmd2fSBmcm9tIFwiLi9hcmd2XCI7XG5pbXBvcnQge1dyaXRlU3RyZWFtc30gZnJvbSBcIi4vd3JpdGUtc3RyZWFtc1wiO1xuaW1wb3J0IHtpbml0IGFzIGluaXRQcmVkZWZpbmVkVmFyaWFibGVzfSBmcm9tIFwiLi9wcmVkZWZpbmVkLXZhcmlhYmxlc1wiO1xuXG5jb25zdCBNQVhfRlVOQ1RJT05TID0gMztcbmNvbnN0IElOQ0xVREVfSU5QVVRTX1NVUFBPUlRFRF9UWVBFUyA9IFtcInN0cmluZ1wiLCBcImJvb2xlYW5cIiwgXCJudW1iZXJcIl07XG5cbmV4cG9ydCBjbGFzcyBQYXJzZXIge1xuXG4gICAgcHJpdmF0ZSBfc3RhZ2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX2dpdGxhYkRhdGE6IGFueTtcbiAgICBwcml2YXRlIF9qb2JOYW1lUGFkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIHJlYWRvbmx5IGpvYnM6IEpvYltdO1xuICAgIHJlYWRvbmx5IGFyZ3Y6IEFyZ3Y7XG4gICAgcmVhZG9ubHkgd3JpdGVTdHJlYW1zOiBXcml0ZVN0cmVhbXM7XG4gICAgcmVhZG9ubHkgcGlwZWxpbmVJaWQ6IG51bWJlcjtcbiAgICByZWFkb25seSBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yIChhcmd2OiBBcmd2LCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQ6IG51bWJlciwgam9iczogSm9iW10sIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmFyZ3YgPSBhcmd2O1xuICAgICAgICB0aGlzLndyaXRlU3RyZWFtcyA9IHdyaXRlU3RyZWFtcztcbiAgICAgICAgdGhpcy5waXBlbGluZUlpZCA9IHBpcGVsaW5lSWlkO1xuICAgICAgICB0aGlzLmpvYnMgPSBqb2JzO1xuICAgICAgICB0aGlzLmV4cGFuZFZhcmlhYmxlcyA9IGV4cGFuZFZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBnZXQgc3RhZ2VzICgpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFnZXM7XG4gICAgfVxuXG4gICAgZ2V0IGdpdGxhYkRhdGEgKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2l0bGFiRGF0YTtcbiAgICB9XG5cbiAgICBnZXQgam9iTmFtZVBhZCAoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2pvYk5hbWVQYWQgPz8gMDtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlIChhcmd2OiBBcmd2LCB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQ6IG51bWJlciwgam9iczogSm9iW10sIGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcihhcmd2LCB3cml0ZVN0cmVhbXMsIHBpcGVsaW5lSWlkLCBqb2JzLCBleHBhbmRWYXJpYWJsZXMpO1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgYXdhaXQgcGFyc2VyLmluaXQoKTtcbiAgICAgICAgY29uc3Qgd2FybmluZ3MgPSBhd2FpdCBWYWxpZGF0b3IucnVuKHBhcnNlci5qb2JzLCBwYXJzZXIuc3RhZ2VzKTtcbiAgICAgICAgY29uc3QgcGFyc2luZ1RpbWUgPSBwcm9jZXNzLmhydGltZSh0aW1lKTtcbiAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7Z3JleSBwYXJzaW5nIGFuZCBkb3dubG9hZHMgZmluaXNoZWR9IGluIHtncmV5ICR7cHJldHR5SHJ0aW1lKHBhcnNpbmdUaW1lKX19XFxuYCk7XG5cbiAgICAgICAgZm9yIChjb25zdCB3YXJuaW5nIG9mIHdhcm5pbmdzKSB7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHt5ZWxsb3cgJHt3YXJuaW5nfX1cXG5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vICMgU2Vjb25kIGxheWVyIG9mIGNoZWNrIGZvciBlcnJvcnMgdGhhdCBhcmUgbm90IGNhdWdodCBpbiBWYWxpZGF0b3IucnVuXG4gICAgICAgIGlmIChwYXJzZXIuYXJndi5qc29uU2NoZW1hVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgY29uc3QgdGltZSA9IHByb2Nlc3MuaHJ0aW1lKCk7XG4gICAgICAgICAgICBWYWxpZGF0b3IuanNvblNjaGVtYVZhbGlkYXRpb24ocGFyc2VyLmdpdGxhYkRhdGEpO1xuICAgICAgICAgICAgd3JpdGVTdHJlYW1zLnN0ZGVycihjaGFsa2B7Z3JleSBqc29uIHNjaGVtYSB2YWxpZGF0ZWR9IGluIHtncmV5ICR7cHJldHR5SHJ0aW1lKHByb2Nlc3MuaHJ0aW1lKHRpbWUpKX19XFxuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlcjtcbiAgICB9XG5cbiAgICBhc3luYyBpbml0ICgpIHtcbiAgICAgICAgY29uc3QgYXJndiA9IHRoaXMuYXJndjtcbiAgICAgICAgY29uc3QgY3dkID0gYXJndi5jd2Q7XG4gICAgICAgIGNvbnN0IHN0YXRlRGlyID0gYXJndi5zdGF0ZURpcjtcbiAgICAgICAgY29uc3Qgd3JpdGVTdHJlYW1zID0gdGhpcy53cml0ZVN0cmVhbXM7XG4gICAgICAgIGNvbnN0IGZpbGUgPSBhcmd2LmZpbGU7XG4gICAgICAgIGNvbnN0IHBpcGVsaW5lSWlkID0gdGhpcy5waXBlbGluZUlpZDtcbiAgICAgICAgY29uc3QgZmV0Y2hJbmNsdWRlcyA9IGFyZ3YuZmV0Y2hJbmNsdWRlcztcbiAgICAgICAgY29uc3QgZ2l0RGF0YSA9IGF3YWl0IEdpdERhdGEuaW5pdChjd2QsIHdyaXRlU3RyZWFtcyk7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlc0Zyb21GaWxlcyA9IGF3YWl0IFZhcmlhYmxlc0Zyb21GaWxlcy5pbml0KGFyZ3YsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSk7XG4gICAgICAgIGNvbnN0IHByZWRlZmluZWRWYXJpYWJsZXMgPSBpbml0UHJlZGVmaW5lZFZhcmlhYmxlcyh7Z2l0RGF0YSwgYXJndn0pO1xuICAgICAgICBjb25zdCBlbnZNYXRjaGVkVmFyaWFibGVzID0gVXRpbHMuZmluZEVudk1hdGNoZWRWYXJpYWJsZXModmFyaWFibGVzRnJvbUZpbGVzKTtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0gey4uLnByZWRlZmluZWRWYXJpYWJsZXMsIC4uLmVudk1hdGNoZWRWYXJpYWJsZXMsIC4uLmFyZ3YudmFyaWFibGV9O1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IFV0aWxzLmV4cGFuZFZhcmlhYmxlcyh2YXJpYWJsZXMpO1xuXG4gICAgICAgIGxldCB5YW1sRGF0YUxpc3Q6IGFueVtdID0gW3tzdGFnZXM6IFtcIi5wcmVcIiwgXCJidWlsZFwiLCBcInRlc3RcIiwgXCJkZXBsb3lcIiwgXCIucG9zdFwiXX1dO1xuICAgICAgICBjb25zdCBnaXRsYWJDaURhdGEgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoYCR7Y3dkfS8ke2ZpbGV9YCwge30sIHRoaXMuZXhwYW5kVmFyaWFibGVzKTtcblxuICAgICAgICB5YW1sRGF0YUxpc3QgPSB5YW1sRGF0YUxpc3QuY29uY2F0KGF3YWl0IFBhcnNlckluY2x1ZGVzLmluaXQoZ2l0bGFiQ2lEYXRhLCB7Y3dkLCBzdGF0ZURpciwgd3JpdGVTdHJlYW1zLCBnaXREYXRhLCBmZXRjaEluY2x1ZGVzLCB2YXJpYWJsZXM6IGV4cGFuZGVkLCBleHBhbmRWYXJpYWJsZXM6IHRoaXMuZXhwYW5kVmFyaWFibGVzfSkpO1xuICAgICAgICBQYXJzZXJJbmNsdWRlcy5yZXNldENvdW50KCk7XG5cbiAgICAgICAgY29uc3QgZ2l0bGFiQ2lMb2NhbERhdGEgPSBhd2FpdCBQYXJzZXIubG9hZFlhbWwoYCR7Y3dkfS8uZ2l0bGFiLWNpLWxvY2FsLnltbGAsIHt9LCB0aGlzLmV4cGFuZFZhcmlhYmxlcyk7XG4gICAgICAgIHlhbWxEYXRhTGlzdCA9IHlhbWxEYXRhTGlzdC5jb25jYXQoYXdhaXQgUGFyc2VySW5jbHVkZXMuaW5pdChnaXRsYWJDaUxvY2FsRGF0YSwge2N3ZCwgc3RhdGVEaXIsIHdyaXRlU3RyZWFtcywgZ2l0RGF0YSwgZmV0Y2hJbmNsdWRlcywgdmFyaWFibGVzOiBleHBhbmRlZCwgZXhwYW5kVmFyaWFibGVzOiB0aGlzLmV4cGFuZFZhcmlhYmxlc30pKTtcbiAgICAgICAgUGFyc2VySW5jbHVkZXMucmVzZXRDb3VudCgpO1xuXG4gICAgICAgIGNvbnN0IGdpdGxhYkRhdGE6IGFueSA9IGRlZXBFeHRlbmQoe30sIC4uLnlhbWxEYXRhTGlzdCk7XG5cbiAgICAgICAgLy8gRXhwYW5kIHZhcmlvdXMgZmllbGRzIGluIGdpdGxhYkRhdGFcbiAgICAgICAgRGF0YUV4cGFuZGVyLmpvYkV4dGVuZHMoZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5yZWZlcmVuY2UoZ2l0bGFiRGF0YSwgZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5jb21wbGV4T2JqZWN0cyhnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLmRlZmF1bHRzKGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIuZ2xvYmFsVmFyaWFibGVzKGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIuZmxhdHRlbkxpc3RzKGdpdGxhYkRhdGEpO1xuXG4gICAgICAgIGFzc2VydChnaXRsYWJEYXRhLnN0YWdlcyAmJiBBcnJheS5pc0FycmF5KGdpdGxhYkRhdGEuc3RhZ2VzKSwgY2hhbGtge3llbGxvdyBzdGFnZXM6fSBtdXN0IGJlIGFuIGFycmF5YCk7XG4gICAgICAgIGlmICghZ2l0bGFiRGF0YS5zdGFnZXMuaW5jbHVkZXMoXCIucHJlXCIpKSB7XG4gICAgICAgICAgICBnaXRsYWJEYXRhLnN0YWdlcy51bnNoaWZ0KFwiLnByZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWdpdGxhYkRhdGEuc3RhZ2VzLmluY2x1ZGVzKFwiLnBvc3RcIikpIHtcbiAgICAgICAgICAgIGdpdGxhYkRhdGEuc3RhZ2VzLnB1c2goXCIucG9zdFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdGFnZXMgPSBnaXRsYWJEYXRhLnN0YWdlcztcblxuICAgICAgICAvLyBDaGVjayBqb2IgdmFyaWFibGVzIGZvciBpbnZhbGlkIGhhc2ggb2Yga2V5IHZhbHVlIHBhaXJzLCBhbmQgY2FzdCBudW1iZXJzIHRvIHN0cmluZ3NcbiAgICAgICAgVXRpbHMuZm9yRWFjaFJlYWxKb2IoZ2l0bGFiRGF0YSwgKGpvYk5hbWUsIGpvYkRhdGEpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgX3ZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhqb2JEYXRhLnZhcmlhYmxlcyB8fCB7fSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBfdmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB2YWx1ZSA9IFwiXCI7IC8vIHZhcmlhYmxlJ3MgdmFsdWVzIGFyZSBudWxsYWJsZVxuICAgICAgICAgICAgICAgIGFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgY2hhbGtge2JsdWVCcmlnaHQgJHtqb2JOYW1lfX0gaGFzIGludmFsaWQgdmFyaWFibGVzIGhhc2ggb2Yga2V5IHZhbHVlIHBhaXJzLiAke2tleX09JHt2YWx1ZX1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBqb2JEYXRhLnZhcmlhYmxlc1trZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAoam9iRGF0YS5zZXJ2aWNlcyA/PyBbXSkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gam9iRGF0YS5zZXJ2aWNlc1tpXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzZXJ2aWNlLnZhcmlhYmxlcyB8fCB7fSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYWxrYHtibHVlQnJpZ2h0ICR7am9iTmFtZX0uc2VydmljZXNbJHtpfV19IGhhcyBpbnZhbGlkIHZhcmlhYmxlcyBoYXNoIG9mIGtleSB2YWx1ZSBwYWlycy4gJHtrZXl9PSR7dmFsdWV9YFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBqb2JEYXRhLnNlcnZpY2VzW2ldLnZhcmlhYmxlc1trZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2dpdGxhYkRhdGEgPSBnaXRsYWJEYXRhO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlIGpvYnMgYW5kIHB1dCB0aGVtIGludG8gc3RhZ2VzXG4gICAgICAgIFV0aWxzLmZvckVhY2hSZWFsSm9iKGdpdGxhYkRhdGEsIChqb2JOYW1lLCBqb2JEYXRhKSA9PiB7XG4gICAgICAgICAgICBhc3NlcnQoZ2l0RGF0YSAhPSBudWxsLCBcImdpdERhdGEgbXVzdCBiZSBzZXRcIik7XG4gICAgICAgICAgICBhc3NlcnQodmFyaWFibGVzRnJvbUZpbGVzICE9IG51bGwsIFwiaG9tZVZhcmlhYmxlcyBtdXN0IGJlIHNldFwiKTtcblxuICAgICAgICAgICAgbGV0IG5vZGVJbmRleCA9IDE7XG4gICAgICAgICAgICBjb25zdCBwYXJhbGxlbE1hdHJpeFZhcmlhYmxlc0xpc3QgPSBwYXJhbGxlbC5tYXRyaXhWYXJpYWJsZXNMaXN0KGpvYkRhdGEsIGpvYk5hbWUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwYXJhbGxlbE1hdHJpeFZhcmlhYmxlcyBvZiBwYXJhbGxlbE1hdHJpeFZhcmlhYmxlc0xpc3QpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWF0cml4Sm9iTmFtZSA9IGpvYk5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFsbGVsTWF0cml4VmFyaWFibGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeEpvYk5hbWUgPSBgJHtqb2JOYW1lfTogWyR7T2JqZWN0LnZhbHVlcyhwYXJhbGxlbE1hdHJpeFZhcmlhYmxlcyA/PyBbXSkuam9pbihcIixcIil9XWA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbGxlbC5pc1BsYWluUGFyYWxsZWwoam9iRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4Sm9iTmFtZSA9IGAke2pvYk5hbWV9OiBbJHtub2RlSW5kZXh9LyR7cGFyYWxsZWxNYXRyaXhWYXJpYWJsZXNMaXN0Lmxlbmd0aH1dYDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBqb2IgPSBuZXcgSm9iKHtcbiAgICAgICAgICAgICAgICAgICAgYXJndixcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJlYW1zLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBqb2JEYXRhLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBtYXRyaXhKb2JOYW1lLFxuICAgICAgICAgICAgICAgICAgICBiYXNlTmFtZTogam9iTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVzOiBnaXRsYWJEYXRhLnZhcmlhYmxlcyxcbiAgICAgICAgICAgICAgICAgICAgcGlwZWxpbmVJaWQ6IHBpcGVsaW5lSWlkLFxuICAgICAgICAgICAgICAgICAgICBwcmVkZWZpbmVkVmFyaWFibGVzLFxuICAgICAgICAgICAgICAgICAgICBnaXREYXRhLFxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXNGcm9tRmlsZXMsXG4gICAgICAgICAgICAgICAgICAgIG1hdHJpeFZhcmlhYmxlczogcGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleDogKGpvYkRhdGEucGFyYWxsZWwgIT0gbnVsbCkgPyBub2RlSW5kZXggOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBub2Rlc1RvdGFsOiBwYXJhbGxlbE1hdHJpeFZhcmlhYmxlc0xpc3QubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBleHBhbmRWYXJpYWJsZXM6IHRoaXMuZXhwYW5kVmFyaWFibGVzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kU3RhZ2UgPSB0aGlzLnN0YWdlcy5pbmNsdWRlcyhqb2Iuc3RhZ2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChmb3VuZFN0YWdlLCBjaGFsa2B7eWVsbG93IHN0YWdlOiR7am9iLnN0YWdlfX0gbm90IGZvdW5kIGZvciB7Ymx1ZUJyaWdodCAke2pvYi5uYW1lfX1gKTtcbiAgICAgICAgICAgICAgICB0aGlzLmpvYnMucHVzaChqb2IpO1xuICAgICAgICAgICAgICAgIG5vZGVJbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBBZGQgc29tZSBwYWRkaW5nIHNvIHRoYXQgam9iIGxvZ3MgYXJlIG5pY2VseSBhbGlnbmVkXG4gICAgICAgIC8vIGFsbG93IHVzZXJzIHRvIG92ZXJyaWRlIHRoaXMgaW4gY2FzZSB0aGV5IGhhdmUgcmVhbGx5IGxvbmcgam9iIG5hbWUgKHNlZSAjODQwKVxuICAgICAgICBpZiAodGhpcy5hcmd2Lm1heEpvYk5hbWVQYWRkaW5nICE9PSBudWxsICYmIHRoaXMuYXJndi5tYXhKb2JOYW1lUGFkZGluZyA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9qb2JOYW1lUGFkID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGpvYnMgPSB0aGlzLmFyZ3Yuam9iLmxlbmd0aCAhPT0gMCA/IHRoaXMuYXJndi5qb2IgOiB0aGlzLmpvYnM7XG4gICAgICAgICAgICBqb2JzLmZvckVhY2goKGpvYikgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBqb2JOZWVkc0xlbmd0aDogbnVtYmVyW10gPSBbXTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YubmVlZHMgJiYgdGhpcy5hcmd2LmpvYi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5qb2JzLmZpbmQoaiA9PiBqLmJhc2VOYW1lID09PSBqb2IpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQgIT09IHVuZGVmaW5lZCAmJiBmb3VuZC5uZWVkcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgam9iTmVlZHNMZW5ndGggPSBmb3VuZC5uZWVkcy5tYXAoZiA9PiBmLmpvYi5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYkxlbmd0aCA9IHR5cGVvZiBqb2IgPT0gXCJzdHJpbmdcIiA/IGpvYi5sZW5ndGggOiBqb2IubmFtZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5fam9iTmFtZVBhZCA9IE1hdGgubWF4KGpvYkxlbmd0aCwgdGhpcy5fam9iTmFtZVBhZCA/PyAwLCAuLi5qb2JOZWVkc0xlbmd0aCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFyZ3YubWF4Sm9iTmFtZVBhZGRpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9qb2JOYW1lUGFkID0gTWF0aC5taW4odGhpcy5hcmd2Lm1heEpvYk5hbWVQYWRkaW5nID8/IDAsIHRoaXMuX2pvYk5hbWVQYWQgPz8gMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgam9iTmFtZVBhZCBvbiBhbGwgam9ic1xuICAgICAgICB0aGlzLmpvYnMuZm9yRWFjaCgoam9iKSA9PiB7XG4gICAgICAgICAgICBqb2Iuam9iTmFtZVBhZCA9IHRoaXMuam9iTmFtZVBhZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgcHJvZHVjZXJzIGZvciBlYWNoIGpvYlxuICAgICAgICB0aGlzLmpvYnMuZm9yRWFjaCgoam9iKSA9PiB7XG4gICAgICAgICAgICBqb2IucHJvZHVjZXJzID0gUHJvZHVjZXJzLmluaXQodGhpcy5qb2JzLCB0aGlzLnN0YWdlcywgam9iKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGxvYWRZYW1sIChmaWxlUGF0aDogc3RyaW5nLCBjdHg6IGFueSA9IHt9LCBleHBhbmRWYXJpYWJsZXM6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgeW1sUGF0aCA9IGAke2ZpbGVQYXRofWA7XG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh5bWxQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShgJHtmaWxlUGF0aH1gLCBcInV0ZjhcIik7XG4gICAgICAgIGNvbnN0IGZpbGVTcGxpdCA9IGZpbGVDb250ZW50LnNwbGl0KC9cXHI/XFxuL2cpO1xuICAgICAgICBjb25zdCBmaWxlU3BsaXRDbG9uZSA9IGZpbGVTcGxpdC5zbGljZSgpO1xuXG4gICAgICAgIGxldCBpbnRlcmFjdGl2ZU1hdGNoID0gbnVsbDtcbiAgICAgICAgbGV0IGRlc2NyaXB0aW9uTWF0Y2ggPSBudWxsO1xuICAgICAgICBsZXQgaW5qZWN0U1NIQWdlbnQgPSBudWxsO1xuICAgICAgICBsZXQgbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID0gbnVsbDtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgaWYgKGV4cGFuZFZhcmlhYmxlcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGZpbGVTcGxpdCkge1xuICAgICAgICAgICAgICAgIGludGVyYWN0aXZlTWF0Y2ggPSAhaW50ZXJhY3RpdmVNYXRjaCA/IC8jXFxzP0BcXHM/W0lpXW50ZXJhY3RpdmUvLmV4ZWMobGluZSkgOiBpbnRlcmFjdGl2ZU1hdGNoO1xuICAgICAgICAgICAgICAgIGluamVjdFNTSEFnZW50ID0gIWluamVjdFNTSEFnZW50ID8gLyNcXHM/QFxccz9bSWldbmplY3RTU0hBZ2VudC8uZXhlYyhsaW5lKSA6IGluamVjdFNTSEFnZW50O1xuICAgICAgICAgICAgICAgIG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCA9ICFub0FydGlmYWN0c1RvU291cmNlTWF0Y2ggPyAvI1xccz9AXFxzP05vQXJ0aWZhY3RzVG9Tb3VyY2UvaS5leGVjKGxpbmUpIDogbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoO1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uTWF0Y2ggPSAhZGVzY3JpcHRpb25NYXRjaCA/IC8jXFxzP0BcXHM/W0RkXWVzY3JpcHRpb24gKD88ZGVzY3JpcHRpb24+LiopLy5leGVjKGxpbmUpIDogZGVzY3JpcHRpb25NYXRjaDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYk1hdGNoID0gL1xcdzovLmV4ZWMobGluZSk7XG4gICAgICAgICAgICAgICAgaWYgKGpvYk1hdGNoICYmIChpbnRlcmFjdGl2ZU1hdGNoIHx8IGRlc2NyaXB0aW9uTWF0Y2ggfHwgaW5qZWN0U1NIQWdlbnQgfHwgbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZXJhY3RpdmVNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVNwbGl0Q2xvbmUuc3BsaWNlKGluZGV4ICsgMSwgMCwgXCIgIGdjbEludGVyYWN0aXZlOiB0cnVlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5qZWN0U1NIQWdlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIFwiICBnY2xJbmplY3RTU0hBZ2VudDogdHJ1ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVNwbGl0Q2xvbmUuc3BsaWNlKGluZGV4ICsgMSwgMCwgXCIgIGdjbEFydGlmYWN0c1RvU291cmNlOiBmYWxzZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIGAgIGdjbERlc2NyaXB0aW9uOiAke2Rlc2NyaXB0aW9uTWF0Y2g/Lmdyb3Vwcz8uZGVzY3JpcHRpb24gPz8gXCJcIn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmVNYXRjaCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpbmplY3RTU0hBZ2VudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWZlcmVuY2VUeXBlID0gbmV3IHlhbWwuVHlwZShcIiFyZWZlcmVuY2VcIiwge1xuICAgICAgICAgICAga2luZDogXCJzZXF1ZW5jZVwiLFxuICAgICAgICAgICAgY29uc3RydWN0OiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7cmVmZXJlbmNlRGF0YTogZGF0YX07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0geWFtbC5ERUZBVUxUX1NDSEVNQS5leHRlbmQoW3JlZmVyZW5jZVR5cGVdKTtcbiAgICAgICAgbGV0IGZpbGVEYXRhO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmaWxlRGF0YSA9IHlhbWwubG9hZEFsbChmaWxlU3BsaXRDbG9uZS5qb2luKFwiXFxuXCIpLCBudWxsLCB7c2NoZW1hfSkgYXMgYW55W107XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiB5YW1sLllBTUxFeGNlcHRpb24gJiYgZS5yZWFzb24gPT09IFwiZHVwbGljYXRlZCBtYXBwaW5nIGtleVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGtge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOIH0gZHVwbGljYXRlZCBtYXBwaW5nIGtleSBkZXRlY3RlZCEgVmFsdWVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4hYCk7XG4gICAgICAgICAgICAgICAgZmlsZURhdGEgPSB5YW1sLmxvYWRBbGwoZmlsZVNwbGl0Q2xvbmUuam9pbihcIlxcblwiKSwgbnVsbCwge3NjaGVtYSwganNvbjogdHJ1ZX0pIGFzIGFueVtdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVEYXRhLmxlbmd0aCA8PSAxKSByZXR1cm4gZmlsZURhdGFbMF07XG5cbiAgICAgICAgaWYgKGlzR2l0bGFiU3BlY0ZpbGUoZmlsZURhdGFbMF0pKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dHNTcGVjaWZpY2F0aW9uOiBhbnkgPSBmaWxlRGF0YVswXTtcbiAgICAgICAgICAgIGNvbnN0IHVuaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnM6IGFueSA9IGZpbGVEYXRhWzFdO1xuXG4gICAgICAgICAgICBjb25zdCBpbnRlcnBvbGF0ZWRDb25maWd1cmF0aW9ucyA9IEpTT04uc3RyaW5naWZ5KHVuaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnMpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC9cXCRcXFtcXFtcXHMqaW5wdXRzLig/PGludGVycG9sYXRpb25LZXk+W1xcdy1dKylcXHMqXFx8P1xccyooPzxpbnRlcnBvbGF0aW9uRnVuY3Rpb25zPi4qPylcXHMqXFxdXFxdL2cgLy8gcmVnZXhyLmNvbS83c2gxNVxuICAgICAgICAgICAgICAgICAgICAsIChfOiBzdHJpbmcsIGludGVycG9sYXRpb25LZXk6IHN0cmluZywgaW50ZXJwb2xhdGlvbkZ1bmN0aW9uczogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWdGaWxlUGF0aCA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgZmlsZVBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycG9sYXRpb25GdW5jdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzU3BlY2lmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHgsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUludGVycG9sYXRpb25LZXkoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUludGVycG9sYXRpb25GdW5jdGlvbnMoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gZ2V0SW5wdXRWYWx1ZShjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlSW5wdXQoaW5wdXRWYWx1ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb25WYWx1ZSA9IEpTT04uc3RyaW5naWZ5KGlucHV0VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5xdW90ZSBzdHJpbmcgaWYgbmVjZXNzYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKGpzb25WYWx1ZSkgPT0gXCJzdHJpbmdcIiAmJiBqc29uVmFsdWUuc3RhcnRzV2l0aChcIlxcXCJcIikgJiYganNvblZhbHVlLmVuZHNXaXRoKFwiXFxcIlwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc29uVmFsdWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzb25WYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShpbnRlcnBvbGF0ZWRDb25maWd1cmF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbGVEYXRhWzBdO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNHaXRsYWJTcGVjRmlsZSAoZmlsZURhdGE6IGFueSkge1xuICAgIHJldHVybiBcInNwZWNcIiBpbiBmaWxlRGF0YTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJbnRlcnBvbGF0aW9uRnVuY3Rpb25zIChjdHg6IGFueSkge1xuICAgIGNvbnN0IHtpbnRlcnBvbGF0aW9uRnVuY3Rpb25zLCBjb25maWdGaWxlUGF0aH0gPSBjdHg7XG4gICAgaWYgKGludGVycG9sYXRpb25GdW5jdGlvbnMgIT0gXCJcIikge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsa2B7YmxhY2suYmdZZWxsb3dCcmlnaHQgIFdBUk4gfSBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9ucyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB2aWEgZ2l0bGFiLWNpLWxvY2FsLiBGdW5jdGlvbnMgd2lsbCBqdXN0IGJlIGEgbm8tb3AuYCk7XG4gICAgfVxuICAgIGFzc2VydChpbnRlcnBvbGF0aW9uRnVuY3Rpb25zLnNwbGl0KFwifFwiKS5sZW5ndGggPD0gTUFYX0ZVTkNUSU9OUywgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IHRvbyBtYW55IGZ1bmN0aW9ucyBpbiBpbnRlcnBvbGF0aW9uIGJsb2NrLmApO1xufVxuXG5mdW5jdGlvbiBnZXRJbnB1dFZhbHVlIChjdHg6IGFueSkge1xuICAgIGNvbnN0IHtpbnB1dHMsIGludGVycG9sYXRpb25LZXksIGNvbmZpZ0ZpbGVQYXRoLCBpbnB1dHNTcGVjaWZpY2F0aW9ufSA9IGN0eDtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gaW5wdXRzW2ludGVycG9sYXRpb25LZXldIHx8IGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/LmRlZmF1bHQ7XG4gICAgYXNzZXJ0KGlucHV0VmFsdWUgIT09IHVuZGVmaW5lZCwgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IFxcYHtibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19XFxgIGlucHV0OiByZXF1aXJlZCB2YWx1ZSBoYXMgbm90IGJlZW4gcHJvdmlkZWQuYCk7XG4gICAgcmV0dXJuIGlucHV0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW50ZXJwb2xhdGlvbktleSAoY3R4OiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHtjb25maWdGaWxlUGF0aCwgaW50ZXJwb2xhdGlvbktleSwgaW5wdXRzU3BlY2lmaWNhdGlvbn0gPSBjdHg7XG4gICAgY29uc3QgaW52YWxpZEludGVycG9sYXRpb25LZXlFcnIgPSBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogdW5rbm93biBpbnRlcnBvbGF0aW9uIGtleTogXFxgJHtpbnRlcnBvbGF0aW9uS2V5fVxcYC5gO1xuICAgIGFzc2VydChpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzPy5baW50ZXJwb2xhdGlvbktleV0gIT09IHVuZGVmaW5lZCwgaW52YWxpZEludGVycG9sYXRpb25LZXlFcnIpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUlucHV0IChpbnB1dFZhbHVlOiBhbnksIGN0eDogYW55KTogYW55IHtcbiAgICBjb25zdCB7Y29uZmlnRmlsZVBhdGgsIGludGVycG9sYXRpb25LZXksIGlucHV0c1NwZWNpZmljYXRpb259ID0gY3R4O1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/Lm9wdGlvbnM7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgYXNzZXJ0KG9wdGlvbnMuaW5jbHVkZXMoaW5wdXRWYWx1ZSksXG4gICAgICAgICAgICBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogXFxge2JsdWVCcmlnaHQgJHtpbnRlcnBvbGF0aW9uS2V5fX1cXGAgaW5wdXQ6IFxcYHtibHVlQnJpZ2h0ICR7aW5wdXRWYWx1ZX19XFxgIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgbm90IGluIHRoZSBsaXN0IG9mIGFsbG93ZWQgb3B0aW9ucy5gKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gaW5wdXRzU3BlY2lmaWNhdGlvbi5zcGVjLmlucHV0c1tpbnRlcnBvbGF0aW9uS2V5XT8udHlwZSB8fCBcInN0cmluZ1wiO1xuICAgIGFzc2VydChJTkNMVURFX0lOUFVUU19TVVBQT1JURURfVFlQRVMuaW5jbHVkZXModHlwZSksXG4gICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBoZWFkZXI6c3BlYzppbnB1dHM6e2JsdWVCcmlnaHQgJHtpbnRlcnBvbGF0aW9uS2V5fX0gaW5wdXQgdHlwZSB1bmtub3duIHZhbHVlOiB7Ymx1ZUJyaWdodCAke3R5cGV9fS5gKTtcbiAgICBhc3NlcnQodHlwZW9mIGlucHV0VmFsdWUgPT0gdHlwZSxcbiAgICAgICAgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IFxcYHtibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19XFxgIGlucHV0OiBwcm92aWRlZCB2YWx1ZSBpcyBub3QgYSB7Ymx1ZUJyaWdodCAke3R5cGV9fS5gKTtcblxuICAgIGNvbnN0IHJlZ2V4ID0gaW5wdXRzU3BlY2lmaWNhdGlvbi5zcGVjLmlucHV0c1tpbnRlcnBvbGF0aW9uS2V5XT8ucmVnZXg7XG4gICAgaWYgKHJlZ2V4KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrYHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiB9IHNwZWM6aW5wdXRzOnJlZ2V4IGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHZpYSBnaXRsYWItY2ktbG9jYWwuIFRoaXMgd2lsbCBqdXN0IGJlIGEgbm8tb3AuYCk7XG4gICAgfVxufVxuIl19
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLGdEQUF3QjtBQUN4Qiw4REFBcUM7QUFDckMsNkNBQStCO0FBQy9CLDhDQUFnQztBQUNoQyxrRUFBeUM7QUFDekMsK0JBQTBCO0FBQzFCLDhEQUFnRDtBQUNoRCxtQ0FBOEI7QUFDOUIsb0RBQTRCO0FBQzVCLDJDQUFzQztBQUN0QyxxREFBdUM7QUFDdkMseUNBQW1DO0FBQ25DLHVEQUFpRDtBQUNqRCwyQ0FBc0M7QUFDdEMsaUVBQTBEO0FBRzFELGlFQUF1RTtBQUV2RSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFFdkUsTUFBYSxNQUFNO0lBRVAsT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUN2QixXQUFXLENBQU07SUFDakIsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFFakMsSUFBSSxDQUFRO0lBQ1osSUFBSSxDQUFPO0lBQ1gsWUFBWSxDQUFlO0lBQzNCLFdBQVcsQ0FBUztJQUNwQixlQUFlLENBQVU7SUFFbEMsWUFBcUIsSUFBVSxFQUFFLFlBQTBCLEVBQUUsV0FBbUIsRUFBRSxJQUFXLEVBQUUsZUFBd0I7UUFDbkgsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4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QThCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUNoRCxJQUFBLGVBQUssRUFBQSwwREFBMEQsY0FBYyx1Q0FBdUMsZ0JBQWdCLDJDQUEyQyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzdMLElBQUEsZ0JBQU0sRUFBQyxPQUFPLFVBQVUsSUFBSSxJQUFJLEVBQzVCLElBQUEsZUFBSyxFQUFBLDBEQUEwRCxjQUFjLHNCQUFzQixnQkFBZ0Isa0RBQWtELElBQUksSUFBSSxDQUFDLENBQUM7SUFFbkwsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUN2RSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFBLGVBQUssRUFBQSw0SEFBNEgsQ0FBQyxDQUFDO0lBQ25KLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBkZWVwRXh0ZW5kIGZyb20gXCJkZWVwLWV4dGVuZFwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gXCJqcy15YW1sXCI7XG5pbXBvcnQgcHJldHR5SHJ0aW1lIGZyb20gXCJwcmV0dHktaHJ0aW1lXCI7XG5pbXBvcnQge0pvYn0gZnJvbSBcIi4vam9iXCI7XG5pbXBvcnQgKiBhcyBEYXRhRXhwYW5kZXIgZnJvbSBcIi4vZGF0YS1leHBhbmRlclwiO1xuaW1wb3J0IHtVdGlsc30gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtWYWxpZGF0b3J9IGZyb20gXCIuL3ZhbGlkYXRvclwiO1xuaW1wb3J0ICogYXMgcGFyYWxsZWwgZnJvbSBcIi4vcGFyYWxsZWxcIjtcbmltcG9ydCB7R2l0RGF0YX0gZnJvbSBcIi4vZ2l0LWRhdGFcIjtcbmltcG9ydCB7UGFyc2VySW5jbHVkZXN9IGZyb20gXCIuL3BhcnNlci1pbmNsdWRlc1wiO1xuaW1wb3J0IHtQcm9kdWNlcnN9IGZyb20gXCIuL3Byb2R1Y2Vyc1wiO1xuaW1wb3J0IHtWYXJpYWJsZXNGcm9tRmlsZXN9IGZyb20gXCIuL3ZhcmlhYmxlcy1mcm9tLWZpbGVzXCI7XG5pbXBvcnQge0FyZ3Z9IGZyb20gXCIuL2FyZ3ZcIjtcbmltcG9ydCB7V3JpdGVTdHJlYW1zfSBmcm9tIFwiLi93cml0ZS1zdHJlYW1zXCI7XG5pbXBvcnQge2luaXQgYXMgaW5pdFByZWRlZmluZWRWYXJpYWJsZXN9IGZyb20gXCIuL3ByZWRlZmluZWQtdmFyaWFibGVzXCI7XG5cbmNvbnN0IE1BWF9GVU5DVElPTlMgPSAzO1xuY29uc3QgSU5DTFVERV9JTlBVVFNfU1VQUE9SVEVEX1RZUEVTID0gW1wic3RyaW5nXCIsIFwiYm9vbGVhblwiLCBcIm51bWJlclwiXTtcblxuZXhwb3J0IGNsYXNzIFBhcnNlciB7XG5cbiAgICBwcml2YXRlIF9zdGFnZXM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfZ2l0bGFiRGF0YTogYW55O1xuICAgIHByaXZhdGUgX2pvYk5hbWVQYWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgcmVhZG9ubHkgam9iczogSm9iW107XG4gICAgcmVhZG9ubHkgYXJndjogQXJndjtcbiAgICByZWFkb25seSB3cml0ZVN0cmVhbXM6IFdyaXRlU3RyZWFtcztcbiAgICByZWFkb25seSBwaXBlbGluZUlpZDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGV4cGFuZFZhcmlhYmxlczogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IgKGFyZ3Y6IEFyZ3YsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBwaXBlbGluZUlpZDogbnVtYmVyLCBqb2JzOiBKb2JbXSwgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuYXJndiA9IGFyZ3Y7XG4gICAgICAgIHRoaXMud3JpdGVTdHJlYW1zID0gd3JpdGVTdHJlYW1zO1xuICAgICAgICB0aGlzLnBpcGVsaW5lSWlkID0gcGlwZWxpbmVJaWQ7XG4gICAgICAgIHRoaXMuam9icyA9IGpvYnM7XG4gICAgICAgIHRoaXMuZXhwYW5kVmFyaWFibGVzID0gZXhwYW5kVmFyaWFibGVzO1xuICAgIH1cblxuICAgIGdldCBzdGFnZXMgKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWdlcztcbiAgICB9XG5cbiAgICBnZXQgZ2l0bGFiRGF0YSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9naXRsYWJEYXRhO1xuICAgIH1cblxuICAgIGdldCBqb2JOYW1lUGFkICgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fam9iTmFtZVBhZCA/PyAwO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBjcmVhdGUgKGFyZ3Y6IEFyZ3YsIHdyaXRlU3RyZWFtczogV3JpdGVTdHJlYW1zLCBwaXBlbGluZUlpZDogbnVtYmVyLCBqb2JzOiBKb2JbXSwgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgUGFyc2VyKGFyZ3YsIHdyaXRlU3RyZWFtcywgcGlwZWxpbmVJaWQsIGpvYnMsIGV4cGFuZFZhcmlhYmxlcyk7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBhd2FpdCBwYXJzZXIuaW5pdCgpO1xuICAgICAgICBjb25zdCB3YXJuaW5ncyA9IGF3YWl0IFZhbGlkYXRvci5ydW4ocGFyc2VyLmpvYnMsIHBhcnNlci5zdGFnZXMpO1xuICAgICAgICBjb25zdCBwYXJzaW5nVGltZSA9IHByb2Nlc3MuaHJ0aW1lKHRpbWUpO1xuICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHtncmV5IHBhcnNpbmcgYW5kIGRvd25sb2FkcyBmaW5pc2hlZH0gaW4ge2dyZXkgJHtwcmV0dHlIcnRpbWUocGFyc2luZ1RpbWUpfX1cXG5gKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHdhcm5pbmcgb2Ygd2FybmluZ3MpIHtcbiAgICAgICAgICAgIHdyaXRlU3RyZWFtcy5zdGRlcnIoY2hhbGtge3llbGxvdyAke3dhcm5pbmd9fVxcbmApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gIyBTZWNvbmQgbGF5ZXIgb2YgY2hlY2sgZm9yIGVycm9ycyB0aGF0IGFyZSBub3QgY2F1Z2h0IGluIFZhbGlkYXRvci5ydW5cbiAgICAgICAgaWYgKHBhcnNlci5hcmd2Lmpzb25TY2hlbWFWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgICAgIFZhbGlkYXRvci5qc29uU2NoZW1hVmFsaWRhdGlvbihwYXJzZXIuZ2l0bGFiRGF0YSk7XG4gICAgICAgICAgICB3cml0ZVN0cmVhbXMuc3RkZXJyKGNoYWxrYHtncmV5IGpzb24gc2NoZW1hIHZhbGlkYXRlZH0gaW4ge2dyZXkgJHtwcmV0dHlIcnRpbWUocHJvY2Vzcy5ocnRpbWUodGltZSkpfX1cXG5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VyO1xuICAgIH1cblxuICAgIGFzeW5jIGluaXQgKCkge1xuICAgICAgICBjb25zdCBhcmd2ID0gdGhpcy5hcmd2O1xuICAgICAgICBjb25zdCBjd2QgPSBhcmd2LmN3ZDtcbiAgICAgICAgY29uc3Qgc3RhdGVEaXIgPSBhcmd2LnN0YXRlRGlyO1xuICAgICAgICBjb25zdCB3cml0ZVN0cmVhbXMgPSB0aGlzLndyaXRlU3RyZWFtcztcbiAgICAgICAgY29uc3QgZmlsZSA9IGFyZ3YuZmlsZTtcbiAgICAgICAgY29uc3QgcGlwZWxpbmVJaWQgPSB0aGlzLnBpcGVsaW5lSWlkO1xuICAgICAgICBjb25zdCBmZXRjaEluY2x1ZGVzID0gYXJndi5mZXRjaEluY2x1ZGVzO1xuICAgICAgICBjb25zdCBnaXREYXRhID0gYXdhaXQgR2l0RGF0YS5pbml0KGN3ZCwgd3JpdGVTdHJlYW1zKTtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzRnJvbUZpbGVzID0gYXdhaXQgVmFyaWFibGVzRnJvbUZpbGVzLmluaXQoYXJndiwgd3JpdGVTdHJlYW1zLCBnaXREYXRhKTtcbiAgICAgICAgY29uc3QgcHJlZGVmaW5lZFZhcmlhYmxlcyA9IGluaXRQcmVkZWZpbmVkVmFyaWFibGVzKHtnaXREYXRhLCBhcmd2fSk7XG4gICAgICAgIGNvbnN0IGVudk1hdGNoZWRWYXJpYWJsZXMgPSBVdGlscy5maW5kRW52TWF0Y2hlZFZhcmlhYmxlcyh2YXJpYWJsZXNGcm9tRmlsZXMpO1xuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB7Li4ucHJlZGVmaW5lZFZhcmlhYmxlcywgLi4uZW52TWF0Y2hlZFZhcmlhYmxlcywgLi4uYXJndi52YXJpYWJsZX07XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkID0gVXRpbHMuZXhwYW5kVmFyaWFibGVzKHZhcmlhYmxlcyk7XG5cbiAgICAgICAgbGV0IHlhbWxEYXRhTGlzdDogYW55W10gPSBbe3N0YWdlczogW1wiLnByZVwiLCBcImJ1aWxkXCIsIFwidGVzdFwiLCBcImRlcGxveVwiLCBcIi5wb3N0XCJdfV07XG4gICAgICAgIGNvbnN0IGdpdGxhYkNpRGF0YSA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9LyR7ZmlsZX1gLCB7fSwgdGhpcy5leHBhbmRWYXJpYWJsZXMpO1xuXG4gICAgICAgIHlhbWxEYXRhTGlzdCA9IHlhbWxEYXRhTGlzdC5jb25jYXQoYXdhaXQgUGFyc2VySW5jbHVkZXMuaW5pdChnaXRsYWJDaURhdGEsIHtjd2QsIHN0YXRlRGlyLCB3cml0ZVN0cmVhbXMsIGdpdERhdGEsIGZldGNoSW5jbHVkZXMsIHZhcmlhYmxlczogZXhwYW5kZWQsIGV4cGFuZFZhcmlhYmxlczogdGhpcy5leHBhbmRWYXJpYWJsZXN9KSk7XG4gICAgICAgIFBhcnNlckluY2x1ZGVzLnJlc2V0Q291bnQoKTtcblxuICAgICAgICBjb25zdCBnaXRsYWJDaUxvY2FsRGF0YSA9IGF3YWl0IFBhcnNlci5sb2FkWWFtbChgJHtjd2R9Ly5naXRsYWItY2ktbG9jYWwueW1sYCwge30sIHRoaXMuZXhwYW5kVmFyaWFibGVzKTtcbiAgICAgICAgeWFtbERhdGFMaXN0ID0geWFtbERhdGFMaXN0LmNvbmNhdChhd2FpdCBQYXJzZXJJbmNsdWRlcy5pbml0KGdpdGxhYkNpTG9jYWxEYXRhLCB7Y3dkLCBzdGF0ZURpciwgd3JpdGVTdHJlYW1zLCBnaXREYXRhLCBmZXRjaEluY2x1ZGVzLCB2YXJpYWJsZXM6IGV4cGFuZGVkLCBleHBhbmRWYXJpYWJsZXM6IHRoaXMuZXhwYW5kVmFyaWFibGVzfSkpO1xuICAgICAgICBQYXJzZXJJbmNsdWRlcy5yZXNldENvdW50KCk7XG5cbiAgICAgICAgY29uc3QgZ2l0bGFiRGF0YTogYW55ID0gZGVlcEV4dGVuZCh7fSwgLi4ueWFtbERhdGFMaXN0KTtcblxuICAgICAgICAvLyBFeHBhbmQgdmFyaW91cyBmaWVsZHMgaW4gZ2l0bGFiRGF0YVxuICAgICAgICBEYXRhRXhwYW5kZXIuam9iRXh0ZW5kcyhnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLnJlZmVyZW5jZShnaXRsYWJEYXRhLCBnaXRsYWJEYXRhKTtcbiAgICAgICAgRGF0YUV4cGFuZGVyLmNvbXBsZXhPYmplY3RzKGdpdGxhYkRhdGEpO1xuICAgICAgICBEYXRhRXhwYW5kZXIuZGVmYXVsdHMoZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5nbG9iYWxWYXJpYWJsZXMoZ2l0bGFiRGF0YSk7XG4gICAgICAgIERhdGFFeHBhbmRlci5mbGF0dGVuTGlzdHMoZ2l0bGFiRGF0YSk7XG5cbiAgICAgICAgYXNzZXJ0KGdpdGxhYkRhdGEuc3RhZ2VzICYmIEFycmF5LmlzQXJyYXkoZ2l0bGFiRGF0YS5zdGFnZXMpLCBjaGFsa2B7eWVsbG93IHN0YWdlczp9IG11c3QgYmUgYW4gYXJyYXlgKTtcbiAgICAgICAgaWYgKCFnaXRsYWJEYXRhLnN0YWdlcy5pbmNsdWRlcyhcIi5wcmVcIikpIHtcbiAgICAgICAgICAgIGdpdGxhYkRhdGEuc3RhZ2VzLnVuc2hpZnQoXCIucHJlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZ2l0bGFiRGF0YS5zdGFnZXMuaW5jbHVkZXMoXCIucG9zdFwiKSkge1xuICAgICAgICAgICAgZ2l0bGFiRGF0YS5zdGFnZXMucHVzaChcIi5wb3N0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N0YWdlcyA9IGdpdGxhYkRhdGEuc3RhZ2VzO1xuXG4gICAgICAgIC8vIENoZWNrIGpvYiB2YXJpYWJsZXMgZm9yIGludmFsaWQgaGFzaCBvZiBrZXkgdmFsdWUgcGFpcnMsIGFuZCBjYXN0IG51bWJlcnMgdG8gc3RyaW5nc1xuICAgICAgICBVdGlscy5mb3JFYWNoUmVhbEpvYihnaXRsYWJEYXRhLCAoam9iTmFtZSwgam9iRGF0YSkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBfdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGpvYkRhdGEudmFyaWFibGVzIHx8IHt9KSkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IF92YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHZhbHVlID0gXCJcIjsgLy8gdmFyaWFibGUncyB2YWx1ZXMgYXJlIG51bGxhYmxlXG4gICAgICAgICAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICBjaGFsa2B7Ymx1ZUJyaWdodCAke2pvYk5hbWV9fSBoYXMgaW52YWxpZCB2YXJpYWJsZXMgaGFzaCBvZiBrZXkgdmFsdWUgcGFpcnMuICR7a2V5fT0ke3ZhbHVlfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGpvYkRhdGEudmFyaWFibGVzW2tleV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChqb2JEYXRhLnNlcnZpY2VzID8/IFtdKS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSBqb2JEYXRhLnNlcnZpY2VzW2ldO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNlcnZpY2UudmFyaWFibGVzIHx8IHt9KSkge1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbGtge2JsdWVCcmlnaHQgJHtqb2JOYW1lfS5zZXJ2aWNlc1ske2l9XX0gaGFzIGludmFsaWQgdmFyaWFibGVzIGhhc2ggb2Yga2V5IHZhbHVlIHBhaXJzLiAke2tleX09JHt2YWx1ZX1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGpvYkRhdGEuc2VydmljZXNbaV0udmFyaWFibGVzW2tleV0gPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZ2l0bGFiRGF0YSA9IGdpdGxhYkRhdGE7XG5cbiAgICAgICAgLy8gR2VuZXJhdGUgam9icyBhbmQgcHV0IHRoZW0gaW50byBzdGFnZXNcbiAgICAgICAgVXRpbHMuZm9yRWFjaFJlYWxKb2IoZ2l0bGFiRGF0YSwgKGpvYk5hbWUsIGpvYkRhdGEpID0+IHtcbiAgICAgICAgICAgIGFzc2VydChnaXREYXRhICE9IG51bGwsIFwiZ2l0RGF0YSBtdXN0IGJlIHNldFwiKTtcbiAgICAgICAgICAgIGFzc2VydCh2YXJpYWJsZXNGcm9tRmlsZXMgIT0gbnVsbCwgXCJob21lVmFyaWFibGVzIG11c3QgYmUgc2V0XCIpO1xuXG4gICAgICAgICAgICBsZXQgbm9kZUluZGV4ID0gMTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdCA9IHBhcmFsbGVsLm1hdHJpeFZhcmlhYmxlc0xpc3Qoam9iRGF0YSwgam9iTmFtZSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzIG9mIHBhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdCkge1xuICAgICAgICAgICAgICAgIGxldCBtYXRyaXhKb2JOYW1lID0gam9iTmFtZTtcbiAgICAgICAgICAgICAgICBpZiAocGFyYWxsZWxNYXRyaXhWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4Sm9iTmFtZSA9IGAke2pvYk5hbWV9OiBbJHtPYmplY3QudmFsdWVzKHBhcmFsbGVsTWF0cml4VmFyaWFibGVzID8/IFtdKS5qb2luKFwiLFwiKX1dYDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFsbGVsLmlzUGxhaW5QYXJhbGxlbChqb2JEYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBtYXRyaXhKb2JOYW1lID0gYCR7am9iTmFtZX06IFske25vZGVJbmRleH0vJHtwYXJhbGxlbE1hdHJpeFZhcmlhYmxlc0xpc3QubGVuZ3RofV1gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYiA9IG5ldyBKb2Ioe1xuICAgICAgICAgICAgICAgICAgICBhcmd2LFxuICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmVhbXMsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGpvYkRhdGEsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG1hdHJpeEpvYk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGJhc2VOYW1lOiBqb2JOYW1lLFxuICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZXM6IGdpdGxhYkRhdGEudmFyaWFibGVzLFxuICAgICAgICAgICAgICAgICAgICBwaXBlbGluZUlpZDogcGlwZWxpbmVJaWQsXG4gICAgICAgICAgICAgICAgICAgIHByZWRlZmluZWRWYXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIGdpdERhdGEsXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlc0Zyb21GaWxlcyxcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4VmFyaWFibGVzOiBwYXJhbGxlbE1hdHJpeFZhcmlhYmxlcyxcbiAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4OiAoam9iRGF0YS5wYXJhbGxlbCAhPSBudWxsKSA/IG5vZGVJbmRleCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG5vZGVzVG90YWw6IHBhcmFsbGVsTWF0cml4VmFyaWFibGVzTGlzdC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZFZhcmlhYmxlczogdGhpcy5leHBhbmRWYXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmRTdGFnZSA9IHRoaXMuc3RhZ2VzLmluY2x1ZGVzKGpvYi5zdGFnZSk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGZvdW5kU3RhZ2UsIGNoYWxrYHt5ZWxsb3cgc3RhZ2U6JHtqb2Iuc3RhZ2V9fSBub3QgZm91bmQgZm9yIHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fWApO1xuICAgICAgICAgICAgICAgIHRoaXMuam9icy5wdXNoKGpvYik7XG4gICAgICAgICAgICAgICAgbm9kZUluZGV4Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEFkZCBzb21lIHBhZGRpbmcgc28gdGhhdCBqb2IgbG9ncyBhcmUgbmljZWx5IGFsaWduZWRcbiAgICAgICAgLy8gYWxsb3cgdXNlcnMgdG8gb3ZlcnJpZGUgdGhpcyBpbiBjYXNlIHRoZXkgaGF2ZSByZWFsbHkgbG9uZyBqb2IgbmFtZSAoc2VlICM4NDApXG4gICAgICAgIGlmICh0aGlzLmFyZ3YubWF4Sm9iTmFtZVBhZGRpbmcgIT09IG51bGwgJiYgdGhpcy5hcmd2Lm1heEpvYk5hbWVQYWRkaW5nIDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2pvYk5hbWVQYWQgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgam9icyA9IHRoaXMuYXJndi5qb2IubGVuZ3RoICE9PSAwID8gdGhpcy5hcmd2LmpvYiA6IHRoaXMuam9icztcbiAgICAgICAgICAgIGpvYnMuZm9yRWFjaCgoam9iKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGpvYk5lZWRzTGVuZ3RoOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXJndi5uZWVkcyAmJiB0aGlzLmFyZ3Yuam9iLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmpvYnMuZmluZChqID0+IGouYmFzZU5hbWUgPT09IGpvYik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZD8ubmVlZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvYk5lZWRzTGVuZ3RoID0gZm91bmQubmVlZHMubWFwKGYgPT4gZi5qb2IubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBqb2JMZW5ndGggPSB0eXBlb2Ygam9iID09IFwic3RyaW5nXCIgPyBqb2IubGVuZ3RoIDogam9iLm5hbWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMuX2pvYk5hbWVQYWQgPSBNYXRoLm1heChqb2JMZW5ndGgsIHRoaXMuX2pvYk5hbWVQYWQgPz8gMCwgLi4uam9iTmVlZHNMZW5ndGgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hcmd2Lm1heEpvYk5hbWVQYWRkaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fam9iTmFtZVBhZCA9IE1hdGgubWluKHRoaXMuYXJndi5tYXhKb2JOYW1lUGFkZGluZyA/PyAwLCB0aGlzLl9qb2JOYW1lUGFkID8/IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IGpvYk5hbWVQYWQgb24gYWxsIGpvYnNcbiAgICAgICAgdGhpcy5qb2JzLmZvckVhY2goKGpvYikgPT4ge1xuICAgICAgICAgICAgam9iLmpvYk5hbWVQYWQgPSB0aGlzLmpvYk5hbWVQYWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlIHByb2R1Y2VycyBmb3IgZWFjaCBqb2JcbiAgICAgICAgdGhpcy5qb2JzLmZvckVhY2goKGpvYikgPT4ge1xuICAgICAgICAgICAgam9iLnByb2R1Y2VycyA9IFByb2R1Y2Vycy5pbml0KHRoaXMuam9icywgdGhpcy5zdGFnZXMsIGpvYik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBsb2FkWWFtbCAoZmlsZVBhdGg6IHN0cmluZywgY3R4OiBhbnkgPSB7fSwgZXhwYW5kVmFyaWFibGVzOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IHltbFBhdGggPSBgJHtmaWxlUGF0aH1gO1xuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoeW1sUGF0aCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoYCR7ZmlsZVBhdGh9YCwgXCJ1dGY4XCIpO1xuICAgICAgICBjb25zdCBmaWxlU3BsaXQgPSBmaWxlQ29udGVudC5zcGxpdCgvXFxyP1xcbi9nKTtcbiAgICAgICAgY29uc3QgZmlsZVNwbGl0Q2xvbmUgPSBmaWxlU3BsaXQuc2xpY2UoKTtcblxuICAgICAgICBsZXQgaW50ZXJhY3RpdmVNYXRjaCA9IG51bGw7XG4gICAgICAgIGxldCBkZXNjcmlwdGlvbk1hdGNoID0gbnVsbDtcbiAgICAgICAgbGV0IGluamVjdFNTSEFnZW50ID0gbnVsbDtcbiAgICAgICAgbGV0IG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCA9IG51bGw7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGlmIChleHBhbmRWYXJpYWJsZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBmaWxlU3BsaXQpIHtcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZU1hdGNoID0gIWludGVyYWN0aXZlTWF0Y2ggPyAvI1xccz9AXFxzP1tJaV1udGVyYWN0aXZlLy5leGVjKGxpbmUpIDogaW50ZXJhY3RpdmVNYXRjaDtcbiAgICAgICAgICAgICAgICBpbmplY3RTU0hBZ2VudCA9ICFpbmplY3RTU0hBZ2VudCA/IC8jXFxzP0BcXHM/W0lpXW5qZWN0U1NIQWdlbnQvLmV4ZWMobGluZSkgOiBpbmplY3RTU0hBZ2VudDtcbiAgICAgICAgICAgICAgICBub0FydGlmYWN0c1RvU291cmNlTWF0Y2ggPSAhbm9BcnRpZmFjdHNUb1NvdXJjZU1hdGNoID8gLyNcXHM/QFxccz9Ob0FydGlmYWN0c1RvU291cmNlL2kuZXhlYyhsaW5lKSA6IG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaDtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbk1hdGNoID0gIWRlc2NyaXB0aW9uTWF0Y2ggPyAvI1xccz9AXFxzP1tEZF1lc2NyaXB0aW9uICg/PGRlc2NyaXB0aW9uPi4qKS8uZXhlYyhsaW5lKSA6IGRlc2NyaXB0aW9uTWF0Y2g7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBqb2JNYXRjaCA9IC9cXHc6Ly5leGVjKGxpbmUpO1xuICAgICAgICAgICAgICAgIGlmIChqb2JNYXRjaCAmJiAoaW50ZXJhY3RpdmVNYXRjaCB8fCBkZXNjcmlwdGlvbk1hdGNoIHx8IGluamVjdFNTSEFnZW50IHx8IG5vQXJ0aWZhY3RzVG9Tb3VyY2VNYXRjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludGVyYWN0aXZlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIFwiICBnY2xJbnRlcmFjdGl2ZTogdHJ1ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGluamVjdFNTSEFnZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBcIiAgZ2NsSW5qZWN0U1NIQWdlbnQ6IHRydWVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChub0FydGlmYWN0c1RvU291cmNlTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVTcGxpdENsb25lLnNwbGljZShpbmRleCArIDEsIDAsIFwiICBnY2xBcnRpZmFjdHNUb1NvdXJjZTogZmFsc2VcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbk1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3BsaXRDbG9uZS5zcGxpY2UoaW5kZXggKyAxLCAwLCBgICBnY2xEZXNjcmlwdGlvbjogJHtkZXNjcmlwdGlvbk1hdGNoPy5ncm91cHM/LmRlc2NyaXB0aW9uID8/IFwiXCJ9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbk1hdGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0U1NIQWdlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBub0FydGlmYWN0c1RvU291cmNlTWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmZXJlbmNlVHlwZSA9IG5ldyB5YW1sLlR5cGUoXCIhcmVmZXJlbmNlXCIsIHtcbiAgICAgICAgICAgIGtpbmQ6IFwic2VxdWVuY2VcIixcbiAgICAgICAgICAgIGNvbnN0cnVjdDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge3JlZmVyZW5jZURhdGE6IGRhdGF9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHlhbWwuREVGQVVMVF9TQ0hFTUEuZXh0ZW5kKFtyZWZlcmVuY2VUeXBlXSk7XG4gICAgICAgIGxldCBmaWxlRGF0YTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZmlsZURhdGEgPSB5YW1sLmxvYWRBbGwoZmlsZVNwbGl0Q2xvbmUuam9pbihcIlxcblwiKSwgbnVsbCwge3NjaGVtYX0pIGFzIGFueVtdO1xuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgeWFtbC5ZQU1MRXhjZXB0aW9uICYmIGUucmVhc29uID09PSBcImR1cGxpY2F0ZWQgbWFwcGluZyBrZXlcIikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrYHtibGFjay5iZ1llbGxvd0JyaWdodCAgV0FSTiB9IGR1cGxpY2F0ZWQgbWFwcGluZyBrZXkgZGV0ZWN0ZWQhIFZhbHVlcyB3aWxsIGJlIG92ZXJ3cml0dGVuIWApO1xuICAgICAgICAgICAgICAgIGZpbGVEYXRhID0geWFtbC5sb2FkQWxsKGZpbGVTcGxpdENsb25lLmpvaW4oXCJcXG5cIiksIG51bGwsIHtzY2hlbWEsIGpzb246IHRydWV9KSBhcyBhbnlbXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlRGF0YS5sZW5ndGggPD0gMSkgcmV0dXJuIGZpbGVEYXRhWzBdO1xuXG4gICAgICAgIGlmIChpc0dpdGxhYlNwZWNGaWxlKGZpbGVEYXRhWzBdKSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRzU3BlY2lmaWNhdGlvbjogYW55ID0gZmlsZURhdGFbMF07XG4gICAgICAgICAgICBjb25zdCB1bmludGVycG9sYXRlZENvbmZpZ3VyYXRpb25zOiBhbnkgPSBmaWxlRGF0YVsxXTtcblxuICAgICAgICAgICAgY29uc3QgaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnMgPSBKU09OLnN0cmluZ2lmeSh1bmludGVycG9sYXRlZENvbmZpZ3VyYXRpb25zKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvXFwkXFxbXFxbXFxzKmlucHV0cy4oPzxpbnRlcnBvbGF0aW9uS2V5PltcXHctXSspXFxzKlxcfD9cXHMqKD88aW50ZXJwb2xhdGlvbkZ1bmN0aW9ucz4uKj8pXFxzKlxcXVxcXS9nIC8vIHJlZ2V4ci5jb20vN3NoMTVcbiAgICAgICAgICAgICAgICAgICAgLCAoXzogc3RyaW5nLCBpbnRlcnBvbGF0aW9uS2V5OiBzdHJpbmcsIGludGVycG9sYXRpb25GdW5jdGlvbnM6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnRmlsZVBhdGggPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGZpbGVQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnBvbGF0aW9uRnVuY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0c1NwZWNpZmljYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3R4LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVJbnRlcnBvbGF0aW9uS2V5KGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVJbnRlcnBvbGF0aW9uRnVuY3Rpb25zKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGdldElucHV0VmFsdWUoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUlucHV0KGlucHV0VmFsdWUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29uVmFsdWUgPSBKU09OLnN0cmluZ2lmeShpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVucXVvdGUgc3RyaW5nIGlmIG5lY2Vzc2FyeVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihqc29uVmFsdWUpID09IFwic3RyaW5nXCIgJiYganNvblZhbHVlLnN0YXJ0c1dpdGgoXCJcXFwiXCIpICYmIGpzb25WYWx1ZS5lbmRzV2l0aChcIlxcXCJcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvblZhbHVlLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc29uVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoaW50ZXJwb2xhdGVkQ29uZmlndXJhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWxlRGF0YVswXTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzR2l0bGFiU3BlY0ZpbGUgKGZpbGVEYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gXCJzcGVjXCIgaW4gZmlsZURhdGE7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW50ZXJwb2xhdGlvbkZ1bmN0aW9ucyAoY3R4OiBhbnkpIHtcbiAgICBjb25zdCB7aW50ZXJwb2xhdGlvbkZ1bmN0aW9ucywgY29uZmlnRmlsZVBhdGh9ID0gY3R4O1xuICAgIGlmIChpbnRlcnBvbGF0aW9uRnVuY3Rpb25zICE9IFwiXCIpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGtge2JsYWNrLmJnWWVsbG93QnJpZ2h0ICBXQVJOIH0gaW50ZXJwb2xhdGlvbiBmdW5jdGlvbnMgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgdmlhIGdpdGxhYi1jaS1sb2NhbC4gRnVuY3Rpb25zIHdpbGwganVzdCBiZSBhIG5vLW9wLmApO1xuICAgIH1cbiAgICBhc3NlcnQoaW50ZXJwb2xhdGlvbkZ1bmN0aW9ucy5zcGxpdChcInxcIikubGVuZ3RoIDw9IE1BWF9GVU5DVElPTlMsIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiB0b28gbWFueSBmdW5jdGlvbnMgaW4gaW50ZXJwb2xhdGlvbiBibG9jay5gKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5wdXRWYWx1ZSAoY3R4OiBhbnkpIHtcbiAgICBjb25zdCB7aW5wdXRzLCBpbnRlcnBvbGF0aW9uS2V5LCBjb25maWdGaWxlUGF0aCwgaW5wdXRzU3BlY2lmaWNhdGlvbn0gPSBjdHg7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0c1tpbnRlcnBvbGF0aW9uS2V5XSB8fCBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy5kZWZhdWx0O1xuICAgIGFzc2VydChpbnB1dFZhbHVlICE9PSB1bmRlZmluZWQsIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBcXGB7Ymx1ZUJyaWdodCAke2ludGVycG9sYXRpb25LZXl9fVxcYCBpbnB1dDogcmVxdWlyZWQgdmFsdWUgaGFzIG5vdCBiZWVuIHByb3ZpZGVkLmApO1xuICAgIHJldHVybiBpbnB1dFZhbHVlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUludGVycG9sYXRpb25LZXkgKGN0eDogYW55KTogYW55IHtcbiAgICBjb25zdCB7Y29uZmlnRmlsZVBhdGgsIGludGVycG9sYXRpb25LZXksIGlucHV0c1NwZWNpZmljYXRpb259ID0gY3R4O1xuICAgIGNvbnN0IGludmFsaWRJbnRlcnBvbGF0aW9uS2V5RXJyID0gY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IHVua25vd24gaW50ZXJwb2xhdGlvbiBrZXk6IFxcYCR7aW50ZXJwb2xhdGlvbktleX1cXGAuYDtcbiAgICBhc3NlcnQoaW5wdXRzU3BlY2lmaWNhdGlvbi5zcGVjLmlucHV0cz8uW2ludGVycG9sYXRpb25LZXldICE9PSB1bmRlZmluZWQsIGludmFsaWRJbnRlcnBvbGF0aW9uS2V5RXJyKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJbnB1dCAoaW5wdXRWYWx1ZTogYW55LCBjdHg6IGFueSk6IGFueSB7XG4gICAgY29uc3Qge2NvbmZpZ0ZpbGVQYXRoLCBpbnRlcnBvbGF0aW9uS2V5LCBpbnB1dHNTcGVjaWZpY2F0aW9ufSA9IGN0eDtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBpbnB1dHNTcGVjaWZpY2F0aW9uLnNwZWMuaW5wdXRzW2ludGVycG9sYXRpb25LZXldPy5vcHRpb25zO1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGFzc2VydChvcHRpb25zLmluY2x1ZGVzKGlucHV0VmFsdWUpLFxuICAgICAgICAgICAgY2hhbGtgVGhpcyBHaXRMYWIgQ0kgY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkOiBcXGB7Ymx1ZUJyaWdodCAke2NvbmZpZ0ZpbGVQYXRofX1cXGA6IFxcYHtibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19XFxgIGlucHV0OiBcXGB7Ymx1ZUJyaWdodCAke2lucHV0VmFsdWV9fVxcYCBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBhbGxvd2VkIG9wdGlvbnMuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9IGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/LnR5cGUgfHwgXCJzdHJpbmdcIjtcbiAgICBhc3NlcnQoSU5DTFVERV9JTlBVVFNfU1VQUE9SVEVEX1RZUEVTLmluY2x1ZGVzKHR5cGUpLFxuICAgICAgICBjaGFsa2BUaGlzIEdpdExhYiBDSSBjb25maWd1cmF0aW9uIGlzIGludmFsaWQ6IFxcYHtibHVlQnJpZ2h0ICR7Y29uZmlnRmlsZVBhdGh9fVxcYDogaGVhZGVyOnNwZWM6aW5wdXRzOntibHVlQnJpZ2h0ICR7aW50ZXJwb2xhdGlvbktleX19IGlucHV0IHR5cGUgdW5rbm93biB2YWx1ZToge2JsdWVCcmlnaHQgJHt0eXBlfX0uYCk7XG4gICAgYXNzZXJ0KHR5cGVvZiBpbnB1dFZhbHVlID09IHR5cGUsXG4gICAgICAgIGNoYWxrYFRoaXMgR2l0TGFiIENJIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZDogXFxge2JsdWVCcmlnaHQgJHtjb25maWdGaWxlUGF0aH19XFxgOiBcXGB7Ymx1ZUJyaWdodCAke2ludGVycG9sYXRpb25LZXl9fVxcYCBpbnB1dDogcHJvdmlkZWQgdmFsdWUgaXMgbm90IGEge2JsdWVCcmlnaHQgJHt0eXBlfX0uYCk7XG5cbiAgICBjb25zdCByZWdleCA9IGlucHV0c1NwZWNpZmljYXRpb24uc3BlYy5pbnB1dHNbaW50ZXJwb2xhdGlvbktleV0/LnJlZ2V4O1xuICAgIGlmIChyZWdleCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsa2B7YmxhY2suYmdZZWxsb3dCcmlnaHQgIFdBUk4gfSBzcGVjOmlucHV0czpyZWdleCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB2aWEgZ2l0bGFiLWNpLWxvY2FsLiBUaGlzIHdpbGwganVzdCBiZSBhIG5vLW9wLmApO1xuICAgIH1cbn1cbiJdfQ==
|
package/src/schema/schema.json
CHANGED
|
@@ -396,8 +396,7 @@
|
|
|
396
396
|
"local": {
|
|
397
397
|
"description": "Relative path from local repository root (`/`) to the `yaml`/`yml` file template. The file must be on the same branch, and does not work across git submodules.",
|
|
398
398
|
"type": "string",
|
|
399
|
-
"format": "uri-reference"
|
|
400
|
-
"pattern": "\\.ya?ml$"
|
|
399
|
+
"format": "uri-reference"
|
|
401
400
|
},
|
|
402
401
|
"rules": {
|
|
403
402
|
"$ref": "#/definitions/includeRules"
|
|
@@ -416,8 +415,7 @@
|
|
|
416
415
|
"properties": {
|
|
417
416
|
"project": {
|
|
418
417
|
"description": "Path to the project, e.g. `group/project`, or `group/sub-group/project` [Learn more](https://docs.gitlab.com/ee/ci/yaml/index.html#includefile).",
|
|
419
|
-
"type": "string"
|
|
420
|
-
"pattern": "(?:\\S/\\S|\\$\\S+)"
|
|
418
|
+
"type": "string"
|
|
421
419
|
},
|
|
422
420
|
"ref": {
|
|
423
421
|
"description": "Branch/Tag/Commit-hash for the target project.",
|
|
@@ -427,15 +425,13 @@
|
|
|
427
425
|
"oneOf": [
|
|
428
426
|
{
|
|
429
427
|
"description": "Relative path from project root (`/`) to the `yaml`/`yml` file template.",
|
|
430
|
-
"type": "string"
|
|
431
|
-
"pattern": "\\.ya?ml$"
|
|
428
|
+
"type": "string"
|
|
432
429
|
},
|
|
433
430
|
{
|
|
434
431
|
"description": "List of files by relative path from project root (`/`) to the `yaml`/`yml` file template.",
|
|
435
432
|
"type": "array",
|
|
436
433
|
"items": {
|
|
437
|
-
"type": "string"
|
|
438
|
-
"pattern": "\\.ya?ml$"
|
|
434
|
+
"type": "string"
|
|
439
435
|
}
|
|
440
436
|
}
|
|
441
437
|
]
|
|
@@ -459,8 +455,7 @@
|
|
|
459
455
|
"template": {
|
|
460
456
|
"description": "Use a `.gitlab-ci.yml` template as a base, e.g. `Nodejs.gitlab-ci.yml`.",
|
|
461
457
|
"type": "string",
|
|
462
|
-
"format": "uri-reference"
|
|
463
|
-
"pattern": "\\.ya?ml$"
|
|
458
|
+
"format": "uri-reference"
|
|
464
459
|
},
|
|
465
460
|
"rules": {
|
|
466
461
|
"$ref": "#/definitions/includeRules"
|
|
@@ -500,8 +495,7 @@
|
|
|
500
495
|
"remote": {
|
|
501
496
|
"description": "URL to a `yaml`/`yml` template file using HTTP/HTTPS.",
|
|
502
497
|
"type": "string",
|
|
503
|
-
"format": "uri-reference"
|
|
504
|
-
"pattern": "^https?://.+\\.ya?ml$"
|
|
498
|
+
"format": "uri-reference"
|
|
505
499
|
},
|
|
506
500
|
"rules": {
|
|
507
501
|
"$ref": "#/definitions/includeRules"
|
|
@@ -1352,8 +1346,7 @@
|
|
|
1352
1346
|
"markdownDescription": "Use the `cache:key` keyword to give each cache a unique identifying key. All jobs that use the same cache key use the same cache, including in different pipelines. Must be used with `cache:path`, or nothing is cached. [Learn More](https://docs.gitlab.com/ee/ci/yaml/#cachekey).",
|
|
1353
1347
|
"oneOf": [
|
|
1354
1348
|
{
|
|
1355
|
-
"type": "string"
|
|
1356
|
-
"pattern": "^(?!.*\\/)^(.*[^.]+.*)$"
|
|
1349
|
+
"type": "string"
|
|
1357
1350
|
},
|
|
1358
1351
|
{
|
|
1359
1352
|
"type": "object",
|
|
@@ -1385,8 +1378,7 @@
|
|
|
1385
1378
|
"policy": {
|
|
1386
1379
|
"type": "string",
|
|
1387
1380
|
"markdownDescription": "Determines the strategy for downloading and updating the cache. [Learn More](https://docs.gitlab.com/ee/ci/yaml/#cachepolicy)",
|
|
1388
|
-
"default": "pull-push"
|
|
1389
|
-
"pattern": "pull-push|pull|push|\\$\\w{1,255}"
|
|
1381
|
+
"default": "pull-push"
|
|
1390
1382
|
},
|
|
1391
1383
|
"unprotect": {
|
|
1392
1384
|
"type": "boolean",
|
|
@@ -1861,8 +1853,7 @@
|
|
|
1861
1853
|
"url": {
|
|
1862
1854
|
"type": "string",
|
|
1863
1855
|
"description": "When set, this will expose buttons in various places for the current environment in Gitlab, that will take you to the defined URL.",
|
|
1864
|
-
"format": "uri"
|
|
1865
|
-
"pattern": "^(https?://.+|\\$[A-Za-z]+)"
|
|
1856
|
+
"format": "uri"
|
|
1866
1857
|
},
|
|
1867
1858
|
"on_stop": {
|
|
1868
1859
|
"type": "string",
|
|
@@ -1949,8 +1940,7 @@
|
|
|
1949
1940
|
"released_at": {
|
|
1950
1941
|
"type": "string",
|
|
1951
1942
|
"description": "The date and time when the release is ready. Defaults to the current date and time if not defined. Should be enclosed in quotes and expressed in ISO 8601 format.",
|
|
1952
|
-
"format": "date-time"
|
|
1953
|
-
"pattern": "^(?:[1-9]\\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\\d|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9]\\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)T(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:Z|[+-][01]\\d:[0-5]\\d)$"
|
|
1943
|
+
"format": "date-time"
|
|
1954
1944
|
},
|
|
1955
1945
|
"assets": {
|
|
1956
1946
|
"type": "object",
|
|
@@ -2009,8 +1999,7 @@
|
|
|
2009
1999
|
"coverage": {
|
|
2010
2000
|
"type": "string",
|
|
2011
2001
|
"description": "Must be a regular expression, optionally but recommended to be quoted, and must be surrounded with '/'. Example: '/Code coverage: \\d+\\.\\d+/'",
|
|
2012
|
-
"format": "regex"
|
|
2013
|
-
"pattern": "^/.+/$"
|
|
2002
|
+
"format": "regex"
|
|
2014
2003
|
},
|
|
2015
2004
|
"retry": {
|
|
2016
2005
|
"$ref": "#/definitions/retry"
|
|
@@ -2035,8 +2024,7 @@
|
|
|
2035
2024
|
"properties": {
|
|
2036
2025
|
"project": {
|
|
2037
2026
|
"description": "Path to the project, e.g. `group/project`, or `group/sub-group/project`.",
|
|
2038
|
-
"type": "string"
|
|
2039
|
-
"pattern": "(?:\\S/\\S|\\$\\S+)"
|
|
2027
|
+
"type": "string"
|
|
2040
2028
|
},
|
|
2041
2029
|
"branch": {
|
|
2042
2030
|
"description": "The branch name that a downstream pipeline will use",
|
|
@@ -2086,8 +2074,7 @@
|
|
|
2086
2074
|
{
|
|
2087
2075
|
"description": "Relative path from local repository root (`/`) to the local YAML file to define the pipeline configuration.",
|
|
2088
2076
|
"type": "string",
|
|
2089
|
-
"format": "uri-reference"
|
|
2090
|
-
"pattern": "\\.ya?ml$"
|
|
2077
|
+
"format": "uri-reference"
|
|
2091
2078
|
},
|
|
2092
2079
|
{
|
|
2093
2080
|
"type": "array",
|
|
@@ -2102,8 +2089,7 @@
|
|
|
2102
2089
|
"local": {
|
|
2103
2090
|
"description": "Relative path from local repository root (`/`) to the local YAML file to define the pipeline configuration.",
|
|
2104
2091
|
"type": "string",
|
|
2105
|
-
"format": "uri-reference"
|
|
2106
|
-
"pattern": "\\.ya?ml$"
|
|
2092
|
+
"format": "uri-reference"
|
|
2107
2093
|
}
|
|
2108
2094
|
}
|
|
2109
2095
|
},
|
|
@@ -2114,8 +2100,7 @@
|
|
|
2114
2100
|
"template": {
|
|
2115
2101
|
"description": "Name of the template YAML file to use in the pipeline configuration.",
|
|
2116
2102
|
"type": "string",
|
|
2117
|
-
"format": "uri-reference"
|
|
2118
|
-
"pattern": "\\.ya?ml$"
|
|
2103
|
+
"format": "uri-reference"
|
|
2119
2104
|
}
|
|
2120
2105
|
}
|
|
2121
2106
|
},
|
|
@@ -2126,8 +2111,7 @@
|
|
|
2126
2111
|
"artifact": {
|
|
2127
2112
|
"description": "Relative path to the generated YAML file which is extracted from the artifacts and used as the configuration for triggering the child pipeline.",
|
|
2128
2113
|
"type": "string",
|
|
2129
|
-
"format": "uri-reference"
|
|
2130
|
-
"pattern": "\\.ya?ml$"
|
|
2114
|
+
"format": "uri-reference"
|
|
2131
2115
|
},
|
|
2132
2116
|
"job": {
|
|
2133
2117
|
"description": "Job name which generates the artifact",
|
|
@@ -2145,8 +2129,7 @@
|
|
|
2145
2129
|
"properties": {
|
|
2146
2130
|
"project": {
|
|
2147
2131
|
"description": "Path to another private project under the same GitLab instance, like `group/project` or `group/sub-group/project`.",
|
|
2148
|
-
"type": "string"
|
|
2149
|
-
"pattern": "(?:\\S/\\S|\\$\\S+)"
|
|
2132
|
+
"type": "string"
|
|
2150
2133
|
},
|
|
2151
2134
|
"ref": {
|
|
2152
2135
|
"description": "Branch/Tag/Commit hash for the target project.",
|
|
@@ -2156,8 +2139,7 @@
|
|
|
2156
2139
|
"file": {
|
|
2157
2140
|
"description": "Relative path from repository root (`/`) to the pipeline configuration YAML file.",
|
|
2158
2141
|
"type": "string",
|
|
2159
|
-
"format": "uri-reference"
|
|
2160
|
-
"pattern": "\\.ya?ml$"
|
|
2142
|
+
"format": "uri-reference"
|
|
2161
2143
|
}
|
|
2162
2144
|
},
|
|
2163
2145
|
"required": [
|
|
@@ -2198,8 +2180,7 @@
|
|
|
2198
2180
|
},
|
|
2199
2181
|
{
|
|
2200
2182
|
"markdownDescription": "Path to the project, e.g. `group/project`, or `group/sub-group/project`. [Learn More](https://docs.gitlab.com/ee/ci/yaml/index.html#trigger).",
|
|
2201
|
-
"type": "string"
|
|
2202
|
-
"pattern": "(?:\\S/\\S|\\$\\S+)"
|
|
2183
|
+
"type": "string"
|
|
2203
2184
|
}
|
|
2204
2185
|
]
|
|
2205
2186
|
},
|
package/src/utils.js
CHANGED
|
@@ -264,12 +264,12 @@ class Utils {
|
|
|
264
264
|
static isObject(v) {
|
|
265
265
|
return Object.getPrototypeOf(v) === Object.prototype;
|
|
266
266
|
}
|
|
267
|
-
static async remoteFileExist(file, ref, domain, projectPath, protocol) {
|
|
267
|
+
static async remoteFileExist(cwd, file, ref, domain, projectPath, protocol, port) {
|
|
268
268
|
switch (protocol) {
|
|
269
269
|
case "ssh":
|
|
270
270
|
case "git":
|
|
271
271
|
try {
|
|
272
|
-
await Utils.
|
|
272
|
+
await Utils.spawn(`git archive --remote=ssh://git@${domain}:${port}/${projectPath}.git ${ref} ${file}`.split(" "), cwd);
|
|
273
273
|
return true;
|
|
274
274
|
}
|
|
275
275
|
catch (e) {
|
|
@@ -295,4 +295,4 @@ class Utils {
|
|
|
295
295
|
}
|
|
296
296
|
}
|
|
297
297
|
exports.Utils = Utils;
|
|
298
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUEwQjtBQUMxQiwrQkFBMEI7QUFDMUIsNkNBQStCO0FBQy9CLHdEQUFnQztBQUNoQywwREFBa0M7QUFDbEMsa0RBQTBCO0FBQzFCLG9EQUE0QjtBQUU1Qix5Q0FBOEM7QUFDOUMsb0RBQTRCO0FBQzVCLDREQUFvQztBQUNwQyxrREFBMEI7QUFvQjFCLE1BQWEsS0FBSztJQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUUsV0FBbUIsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNqRCxPQUFPLElBQUEsZUFBSyxFQUFDLFdBQVcsRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBRSxPQUFpQixFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQ2hELE9BQU8sSUFBQSxlQUFLLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFFLE9BQWlCLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDcEQsT0FBTyxlQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBRSxHQUFXO1FBQ3JCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFD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LENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1QsT0FBTyxLQUFLLENBQUM7Z0JBQ2pCLENBQUM7WUFDTCxDQUFDO1lBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDTixNQUFNLGdCQUFnQixHQUFVLFFBQVEsQ0FBQztnQkFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLGdCQUFnQixpQkFBaUIsQ0FBQyxDQUFDO1lBQzFELENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBelJELHNCQXlSQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7Sm9ifSBmcm9tIFwiLi9qb2JcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IGNoZWNrc3VtIGZyb20gXCJjaGVja3N1bVwiO1xuaW1wb3J0IGJhc2U2NHVybCBmcm9tIFwiYmFzZTY0dXJsXCI7XG5pbXBvcnQgZXhlY2EgZnJvbSBcImV4ZWNhXCI7XG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCB7Q0lDRFZhcmlhYmxlfSBmcm9tIFwiLi92YXJpYWJsZXMtZnJvbS1maWxlc1wiO1xuaW1wb3J0IHtHaXREYXRhLCBHaXRTY2hlbWF9IGZyb20gXCIuL2dpdC1kYXRhXCI7XG5pbXBvcnQgZ2xvYmJ5IGZyb20gXCJnbG9iYnlcIjtcbmltcG9ydCBtaWNyb21hdGNoIGZyb20gXCJtaWNyb21hdGNoXCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XG5cbnR5cGUgUnVsZVJlc3VsdE9wdCA9IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBydWxlczoge1xuICAgICAgICBpZj86IHN0cmluZztcbiAgICAgICAgd2hlbj86IHN0cmluZztcbiAgICAgICAgY2hhbmdlcz86IHN0cmluZ1tdIHwge3BhdGhzOiBzdHJpbmdbXX07XG4gICAgICAgIGV4aXN0cz86IHN0cmluZ1tdO1xuICAgICAgICBhbGxvd19mYWlsdXJlPzogYm9vbGVhbjtcbiAgICAgICAgdmFyaWFibGVzPzoge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIH1bXTtcbiAgICB2YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xufTtcblxudHlwZSBFeHBhbmRXaXRoID0ge1xuICAgIHVuZXNjYXBlOiBzdHJpbmc7XG4gICAgdmFyaWFibGU6IChuYW1lOiBzdHJpbmcpID0+IHN0cmluZztcbn07XG5cbmV4cG9ydCBjbGFzcyBVdGlscyB7XG4gICAgc3RhdGljIGJhc2ggKHNoZWxsU2NyaXB0OiBzdHJpbmcsIGN3ZCA9IHByb2Nlc3MuY3dkKCkpOiBQcm9taXNlPHtzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXJ9PiB7XG4gICAgICAgIHJldHVybiBleGVjYShzaGVsbFNjcmlwdCwge3NoZWxsOiBcImJhc2hcIiwgY3dkfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNwYXduIChjbWRBcmdzOiBzdHJpbmdbXSwgY3dkID0gcHJvY2Vzcy5jd2QoKSk6IFByb21pc2U8e3N0ZG91dDogc3RyaW5nOyBzdGRlcnI6IHN0cmluZ30+IHtcbiAgICAgICAgcmV0dXJuIGV4ZWNhKGNtZEFyZ3NbMF0sIGNtZEFyZ3Muc2xpY2UoMSksIHtjd2R9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc3luY1NwYXduIChjbWRBcmdzOiBzdHJpbmdbXSwgY3dkID0gcHJvY2Vzcy5jd2QoKSk6IHtzdGRvdXQ6IHN0cmluZzsgc3RkZXJyOiBzdHJpbmd9IHtcbiAgICAgICAgcmV0dXJuIGV4ZWNhLnN5bmMoY21kQXJnc1swXSwgY21kQXJncy5zbGljZSgxKSwge2N3ZH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBmc1VybCAodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoL15odHRwczpcXC9cXC8vZywgXCJcIikucmVwbGFjZSgvXmh0dHA6XFwvXFwvL2csIFwiXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBzYWZlRG9ja2VyU3RyaW5nIChqb2JOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGpvYk5hbWUucmVwbGFjZSgvW15cXHctXSsvZywgKG1hdGNoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYmFzZTY0dXJsLmVuY29kZShtYXRjaCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JFYWNoUmVhbEpvYiAoZ2l0bGFiRGF0YTogYW55LCBjYWxsYmFjazogKGpvYk5hbWU6IHN0cmluZywgam9iRGF0YTogYW55KSA9PiB2b2lkKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2pvYk5hbWUsIGpvYkRhdGFdIG9mIE9iamVjdC5lbnRyaWVzPGFueT4oZ2l0bGFiRGF0YSkpIHtcbiAgICAgICAgICAgIGlmIChKb2IuaWxsZWdhbEpvYk5hbWVzLmhhcyhqb2JOYW1lKSB8fCBqb2JOYW1lWzBdLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhqb2JOYW1lLCBqb2JEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRKb2JOYW1lc0Zyb21QcmV2aW91c1N0YWdlcyAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+LCBzdGFnZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBjdXJyZW50Sm9iOiBKb2IpIHtcbiAgICAgICAgY29uc3Qgam9iTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGFnZUluZGV4ID0gc3RhZ2VzLmluZGV4T2YoY3VycmVudEpvYi5zdGFnZSk7XG4gICAgICAgIGpvYnMuZm9yRWFjaChqb2IgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhZ2VJbmRleCA9IHN0YWdlcy5pbmRleE9mKGpvYi5zdGFnZSk7XG4gICAgICAgICAgICBpZiAoc3RhZ2VJbmRleCA8IGN1cnJlbnRTdGFnZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgam9iTmFtZXMucHVzaChqb2IubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gam9iTmFtZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGdldENvdmVyYWdlUGVyY2VudCAoY3dkOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIGNvdmVyYWdlUmVnZXg6IHN0cmluZywgam9iTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShgJHtjd2R9LyR7c3RhdGVEaXJ9L291dHB1dC8ke2pvYk5hbWV9LmxvZ2AsIFwidXRmOFwiKTtcblxuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoY292ZXJhZ2VSZWdleC5yZXBsYWNlKC9eXFwvLywgXCJcIikucmVwbGFjZSgvXFwvJC8sIFwiXCIpLCBcImdtXCIpO1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gQXJyYXkuZnJvbShjb250ZW50Lm1hdGNoQWxsKHJlZ2V4KSk7XG4gICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFwiMFwiO1xuXG4gICAgICAgIGNvbnN0IGxhc3RNYXRjaCA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3QgZGlnaXRzID0gL1xcZCsoPzpcXC5cXGQrKT8vLmV4ZWMobGFzdE1hdGNoWzFdID8/IGxhc3RNYXRjaFswXSk7XG4gICAgICAgIGlmICghZGlnaXRzKSByZXR1cm4gXCIwXCI7XG4gICAgICAgIHJldHVybiBkaWdpdHNbMF0gPz8gXCIwXCI7XG4gICAgfVxuXG4gICAgc3RhdGljIHByaW50Sm9iTmFtZXMgKHN0cmVhbTogKHR4dDogc3RyaW5nKSA9PiB2b2lkLCBqb2I6IHtuYW1lOiBzdHJpbmd9LCBpOiBudW1iZXIsIGFycjoge25hbWU6IHN0cmluZ31bXSkge1xuICAgICAgICBpZiAoaSA9PT0gYXJyLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHN0cmVhbShjaGFsa2B7Ymx1ZUJyaWdodCAke2pvYi5uYW1lfX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmVhbShjaGFsa2B7Ymx1ZUJyaWdodCAke2pvYi5uYW1lfX0sIGApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZXhwYW5kVGV4dFdpdGggKHRleHQ6IGFueSwgZXhwYW5kV2l0aDogRXhwYW5kV2l0aCkge1xuICAgICAgICBpZiAodHlwZW9mIHRleHQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRleHQucmVwbGFjZShcbiAgICAgICAgICAgIC8oXFwkXFwkKXxcXCRcXHsoW2EtekEtWl9dXFx3Kil9fFxcJChbYS16QS1aX11cXHcqKS9nLCAvLyBodHRwczovL3JlZ2V4ci5jb20vN3M0a2FcbiAgICAgICAgICAgIChfbWF0Y2gsIGVzY2FwZSwgdmFyMSwgdmFyMikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXNjYXBlICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBleHBhbmRXaXRoLnVuZXNjYXBlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB2YXIxIHx8IHZhcjI7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChuYW1lLCBcInVuZXhwZWN0ZWQgdW5zZXQgY2FwdHVyZSBncm91cFwiKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gYCR7ZXhwYW5kV2l0aC52YXJpYWJsZShuYW1lKX1gO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcIlxcXCIvXCIpICYmIHZhbHVlLmVuZHNXaXRoKFwiL1xcXCJcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDEpLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc3RhdGljIGV4cGFuZFRleHQgKHRleHQ6IGFueSwgZW52czoge1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kVGV4dFdpdGgodGV4dCwge1xuICAgICAgICAgICAgdW5lc2NhcGU6IFwiJFwiLFxuICAgICAgICAgICAgdmFyaWFibGU6IChuYW1lKSA9PiBlbnZzW25hbWVdID8/IFwiXCIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBleHBhbmRWYXJpYWJsZXMgKHZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgICAgICAgbGV0IGV4cGFuZGVkQW55VmFyaWFibGVzLCBpID0gMDtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgYXNzZXJ0KGkgPCAxMDAsIFwiUmVjdXJzaXZlIHZhcmlhYmxlIGV4cGFuc2lvbiByZWFjaGVkIDEwMCBpdGVyYXRpb25zXCIpO1xuICAgICAgICAgICAgZXhwYW5kZWRBbnlWYXJpYWJsZXMgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnZzV2l0aG91dFNlbGYgPSB7Li4udmFyaWFibGVzfTtcbiAgICAgICAgICAgICAgICBkZWxldGUgZW52c1dpdGhvdXRTZWxmW2tdO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSAkJCdzIGFyZSBjb252ZXJ0ZWQgdG8gc2luZ2xlICQncyBub3csIHRoZW4gdGhlIG5leHRcbiAgICAgICAgICAgICAgICAvLyBpdGVyYXRpb24sIHRoZXkgbWlnaHQgYmUgaW50ZXJwcmV0ZWQgYXMgdmFyaWFibGVzLCBldmVuXG4gICAgICAgICAgICAgICAgLy8gdGhvdWdoIHRoZXkgd2VyZSAqZXhwbGljaXRseSogZXNjYXBlZC4gVG8gd29yayBhcm91bmQgdGhpcyxcbiAgICAgICAgICAgICAgICAvLyBsZWF2ZSB0aGUgJyQkJ3MgYXMgdGhlIHNhbWUgdmFsdWUsIHRoZW4gb25seSB1bmVzY2FwZSB0aGVtIGF0XG4gICAgICAgICAgICAgICAgLy8gdGhlIHZlcnkgZW5kLlxuICAgICAgICAgICAgICAgIHZhcmlhYmxlc1trXSA9IFV0aWxzLmV4cGFuZFRleHRXaXRoKHYsIHtcbiAgICAgICAgICAgICAgICAgICAgdW5lc2NhcGU6IFwiJCRcIixcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU6IChuYW1lKSA9PiBlbnZzV2l0aG91dFNlbGZbbmFtZV0gPz8gXCJcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBhbmRlZEFueVZhcmlhYmxlcyB8fD0gdmFyaWFibGVzW2tdICE9PSB2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9IHdoaWxlIChleHBhbmRlZEFueVZhcmlhYmxlcyk7XG5cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgdW5zY2FwZSQkVmFyaWFibGVzICh2YXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KSB7XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlc1trXSA9IFV0aWxzLmV4cGFuZFRleHQodiwge30pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZmluZEVudk1hdGNoZWRWYXJpYWJsZXMgKHZhcmlhYmxlczoge1tuYW1lOiBzdHJpbmddOiBDSUNEVmFyaWFibGV9LCBmaWxlVmFyaWFibGVzRGlyPzogc3RyaW5nLCBlbnZpcm9ubWVudD86IHtuYW1lOiBzdHJpbmd9KSB7XG4gICAgICAgIGNvbnN0IGVudk1hdGNoZWRWYXJpYWJsZXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2Ygdi5lbnZpcm9ubWVudHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW52aXJvbm1lbnQ/Lm5hbWUubWF0Y2goZW50cnkucmVnZXhwKSB8fCBlbnRyeS5yZWdleHAuc291cmNlID09PSBcIi4qXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVWYXJpYWJsZXNEaXIgIT0gbnVsbCAmJiB2LnR5cGUgPT09IFwiZmlsZVwiICYmICFlbnRyeS5maWxlU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnZNYXRjaGVkVmFyaWFibGVzW2tdID0gYCR7ZmlsZVZhcmlhYmxlc0Rpcn0vJHtrfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcy5ta2RpcnBTeW5jKGAke2ZpbGVWYXJpYWJsZXNEaXJ9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGAke2ZpbGVWYXJpYWJsZXNEaXJ9LyR7a31gLCBlbnRyeS5jb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxlVmFyaWFibGVzRGlyICE9IG51bGwgJiYgdi50eXBlID09PSBcImZpbGVcIiAmJiBlbnRyeS5maWxlU291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnZNYXRjaGVkVmFyaWFibGVzW2tdID0gYCR7ZmlsZVZhcmlhYmxlc0Rpcn0vJHtrfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcy5ta2RpcnBTeW5jKGAke2ZpbGVWYXJpYWJsZXNEaXJ9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcy5jb3B5RmlsZVN5bmMoZW50cnkuZmlsZVNvdXJjZSwgYCR7ZmlsZVZhcmlhYmxlc0Rpcn0vJHtrfWApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW52TWF0Y2hlZFZhcmlhYmxlc1trXSA9IGVudHJ5LmNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnZNYXRjaGVkVmFyaWFibGVzO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRSdWxlc1Jlc3VsdCAob3B0OiBSdWxlUmVzdWx0T3B0LCBnaXREYXRhOiBHaXREYXRhLCBqb2JXaGVuOiBzdHJpbmcgPSBcIm9uX3N1Y2Nlc3NcIik6IHt3aGVuOiBzdHJpbmc7IGFsbG93RmFpbHVyZTogYm9vbGVhbjsgdmFyaWFibGVzPzoge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9fSB7XG4gICAgICAgIGxldCB3aGVuID0gXCJuZXZlclwiO1xuXG4gICAgICAgIC8vIG9wdGlvbmFsIG1hbnVhbCBqb2JzIGFsbG93RmFpbHVyZSBkZWZhdWx0cyB0byB0cnVlIGh0dHBzOi8vZG9jcy5naXRsYWIuY29tL2VlL2NpL2pvYnMvam9iX2NvbnRyb2wuaHRtbCN0eXBlcy1vZi1tYW51YWwtam9ic1xuICAgICAgICBsZXQgYWxsb3dGYWlsdXJlID0gam9iV2hlbiA9PT0gXCJtYW51YWxcIjtcbiAgICAgICAgbGV0IHJ1bGVWYXJpYWJsZToge1tuYW1lOiBzdHJpbmddOiBzdHJpbmd9IHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBvcHQucnVsZXMpIHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuZXZhbHVhdGVSdWxlSWYocnVsZS5pZiwgb3B0LnZhcmlhYmxlcykpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFVdGlscy5ldmFsdWF0ZVJ1bGVFeGlzdChvcHQuY3dkLCBydWxlLmV4aXN0cykpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCFVdGlscy5ldmFsdWF0ZVJ1bGVDaGFuZ2VzKGdpdERhdGEuYnJhbmNoZXMuZGVmYXVsdCwgcnVsZS5jaGFuZ2VzKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIHdoZW4gPSBydWxlLndoZW4gPyBydWxlLndoZW4gOiBqb2JXaGVuO1xuICAgICAgICAgICAgYWxsb3dGYWlsdXJlID0gcnVsZS5hbGxvd19mYWlsdXJlID8/IGFsbG93RmFpbHVyZTtcbiAgICAgICAgICAgIHJ1bGVWYXJpYWJsZSA9IHJ1bGUudmFyaWFibGVzO1xuXG4gICAgICAgICAgICBpZiAod2hlbiA9PT0gXCJuZXZlclwiKSBicmVhazsgLy8gRWFybHkgcmV0dXJuLCB3aWxsIG5vdCBldmFsdWF0ZSB0aGUgcmVtYWluaW5nIHJ1bGVzXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge3doZW4sIGFsbG93RmFpbHVyZSwgdmFyaWFibGVzOiBydWxlVmFyaWFibGV9O1xuICAgIH1cblxuICAgIHN0YXRpYyBldmFsdWF0ZVJ1bGVJZiAocnVsZUlmOiBzdHJpbmcgfCB1bmRlZmluZWQsIGVudnM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChydWxlSWYgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGxldCBldmFsU3RyID0gcnVsZUlmO1xuXG4gICAgICAgIC8vIEV4cGFuZCBhbGwgdmFyaWFibGVzXG4gICAgICAgIGV2YWxTdHIgPSB0aGlzLmV4cGFuZFRleHRXaXRoKGV2YWxTdHIsIHtcbiAgICAgICAgICAgIHVuZXNjYXBlOiBKU09OLnN0cmluZ2lmeShcIiRcIiksXG4gICAgICAgICAgICB2YXJpYWJsZTogKG5hbWUpID0+IEpTT04uc3RyaW5naWZ5KGVudnNbbmFtZV0gPz8gbnVsbCksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENvbnZlcnQgPX4gdG8gbWF0Y2ggZnVuY3Rpb25cbiAgICAgICAgZXZhbFN0ciA9IGV2YWxTdHIucmVwbGFjZSgvXFxzKj1+XFxzKihcXC8uKj9cXC9baWdtc3V5XSopKD86XFxzfCQpL2csIFwiLm1hdGNoKCQxKSAhPSBudWxsXCIpO1xuICAgICAgICBldmFsU3RyID0gZXZhbFN0ci5yZXBsYWNlKC9cXHMqPX5cXHMoLis/KShcXCkqPykoPzpcXHN8JCkvZywgXCIubWF0Y2gobmV3IFJlZ0V4cCgkMSkpICE9IG51bGwkMlwiKTsgLy8gV2l0aG91dCBmb3J3YXJkIHNsYXNoZXNcblxuICAgICAgICAvLyBDb252ZXJ0ICF+IHRvIG1hdGNoIGZ1bmN0aW9uXG4gICAgICAgIGV2YWxTdHIgPSBldmFsU3RyLnJlcGxhY2UoL1xccyohflxccyooXFwvLio/XFwvW2lnbXN1eV0qKSg/Olxcc3wkKS9nLCBcIi5tYXRjaCgkMSkgPT0gbnVsbFwiKTtcbiAgICAgICAgZXZhbFN0ciA9IGV2YWxTdHIucmVwbGFjZSgvXFxzKiF+XFxzKC4rPykoXFwpKj8pKD86XFxzfCQpL2csIFwiLm1hdGNoKG5ldyBSZWdFeHAoJDEpKSA9PSBudWxsJDJcIik7IC8vIFdpdGhvdXQgZm9yd2FyZCBzbGFzaGVzXG5cbiAgICAgICAgLy8gQ29udmVydCBhbGwgbnVsbC5tYXRjaCBmdW5jdGlvbnMgdG8gZmFsc2VcbiAgICAgICAgZXZhbFN0ciA9IGV2YWxTdHIucmVwbGFjZSgvbnVsbC5tYXRjaFxcKC4rP1xcKSAhPSBudWxsL2csIFwiZmFsc2VcIik7XG4gICAgICAgIGV2YWxTdHIgPSBldmFsU3RyLnJlcGxhY2UoL251bGwubWF0Y2hcXCguKz9cXCkgPT0gbnVsbC9nLCBcImZhbHNlXCIpO1xuXG4gICAgICAgIHJldHVybiBCb29sZWFuKGV2YWwoZXZhbFN0cikpO1xuICAgIH1cblxuICAgIHN0YXRpYyBldmFsdWF0ZVJ1bGVFeGlzdCAoY3dkOiBzdHJpbmcsIHJ1bGVFeGlzdHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChydWxlRXhpc3RzID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcnVsZUV4aXN0cykge1xuICAgICAgICAgICAgaWYgKGdsb2JieS5zeW5jKHBhdHRlcm4sIHtkb3Q6IHRydWUsIGN3ZH0pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgc3RhdGljIGV2YWx1YXRlUnVsZUNoYW5nZXMgKGRlZmF1bHRCcmFuY2g6IHN0cmluZywgcnVsZUNoYW5nZXM6IHN0cmluZ1tdIHwge3BhdGhzOiBzdHJpbmdbXX0gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHJ1bGVDaGFuZ2VzID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuXG4gICAgICAgIC8vIE5vcm1hbGl6ZSBydWxlczpjaGFuZ2VzOnBhdGhzIHRvIHJ1bGVzOmNoYW5nZXNcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJ1bGVDaGFuZ2VzKSkgcnVsZUNoYW5nZXMgPSBydWxlQ2hhbmdlcy5wYXRocztcblxuICAgICAgICAvLyBOT1RFOiBodHRwczovL2RvY3MuZ2l0bGFiLmNvbS9lZS9jaS95YW1sLyNydWxlc2NoYW5nZXNcbiAgICAgICAgLy8gICAgICAgR2xvYiBwYXR0ZXJucyBhcmUgaW50ZXJwcmV0ZWQgd2l0aCBSdWJ5J3MgW0ZpbGUuZm5tYXRjaF0oaHR0cHM6Ly9kb2NzLnJ1YnktbGFuZy5vcmcvZW4vbWFzdGVyL0ZpbGUuaHRtbCNtZXRob2QtYy1mbm1hdGNoKVxuICAgICAgICAvLyAgICAgICB3aXRoIHRoZSBmbGFncyBGaWxlOjpGTk1fUEFUSE5BTUUgfCBGaWxlOjpGTk1fRE9UTUFUQ0ggfCBGaWxlOjpGTk1fRVhUR0xPQi5cbiAgICAgICAgcmV0dXJuIG1pY3JvbWF0Y2guc29tZShHaXREYXRhLmNoYW5nZWRGaWxlcyhgb3JpZ2luLyR7ZGVmYXVsdEJyYW5jaH1gKSwgcnVsZUNoYW5nZXMsIHtcbiAgICAgICAgICAgIG5vbmVnYXRlOiB0cnVlLFxuICAgICAgICAgICAgbm9leHRnbG9iOiB0cnVlLFxuICAgICAgICAgICAgcG9zaXg6IGZhbHNlLFxuICAgICAgICAgICAgZG90OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcnN5bmNUcmFja2VkRmlsZXMgKGN3ZDogc3RyaW5nLCBzdGF0ZURpcjogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyk6IFByb21pc2U8e2hyZGVsdGF0aW1lOiBbbnVtYmVyLCBudW1iZXJdfT4ge1xuICAgICAgICBjb25zdCB0aW1lID0gcHJvY2Vzcy5ocnRpbWUoKTtcbiAgICAgICAgYXdhaXQgZnMubWtkaXJwKGAke2N3ZH0vJHtzdGF0ZURpcn0vYnVpbGRzLyR7dGFyZ2V0fWApO1xuICAgICAgICBhd2FpdCBVdGlscy5iYXNoKGByc3luYyAtYSAtLWRlbGV0ZS1leGNsdWRlZCAtLWRlbGV0ZSAtLWV4Y2x1ZGUtZnJvbT08KGdpdCBscy1maWxlcyAtbyAtLWRpcmVjdG9yeSB8IGF3ayAne3ByaW50IFwiL1wiJDB9JykgLS1leGNsdWRlICR7c3RhdGVEaXJ9LyAuLyAke3N0YXRlRGlyfS9idWlsZHMvJHt0YXJnZXR9L2AsIGN3ZCk7XG4gICAgICAgIHJldHVybiB7aHJkZWx0YXRpbWU6IHByb2Nlc3MuaHJ0aW1lKHRpbWUpfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgY2hlY2tzdW1GaWxlcyAoZmlsZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8c3RyaW5nPltdID0gW107XG5cbiAgICAgICAgZmlsZXMuZm9yRWFjaCgoZmlsZSkgPT4ge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgY2hlY2tzdW0uZmlsZShmaWxlLCAoZXJyLCBoYXNoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGhhc2gpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgIHJldHVybiBjaGVja3N1bShyZXN1bHQuam9pbihcIlwiKSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzT2JqZWN0ICh2OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZih2KSA9PT0gT2JqZWN0LnByb3RvdHlwZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcmVtb3RlRmlsZUV4aXN0IChmaWxlOiBzdHJpbmcsIHJlZjogc3RyaW5nLCBkb21haW46IHN0cmluZywgcHJvamVjdFBhdGg6IHN0cmluZywgcHJvdG9jb2w6IEdpdFNjaGVtYSkge1xuICAgICAgICBzd2l0Y2ggKHByb3RvY29sKSB7XG4gICAgICAgICAgICBjYXNlIFwic3NoXCI6XG4gICAgICAgICAgICBjYXNlIFwiZ2l0XCI6XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgVXRpbHMuYmFzaChgZ2l0IGFyY2hpdmUgLS1yZW1vdGU9c3NoOi8vZ2l0QCR7ZG9tYWlufS8ke3Byb2plY3RQYXRofS5naXQgJHtyZWZ9ICR7ZmlsZX0gPiAvZGV2L251bGxgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZS5zdGRlcnIuaW5jbHVkZXMoYHJlbW90ZTogZmF0YWw6IHBhdGhzcGVjICcke2ZpbGV9JyBkaWQgbm90IG1hdGNoIGFueSBmaWxlc2ApKSB0aHJvdyBuZXcgRXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgXCJodHRwXCI6XG4gICAgICAgICAgICBjYXNlIFwiaHR0cHNcIjoge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtzdGF0dXN9ID0gYXdhaXQgYXhpb3MuZ2V0KGAke3Byb3RvY29sfTovLyR7ZG9tYWlufS8ke3Byb2plY3RQYXRofS8tL3Jhdy8ke3JlZn0vJHtmaWxlfWApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHN0YXR1cyA9PT0gMjAwKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgY29uc3QgX2V4aGF1c3RpdmVDaGVjazogbmV2ZXIgPSBwcm90b2NvbDtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7X2V4aGF1c3RpdmVDaGVja30gbm90IHN1cHBvcnRlZCFgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
298
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUEwQjtBQUMxQiwrQkFBMEI7QUFDMUIsNkNBQStCO0FBQy9CLHdEQUFnQztBQUNoQywwREFBa0M7QUFDbEMsa0RBQTBCO0FBQzFCLG9EQUE0QjtBQUU1Qix5Q0FBOEM7QUFDOUMsb0RBQTRCO0FBQzVCLDREQUFvQztBQUNwQyxrREFBMEI7QUFvQjFCLE1BQWEsS0FBSztJQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUUsV0FBbUIsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNqRCxPQUFPLElBQUEsZUFBSyxFQUFDLFdBQVcsRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBRSxPQUFpQixFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFO1FBQ2hELE9BQU8sSUFBQSxlQUFLLEVBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFFLE9BQWlCLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDcEQsT0FBTyxlQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBRSxHQUFXO1FBQ3JCLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFD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QUFNLE1BQU0sSUFBSSxXQUFXLFVBQVUsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ2hHLE9BQU8sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQzVCLENBQUM7Z0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDVCxPQUFPLEtBQUssQ0FBQztnQkFDakIsQ0FBQztZQUNMLENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNOLE1BQU0sZ0JBQWdCLEdBQVUsUUFBUSxDQUFDO2dCQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsZ0JBQWdCLGlCQUFpQixDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUF6UkQsc0JBeVJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHtKb2J9IGZyb20gXCIuL2pvYlwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgY2hlY2tzdW0gZnJvbSBcImNoZWNrc3VtXCI7XG5pbXBvcnQgYmFzZTY0dXJsIGZyb20gXCJiYXNlNjR1cmxcIjtcbmltcG9ydCBleGVjYSBmcm9tIFwiZXhlY2FcIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IHtDSUNEVmFyaWFibGV9IGZyb20gXCIuL3ZhcmlhYmxlcy1mcm9tLWZpbGVzXCI7XG5pbXBvcnQge0dpdERhdGEsIEdpdFNjaGVtYX0gZnJvbSBcIi4vZ2l0LWRhdGFcIjtcbmltcG9ydCBnbG9iYnkgZnJvbSBcImdsb2JieVwiO1xuaW1wb3J0IG1pY3JvbWF0Y2ggZnJvbSBcIm1pY3JvbWF0Y2hcIjtcbmltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcblxudHlwZSBSdWxlUmVzdWx0T3B0ID0ge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIHJ1bGVzOiB7XG4gICAgICAgIGlmPzogc3RyaW5nO1xuICAgICAgICB3aGVuPzogc3RyaW5nO1xuICAgICAgICBjaGFuZ2VzPzogc3RyaW5nW10gfCB7cGF0aHM6IHN0cmluZ1tdfTtcbiAgICAgICAgZXhpc3RzPzogc3RyaW5nW107XG4gICAgICAgIGFsbG93X2ZhaWx1cmU/OiBib29sZWFuO1xuICAgICAgICB2YXJpYWJsZXM/OiB7W25hbWU6IHN0cmluZ106IHN0cmluZ307XG4gICAgfVtdO1xuICAgIHZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG59O1xuXG50eXBlIEV4cGFuZFdpdGggPSB7XG4gICAgdW5lc2NhcGU6IHN0cmluZztcbiAgICB2YXJpYWJsZTogKG5hbWU6IHN0cmluZykgPT4gc3RyaW5nO1xufTtcblxuZXhwb3J0IGNsYXNzIFV0aWxzIHtcbiAgICBzdGF0aWMgYmFzaCAoc2hlbGxTY3JpcHQ6IHN0cmluZywgY3dkID0gcHJvY2Vzcy5jd2QoKSk6IFByb21pc2U8e3N0ZG91dDogc3RyaW5nOyBzdGRlcnI6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlcn0+IHtcbiAgICAgICAgcmV0dXJuIGV4ZWNhKHNoZWxsU2NyaXB0LCB7c2hlbGw6IFwiYmFzaFwiLCBjd2R9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc3Bhd24gKGNtZEFyZ3M6IHN0cmluZ1tdLCBjd2QgPSBwcm9jZXNzLmN3ZCgpKTogUHJvbWlzZTx7c3Rkb3V0OiBzdHJpbmc7IHN0ZGVycjogc3RyaW5nfT4ge1xuICAgICAgICByZXR1cm4gZXhlY2EoY21kQXJnc1swXSwgY21kQXJncy5zbGljZSgxKSwge2N3ZH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBzeW5jU3Bhd24gKGNtZEFyZ3M6IHN0cmluZ1tdLCBjd2QgPSBwcm9jZXNzLmN3ZCgpKToge3N0ZG91dDogc3RyaW5nOyBzdGRlcnI6IHN0cmluZ30ge1xuICAgICAgICByZXR1cm4gZXhlY2Euc3luYyhjbWRBcmdzWzBdLCBjbWRBcmdzLnNsaWNlKDEpLCB7Y3dkfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGZzVXJsICh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgvXmh0dHBzOlxcL1xcLy9nLCBcIlwiKS5yZXBsYWNlKC9eaHR0cDpcXC9cXC8vZywgXCJcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIHNhZmVEb2NrZXJTdHJpbmcgKGpvYk5hbWU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gam9iTmFtZS5yZXBsYWNlKC9bXlxcdy1dKy9nLCAobWF0Y2gpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlNjR1cmwuZW5jb2RlKG1hdGNoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvckVhY2hSZWFsSm9iIChnaXRsYWJEYXRhOiBhbnksIGNhbGxiYWNrOiAoam9iTmFtZTogc3RyaW5nLCBqb2JEYXRhOiBhbnkpID0+IHZvaWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBbam9iTmFtZSwgam9iRGF0YV0gb2YgT2JqZWN0LmVudHJpZXM8YW55PihnaXRsYWJEYXRhKSkge1xuICAgICAgICAgICAgaWYgKEpvYi5pbGxlZ2FsSm9iTmFtZXMuaGFzKGpvYk5hbWUpIHx8IGpvYk5hbWVbMF0uc3RhcnRzV2l0aChcIi5cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKGpvYk5hbWUsIGpvYkRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEpvYk5hbWVzRnJvbVByZXZpb3VzU3RhZ2VzIChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4sIHN0YWdlczogcmVhZG9ubHkgc3RyaW5nW10sIGN1cnJlbnRKb2I6IEpvYikge1xuICAgICAgICBjb25zdCBqb2JOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YWdlSW5kZXggPSBzdGFnZXMuaW5kZXhPZihjdXJyZW50Sm9iLnN0YWdlKTtcbiAgICAgICAgam9icy5mb3JFYWNoKGpvYiA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGFnZUluZGV4ID0gc3RhZ2VzLmluZGV4T2Yoam9iLnN0YWdlKTtcbiAgICAgICAgICAgIGlmIChzdGFnZUluZGV4IDwgY3VycmVudFN0YWdlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBqb2JOYW1lcy5wdXNoKGpvYi5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBqb2JOYW1lcztcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgZ2V0Q292ZXJhZ2VQZXJjZW50IChjd2Q6IHN0cmluZywgc3RhdGVEaXI6IHN0cmluZywgY292ZXJhZ2VSZWdleDogc3RyaW5nLCBqb2JOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKGAke2N3ZH0vJHtzdGF0ZURpcn0vb3V0cHV0LyR7am9iTmFtZX0ubG9nYCwgXCJ1dGY4XCIpO1xuXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChjb3ZlcmFnZVJlZ2V4LnJlcGxhY2UoL15cXC8vLCBcIlwiKS5yZXBsYWNlKC9cXC8kLywgXCJcIiksIFwiZ21cIik7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBBcnJheS5mcm9tKGNvbnRlbnQubWF0Y2hBbGwocmVnZXgpKTtcbiAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSByZXR1cm4gXCIwXCI7XG5cbiAgICAgICAgY29uc3QgbGFzdE1hdGNoID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBkaWdpdHMgPSAvXFxkKyg/OlxcLlxcZCspPy8uZXhlYyhsYXN0TWF0Y2hbMV0gPz8gbGFzdE1hdGNoWzBdKTtcbiAgICAgICAgaWYgKCFkaWdpdHMpIHJldHVybiBcIjBcIjtcbiAgICAgICAgcmV0dXJuIGRpZ2l0c1swXSA/PyBcIjBcIjtcbiAgICB9XG5cbiAgICBzdGF0aWMgcHJpbnRKb2JOYW1lcyAoc3RyZWFtOiAodHh0OiBzdHJpbmcpID0+IHZvaWQsIGpvYjoge25hbWU6IHN0cmluZ30sIGk6IG51bWJlciwgYXJyOiB7bmFtZTogc3RyaW5nfVtdKSB7XG4gICAgICAgIGlmIChpID09PSBhcnIubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgc3RyZWFtKGNoYWxrYHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyZWFtKGNoYWxrYHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fSwgYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBleHBhbmRUZXh0V2l0aCAodGV4dDogYW55LCBleHBhbmRXaXRoOiBFeHBhbmRXaXRoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGV4dC5yZXBsYWNlKFxuICAgICAgICAgICAgLyhcXCRcXCQpfFxcJFxceyhbYS16QS1aX11cXHcqKX18XFwkKFthLXpBLVpfXVxcdyopL2csIC8vIGh0dHBzOi8vcmVnZXhyLmNvbS83czRrYVxuICAgICAgICAgICAgKF9tYXRjaCwgZXNjYXBlLCB2YXIxLCB2YXIyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlc2NhcGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cGFuZFdpdGgudW5lc2NhcGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHZhcjEgfHwgdmFyMjtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG5hbWUsIFwidW5leHBlY3RlZCB1bnNldCBjYXB0dXJlIGdyb3VwXCIpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBgJHtleHBhbmRXaXRoLnZhcmlhYmxlKG5hbWUpfWA7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwiXFxcIi9cIikgJiYgdmFsdWUuZW5kc1dpdGgoXCIvXFxcIlwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMSkuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXhwYW5kVGV4dCAodGV4dDogYW55LCBlbnZzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBhbmRUZXh0V2l0aCh0ZXh0LCB7XG4gICAgICAgICAgICB1bmVzY2FwZTogXCIkXCIsXG4gICAgICAgICAgICB2YXJpYWJsZTogKG5hbWUpID0+IGVudnNbbmFtZV0gPz8gXCJcIixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGV4cGFuZFZhcmlhYmxlcyAodmFyaWFibGVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgICAgICBsZXQgZXhwYW5kZWRBbnlWYXJpYWJsZXMsIGkgPSAwO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBhc3NlcnQoaSA8IDEwMCwgXCJSZWN1cnNpdmUgdmFyaWFibGUgZXhwYW5zaW9uIHJlYWNoZWQgMTAwIGl0ZXJhdGlvbnNcIik7XG4gICAgICAgICAgICBleHBhbmRlZEFueVZhcmlhYmxlcyA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudnNXaXRob3V0U2VsZiA9IHsuLi52YXJpYWJsZXN9O1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBlbnZzV2l0aG91dFNlbGZba107XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlICQkJ3MgYXJlIGNvbnZlcnRlZCB0byBzaW5nbGUgJCdzIG5vdywgdGhlbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIGl0ZXJhdGlvbiwgdGhleSBtaWdodCBiZSBpbnRlcnByZXRlZCBhcyB2YXJpYWJsZXMsIGV2ZW5cbiAgICAgICAgICAgICAgICAvLyB0aG91Z2ggdGhleSB3ZXJlICpleHBsaWNpdGx5KiBlc2NhcGVkLiBUbyB3b3JrIGFyb3VuZCB0aGlzLFxuICAgICAgICAgICAgICAgIC8vIGxlYXZlIHRoZSAnJCQncyBhcyB0aGUgc2FtZSB2YWx1ZSwgdGhlbiBvbmx5IHVuZXNjYXBlIHRoZW0gYXRcbiAgICAgICAgICAgICAgICAvLyB0aGUgdmVyeSBlbmQuXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzW2tdID0gVXRpbHMuZXhwYW5kVGV4dFdpdGgodiwge1xuICAgICAgICAgICAgICAgICAgICB1bmVzY2FwZTogXCIkJFwiLFxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZTogKG5hbWUpID0+IGVudnNXaXRob3V0U2VsZltuYW1lXSA/PyBcIlwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkQW55VmFyaWFibGVzIHx8PSB2YXJpYWJsZXNba10gIT09IHY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH0gd2hpbGUgKGV4cGFuZGVkQW55VmFyaWFibGVzKTtcblxuICAgICAgICByZXR1cm4gdmFyaWFibGVzO1xuICAgIH1cblxuICAgIHN0YXRpYyB1bnNjYXBlJCRWYXJpYWJsZXMgKHZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSkge1xuICAgICAgICAgICAgdmFyaWFibGVzW2tdID0gVXRpbHMuZXhwYW5kVGV4dCh2LCB7fSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFyaWFibGVzO1xuICAgIH1cblxuICAgIHN0YXRpYyBmaW5kRW52TWF0Y2hlZFZhcmlhYmxlcyAodmFyaWFibGVzOiB7W25hbWU6IHN0cmluZ106IENJQ0RWYXJpYWJsZX0sIGZpbGVWYXJpYWJsZXNEaXI/OiBzdHJpbmcsIGVudmlyb25tZW50Pzoge25hbWU6IHN0cmluZ30pIHtcbiAgICAgICAgY29uc3QgZW52TWF0Y2hlZFZhcmlhYmxlczoge1trZXk6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB2LmVudmlyb25tZW50cykge1xuICAgICAgICAgICAgICAgIGlmIChlbnZpcm9ubWVudD8ubmFtZS5tYXRjaChlbnRyeS5yZWdleHApIHx8IGVudHJ5LnJlZ2V4cC5zb3VyY2UgPT09IFwiLipcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZVZhcmlhYmxlc0RpciAhPSBudWxsICYmIHYudHlwZSA9PT0gXCJmaWxlXCIgJiYgIWVudHJ5LmZpbGVTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudk1hdGNoZWRWYXJpYWJsZXNba10gPSBgJHtmaWxlVmFyaWFibGVzRGlyfS8ke2t9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZzLm1rZGlycFN5bmMoYCR7ZmlsZVZhcmlhYmxlc0Rpcn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoYCR7ZmlsZVZhcmlhYmxlc0Rpcn0vJHtrfWAsIGVudHJ5LmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpbGVWYXJpYWJsZXNEaXIgIT0gbnVsbCAmJiB2LnR5cGUgPT09IFwiZmlsZVwiICYmIGVudHJ5LmZpbGVTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudk1hdGNoZWRWYXJpYWJsZXNba10gPSBgJHtmaWxlVmFyaWFibGVzRGlyfS8ke2t9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZzLm1rZGlycFN5bmMoYCR7ZmlsZVZhcmlhYmxlc0Rpcn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZzLmNvcHlGaWxlU3luYyhlbnRyeS5maWxlU291cmNlLCBgJHtmaWxlVmFyaWFibGVzRGlyfS8ke2t9YCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnZNYXRjaGVkVmFyaWFibGVzW2tdID0gZW50cnkuY29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudk1hdGNoZWRWYXJpYWJsZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFJ1bGVzUmVzdWx0IChvcHQ6IFJ1bGVSZXN1bHRPcHQsIGdpdERhdGE6IEdpdERhdGEsIGpvYldoZW46IHN0cmluZyA9IFwib25fc3VjY2Vzc1wiKToge3doZW46IHN0cmluZzsgYWxsb3dGYWlsdXJlOiBib29sZWFuOyB2YXJpYWJsZXM/OiB7W25hbWU6IHN0cmluZ106IHN0cmluZ319IHtcbiAgICAgICAgbGV0IHdoZW4gPSBcIm5ldmVyXCI7XG5cbiAgICAgICAgLy8gb3B0aW9uYWwgbWFudWFsIGpvYnMgYWxsb3dGYWlsdXJlIGRlZmF1bHRzIHRvIHRydWUgaHR0cHM6Ly9kb2NzLmdpdGxhYi5jb20vZWUvY2kvam9icy9qb2JfY29udHJvbC5odG1sI3R5cGVzLW9mLW1hbnVhbC1qb2JzXG4gICAgICAgIGxldCBhbGxvd0ZhaWx1cmUgPSBqb2JXaGVuID09PSBcIm1hbnVhbFwiO1xuICAgICAgICBsZXQgcnVsZVZhcmlhYmxlOiB7W25hbWU6IHN0cmluZ106IHN0cmluZ30gfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIG9wdC5ydWxlcykge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5ldmFsdWF0ZVJ1bGVJZihydWxlLmlmLCBvcHQudmFyaWFibGVzKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmV2YWx1YXRlUnVsZUV4aXN0KG9wdC5jd2QsIHJ1bGUuZXhpc3RzKSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIVV0aWxzLmV2YWx1YXRlUnVsZUNoYW5nZXMoZ2l0RGF0YS5icmFuY2hlcy5kZWZhdWx0LCBydWxlLmNoYW5nZXMpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgd2hlbiA9IHJ1bGUud2hlbiA/IHJ1bGUud2hlbiA6IGpvYldoZW47XG4gICAgICAgICAgICBhbGxvd0ZhaWx1cmUgPSBydWxlLmFsbG93X2ZhaWx1cmUgPz8gYWxsb3dGYWlsdXJlO1xuICAgICAgICAgICAgcnVsZVZhcmlhYmxlID0gcnVsZS52YXJpYWJsZXM7XG5cbiAgICAgICAgICAgIGlmICh3aGVuID09PSBcIm5ldmVyXCIpIGJyZWFrOyAvLyBFYXJseSByZXR1cm4sIHdpbGwgbm90IGV2YWx1YXRlIHRoZSByZW1haW5pbmcgcnVsZXNcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7d2hlbiwgYWxsb3dGYWlsdXJlLCB2YXJpYWJsZXM6IHJ1bGVWYXJpYWJsZX07XG4gICAgfVxuXG4gICAgc3RhdGljIGV2YWx1YXRlUnVsZUlmIChydWxlSWY6IHN0cmluZyB8IHVuZGVmaW5lZCwgZW52czoge1trZXk6IHN0cmluZ106IHN0cmluZ30pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHJ1bGVJZiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgbGV0IGV2YWxTdHIgPSBydWxlSWY7XG5cbiAgICAgICAgLy8gRXhwYW5kIGFsbCB2YXJpYWJsZXNcbiAgICAgICAgZXZhbFN0ciA9IHRoaXMuZXhwYW5kVGV4dFdpdGgoZXZhbFN0ciwge1xuICAgICAgICAgICAgdW5lc2NhcGU6IEpTT04uc3RyaW5naWZ5KFwiJFwiKSxcbiAgICAgICAgICAgIHZhcmlhYmxlOiAobmFtZSkgPT4gSlNPTi5zdHJpbmdpZnkoZW52c1tuYW1lXSA/PyBudWxsKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ29udmVydCA9fiB0byBtYXRjaCBmdW5jdGlvblxuICAgICAgICBldmFsU3RyID0gZXZhbFN0ci5yZXBsYWNlKC9cXHMqPX5cXHMqKFxcLy4qP1xcL1tpZ21zdXldKikoPzpcXHN8JCkvZywgXCIubWF0Y2goJDEpICE9IG51bGxcIik7XG4gICAgICAgIGV2YWxTdHIgPSBldmFsU3RyLnJlcGxhY2UoL1xccyo9flxccyguKz8pKFxcKSo/KSg/Olxcc3wkKS9nLCBcIi5tYXRjaChuZXcgUmVnRXhwKCQxKSkgIT0gbnVsbCQyXCIpOyAvLyBXaXRob3V0IGZvcndhcmQgc2xhc2hlc1xuXG4gICAgICAgIC8vIENvbnZlcnQgIX4gdG8gbWF0Y2ggZnVuY3Rpb25cbiAgICAgICAgZXZhbFN0ciA9IGV2YWxTdHIucmVwbGFjZSgvXFxzKiF+XFxzKihcXC8uKj9cXC9baWdtc3V5XSopKD86XFxzfCQpL2csIFwiLm1hdGNoKCQxKSA9PSBudWxsXCIpO1xuICAgICAgICBldmFsU3RyID0gZXZhbFN0ci5yZXBsYWNlKC9cXHMqIX5cXHMoLis/KShcXCkqPykoPzpcXHN8JCkvZywgXCIubWF0Y2gobmV3IFJlZ0V4cCgkMSkpID09IG51bGwkMlwiKTsgLy8gV2l0aG91dCBmb3J3YXJkIHNsYXNoZXNcblxuICAgICAgICAvLyBDb252ZXJ0IGFsbCBudWxsLm1hdGNoIGZ1bmN0aW9ucyB0byBmYWxzZVxuICAgICAgICBldmFsU3RyID0gZXZhbFN0ci5yZXBsYWNlKC9udWxsLm1hdGNoXFwoLis/XFwpICE9IG51bGwvZywgXCJmYWxzZVwiKTtcbiAgICAgICAgZXZhbFN0ciA9IGV2YWxTdHIucmVwbGFjZSgvbnVsbC5tYXRjaFxcKC4rP1xcKSA9PSBudWxsL2csIFwiZmFsc2VcIik7XG5cbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZXZhbChldmFsU3RyKSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGV2YWx1YXRlUnVsZUV4aXN0IChjd2Q6IHN0cmluZywgcnVsZUV4aXN0czogc3RyaW5nW10gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHJ1bGVFeGlzdHMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBydWxlRXhpc3RzKSB7XG4gICAgICAgICAgICBpZiAoZ2xvYmJ5LnN5bmMocGF0dGVybiwge2RvdDogdHJ1ZSwgY3dkfSkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXZhbHVhdGVSdWxlQ2hhbmdlcyAoZGVmYXVsdEJyYW5jaDogc3RyaW5nLCBydWxlQ2hhbmdlczogc3RyaW5nW10gfCB7cGF0aHM6IHN0cmluZ1tdfSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAocnVsZUNoYW5nZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgLy8gTm9ybWFsaXplIHJ1bGVzOmNoYW5nZXM6cGF0aHMgdG8gcnVsZXM6Y2hhbmdlc1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocnVsZUNoYW5nZXMpKSBydWxlQ2hhbmdlcyA9IHJ1bGVDaGFuZ2VzLnBhdGhzO1xuXG4gICAgICAgIC8vIE5PVEU6IGh0dHBzOi8vZG9jcy5naXRsYWIuY29tL2VlL2NpL3lhbWwvI3J1bGVzY2hhbmdlc1xuICAgICAgICAvLyAgICAgICBHbG9iIHBhdHRlcm5zIGFyZSBpbnRlcnByZXRlZCB3aXRoIFJ1YnkncyBbRmlsZS5mbm1hdGNoXShodHRwczovL2RvY3MucnVieS1sYW5nLm9yZy9lbi9tYXN0ZXIvRmlsZS5odG1sI21ldGhvZC1jLWZubWF0Y2gpXG4gICAgICAgIC8vICAgICAgIHdpdGggdGhlIGZsYWdzIEZpbGU6OkZOTV9QQVRITkFNRSB8IEZpbGU6OkZOTV9ET1RNQVRDSCB8IEZpbGU6OkZOTV9FWFRHTE9CLlxuICAgICAgICByZXR1cm4gbWljcm9tYXRjaC5zb21lKEdpdERhdGEuY2hhbmdlZEZpbGVzKGBvcmlnaW4vJHtkZWZhdWx0QnJhbmNofWApLCBydWxlQ2hhbmdlcywge1xuICAgICAgICAgICAgbm9uZWdhdGU6IHRydWUsXG4gICAgICAgICAgICBub2V4dGdsb2I6IHRydWUsXG4gICAgICAgICAgICBwb3NpeDogZmFsc2UsXG4gICAgICAgICAgICBkb3Q6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyByc3luY1RyYWNrZWRGaWxlcyAoY3dkOiBzdHJpbmcsIHN0YXRlRGlyOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nKTogUHJvbWlzZTx7aHJkZWx0YXRpbWU6IFtudW1iZXIsIG51bWJlcl19PiB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSBwcm9jZXNzLmhydGltZSgpO1xuICAgICAgICBhd2FpdCBmcy5ta2RpcnAoYCR7Y3dkfS8ke3N0YXRlRGlyfS9idWlsZHMvJHt0YXJnZXR9YCk7XG4gICAgICAgIGF3YWl0IFV0aWxzLmJhc2goYHJzeW5jIC1hIC0tZGVsZXRlLWV4Y2x1ZGVkIC0tZGVsZXRlIC0tZXhjbHVkZS1mcm9tPTwoZ2l0IGxzLWZpbGVzIC1vIC0tZGlyZWN0b3J5IHwgYXdrICd7cHJpbnQgXCIvXCIkMH0nKSAtLWV4Y2x1ZGUgJHtzdGF0ZURpcn0vIC4vICR7c3RhdGVEaXJ9L2J1aWxkcy8ke3RhcmdldH0vYCwgY3dkKTtcbiAgICAgICAgcmV0dXJuIHtocmRlbHRhdGltZTogcHJvY2Vzcy5ocnRpbWUodGltZSl9O1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBjaGVja3N1bUZpbGVzIChmaWxlczogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBwcm9taXNlczogUHJvbWlzZTxzdHJpbmc+W10gPSBbXTtcblxuICAgICAgICBmaWxlcy5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBjaGVja3N1bS5maWxlKGZpbGUsIChlcnIsIGhhc2gpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaGFzaCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgcmV0dXJuIGNoZWNrc3VtKHJlc3VsdC5qb2luKFwiXCIpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNPYmplY3QgKHY6IGFueSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHYpID09PSBPYmplY3QucHJvdG90eXBlO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyByZW1vdGVGaWxlRXhpc3QgKGN3ZDogc3RyaW5nLCBmaWxlOiBzdHJpbmcsIHJlZjogc3RyaW5nLCBkb21haW46IHN0cmluZywgcHJvamVjdFBhdGg6IHN0cmluZywgcHJvdG9jb2w6IEdpdFNjaGVtYSwgcG9ydDogc3RyaW5nKSB7XG4gICAgICAgIHN3aXRjaCAocHJvdG9jb2wpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzc2hcIjpcbiAgICAgICAgICAgIGNhc2UgXCJnaXRcIjpcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBVdGlscy5zcGF3bihgZ2l0IGFyY2hpdmUgLS1yZW1vdGU9c3NoOi8vZ2l0QCR7ZG9tYWlufToke3BvcnR9LyR7cHJvamVjdFBhdGh9LmdpdCAke3JlZn0gJHtmaWxlfWAuc3BsaXQoXCIgXCIpLCBjd2QpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlLnN0ZGVyci5pbmNsdWRlcyhgcmVtb3RlOiBmYXRhbDogcGF0aHNwZWMgJyR7ZmlsZX0nIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzYCkpIHRocm93IG5ldyBFcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSBcImh0dHBcIjpcbiAgICAgICAgICAgIGNhc2UgXCJodHRwc1wiOiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge3N0YXR1c30gPSBhd2FpdCBheGlvcy5nZXQoYCR7cHJvdG9jb2x9Oi8vJHtkb21haW59LyR7cHJvamVjdFBhdGh9Ly0vcmF3LyR7cmVmfS8ke2ZpbGV9YCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoc3RhdHVzID09PSAyMDApO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfZXhoYXVzdGl2ZUNoZWNrOiBuZXZlciA9IHByb3RvY29sO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtfZXhoYXVzdGl2ZUNoZWNrfSBub3Qgc3VwcG9ydGVkIWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
package/src/validator.js
CHANGED
|
@@ -31,7 +31,6 @@ const ajv_1 = __importDefault(require("ajv"));
|
|
|
31
31
|
const assert_1 = __importDefault(require("assert"));
|
|
32
32
|
const chalk_1 = __importDefault(require("chalk"));
|
|
33
33
|
const yaml = __importStar(require("js-yaml"));
|
|
34
|
-
const ajv_formats_1 = __importDefault(require("ajv-formats"));
|
|
35
34
|
const schema_1 = __importDefault(require("./schema"));
|
|
36
35
|
class Validator {
|
|
37
36
|
static jsonSchemaValidation(data) {
|
|
@@ -39,16 +38,13 @@ class Validator {
|
|
|
39
38
|
verbose: true,
|
|
40
39
|
allErrors: true,
|
|
41
40
|
allowUnionTypes: true,
|
|
41
|
+
validateFormats: false,
|
|
42
42
|
strictTypes: false, // to suppress the missing types defined in the gitlab-ci json schema
|
|
43
|
+
keywords: ["markdownDescription"],
|
|
43
44
|
});
|
|
44
|
-
ajv.addKeyword("markdownDescription");
|
|
45
|
-
(0, ajv_formats_1.default)(ajv);
|
|
46
45
|
const validate = ajv.compile(schema_1.default);
|
|
47
46
|
const valid = validate(data);
|
|
48
|
-
(0, assert_1.default)(valid, (0, chalk_1.default) `Invalid gitlab-ci configuration! It have failed the json schema validation. Dump the following to the pipeline editor to debug:
|
|
49
|
-
|
|
50
|
-
${yaml.dump(data)}
|
|
51
|
-
`);
|
|
47
|
+
(0, assert_1.default)(valid, (0, chalk_1.default) `Invalid gitlab-ci configuration! It have failed the json schema validation. Dump the following to the pipeline editor to debug: ${yaml.dump(data)}`);
|
|
52
48
|
}
|
|
53
49
|
static needs(jobs, stages) {
|
|
54
50
|
const warnings = [];
|
|
@@ -132,4 +128,4 @@ ${yaml.dump(data)}
|
|
|
132
128
|
}
|
|
133
129
|
}
|
|
134
130
|
exports.Validator = Validator;
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOENBQXNCO0FBRXRCLG9EQUE0QjtBQUM1QixrREFBMEI7QUFDMUIsOENBQWdDO0FBQ2hDLDhEQUFxQztBQUNyQyxzREFBOEI7QUFFOUIsTUFBYSxTQUFTO0lBQ2xCLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBRSxJQUFTO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksYUFBRyxDQUFDO1lBQ2hCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsU0FBUyxFQUFFLElBQUk7WUFDZixlQUFlLEVBQUUsSUFBSTtZQUNyQixXQUFXLEVBQUUsS0FBSyxFQUFFLHFFQUFxRTtTQUM1RixDQUFDLENBQUM7UUFDSCxHQUFHLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDdEMsSUFBQSxxQkFBVSxFQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsZ0JBQU0sQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFBLGdCQUFNLEVBQUMsS0FBSyxFQUNSLElBQUEsZUFBSyxFQUFBOztFQUVmLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0NBQ2hCLENBQUMsQ0FBQztJQUNDLENBQUM7SUFFTyxNQUFNLENBQUMsS0FBSyxDQUFFLElBQXdCLEVBQUUsTUFBeUI7UUFDckUsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO1FBQzlCLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDckIsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLFNBQVM7WUFFM0Qs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QUFhLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSjtBQXZHRCw4QkF1R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQWp2IGZyb20gXCJhanZcIjtcbmltcG9ydCB7Sm9ifSBmcm9tIFwiLi9qb2JcIjtcbmltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tIFwianMteWFtbFwiO1xuaW1wb3J0IGFkZEZvcm1hdHMgZnJvbSBcImFqdi1mb3JtYXRzXCI7XG5pbXBvcnQgc2NoZW1hIGZyb20gXCIuL3NjaGVtYVwiO1xuXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yIHtcbiAgICBzdGF0aWMganNvblNjaGVtYVZhbGlkYXRpb24gKGRhdGE6IGFueSkge1xuICAgICAgICBjb25zdCBhanYgPSBuZXcgQWp2KHtcbiAgICAgICAgICAgIHZlcmJvc2U6IHRydWUsXG4gICAgICAgICAgICBhbGxFcnJvcnM6IHRydWUsXG4gICAgICAgICAgICBhbGxvd1VuaW9uVHlwZXM6IHRydWUsXG4gICAgICAgICAgICBzdHJpY3RUeXBlczogZmFsc2UsIC8vIHRvIHN1cHByZXNzIHRoZSBtaXNzaW5nIHR5cGVzIGRlZmluZWQgaW4gdGhlIGdpdGxhYi1jaSBqc29uIHNjaGVtYVxuICAgICAgICB9KTtcbiAgICAgICAgYWp2LmFkZEtleXdvcmQoXCJtYXJrZG93bkRlc2NyaXB0aW9uXCIpO1xuICAgICAgICBhZGRGb3JtYXRzKGFqdik7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlID0gYWp2LmNvbXBpbGUoc2NoZW1hKTtcbiAgICAgICAgY29uc3QgdmFsaWQgPSB2YWxpZGF0ZShkYXRhKTtcbiAgICAgICAgYXNzZXJ0KHZhbGlkLFxuICAgICAgICAgICAgY2hhbGtgSW52YWxpZCBnaXRsYWItY2kgY29uZmlndXJhdGlvbiEgSXQgaGF2ZSBmYWlsZWQgdGhlIGpzb24gc2NoZW1hIHZhbGlkYXRpb24uIER1bXAgdGhlIGZvbGxvd2luZyB0byB0aGUgcGlwZWxpbmUgZWRpdG9yIHRvIGRlYnVnOlxuXG4ke3lhbWwuZHVtcChkYXRhKX1cbmApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIG5lZWRzIChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4sIHN0YWdlczogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGpvYiBvZiBqb2JzKSB7XG4gICAgICAgICAgICBpZiAoam9iLm5lZWRzID09PSBudWxsIHx8IGpvYi5uZWVkcy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtpLCBuZWVkXSBvZiBqb2IubmVlZHMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5lZWQucGlwZWxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MucHVzaChgJHtqb2IubmFtZX0ubmVlZHNbJHtpfV0uam9iOiR7bmVlZC5qb2J9IGlnbm9yZWQsIHBpcGVsaW5lIGtleSBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobmVlZC5wcm9qZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goYCR7am9iLm5hbWV9Lm5lZWRzWyR7aX1dIGlnbm9yZWQsIHByb2plY3Qga2V5IG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5lZWRKb2IgPSBqb2JzLmZpbmQoaiA9PiBqLmJhc2VOYW1lID09PSBuZWVkLmpvYik7XG4gICAgICAgICAgICAgICAgaWYgKG5lZWQub3B0aW9uYWwgJiYgIW5lZWRKb2IpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGFzc2VydChuZWVkSm9iICE9IG51bGwsIGNoYWxrYG5lZWRzOiBbe2JsdWVCcmlnaHQgJHtuZWVkLmpvYn19XSBmb3Ige2JsdWVCcmlnaHQgJHtqb2IuYmFzZU5hbWV9fSBjb3VsZCBub3QgYmUgZm91bmRgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZWVkSm9iU3RhZ2VJbmRleCA9IHN0YWdlcy5pbmRleE9mKG5lZWRKb2Iuc3RhZ2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGpvYlN0YWdlSW5kZXggPSBzdGFnZXMuaW5kZXhPZihqb2Iuc3RhZ2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChuZWVkSm9iU3RhZ2VJbmRleCA8PSBqb2JTdGFnZUluZGV4LCBjaGFsa2BuZWVkczogW3tibHVlQnJpZ2h0ICR7bmVlZEpvYi5uYW1lfX1dIGZvciB7Ymx1ZUJyaWdodCAke2pvYi5uYW1lfX0gaXMgaW4gYSBmdXR1cmUgc3RhZ2VgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3YXJuaW5ncztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBkZXBlbmRlbmNpZXMgKGpvYnM6IFJlYWRvbmx5QXJyYXk8Sm9iPiwgc3RhZ2VzOiByZWFkb25seSBzdHJpbmdbXSkge1xuICAgICAgICBmb3IgKGNvbnN0IGpvYiBvZiBqb2JzKSB7XG4gICAgICAgICAgICBpZiAoam9iLmRlcGVuZGVuY2llcyA9PT0gbnVsbCB8fCBqb2IuZGVwZW5kZW5jaWVzLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHVuZGVmRGVwcyA9IGpvYi5kZXBlbmRlbmNpZXMuZmlsdGVyKChqKSA9PiAham9icy5zb21lKG4gPT4gbi5iYXNlTmFtZSA9PT0gaikpO1xuICAgICAgICAgICAgYXNzZXJ0KHVuZGVmRGVwcy5sZW5ndGggIT09IGpvYi5kZXBlbmRlbmNpZXMubGVuZ3RoLCBjaGFsa2BkZXBlbmRlbmNpZXM6IFt7Ymx1ZUJyaWdodCAke3VuZGVmRGVwcy5qb2luKFwiLFwiKX19XSBmb3Ige2JsdWVCcmlnaHQgJHtqb2IubmFtZX19IGNhbm5vdCBiZSBmb3VuZGApO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBqb2IuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwSm9iID0gam9icy5maW5kKGogPT4gai5iYXNlTmFtZSA9PT0gZGVwKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGVwSm9iICE9IG51bGwsIGNoYWxrYGRlcGVuZGVuY2llczogW3tibHVlQnJpZ2h0ICR7ZGVwfX1dIGZvciB7Ymx1ZUJyaWdodCAke2pvYi5iYXNlTmFtZX19IGNvdWxkIG5vdCBiZSBmb3VuZGApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcEpvYlN0YWdlSW5kZXggPSBzdGFnZXMuaW5kZXhPZihkZXBKb2Iuc3RhZ2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGpvYlN0YWdlSW5kZXggPSBzdGFnZXMuaW5kZXhPZihqb2Iuc3RhZ2UpO1xuICAgICAgICAgICAgICAgIGFzc2VydChkZXBKb2JTdGFnZUluZGV4IDw9IGpvYlN0YWdlSW5kZXgsIGNoYWxrYGRlcGVuZGVuY2llczogW3tibHVlQnJpZ2h0ICR7ZGVwSm9iLm5hbWV9fV0gZm9yIHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fSBpcyBpbiBhIGZ1dHVyZSBzdGFnZWApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZGVwZW5kZW5jaWVzQ29udGFpbm1lbnQgKGpvYnM6IFJlYWRvbmx5QXJyYXk8Sm9iPikge1xuICAgICAgICBmb3IgKGNvbnN0IGpvYiBvZiBqb2JzKSB7XG4gICAgICAgICAgICBjb25zdCBuZWVkcyA9IGpvYi5uZWVkcztcbiAgICAgICAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IGpvYi5kZXBlbmRlbmNpZXM7XG4gICAgICAgICAgICBpZiAobmVlZHMgJiYgbmVlZHMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghZGVwZW5kZW5jaWVzIHx8ICFuZWVkcykgY29udGludWU7XG5cblxuICAgICAgICAgICAgY29uc3QgZXZlcnlJbmNsdWRlZCA9IGRlcGVuZGVuY2llcy5ldmVyeSgoZGVwOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmVlZHMuc29tZShuID0+IG4uam9iID09PSBkZXApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBhc3NlcnRNc2cgPSBgJHtqb2IuZm9ybWF0dGVkSm9iTmFtZX0gbmVlZHM6ICcke25lZWRzLm1hcChuID0+IG4uam9iKS5qb2luKFwiLFwiKX0nIGRvZXNuJ3QgZnVsbHkgY29udGFpbiBkZXBlbmRlbmNpZXM6ICcke2RlcGVuZGVuY2llcy5qb2luKFwiLFwiKX0nYDtcbiAgICAgICAgICAgIGFzc2VydChldmVyeUluY2x1ZGVkLCBhc3NlcnRNc2cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgc2NyaXB0QmxhbmsgKGpvYnM6IFJlYWRvbmx5QXJyYXk8Sm9iPikge1xuICAgICAgICBmb3IgKGNvbnN0IGpvYiBvZiBqb2JzKSB7XG4gICAgICAgICAgICBpZiAoam9iLnRyaWdnZXIpIGNvbnRpbnVlOyAvLyBKb2JzIHdpdGggdHJpZ2dlciBhcmUgYWxsb3dlZCB0byBoYXZlIGVtcHR5IHNjcmlwdFxuICAgICAgICAgICAgYXNzZXJ0KGpvYi5zY3JpcHRzLmxlbmd0aCA+IDAsIGNoYWxrYHtibHVlICR7am9iLm5hbWV9fSBoYXMgZW1wdHkgc2NyaXB0YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhcnJheU9mU3RyaW5ncyAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+KSB7XG4gICAgICAgIGZvciAoY29uc3Qgam9iIG9mIGpvYnMpIHtcbiAgICAgICAgICAgIGlmIChqb2IudHJpZ2dlcikgY29udGludWU7XG4gICAgICAgICAgICBqb2IuYmVmb3JlU2NyaXB0cy5mb3JFYWNoKChzOiBhbnkpID0+IGFzc2VydCh0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIiwgY2hhbGtge2JsdWUgJHtqb2IubmFtZX19IGJlZm9yZV9zY3JpcHQgY29udGFpbnMgbm9uIHN0cmluZyB2YWx1ZWApKTtcbiAgICAgICAgICAgIGpvYi5hZnRlclNjcmlwdHMuZm9yRWFjaCgoczogYW55KSA9PiBhc3NlcnQodHlwZW9mIHMgPT09IFwic3RyaW5nXCIsIGNoYWxrYHtibHVlICR7am9iLm5hbWV9fSBhZnRlcl9zY3JpcHQgY29udGFpbnMgbm9uIHN0cmluZyB2YWx1ZWApKTtcbiAgICAgICAgICAgIGpvYi5zY3JpcHRzLmZvckVhY2goKHM6IGFueSkgPT4gYXNzZXJ0KHR5cGVvZiBzID09PSBcInN0cmluZ1wiLCBjaGFsa2B7Ymx1ZSAke2pvYi5uYW1lfX0gc2NyaXB0IGNvbnRhaW5zIG5vbiBzdHJpbmcgdmFsdWVgKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgcnVuIChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4sIHN0YWdlczogcmVhZG9ubHkgc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgICAgIHRoaXMuc2NyaXB0Qmxhbmsoam9icyk7XG4gICAgICAgIHRoaXMuYXJyYXlPZlN0cmluZ3Moam9icyk7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goLi4udGhpcy5uZWVkcyhqb2JzLCBzdGFnZXMpKTtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMoam9icywgc3RhZ2VzKTtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXNDb250YWlubWVudChqb2JzKTtcbiAgICAgICAgcmV0dXJuIHdhcm5pbmdzO1xuICAgIH1cbn1cbiJdfQ==
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOENBQXNCO0FBRXRCLG9EQUE0QjtBQUM1QixrREFBMEI7QUFDMUIsOENBQWdDO0FBQ2hDLHNEQUE4QjtBQUU5QixNQUFhLFNBQVM7SUFDbEIsTUFBTSxDQUFDLG9CQUFvQixDQUFFLElBQVM7UUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxhQUFHLENBQUM7WUFDaEIsT0FBTyxFQUFFLElBQUk7WUFDYixTQUFTLEVBQUUsSUFBSTtZQUNmLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLFdBQVcsRUFBRSxLQUFLLEVBQUUscUVBQXFFO1lBQ3pGLFFBQVEsRUFBRSxDQUFDLHFCQUFxQixDQUFDO1NBQ3BDLENBQUMsQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsZ0JBQU0sQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFBLGdCQUFNLEVBQUMsS0FBSyxFQUFFLElBQUEsZUFBSyxFQUFBLG1JQUFtSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3SyxDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQUssQ0FBRSxJQUF3QixFQUFFLE1BQXlCO1FBQ3JFLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztRQUM5QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLElBQUksR0FBRyxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxTQUFTO1lBRTNELEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFB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QyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0o7QUFuR0QsOEJBbUdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEFqdiBmcm9tIFwiYWp2XCI7XG5pbXBvcnQge0pvYn0gZnJvbSBcIi4vam9iXCI7XG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSBcImpzLXlhbWxcIjtcbmltcG9ydCBzY2hlbWEgZnJvbSBcIi4vc2NoZW1hXCI7XG5cbmV4cG9ydCBjbGFzcyBWYWxpZGF0b3Ige1xuICAgIHN0YXRpYyBqc29uU2NoZW1hVmFsaWRhdGlvbiAoZGF0YTogYW55KSB7XG4gICAgICAgIGNvbnN0IGFqdiA9IG5ldyBBanYoe1xuICAgICAgICAgICAgdmVyYm9zZTogdHJ1ZSxcbiAgICAgICAgICAgIGFsbEVycm9yczogdHJ1ZSxcbiAgICAgICAgICAgIGFsbG93VW5pb25UeXBlczogdHJ1ZSxcbiAgICAgICAgICAgIHZhbGlkYXRlRm9ybWF0czogZmFsc2UsXG4gICAgICAgICAgICBzdHJpY3RUeXBlczogZmFsc2UsIC8vIHRvIHN1cHByZXNzIHRoZSBtaXNzaW5nIHR5cGVzIGRlZmluZWQgaW4gdGhlIGdpdGxhYi1jaSBqc29uIHNjaGVtYVxuICAgICAgICAgICAga2V5d29yZHM6IFtcIm1hcmtkb3duRGVzY3JpcHRpb25cIl0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB2YWxpZGF0ZSA9IGFqdi5jb21waWxlKHNjaGVtYSk7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gdmFsaWRhdGUoZGF0YSk7XG4gICAgICAgIGFzc2VydCh2YWxpZCwgY2hhbGtgSW52YWxpZCBnaXRsYWItY2kgY29uZmlndXJhdGlvbiEgSXQgaGF2ZSBmYWlsZWQgdGhlIGpzb24gc2NoZW1hIHZhbGlkYXRpb24uIER1bXAgdGhlIGZvbGxvd2luZyB0byB0aGUgcGlwZWxpbmUgZWRpdG9yIHRvIGRlYnVnOiAke3lhbWwuZHVtcChkYXRhKX1gKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBuZWVkcyAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+LCBzdGFnZXM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2Ygam9icykge1xuICAgICAgICAgICAgaWYgKGpvYi5uZWVkcyA9PT0gbnVsbCB8fCBqb2IubmVlZHMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBbaSwgbmVlZF0gb2Ygam9iLm5lZWRzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgIGlmIChuZWVkLnBpcGVsaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goYCR7am9iLm5hbWV9Lm5lZWRzWyR7aX1dLmpvYjoke25lZWQuam9ifSBpZ25vcmVkLCBwaXBlbGluZSBrZXkgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5lZWQucHJvamVjdCkge1xuICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKGAke2pvYi5uYW1lfS5uZWVkc1ske2l9XSBpZ25vcmVkLCBwcm9qZWN0IGtleSBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBuZWVkSm9iID0gam9icy5maW5kKGogPT4gai5iYXNlTmFtZSA9PT0gbmVlZC5qb2IpO1xuICAgICAgICAgICAgICAgIGlmIChuZWVkLm9wdGlvbmFsICYmICFuZWVkSm9iKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBhc3NlcnQobmVlZEpvYiAhPSBudWxsLCBjaGFsa2BuZWVkczogW3tibHVlQnJpZ2h0ICR7bmVlZC5qb2J9fV0gZm9yIHtibHVlQnJpZ2h0ICR7am9iLmJhc2VOYW1lfX0gY291bGQgbm90IGJlIGZvdW5kYCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmVlZEpvYlN0YWdlSW5kZXggPSBzdGFnZXMuaW5kZXhPZihuZWVkSm9iLnN0YWdlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBqb2JTdGFnZUluZGV4ID0gc3RhZ2VzLmluZGV4T2Yoam9iLnN0YWdlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQobmVlZEpvYlN0YWdlSW5kZXggPD0gam9iU3RhZ2VJbmRleCwgY2hhbGtgbmVlZHM6IFt7Ymx1ZUJyaWdodCAke25lZWRKb2IubmFtZX19XSBmb3Ige2JsdWVCcmlnaHQgJHtqb2IubmFtZX19IGlzIGluIGEgZnV0dXJlIHN0YWdlYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd2FybmluZ3M7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZGVwZW5kZW5jaWVzIChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4sIHN0YWdlczogcmVhZG9ubHkgc3RyaW5nW10pIHtcbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2Ygam9icykge1xuICAgICAgICAgICAgaWYgKGpvYi5kZXBlbmRlbmNpZXMgPT09IG51bGwgfHwgam9iLmRlcGVuZGVuY2llcy5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCB1bmRlZkRlcHMgPSBqb2IuZGVwZW5kZW5jaWVzLmZpbHRlcigoaikgPT4gIWpvYnMuc29tZShuID0+IG4uYmFzZU5hbWUgPT09IGopKTtcbiAgICAgICAgICAgIGFzc2VydCh1bmRlZkRlcHMubGVuZ3RoICE9PSBqb2IuZGVwZW5kZW5jaWVzLmxlbmd0aCwgY2hhbGtgZGVwZW5kZW5jaWVzOiBbe2JsdWVCcmlnaHQgJHt1bmRlZkRlcHMuam9pbihcIixcIil9fV0gZm9yIHtibHVlQnJpZ2h0ICR7am9iLm5hbWV9fSBjYW5ub3QgYmUgZm91bmRgKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkZXAgb2Ygam9iLmRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcEpvYiA9IGpvYnMuZmluZChqID0+IGouYmFzZU5hbWUgPT09IGRlcCk7XG4gICAgICAgICAgICAgICAgYXNzZXJ0KGRlcEpvYiAhPSBudWxsLCBjaGFsa2BkZXBlbmRlbmNpZXM6IFt7Ymx1ZUJyaWdodCAke2RlcH19XSBmb3Ige2JsdWVCcmlnaHQgJHtqb2IuYmFzZU5hbWV9fSBjb3VsZCBub3QgYmUgZm91bmRgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBKb2JTdGFnZUluZGV4ID0gc3RhZ2VzLmluZGV4T2YoZGVwSm9iLnN0YWdlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBqb2JTdGFnZUluZGV4ID0gc3RhZ2VzLmluZGV4T2Yoam9iLnN0YWdlKTtcbiAgICAgICAgICAgICAgICBhc3NlcnQoZGVwSm9iU3RhZ2VJbmRleCA8PSBqb2JTdGFnZUluZGV4LCBjaGFsa2BkZXBlbmRlbmNpZXM6IFt7Ymx1ZUJyaWdodCAke2RlcEpvYi5uYW1lfX1dIGZvciB7Ymx1ZUJyaWdodCAke2pvYi5uYW1lfX0gaXMgaW4gYSBmdXR1cmUgc3RhZ2VgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGRlcGVuZGVuY2llc0NvbnRhaW5tZW50IChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4pIHtcbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2Ygam9icykge1xuICAgICAgICAgICAgY29uc3QgbmVlZHMgPSBqb2IubmVlZHM7XG4gICAgICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBqb2IuZGVwZW5kZW5jaWVzO1xuICAgICAgICAgICAgaWYgKG5lZWRzICYmIG5lZWRzLmxlbmd0aCA9PT0gMCkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIWRlcGVuZGVuY2llcyB8fCAhbmVlZHMpIGNvbnRpbnVlO1xuXG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZXJ5SW5jbHVkZWQgPSBkZXBlbmRlbmNpZXMuZXZlcnkoKGRlcDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5lZWRzLnNvbWUobiA9PiBuLmpvYiA9PT0gZGVwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgYXNzZXJ0TXNnID0gYCR7am9iLmZvcm1hdHRlZEpvYk5hbWV9IG5lZWRzOiAnJHtuZWVkcy5tYXAobiA9PiBuLmpvYikuam9pbihcIixcIil9JyBkb2Vzbid0IGZ1bGx5IGNvbnRhaW4gZGVwZW5kZW5jaWVzOiAnJHtkZXBlbmRlbmNpZXMuam9pbihcIixcIil9J2A7XG4gICAgICAgICAgICBhc3NlcnQoZXZlcnlJbmNsdWRlZCwgYXNzZXJ0TXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHNjcmlwdEJsYW5rIChqb2JzOiBSZWFkb25seUFycmF5PEpvYj4pIHtcbiAgICAgICAgZm9yIChjb25zdCBqb2Igb2Ygam9icykge1xuICAgICAgICAgICAgaWYgKGpvYi50cmlnZ2VyKSBjb250aW51ZTsgLy8gSm9icyB3aXRoIHRyaWdnZXIgYXJlIGFsbG93ZWQgdG8gaGF2ZSBlbXB0eSBzY3JpcHRcbiAgICAgICAgICAgIGFzc2VydChqb2Iuc2NyaXB0cy5sZW5ndGggPiAwLCBjaGFsa2B7Ymx1ZSAke2pvYi5uYW1lfX0gaGFzIGVtcHR5IHNjcmlwdGApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYXJyYXlPZlN0cmluZ3MgKGpvYnM6IFJlYWRvbmx5QXJyYXk8Sm9iPikge1xuICAgICAgICBmb3IgKGNvbnN0IGpvYiBvZiBqb2JzKSB7XG4gICAgICAgICAgICBpZiAoam9iLnRyaWdnZXIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgam9iLmJlZm9yZVNjcmlwdHMuZm9yRWFjaCgoczogYW55KSA9PiBhc3NlcnQodHlwZW9mIHMgPT09IFwic3RyaW5nXCIsIGNoYWxrYHtibHVlICR7am9iLm5hbWV9fSBiZWZvcmVfc2NyaXB0IGNvbnRhaW5zIG5vbiBzdHJpbmcgdmFsdWVgKSk7XG4gICAgICAgICAgICBqb2IuYWZ0ZXJTY3JpcHRzLmZvckVhY2goKHM6IGFueSkgPT4gYXNzZXJ0KHR5cGVvZiBzID09PSBcInN0cmluZ1wiLCBjaGFsa2B7Ymx1ZSAke2pvYi5uYW1lfX0gYWZ0ZXJfc2NyaXB0IGNvbnRhaW5zIG5vbiBzdHJpbmcgdmFsdWVgKSk7XG4gICAgICAgICAgICBqb2Iuc2NyaXB0cy5mb3JFYWNoKChzOiBhbnkpID0+IGFzc2VydCh0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIiwgY2hhbGtge2JsdWUgJHtqb2IubmFtZX19IHNjcmlwdCBjb250YWlucyBub24gc3RyaW5nIHZhbHVlYCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIHJ1biAoam9iczogUmVhZG9ubHlBcnJheTxKb2I+LCBzdGFnZXM6IHJlYWRvbmx5IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICB0aGlzLnNjcmlwdEJsYW5rKGpvYnMpO1xuICAgICAgICB0aGlzLmFycmF5T2ZTdHJpbmdzKGpvYnMpO1xuICAgICAgICB3YXJuaW5ncy5wdXNoKC4uLnRoaXMubmVlZHMoam9icywgc3RhZ2VzKSk7XG4gICAgICAgIHRoaXMuZGVwZW5kZW5jaWVzKGpvYnMsIHN0YWdlcyk7XG4gICAgICAgIHRoaXMuZGVwZW5kZW5jaWVzQ29udGFpbm1lbnQoam9icyk7XG4gICAgICAgIHJldHVybiB3YXJuaW5ncztcbiAgICB9XG59XG4iXX0=
|