@cdktn/provider-generator 0.25.0-pre.2 → 0.25.0-pre.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,7 +54,9 @@ function directorySnapshot(root) {
54
54
  else {
55
55
  content = fs.readFileSync(filePath, "utf-8");
56
56
  }
57
- output[file] = content;
57
+ // glob yields native separators on Windows; key the snapshot by a
58
+ // "/"-separated path so it is identical on every platform.
59
+ output[file.split(path.sep).join(path.posix.sep)] = content;
58
60
  }
59
61
  return output;
60
62
  }
@@ -158,4 +160,4 @@ describe("Provider", () => {
158
160
  });
159
161
  }, 600000);
160
162
  });
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcHJvdmlkZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQywyQ0FBNkI7QUFDN0IsNkNBQStCO0FBQy9CLCtCQUE0QjtBQUM1Qiw0Q0FBeUM7QUFDekMsOERBQTBEO0FBQzFELDRDQUF1RTtBQU12RSxTQUFTLGlCQUFpQixDQUFDLElBQVk7SUFDckMsTUFBTSxNQUFNLEdBQWdCLEVBQUUsQ0FBQztJQUUvQixNQUFNLEtBQUssR0FBRyxXQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtRQUM1QixNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO1FBQzVCLEdBQUcsRUFBRSxJQUFJO1FBQ1QsS0FBSyxFQUFFLElBQUk7UUFDWCxHQUFHLEVBQUUsSUFBSTtLQUNWLENBQUMsQ0FBQztJQUVILEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFdkMsSUFBSSxPQUFPLENBQUM7UUFFWixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDdkMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFcEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLGtCQUFrQixFQUFFLENBQUM7Z0JBQ25ELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDckIsa0VBQWtFO2dCQUNsRSxrRUFBa0U7Z0JBQ2xFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQzth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LEdBQUcsSUFBSSxrQ0FBZSxDQUMvQjtnQkFDRSxlQUFlLEVBQUUsT0FBTztnQkFDeEIsVUFBVSxFQUFFLFFBQVE7Z0JBQ3BCLGNBQWMsRUFBRSxrQkFBUSxDQUFDLFVBQVU7YUFDcEMsRUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLDZDQUE2QyxDQUMxRCxDQUFDO1lBQ0YsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDaEMsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxFQUFFLE1BQU8sQ0FBQyxDQUFDO0FBQ2QsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgeyBnbG9iIH0gZnJvbSBcImdsb2JcIjtcbmltcG9ydCB7IG1rZHRlbXAgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IENvbnN0cnVjdHNNYWtlciB9IGZyb20gXCIuLi9nZXQvY29uc3RydWN0cy1tYWtlclwiO1xuaW1wb3J0IHsgTGFuZ3VhZ2UsIFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludCB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuXG5pbnRlcmZhY2UgU3ludGhPdXRwdXQge1xuICBbZmlsZVBhdGg6IHN0cmluZ106IGFueTtcbn1cblxuZnVuY3Rpb24gZGlyZWN0b3J5U25hcHNob3Qocm9vdDogc3RyaW5nKSB7XG4gIGNvbnN0IG91dHB1dDogU3ludGhPdXRwdXQgPSB7fTtcblxuICBjb25zdCBmaWxlcyA9IGdsb2Iuc3luYyhcIioqXCIsIHtcbiAgICBpZ25vcmU6IFtcIi5naXQvKipcIiwgXCIuanNpaVwiXSxcbiAgICBjd2Q6IHJvb3QsXG4gICAgbm9kaXI6IHRydWUsXG4gICAgZG90OiB0cnVlLFxuICB9KTtcblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihyb290LCBmaWxlKTtcblxuICAgIGxldCBjb250ZW50O1xuXG4gICAgaWYgKHBhdGguZXh0bmFtZShmaWxlUGF0aCkgPT09IFwiLmpzb25cIikge1xuICAgICAgY29udGVudCA9IGZzLnJlYWRKc29uU3luYyhmaWxlUGF0aCk7XG5cbiAgICAgIGlmIChwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSA9PT0gXCJjb25zdHJhaW50cy5qc29uXCIpIHtcbiAgICAgICAgZGVsZXRlIGNvbnRlbnQuY2RrdGY7XG4gICAgICAgIC8vIGNsaSBpZGVudGl0eSBkZXBlbmRzIG9uIHRoZSB0ZXJyYWZvcm0vb3BlbnRvZnUgYmluYXJ5IGluc3RhbGxlZFxuICAgICAgICAvLyBvbiB0aGUgdGVzdCBydW5uZXIgLSBub3QgZGV0ZXJtaW5pc3RpYywgc28gZXhjbHVkZWQgbGlrZSBjZGt0Zi5cbiAgICAgICAgZGVsZXRlIGNvbnRlbnQuY2xpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCBcInV0Zi04XCIpO1xuICAgIH1cblxuICAgIG91dHB1dFtmaWxlXSA9IGNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiByZXNvdXJjZVR5cGVzUHJlc2VudEluU25hcHNob3QoXG4gIHNuYXBzaG90OiBTeW50aE91dHB1dCxcbiAgcHJvdmlkZXJOYW1lSW5QYXRoOiBzdHJpbmcsXG4pIHtcbiAgY29uc3QgcmVzb3VyY2VzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBmaWxlcyA9IE9iamVjdC5rZXlzKHNuYXBzaG90KTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBmaWxlLm1hdGNoKFxuICAgICAgYC9wcm92aWRlcnMvJHtwcm92aWRlck5hbWVJblBhdGh9LyguKj8pL2luZGV4LnRzL2AsXG4gICAgKTtcbiAgICAvLyBhdm9pZHMgYW55IG5vdCByZXNvdXJjZXMgZnJvbSBiZWluZyBwdXNoZWRcbiAgICBpZiAoXG4gICAgICBtYXRjaCAmJlxuICAgICAgIW1hdGNoWzFdLmluY2x1ZGVzKFwiL1wiKSAmJlxuICAgICAgIW1hdGNoWzFdLmluY2x1ZGVzKFwiZGF0YS1cIikgJiZcbiAgICAgICFtYXRjaFsxXS5pbmNsdWRlcyhcInByb3ZpZGVyXCIpXG4gICAgKSB7XG4gICAgICByZXNvdXJjZXMucHVzaChtYXRjaFsxXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNvdXJjZXM7XG59XG5cbmRlc2NyaWJlKFwiUHJvdmlkZXJcIiwgKCkgPT4ge1xuICBpdChcImdlbmVyYXRlcyBhIHByb3ZpZGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25zdHJhaW50ID0gbmV3IFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludChcbiAgICAgIFwiRGF0YURvZy9kYXRhZG9nQD0gMy4xMi4wXCIsXG4gICAgKTtcbiAgICByZXR1cm4gYXdhaXQgbWtkdGVtcChhc3luYyAod29ya2RpcikgPT4ge1xuICAgICAgY29uc3QganNpaVBhdGggPSBwYXRoLmpvaW4od29ya2RpciwgXCIuanNpaVwiKTtcbiAgICAgIGNvbnN0IG1ha2VyID0gbmV3IENvbnN0cnVjdHNNYWtlcihcbiAgICAgICAge1xuICAgICAgICAgIGNvZGVNYWtlck91dHB1dDogd29ya2RpcixcbiAgICAgICAgICBvdXRwdXRKc2lpOiBqc2lpUGF0aCxcbiAgICAgICAgICB0YXJnZXRMYW5ndWFnZTogTGFuZ3VhZ2UuVFlQRVNDUklQVCxcbiAgICAgICAgfSxcbiAgICAgICAgcHJvY2Vzcy5lbnYuQ0RLVEZfRVhQRVJJTUVOVEFMX1BST1ZJREVSX1NDSEVNQV9DQUNIRV9QQVRILFxuICAgICAgKTtcbiAgICAgIGF3YWl0IG1ha2VyLmdlbmVyYXRlKFtjb25zdHJhaW50XSk7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGRpcmVjdG9yeVNuYXBzaG90KHdvcmtkaXIpO1xuICAgICAgZXhwZWN0KHNuYXBzaG90KS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcbiAgfSwgNjAwXzAwMCk7XG5cbiAgaXQoXCJoYXMgZ2VuZXJhdGVkIHByb3ZpZGVyIHRoYXQgaW5jbHVkZXMgc3RhdGljIGltcG9ydCBmdW5jdGlvbnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBuZXcgVGVycmFmb3JtUHJvdmlkZXJDb25zdHJhaW50KFxuICAgICAgXCJEYXRhRG9nL2RhdGFkb2dAPSAzLjEyLjBcIixcbiAgICApO1xuICAgIHJldHVybiBhd2FpdCBta2R0ZW1wKGFzeW5jICh3b3JrZGlyKSA9PiB7XG4gICAgICBjb25zdCBqc2lpUGF0aCA9IHBhdGguam9pbih3b3JrZGlyLCBcIi5qc2lpXCIpO1xuICAgICAgY29uc3QgbWFrZXIgPSBuZXcgQ29uc3RydWN0c01ha2VyKHtcbiAgICAgICAgY29kZU1ha2VyT3V0cHV0OiB3b3JrZGlyLFxuICAgICAgICBvdXRwdXRKc2lpOiBqc2lpUGF0aCxcbiAgICAgICAgdGFyZ2V0TGFuZ3VhZ2U6IExhbmd1YWdlLlRZUEVTQ1JJUFQsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IG1ha2VyLmdlbmVyYXRlKFtjb25zdHJhaW50XSk7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGRpcmVjdG9yeVNuYXBzaG90KHdvcmtkaXIpO1xuXG4gICAgICBjb25zdCB0ZXJyYWZvcm1SZXNvdXJjZVR5cGVzUHJlc2VudDogc3RyaW5nW10gPVxuICAgICAgICByZXNvdXJjZVR5cGVzUHJlc2VudEluU25hcHNob3Qoc25hcHNob3QsIFwiZGF0YWRvZ1wiKTtcblxuICAgICAgdGVycmFmb3JtUmVzb3VyY2VUeXBlc1ByZXNlbnQuZm9yRWFjaCgocmVzb3VyY2UpID0+IHtcbiAgICAgICAgbGV0IHRlcnJhZm9ybVJlc291cmNlVHlwZSA9IHJlc291cmNlLnJlcGxhY2UoLy0vZywgXCJfXCIpO1xuICAgICAgICBpZiAoIXRlcnJhZm9ybVJlc291cmNlVHlwZS5pbmNsdWRlcyhcImRhdGFkb2dcIikpIHtcbiAgICAgICAgICB0ZXJyYWZvcm1SZXNvdXJjZVR5cGUgPSBgZGF0YWRvZ18ke3RlcnJhZm9ybVJlc291cmNlVHlwZX1gO1xuICAgICAgICB9XG4gICAgICAgIGV4cGVjdChzbmFwc2hvdFtgcHJvdmlkZXJzL2RhdGFkb2cvJHtyZXNvdXJjZX0vaW5kZXgudHNgXSkudG9Db250YWluKFxuICAgICAgICAgIGBwdWJsaWMgc3RhdGljIGdlbmVyYXRlQ29uZmlnRm9ySW1wb3J0KHNjb3BlOiBDb25zdHJ1Y3QsIGltcG9ydFRvSWQ6IHN0cmluZywgaW1wb3J0RnJvbUlkOiBzdHJpbmcsIHByb3ZpZGVyPzogY2RrdG4uVGVycmFmb3JtUHJvdmlkZXIpIHtgLFxuICAgICAgICApO1xuICAgICAgICBleHBlY3Qoc25hcHNob3RbYHByb3ZpZGVycy9kYXRhZG9nLyR7cmVzb3VyY2V9L2luZGV4LnRzYF0pLnRvQ29udGFpbihcbiAgICAgICAgICBgcmV0dXJuIG5ldyBjZGt0bi5JbXBvcnRhYmxlUmVzb3VyY2Uoc2NvcGUsIGltcG9ydFRvSWQsIHsgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiBcIiR7dGVycmFmb3JtUmVzb3VyY2VUeXBlfVwiLCBpbXBvcnRJZDogaW1wb3J0RnJvbUlkLCBwcm92aWRlciB9KTtgLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIDYwMF8wMDApO1xuXG4gIGl0KFwiaGFzIG5hbWUgaW4gY29uc3RyYWludCB0aGF0IGRvZXMgbm90IG1hdGNoIHJlc29sdmVkIG5hbWUgaW4gZnFwblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29uc3RyYWludCA9IG5ldyBUZXJyYWZvcm1Qcm92aWRlckNvbnN0cmFpbnQoe1xuICAgICAgbmFtZTogXCJkb2NrZXJyXCIsXG4gICAgICBzb3VyY2U6IFwicmVnaXN0cnkudGVycmFmb3JtLmlvL2tyZXV6d2Vya2VyL2RvY2tlclwiLFxuICAgICAgdmVyc2lvbjogXCIzLjAuMlwiLFxuICAgIH0pO1xuICAgIHJldHVybiBhd2FpdCBta2R0ZW1wKGFzeW5jICh3b3JrZGlyKSA9PiB7XG4gICAgICBjb25zdCBqc2lpUGF0aCA9IHBhdGguam9pbih3b3JrZGlyLCBcIi5qc2lpXCIpO1xuICAgICAgY29uc3QgbWFrZXIgPSBuZXcgQ29uc3RydWN0c01ha2VyKFxuICAgICAgICB7XG4gICAgICAgICAgY29kZU1ha2VyT3V0cHV0OiB3b3JrZGlyLFxuICAgICAgICAgIG91dHB1dEpzaWk6IGpzaWlQYXRoLFxuICAgICAgICAgIHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZS5UWVBFU0NSSVBULFxuICAgICAgICB9LFxuICAgICAgICBwcm9jZXNzLmVudi5DREtURl9FWFBFUklNRU5UQUxfUFJPVklERVJfU0NIRU1BX0NBQ0hFX1BBVEgsXG4gICAgICApO1xuICAgICAgYXdhaXQgbWFrZXIuZ2VuZXJhdGUoW2NvbnN0cmFpbnRdKTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gZGlyZWN0b3J5U25hcHNob3Qod29ya2Rpcik7XG5cbiAgICAgIGNvbnN0IHRlcnJhZm9ybVJlc291cmNlVHlwZXNQcmVzZW50OiBzdHJpbmdbXSA9XG4gICAgICAgIHJlc291cmNlVHlwZXNQcmVzZW50SW5TbmFwc2hvdChzbmFwc2hvdCwgXCJkb2NrZXJyXCIpO1xuXG4gICAgICB0ZXJyYWZvcm1SZXNvdXJjZVR5cGVzUHJlc2VudC5mb3JFYWNoKChyZXNvdXJjZSkgPT4ge1xuICAgICAgICBleHBlY3QoXG4gICAgICAgICAgc25hcHNob3RbYHByb3ZpZGVycy9kb2NrZXJyLyR7cmVzb3VyY2V9L2luZGV4LnRzYF0sXG4gICAgICAgICkudG9CZURlZmluZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCA2MDBfMDAwKTtcblxuICBpdChcImdlbmVyYXRlcyBjb25zdHJ1Y3RzIGZvciB0d28gcHJvdmlkZXJzIHdpdGggc2FtZSBuYW1lXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25zdHJhaW50ID0gbmV3IFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludCh7XG4gICAgICBuYW1lOiBcImJpdGJ1Y2tldFwiLFxuICAgICAgbmFtZXNwYWNlOiBcIkRyRmF1c3Q5MlwiLFxuICAgICAgdmVyc2lvbjogXCIyLjUxLjBcIixcbiAgICAgIHNvdXJjZTogXCJEckZhdXN0OTIvYml0YnVja2V0XCIsXG4gICAgfSk7XG4gICAgY29uc3QgY29uc3RyYWludDIgPSBuZXcgVGVycmFmb3JtUHJvdmlkZXJDb25zdHJhaW50KHtcbiAgICAgIG5hbWU6IFwiYWJpdGJ1Y2tldFwiLFxuICAgICAgbmFtZXNwYWNlOiBcImFuZHNhZmUtQUdcIixcbiAgICAgIHZlcnNpb246IFwiMi41LjBcIixcbiAgICAgIHNvdXJjZTogXCJhbmRzYWZlLUFHL2JpdGJ1Y2tldFwiLFxuICAgIH0pO1xuICAgIHJldHVybiBhd2FpdCBta2R0ZW1wKGFzeW5jICh3b3JrZGlyKSA9PiB7XG4gICAgICBjb25zdCBqc2lpUGF0aCA9IHBhdGguam9pbih3b3JrZGlyLCBcIi5qc2lpXCIpO1xuICAgICAgY29uc3QgbWFrZXIgPSBuZXcgQ29uc3RydWN0c01ha2VyKFxuICAgICAgICB7XG4gICAgICAgICAgY29kZU1ha2VyT3V0cHV0OiB3b3JrZGlyLFxuICAgICAgICAgIG91dHB1dEpzaWk6IGpzaWlQYXRoLFxuICAgICAgICAgIHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZS5UWVBFU0NSSVBULFxuICAgICAgICB9LFxuICAgICAgICBwcm9jZXNzLmVudi5DREtURl9FWFBFUklNRU5UQUxfUFJPVklERVJfU0NIRU1BX0NBQ0hFX1BBVEgsXG4gICAgICApO1xuICAgICAgYXdhaXQgbWFrZXIuZ2VuZXJhdGUoW2NvbnN0cmFpbnQsIGNvbnN0cmFpbnQyXSk7XG4gICAgICBjb25zb2xlLmxvZyhcIndvcmtkaXJcIiwgd29ya2Rpcik7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGRpcmVjdG9yeVNuYXBzaG90KHdvcmtkaXIpO1xuICAgICAgZXhwZWN0KHNuYXBzaG90KS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcbiAgfSwgNjAwXzAwMCk7XG59KTtcbiJdfQ==
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcHJvdmlkZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQywyQ0FBNkI7QUFDN0IsNkNBQStCO0FBQy9CLCtCQUE0QjtBQUM1Qiw0Q0FBeUM7QUFDekMsOERBQTBEO0FBQzFELDRDQUF1RTtBQU12RSxTQUFTLGlCQUFpQixDQUFDLElBQVk7SUFDckMsTUFBTSxNQUFNLEdBQWdCLEVBQUUsQ0FBQztJQUUvQixNQUFNLEtBQUssR0FBRyxXQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtRQUM1QixNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO1FBQzVCLEdBQUcsRUFBRSxJQUFJO1FBQ1QsS0FBSyxFQUFFLElBQUk7UUFDWCxHQUFHLEVBQUUsSUFBSTtLQUNWLENBQUMsQ0FBQztJQUVILEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFdkMsSUFBSSxPQUFPLENBQUM7UUFFWixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDdkMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFcEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLGtCQUFrQixFQUFFLENBQUM7Z0JBQ25ELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDckIsa0VBQWtFO2dCQUNsRSxrRUFBa0U7Z0JBQ2xFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQzth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S0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksa0NBQWUsQ0FDL0I7Z0JBQ0UsZUFBZSxFQUFFLE9BQU87Z0JBQ3hCLFVBQVUsRUFBRSxRQUFRO2dCQUNwQixjQUFjLEVBQUUsa0JBQVEsQ0FBQyxVQUFVO2FBQ3BDLEVBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2Q0FBNkMsQ0FDMUQsQ0FBQztZQUNGLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsRUFBRSxNQUFPLENBQUMsQ0FBQztBQUNkLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IHsgZ2xvYiB9IGZyb20gXCJnbG9iXCI7XG5pbXBvcnQgeyBta2R0ZW1wIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RzTWFrZXIgfSBmcm9tIFwiLi4vZ2V0L2NvbnN0cnVjdHMtbWFrZXJcIjtcbmltcG9ydCB7IExhbmd1YWdlLCBUZXJyYWZvcm1Qcm92aWRlckNvbnN0cmFpbnQgfSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcblxuaW50ZXJmYWNlIFN5bnRoT3V0cHV0IHtcbiAgW2ZpbGVQYXRoOiBzdHJpbmddOiBhbnk7XG59XG5cbmZ1bmN0aW9uIGRpcmVjdG9yeVNuYXBzaG90KHJvb3Q6IHN0cmluZykge1xuICBjb25zdCBvdXRwdXQ6IFN5bnRoT3V0cHV0ID0ge307XG5cbiAgY29uc3QgZmlsZXMgPSBnbG9iLnN5bmMoXCIqKlwiLCB7XG4gICAgaWdub3JlOiBbXCIuZ2l0LyoqXCIsIFwiLmpzaWlcIl0sXG4gICAgY3dkOiByb290LFxuICAgIG5vZGlyOiB0cnVlLFxuICAgIGRvdDogdHJ1ZSxcbiAgfSk7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4ocm9vdCwgZmlsZSk7XG5cbiAgICBsZXQgY29udGVudDtcblxuICAgIGlmIChwYXRoLmV4dG5hbWUoZmlsZVBhdGgpID09PSBcIi5qc29uXCIpIHtcbiAgICAgIGNvbnRlbnQgPSBmcy5yZWFkSnNvblN5bmMoZmlsZVBhdGgpO1xuXG4gICAgICBpZiAocGF0aC5iYXNlbmFtZShmaWxlUGF0aCkgPT09IFwiY29uc3RyYWludHMuanNvblwiKSB7XG4gICAgICAgIGRlbGV0ZSBjb250ZW50LmNka3RmO1xuICAgICAgICAvLyBjbGkgaWRlbnRpdHkgZGVwZW5kcyBvbiB0aGUgdGVycmFmb3JtL29wZW50b2Z1IGJpbmFyeSBpbnN0YWxsZWRcbiAgICAgICAgLy8gb24gdGhlIHRlc3QgcnVubmVyIC0gbm90IGRldGVybWluaXN0aWMsIHNvIGV4Y2x1ZGVkIGxpa2UgY2RrdGYuXG4gICAgICAgIGRlbGV0ZSBjb250ZW50LmNsaTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgXCJ1dGYtOFwiKTtcbiAgICB9XG5cbiAgICAvLyBnbG9iIHlpZWxkcyBuYXRpdmUgc2VwYXJhdG9ycyBvbiBXaW5kb3dzOyBrZXkgdGhlIHNuYXBzaG90IGJ5IGFcbiAgICAvLyBcIi9cIi1zZXBhcmF0ZWQgcGF0aCBzbyBpdCBpcyBpZGVudGljYWwgb24gZXZlcnkgcGxhdGZvcm0uXG4gICAgb3V0cHV0W2ZpbGUuc3BsaXQocGF0aC5zZXApLmpvaW4ocGF0aC5wb3NpeC5zZXApXSA9IGNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG5mdW5jdGlvbiByZXNvdXJjZVR5cGVzUHJlc2VudEluU25hcHNob3QoXG4gIHNuYXBzaG90OiBTeW50aE91dHB1dCxcbiAgcHJvdmlkZXJOYW1lSW5QYXRoOiBzdHJpbmcsXG4pIHtcbiAgY29uc3QgcmVzb3VyY2VzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBmaWxlcyA9IE9iamVjdC5rZXlzKHNuYXBzaG90KTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgbWF0Y2ggPSBmaWxlLm1hdGNoKFxuICAgICAgYC9wcm92aWRlcnMvJHtwcm92aWRlck5hbWVJblBhdGh9LyguKj8pL2luZGV4LnRzL2AsXG4gICAgKTtcbiAgICAvLyBhdm9pZHMgYW55IG5vdCByZXNvdXJjZXMgZnJvbSBiZWluZyBwdXNoZWRcbiAgICBpZiAoXG4gICAgICBtYXRjaCAmJlxuICAgICAgIW1hdGNoWzFdLmluY2x1ZGVzKFwiL1wiKSAmJlxuICAgICAgIW1hdGNoWzFdLmluY2x1ZGVzKFwiZGF0YS1cIikgJiZcbiAgICAgICFtYXRjaFsxXS5pbmNsdWRlcyhcInByb3ZpZGVyXCIpXG4gICAgKSB7XG4gICAgICByZXNvdXJjZXMucHVzaChtYXRjaFsxXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNvdXJjZXM7XG59XG5cbmRlc2NyaWJlKFwiUHJvdmlkZXJcIiwgKCkgPT4ge1xuICBpdChcImdlbmVyYXRlcyBhIHByb3ZpZGVyXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25zdHJhaW50ID0gbmV3IFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludChcbiAgICAgIFwiRGF0YURvZy9kYXRhZG9nQD0gMy4xMi4wXCIsXG4gICAgKTtcbiAgICByZXR1cm4gYXdhaXQgbWtkdGVtcChhc3luYyAod29ya2RpcikgPT4ge1xuICAgICAgY29uc3QganNpaVBhdGggPSBwYXRoLmpvaW4od29ya2RpciwgXCIuanNpaVwiKTtcbiAgICAgIGNvbnN0IG1ha2VyID0gbmV3IENvbnN0cnVjdHNNYWtlcihcbiAgICAgICAge1xuICAgICAgICAgIGNvZGVNYWtlck91dHB1dDogd29ya2RpcixcbiAgICAgICAgICBvdXRwdXRKc2lpOiBqc2lpUGF0aCxcbiAgICAgICAgICB0YXJnZXRMYW5ndWFnZTogTGFuZ3VhZ2UuVFlQRVNDUklQVCxcbiAgICAgICAgfSxcbiAgICAgICAgcHJvY2Vzcy5lbnYuQ0RLVEZfRVhQRVJJTUVOVEFMX1BST1ZJREVSX1NDSEVNQV9DQUNIRV9QQVRILFxuICAgICAgKTtcbiAgICAgIGF3YWl0IG1ha2VyLmdlbmVyYXRlKFtjb25zdHJhaW50XSk7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGRpcmVjdG9yeVNuYXBzaG90KHdvcmtkaXIpO1xuICAgICAgZXhwZWN0KHNuYXBzaG90KS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcbiAgfSwgNjAwXzAwMCk7XG5cbiAgaXQoXCJoYXMgZ2VuZXJhdGVkIHByb3ZpZGVyIHRoYXQgaW5jbHVkZXMgc3RhdGljIGltcG9ydCBmdW5jdGlvbnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBuZXcgVGVycmFmb3JtUHJvdmlkZXJDb25zdHJhaW50KFxuICAgICAgXCJEYXRhRG9nL2RhdGFkb2dAPSAzLjEyLjBcIixcbiAgICApO1xuICAgIHJldHVybiBhd2FpdCBta2R0ZW1wKGFzeW5jICh3b3JrZGlyKSA9PiB7XG4gICAgICBjb25zdCBqc2lpUGF0aCA9IHBhdGguam9pbih3b3JrZGlyLCBcIi5qc2lpXCIpO1xuICAgICAgY29uc3QgbWFrZXIgPSBuZXcgQ29uc3RydWN0c01ha2VyKHtcbiAgICAgICAgY29kZU1ha2VyT3V0cHV0OiB3b3JrZGlyLFxuICAgICAgICBvdXRwdXRKc2lpOiBqc2lpUGF0aCxcbiAgICAgICAgdGFyZ2V0TGFuZ3VhZ2U6IExhbmd1YWdlLlRZUEVTQ1JJUFQsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IG1ha2VyLmdlbmVyYXRlKFtjb25zdHJhaW50XSk7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGRpcmVjdG9yeVNuYXBzaG90KHdvcmtkaXIpO1xuXG4gICAgICBjb25zdCB0ZXJyYWZvcm1SZXNvdXJjZVR5cGVzUHJlc2VudDogc3RyaW5nW10gPVxuICAgICAgICByZXNvdXJjZVR5cGVzUHJlc2VudEluU25hcHNob3Qoc25hcHNob3QsIFwiZGF0YWRvZ1wiKTtcblxuICAgICAgdGVycmFmb3JtUmVzb3VyY2VUeXBlc1ByZXNlbnQuZm9yRWFjaCgocmVzb3VyY2UpID0+IHtcbiAgICAgICAgbGV0IHRlcnJhZm9ybVJlc291cmNlVHlwZSA9IHJlc291cmNlLnJlcGxhY2UoLy0vZywgXCJfXCIpO1xuICAgICAgICBpZiAoIXRlcnJhZm9ybVJlc291cmNlVHlwZS5pbmNsdWRlcyhcImRhdGFkb2dcIikpIHtcbiAgICAgICAgICB0ZXJyYWZvcm1SZXNvdXJjZVR5cGUgPSBgZGF0YWRvZ18ke3RlcnJhZm9ybVJlc291cmNlVHlwZX1gO1xuICAgICAgICB9XG4gICAgICAgIGV4cGVjdChzbmFwc2hvdFtgcHJvdmlkZXJzL2RhdGFkb2cvJHtyZXNvdXJjZX0vaW5kZXgudHNgXSkudG9Db250YWluKFxuICAgICAgICAgIGBwdWJsaWMgc3RhdGljIGdlbmVyYXRlQ29uZmlnRm9ySW1wb3J0KHNjb3BlOiBDb25zdHJ1Y3QsIGltcG9ydFRvSWQ6IHN0cmluZywgaW1wb3J0RnJvbUlkOiBzdHJpbmcsIHByb3ZpZGVyPzogY2RrdG4uVGVycmFmb3JtUHJvdmlkZXIpIHtgLFxuICAgICAgICApO1xuICAgICAgICBleHBlY3Qoc25hcHNob3RbYHByb3ZpZGVycy9kYXRhZG9nLyR7cmVzb3VyY2V9L2luZGV4LnRzYF0pLnRvQ29udGFpbihcbiAgICAgICAgICBgcmV0dXJuIG5ldyBjZGt0bi5JbXBvcnRhYmxlUmVzb3VyY2Uoc2NvcGUsIGltcG9ydFRvSWQsIHsgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiBcIiR7dGVycmFmb3JtUmVzb3VyY2VUeXBlfVwiLCBpbXBvcnRJZDogaW1wb3J0RnJvbUlkLCBwcm92aWRlciB9KTtgLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIDYwMF8wMDApO1xuXG4gIGl0KFwiaGFzIG5hbWUgaW4gY29uc3RyYWludCB0aGF0IGRvZXMgbm90IG1hdGNoIHJlc29sdmVkIG5hbWUgaW4gZnFwblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29uc3RyYWludCA9IG5ldyBUZXJyYWZvcm1Qcm92aWRlckNvbnN0cmFpbnQoe1xuICAgICAgbmFtZTogXCJkb2NrZXJyXCIsXG4gICAgICBzb3VyY2U6IFwicmVnaXN0cnkudGVycmFmb3JtLmlvL2tyZXV6d2Vya2VyL2RvY2tlclwiLFxuICAgICAgdmVyc2lvbjogXCIzLjAuMlwiLFxuICAgIH0pO1xuICAgIHJldHVybiBhd2FpdCBta2R0ZW1wKGFzeW5jICh3b3JrZGlyKSA9PiB7XG4gICAgICBjb25zdCBqc2lpUGF0aCA9IHBhdGguam9pbih3b3JrZGlyLCBcIi5qc2lpXCIpO1xuICAgICAgY29uc3QgbWFrZXIgPSBuZXcgQ29uc3RydWN0c01ha2VyKFxuICAgICAgICB7XG4gICAgICAgICAgY29kZU1ha2VyT3V0cHV0OiB3b3JrZGlyLFxuICAgICAgICAgIG91dHB1dEpzaWk6IGpzaWlQYXRoLFxuICAgICAgICAgIHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZS5UWVBFU0NSSVBULFxuICAgICAgICB9LFxuICAgICAgICBwcm9jZXNzLmVudi5DREtURl9FWFBFUklNRU5UQUxfUFJPVklERVJfU0NIRU1BX0NBQ0hFX1BBVEgsXG4gICAgICApO1xuICAgICAgYXdhaXQgbWFrZXIuZ2VuZXJhdGUoW2NvbnN0cmFpbnRdKTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gZGlyZWN0b3J5U25hcHNob3Qod29ya2Rpcik7XG5cbiAgICAgIGNvbnN0IHRlcnJhZm9ybVJlc291cmNlVHlwZXNQcmVzZW50OiBzdHJpbmdbXSA9XG4gICAgICAgIHJlc291cmNlVHlwZXNQcmVzZW50SW5TbmFwc2hvdChzbmFwc2hvdCwgXCJkb2NrZXJyXCIpO1xuXG4gICAgICB0ZXJyYWZvcm1SZXNvdXJjZVR5cGVzUHJlc2VudC5mb3JFYWNoKChyZXNvdXJjZSkgPT4ge1xuICAgICAgICBleHBlY3QoXG4gICAgICAgICAgc25hcHNob3RbYHByb3ZpZGVycy9kb2NrZXJyLyR7cmVzb3VyY2V9L2luZGV4LnRzYF0sXG4gICAgICAgICkudG9CZURlZmluZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCA2MDBfMDAwKTtcblxuICBpdChcImdlbmVyYXRlcyBjb25zdHJ1Y3RzIGZvciB0d28gcHJvdmlkZXJzIHdpdGggc2FtZSBuYW1lXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25zdHJhaW50ID0gbmV3IFRlcnJhZm9ybVByb3ZpZGVyQ29uc3RyYWludCh7XG4gICAgICBuYW1lOiBcImJpdGJ1Y2tldFwiLFxuICAgICAgbmFtZXNwYWNlOiBcIkRyRmF1c3Q5MlwiLFxuICAgICAgdmVyc2lvbjogXCIyLjUxLjBcIixcbiAgICAgIHNvdXJjZTogXCJEckZhdXN0OTIvYml0YnVja2V0XCIsXG4gICAgfSk7XG4gICAgY29uc3QgY29uc3RyYWludDIgPSBuZXcgVGVycmFmb3JtUHJvdmlkZXJDb25zdHJhaW50KHtcbiAgICAgIG5hbWU6IFwiYWJpdGJ1Y2tldFwiLFxuICAgICAgbmFtZXNwYWNlOiBcImFuZHNhZmUtQUdcIixcbiAgICAgIHZlcnNpb246IFwiMi41LjBcIixcbiAgICAgIHNvdXJjZTogXCJhbmRzYWZlLUFHL2JpdGJ1Y2tldFwiLFxuICAgIH0pO1xuICAgIHJldHVybiBhd2FpdCBta2R0ZW1wKGFzeW5jICh3b3JrZGlyKSA9PiB7XG4gICAgICBjb25zdCBqc2lpUGF0aCA9IHBhdGguam9pbih3b3JrZGlyLCBcIi5qc2lpXCIpO1xuICAgICAgY29uc3QgbWFrZXIgPSBuZXcgQ29uc3RydWN0c01ha2VyKFxuICAgICAgICB7XG4gICAgICAgICAgY29kZU1ha2VyT3V0cHV0OiB3b3JrZGlyLFxuICAgICAgICAgIG91dHB1dEpzaWk6IGpzaWlQYXRoLFxuICAgICAgICAgIHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZS5UWVBFU0NSSVBULFxuICAgICAgICB9LFxuICAgICAgICBwcm9jZXNzLmVudi5DREtURl9FWFBFUklNRU5UQUxfUFJPVklERVJfU0NIRU1BX0NBQ0hFX1BBVEgsXG4gICAgICApO1xuICAgICAgYXdhaXQgbWFrZXIuZ2VuZXJhdGUoW2NvbnN0cmFpbnQsIGNvbnN0cmFpbnQyXSk7XG4gICAgICBjb25zb2xlLmxvZyhcIndvcmtkaXJcIiwgd29ya2Rpcik7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGRpcmVjdG9yeVNuYXBzaG90KHdvcmtkaXIpO1xuICAgICAgZXhwZWN0KHNuYXBzaG90KS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcbiAgfSwgNjAwXzAwMCk7XG59KTtcbiJdfQ==
@@ -54,7 +54,12 @@ function createTmpHelper() {
54
54
  exports.createTmpHelper = createTmpHelper;
55
55
  function expectModuleToMatchSnapshot(testName, testCategory, fixtureNames) {
56
56
  test(testName, async () => {
57
- await (0, commons_1.withTempDir)(`${testName.replace(/\s*/, "-")}.test`, async () => {
57
+ // Test names become a directory name, so collapse anything that is not
58
+ // filename-safe. The previous /\s*/ matched the empty string at index 0
59
+ // (no global flag either), which only prepended a "-" and left spaces --
60
+ // and characters like "*" in a test title are illegal in Windows paths.
61
+ const safeName = testName.replace(/[^a-zA-Z0-9._-]+/g, "-");
62
+ await (0, commons_1.withTempDir)(`${safeName}.test`, async () => {
58
63
  const curdir = process.cwd();
59
64
  fs.mkdirSync("module");
60
65
  fixtureNames.forEach((fixtureName) => {
@@ -78,4 +83,4 @@ function expectModuleToMatchSnapshot(testName, testCategory, fixtureNames) {
78
83
  });
79
84
  }
80
85
  exports.expectModuleToMatchSnapshot = expectModuleToMatchSnapshot;
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nZXQvX190ZXN0c19fL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsNENBSXdCO0FBQ3hCLDBEQUFzRDtBQUN0RCwyQ0FBNkI7QUFFN0I7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGVBQWU7SUFDN0IsTUFBTSxJQUFJLEdBQWEsRUFBRSxDQUFDO0lBQzFCLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDWixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUk7WUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsTUFBYyxFQUFFLEVBQUU7UUFDeEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztBQUNKLENBQUM7QUFWRCwwQ0FVQztBQUVELFNBQWdCLDJCQUEyQixDQUN6QyxRQUFnQixFQUNoQixZQUFvQixFQUNwQixZQUFzQjtJQUV0QixJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3hCLE1BQU0sSUFBQSxxQkFBVyxFQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRTtZQUNuRSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDN0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUV2QixZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ25DLEVBQUUsQ0FBQyxZQUFZLENBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsRUFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUN6QyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLFVBQVUsR0FBRyxJQUFJLG1DQUF5QixDQUFDO2dCQUMvQyxNQUFNLEVBQUUsVUFBVTtnQkFDbEIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsR0FBRyxFQUFFLFFBQVE7YUFDZCxDQUFDLENBQUM7WUFFSCxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRTFDLE1BQU0sS0FBSyxHQUFHLElBQUksa0NBQWUsQ0FDL0I7Z0JBQ0UsZUFBZSxFQUFFLE9BQU87Z0JBQ3hCLGNBQWMsRUFBRSxrQkFBUSxDQUFDLFVBQVU7YUFDcEMsRUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLDZDQUE2QyxDQUMxRCxDQUFDO1lBQ0YsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUVuQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxFQUN2QyxPQUFPLENBQ1IsQ0FBQztZQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQTFDRCxrRUEwQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCB7XG4gIExhbmd1YWdlLFxuICBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50LFxuICB3aXRoVGVtcERpcixcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3RzTWFrZXIgfSBmcm9tIFwiLi4vY29uc3RydWN0cy1tYWtlclwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBwZXItdGVzdC1maWxlIHRlbXAtZGlyIGhlbHBlci5cbiAqXG4gKiBSZXR1cm5zIGEgYHRtcChwcmVmaXgpYCBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSB1bmlxdWVseS1uYW1lZCBkaXJlY3RvcnlcbiAqIHVuZGVyIGBvcy50bXBkaXIoKWAgYW5kIHRyYWNrcyBpdC4gQW4gYGFmdGVyQWxsYCBob29rIGlzIHJlZ2lzdGVyZWQgb25cbiAqIHRoZSBjYWxsaW5nIHRlc3QgZmlsZSdzIHNjb3BlOyB3aGVuIHRoZSBmaWxlIGZpbmlzaGVzIHJ1bm5pbmcsIGV2ZXJ5XG4gKiB0cmFja2VkIGRpcmVjdG9yeSBpcyByZW1vdmVkIChyZWN1cnNpdmVseSwgZm9yY2UpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVG1wSGVscGVyKCk6IChwcmVmaXg6IHN0cmluZykgPT4gc3RyaW5nIHtcbiAgY29uc3QgZGlyczogc3RyaW5nW10gPSBbXTtcbiAgYWZ0ZXJBbGwoKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZCBvZiBkaXJzKSBmcy5ybVN5bmMoZCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9KTtcbiAgcmV0dXJuIChwcmVmaXg6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGQgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksIHByZWZpeCkpO1xuICAgIGRpcnMucHVzaChkKTtcbiAgICByZXR1cm4gZDtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdE1vZHVsZVRvTWF0Y2hTbmFwc2hvdChcbiAgdGVzdE5hbWU6IHN0cmluZyxcbiAgdGVzdENhdGVnb3J5OiBzdHJpbmcsXG4gIGZpeHR1cmVOYW1lczogc3RyaW5nW10sXG4pIHtcbiAgdGVzdCh0ZXN0TmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHdpdGhUZW1wRGlyKGAke3Rlc3ROYW1lLnJlcGxhY2UoL1xccyovLCBcIi1cIil9LnRlc3RgLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICAgICAgZnMubWtkaXJTeW5jKFwibW9kdWxlXCIpO1xuXG4gICAgICBmaXh0dXJlTmFtZXMuZm9yRWFjaCgoZml4dHVyZU5hbWUpID0+IHtcbiAgICAgICAgZnMuY29weUZpbGVTeW5jKFxuICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIHRlc3RDYXRlZ29yeSwgXCJmaXh0dXJlc1wiLCBmaXh0dXJlTmFtZSksXG4gICAgICAgICAgcGF0aC5qb2luKGN1cmRpciwgXCJtb2R1bGVcIiwgZml4dHVyZU5hbWUpLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludCh7XG4gICAgICAgIHNvdXJjZTogXCIuL21vZHVsZVwiLFxuICAgICAgICBuYW1lOiBcIm1vZHVsZVwiLFxuICAgICAgICBmcW46IFwibW9kdWxlXCIsXG4gICAgICB9KTtcblxuICAgICAgZnMubWtkaXJTeW5jKFwid29ya1wiKTtcbiAgICAgIGNvbnN0IHdvcmtkaXIgPSBwYXRoLmpvaW4oY3VyZGlyLCBcIndvcmtcIik7XG5cbiAgICAgIGNvbnN0IG1ha2VyID0gbmV3IENvbnN0cnVjdHNNYWtlcihcbiAgICAgICAge1xuICAgICAgICAgIGNvZGVNYWtlck91dHB1dDogd29ya2RpcixcbiAgICAgICAgICB0YXJnZXRMYW5ndWFnZTogTGFuZ3VhZ2UuVFlQRVNDUklQVCxcbiAgICAgICAgfSxcbiAgICAgICAgcHJvY2Vzcy5lbnYuQ0RLVEZfRVhQRVJJTUVOVEFMX1BST1ZJREVSX1NDSEVNQV9DQUNIRV9QQVRILFxuICAgICAgKTtcbiAgICAgIGF3YWl0IG1ha2VyLmdlbmVyYXRlKFtjb25zdHJhaW50XSk7XG5cbiAgICAgIGNvbnN0IG91dHB1dCA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgcGF0aC5qb2luKHdvcmtkaXIsIFwibW9kdWxlcy9tb2R1bGUudHNcIiksXG4gICAgICAgIFwidXRmLThcIixcbiAgICAgICk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nZXQvX190ZXN0c19fL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLHVDQUF5QjtBQUN6Qix1Q0FBeUI7QUFDekIsNENBSXdCO0FBQ3hCLDBEQUFzRDtBQUN0RCwyQ0FBNkI7QUFFN0I7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGVBQWU7SUFDN0IsTUFBTSxJQUFJLEdBQWEsRUFBRSxDQUFDO0lBQzFCLFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDWixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUk7WUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsTUFBYyxFQUFFLEVBQUU7UUFDeEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQztBQUNKLENBQUM7QUFWRCwwQ0FVQztBQUVELFNBQWdCLDJCQUEyQixDQUN6QyxRQUFnQixFQUNoQixZQUFvQixFQUNwQixZQUFzQjtJQUV0QixJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3hCLHVFQUF1RTtRQUN2RSx3RUFBd0U7UUFDeEUseUVBQXlFO1FBQ3pFLHdFQUF3RTtRQUN4RSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVELE1BQU0sSUFBQSxxQkFBVyxFQUFDLEdBQUcsUUFBUSxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDL0MsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzdCLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNuQyxFQUFFLENBQUMsWUFBWSxDQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FDekMsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxVQUFVLEdBQUcsSUFBSSxtQ0FBeUIsQ0FBQztnQkFDL0MsTUFBTSxFQUFFLFVBQVU7Z0JBQ2xCLElBQUksRUFBRSxRQUFRO2dCQUNkLEdBQUcsRUFBRSxRQUFRO2FBQ2QsQ0FBQyxDQUFDO1lBRUgsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUUxQyxNQUFNLEtBQUssR0FBRyxJQUFJLGtDQUFlLENBQy9CO2dCQUNFLGVBQWUsRUFBRSxPQUFPO2dCQUN4QixjQUFjLEVBQUUsa0JBQVEsQ0FBQyxVQUFVO2FBQ3BDLEVBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2Q0FBNkMsQ0FDMUQsQ0FBQztZQUNGLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFFbkMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsRUFDdkMsT0FBTyxDQUNSLENBQUM7WUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUEvQ0Qsa0VBK0NDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQge1xuICBMYW5ndWFnZSxcbiAgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludCxcbiAgd2l0aFRlbXBEaXIsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0c01ha2VyIH0gZnJvbSBcIi4uL2NvbnN0cnVjdHMtbWFrZXJcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgcGVyLXRlc3QtZmlsZSB0ZW1wLWRpciBoZWxwZXIuXG4gKlxuICogUmV0dXJucyBhIGB0bXAocHJlZml4KWAgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgdW5pcXVlbHktbmFtZWQgZGlyZWN0b3J5XG4gKiB1bmRlciBgb3MudG1wZGlyKClgIGFuZCB0cmFja3MgaXQuIEFuIGBhZnRlckFsbGAgaG9vayBpcyByZWdpc3RlcmVkIG9uXG4gKiB0aGUgY2FsbGluZyB0ZXN0IGZpbGUncyBzY29wZTsgd2hlbiB0aGUgZmlsZSBmaW5pc2hlcyBydW5uaW5nLCBldmVyeVxuICogdHJhY2tlZCBkaXJlY3RvcnkgaXMgcmVtb3ZlZCAocmVjdXJzaXZlbHksIGZvcmNlKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRtcEhlbHBlcigpOiAocHJlZml4OiBzdHJpbmcpID0+IHN0cmluZyB7XG4gIGNvbnN0IGRpcnM6IHN0cmluZ1tdID0gW107XG4gIGFmdGVyQWxsKCgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGQgb2YgZGlycykgZnMucm1TeW5jKGQsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfSk7XG4gIHJldHVybiAocHJlZml4OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBkID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCBwcmVmaXgpKTtcbiAgICBkaXJzLnB1c2goZCk7XG4gICAgcmV0dXJuIGQ7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RNb2R1bGVUb01hdGNoU25hcHNob3QoXG4gIHRlc3ROYW1lOiBzdHJpbmcsXG4gIHRlc3RDYXRlZ29yeTogc3RyaW5nLFxuICBmaXh0dXJlTmFtZXM6IHN0cmluZ1tdLFxuKSB7XG4gIHRlc3QodGVzdE5hbWUsIGFzeW5jICgpID0+IHtcbiAgICAvLyBUZXN0IG5hbWVzIGJlY29tZSBhIGRpcmVjdG9yeSBuYW1lLCBzbyBjb2xsYXBzZSBhbnl0aGluZyB0aGF0IGlzIG5vdFxuICAgIC8vIGZpbGVuYW1lLXNhZmUuIFRoZSBwcmV2aW91cyAvXFxzKi8gbWF0Y2hlZCB0aGUgZW1wdHkgc3RyaW5nIGF0IGluZGV4IDBcbiAgICAvLyAobm8gZ2xvYmFsIGZsYWcgZWl0aGVyKSwgd2hpY2ggb25seSBwcmVwZW5kZWQgYSBcIi1cIiBhbmQgbGVmdCBzcGFjZXMgLS1cbiAgICAvLyBhbmQgY2hhcmFjdGVycyBsaWtlIFwiKlwiIGluIGEgdGVzdCB0aXRsZSBhcmUgaWxsZWdhbCBpbiBXaW5kb3dzIHBhdGhzLlxuICAgIGNvbnN0IHNhZmVOYW1lID0gdGVzdE5hbWUucmVwbGFjZSgvW15hLXpBLVowLTkuXy1dKy9nLCBcIi1cIik7XG4gICAgYXdhaXQgd2l0aFRlbXBEaXIoYCR7c2FmZU5hbWV9LnRlc3RgLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICAgICAgZnMubWtkaXJTeW5jKFwibW9kdWxlXCIpO1xuXG4gICAgICBmaXh0dXJlTmFtZXMuZm9yRWFjaCgoZml4dHVyZU5hbWUpID0+IHtcbiAgICAgICAgZnMuY29weUZpbGVTeW5jKFxuICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIHRlc3RDYXRlZ29yeSwgXCJmaXh0dXJlc1wiLCBmaXh0dXJlTmFtZSksXG4gICAgICAgICAgcGF0aC5qb2luKGN1cmRpciwgXCJtb2R1bGVcIiwgZml4dHVyZU5hbWUpLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBuZXcgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludCh7XG4gICAgICAgIHNvdXJjZTogXCIuL21vZHVsZVwiLFxuICAgICAgICBuYW1lOiBcIm1vZHVsZVwiLFxuICAgICAgICBmcW46IFwibW9kdWxlXCIsXG4gICAgICB9KTtcblxuICAgICAgZnMubWtkaXJTeW5jKFwid29ya1wiKTtcbiAgICAgIGNvbnN0IHdvcmtkaXIgPSBwYXRoLmpvaW4oY3VyZGlyLCBcIndvcmtcIik7XG5cbiAgICAgIGNvbnN0IG1ha2VyID0gbmV3IENvbnN0cnVjdHNNYWtlcihcbiAgICAgICAge1xuICAgICAgICAgIGNvZGVNYWtlck91dHB1dDogd29ya2RpcixcbiAgICAgICAgICB0YXJnZXRMYW5ndWFnZTogTGFuZ3VhZ2UuVFlQRVNDUklQVCxcbiAgICAgICAgfSxcbiAgICAgICAgcHJvY2Vzcy5lbnYuQ0RLVEZfRVhQRVJJTUVOVEFMX1BST1ZJREVSX1NDSEVNQV9DQUNIRV9QQVRILFxuICAgICAgKTtcbiAgICAgIGF3YWl0IG1ha2VyLmdlbmVyYXRlKFtjb25zdHJhaW50XSk7XG5cbiAgICAgIGNvbnN0IG91dHB1dCA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgcGF0aC5qb2luKHdvcmtkaXIsIFwibW9kdWxlcy9tb2R1bGUudHNcIiksXG4gICAgICAgIFwidXRmLThcIixcbiAgICAgICk7XG4gICAgICBleHBlY3Qob3V0cHV0KS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=
@@ -50,9 +50,12 @@ async function resolvePublishableFiles(dir) {
50
50
  const stdout = await (0, commons_1.exec)("npm", ["pack", "--dry-run", "--json"], {
51
51
  cwd: dir,
52
52
  });
53
- const packInfo = JSON.parse(stdout);
53
+ // npm <=11 reports an array of packed packages; npm >=12 reports an object
54
+ // keyed by package name. Accept either so the build is npm-version agnostic.
55
+ const parsed = JSON.parse(stdout);
56
+ const packInfo = Array.isArray(parsed) ? parsed[0] : Object.values(parsed)[0];
54
57
  // Drop `..`-escape paths npm emits when following pnpm's node_modules symlinks.
55
- return packInfo[0].files.map((f) => f.path).filter((p) => !p.includes(".."));
58
+ return packInfo.files.map((f) => f.path).filter((p) => !p.includes(".."));
56
59
  }
57
60
  async function generateJsiiLanguage(code, opts, outputPath, disallowedFileGlobs = []) {
58
61
  await (0, commons_1.mkdtemp)(async (staging) => {
@@ -569,4 +572,4 @@ const determineGoModuleName = async (dir) => {
569
572
  throw new Error(`Could not determine the root Go module name. No go.mod found in ${dir} and any parent directories`);
570
573
  };
571
574
  exports.determineGoModuleName = determineGoModuleName;
572
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0cy1tYWtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZXQvY29uc3RydWN0cy1tYWtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNkNBQStCO0FBQy9CLDJDQUE2QjtBQUM3Qix5Q0FBc0M7QUFDdEMsNENBQStDO0FBQy9DLDRDQVl3QjtBQUN4Qiw0Q0FBMkQ7QUFDM0QsdUVBQTRFO0FBQzVFLG1FQUErRDtBQUMvRCwrQkFBNEI7QUFDNUIsNERBQW9EO0FBRXBELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUNwRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRXBEOzs7Ozs7O0dBT0c7QUFDSCxLQUFLLFVBQVUsdUJBQXVCLENBQUMsR0FBVztJQUNoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsY0FBSSxFQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDaEUsR0FBRyxFQUFFLEdBQUc7S0FDVCxDQUFDLENBQUM7SUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBeUMsQ0FBQztJQUM1RSxnRkFBZ0Y7SUFDaEYsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQWlETSxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLElBQWUs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RUFBMEU7UUFDMUUsOENBQThDO1FBQzlDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDekIsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsQ0FBQyxRQUFRLFVBQVUsS0FBSyxXQUFXLEVBQUU7SUFFckMsTUFBTSxJQUFJLEtBQUssQ0FDYixtRUFBbUUsR0FBRyw2QkFBNkIsQ0FDcEcsQ0FBQztBQUNKLENBQUMsQ0FBQztBQW5DVyxRQUFBLHFCQUFxQix5QkFtQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgQ29kZU1ha2VyIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHsgZXhlYywgbWtkdGVtcCB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHtcbiAgVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnQsXG4gIGxvZ2dlcixcbiAgbG9nVGltZXNwYW4sXG4gIENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuICBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQsXG4gIENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgUHJvdmlkZXJTY2hlbWEsXG4gIE1vZHVsZVNjaGVtYSxcbiAgRXJyb3JzLFxuICB0eXBlIExhbmd1YWdlT3B0aW9ucyxcbiAgdHlwZSBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucyxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBESVNQTEFZX1ZFUlNJT04sIExhbmd1YWdlIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvciB9IGZyb20gXCIuL2dlbmVyYXRvci9wcm92aWRlci1nZW5lcmF0b3JcIjtcbmltcG9ydCB7IE1vZHVsZUdlbmVyYXRvciB9IGZyb20gXCIuL2dlbmVyYXRvci9tb2R1bGUtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBnbG9iIH0gZnJvbSBcImdsb2JcIjtcbmltcG9ydCB7IHJlYWRTY2hlbWEgfSBmcm9tIFwiQGNka3RuL3Byb3ZpZGVyLXNjaGVtYVwiO1xuXG5jb25zdCBwYWNtYWtNb2R1bGUgPSByZXF1aXJlLnJlc29sdmUoXCJqc2lpLXBhY21hay9iaW4vanNpaS1wYWNtYWtcIik7XG5jb25zdCBqc2lpTW9kdWxlID0gcmVxdWlyZS5yZXNvbHZlKFwianNpaS9iaW4vanNpaVwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaWxlcyBgbnBtIHBhY2tgIHdvdWxkIHB1Ymxpc2ggZm9yIHRoZSBwYWNrYWdlIGF0IGBkaXJgLCBhcyBwYXRocyByZWxhdGl2ZSB0byBgZGlyYC4gVGhpcyBpcyB0aGUgc2V0XG4gKiBqc2lpIG5lZWRzIHRvIGNvbXBpbGUgYWdhaW5zdCBhIGRlcGVuZGVuY3kg4oCUIGl0cyBzb3VyY2VzIGFuZCBkZWNsYXJlZCBtZXRhZGF0YSDigJQgYW5kIGV4Y2x1ZGVzIGJ1aWxkIG91dHB1dHNcbiAqIChgZGlzdGAsIGAucGFjay1zdGFnaW5nYCwgYG5vZGVfbW9kdWxlc2AsIHRzYnVpbGRpbmZvLCAuLi4pIHRoYXQgYSBibGFua2V0IGRpcmVjdG9yeSBjb3B5IHdvdWxkIG90aGVyd2lzZSBwdWxsIGluLlxuICpcbiAqIEBwYXJhbSBkaXIgLSBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwYWNrYWdlIGRpcmVjdG9yeSB0byBpbnNwZWN0IChtdXN0IGNvbnRhaW4gYSBwYWNrYWdlLmpzb24pLlxuICogQHJldHVybnMgUHVibGlzaGFibGUgZmlsZSBwYXRocywgcmVsYXRpdmUgdG8gYGRpcmAsIHdpdGggYC4uYC1lc2NhcGUgcGF0aHMgKGZyb20gZm9sbG93aW5nIHBucG0gc3ltbGlua3MpIGRyb3BwZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQdWJsaXNoYWJsZUZpbGVzKGRpcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBzdGRvdXQgPSBhd2FpdCBleGVjKFwibnBtXCIsIFtcInBhY2tcIiwgXCItLWRyeS1ydW5cIiwgXCItLWpzb25cIl0sIHtcbiAgICBjd2Q6IGRpcixcbiAgfSk7XG4gIGNvbnN0IHBhY2tJbmZvID0gSlNPTi5wYXJzZShzdGRvdXQpIGFzIEFycmF5PHsgZmlsZXM6IHsgcGF0aDogc3RyaW5nIH1bXSB9PjtcbiAgLy8gRHJvcCBgLi5gLWVzY2FwZSBwYXRocyBucG0gZW1pdHMgd2hlbiBmb2xsb3dpbmcgcG5wbSdzIG5vZGVfbW9kdWxlcyBzeW1saW5rcy5cbiAgcmV0dXJuIHBhY2tJbmZvWzBdLmZpbGVzLm1hcCgoZikgPT4gZi5wYXRoKS5maWx0ZXIoKHApID0+ICFwLmluY2x1ZGVzKFwiLi5cIikpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlSlNJSU9wdGlvbnMge1xuICBlbnRyeXBvaW50OiBzdHJpbmc7XG4gIGRlcHM6IHN0cmluZ1tdO1xuICBtb2R1bGVLZXk6IHN0cmluZztcbiAgZXhwb3J0cz86IFJlY29yZDxzdHJpbmcsIEV4cG9ydERlZmluaXRpb24gfCBzdHJpbmc+O1xuICBqc2lpPzogSnNpaU91dHB1dE9wdGlvbnM7XG4gIHB5dGhvbj86IFB5dGhvbk91dHB1dE9wdGlvbnM7XG4gIGphdmE/OiBKYXZhT3V0cHV0T3B0aW9ucztcbiAgY3NoYXJwPzogQ1NoYXJwT3V0cHV0T3B0aW9ucztcbiAgZ29sYW5nPzogR29MYW5nT3V0cHV0T3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKc2lpT3V0cHV0T3B0aW9ucyB7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQeXRob25PdXRwdXRPcHRpb25zIHtcbiAgb3V0ZGlyOiBzdHJpbmc7XG4gIG1vZHVsZU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKYXZhT3V0cHV0T3B0aW9ucyB7XG4gIG91dGRpcjogc3RyaW5nO1xuICBwYWNrYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NoYXJwT3V0cHV0T3B0aW9ucyB7XG4gIG91dGRpcjogc3RyaW5nO1xuICBuYW1lc3BhY2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHb0xhbmdPdXRwdXRPcHRpb25zIHtcbiAgb3V0ZGlyOiBzdHJpbmc7XG4gIG1vZHVsZU5hbWU6IHN0cmluZztcbiAgcGFja2FnZU5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wYWNrYWdlcy5odG1sI2NvbmRpdGlvbmFsLWV4cG9ydHMgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBvcnREZWZpbml0aW9uIHtcbiAgbm9kZT86IHN0cmluZztcbiAgaW1wb3J0Pzogc3RyaW5nO1xuICByZXF1aXJlPzogc3RyaW5nO1xuICBkZWZhdWx0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVKc2lpTGFuZ3VhZ2UoXG4gIGNvZGU6IENvZGVNYWtlcixcbiAgb3B0czogR2VuZXJhdGVKU0lJT3B0aW9ucyxcbiAgb3V0cHV0UGF0aDogc3RyaW5nLFxuICBkaXNhbGxvd2VkRmlsZUdsb2JzOiBzdHJpbmdbXSA9IFtdLFxuKSB7XG4gIGF3YWl0IG1rZHRlbXAoYXN5bmMgKHN0YWdpbmcpID0+IHtcbiAgICAvLyB0aGlzIGlzIG5vdCB0eXBlc2NyaXB0LCBzbyB3ZSBnZW5lcmF0ZSBpbiBhIHN0YWdpbmcgZGlyZWN0b3J5IGFuZFxuICAgIC8vIHVzZSBqc2lpLXNyY21hayB0byBjb21waWxlIGFuZCBleHRyYWN0IHRoZSBsYW5ndWFnZS1zcGVjaWZpYyBzb3VyY2VcbiAgICAvLyBpbnRvIG91ciBwcm9qZWN0LlxuICAgIGF3YWl0IGNvZGUuc2F2ZShzdGFnaW5nKTtcblxuICAgIC8vIGFzIHRoZSBhYm92ZSBnZW5lcmF0ZWQgdGhlIFR5cGVzY3JpcHQgY29kZSBmb3IgYWxsIHByb3ZpZGVycyBhbmQgbW9kdWxlcyxcbiAgICAvLyB3ZSBuZWVkIHRvIGZpbHRlciBvdXQgdGhlIG9uZXMgd2UgZG9uJ3QgbmVlZCBzbyB0aGV5IGRvbid0IGVuZCB1cCBpbiB0aGUgSlNJSSBidW5kbGUgb3ZlciBhbmQgb3ZlciBhZ2Fpbi5cbiAgICBjb25zdCBmaWxlc1RvRGVsZXRlID0gZGlzYWxsb3dlZEZpbGVHbG9icy5mbGF0TWFwKChwYXR0ZXJuKSA9PlxuICAgICAgZ2xvYi5zeW5jKHBhdHRlcm4sIHsgY3dkOiBzdGFnaW5nIH0pLFxuICAgICk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBmaWxlc1RvRGVsZXRlLm1hcCgoZmlsZSkgPT4gZnMucmVtb3ZlKHBhdGguam9pbihzdGFnaW5nLCBmaWxlKSkpLFxuICAgICk7XG5cbiAgICAvLyBDb21waWxlIHdpdGggSlNJSVxuICAgIGNvbnN0IGpzaWlBcmdzID0gW1wiLS1zaWxlbmNlLXdhcm5pbmdzXCIsIFwicmVzZXJ2ZWQtd29yZFwiXTtcbiAgICBjb25zdCBqc2lpRW50cnlwb2ludCA9IG9wdHMuZW50cnlwb2ludDtcbiAgICBjb25zdCBiYXNlcGF0aCA9IHBhdGguam9pbihcbiAgICAgIHBhdGguZGlybmFtZShqc2lpRW50cnlwb2ludCksXG4gICAgICBwYXRoLmJhc2VuYW1lKGpzaWlFbnRyeXBvaW50LCBcIi50c1wiKSxcbiAgICApO1xuXG4gICAgY29uc3QgbW9kdWxlS2V5ID0gb3B0cy5tb2R1bGVLZXkucmVwbGFjZSgvXFwuL2csIFwiXCIpLnJlcGxhY2UoL1xcLy9nLCBcIlwiKTtcbiAgICBjb25zdCBtb2R1bGVEaXJzID0gb3B0cy5kZXBzO1xuICAgIGNvbnN0IHRhcmdldHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBjb25zdCBkZXBzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgZm9yIChjb25zdCBkaXIgb2YgbW9kdWxlRGlycykge1xuICAgICAgLy8gcmVhZCBtb2R1bGUgbWV0YWRhdGFcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgZnMucmVhZEpzb24ocGF0aC5qb2luKGRpciwgXCJwYWNrYWdlLmpzb25cIikpO1xuICAgICAgY29uc3QgbW9kdWxlTmFtZTogc3RyaW5nID0gbWV0YWRhdGEubmFtZTtcbiAgICAgIGNvbnN0IG1vZHVsZVZlcnNpb246IHN0cmluZyA9IG1ldGFkYXRhLnZlcnNpb247XG5cbiAgICAgIGNvbnN0IHRhcmdldGRpciA9IHBhdGguam9pbihcbiAgICAgICAgcGF0aC5qb2luKHN0YWdpbmcsIFwibm9kZV9tb2R1bGVzXCIpLFxuICAgICAgICBtb2R1bGVOYW1lLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IGZzLm1rZGlycCh0YXJnZXRkaXIpO1xuICAgICAgLy8gQ29weSBvbmx5IHRoZSBkZXAncyBwdWJsaXNoYWJsZSBmaWxlcyAod2hhdCBgbnBtIHBhY2tgIHdvdWxkIHNoaXApIGludG8gdGhlIGpzaWkgY29tcGlsZSBidW5kbGUuXG4gICAgICBmb3IgKGNvbnN0IHJlbFBhdGggb2YgYXdhaXQgcmVzb2x2ZVB1Ymxpc2hhYmxlRmlsZXMoZGlyKSkge1xuICAgICAgICBjb25zdCBzcmMgPSBwYXRoLmpvaW4oZGlyLCByZWxQYXRoKTtcbiAgICAgICAgY29uc3QgZHN0ID0gcGF0aC5qb2luKHRhcmdldGRpciwgcmVsUGF0aCk7XG4gICAgICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmRpcm5hbWUoZHN0KSk7XG4gICAgICAgIGF3YWl0IGZzLmNvcHkoc3JjLCBkc3QsIHsgZGVyZWZlcmVuY2U6IHRydWUgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCB0byBcImRlcHNcIiBhbmQgXCJwZWVyIGRlcHNcIlxuICAgICAgaWYgKCFtb2R1bGVOYW1lLnN0YXJ0c1dpdGgoXCJAdHlwZXMvXCIpKSB7XG4gICAgICAgIGRlcHNbbW9kdWxlTmFtZV0gPSBtb2R1bGVWZXJzaW9uO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBwa2cgPSB7XG4gICAgICBuYW1lOiBtb2R1bGVLZXksXG4gICAgICB2ZXJzaW9uOiBcIjAuMC4wXCIsXG4gICAgICBhdXRob3I6IFwiZ2VuZXJhdGVkQGdlbmVyYXRlZC5jb21cIixcbiAgICAgIG1haW46IGAke2Jhc2VwYXRofS5qc2AsXG4gICAgICB0eXBlczogYCR7YmFzZXBhdGh9LmQudHNgLFxuICAgICAgbGljZW5zZTogXCJVTkxJQ0VOU0VEXCIsXG4gICAgICByZXBvc2l0b3J5OiB7IHVybDogXCJodHRwOi8vZ2VuZXJhdGVkXCIsIHR5cGU6IFwiZ2l0XCIgfSxcbiAgICAgIGpzaWk6IHtcbiAgICAgICAgb3V0ZGlyOiBcImRpc3RcIixcbiAgICAgICAgdGFyZ2V0czogdGFyZ2V0cyxcbiAgICAgIH0sXG4gICAgICBkZXBlbmRlbmNpZXM6IGRlcHMsXG4gICAgICBwZWVyRGVwZW5kZW5jaWVzOiBkZXBzLFxuICAgIH07XG5cbiAgICBpZiAob3B0cy5leHBvcnRzKSB7XG4gICAgICAocGtnIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pLmV4cG9ydHMgPSBvcHRzLmV4cG9ydHM7XG4gICAgfVxuICAgIGlmIChvcHRzLnB5dGhvbikge1xuICAgICAgdGFyZ2V0cy5weXRob24gPSB7XG4gICAgICAgIGRpc3ROYW1lOiBcImdlbmVyYXRlZFwiLFxuICAgICAgICBtb2R1bGU6IG9wdHMucHl0aG9uLm1vZHVsZU5hbWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcHRzLmphdmEpIHtcbiAgICAgIHRhcmdldHMuamF2YSA9IHtcbiAgICAgICAgcGFja2FnZTogb3B0cy5qYXZhLnBhY2thZ2UsXG4gICAgICAgIG1hdmVuOiB7XG4gICAgICAgICAgZ3JvdXBJZDogXCJnZW5lcmF0ZWRcIixcbiAgICAgICAgICBhcnRpZmFjdElkOiBcImdlbmVyYXRlZFwiLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5jc2hhcnApIHtcbiAgICAgIHRhcmdldHMuZG90bmV0ID0ge1xuICAgICAgICBuYW1lc3BhY2U6IG9wdHMuY3NoYXJwLm5hbWVzcGFjZSxcbiAgICAgICAgcGFja2FnZUlkOiBvcHRzLmNzaGFycC5uYW1lc3BhY2UsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcHRzLmdvbGFuZykge1xuICAgICAgdGFyZ2V0cy5nbyA9IHtcbiAgICAgICAgbW9kdWxlTmFtZTogb3B0cy5nb2xhbmcubW9kdWxlTmFtZSxcbiAgICAgICAgcGFja2FnZU5hbWU6IG9wdHMuZ29sYW5nLnBhY2thZ2VOYW1lLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICBwYXRoLmpvaW4oc3RhZ2luZywgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeShwa2csIHVuZGVmaW5lZCwgMiksXG4gICAgKTtcblxuICAgIGNvbnN0IGVuZEpzaWlUaW1lciA9IGxvZ1RpbWVzcGFuKFwianNpaVwiKTtcbiAgICBhd2FpdCBleGVjKGpzaWlNb2R1bGUsIGpzaWlBcmdzLCB7XG4gICAgICBjd2Q6IHN0YWdpbmcsXG4gICAgfSk7XG4gICAgZW5kSnNpaVRpbWVyKCk7XG5cbiAgICAvLyBleHRyYWN0IC5qc2lpIGlmIHJlcXVlc3RlZFxuICAgIGlmIChvcHRzLmpzaWkpIHtcbiAgICAgIGF3YWl0IGZzLmNvcHkocGF0aC5qb2luKHN0YWdpbmcsIFwiLmpzaWlcIiksIG9wdHMuanNpaS5wYXRoKTtcbiAgICB9XG5cbiAgICAvLyBydW4gcGFjbWFrIHRvIGdlbmVyYXRlIGNvZGVcbiAgICBjb25zdCBlbmRKc2lpUGFjbWFrVGltZXIgPSBsb2dUaW1lc3BhbihcImpzaWktcGFjbWFrXCIpO1xuICAgIGF3YWl0IGV4ZWMocGFjbWFrTW9kdWxlLCBbXCItLWNvZGUtb25seVwiXSwgeyBjd2Q6IHN0YWdpbmcgfSk7XG4gICAgZW5kSnNpaVBhY21ha1RpbWVyKCk7XG5cbiAgICBpZiAob3B0cy5weXRob24pIHtcbiAgICAgIGNvbnN0IHJlbGRpciA9IG9wdHMucHl0aG9uLm1vZHVsZU5hbWUucmVwbGFjZSgvXFwuL2csIFwiL1wiKTsgLy8ganNpaSByZXBsYWNlcyBcIi5cIiB3aXRoIFwiL1wiXG4gICAgICBjb25zdCBzb3VyY2UgPSBwYXRoLnJlc29sdmUoXG4gICAgICAgIHBhdGguam9pbihzdGFnaW5nLCBcImRpc3QvcHl0aG9uL3NyY1wiLCByZWxkaXIpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHBhdGguam9pbihvcHRzLnB5dGhvbi5vdXRkaXIsIHJlbGRpcik7XG4gICAgICBhd2FpdCBmcy5tb3ZlKHNvdXJjZSwgdGFyZ2V0LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5qYXZhKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBwYXRoLnJlc29sdmUocGF0aC5qb2luKHN0YWdpbmcsIFwiZGlzdC9qYXZhL3NyYy9cIikpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcGF0aC5qb2luKG9wdHMuamF2YS5vdXRkaXIsIFwic3JjL1wiKTtcbiAgICAgIC8vIFByZS1jcmVhdGUgc2hhcmVkIHBhY2thZ2UgZGlyZWN0b3JpZXMuXG4gICAgICBjb25zdCBwYWNrYWdlRGlyID0gb3B0cy5qYXZhLnBhY2thZ2UucmVwbGFjZSgvXFwuL2csIFwiL1wiKTtcbiAgICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmpvaW4odGFyZ2V0LCBcIm1haW4vamF2YVwiLCBwYWNrYWdlRGlyKSk7XG4gICAgICBhd2FpdCBmcy5ta2RpcnAocGF0aC5qb2luKHRhcmdldCwgXCJtYWluL3Jlc291cmNlc1wiLCBwYWNrYWdlRGlyKSk7XG4gICAgICBhd2FpdCBmcy5jb3B5KHNvdXJjZSwgdGFyZ2V0LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuY3NoYXJwKSB7XG4gICAgICBjb25zdCByZWxkaXIgPSBvcHRzLmNzaGFycC5uYW1lc3BhY2U7XG4gICAgICBjb25zdCBzb3VyY2UgPSBwYXRoLnJlc29sdmUocGF0aC5qb2luKHN0YWdpbmcsIFwiZGlzdC9kb3RuZXQvXCIsIHJlbGRpcikpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcGF0aC5qb2luKG9wdHMuY3NoYXJwLm91dGRpciwgcmVsZGlyKTtcbiAgICAgIGF3YWl0IGZzLm1vdmUoc291cmNlLCB0YXJnZXQsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmdvbGFuZykge1xuICAgICAgY29uc3QgcmVsZGlyID0gb3B0cy5nb2xhbmcucGFja2FnZU5hbWU7XG4gICAgICBjb25zdCBzb3VyY2UgPSBwYXRoLnJlc29sdmUocGF0aC5qb2luKHN0YWdpbmcsIFwiZGlzdC9nby9cIiwgcmVsZGlyKSk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBwYXRoLmpvaW4ob3B0cy5nb2xhbmcub3V0ZGlyLCByZWxkaXIpO1xuICAgICAgYXdhaXQgZnMubW92ZShzb3VyY2UsIHRhcmdldCwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgICAvLyByZW1vdmUgZ28ubW9kIGFzIHRoaXMgd291bGQgbWFrZSBpdCBhIHN1Ym1vZHVsZVxuICAgICAgYXdhaXQgZnMucmVtb3ZlKHBhdGguam9pbih0YXJnZXQsIFwiZ28ubW9kXCIpKTtcbiAgICB9XG5cbiAgICBbXCJ2ZXJzaW9ucy5qc29uXCIsIFwiY29uc3RyYWludHMuanNvblwiXS5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBmcy5jb3B5U3luYyhcbiAgICAgICAgICBwYXRoLnJlc29sdmUoc3RhZ2luZywgZmlsZSksXG4gICAgICAgICAgcGF0aC5yZXNvbHZlKG91dHB1dFBhdGgsIGZpbGUpLFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYEZhaWxlZCB0byBjb3B5ICR7ZmlsZX06ICR7ZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbnR5cGUgQ29uc3RyYWludEZpbGUgPSB7XG4gIHByb3ZpZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgY2RrdGY6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0J3MgZGVjbGFyZWQgdGFyZ2V0VmVyc2lvbnMgKGNka3RmLmpzb24pLCBzdGFtcGVkIGZvclxuICAgKiBkaWFnbm9zdGljcy9jYWNoZSBkZWJ1Z2dpbmcuIFB1cmVseSBpbmZvcm1hdGlvbmFsIC0gbmV2ZXIgcmVhZCBiYWNrIHRvXG4gICAqIGRlY2lkZSB3aGV0aGVyIGNhY2hlZCBvdXRwdXQgaXMgc3RhbGUsIHNpbmNlIGl0IGRvZXNuJ3QgYWZmZWN0IHRoZVxuICAgKiBnZW5lcmF0ZWQgc3VyZmFjZSAodGhlIGZ1bGwgc3VyZmFjZSBpcyBhbHdheXMgZ2VuZXJhdGVkOyBuYXJyb3dpbmdcbiAgICogaGFwcGVucyBhdCBzeW50aCkuXG4gICAqL1xuICB0YXJnZXRWZXJzaW9ucz86IFRlcnJhZm9ybVRhcmdldFZlcnNpb25zO1xuICAvKipcbiAgICogSWRlbnRpdHkgb2YgdGhlIENMSSAodGVycmFmb3JtL29wZW50b2Z1KSB0aGF0IGZldGNoZWQgdGhlIHNjaGVtYXMgdXNlZFxuICAgKiBmb3IgdGhpcyBnZW5lcmF0aW9uLCBzdGFtcGVkIGZvciBkaWFnbm9zdGljcy9jYWNoZSBkZWJ1Z2dpbmcuXG4gICAqL1xuICBjbGk/OiB7IG5hbWU/OiBzdHJpbmc7IHZlcnNpb24/OiBzdHJpbmcgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0T3B0aW9ucyB7XG4gIHJlYWRvbmx5IHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZTtcbiAgcmVhZG9ubHkgY29kZU1ha2VyT3V0cHV0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGpzaWlQYXJhbGxlbGlzbT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFBhdGggdG8gY29weSB0aGUgb3V0cHV0IC5qc2lpIGZpbGUuXG4gICAqIEBkZWZhdWx0IC0ganNpaSBmaWxlIGlzIG5vdCBlbWl0dGVkXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRKc2lpPzogc3RyaW5nO1xuICAvKipcbiAgICogTGFuZ3VhZ2Utc3BlY2lmaWMgY29kZSBnZW5lcmF0aW9uIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBsYW5ndWFnZU9wdGlvbnM/OiBMYW5ndWFnZU9wdGlvbnM7XG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdCdzIGRlY2xhcmVkIHRhcmdldFZlcnNpb25zIChjZGt0Zi5qc29uKS4gVXNlZCB0byBkcml2ZSB0aGVcbiAgICogZmV0Y2gtdGltZSBlbWlzc2lvbi1nYXAgd2FybmluZyBpbiBAY2RrdG4vcHJvdmlkZXItc2NoZW1hIGFuZCB0byBzdGFtcFxuICAgKiB0aGUgZ2VuZXJhdGVkIGNvbnN0cmFpbnRzLmpzb24gZm9yIGRpYWdub3N0aWNzLiBEb2VzIE5PVCBmaWx0ZXIgY29kZWdlbjpcbiAgICogdGhlIGZ1bGwgc3VyZmFjZSBpcyBhbHdheXMgZ2VuZXJhdGVkLCBuYXJyb3dpbmcgaGFwcGVucyBhdCBzeW50aC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFZlcnNpb25zPzogVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25zdHJ1Y3RzTWFrZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvZGVNYWtlck91dGRpcjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvZGU6IENvZGVNYWtlcjtcbiAgcHJpdmF0ZSB2ZXJzaW9uczogeyBbcHJvdmlkZXJOYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEdldE9wdGlvbnMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY2hlbWFDYWNoZVBhdGg/OiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXBvcnRUZWxlbWV0cnk6IChwYXlsb2FkOiB7XG4gICAgICB0YXJnZXRMYW5ndWFnZTogc3RyaW5nO1xuICAgICAgdHJhY2tpbmdQYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIH0pID0+IFByb21pc2U8dm9pZD4gPSBhc3luYyAoKSA9PiB7fSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlTWFrZXJPdXRkaXIgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLmNvZGVNYWtlck91dHB1dCk7XG4gICAgZnMubWtkaXJwU3luYyh0aGlzLmNvZGVNYWtlck91dGRpcik7XG4gICAgdGhpcy5jb2RlID0gbmV3IENvZGVNYWtlcigpO1xuICAgIHRoaXMudmVyc2lvbnMgPSB7fTtcbiAgfVxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlVHlwZXNjcmlwdFByb3ZpZGVyKFxuICAgIHRhcmdldDogQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG4gICAgc2NoZW1hOiBQcm92aWRlclNjaGVtYSxcbiAgKSB7XG4gICAgY29uc3QgZW5kVFNUaW1lciA9IGxvZ1RpbWVzcGFuKGBHZW5lcmF0ZSBUeXBlc2NyaXB0IGZvciAke3RhcmdldC5uYW1lfWApO1xuICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvcih0aGlzLmNvZGUsIHNjaGVtYSwge1xuICAgICAgaW1wb3J0RXh0ZW5zaW9uOiB0aGlzLm9wdGlvbnMubGFuZ3VhZ2VPcHRpb25zPy5pbXBvcnRFeHRlbnNpb24sXG4gICAgfSk7XG4gICAgZ2VuZXJhdG9yLmdlbmVyYXRlKHRhcmdldCk7XG5cbiAgICB0aGlzLnZlcnNpb25zID0geyAuLi50aGlzLnZlcnNpb25zLCAuLi5nZW5lcmF0b3IudmVyc2lvbnMgfTtcbiAgICBlbmRUU1RpbWVyKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZmlsdGVyQWxyZWFkeUdlbmVyYXRlZChcbiAgICBjb25zdHJhaW50czogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRbXSxcbiAgKSB7XG4gICAgbGV0IGNvbnN0cmFpbnRzRmlsZSA9IFwie31cIjtcbiAgICB0cnkge1xuICAgICAgY29uc3RyYWludHNGaWxlID0gYXdhaXQgZnMucmVhZEZpbGUoXG4gICAgICAgIHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgXCJjb25zdHJhaW50cy5qc29uXCIpLFxuICAgICAgICBcInV0ZjhcIixcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgY29uc3RyYWludHMuanNvbiBmaWxlIHdoaWxlIGZpbHRlcmluZzogJHtlfS4gVGhpcyBtZWFucyBubyBwcm92aWRlcnMgd2VyZSBnZW5lcmF0ZWQsIHNvIGFsbCBjb25zdHJhaW50cyBuZWVkIHRvIGJlIGdlbmVyYXRlZC5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCBjb25zdHJhaW50cy5qc29uIGZpbGU6ICR7Y29uc3RyYWludHNGaWxlfWApO1xuXG4gICAgbGV0IHByZXZpb3VzQ29uc3RyYWludHM6IFBhcnRpYWw8Q29uc3RyYWludEZpbGU+ID0ge307XG4gICAgdHJ5IHtcbiAgICAgIHByZXZpb3VzQ29uc3RyYWludHMgPSBKU09OLnBhcnNlKGNvbnN0cmFpbnRzRmlsZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBDb3VsZCBub3QgcGFyc2UgY29uc3RyYWludHMuanNvbiBmaWxlIHdoaWxlIGZpbHRlcmluZzogJHtlfS4gR2VuZXJhdGluZyBhbGwgY29uc3RyYWludHMuYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gY29uc3RyYWludHM7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEZvdW5kIHByZXZpb3VzIGNvbnN0cmFpbnRzOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBwcmV2aW91c0NvbnN0cmFpbnRzLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKX1gLFxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICAhcHJldmlvdXNDb25zdHJhaW50cy5wcm92aWRlcnMgfHxcbiAgICAgIHR5cGVvZiBwcmV2aW91c0NvbnN0cmFpbnRzLnByb3ZpZGVycyAhPT0gXCJvYmplY3RcIlxuICAgICkge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBwcm92aWRlcnMgaW4gY29uc3RyYWludHMuanNvbiBmaWxlLCBnZW5lcmF0aW5nIGFsbCBjb25zdHJhaW50cy4gVGhlIGNvbnN0cmFpbnRzIGZpbGUgd2FzICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJldmlvdXNDb25zdHJhaW50cyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDIsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gY29uc3RyYWludHM7XG4gICAgfVxuXG4gICAgaWYgKHByZXZpb3VzQ29uc3RyYWludHMuY2RrdGYgIT09IERJU1BMQVlfVkVSU0lPTikge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBUaGUgQ0RLVE4gdmVyc2lvbiBoYXMgY2hhbmdlZCwgZ2VuZXJhdGluZyBhbGwgY29uc3RyYWludHMuIFRoZSBwcmV2aW91cyB2ZXJzaW9uIHdhcyAke3ByZXZpb3VzQ29uc3RyYWludHMuY2RrdGZ9LCB0aGUgY3VycmVudCB2ZXJzaW9uIGlzICR7RElTUExBWV9WRVJTSU9OfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbnRzO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnN0cmFpbnRzVG9HZW5lcmF0ZSA9IGNvbnN0cmFpbnRzLmZpbHRlcigoY29uc3RyYWludCkgPT4ge1xuICAgICAgY29uc3QgY29uc3RyYWludE1hdGNoZXMgPVxuICAgICAgICBwcmV2aW91c0NvbnN0cmFpbnRzLnByb3ZpZGVycyFbY29uc3RyYWludC5mcW5dID09PSBjb25zdHJhaW50LnZlcnNpb247XG4gICAgICBsZXQgcHJvdmlkZXJGb2xkZXJFeGlzdHMgPSBmYWxzZTtcblxuICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UpIHtcbiAgICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOlxuICAgICAgICAgIHByb3ZpZGVyRm9sZGVyRXhpc3RzID0gZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgIHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgXCJwcm92aWRlcnNcIiwgY29uc3RyYWludC5uYW1lKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExhbmd1YWdlLlBZVEhPTjpcbiAgICAgICAgY2FzZSBMYW5ndWFnZS5KQVZBOlxuICAgICAgICBjYXNlIExhbmd1YWdlLkNTSEFSUDpcbiAgICAgICAgICBwcm92aWRlckZvbGRlckV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICBwYXRoLmpvaW4odGhpcy5jb2RlTWFrZXJPdXRkaXIsIGNvbnN0cmFpbnQubmFtZSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMYW5ndWFnZS5HTzpcbiAgICAgICAgICBwcm92aWRlckZvbGRlckV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgIHRoaXMuY29kZU1ha2VyT3V0ZGlyLFxuICAgICAgICAgICAgICBjb25zdHJhaW50Lm5hbWVzcGFjZSB8fCBcImhhc2hpY29ycFwiLFxuICAgICAgICAgICAgICBjb25zdHJhaW50Lm5hbWUsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyRXhpc3RzID0gY29uc3RyYWludE1hdGNoZXMgJiYgcHJvdmlkZXJGb2xkZXJFeGlzdHM7XG4gICAgICByZXR1cm4gIXByb3ZpZGVyRXhpc3RzO1xuICAgIH0pO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYENvbnN0cmFpbnRzIHRvIGdlbmVyYXRlOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBjb25zdHJhaW50c1RvR2VuZXJhdGUsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIHJldHVybiBjb25zdHJhaW50c1RvR2VuZXJhdGU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlVHlwZXNjcmlwdE1vZHVsZShcbiAgICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCxcbiAgICBzY2hlbWE6IE1vZHVsZVNjaGVtYSxcbiAgKSB7XG4gICAgY29uc3QgZW5kVFNUaW1lciA9IGxvZ1RpbWVzcGFuKGBHZW5lcmF0ZSBUeXBlc2NyaXB0IGZvciAke3RhcmdldC5uYW1lfWApO1xuICAgIHRhcmdldC5zcGVjID0gc2NoZW1hO1xuICAgIG5ldyBNb2R1bGVHZW5lcmF0b3IodGhpcy5jb2RlLCBbdGFyZ2V0XSk7XG4gICAgZW5kVFNUaW1lcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZVR5cGVzY3JpcHQoXG4gICAgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICAgc2NoZW1hczogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiByZWFkU2NoZW1hPj4sXG4gICkge1xuICAgIGlmICh0YXJnZXQuaXNNb2R1bGUpIHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYXMubW9kdWxlU2NoZW1hPy5bdGFyZ2V0Lm1vZHVsZUtleV07XG4gICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgICAgYENvdWxkIG5vdCBnZW5lcmF0ZSBzY2hlbWEgZm9yIG1vZHVsZSAke3RhcmdldC5tb2R1bGVLZXl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZVR5cGVzY3JpcHRNb2R1bGUoXG4gICAgICAgIHRhcmdldCBhcyBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0YXJnZXQuaXNQcm92aWRlcikge1xuICAgICAgaWYgKCFzY2hlbWFzLnByb3ZpZGVyU2NoZW1hKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChgQ291bGQgbm90IGdlbmVyYXRlIHNjaGVtYSBmb3IgcHJvdmlkZXJzYCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVUeXBlc2NyaXB0UHJvdmlkZXIoXG4gICAgICAgIHRhcmdldCBhcyBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgICAgICAgc2NoZW1hcy5wcm92aWRlclNjaGVtYSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVua25vd24gdGFyZ2V0IHR5cGUgdXNlZCB0byBnZW5lcmF0ZSBiaW5kaW5nczogJHt0YXJnZXQubmFtZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBlbWl0cyBhIHZlcnNpb25zLmpzb24gZmlsZSB3aXRoIGEgbWFwIG9mIHRoZSB1c2VkIHZlcnNpb24gZm9yIGVhY2ggcHJvdmlkZXIgZnFwblxuICBwcml2YXRlIHVwZGF0ZVZlcnNpb25zRmlsZShcbiAgICBhbGxvd2VkQ29uc3RyYWludHM6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10sXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBVcGRhdGluZyB2ZXJzaW9ucyBmaWxlIHdpdGggZ2VuZXJhdGVkIHZlcnNpb25zICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHRoaXMudmVyc2lvbnMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfSB3aXRoIGFsbG93ZWQgY29uc3RyYWludHMgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYWxsb3dlZENvbnN0cmFpbnRzLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKX1gLFxuICAgICk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBcInZlcnNpb25zLmpzb25cIjtcbiAgICBsZXQgcHJldmlvdXNWZXJzaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIHRyeSB7XG4gICAgICBwcmV2aW91c1ZlcnNpb25zID0gSlNPTi5wYXJzZShcbiAgICAgICAgZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgZmlsZVBhdGgpLCBcInV0ZjhcIiksXG4gICAgICApO1xuXG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBSZWFkIGV4aXN0aW5nIHZlcnNpb25zIGZpbGU6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJldmlvdXNWZXJzaW9ucyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDIsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlXG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgcmVhZCB2ZXJzaW9ucyBmaWxlLCB0aGlzIGlzIGV4cGVjdGVkIGlmIHRoZXJlIGFyZSBubyBwcmUtZXhpc3RpbmcgbG9jYWwgcHJvdmlkZXJzOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVyc2lvbnMgPSBhbGxvd2VkQ29uc3RyYWludHMucmVkdWNlKChhY2MsIGNvbnN0cmFpbnQpID0+IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gT2JqZWN0LmVudHJpZXMocHJldmlvdXNWZXJzaW9ucykuZmluZCgoW25hbWVdKSA9PlxuICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIG1vcmUgcmVmaW5lZCwgYnV0IGl0J3MgZ29vZCBlbm91Z2ggZm9yIG5vd1xuICAgICAgICBuYW1lLmVuZHNXaXRoKGNvbnN0cmFpbnQuZnFuKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChwcm92aWRlcikge1xuICAgICAgICBjb25zdCBbbmFtZSwgdmVyc2lvbl0gPSBwcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCBbbmFtZV06IHZlcnNpb24gfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgV3JpdGluZyB2ZXJzaW9ucyBmaWxlICgke2ZpbGVQYXRofSk6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHZlcnNpb25zLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKX1gLFxuICAgICk7XG5cbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKEpTT04uc3RyaW5naWZ5KHsgLi4udmVyc2lvbnMsIC4uLnRoaXMudmVyc2lvbnMgfSwgbnVsbCwgMikpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgIHJldHVybiBmaWxlUGF0aDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZW1vdmVGb2xkZXJzVGhhdFNob3VsZE5vdEV4aXN0KFxuICAgIGNvbnN0cmFpbnRzVGhhdFNob3VsZEV4aXN0OiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICApIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgUmVtb3ZpbmcgcHJvdmlkZXJzIGV4Y2VwdCBmb3IgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgY29uc3RyYWludHNUaGF0U2hvdWxkRXhpc3QsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIC8vIEFsbCBsYW5ndWFnZXMgYmVzaWRlcyBUUyBrZWVwIHRoZWlyIHByb3ZpZGVycyBpbiB0aGUgc2FtZSBmb2xkZXJzIGFzIG1vZHVsZXNcbiAgICAvLyB0aGlzIG1ha2VzIGl0IGltcG9zc2libGUgZm9yIHVzIHRvIGRpc3Rpbmd1aXNoIGEgbm8gbG9uZ2VyIHJlcXVpcmVkIHByb3ZpZGVyXG4gICAgLy8gZnJvbSBhIG1hbnVhbGx5IHdyaXR0ZW4gY29uc3RydWN0IG9yIGEgbW9kdWxlXG4gICAgaWYgKCF0aGlzLmlzSmF2YXNjcmlwdFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBmaWxlc0luUHJvdmlkZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHByb3ZpZGVyc0ZvbGRlciA9IHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgXCJwcm92aWRlcnNcIik7XG4gICAgdHJ5IHtcbiAgICAgIGZpbGVzSW5Qcm92aWRlcnMgPSBhd2FpdCBmcy5yZWFkZGlyKHByb3ZpZGVyc0ZvbGRlcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgRXJyb3IgbGlzdGluZyBmaWxlcyBpbiBwcm92aWRlcnMgZm9sZGVyICcke3Byb3ZpZGVyc0ZvbGRlcn0nOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZm9sZGVycyA9IGZpbGVzSW5Qcm92aWRlcnMuZmlsdGVyKChmaWxlKSA9PlxuICAgICAgZnNcbiAgICAgICAgLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgXCJwcm92aWRlcnNcIiwgZmlsZSkpXG4gICAgICAgIC5pc0RpcmVjdG9yeSgpLFxuICAgICk7XG5cbiAgICByZXR1cm4gZm9sZGVycy5mb3JFYWNoKChmb2xkZXIpID0+IHtcbiAgICAgIGNvbnN0IHNob3VsZEV4aXN0ID0gY29uc3RyYWludHNUaGF0U2hvdWxkRXhpc3Quc29tZShcbiAgICAgICAgKGNvbnN0cmFpbnQpID0+IGNvbnN0cmFpbnQubmFtZSA9PT0gZm9sZGVyLFxuICAgICAgKTtcblxuICAgICAgaWYgKCFzaG91bGRFeGlzdCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFJlbW92aW5nIGZvbGRlciAke2ZvbGRlcn0gZnJvbSBwcm92aWRlcnNgKTtcbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLnJlc29sdmUodGhpcy5jb2RlTWFrZXJPdXRkaXIsIFwicHJvdmlkZXJzXCIsIGZvbGRlcikpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gZW1pdHMgYSBjb25zdHJhaW50cy5qc29uIGZpbGUgd2l0aCBhIG1hcCBvZiB0aGUgdXNlZCBwcm92aWRlciBmcXBucyBhbmQgdmVyc2lvbiBjb25zdHJhaW50c1xuICAvLyB0aGlzIGlzIHVzZWQgZm9yIGNhY2hpbmcgcHVycG9zZXNcbiAgcHJpdmF0ZSBlbWl0Q29uc3RyYWludHNGaWxlKFxuICAgIGFsbG93ZWRDb25zdHJhaW50czogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRbXSxcbiAgICBwcm92aWRlclNjaGVtYT86IFByb3ZpZGVyU2NoZW1hLFxuICApIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IFwiY29uc3RyYWludHMuanNvblwiO1xuXG4gICAgY29uc3QgY29udGVudDogQ29uc3RyYWludEZpbGUgPSB7XG4gICAgICBjZGt0ZjogRElTUExBWV9WRVJTSU9OLFxuICAgICAgcHJvdmlkZXJzOiBhbGxvd2VkQ29uc3RyYWludHNcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZnFuLmxvY2FsZUNvbXBhcmUoYi5mcW4pKVxuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgIChjYXJyeSwgaXRlbSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmNhcnJ5LFxuICAgICAgICAgICAgW2l0ZW0uZnFuXTogaXRlbS52ZXJzaW9uLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHt9LFxuICAgICAgICApLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnRhcmdldFZlcnNpb25zKSB7XG4gICAgICBjb250ZW50LnRhcmdldFZlcnNpb25zID0gdGhpcy5vcHRpb25zLnRhcmdldFZlcnNpb25zO1xuICAgIH1cblxuICAgIGlmIChwcm92aWRlclNjaGVtYT8uY2xpX25hbWUgfHwgcHJvdmlkZXJTY2hlbWE/LmNsaV92ZXJzaW9uKSB7XG4gICAgICBjb250ZW50LmNsaSA9IHtcbiAgICAgICAgbmFtZTogcHJvdmlkZXJTY2hlbWEuY2xpX25hbWUsXG4gICAgICAgIHZlcnNpb246IHByb3ZpZGVyU2NoZW1hLmNsaV92ZXJzaW9uLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKEpTT04uc3RyaW5naWZ5KGNvbnRlbnQsIG51bGwsIDIpKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcbiAgICByZXR1cm4gZmlsZVBhdGg7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlSnNpaUxhbmd1YWdlKHRhcmdldDogQ29uc3RydWN0c01ha2VyVGFyZ2V0KSB7XG4gICAgLy8gTW9kdWxlIGRlcGVuZGVuY2llcyB3ZSBjb21waWxlIGFnYWluc3QuIFN0YXRpYyByZXF1aXJlLnJlc29sdmUgY2FsbHMgc29cbiAgICAvLyBrbmlwIC8gcG5wbSBzdHJpY3QgaXNvbGF0aW9uIGNhbiBzZWUgdGhlIGRlcHMuXG4gICAgY29uc3QgZGVwcyA9IFtcbiAgICAgIHBhdGguZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJAdHlwZXMvbm9kZS9wYWNrYWdlLmpzb25cIikpLFxuICAgICAgcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcImNvbnN0cnVjdHMvcGFja2FnZS5qc29uXCIpKSxcbiAgICAgIHBhdGguZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJjZGt0bi9wYWNrYWdlLmpzb25cIikpLFxuICAgIF07XG4gICAgY29uc3Qgb3B0czogR2VuZXJhdGVKU0lJT3B0aW9ucyA9IHtcbiAgICAgIGVudHJ5cG9pbnQ6IHRhcmdldC5maWxlTmFtZSxcbiAgICAgIGRlcHMsXG4gICAgICBtb2R1bGVLZXk6IHRhcmdldC5tb2R1bGVLZXksXG4gICAgICBleHBvcnRzOiB0YXJnZXQuaXNQcm92aWRlciAvLyBNb2R1bGVzIGFyZSBzbWFsbCBlbm91Z2ggdGhhdCB3ZSBkb24ndCBuZWVkIHRoaXMgb3B0aW1pemF0aW9uXG4gICAgICAgID8ge1xuICAgICAgICAgICAgXCIuXCI6IHtcbiAgICAgICAgICAgICAgaW1wb3J0OiBgLi9wcm92aWRlcnMvJHt0YXJnZXQubmFtZX0vaW5kZXguanNgLFxuICAgICAgICAgICAgICByZXF1aXJlOiBgLi9wcm92aWRlcnMvJHt0YXJnZXQubmFtZX0vbGF6eS1pbmRleC5qc2AsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIC8vIHVzZWQgZm9yIHRlc3RpbmcuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdXRwdXRKc2lpKSB7XG4gICAgICBvcHRzLmpzaWkgPSB7IHBhdGg6IHRoaXMub3B0aW9ucy5vdXRwdXRKc2lpIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNQeXRob25UYXJnZXQpIHtcbiAgICAgIG9wdHMucHl0aG9uID0ge1xuICAgICAgICBvdXRkaXI6IHRoaXMuY29kZU1ha2VyT3V0ZGlyLFxuICAgICAgICBtb2R1bGVOYW1lOiB0YXJnZXQuc3JjTWFrTmFtZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNKYXZhVGFyZ2V0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMub3B0aW9ucy5jb2RlTWFrZXJPdXRwdXQuaW5jbHVkZXMoXCIvXCIpIHx8XG4gICAgICAgIHRoaXMub3B0aW9ucy5jb2RlTWFrZXJPdXRwdXQuaW5jbHVkZXMoXCJcXFxcXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICAgIGBXaGVuIHVzaW5nIEphdmEgdGhlIFwiY29kZU1ha2VyT3V0cHV0XCIgb3B0aW9uIGluIHRoZSBjZGt0Zi5qc29uIG11c3QgYmUgdGhlIG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyIGZvciB5b3VyIHByb2plY3QgKGUuZy4gY29tLm15LWNvbXBhbnkpLCBub3QgYSBwYXRoLiBUaGUgZ2VuZXJhdGVkIEphdmEgY29kZSB3aWxsIGJlIHBsYWNlZCBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiBJZiB5b3UgYXJlIG1pZ3JhdGluZyBmcm9tIGEgPCAwLjE5IHZlcnNpb24gb2YgY2RrdGYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBjb2RlbWFrZXJPdXRwdXQgdG8gXCJpbXBvcnRzXCIuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgb3B0cy5qYXZhID0ge1xuICAgICAgICBvdXRkaXI6IFwiLlwiLCAvLyBnZW5lcmF0ZWQgamF2YSBmaWxlcyBhcmVuJ3QgcGFja2FnZWQsIHNvIGp1c3QgaW5jbHVkZSBkaXJlY3RseSBpbiBhcHBcbiAgICAgICAgcGFja2FnZTogYCR7dGhpcy5vcHRpb25zLmNvZGVNYWtlck91dHB1dH0uJHt0YXJnZXQuc3JjTWFrTmFtZX1gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0NzaGFycFRhcmdldCkge1xuICAgICAgb3B0cy5jc2hhcnAgPSB7XG4gICAgICAgIG91dGRpcjogdGhpcy5jb2RlTWFrZXJPdXRkaXIsXG4gICAgICAgIG5hbWVzcGFjZTogdGFyZ2V0LnNyY01ha05hbWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzR29UYXJnZXQpIHtcbiAgICAgIC8vIFRPRE86IGNoZWNrIGlmIG5lZWRlZCBmb3IgbW9kdWxlcyBzb21laG93XG4gICAgICAvLyBjb25zdCB0YXJnZXRUeXBlID0gdGFyZ2V0LmlzUHJvdmlkZXIgPyAncHJvdmlkZXInIDogJ21vZHVsZSc7XG5cbiAgICAgIC8vIGpzaWktc3JjbWFjIHdpbGwgcHJvZHVjZSBhIGZvbGRlciBpbnNpZGUgdGhpcyBkaXIgbmFtZWQgYWZ0ZXIgXCJwYWNrYWdlTmFtZVwiXG4gICAgICAvLyBzbyB0aGlzIHJlc3VsdHMgaW4gZS5nLiAuZ2VuL2hhc2hpY29ycC9yYW5kb21cbiAgICAgIGNvbnN0IG91dGRpciA9IHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgdGFyZ2V0Lm5hbWVzcGFjZSA/PyBcIlwiKTtcblxuICAgICAgb3B0cy5nb2xhbmcgPSB7XG4gICAgICAgIG91dGRpcixcbiAgICAgICAgbW9kdWxlTmFtZTogYXdhaXQgZGV0ZXJtaW5lR29Nb2R1bGVOYW1lKG91dGRpciksIC8vIGUuZy4gYGdpdGh1Yi5jb20vb3JnL3VzZXJwcm9qZWN0Ly5nZW4vaGFzaGljb3JwYFxuICAgICAgICBwYWNrYWdlTmFtZTogdGFyZ2V0LnNyY01ha05hbWUsIC8vIHBhY2thZ2Ugd2lsbCBiZSBuYW1lZCBlLmcuIHJhbmRvbSBmb3IgaGFzaGljb3JwL3JhbmRvbVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX09QVElPTlMgJiZcbiAgICAgICFwcm9jZXNzLmVudi5OT0RFX09QVElPTlMuaW5jbHVkZXMoYC0tbWF4LW9sZC1zcGFjZS1zaXplYClcbiAgICApIHtcbiAgICAgIGxvZ2dlci53YXJuKGBmb3VuZCBOT0RFX09QVElPTlMgZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aG91dCBhIHNldHRpbmcgZm9yIC0tbWF4LW9sZC1zcGFjZS1zaXplLlxuVGhlIHByb3ZpZGVyIGdlbmVyYXRpb24gbmVlZHMgYSBzdWJzdGFudGlhbCBhbW91bnQgb2YgbWVtb3J5ICh+MTNHQikgZm9yIHNvbWUgcHJvdmlkZXJzIGFuZCBsYW5ndWFnZXMuXG5TbyBjZGt0bi1jbGkgc2V0cyBpdCB0byBOT0RFX09QVElPTlM9XCItLW1heC1vbGQtc3BhY2Utc2l6ZT0xNjM4NFwiIGJ5IGRlZmF1bHQuIEFzIHlvdXIgZW52aXJvbm1lbnQgYWxyZWFkeSBjb250YWluc1xuYSBOT0RFX09QVElPTlMgdmFyaWFibGUsIHdlIHdvbid0IG92ZXJyaWRlIGl0LiBIZW5jZSwgdGhlIHByb3ZpZGVyIGdlbmVyYXRpb24gbWlnaHQgZmFpbCB3aXRoIGFuIG91dCBvZiBtZW1vcnkgZXJyb3IuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluY3JlYXNlIG1lbW9yeSB0byBhbGxvdyBnZW5lcmF0aW5nIGxhcmdlIHByb3ZpZGVycyAoaS5lLiBhd3Mgb3IgYXp1cmVybSBmb3IgR28pXG4gICAgICAvLyBzcmNtYWsgaXMgZ29pbmcgdG8gc3Bhd24gYSBjaGlsZHByb2Nlc3MgKGZvciBqc2lpLXBhY21haykgd2hpY2ggaXMgZ29pbmcgdG8gYmUgYWZmZWN0ZWQgYnkgdGhpcyBlbnYgdmFyXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX09QVElPTlMgPSBcIi0tbWF4LW9sZC1zcGFjZS1zaXplPTE2Mzg0XCI7XG4gICAgfVxuXG4gICAgY29uc3QganNpaVRpbWVyID0gbG9nVGltZXNwYW4oXCJKU0lJXCIpO1xuICAgIGF3YWl0IGdlbmVyYXRlSnNpaUxhbmd1YWdlKHRoaXMuY29kZSwgb3B0cywgdGhpcy5jb2RlTWFrZXJPdXRkaXIsIFtcbiAgICAgIHRhcmdldC5pc01vZHVsZSA/IFwicHJvdmlkZXJzLyoqXCIgOiBcIm1vZHVsZXMvKipcIixcbiAgICBdKTtcbiAgICBqc2lpVGltZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTY2hlbWFzKHRhcmdldHM6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10pIHtcbiAgICByZXR1cm4gYXdhaXQgcmVhZFNjaGVtYShcbiAgICAgIHRhcmdldHMsXG4gICAgICB0aGlzLnNjaGVtYUNhY2hlUGF0aCxcbiAgICAgIHRoaXMub3B0aW9ucy50YXJnZXRWZXJzaW9ucyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlKFxuICAgIGFsbENvbnN0cmFpbnRzOiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICAgIGNvbnN0cmFpbnRzVG9HZW5lcmF0ZSA9IGFsbENvbnN0cmFpbnRzLFxuICApIHtcbiAgICBjb25zdCB0YXJnZXRzID0gY29uc3RyYWludHNUb0dlbmVyYXRlLm1hcCgoY29uc3RyYWludCkgPT5cbiAgICAgIENvbnN0cnVjdHNNYWtlclRhcmdldC5mcm9tKGNvbnN0cmFpbnQsIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSksXG4gICAgKTtcblxuICAgIGNvbnN0IGVuZFNjaGVtYVRpbWVyID0gbG9nVGltZXNwYW4oXCJHYXRoZXJpbmcgc2NoZW1hXCIpO1xuICAgIGNvbnN0IHNjaGVtYXMgPSBhd2FpdCB0aGlzLmdldFNjaGVtYXMoY29uc3RyYWludHNUb0dlbmVyYXRlKTtcbiAgICBlbmRTY2hlbWFUaW1lcigpO1xuXG4gICAgY29uc3QgZW5kR2VuZXJhdGVUaW1lciA9IGxvZ1RpbWVzcGFuKFwiR2VuZXJhdGUgVFNcIik7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0YXJnZXRzLm1hcCgodGFyZ2V0KSA9PiB0aGlzLmdlbmVyYXRlVHlwZXNjcmlwdCh0YXJnZXQsIHNjaGVtYXMpKSxcbiAgICApO1xuICAgIGVuZEdlbmVyYXRlVGltZXIoKTtcblxuICAgIHRoaXMudXBkYXRlVmVyc2lvbnNGaWxlKGFsbENvbnN0cmFpbnRzKTtcbiAgICB0aGlzLmVtaXRDb25zdHJhaW50c0ZpbGUoYWxsQ29uc3RyYWludHMsIHNjaGVtYXMucHJvdmlkZXJTY2hlbWEpO1xuXG4gICAgaWYgKHRoaXMuaXNKYXZhc2NyaXB0VGFyZ2V0KSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmUoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNKYXZhc2NyaXB0VGFyZ2V0IHx8IHRoaXMub3B0aW9ucy5vdXRwdXRKc2lpKSB7XG4gICAgICBjb25zdCBudW1iZXJPZldvcmtlcnMgPSBNYXRoLm1heChcbiAgICAgICAgMSxcbiAgICAgICAgdGhpcy5vcHRpb25zLmpzaWlQYXJhbGxlbGlzbSA9PT0gLTFcbiAgICAgICAgICA/IHRhcmdldHMubGVuZ3RoXG4gICAgICAgICAgOiB0aGlzLm9wdGlvbnMuanNpaVBhcmFsbGVsaXNtIHx8IDEsXG4gICAgICApO1xuXG4gICAgICBjb25zdCB3b3JrID0gWy4uLnRhcmdldHNdO1xuICAgICAgY29uc3Qgd29ya2VycyA9IG5ldyBBcnJheShudW1iZXJPZldvcmtlcnMpLmZpbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQgfCB1bmRlZmluZWQ7XG4gICAgICAgIHdoaWxlICgodGFyZ2V0ID0gd29yay5wb3AoKSkpIHtcbiAgICAgICAgICBjb25zdCBlbmRKc2lpVGFyZ2V0ID0gbG9nVGltZXNwYW4oXG4gICAgICAgICAgICBgR2VuZXJhdGluZyBKU0lJIGJpbmRpbmdzIGZvciAke3RhcmdldC5uYW1lfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlSnNpaUxhbmd1YWdlKHRhcmdldCk7XG4gICAgICAgICAgZW5kSnNpaVRhcmdldCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwod29ya2Vycy5tYXAoKGZuKSA9PiBmbigpKSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgYXdhaXQgdGhpcy5yZXBvcnRUZWxlbWV0cnkoe1xuICAgICAgICB0cmFja2luZ1BheWxvYWQ6IHRhcmdldC50cmFja2luZ1BheWxvYWQsXG4gICAgICAgIHRhcmdldExhbmd1YWdlOiB0YXJnZXQudGFyZ2V0TGFuZ3VhZ2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1B5dGhvblRhcmdldCkge1xuICAgICAgY29uc3QgZW5kUHl0aG9uVGltZXIgPSBsb2dUaW1lc3BhbihcIlB5dGhvbiBwb3N0LXByb2Nlc3NpbmdcIik7XG4gICAgICAvLyBSZW1vdmUgZnJvbSAuIGltcG9ydCAuLi4gc3RhdGVtZW50cyBmcm9tIHJvb3QgbGV2ZWwgX19pbml0X18ucHlcbiAgICAgIC8vIFRoaXMgcmVtb3ZlcyByb290LWxldmVsIGltcG9ydHMgb2YgbmFtZXNwYWNlcywgYnV0IHNhdmVzIDI1cyBzeW50aCB0aW1lIGZvciB0aGUgYXdzIHByb3ZpZGVyIGFsb25lXG4gICAgICBjb25zdCBhbGxJbml0UHlQYXRocyA9IGdsb2JcbiAgICAgICAgLnN5bmMoXCIqKi9fX2luaXRfXy5weVwiLCB7XG4gICAgICAgICAgY3dkOiB0aGlzLmNvZGVNYWtlck91dGRpcixcbiAgICAgICAgfSlcbiAgICAgICAgLy8gc29ydCBieSBkZXB0aCwgc28gd2Ugc3RhcnQgd2l0aCB0aGUgc2hhbGxvd2VzdCBmaWxlc1xuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zcGxpdChcIi9cIikubGVuZ3RoIC0gYi5zcGxpdChcIi9cIikubGVuZ3RoKTtcblxuICAgICAgY29uc3QgdmlzaXRlZERpcmVjdG9yaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBpbml0UHlQYXRoIG9mIGFsbEluaXRQeVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeVBhdGggPSBwYXRoLmRpcm5hbWUoaW5pdFB5UGF0aCk7XG4gICAgICAgIGlmICh2aXNpdGVkRGlyZWN0b3JpZXMuc29tZSgoZGlyKSA9PiBkaXJlY3RvcnlQYXRoLnN0YXJ0c1dpdGgoZGlyKSkpIHtcbiAgICAgICAgICAvLyB3ZSBhbHJlYWR5IHByb2Nlc3NlZCB0aGlzIGRpcmVjdG9yeVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZpc2l0ZWREaXJlY3Rvcmllcy5wdXNoKGRpcmVjdG9yeVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFic29sdXRlSW5pdFB5UGF0aCA9IHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgaW5pdFB5UGF0aCk7XG4gICAgICAgIGNvbnN0IGluaXRQeSA9IGF3YWl0IGZzLnJlYWRGaWxlKGFic29sdXRlSW5pdFB5UGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgICBjb25zdCBpbml0UHlXaXRob3V0SW1wb3J0cyA9IGluaXRQeS5yZXBsYWNlKC9mcm9tIFxcLiBpbXBvcnQgLipcXG4vZywgXCJcIik7XG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShhYnNvbHV0ZUluaXRQeVBhdGgsIGluaXRQeVdpdGhvdXRJbXBvcnRzKTtcbiAgICAgIH1cblxuICAgICAgZW5kUHl0aG9uVGltZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmUob3V0ZGlyID0gdGhpcy5jb2RlTWFrZXJPdXRkaXIpIHtcbiAgICBhd2FpdCB0aGlzLmNvZGUuc2F2ZShvdXRkaXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNKYXZhc2NyaXB0VGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLlRZUEVTQ1JJUFQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc1B5dGhvblRhcmdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlID09PSBMYW5ndWFnZS5QWVRIT047XG4gIH1cblxuICBwcml2YXRlIGdldCBpc0phdmFUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuSkFWQTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzQ3NoYXJwVGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLkNTSEFSUDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzR29UYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuR087XG4gIH1cbn1cblxuLyoqXG4gKiBzZWFyY2hlcyBmb3IgdGhlIGNsb3Nlc3QgYGdvLm1vZGAgZmlsZSBhbmQgcmV0dXJucyB0aGUgbmVzdGVkIGdvIG1vZHVsZSBuYW1lIGZvciBgZGlyYFxuICogZS5nLiAoL2Rpci8uZ2VuLykgPT4gY2RrLnRmL3N0YWNrLy5nZW4gaWYgdGhlIHBhcmVudCBkaXIgb2YgLmdlbiBoYXMgYSBnby5tb2QgZm9yIFwibW9kdWxlIGNkay50Zi9zdGFja1wiXG4gKlxuICogQHBhcmFtIGRpciB0aGUgZGlyZWN0b3J5IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbSAoc2VhcmNoZXMgdXB3YXJkcylcbiAqIEByZXR1cm5zIHRoZSBwYWNrYWdlIG5hbWUgZm9yIGBkaXJgXG4gKiBAdGhyb3dzIGFuIEVycm9yIGlmIG5vIGdvLm1vZCB3YXMgZm91bmRcbiAqL1xuZXhwb3J0IGNvbnN0IGRldGVybWluZUdvTW9kdWxlTmFtZSA9IGFzeW5jIChkaXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGxldCBwcmV2aW91c0RpcjtcbiAgbGV0IGN1cnJlbnREaXIgPSBwYXRoLnJlc29sdmUoZGlyKTtcblxuICBkbyB7XG4gICAgbGV0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIoY3VycmVudERpcik7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBkaXJlY3RvcnkgbWlnaHQgbm90IGV4aXN0IHlldCwgYnV0IHdlIHN0aWxsIHdhbGsgdXB3YXJkcyBmcm9tIHRoZXJlLCBzbyBpZ25vcmUgJ0VOT0VOVCdcbiAgICAgIGlmIChlLmNvZGUgIT09IFwiRU5PRU5UXCIpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpbGVzLmluY2x1ZGVzKFwiZ28ubW9kXCIpKSB7XG4gICAgICBjb25zdCBmaWxlID0gcGF0aC5yZXNvbHZlKGN1cnJlbnREaXIsIFwiZ28ubW9kXCIpO1xuICAgICAgY29uc3QgZ29tb2QgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlKTtcbiAgICAgIGNvbnN0IG1hdGNoID0gL15tb2R1bGVcXHMqKFxcUyopXFxzKiQvbS5leGVjKGdvbW9kLnRvU3RyaW5nKCkpO1xuICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkZGlyID0gcGF0aC5yZWxhdGl2ZShjdXJyZW50RGlyLCBkaXIpLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpOyAvLyByZXBsYWNlICdcXCcgd2l0aCAnLycgZm9yIHdpbmRvd3MgcGF0aHNcbiAgICAgICAgcmV0dXJuIGNoaWxkZGlyLmxlbmd0aCA+IDAgPyBgJHttYXRjaFsxXX0vJHtjaGlsZGRpcn1gIDogbWF0Y2hbMV07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSByb290IEdvIG1vZHVsZSBuYW1lLiBGb3VuZCAke2ZpbGV9IGJ1dCBmYWlsZWQgdG8gcmVnZXggbWF0Y2ggdGhlIG1vZHVsZSBuYW1lIGRpcmVjdGl2ZWAsXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBnbyB1cCBvbmUgZGlyZWN0b3J5LiBBcyBkaXJuYW1lKCcvJykgd2lsbCByZXR1cm4gJy8nIHdlIGNhbmNlbCB0aGUgbG9vcFxuICAgIC8vIGFzIHNvb24gYXMgdGhlIGRpciBkb2VzIG5vdCBjaGFuZ2UgYW55bW9yZS5cbiAgICBwcmV2aW91c0RpciA9IGN1cnJlbnREaXI7XG4gICAgY3VycmVudERpciA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKTtcbiAgfSB3aGlsZSAoY3VycmVudERpciAhPT0gcHJldmlvdXNEaXIpO1xuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgQ291bGQgbm90IGRldGVybWluZSB0aGUgcm9vdCBHbyBtb2R1bGUgbmFtZS4gTm8gZ28ubW9kIGZvdW5kIGluICR7ZGlyfSBhbmQgYW55IHBhcmVudCBkaXJlY3Rvcmllc2AsXG4gICk7XG59O1xuIl19
575
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0cy1tYWtlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZXQvY29uc3RydWN0cy1tYWtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNkNBQStCO0FBQy9CLDJDQUE2QjtBQUM3Qix5Q0FBc0M7QUFDdEMsNENBQStDO0FBQy9DLDRDQVl3QjtBQUN4Qiw0Q0FBMkQ7QUFDM0QsdUVBQTRFO0FBQzVFLG1FQUErRDtBQUMvRCwrQkFBNEI7QUFDNUIsNERBQW9EO0FBRXBELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUNwRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRXBEOzs7Ozs7O0dBT0c7QUFDSCxLQUFLLFVBQVUsdUJBQXVCLENBQUMsR0FBVztJQUNoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsY0FBSSxFQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7UUFDaEUsR0FBRyxFQUFFLEdBQUc7S0FDVCxDQUFDLENBQUM7SUFDSCwyRUFBMkU7SUFDM0UsNkVBQTZFO0lBQzdFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUVpQixDQUFDO0lBQ2xELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxnRkFBZ0Y7SUFDaEYsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFB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R0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYixzREFBc0QsSUFBSSxzREFBc0QsQ0FDakgsQ0FBQztRQUNKLENBQUM7UUFDRCwwRUFBMEU7UUFDMUUsOENBQThDO1FBQzlDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDekIsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsQ0FBQyxRQUFRLFVBQVUsS0FBSyxXQUFXLEVBQUU7SUFFckMsTUFBTSxJQUFJLEtBQUssQ0FDYixtRUFBbUUsR0FBRyw2QkFBNkIsQ0FDcEcsQ0FBQztBQUNKLENBQUMsQ0FBQztBQW5DVyxRQUFBLHFCQUFxQix5QkFtQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgQ29kZU1ha2VyIH0gZnJvbSBcImNvZGVtYWtlclwiO1xuaW1wb3J0IHsgZXhlYywgbWtkdGVtcCB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHtcbiAgVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnQsXG4gIGxvZ2dlcixcbiAgbG9nVGltZXNwYW4sXG4gIENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuICBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQsXG4gIENvbnN0cnVjdHNNYWtlclRhcmdldCxcbiAgUHJvdmlkZXJTY2hlbWEsXG4gIE1vZHVsZVNjaGVtYSxcbiAgRXJyb3JzLFxuICB0eXBlIExhbmd1YWdlT3B0aW9ucyxcbiAgdHlwZSBUZXJyYWZvcm1UYXJnZXRWZXJzaW9ucyxcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBESVNQTEFZX1ZFUlNJT04sIExhbmd1YWdlIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvciB9IGZyb20gXCIuL2dlbmVyYXRvci9wcm92aWRlci1nZW5lcmF0b3JcIjtcbmltcG9ydCB7IE1vZHVsZUdlbmVyYXRvciB9IGZyb20gXCIuL2dlbmVyYXRvci9tb2R1bGUtZ2VuZXJhdG9yXCI7XG5pbXBvcnQgeyBnbG9iIH0gZnJvbSBcImdsb2JcIjtcbmltcG9ydCB7IHJlYWRTY2hlbWEgfSBmcm9tIFwiQGNka3RuL3Byb3ZpZGVyLXNjaGVtYVwiO1xuXG5jb25zdCBwYWNtYWtNb2R1bGUgPSByZXF1aXJlLnJlc29sdmUoXCJqc2lpLXBhY21hay9iaW4vanNpaS1wYWNtYWtcIik7XG5jb25zdCBqc2lpTW9kdWxlID0gcmVxdWlyZS5yZXNvbHZlKFwianNpaS9iaW4vanNpaVwiKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaWxlcyBgbnBtIHBhY2tgIHdvdWxkIHB1Ymxpc2ggZm9yIHRoZSBwYWNrYWdlIGF0IGBkaXJgLCBhcyBwYXRocyByZWxhdGl2ZSB0byBgZGlyYC4gVGhpcyBpcyB0aGUgc2V0XG4gKiBqc2lpIG5lZWRzIHRvIGNvbXBpbGUgYWdhaW5zdCBhIGRlcGVuZGVuY3kg4oCUIGl0cyBzb3VyY2VzIGFuZCBkZWNsYXJlZCBtZXRhZGF0YSDigJQgYW5kIGV4Y2x1ZGVzIGJ1aWxkIG91dHB1dHNcbiAqIChgZGlzdGAsIGAucGFjay1zdGFnaW5nYCwgYG5vZGVfbW9kdWxlc2AsIHRzYnVpbGRpbmZvLCAuLi4pIHRoYXQgYSBibGFua2V0IGRpcmVjdG9yeSBjb3B5IHdvdWxkIG90aGVyd2lzZSBwdWxsIGluLlxuICpcbiAqIEBwYXJhbSBkaXIgLSBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwYWNrYWdlIGRpcmVjdG9yeSB0byBpbnNwZWN0IChtdXN0IGNvbnRhaW4gYSBwYWNrYWdlLmpzb24pLlxuICogQHJldHVybnMgUHVibGlzaGFibGUgZmlsZSBwYXRocywgcmVsYXRpdmUgdG8gYGRpcmAsIHdpdGggYC4uYC1lc2NhcGUgcGF0aHMgKGZyb20gZm9sbG93aW5nIHBucG0gc3ltbGlua3MpIGRyb3BwZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQdWJsaXNoYWJsZUZpbGVzKGRpcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBzdGRvdXQgPSBhd2FpdCBleGVjKFwibnBtXCIsIFtcInBhY2tcIiwgXCItLWRyeS1ydW5cIiwgXCItLWpzb25cIl0sIHtcbiAgICBjd2Q6IGRpcixcbiAgfSk7XG4gIC8vIG5wbSA8PTExIHJlcG9ydHMgYW4gYXJyYXkgb2YgcGFja2VkIHBhY2thZ2VzOyBucG0gPj0xMiByZXBvcnRzIGFuIG9iamVjdFxuICAvLyBrZXllZCBieSBwYWNrYWdlIG5hbWUuIEFjY2VwdCBlaXRoZXIgc28gdGhlIGJ1aWxkIGlzIG5wbS12ZXJzaW9uIGFnbm9zdGljLlxuICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHN0ZG91dCkgYXNcbiAgICB8IEFycmF5PHsgZmlsZXM6IHsgcGF0aDogc3RyaW5nIH1bXSB9PlxuICAgIHwgUmVjb3JkPHN0cmluZywgeyBmaWxlczogeyBwYXRoOiBzdHJpbmcgfVtdIH0+O1xuICBjb25zdCBwYWNrSW5mbyA9IEFycmF5LmlzQXJyYXkocGFyc2VkKSA/IHBhcnNlZFswXSA6IE9iamVjdC52YWx1ZXMocGFyc2VkKVswXTtcbiAgLy8gRHJvcCBgLi5gLWVzY2FwZSBwYXRocyBucG0gZW1pdHMgd2hlbiBmb2xsb3dpbmcgcG5wbSdzIG5vZGVfbW9kdWxlcyBzeW1saW5rcy5cbiAgcmV0dXJuIHBhY2tJbmZvLmZpbGVzLm1hcCgoZikgPT4gZi5wYXRoKS5maWx0ZXIoKHApID0+ICFwLmluY2x1ZGVzKFwiLi5cIikpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlSlNJSU9wdGlvbnMge1xuICBlbnRyeXBvaW50OiBzdHJpbmc7XG4gIGRlcHM6IHN0cmluZ1tdO1xuICBtb2R1bGVLZXk6IHN0cmluZztcbiAgZXhwb3J0cz86IFJlY29yZDxzdHJpbmcsIEV4cG9ydERlZmluaXRpb24gfCBzdHJpbmc+O1xuICBqc2lpPzogSnNpaU91dHB1dE9wdGlvbnM7XG4gIHB5dGhvbj86IFB5dGhvbk91dHB1dE9wdGlvbnM7XG4gIGphdmE/OiBKYXZhT3V0cHV0T3B0aW9ucztcbiAgY3NoYXJwPzogQ1NoYXJwT3V0cHV0T3B0aW9ucztcbiAgZ29sYW5nPzogR29MYW5nT3V0cHV0T3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKc2lpT3V0cHV0T3B0aW9ucyB7XG4gIHBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQeXRob25PdXRwdXRPcHRpb25zIHtcbiAgb3V0ZGlyOiBzdHJpbmc7XG4gIG1vZHVsZU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKYXZhT3V0cHV0T3B0aW9ucyB7XG4gIG91dGRpcjogc3RyaW5nO1xuICBwYWNrYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NoYXJwT3V0cHV0T3B0aW9ucyB7XG4gIG91dGRpcjogc3RyaW5nO1xuICBuYW1lc3BhY2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHb0xhbmdPdXRwdXRPcHRpb25zIHtcbiAgb3V0ZGlyOiBzdHJpbmc7XG4gIG1vZHVsZU5hbWU6IHN0cmluZztcbiAgcGFja2FnZU5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wYWNrYWdlcy5odG1sI2NvbmRpdGlvbmFsLWV4cG9ydHMgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBvcnREZWZpbml0aW9uIHtcbiAgbm9kZT86IHN0cmluZztcbiAgaW1wb3J0Pzogc3RyaW5nO1xuICByZXF1aXJlPzogc3RyaW5nO1xuICBkZWZhdWx0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVKc2lpTGFuZ3VhZ2UoXG4gIGNvZGU6IENvZGVNYWtlcixcbiAgb3B0czogR2VuZXJhdGVKU0lJT3B0aW9ucyxcbiAgb3V0cHV0UGF0aDogc3RyaW5nLFxuICBkaXNhbGxvd2VkRmlsZUdsb2JzOiBzdHJpbmdbXSA9IFtdLFxuKSB7XG4gIGF3YWl0IG1rZHRlbXAoYXN5bmMgKHN0YWdpbmcpID0+IHtcbiAgICAvLyB0aGlzIGlzIG5vdCB0eXBlc2NyaXB0LCBzbyB3ZSBnZW5lcmF0ZSBpbiBhIHN0YWdpbmcgZGlyZWN0b3J5IGFuZFxuICAgIC8vIHVzZSBqc2lpLXNyY21hayB0byBjb21waWxlIGFuZCBleHRyYWN0IHRoZSBsYW5ndWFnZS1zcGVjaWZpYyBzb3VyY2VcbiAgICAvLyBpbnRvIG91ciBwcm9qZWN0LlxuICAgIGF3YWl0IGNvZGUuc2F2ZShzdGFnaW5nKTtcblxuICAgIC8vIGFzIHRoZSBhYm92ZSBnZW5lcmF0ZWQgdGhlIFR5cGVzY3JpcHQgY29kZSBmb3IgYWxsIHByb3ZpZGVycyBhbmQgbW9kdWxlcyxcbiAgICAvLyB3ZSBuZWVkIHRvIGZpbHRlciBvdXQgdGhlIG9uZXMgd2UgZG9uJ3QgbmVlZCBzbyB0aGV5IGRvbid0IGVuZCB1cCBpbiB0aGUgSlNJSSBidW5kbGUgb3ZlciBhbmQgb3ZlciBhZ2Fpbi5cbiAgICBjb25zdCBmaWxlc1RvRGVsZXRlID0gZGlzYWxsb3dlZEZpbGVHbG9icy5mbGF0TWFwKChwYXR0ZXJuKSA9PlxuICAgICAgZ2xvYi5zeW5jKHBhdHRlcm4sIHsgY3dkOiBzdGFnaW5nIH0pLFxuICAgICk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBmaWxlc1RvRGVsZXRlLm1hcCgoZmlsZSkgPT4gZnMucmVtb3ZlKHBhdGguam9pbihzdGFnaW5nLCBmaWxlKSkpLFxuICAgICk7XG5cbiAgICAvLyBDb21waWxlIHdpdGggSlNJSVxuICAgIGNvbnN0IGpzaWlBcmdzID0gW1wiLS1zaWxlbmNlLXdhcm5pbmdzXCIsIFwicmVzZXJ2ZWQtd29yZFwiXTtcbiAgICBjb25zdCBqc2lpRW50cnlwb2ludCA9IG9wdHMuZW50cnlwb2ludDtcbiAgICBjb25zdCBiYXNlcGF0aCA9IHBhdGguam9pbihcbiAgICAgIHBhdGguZGlybmFtZShqc2lpRW50cnlwb2ludCksXG4gICAgICBwYXRoLmJhc2VuYW1lKGpzaWlFbnRyeXBvaW50LCBcIi50c1wiKSxcbiAgICApO1xuXG4gICAgY29uc3QgbW9kdWxlS2V5ID0gb3B0cy5tb2R1bGVLZXkucmVwbGFjZSgvXFwuL2csIFwiXCIpLnJlcGxhY2UoL1xcLy9nLCBcIlwiKTtcbiAgICBjb25zdCBtb2R1bGVEaXJzID0gb3B0cy5kZXBzO1xuICAgIGNvbnN0IHRhcmdldHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBjb25zdCBkZXBzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgZm9yIChjb25zdCBkaXIgb2YgbW9kdWxlRGlycykge1xuICAgICAgLy8gcmVhZCBtb2R1bGUgbWV0YWRhdGFcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgZnMucmVhZEpzb24ocGF0aC5qb2luKGRpciwgXCJwYWNrYWdlLmpzb25cIikpO1xuICAgICAgY29uc3QgbW9kdWxlTmFtZTogc3RyaW5nID0gbWV0YWRhdGEubmFtZTtcbiAgICAgIGNvbnN0IG1vZHVsZVZlcnNpb246IHN0cmluZyA9IG1ldGFkYXRhLnZlcnNpb247XG5cbiAgICAgIGNvbnN0IHRhcmdldGRpciA9IHBhdGguam9pbihcbiAgICAgICAgcGF0aC5qb2luKHN0YWdpbmcsIFwibm9kZV9tb2R1bGVzXCIpLFxuICAgICAgICBtb2R1bGVOYW1lLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IGZzLm1rZGlycCh0YXJnZXRkaXIpO1xuICAgICAgLy8gQ29weSBvbmx5IHRoZSBkZXAncyBwdWJsaXNoYWJsZSBmaWxlcyAod2hhdCBgbnBtIHBhY2tgIHdvdWxkIHNoaXApIGludG8gdGhlIGpzaWkgY29tcGlsZSBidW5kbGUuXG4gICAgICBmb3IgKGNvbnN0IHJlbFBhdGggb2YgYXdhaXQgcmVzb2x2ZVB1Ymxpc2hhYmxlRmlsZXMoZGlyKSkge1xuICAgICAgICBjb25zdCBzcmMgPSBwYXRoLmpvaW4oZGlyLCByZWxQYXRoKTtcbiAgICAgICAgY29uc3QgZHN0ID0gcGF0aC5qb2luKHRhcmdldGRpciwgcmVsUGF0aCk7XG4gICAgICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmRpcm5hbWUoZHN0KSk7XG4gICAgICAgIGF3YWl0IGZzLmNvcHkoc3JjLCBkc3QsIHsgZGVyZWZlcmVuY2U6IHRydWUgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCB0byBcImRlcHNcIiBhbmQgXCJwZWVyIGRlcHNcIlxuICAgICAgaWYgKCFtb2R1bGVOYW1lLnN0YXJ0c1dpdGgoXCJAdHlwZXMvXCIpKSB7XG4gICAgICAgIGRlcHNbbW9kdWxlTmFtZV0gPSBtb2R1bGVWZXJzaW9uO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBwa2cgPSB7XG4gICAgICBuYW1lOiBtb2R1bGVLZXksXG4gICAgICB2ZXJzaW9uOiBcIjAuMC4wXCIsXG4gICAgICBhdXRob3I6IFwiZ2VuZXJhdGVkQGdlbmVyYXRlZC5jb21cIixcbiAgICAgIG1haW46IGAke2Jhc2VwYXRofS5qc2AsXG4gICAgICB0eXBlczogYCR7YmFzZXBhdGh9LmQudHNgLFxuICAgICAgbGljZW5zZTogXCJVTkxJQ0VOU0VEXCIsXG4gICAgICByZXBvc2l0b3J5OiB7IHVybDogXCJodHRwOi8vZ2VuZXJhdGVkXCIsIHR5cGU6IFwiZ2l0XCIgfSxcbiAgICAgIGpzaWk6IHtcbiAgICAgICAgb3V0ZGlyOiBcImRpc3RcIixcbiAgICAgICAgdGFyZ2V0czogdGFyZ2V0cyxcbiAgICAgIH0sXG4gICAgICBkZXBlbmRlbmNpZXM6IGRlcHMsXG4gICAgICBwZWVyRGVwZW5kZW5jaWVzOiBkZXBzLFxuICAgIH07XG5cbiAgICBpZiAob3B0cy5leHBvcnRzKSB7XG4gICAgICAocGtnIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pLmV4cG9ydHMgPSBvcHRzLmV4cG9ydHM7XG4gICAgfVxuICAgIGlmIChvcHRzLnB5dGhvbikge1xuICAgICAgdGFyZ2V0cy5weXRob24gPSB7XG4gICAgICAgIGRpc3ROYW1lOiBcImdlbmVyYXRlZFwiLFxuICAgICAgICBtb2R1bGU6IG9wdHMucHl0aG9uLm1vZHVsZU5hbWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcHRzLmphdmEpIHtcbiAgICAgIHRhcmdldHMuamF2YSA9IHtcbiAgICAgICAgcGFja2FnZTogb3B0cy5qYXZhLnBhY2thZ2UsXG4gICAgICAgIG1hdmVuOiB7XG4gICAgICAgICAgZ3JvdXBJZDogXCJnZW5lcmF0ZWRcIixcbiAgICAgICAgICBhcnRpZmFjdElkOiBcImdlbmVyYXRlZFwiLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5jc2hhcnApIHtcbiAgICAgIHRhcmdldHMuZG90bmV0ID0ge1xuICAgICAgICBuYW1lc3BhY2U6IG9wdHMuY3NoYXJwLm5hbWVzcGFjZSxcbiAgICAgICAgcGFja2FnZUlkOiBvcHRzLmNzaGFycC5uYW1lc3BhY2UsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcHRzLmdvbGFuZykge1xuICAgICAgdGFyZ2V0cy5nbyA9IHtcbiAgICAgICAgbW9kdWxlTmFtZTogb3B0cy5nb2xhbmcubW9kdWxlTmFtZSxcbiAgICAgICAgcGFja2FnZU5hbWU6IG9wdHMuZ29sYW5nLnBhY2thZ2VOYW1lLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICBwYXRoLmpvaW4oc3RhZ2luZywgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeShwa2csIHVuZGVmaW5lZCwgMiksXG4gICAgKTtcblxuICAgIGNvbnN0IGVuZEpzaWlUaW1lciA9IGxvZ1RpbWVzcGFuKFwianNpaVwiKTtcbiAgICBhd2FpdCBleGVjKGpzaWlNb2R1bGUsIGpzaWlBcmdzLCB7XG4gICAgICBjd2Q6IHN0YWdpbmcsXG4gICAgfSk7XG4gICAgZW5kSnNpaVRpbWVyKCk7XG5cbiAgICAvLyBleHRyYWN0IC5qc2lpIGlmIHJlcXVlc3RlZFxuICAgIGlmIChvcHRzLmpzaWkpIHtcbiAgICAgIGF3YWl0IGZzLmNvcHkocGF0aC5qb2luKHN0YWdpbmcsIFwiLmpzaWlcIiksIG9wdHMuanNpaS5wYXRoKTtcbiAgICB9XG5cbiAgICAvLyBydW4gcGFjbWFrIHRvIGdlbmVyYXRlIGNvZGVcbiAgICBjb25zdCBlbmRKc2lpUGFjbWFrVGltZXIgPSBsb2dUaW1lc3BhbihcImpzaWktcGFjbWFrXCIpO1xuICAgIGF3YWl0IGV4ZWMocGFjbWFrTW9kdWxlLCBbXCItLWNvZGUtb25seVwiXSwgeyBjd2Q6IHN0YWdpbmcgfSk7XG4gICAgZW5kSnNpaVBhY21ha1RpbWVyKCk7XG5cbiAgICBpZiAob3B0cy5weXRob24pIHtcbiAgICAgIGNvbnN0IHJlbGRpciA9IG9wdHMucHl0aG9uLm1vZHVsZU5hbWUucmVwbGFjZSgvXFwuL2csIFwiL1wiKTsgLy8ganNpaSByZXBsYWNlcyBcIi5cIiB3aXRoIFwiL1wiXG4gICAgICBjb25zdCBzb3VyY2UgPSBwYXRoLnJlc29sdmUoXG4gICAgICAgIHBhdGguam9pbihzdGFnaW5nLCBcImRpc3QvcHl0aG9uL3NyY1wiLCByZWxkaXIpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHBhdGguam9pbihvcHRzLnB5dGhvbi5vdXRkaXIsIHJlbGRpcik7XG4gICAgICBhd2FpdCBmcy5tb3ZlKHNvdXJjZSwgdGFyZ2V0LCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5qYXZhKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBwYXRoLnJlc29sdmUocGF0aC5qb2luKHN0YWdpbmcsIFwiZGlzdC9qYXZhL3NyYy9cIikpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcGF0aC5qb2luKG9wdHMuamF2YS5vdXRkaXIsIFwic3JjL1wiKTtcbiAgICAgIC8vIFByZS1jcmVhdGUgc2hhcmVkIHBhY2thZ2UgZGlyZWN0b3JpZXMuXG4gICAgICBjb25zdCBwYWNrYWdlRGlyID0gb3B0cy5qYXZhLnBhY2thZ2UucmVwbGFjZSgvXFwuL2csIFwiL1wiKTtcbiAgICAgIGF3YWl0IGZzLm1rZGlycChwYXRoLmpvaW4odGFyZ2V0LCBcIm1haW4vamF2YVwiLCBwYWNrYWdlRGlyKSk7XG4gICAgICBhd2FpdCBmcy5ta2RpcnAocGF0aC5qb2luKHRhcmdldCwgXCJtYWluL3Jlc291cmNlc1wiLCBwYWNrYWdlRGlyKSk7XG4gICAgICBhd2FpdCBmcy5jb3B5KHNvdXJjZSwgdGFyZ2V0LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuY3NoYXJwKSB7XG4gICAgICBjb25zdCByZWxkaXIgPSBvcHRzLmNzaGFycC5uYW1lc3BhY2U7XG4gICAgICBjb25zdCBzb3VyY2UgPSBwYXRoLnJlc29sdmUocGF0aC5qb2luKHN0YWdpbmcsIFwiZGlzdC9kb3RuZXQvXCIsIHJlbGRpcikpO1xuICAgICAgY29uc3QgdGFyZ2V0ID0gcGF0aC5qb2luKG9wdHMuY3NoYXJwLm91dGRpciwgcmVsZGlyKTtcbiAgICAgIGF3YWl0IGZzLm1vdmUoc291cmNlLCB0YXJnZXQsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmdvbGFuZykge1xuICAgICAgY29uc3QgcmVsZGlyID0gb3B0cy5nb2xhbmcucGFja2FnZU5hbWU7XG4gICAgICBjb25zdCBzb3VyY2UgPSBwYXRoLnJlc29sdmUocGF0aC5qb2luKHN0YWdpbmcsIFwiZGlzdC9nby9cIiwgcmVsZGlyKSk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBwYXRoLmpvaW4ob3B0cy5nb2xhbmcub3V0ZGlyLCByZWxkaXIpO1xuICAgICAgYXdhaXQgZnMubW92ZShzb3VyY2UsIHRhcmdldCwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgICAvLyByZW1vdmUgZ28ubW9kIGFzIHRoaXMgd291bGQgbWFrZSBpdCBhIHN1Ym1vZHVsZVxuICAgICAgYXdhaXQgZnMucmVtb3ZlKHBhdGguam9pbih0YXJnZXQsIFwiZ28ubW9kXCIpKTtcbiAgICB9XG5cbiAgICBbXCJ2ZXJzaW9ucy5qc29uXCIsIFwiY29uc3RyYWludHMuanNvblwiXS5mb3JFYWNoKChmaWxlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBmcy5jb3B5U3luYyhcbiAgICAgICAgICBwYXRoLnJlc29sdmUoc3RhZ2luZywgZmlsZSksXG4gICAgICAgICAgcGF0aC5yZXNvbHZlKG91dHB1dFBhdGgsIGZpbGUpLFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYEZhaWxlZCB0byBjb3B5ICR7ZmlsZX06ICR7ZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbnR5cGUgQ29uc3RyYWludEZpbGUgPSB7XG4gIHByb3ZpZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgY2RrdGY6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0J3MgZGVjbGFyZWQgdGFyZ2V0VmVyc2lvbnMgKGNka3RmLmpzb24pLCBzdGFtcGVkIGZvclxuICAgKiBkaWFnbm9zdGljcy9jYWNoZSBkZWJ1Z2dpbmcuIFB1cmVseSBpbmZvcm1hdGlvbmFsIC0gbmV2ZXIgcmVhZCBiYWNrIHRvXG4gICAqIGRlY2lkZSB3aGV0aGVyIGNhY2hlZCBvdXRwdXQgaXMgc3RhbGUsIHNpbmNlIGl0IGRvZXNuJ3QgYWZmZWN0IHRoZVxuICAgKiBnZW5lcmF0ZWQgc3VyZmFjZSAodGhlIGZ1bGwgc3VyZmFjZSBpcyBhbHdheXMgZ2VuZXJhdGVkOyBuYXJyb3dpbmdcbiAgICogaGFwcGVucyBhdCBzeW50aCkuXG4gICAqL1xuICB0YXJnZXRWZXJzaW9ucz86IFRlcnJhZm9ybVRhcmdldFZlcnNpb25zO1xuICAvKipcbiAgICogSWRlbnRpdHkgb2YgdGhlIENMSSAodGVycmFmb3JtL29wZW50b2Z1KSB0aGF0IGZldGNoZWQgdGhlIHNjaGVtYXMgdXNlZFxuICAgKiBmb3IgdGhpcyBnZW5lcmF0aW9uLCBzdGFtcGVkIGZvciBkaWFnbm9zdGljcy9jYWNoZSBkZWJ1Z2dpbmcuXG4gICAqL1xuICBjbGk/OiB7IG5hbWU/OiBzdHJpbmc7IHZlcnNpb24/OiBzdHJpbmcgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0T3B0aW9ucyB7XG4gIHJlYWRvbmx5IHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZTtcbiAgcmVhZG9ubHkgY29kZU1ha2VyT3V0cHV0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGpzaWlQYXJhbGxlbGlzbT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFBhdGggdG8gY29weSB0aGUgb3V0cHV0IC5qc2lpIGZpbGUuXG4gICAqIEBkZWZhdWx0IC0ganNpaSBmaWxlIGlzIG5vdCBlbWl0dGVkXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRKc2lpPzogc3RyaW5nO1xuICAvKipcbiAgICogTGFuZ3VhZ2Utc3BlY2lmaWMgY29kZSBnZW5lcmF0aW9uIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBsYW5ndWFnZU9wdGlvbnM/OiBMYW5ndWFnZU9wdGlvbnM7XG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdCdzIGRlY2xhcmVkIHRhcmdldFZlcnNpb25zIChjZGt0Zi5qc29uKS4gVXNlZCB0byBkcml2ZSB0aGVcbiAgICogZmV0Y2gtdGltZSBlbWlzc2lvbi1nYXAgd2FybmluZyBpbiBAY2RrdG4vcHJvdmlkZXItc2NoZW1hIGFuZCB0byBzdGFtcFxuICAgKiB0aGUgZ2VuZXJhdGVkIGNvbnN0cmFpbnRzLmpzb24gZm9yIGRpYWdub3N0aWNzLiBEb2VzIE5PVCBmaWx0ZXIgY29kZWdlbjpcbiAgICogdGhlIGZ1bGwgc3VyZmFjZSBpcyBhbHdheXMgZ2VuZXJhdGVkLCBuYXJyb3dpbmcgaGFwcGVucyBhdCBzeW50aC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFZlcnNpb25zPzogVGVycmFmb3JtVGFyZ2V0VmVyc2lvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBDb25zdHJ1Y3RzTWFrZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvZGVNYWtlck91dGRpcjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvZGU6IENvZGVNYWtlcjtcbiAgcHJpdmF0ZSB2ZXJzaW9uczogeyBbcHJvdmlkZXJOYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEdldE9wdGlvbnMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY2hlbWFDYWNoZVBhdGg/OiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXBvcnRUZWxlbWV0cnk6IChwYXlsb2FkOiB7XG4gICAgICB0YXJnZXRMYW5ndWFnZTogc3RyaW5nO1xuICAgICAgdHJhY2tpbmdQYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIH0pID0+IFByb21pc2U8dm9pZD4gPSBhc3luYyAoKSA9PiB7fSxcbiAgKSB7XG4gICAgdGhpcy5jb2RlTWFrZXJPdXRkaXIgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLmNvZGVNYWtlck91dHB1dCk7XG4gICAgZnMubWtkaXJwU3luYyh0aGlzLmNvZGVNYWtlck91dGRpcik7XG4gICAgdGhpcy5jb2RlID0gbmV3IENvZGVNYWtlcigpO1xuICAgIHRoaXMudmVyc2lvbnMgPSB7fTtcbiAgfVxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlVHlwZXNjcmlwdFByb3ZpZGVyKFxuICAgIHRhcmdldDogQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG4gICAgc2NoZW1hOiBQcm92aWRlclNjaGVtYSxcbiAgKSB7XG4gICAgY29uc3QgZW5kVFNUaW1lciA9IGxvZ1RpbWVzcGFuKGBHZW5lcmF0ZSBUeXBlc2NyaXB0IGZvciAke3RhcmdldC5uYW1lfWApO1xuICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBUZXJyYWZvcm1Qcm92aWRlckdlbmVyYXRvcih0aGlzLmNvZGUsIHNjaGVtYSwge1xuICAgICAgaW1wb3J0RXh0ZW5zaW9uOiB0aGlzLm9wdGlvbnMubGFuZ3VhZ2VPcHRpb25zPy5pbXBvcnRFeHRlbnNpb24sXG4gICAgfSk7XG4gICAgZ2VuZXJhdG9yLmdlbmVyYXRlKHRhcmdldCk7XG5cbiAgICB0aGlzLnZlcnNpb25zID0geyAuLi50aGlzLnZlcnNpb25zLCAuLi5nZW5lcmF0b3IudmVyc2lvbnMgfTtcbiAgICBlbmRUU1RpbWVyKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZmlsdGVyQWxyZWFkeUdlbmVyYXRlZChcbiAgICBjb25zdHJhaW50czogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRbXSxcbiAgKSB7XG4gICAgbGV0IGNvbnN0cmFpbnRzRmlsZSA9IFwie31cIjtcbiAgICB0cnkge1xuICAgICAgY29uc3RyYWludHNGaWxlID0gYXdhaXQgZnMucmVhZEZpbGUoXG4gICAgICAgIHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgXCJjb25zdHJhaW50cy5qc29uXCIpLFxuICAgICAgICBcInV0ZjhcIixcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgY29uc3RyYWludHMuanNvbiBmaWxlIHdoaWxlIGZpbHRlcmluZzogJHtlfS4gVGhpcyBtZWFucyBubyBwcm92aWRlcnMgd2VyZSBnZW5lcmF0ZWQsIHNvIGFsbCBjb25zdHJhaW50cyBuZWVkIHRvIGJlIGdlbmVyYXRlZC5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCBjb25zdHJhaW50cy5qc29uIGZpbGU6ICR7Y29uc3RyYWludHNGaWxlfWApO1xuXG4gICAgbGV0IHByZXZpb3VzQ29uc3RyYWludHM6IFBhcnRpYWw8Q29uc3RyYWludEZpbGU+ID0ge307XG4gICAgdHJ5IHtcbiAgICAgIHByZXZpb3VzQ29uc3RyYWludHMgPSBKU09OLnBhcnNlKGNvbnN0cmFpbnRzRmlsZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBDb3VsZCBub3QgcGFyc2UgY29uc3RyYWludHMuanNvbiBmaWxlIHdoaWxlIGZpbHRlcmluZzogJHtlfS4gR2VuZXJhdGluZyBhbGwgY29uc3RyYWludHMuYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gY29uc3RyYWludHM7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEZvdW5kIHByZXZpb3VzIGNvbnN0cmFpbnRzOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBwcmV2aW91c0NvbnN0cmFpbnRzLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKX1gLFxuICAgICk7XG5cbiAgICBpZiAoXG4gICAgICAhcHJldmlvdXNDb25zdHJhaW50cy5wcm92aWRlcnMgfHxcbiAgICAgIHR5cGVvZiBwcmV2aW91c0NvbnN0cmFpbnRzLnByb3ZpZGVycyAhPT0gXCJvYmplY3RcIlxuICAgICkge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBwcm92aWRlcnMgaW4gY29uc3RyYWludHMuanNvbiBmaWxlLCBnZW5lcmF0aW5nIGFsbCBjb25zdHJhaW50cy4gVGhlIGNvbnN0cmFpbnRzIGZpbGUgd2FzICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJldmlvdXNDb25zdHJhaW50cyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDIsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gY29uc3RyYWludHM7XG4gICAgfVxuXG4gICAgaWYgKHByZXZpb3VzQ29uc3RyYWludHMuY2RrdGYgIT09IERJU1BMQVlfVkVSU0lPTikge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBUaGUgQ0RLVE4gdmVyc2lvbiBoYXMgY2hhbmdlZCwgZ2VuZXJhdGluZyBhbGwgY29uc3RyYWludHMuIFRoZSBwcmV2aW91cyB2ZXJzaW9uIHdhcyAke3ByZXZpb3VzQ29uc3RyYWludHMuY2RrdGZ9LCB0aGUgY3VycmVudCB2ZXJzaW9uIGlzICR7RElTUExBWV9WRVJTSU9OfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGNvbnN0cmFpbnRzO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnN0cmFpbnRzVG9HZW5lcmF0ZSA9IGNvbnN0cmFpbnRzLmZpbHRlcigoY29uc3RyYWludCkgPT4ge1xuICAgICAgY29uc3QgY29uc3RyYWludE1hdGNoZXMgPVxuICAgICAgICBwcmV2aW91c0NvbnN0cmFpbnRzLnByb3ZpZGVycyFbY29uc3RyYWludC5mcW5dID09PSBjb25zdHJhaW50LnZlcnNpb247XG4gICAgICBsZXQgcHJvdmlkZXJGb2xkZXJFeGlzdHMgPSBmYWxzZTtcblxuICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UpIHtcbiAgICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOlxuICAgICAgICAgIHByb3ZpZGVyRm9sZGVyRXhpc3RzID0gZnMuZXhpc3RzU3luYyhcbiAgICAgICAgICAgIHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgXCJwcm92aWRlcnNcIiwgY29uc3RyYWludC5uYW1lKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIExhbmd1YWdlLlBZVEhPTjpcbiAgICAgICAgY2FzZSBMYW5ndWFnZS5KQVZBOlxuICAgICAgICBjYXNlIExhbmd1YWdlLkNTSEFSUDpcbiAgICAgICAgICBwcm92aWRlckZvbGRlckV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICBwYXRoLmpvaW4odGhpcy5jb2RlTWFrZXJPdXRkaXIsIGNvbnN0cmFpbnQubmFtZSksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMYW5ndWFnZS5HTzpcbiAgICAgICAgICBwcm92aWRlckZvbGRlckV4aXN0cyA9IGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgIHRoaXMuY29kZU1ha2VyT3V0ZGlyLFxuICAgICAgICAgICAgICBjb25zdHJhaW50Lm5hbWVzcGFjZSB8fCBcImhhc2hpY29ycFwiLFxuICAgICAgICAgICAgICBjb25zdHJhaW50Lm5hbWUsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyRXhpc3RzID0gY29uc3RyYWludE1hdGNoZXMgJiYgcHJvdmlkZXJGb2xkZXJFeGlzdHM7XG4gICAgICByZXR1cm4gIXByb3ZpZGVyRXhpc3RzO1xuICAgIH0pO1xuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYENvbnN0cmFpbnRzIHRvIGdlbmVyYXRlOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBjb25zdHJhaW50c1RvR2VuZXJhdGUsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIHJldHVybiBjb25zdHJhaW50c1RvR2VuZXJhdGU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlVHlwZXNjcmlwdE1vZHVsZShcbiAgICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCxcbiAgICBzY2hlbWE6IE1vZHVsZVNjaGVtYSxcbiAgKSB7XG4gICAgY29uc3QgZW5kVFNUaW1lciA9IGxvZ1RpbWVzcGFuKGBHZW5lcmF0ZSBUeXBlc2NyaXB0IGZvciAke3RhcmdldC5uYW1lfWApO1xuICAgIHRhcmdldC5zcGVjID0gc2NoZW1hO1xuICAgIG5ldyBNb2R1bGVHZW5lcmF0b3IodGhpcy5jb2RlLCBbdGFyZ2V0XSk7XG4gICAgZW5kVFNUaW1lcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZVR5cGVzY3JpcHQoXG4gICAgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQsXG4gICAgc2NoZW1hczogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiByZWFkU2NoZW1hPj4sXG4gICkge1xuICAgIGlmICh0YXJnZXQuaXNNb2R1bGUpIHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYXMubW9kdWxlU2NoZW1hPy5bdGFyZ2V0Lm1vZHVsZUtleV07XG4gICAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgICAgYENvdWxkIG5vdCBnZW5lcmF0ZSBzY2hlbWEgZm9yIG1vZHVsZSAke3RhcmdldC5tb2R1bGVLZXl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5nZW5lcmF0ZVR5cGVzY3JpcHRNb2R1bGUoXG4gICAgICAgIHRhcmdldCBhcyBDb25zdHJ1Y3RzTWFrZXJNb2R1bGVUYXJnZXQsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICh0YXJnZXQuaXNQcm92aWRlcikge1xuICAgICAgaWYgKCFzY2hlbWFzLnByb3ZpZGVyU2NoZW1hKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChgQ291bGQgbm90IGdlbmVyYXRlIHNjaGVtYSBmb3IgcHJvdmlkZXJzYCk7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVUeXBlc2NyaXB0UHJvdmlkZXIoXG4gICAgICAgIHRhcmdldCBhcyBDb25zdHJ1Y3RzTWFrZXJQcm92aWRlclRhcmdldCxcbiAgICAgICAgc2NoZW1hcy5wcm92aWRlclNjaGVtYSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFVua25vd24gdGFyZ2V0IHR5cGUgdXNlZCB0byBnZW5lcmF0ZSBiaW5kaW5nczogJHt0YXJnZXQubmFtZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBlbWl0cyBhIHZlcnNpb25zLmpzb24gZmlsZSB3aXRoIGEgbWFwIG9mIHRoZSB1c2VkIHZlcnNpb24gZm9yIGVhY2ggcHJvdmlkZXIgZnFwblxuICBwcml2YXRlIHVwZGF0ZVZlcnNpb25zRmlsZShcbiAgICBhbGxvd2VkQ29uc3RyYWludHM6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10sXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBVcGRhdGluZyB2ZXJzaW9ucyBmaWxlIHdpdGggZ2VuZXJhdGVkIHZlcnNpb25zICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHRoaXMudmVyc2lvbnMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfSB3aXRoIGFsbG93ZWQgY29uc3RyYWludHMgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYWxsb3dlZENvbnN0cmFpbnRzLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKX1gLFxuICAgICk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBcInZlcnNpb25zLmpzb25cIjtcbiAgICBsZXQgcHJldmlvdXNWZXJzaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIHRyeSB7XG4gICAgICBwcmV2aW91c1ZlcnNpb25zID0gSlNPTi5wYXJzZShcbiAgICAgICAgZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgZmlsZVBhdGgpLCBcInV0ZjhcIiksXG4gICAgICApO1xuXG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBSZWFkIGV4aXN0aW5nIHZlcnNpb25zIGZpbGU6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgcHJldmlvdXNWZXJzaW9ucyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIDIsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWdub3JlXG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgcmVhZCB2ZXJzaW9ucyBmaWxlLCB0aGlzIGlzIGV4cGVjdGVkIGlmIHRoZXJlIGFyZSBubyBwcmUtZXhpc3RpbmcgbG9jYWwgcHJvdmlkZXJzOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVyc2lvbnMgPSBhbGxvd2VkQ29uc3RyYWludHMucmVkdWNlKChhY2MsIGNvbnN0cmFpbnQpID0+IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gT2JqZWN0LmVudHJpZXMocHJldmlvdXNWZXJzaW9ucykuZmluZCgoW25hbWVdKSA9PlxuICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIG1vcmUgcmVmaW5lZCwgYnV0IGl0J3MgZ29vZCBlbm91Z2ggZm9yIG5vd1xuICAgICAgICBuYW1lLmVuZHNXaXRoKGNvbnN0cmFpbnQuZnFuKSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChwcm92aWRlcikge1xuICAgICAgICBjb25zdCBbbmFtZSwgdmVyc2lvbl0gPSBwcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCBbbmFtZV06IHZlcnNpb24gfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgV3JpdGluZyB2ZXJzaW9ucyBmaWxlICgke2ZpbGVQYXRofSk6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHZlcnNpb25zLFxuICAgICAgICBudWxsLFxuICAgICAgICAyLFxuICAgICAgKX1gLFxuICAgICk7XG5cbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKEpTT04uc3RyaW5naWZ5KHsgLi4udmVyc2lvbnMsIC4uLnRoaXMudmVyc2lvbnMgfSwgbnVsbCwgMikpO1xuICAgIHRoaXMuY29kZS5jbG9zZUZpbGUoZmlsZVBhdGgpO1xuICAgIHJldHVybiBmaWxlUGF0aDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZW1vdmVGb2xkZXJzVGhhdFNob3VsZE5vdEV4aXN0KFxuICAgIGNvbnN0cmFpbnRzVGhhdFNob3VsZEV4aXN0OiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICApIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgUmVtb3ZpbmcgcHJvdmlkZXJzIGV4Y2VwdCBmb3IgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgY29uc3RyYWludHNUaGF0U2hvdWxkRXhpc3QsXG4gICAgICAgIG51bGwsXG4gICAgICAgIDIsXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIC8vIEFsbCBsYW5ndWFnZXMgYmVzaWRlcyBUUyBrZWVwIHRoZWlyIHByb3ZpZGVycyBpbiB0aGUgc2FtZSBmb2xkZXJzIGFzIG1vZHVsZXNcbiAgICAvLyB0aGlzIG1ha2VzIGl0IGltcG9zc2libGUgZm9yIHVzIHRvIGRpc3Rpbmd1aXNoIGEgbm8gbG9uZ2VyIHJlcXVpcmVkIHByb3ZpZGVyXG4gICAgLy8gZnJvbSBhIG1hbnVhbGx5IHdyaXR0ZW4gY29uc3RydWN0IG9yIGEgbW9kdWxlXG4gICAgaWYgKCF0aGlzLmlzSmF2YXNjcmlwdFRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBmaWxlc0luUHJvdmlkZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHByb3ZpZGVyc0ZvbGRlciA9IHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgXCJwcm92aWRlcnNcIik7XG4gICAgdHJ5IHtcbiAgICAgIGZpbGVzSW5Qcm92aWRlcnMgPSBhd2FpdCBmcy5yZWFkZGlyKHByb3ZpZGVyc0ZvbGRlcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgRXJyb3IgbGlzdGluZyBmaWxlcyBpbiBwcm92aWRlcnMgZm9sZGVyICcke3Byb3ZpZGVyc0ZvbGRlcn0nOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZm9sZGVycyA9IGZpbGVzSW5Qcm92aWRlcnMuZmlsdGVyKChmaWxlKSA9PlxuICAgICAgZnNcbiAgICAgICAgLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvZGVNYWtlck91dGRpciwgXCJwcm92aWRlcnNcIiwgZmlsZSkpXG4gICAgICAgIC5pc0RpcmVjdG9yeSgpLFxuICAgICk7XG5cbiAgICByZXR1cm4gZm9sZGVycy5mb3JFYWNoKChmb2xkZXIpID0+IHtcbiAgICAgIGNvbnN0IHNob3VsZEV4aXN0ID0gY29uc3RyYWludHNUaGF0U2hvdWxkRXhpc3Quc29tZShcbiAgICAgICAgKGNvbnN0cmFpbnQpID0+IGNvbnN0cmFpbnQubmFtZSA9PT0gZm9sZGVyLFxuICAgICAgKTtcblxuICAgICAgaWYgKCFzaG91bGRFeGlzdCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFJlbW92aW5nIGZvbGRlciAke2ZvbGRlcn0gZnJvbSBwcm92aWRlcnNgKTtcbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLnJlc29sdmUodGhpcy5jb2RlTWFrZXJPdXRkaXIsIFwicHJvdmlkZXJzXCIsIGZvbGRlcikpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gZW1pdHMgYSBjb25zdHJhaW50cy5qc29uIGZpbGUgd2l0aCBhIG1hcCBvZiB0aGUgdXNlZCBwcm92aWRlciBmcXBucyBhbmQgdmVyc2lvbiBjb25zdHJhaW50c1xuICAvLyB0aGlzIGlzIHVzZWQgZm9yIGNhY2hpbmcgcHVycG9zZXNcbiAgcHJpdmF0ZSBlbWl0Q29uc3RyYWludHNGaWxlKFxuICAgIGFsbG93ZWRDb25zdHJhaW50czogVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnRbXSxcbiAgICBwcm92aWRlclNjaGVtYT86IFByb3ZpZGVyU2NoZW1hLFxuICApIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IFwiY29uc3RyYWludHMuanNvblwiO1xuXG4gICAgY29uc3QgY29udGVudDogQ29uc3RyYWludEZpbGUgPSB7XG4gICAgICBjZGt0ZjogRElTUExBWV9WRVJTSU9OLFxuICAgICAgcHJvdmlkZXJzOiBhbGxvd2VkQ29uc3RyYWludHNcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZnFuLmxvY2FsZUNvbXBhcmUoYi5mcW4pKVxuICAgICAgICAucmVkdWNlKFxuICAgICAgICAgIChjYXJyeSwgaXRlbSkgPT4gKHtcbiAgICAgICAgICAgIC4uLmNhcnJ5LFxuICAgICAgICAgICAgW2l0ZW0uZnFuXTogaXRlbS52ZXJzaW9uLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHt9LFxuICAgICAgICApLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnRhcmdldFZlcnNpb25zKSB7XG4gICAgICBjb250ZW50LnRhcmdldFZlcnNpb25zID0gdGhpcy5vcHRpb25zLnRhcmdldFZlcnNpb25zO1xuICAgIH1cblxuICAgIGlmIChwcm92aWRlclNjaGVtYT8uY2xpX25hbWUgfHwgcHJvdmlkZXJTY2hlbWE/LmNsaV92ZXJzaW9uKSB7XG4gICAgICBjb250ZW50LmNsaSA9IHtcbiAgICAgICAgbmFtZTogcHJvdmlkZXJTY2hlbWEuY2xpX25hbWUsXG4gICAgICAgIHZlcnNpb246IHByb3ZpZGVyU2NoZW1hLmNsaV92ZXJzaW9uLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGUub3BlbkZpbGUoZmlsZVBhdGgpO1xuICAgIHRoaXMuY29kZS5saW5lKEpTT04uc3RyaW5naWZ5KGNvbnRlbnQsIG51bGwsIDIpKTtcbiAgICB0aGlzLmNvZGUuY2xvc2VGaWxlKGZpbGVQYXRoKTtcbiAgICByZXR1cm4gZmlsZVBhdGg7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdlbmVyYXRlSnNpaUxhbmd1YWdlKHRhcmdldDogQ29uc3RydWN0c01ha2VyVGFyZ2V0KSB7XG4gICAgLy8gTW9kdWxlIGRlcGVuZGVuY2llcyB3ZSBjb21waWxlIGFnYWluc3QuIFN0YXRpYyByZXF1aXJlLnJlc29sdmUgY2FsbHMgc29cbiAgICAvLyBrbmlwIC8gcG5wbSBzdHJpY3QgaXNvbGF0aW9uIGNhbiBzZWUgdGhlIGRlcHMuXG4gICAgY29uc3QgZGVwcyA9IFtcbiAgICAgIHBhdGguZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJAdHlwZXMvbm9kZS9wYWNrYWdlLmpzb25cIikpLFxuICAgICAgcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcImNvbnN0cnVjdHMvcGFja2FnZS5qc29uXCIpKSxcbiAgICAgIHBhdGguZGlybmFtZShyZXF1aXJlLnJlc29sdmUoXCJjZGt0bi9wYWNrYWdlLmpzb25cIikpLFxuICAgIF07XG4gICAgY29uc3Qgb3B0czogR2VuZXJhdGVKU0lJT3B0aW9ucyA9IHtcbiAgICAgIGVudHJ5cG9pbnQ6IHRhcmdldC5maWxlTmFtZSxcbiAgICAgIGRlcHMsXG4gICAgICBtb2R1bGVLZXk6IHRhcmdldC5tb2R1bGVLZXksXG4gICAgICBleHBvcnRzOiB0YXJnZXQuaXNQcm92aWRlciAvLyBNb2R1bGVzIGFyZSBzbWFsbCBlbm91Z2ggdGhhdCB3ZSBkb24ndCBuZWVkIHRoaXMgb3B0aW1pemF0aW9uXG4gICAgICAgID8ge1xuICAgICAgICAgICAgXCIuXCI6IHtcbiAgICAgICAgICAgICAgaW1wb3J0OiBgLi9wcm92aWRlcnMvJHt0YXJnZXQubmFtZX0vaW5kZXguanNgLFxuICAgICAgICAgICAgICByZXF1aXJlOiBgLi9wcm92aWRlcnMvJHt0YXJnZXQubmFtZX0vbGF6eS1pbmRleC5qc2AsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIC8vIHVzZWQgZm9yIHRlc3RpbmcuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdXRwdXRKc2lpKSB7XG4gICAgICBvcHRzLmpzaWkgPSB7IHBhdGg6IHRoaXMub3B0aW9ucy5vdXRwdXRKc2lpIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNQeXRob25UYXJnZXQpIHtcbiAgICAgIG9wdHMucHl0aG9uID0ge1xuICAgICAgICBvdXRkaXI6IHRoaXMuY29kZU1ha2VyT3V0ZGlyLFxuICAgICAgICBtb2R1bGVOYW1lOiB0YXJnZXQuc3JjTWFrTmFtZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNKYXZhVGFyZ2V0KSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMub3B0aW9ucy5jb2RlTWFrZXJPdXRwdXQuaW5jbHVkZXMoXCIvXCIpIHx8XG4gICAgICAgIHRoaXMub3B0aW9ucy5jb2RlTWFrZXJPdXRwdXQuaW5jbHVkZXMoXCJcXFxcXCIpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICAgIGBXaGVuIHVzaW5nIEphdmEgdGhlIFwiY29kZU1ha2VyT3V0cHV0XCIgb3B0aW9uIGluIHRoZSBjZGt0Zi5qc29uIG11c3QgYmUgdGhlIG9yZ2FuaXphdGlvbiBpZGVudGlmaWVyIGZvciB5b3VyIHByb2plY3QgKGUuZy4gY29tLm15LWNvbXBhbnkpLCBub3QgYSBwYXRoLiBUaGUgZ2VuZXJhdGVkIEphdmEgY29kZSB3aWxsIGJlIHBsYWNlZCBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiBJZiB5b3UgYXJlIG1pZ3JhdGluZyBmcm9tIGEgPCAwLjE5IHZlcnNpb24gb2YgY2RrdGYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBjb2RlbWFrZXJPdXRwdXQgdG8gXCJpbXBvcnRzXCIuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgb3B0cy5qYXZhID0ge1xuICAgICAgICBvdXRkaXI6IFwiLlwiLCAvLyBnZW5lcmF0ZWQgamF2YSBmaWxlcyBhcmVuJ3QgcGFja2FnZWQsIHNvIGp1c3QgaW5jbHVkZSBkaXJlY3RseSBpbiBhcHBcbiAgICAgICAgcGFja2FnZTogYCR7dGhpcy5vcHRpb25zLmNvZGVNYWtlck91dHB1dH0uJHt0YXJnZXQuc3JjTWFrTmFtZX1gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0NzaGFycFRhcmdldCkge1xuICAgICAgb3B0cy5jc2hhcnAgPSB7XG4gICAgICAgIG91dGRpcjogdGhpcy5jb2RlTWFrZXJPdXRkaXIsXG4gICAgICAgIG5hbWVzcGFjZTogdGFyZ2V0LnNyY01ha05hbWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzR29UYXJnZXQpIHtcbiAgICAgIC8vIFRPRE86IGNoZWNrIGlmIG5lZWRlZCBmb3IgbW9kdWxlcyBzb21laG93XG4gICAgICAvLyBjb25zdCB0YXJnZXRUeXBlID0gdGFyZ2V0LmlzUHJvdmlkZXIgPyAncHJvdmlkZXInIDogJ21vZHVsZSc7XG5cbiAgICAgIC8vIGpzaWktc3JjbWFjIHdpbGwgcHJvZHVjZSBhIGZvbGRlciBpbnNpZGUgdGhpcyBkaXIgbmFtZWQgYWZ0ZXIgXCJwYWNrYWdlTmFtZVwiXG4gICAgICAvLyBzbyB0aGlzIHJlc3VsdHMgaW4gZS5nLiAuZ2VuL2hhc2hpY29ycC9yYW5kb21cbiAgICAgIGNvbnN0IG91dGRpciA9IHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgdGFyZ2V0Lm5hbWVzcGFjZSA/PyBcIlwiKTtcblxuICAgICAgb3B0cy5nb2xhbmcgPSB7XG4gICAgICAgIG91dGRpcixcbiAgICAgICAgbW9kdWxlTmFtZTogYXdhaXQgZGV0ZXJtaW5lR29Nb2R1bGVOYW1lKG91dGRpciksIC8vIGUuZy4gYGdpdGh1Yi5jb20vb3JnL3VzZXJwcm9qZWN0Ly5nZW4vaGFzaGljb3JwYFxuICAgICAgICBwYWNrYWdlTmFtZTogdGFyZ2V0LnNyY01ha05hbWUsIC8vIHBhY2thZ2Ugd2lsbCBiZSBuYW1lZCBlLmcuIHJhbmRvbSBmb3IgaGFzaGljb3JwL3JhbmRvbVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX09QVElPTlMgJiZcbiAgICAgICFwcm9jZXNzLmVudi5OT0RFX09QVElPTlMuaW5jbHVkZXMoYC0tbWF4LW9sZC1zcGFjZS1zaXplYClcbiAgICApIHtcbiAgICAgIGxvZ2dlci53YXJuKGBmb3VuZCBOT0RFX09QVElPTlMgZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aG91dCBhIHNldHRpbmcgZm9yIC0tbWF4LW9sZC1zcGFjZS1zaXplLlxuVGhlIHByb3ZpZGVyIGdlbmVyYXRpb24gbmVlZHMgYSBzdWJzdGFudGlhbCBhbW91bnQgb2YgbWVtb3J5ICh+MTNHQikgZm9yIHNvbWUgcHJvdmlkZXJzIGFuZCBsYW5ndWFnZXMuXG5TbyBjZGt0bi1jbGkgc2V0cyBpdCB0byBOT0RFX09QVElPTlM9XCItLW1heC1vbGQtc3BhY2Utc2l6ZT0xNjM4NFwiIGJ5IGRlZmF1bHQuIEFzIHlvdXIgZW52aXJvbm1lbnQgYWxyZWFkeSBjb250YWluc1xuYSBOT0RFX09QVElPTlMgdmFyaWFibGUsIHdlIHdvbid0IG92ZXJyaWRlIGl0LiBIZW5jZSwgdGhlIHByb3ZpZGVyIGdlbmVyYXRpb24gbWlnaHQgZmFpbCB3aXRoIGFuIG91dCBvZiBtZW1vcnkgZXJyb3IuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluY3JlYXNlIG1lbW9yeSB0byBhbGxvdyBnZW5lcmF0aW5nIGxhcmdlIHByb3ZpZGVycyAoaS5lLiBhd3Mgb3IgYXp1cmVybSBmb3IgR28pXG4gICAgICAvLyBzcmNtYWsgaXMgZ29pbmcgdG8gc3Bhd24gYSBjaGlsZHByb2Nlc3MgKGZvciBqc2lpLXBhY21haykgd2hpY2ggaXMgZ29pbmcgdG8gYmUgYWZmZWN0ZWQgYnkgdGhpcyBlbnYgdmFyXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX09QVElPTlMgPSBcIi0tbWF4LW9sZC1zcGFjZS1zaXplPTE2Mzg0XCI7XG4gICAgfVxuXG4gICAgY29uc3QganNpaVRpbWVyID0gbG9nVGltZXNwYW4oXCJKU0lJXCIpO1xuICAgIGF3YWl0IGdlbmVyYXRlSnNpaUxhbmd1YWdlKHRoaXMuY29kZSwgb3B0cywgdGhpcy5jb2RlTWFrZXJPdXRkaXIsIFtcbiAgICAgIHRhcmdldC5pc01vZHVsZSA/IFwicHJvdmlkZXJzLyoqXCIgOiBcIm1vZHVsZXMvKipcIixcbiAgICBdKTtcbiAgICBqc2lpVGltZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTY2hlbWFzKHRhcmdldHM6IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50W10pIHtcbiAgICByZXR1cm4gYXdhaXQgcmVhZFNjaGVtYShcbiAgICAgIHRhcmdldHMsXG4gICAgICB0aGlzLnNjaGVtYUNhY2hlUGF0aCxcbiAgICAgIHRoaXMub3B0aW9ucy50YXJnZXRWZXJzaW9ucyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdlbmVyYXRlKFxuICAgIGFsbENvbnN0cmFpbnRzOiBUZXJyYWZvcm1EZXBlbmRlbmN5Q29uc3RyYWludFtdLFxuICAgIGNvbnN0cmFpbnRzVG9HZW5lcmF0ZSA9IGFsbENvbnN0cmFpbnRzLFxuICApIHtcbiAgICBjb25zdCB0YXJnZXRzID0gY29uc3RyYWludHNUb0dlbmVyYXRlLm1hcCgoY29uc3RyYWludCkgPT5cbiAgICAgIENvbnN0cnVjdHNNYWtlclRhcmdldC5mcm9tKGNvbnN0cmFpbnQsIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSksXG4gICAgKTtcblxuICAgIGNvbnN0IGVuZFNjaGVtYVRpbWVyID0gbG9nVGltZXNwYW4oXCJHYXRoZXJpbmcgc2NoZW1hXCIpO1xuICAgIGNvbnN0IHNjaGVtYXMgPSBhd2FpdCB0aGlzLmdldFNjaGVtYXMoY29uc3RyYWludHNUb0dlbmVyYXRlKTtcbiAgICBlbmRTY2hlbWFUaW1lcigpO1xuXG4gICAgY29uc3QgZW5kR2VuZXJhdGVUaW1lciA9IGxvZ1RpbWVzcGFuKFwiR2VuZXJhdGUgVFNcIik7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0YXJnZXRzLm1hcCgodGFyZ2V0KSA9PiB0aGlzLmdlbmVyYXRlVHlwZXNjcmlwdCh0YXJnZXQsIHNjaGVtYXMpKSxcbiAgICApO1xuICAgIGVuZEdlbmVyYXRlVGltZXIoKTtcblxuICAgIHRoaXMudXBkYXRlVmVyc2lvbnNGaWxlKGFsbENvbnN0cmFpbnRzKTtcbiAgICB0aGlzLmVtaXRDb25zdHJhaW50c0ZpbGUoYWxsQ29uc3RyYWludHMsIHNjaGVtYXMucHJvdmlkZXJTY2hlbWEpO1xuXG4gICAgaWYgKHRoaXMuaXNKYXZhc2NyaXB0VGFyZ2V0KSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmUoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNKYXZhc2NyaXB0VGFyZ2V0IHx8IHRoaXMub3B0aW9ucy5vdXRwdXRKc2lpKSB7XG4gICAgICBjb25zdCBudW1iZXJPZldvcmtlcnMgPSBNYXRoLm1heChcbiAgICAgICAgMSxcbiAgICAgICAgdGhpcy5vcHRpb25zLmpzaWlQYXJhbGxlbGlzbSA9PT0gLTFcbiAgICAgICAgICA/IHRhcmdldHMubGVuZ3RoXG4gICAgICAgICAgOiB0aGlzLm9wdGlvbnMuanNpaVBhcmFsbGVsaXNtIHx8IDEsXG4gICAgICApO1xuXG4gICAgICBjb25zdCB3b3JrID0gWy4uLnRhcmdldHNdO1xuICAgICAgY29uc3Qgd29ya2VycyA9IG5ldyBBcnJheShudW1iZXJPZldvcmtlcnMpLmZpbGwoYXN5bmMgKCkgPT4ge1xuICAgICAgICBsZXQgdGFyZ2V0OiBDb25zdHJ1Y3RzTWFrZXJUYXJnZXQgfCB1bmRlZmluZWQ7XG4gICAgICAgIHdoaWxlICgodGFyZ2V0ID0gd29yay5wb3AoKSkpIHtcbiAgICAgICAgICBjb25zdCBlbmRKc2lpVGFyZ2V0ID0gbG9nVGltZXNwYW4oXG4gICAgICAgICAgICBgR2VuZXJhdGluZyBKU0lJIGJpbmRpbmdzIGZvciAke3RhcmdldC5uYW1lfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlSnNpaUxhbmd1YWdlKHRhcmdldCk7XG4gICAgICAgICAgZW5kSnNpaVRhcmdldCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwod29ya2Vycy5tYXAoKGZuKSA9PiBmbigpKSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgYXdhaXQgdGhpcy5yZXBvcnRUZWxlbWV0cnkoe1xuICAgICAgICB0cmFja2luZ1BheWxvYWQ6IHRhcmdldC50cmFja2luZ1BheWxvYWQsXG4gICAgICAgIHRhcmdldExhbmd1YWdlOiB0YXJnZXQudGFyZ2V0TGFuZ3VhZ2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1B5dGhvblRhcmdldCkge1xuICAgICAgY29uc3QgZW5kUHl0aG9uVGltZXIgPSBsb2dUaW1lc3BhbihcIlB5dGhvbiBwb3N0LXByb2Nlc3NpbmdcIik7XG4gICAgICAvLyBSZW1vdmUgZnJvbSAuIGltcG9ydCAuLi4gc3RhdGVtZW50cyBmcm9tIHJvb3QgbGV2ZWwgX19pbml0X18ucHlcbiAgICAgIC8vIFRoaXMgcmVtb3ZlcyByb290LWxldmVsIGltcG9ydHMgb2YgbmFtZXNwYWNlcywgYnV0IHNhdmVzIDI1cyBzeW50aCB0aW1lIGZvciB0aGUgYXdzIHByb3ZpZGVyIGFsb25lXG4gICAgICBjb25zdCBhbGxJbml0UHlQYXRocyA9IGdsb2JcbiAgICAgICAgLnN5bmMoXCIqKi9fX2luaXRfXy5weVwiLCB7XG4gICAgICAgICAgY3dkOiB0aGlzLmNvZGVNYWtlck91dGRpcixcbiAgICAgICAgfSlcbiAgICAgICAgLy8gc29ydCBieSBkZXB0aCwgc28gd2Ugc3RhcnQgd2l0aCB0aGUgc2hhbGxvd2VzdCBmaWxlc1xuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5zcGxpdChcIi9cIikubGVuZ3RoIC0gYi5zcGxpdChcIi9cIikubGVuZ3RoKTtcblxuICAgICAgY29uc3QgdmlzaXRlZERpcmVjdG9yaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBpbml0UHlQYXRoIG9mIGFsbEluaXRQeVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGRpcmVjdG9yeVBhdGggPSBwYXRoLmRpcm5hbWUoaW5pdFB5UGF0aCk7XG4gICAgICAgIGlmICh2aXNpdGVkRGlyZWN0b3JpZXMuc29tZSgoZGlyKSA9PiBkaXJlY3RvcnlQYXRoLnN0YXJ0c1dpdGgoZGlyKSkpIHtcbiAgICAgICAgICAvLyB3ZSBhbHJlYWR5IHByb2Nlc3NlZCB0aGlzIGRpcmVjdG9yeVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZpc2l0ZWREaXJlY3Rvcmllcy5wdXNoKGRpcmVjdG9yeVBhdGgpO1xuXG4gICAgICAgIGNvbnN0IGFic29sdXRlSW5pdFB5UGF0aCA9IHBhdGguam9pbih0aGlzLmNvZGVNYWtlck91dGRpciwgaW5pdFB5UGF0aCk7XG4gICAgICAgIGNvbnN0IGluaXRQeSA9IGF3YWl0IGZzLnJlYWRGaWxlKGFic29sdXRlSW5pdFB5UGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgICBjb25zdCBpbml0UHlXaXRob3V0SW1wb3J0cyA9IGluaXRQeS5yZXBsYWNlKC9mcm9tIFxcLiBpbXBvcnQgLipcXG4vZywgXCJcIik7XG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShhYnNvbHV0ZUluaXRQeVBhdGgsIGluaXRQeVdpdGhvdXRJbXBvcnRzKTtcbiAgICAgIH1cblxuICAgICAgZW5kUHl0aG9uVGltZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmUob3V0ZGlyID0gdGhpcy5jb2RlTWFrZXJPdXRkaXIpIHtcbiAgICBhd2FpdCB0aGlzLmNvZGUuc2F2ZShvdXRkaXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNKYXZhc2NyaXB0VGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLlRZUEVTQ1JJUFQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBpc1B5dGhvblRhcmdldCgpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRhcmdldExhbmd1YWdlID09PSBMYW5ndWFnZS5QWVRIT047XG4gIH1cblxuICBwcml2YXRlIGdldCBpc0phdmFUYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuSkFWQTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzQ3NoYXJwVGFyZ2V0KCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLkNTSEFSUDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzR29UYXJnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuR087XG4gIH1cbn1cblxuLyoqXG4gKiBzZWFyY2hlcyBmb3IgdGhlIGNsb3Nlc3QgYGdvLm1vZGAgZmlsZSBhbmQgcmV0dXJucyB0aGUgbmVzdGVkIGdvIG1vZHVsZSBuYW1lIGZvciBgZGlyYFxuICogZS5nLiAoL2Rpci8uZ2VuLykgPT4gY2RrLnRmL3N0YWNrLy5nZW4gaWYgdGhlIHBhcmVudCBkaXIgb2YgLmdlbiBoYXMgYSBnby5tb2QgZm9yIFwibW9kdWxlIGNkay50Zi9zdGFja1wiXG4gKlxuICogQHBhcmFtIGRpciB0aGUgZGlyZWN0b3J5IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbSAoc2VhcmNoZXMgdXB3YXJkcylcbiAqIEByZXR1cm5zIHRoZSBwYWNrYWdlIG5hbWUgZm9yIGBkaXJgXG4gKiBAdGhyb3dzIGFuIEVycm9yIGlmIG5vIGdvLm1vZCB3YXMgZm91bmRcbiAqL1xuZXhwb3J0IGNvbnN0IGRldGVybWluZUdvTW9kdWxlTmFtZSA9IGFzeW5jIChkaXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGxldCBwcmV2aW91c0RpcjtcbiAgbGV0IGN1cnJlbnREaXIgPSBwYXRoLnJlc29sdmUoZGlyKTtcblxuICBkbyB7XG4gICAgbGV0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIoY3VycmVudERpcik7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAvLyBkaXJlY3RvcnkgbWlnaHQgbm90IGV4aXN0IHlldCwgYnV0IHdlIHN0aWxsIHdhbGsgdXB3YXJkcyBmcm9tIHRoZXJlLCBzbyBpZ25vcmUgJ0VOT0VOVCdcbiAgICAgIGlmIChlLmNvZGUgIT09IFwiRU5PRU5UXCIpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZpbGVzLmluY2x1ZGVzKFwiZ28ubW9kXCIpKSB7XG4gICAgICBjb25zdCBmaWxlID0gcGF0aC5yZXNvbHZlKGN1cnJlbnREaXIsIFwiZ28ubW9kXCIpO1xuICAgICAgY29uc3QgZ29tb2QgPSBhd2FpdCBmcy5yZWFkRmlsZShmaWxlKTtcbiAgICAgIGNvbnN0IG1hdGNoID0gL15tb2R1bGVcXHMqKFxcUyopXFxzKiQvbS5leGVjKGdvbW9kLnRvU3RyaW5nKCkpO1xuICAgICAgaWYgKG1hdGNoICYmIG1hdGNoWzFdKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkZGlyID0gcGF0aC5yZWxhdGl2ZShjdXJyZW50RGlyLCBkaXIpLnJlcGxhY2UoL1xcXFwvZywgXCIvXCIpOyAvLyByZXBsYWNlICdcXCcgd2l0aCAnLycgZm9yIHdpbmRvd3MgcGF0aHNcbiAgICAgICAgcmV0dXJuIGNoaWxkZGlyLmxlbmd0aCA+IDAgPyBgJHttYXRjaFsxXX0vJHtjaGlsZGRpcn1gIDogbWF0Y2hbMV07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSByb290IEdvIG1vZHVsZSBuYW1lLiBGb3VuZCAke2ZpbGV9IGJ1dCBmYWlsZWQgdG8gcmVnZXggbWF0Y2ggdGhlIG1vZHVsZSBuYW1lIGRpcmVjdGl2ZWAsXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBnbyB1cCBvbmUgZGlyZWN0b3J5LiBBcyBkaXJuYW1lKCcvJykgd2lsbCByZXR1cm4gJy8nIHdlIGNhbmNlbCB0aGUgbG9vcFxuICAgIC8vIGFzIHNvb24gYXMgdGhlIGRpciBkb2VzIG5vdCBjaGFuZ2UgYW55bW9yZS5cbiAgICBwcmV2aW91c0RpciA9IGN1cnJlbnREaXI7XG4gICAgY3VycmVudERpciA9IHBhdGguZGlybmFtZShjdXJyZW50RGlyKTtcbiAgfSB3aGlsZSAoY3VycmVudERpciAhPT0gcHJldmlvdXNEaXIpO1xuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgQ291bGQgbm90IGRldGVybWluZSB0aGUgcm9vdCBHbyBtb2R1bGUgbmFtZS4gTm8gZ28ubW9kIGZvdW5kIGluICR7ZGlyfSBhbmQgYW55IHBhcmVudCBkaXJlY3Rvcmllc2AsXG4gICk7XG59O1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cdktn/provider-generator",
3
- "version": "0.25.0-pre.2",
3
+ "version": "0.25.0-pre.3",
4
4
  "description": "Exposes API to generate Terraform CDK provider bindings",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -35,9 +35,9 @@
35
35
  "glob": "13.0.6",
36
36
  "jsii": "~5.9.0",
37
37
  "jsii-pacmak": "1.128.0",
38
- "@cdktn/commons": "0.25.0-pre.2",
39
- "@cdktn/provider-schema": "0.25.0-pre.2",
40
- "cdktn": "0.25.0-pre.2"
38
+ "@cdktn/provider-schema": "0.25.0-pre.3",
39
+ "cdktn": "0.25.0-pre.3",
40
+ "@cdktn/commons": "0.25.0-pre.3"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/fs-extra": "11.0.4",
@@ -50,8 +50,8 @@
50
50
  "watch": "tsc -w",
51
51
  "watch-preserve-output": "tsc -w --preserveWatchOutput",
52
52
  "test:update": "jest -u",
53
- "package": "./package.sh",
53
+ "package": "bash package.sh",
54
54
  "dist-clean": "rm -rf dist",
55
- "package:js": "./package.sh"
55
+ "package:js": "bash package.sh"
56
56
  }
57
57
  }
@@ -39,7 +39,9 @@ function directorySnapshot(root: string) {
39
39
  content = fs.readFileSync(filePath, "utf-8");
40
40
  }
41
41
 
42
- output[file] = content;
42
+ // glob yields native separators on Windows; key the snapshot by a
43
+ // "/"-separated path so it is identical on every platform.
44
+ output[file.split(path.sep).join(path.posix.sep)] = content;
43
45
  }
44
46
 
45
47
  return output;
@@ -36,7 +36,12 @@ export function expectModuleToMatchSnapshot(
36
36
  fixtureNames: string[],
37
37
  ) {
38
38
  test(testName, async () => {
39
- await withTempDir(`${testName.replace(/\s*/, "-")}.test`, async () => {
39
+ // Test names become a directory name, so collapse anything that is not
40
+ // filename-safe. The previous /\s*/ matched the empty string at index 0
41
+ // (no global flag either), which only prepended a "-" and left spaces --
42
+ // and characters like "*" in a test title are illegal in Windows paths.
43
+ const safeName = testName.replace(/[^a-zA-Z0-9._-]+/g, "-");
44
+ await withTempDir(`${safeName}.test`, async () => {
40
45
  const curdir = process.cwd();
41
46
  fs.mkdirSync("module");
42
47
 
@@ -38,9 +38,14 @@ async function resolvePublishableFiles(dir: string): Promise<string[]> {
38
38
  const stdout = await exec("npm", ["pack", "--dry-run", "--json"], {
39
39
  cwd: dir,
40
40
  });
41
- const packInfo = JSON.parse(stdout) as Array<{ files: { path: string }[] }>;
41
+ // npm <=11 reports an array of packed packages; npm >=12 reports an object
42
+ // keyed by package name. Accept either so the build is npm-version agnostic.
43
+ const parsed = JSON.parse(stdout) as
44
+ | Array<{ files: { path: string }[] }>
45
+ | Record<string, { files: { path: string }[] }>;
46
+ const packInfo = Array.isArray(parsed) ? parsed[0] : Object.values(parsed)[0];
42
47
  // Drop `..`-escape paths npm emits when following pnpm's node_modules symlinks.
43
- return packInfo[0].files.map((f) => f.path).filter((p) => !p.includes(".."));
48
+ return packInfo.files.map((f) => f.path).filter((p) => !p.includes(".."));
44
49
  }
45
50
 
46
51
  export interface GenerateJSIIOptions {