sonamu 0.9.6 → 0.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/decorators.js +2 -2
- package/dist/utils/formatter.d.ts.map +1 -1
- package/dist/utils/formatter.js +4 -5
- package/dist/utils/process-utils.d.ts +5 -5
- package/dist/utils/process-utils.js +6 -6
- package/package.json +2 -2
- package/src/api/decorators.ts +2 -2
- package/src/utils/formatter.ts +4 -6
- package/src/utils/process-utils.ts +5 -5
package/dist/api/decorators.js
CHANGED
|
@@ -175,7 +175,7 @@ function transactional(options = {}) {
|
|
|
175
175
|
return (target, propertyKey, descriptor) => {
|
|
176
176
|
const originalMethod = descriptor.value;
|
|
177
177
|
const modelName = target.constructor.name.match(/(.+)Class$/)?.[1];
|
|
178
|
-
assert(modelName, `modelName is required on @
|
|
178
|
+
assert(modelName, `modelName is required on @transactional decorator on ${target.constructor.name}.${propertyKey}`);
|
|
179
179
|
const methodName = propertyKey;
|
|
180
180
|
descriptor.value = async function(...args) {
|
|
181
181
|
this.logger.debug("transactional: {model}.{method}", {
|
|
@@ -308,4 +308,4 @@ var init_decorators = __esmMin((() => {
|
|
|
308
308
|
//#endregion
|
|
309
309
|
init_decorators();
|
|
310
310
|
export { api, init_decorators, registeredApis, stream, transactional, upload, websocket };
|
|
311
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsIm5hbWVzIjpbImFwaSIsInJlZ2lzdGVyZWRBcGlzOiB7XG4gIC8qKlxuICAgKiBtb2RlbE5hbWXsnYAg66qo6424IO2BtOuemOyKpCDsnbTrpoTsnoXri4jri6QuIChleC4gXCJVc2VyTW9kZWxcIilcbiAgICovXG4gIG1vZGVsTmFtZTogc3RyaW5nO1xuICBtZXRob2ROYW1lOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbiAgb3B0aW9uczogQXBpRGVjb3JhdG9yT3B0aW9ucztcbiAgc3RyZWFtT3B0aW9ucz86IFN0cmVhbURlY29yYXRvck9wdGlvbnM7XG4gIHdlYnNvY2tldE9wdGlvbnM/OiBSZXNvbHZlZFdlYlNvY2tldERlY29yYXRvck9wdGlvbnM7XG4gIHVwbG9hZE9wdGlvbnM/OiBVcGxvYWREZWNvcmF0b3JPcHRpb25zO1xufVtdIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9kZWNvcmF0b3JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlNdWx0aXBhcnRCYXNlT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9tdWx0aXBhcnRcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEhUVFBNZXRob2RzIH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IHR5cGUgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBDYWNoZUNvbnRyb2xDb25maWcgfSBmcm9tIFwiLi4vY2FjaGUtY29udHJvbC90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBDb21wcmVzc0NvbmZpZyB9IGZyb20gXCIuLi9jb21wcmVzcy90eXBlc1wiO1xuaW1wb3J0IHsgQmFzZU1vZGVsQ2xhc3MgfSBmcm9tIFwiLi4vZGF0YWJhc2UvYmFzZS1tb2RlbFwiO1xuaW1wb3J0IHsgREIgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IFB1cmlUcmFuc2FjdGlvbldyYXBwZXIgfSBmcm9tIFwiLi4vZGF0YWJhc2UvcHVyaS13cmFwcGVyXCI7XG5pbXBvcnQgeyB0eXBlIFRyYW5zYWN0aW9uYWxPcHRpb25zIH0gZnJvbSBcIi4uL2RhdGFiYXNlL3B1cmktd3JhcHBlclwiO1xuaW1wb3J0IHsgVXBzZXJ0QnVpbGRlciB9IGZyb20gXCIuLi9kYXRhYmFzZS91cHNlcnQtYnVpbGRlclwiO1xuaW1wb3J0IHsgY29udmVydERvbWFpblRvQ2F0ZWdvcnkgfSBmcm9tIFwiLi4vbG9nZ2VyL2NhdGVnb3J5XCI7XG5pbXBvcnQgeyB0eXBlIERyaXZlcktleSB9IGZyb20gXCIuLi9zdG9yYWdlL2RyaXZlcnNcIjtcbmltcG9ydCB7IHR5cGUgS2V5R2VuZXJhdG9yIH0gZnJvbSBcIi4uL3N0b3JhZ2UvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgQXBpUGFyYW0sIHR5cGUgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBCYXNlRnJhbWVDbGFzcyB9IGZyb20gXCIuL2Jhc2UtZnJhbWVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHdWFyZEtleXMge1xuICBxdWVyeTogdHJ1ZTtcbiAgYWRtaW46IHRydWU7XG4gIHVzZXI6IHRydWU7XG59XG5leHBvcnQgdHlwZSBHdWFyZEtleSA9IGtleW9mIEd1YXJkS2V5cztcbmV4cG9ydCB0eXBlIFNlcnZpY2VDbGllbnQgPVxuICB8IFwiYXhpb3NcIlxuICB8IFwiYXhpb3MtbXVsdGlwYXJ0XCJcbiAgfCBcInRhbnN0YWNrLXF1ZXJ5XCJcbiAgfCBcInRhbnN0YWNrLW11dGF0aW9uXCJcbiAgfCBcInRhbnN0YWNrLW11dGF0aW9uLW11bHRpcGFydFwiXG4gIHwgXCJ3aW5kb3ctZmV0Y2hcIjtcbmV4cG9ydCB0eXBlIEFwaURlY29yYXRvck9wdGlvbnMgPSB7XG4gIGh0dHBNZXRob2Q/OiBIVFRQTWV0aG9kcztcbiAgY29udGVudFR5cGU/OlxuICAgIHwgXCJ0ZXh0L3BsYWluXCJcbiAgICB8IFwidGV4dC9odG1sXCJcbiAgICB8IFwidGV4dC94bWxcIlxuICAgIHwgXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICB8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XG4gIGNsaWVudHM/OiBTZXJ2aWNlQ2xpZW50W107XG4gIHBhdGg/OiBzdHJpbmc7XG4gIHJlc291cmNlTmFtZT86IHN0cmluZztcbiAgZ3VhcmRzPzogR3VhcmRLZXlbXTtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKiBBUEkg7J2R64u17J2YIENhY2hlLUNvbnRyb2wg7Zek642UIOyEpOyglS4g7ISk7KCV7ZWY7KeAIOyViuycvOuptCBjYWNoZUNvbnRyb2xIYW5kbGVyIOuYkOuKlCDquLDrs7jqsJLsnbQg7KCB7Jqp65Cp64uI64ukLiAqL1xuICBjYWNoZUNvbnRyb2w/OiBDYWNoZUNvbnRyb2xDb25maWc7XG4gIC8qKiBBUEkg7J2R64u17J2YIOyVley2lSDshKTsoJUuIGZhbHNl66GcIOyEpOygle2VmOuptCDslZXstpXsnYQg67mE7Zmc7ISx7ZmU7ZWp64uI64ukLiAqL1xuICBjb21wcmVzcz86IENvbXByZXNzQ29uZmlnO1xufTtcbmV4cG9ydCB0eXBlIFN0cmVhbURlY29yYXRvck9wdGlvbnMgPSB7XG4gIHR5cGU6IFwic3NlXCI7IC8vIHwgJ3dzXG4gIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOydtOuypO2KuCDtgqTrs4TroZwg64SY6rKo7KO864qUIOqwkuydtOuvgOuhnCDslrTrlqQg7YOA7J6F7J2065OgIOyDgeq0gOyXhuydjFxuICBldmVudHM6IHouWm9kT2JqZWN0PGFueT47XG4gIHBhdGg/OiBzdHJpbmc7XG4gIHJlc291cmNlTmFtZT86IHN0cmluZztcbiAgZ3VhcmRzPzogR3VhcmRLZXlbXTtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgV2ViU29ja2V0RGVjb3JhdG9yT3B0aW9ucyA9IHtcbiAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g7J2067Kk7Yq4IO2CpOuzhOuhnCDrhJjqsqjso7zripQg6rCS7J2066+A66GcIOyWtOuWpCDtg4DsnoXsnbTrk6Ag7IOB6rSA7JeG7J2MXG4gIG91dEV2ZW50czogei5ab2RPYmplY3Q8YW55PjtcbiAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g7J2067Kk7Yq4IO2CpOuzhOuhnCDrhJjqsqjso7zripQg6rCS7J2066+A66GcIOyWtOuWpCDtg4DsnoXsnbTrk6Ag7IOB6rSA7JeG7J2MXG4gIGluRXZlbnRzOiB6LlpvZE9iamVjdDxhbnk+O1xuICBwYXRoPzogc3RyaW5nO1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIGd1YXJkcz86IEd1YXJkS2V5W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBoZWFydGJlYXQ/OiBudW1iZXI7XG4gIG1heFBheWxvYWQ/OiBudW1iZXI7XG4gIG5hbWVzcGFjZT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBSZXNvbHZlZFdlYlNvY2tldERlY29yYXRvck9wdGlvbnMgPSBXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zICYge1xuICAvLyBjb2RlZ2Vu7J20IO2DgOyehSDsnbTrpoTsnYQg7J6s7IKs7Jqp7ZWgIOyImCDsnojrj4TroZ0gc3luY2Vy6rCAIEFTVOyXkOyEnCDrs7TqsJXtlZjripQg66mU7YOA642w7J207YSwXG4gIG91dEV2ZW50c1R5cGVSZWY/OiBBcGlQYXJhbVR5cGUuUmVmO1xuICBpbkV2ZW50c1R5cGVSZWY/OiBBcGlQYXJhbVR5cGUuUmVmO1xufTtcblxudHlwZSBCdWZmZXJVcGxvYWRPcHRpb25zID0ge1xuICBjb25zdW1lPzogXCJidWZmZXJcIjtcbn07XG50eXBlIFN0cmVhbVVwbG9hZE9wdGlvbnMgPSB7XG4gIGNvbnN1bWU6IFwic3RyZWFtXCI7XG4gIGRlc3RpbmF0aW9uOiBEcml2ZXJLZXk7XG4gIGtleUdlbmVyYXRvcj86IEtleUdlbmVyYXRvcjtcbn07XG5leHBvcnQgdHlwZSBVcGxvYWREZWNvcmF0b3JPcHRpb25zID0ge1xuICBndWFyZHM/OiBHdWFyZEtleVtdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbGltaXRzPzogRmFzdGlmeU11bHRpcGFydEJhc2VPcHRpb25zW1wibGltaXRzXCJdO1xufSAmIChCdWZmZXJVcGxvYWRPcHRpb25zIHwgU3RyZWFtVXBsb2FkT3B0aW9ucyk7XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlcmVkQXBpczoge1xuICAvKipcbiAgICogbW9kZWxOYW1l7J2AIOuqqOuNuCDtgbTrnpjsiqQg7J2066aE7J6F64uI64ukLiAoZXguIFwiVXNlck1vZGVsXCIpXG4gICAqL1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gIHN0cmVhbU9wdGlvbnM/OiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zO1xuICB3ZWJzb2NrZXRPcHRpb25zPzogUmVzb2x2ZWRXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zO1xuICB1cGxvYWRPcHRpb25zPzogVXBsb2FkRGVjb3JhdG9yT3B0aW9ucztcbn1bXSA9IFtdO1xuZXhwb3J0IHR5cGUgRXh0ZW5kZWRBcGkgPSB7XG4gIG1vZGVsTmFtZTogc3RyaW5nO1xuICBtZXRob2ROYW1lOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbiAgb3B0aW9uczogQXBpRGVjb3JhdG9yT3B0aW9ucztcbiAgc3RyZWFtT3B0aW9ucz86IFN0cmVhbURlY29yYXRvck9wdGlvbnM7XG4gIHdlYnNvY2tldE9wdGlvbnM/OiBSZXNvbHZlZFdlYlNvY2tldERlY29yYXRvck9wdGlvbnM7XG4gIHVwbG9hZE9wdGlvbnM/OiBVcGxvYWREZWNvcmF0b3JPcHRpb25zO1xuICB0eXBlUGFyYW1ldGVyczogQXBpUGFyYW1UeXBlLlR5cGVQYXJhbVtdO1xuICBwYXJhbWV0ZXJzOiBBcGlQYXJhbVtdO1xuICByZXR1cm5UeXBlOiBBcGlQYXJhbVR5cGU7XG59O1xudHlwZSBEZWNvcmF0b3JUYXJnZXQgPSB7IGNvbnN0cnVjdG9yOiB7IG5hbWU6IHN0cmluZyB9IH07XG5cbmNvbnN0IERFQ09SQVRPUl9UWVBFUyA9IHtcbiAgQVBJOiBTeW1ib2woXCJhcGlcIiksXG4gIFNUUkVBTTogU3ltYm9sKFwic3RyZWFtXCIpLFxuICBXRUJTT0NLRVQ6IFN5bWJvbChcIndlYnNvY2tldFwiKSxcbiAgVVBMT0FEOiBTeW1ib2woXCJ1cGxvYWRcIiksXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVjb3JhdG9yVHlwZTogc3ltYm9sKSB7XG4gIGNvbnN0IG1ldGhvZCA9IHRhcmdldFtwcm9wZXJ0eUtleSBhcyBrZXlvZiB0eXBlb2YgdGFyZ2V0XSBhcyB7IF9fZGVjb3JhdG9yVHlwZT86IHN5bWJvbCB9O1xuICBpZiAobWV0aG9kPy5fX2RlY29yYXRvclR5cGUgJiYgbWV0aG9kPy5fX2RlY29yYXRvclR5cGUgIT09IGRlY29yYXRvclR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQCR7ZGVjb3JhdG9yVHlwZS5kZXNjcmlwdGlvbiA/PyBTdHJpbmcoZGVjb3JhdG9yVHlwZSl9IGRlY29yYXRvciBjYW4gb25seSBiZSB1c2VkIG9uY2Ugb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX0uIFlvdSBjYW4gdXNlIG9ubHkgb25lIG9mIEBhcGksIEBzdHJlYW0sIEB3ZWJzb2NrZXQsIG9yIEB1cGxvYWQgZGVjb3JhdG9yIG9uIHRoZSBzYW1lIG1ldGhvZC5gLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgbWV0aG9kLl9fZGVjb3JhdG9yVHlwZSA9IGRlY29yYXRvclR5cGU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwaShvcHRpb25zOiBBcGlEZWNvcmF0b3JPcHRpb25zID0ge30pIHtcbiAgb3B0aW9ucyA9IHtcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICBjbGllbnRzOiBbXCJheGlvc1wiXSxcbiAgICAuLi5vcHRpb25zLFxuICB9O1xuXG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBhcGkgZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuQVBJKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuXG4gICAgLy8g6riw7KG0IOuPmeydvO2VnCDrqZTshJzrk5zqsIAg7J6I64qU7KeAIO2ZleyduCDtm4Qg7J6I64qUIOqyveyasCBvdmVycmlkZVxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgLy8g6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3ruYgg7Iqk7Yq466eB7J20IOyVhOuLiOyXiOuKlOuNsCDri6Trpbgg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcImFwaVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIC8vIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXCJhcGlcIiwgbW9kZWxOYW1lLCBtZXRob2ROYW1lLCBleGlzdGluZ0FwaS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnMsIC8vIEBhcGkg642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MgfCBCYXNlRnJhbWVDbGFzcywgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VNb2RlbENsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLm1vZGVsTmFtZSwgXCJtb2RlbFwiKSkuZGVidWcoXG4gICAgICAgICAgXCJhcGk6IHtodHRwTWV0aG9kfSB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHR0cE1ldGhvZDogb3B0aW9ucy5odHRwTWV0aG9kLFxuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VGcmFtZUNsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLmZyYW1lTmFtZSwgXCJmcmFtZVwiKSkuZGVidWcoXG4gICAgICAgICAgXCJhcGk6IHtodHRwTWV0aG9kfSB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHR0cE1ldGhvZDogb3B0aW9ucy5odHRwTWV0aG9kLFxuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbShvcHRpb25zOiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zKSB7XG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBzdHJlYW0gZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuU1RSRUFNKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuICAgIC8vIHN0cmVhbSDsoITsmqkg7ZWE65OcKGV2ZW50cywgdHlwZSnripQgQXBpRGVjb3JhdG9yT3B0aW9uc+yXkCDsho3tlZjsp4Ag7JWK7Jy866+A66GcIOygnOyZuFxuICAgIGNvbnN0IHsgZXZlbnRzOiBfLCB0eXBlOiBfdHlwZSwgLi4uYXBpT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBvcHRpb25zV2l0aERlZmF1bHRzID0ge1xuICAgICAgLi4uYXBpT3B0aW9ucyxcbiAgICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIgYXMgSFRUUE1ldGhvZHMsXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgLy8g6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3ruYgg7Iqk7Yq466eB7J20IOyVhOuLiOyXiOuKlOuNsCDri6Trpbgg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcInN0cmVhbVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIC8vIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXG4gICAgICAgIFwic3RyZWFtXCIsXG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZXhpc3RpbmdBcGkub3B0aW9ucyxcbiAgICAgICAgb3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICk7XG4gICAgICBleGlzdGluZ0FwaS5vcHRpb25zID0ge1xuICAgICAgICAuLi5leGlzdGluZ0FwaS5vcHRpb25zLCAvLyDquLDsobTsnZgg7Ji17IWY7J2EIOyhtOykke2VmOuQmFxuICAgICAgICAuLi5vcHRpb25zV2l0aERlZmF1bHRzLCAvLyBAc3RyZWFtIOuNsOy9lOugiOydtO2EsOydmCDsmLXshZjsnYQg7LaU6rCA7ZWp64uI64ukLlxuICAgICAgfTtcblxuICAgICAgZXhpc3RpbmdBcGkuc3RyZWFtT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZ2lzdGVyZWRBcGlzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnNXaXRoRGVmYXVsdHMsXG4gICAgICAgIHN0cmVhbU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZU1vZGVsQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcInN0cmVhbToge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlRnJhbWVDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5mcmFtZU5hbWUsIFwiZnJhbWVcIikpLmRlYnVnKFxuICAgICAgICAgIFwic3RyZWFtOiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdlYnNvY2tldChvcHRpb25zOiBXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zKSB7XG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEB3ZWJzb2NrZXQgZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIGNoZWNrU2luZ2xlRGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXksIERFQ09SQVRPUl9UWVBFUy5XRUJTT0NLRVQpO1xuXG4gICAgY29uc3QgZGVmYXVsdFBhdGggPSBgLyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShcbiAgICAgIG1vZGVsTmFtZS5yZXBsYWNlKC9Nb2RlbCQvLCBcIlwiKS5yZXBsYWNlKC9GcmFtZSQvLCBcIlwiKSxcbiAgICAgIHRydWUsXG4gICAgKX0vJHtpbmZsZWN0aW9uLmNhbWVsaXplKHByb3BlcnR5S2V5LCB0cnVlKX1gO1xuICAgIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggPz8gZGVmYXVsdFBhdGg7XG4gICAgY29uc3QgeyBvdXRFdmVudHM6IF9vdXRFdmVudHMsIGluRXZlbnRzOiBfaW5FdmVudHMsIC4uLmFwaU9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgb3B0aW9uc1dpdGhEZWZhdWx0cyA9IHtcbiAgICAgIC4uLmFwaU9wdGlvbnMsXG4gICAgICBodHRwTWV0aG9kOiBcIkdFVFwiIGFzIEhUVFBNZXRob2RzLFxuICAgIH07XG5cbiAgICBjb25zdCBleGlzdGluZ0FwaSA9IHJlZ2lzdGVyZWRBcGlzLmZpbmQoXG4gICAgICAoYXBpKSA9PiBhcGkubW9kZWxOYW1lID09PSBtb2RlbE5hbWUgJiYgYXBpLm1ldGhvZE5hbWUgPT09IG1ldGhvZE5hbWUsXG4gICAgKTtcbiAgICBpZiAoZXhpc3RpbmdBcGkpIHtcbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdQYXRoKFwid2Vic29ja2V0XCIsIG1vZGVsTmFtZSwgbWV0aG9kTmFtZSwgZXhpc3RpbmdBcGkucGF0aCwgcGF0aCk7XG4gICAgICBleGlzdGluZ0FwaS5wYXRoID0gcGF0aDtcblxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXG4gICAgICAgIFwid2Vic29ja2V0XCIsXG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZXhpc3RpbmdBcGkub3B0aW9ucyxcbiAgICAgICAgb3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICk7XG4gICAgICBleGlzdGluZ0FwaS5vcHRpb25zID0ge1xuICAgICAgICAuLi5leGlzdGluZ0FwaS5vcHRpb25zLFxuICAgICAgICAuLi5vcHRpb25zV2l0aERlZmF1bHRzLFxuICAgICAgfTtcblxuICAgICAgZXhpc3RpbmdBcGkud2Vic29ja2V0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZ2lzdGVyZWRBcGlzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnNXaXRoRGVmYXVsdHMsXG4gICAgICAgIHdlYnNvY2tldE9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZU1vZGVsQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcIndlYnNvY2tldDoge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlRnJhbWVDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5mcmFtZU5hbWUsIFwiZnJhbWVcIikpLmRlYnVnKFxuICAgICAgICAgIFwid2Vic29ja2V0OiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zYWN0aW9uYWwob3B0aW9uczogVHJhbnNhY3Rpb25hbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IGlzb2xhdGlvbiwgcmVhZE9ubHksIGRiUHJlc2V0ID0gXCJ3XCIgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBzdHJlYW0gZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MsIC4uLmFyZ3M6IHVua25vd25bXSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJ0cmFuc2FjdGlvbmFsOiB7bW9kZWx9LnttZXRob2R9XCIsIHtcbiAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGV4aXN0aW5nQ29udGV4dCA9IERCLnRyYW5zYWN0aW9uU3RvcmFnZS5nZXRTdG9yZSgpO1xuXG4gICAgICAvLyBBc3luY0xvY2FsU3RvcmFnZSDsu6jthY3siqTtirgg7JeG6rGw64KYIO2VtOuLuSBwcmVzZXTsnZgg7Yq4656c7J6t7IWY7J20IOyXhuycvOuptCDsg4jroZwg7Iuc7J6RXG4gICAgICBjb25zdCBzdGFydFRyYW5zYWN0aW9uID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBwdXJpID0gdGhpcy5nZXRQdXJpKGRiUHJlc2V0KTtcblxuICAgICAgICByZXR1cm4gcHVyaS5rbmV4LnRyYW5zYWN0aW9uKFxuICAgICAgICAgIGFzeW5jICh0cngpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwibmV3IHRyYW5zYWN0aW9uIGNvbnRleHQ6IHtkYlByZXNldH1cIiwgeyBkYlByZXNldCB9KTtcbiAgICAgICAgICAgIGNvbnN0IHRyeFdyYXBwZXIgPSBuZXcgUHVyaVRyYW5zYWN0aW9uV3JhcHBlcih0cngsIG5ldyBVcHNlcnRCdWlsZGVyKCkpO1xuICAgICAgICAgICAgLy8gVHJhbnNhY3Rpb25Db250ZXh07JeQIO2KuOuenOyereyFmCDsoIDsnqVcbiAgICAgICAgICAgIERCLmdldFRyYW5zYWN0aW9uQ29udGV4dCgpLnNldFRyYW5zYWN0aW9uKGRiUHJlc2V0LCB0cnhXcmFwcGVyKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgLy8g7Yq4656c7J6t7IWYIOygnOqxsFxuICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcImRlbGV0ZSB0cmFuc2FjdGlvbiBjb250ZXh0OiB7ZGJQcmVzZXR9XCIsIHsgZGJQcmVzZXQgfSk7XG4gICAgICAgICAgICAgIERCLmdldFRyYW5zYWN0aW9uQ29udGV4dCgpLmRlbGV0ZVRyYW5zYWN0aW9uKGRiUHJlc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgaXNvbGF0aW9uTGV2ZWw6IGlzb2xhdGlvbiwgcmVhZE9ubHkgfSxcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIEFzeW5jTG9jYWxTdG9yYWdlIOy7qO2FjeyKpO2KuOqwgCDsl4bsnLzrqbQg7IOI66GcIOyDneyEsVxuICAgICAgaWYgKCFleGlzdGluZ0NvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIERCLnJ1bldpdGhUcmFuc2FjdGlvbihzdGFydFRyYW5zYWN0aW9uKTtcbiAgICAgIH1cblxuICAgICAgLy8g7J2066+4IEFzeW5jTG9jYWxTdG9yYWdlIOy7qO2FjeyKpO2KuCDslYjsl5Ag7J6I64qU7KeAIO2ZleyduCDtm4Qg7ZW064u5IHByZXNldOydmCDtirjrnpzsnq3shZjsnbQg7J2066+4IOyeiOycvOuptCDsnqzsgqzsmqlcbiAgICAgIGlmIChleGlzdGluZ0NvbnRleHQ/LmdldFRyYW5zYWN0aW9uKGRiUHJlc2V0KSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcInJldXNlIHRyYW5zYWN0aW9uIGNvbnRleHQ6IHtkYlByZXNldH1cIiwgeyBkYlByZXNldCB9KTtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgfVxuXG4gICAgICAvLyDsu6jthY3siqTtirjripQg7J6I7KeA66eMIOydtCBwcmVzZXTsnZgg7Yq4656c7J6t7IWY7J2AIOyXhuuKlCDqsr3smrAgKOqwmeydgCDsu6jthY3siqTtirgg64K07JeQ7IScIOyLpO2WiSlcbiAgICAgIHJldHVybiBzdGFydFRyYW5zYWN0aW9uKCk7XG4gICAgfTtcblxuICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICB9O1xufVxuXG4vKipcbiAqIO2MjOydvCDsl4XroZzrk5wgQVBJ66W8IOyDneyEse2VtOykjeuLiOuLpC4gKEBhcGkg642w7L2U66CI7J207YSwIOyXhuydtCDrj4Xrpr3soIHsnLzroZwg7IKs7JqpKVxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGxvYWQob3B0aW9uczogVXBsb2FkRGVjb3JhdG9yT3B0aW9ucyA9IHsgY29uc3VtZTogXCJidWZmZXJcIiB9KSB7XG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsTWV0aG9kID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICBjb25zdCBtb2RlbE5hbWUgPSB0YXJnZXQuY29uc3RydWN0b3IubmFtZS5tYXRjaCgvKC4rKUNsYXNzJC8pPy5bMV07XG4gICAgYXNzZXJ0KFxuICAgICAgbW9kZWxOYW1lLFxuICAgICAgYG1vZGVsTmFtZSBpcyByZXF1aXJlZCBvbiBAdXBsb2FkIGRlY29yYXRvciBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gcHJvcGVydHlLZXk7XG5cbiAgICAvLyDrqZTshJzrk5zsl5Ag6rG466awIOuNsOy9lOugiOydtO2EsCDspJHrs7Ug7LK07YGsXG4gICAgY2hlY2tTaW5nbGVEZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSwgREVDT1JBVE9SX1RZUEVTLlVQTE9BRCk7XG5cbiAgICBjb25zdCBkZWZhdWx0UGF0aCA9IGAvJHtpbmZsZWN0aW9uLmNhbWVsaXplKFxuICAgICAgbW9kZWxOYW1lLnJlcGxhY2UoL01vZGVsJC8sIFwiXCIpLnJlcGxhY2UoL0ZyYW1lJC8sIFwiXCIpLFxuICAgICAgdHJ1ZSxcbiAgICApfS8ke2luZmxlY3Rpb24uY2FtZWxpemUobWV0aG9kTmFtZSwgdHJ1ZSl9YDtcblxuICAgIC8vIHJlZ2lzdGVyZWRBcGlz7JeQ7IScIO2VtOuLuSBBUEkg7LC+7JWE7IScIHVwbG9hZE9wdGlvbnMg7LaU6rCAXG4gICAgY29uc3QgZXhpc3RpbmdBcGkgPSByZWdpc3RlcmVkQXBpcy5maW5kKFxuICAgICAgKGFwaSkgPT4gYXBpLm1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lICYmIGFwaS5tZXRob2ROYW1lID09PSBtZXRob2ROYW1lLFxuICAgICk7XG5cbiAgICBpZiAoZXhpc3RpbmdBcGkpIHtcbiAgICAgIC8vIOyerOuTseuhnSDsi5wg7JeF66Gc65OcIOyYteyFmOunjCDqsLHsi6BcbiAgICAgIGV4aXN0aW5nQXBpLnVwbG9hZE9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDsg4jroZwg65Ox66GdXG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoOiBkZWZhdWx0UGF0aCxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGh0dHBNZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGNsaWVudHM6IFtcImF4aW9zLW11bHRpcGFydFwiLCBcInRhbnN0YWNrLW11dGF0aW9uLW11bHRpcGFydFwiXSxcbiAgICAgICAgICBndWFyZHM6IG9wdGlvbnMuZ3VhcmRzLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgICB9LFxuICAgICAgICB1cGxvYWRPcHRpb25zOiBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZU1vZGVsQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcInVwbG9hZDoge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlRnJhbWVDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5mcmFtZU5hbWUsIFwiZnJhbWVcIikpLmRlYnVnKFxuICAgICAgICAgIFwidXBsb2FkOiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcblxuICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICB9O1xufVxuXG4vKipcbiAqIOq4sOyhtOydmCBwYXRo7JmAIOyDiOuhnOyatCBwYXRo6rCAIOuLpOultOuLpOuptCg96rCS7J20IOyeiOuNmCDsiqTtirjrp4HsnbQg64uk66W4IOqwkuydtCDsnojripQg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gKiBAcGFyYW0gZGVjb3JhdG9yTmFtZSDrjbDsvZTroIjsnbTthLAg7J2066aEXG4gKiBAcGFyYW0gbW9kZWxOYW1lIOuqqOuNuCDsnbTrpoRcbiAqIEBwYXJhbSBtZXRob2ROYW1lIOuplOyEnOuTnCDsnbTrpoRcbiAqIEBwYXJhbSBleGlzdGluZ1BhdGgg6riw7KG07J2YIHBhdGhcbiAqIEBwYXJhbSBuZXdQYXRoIOyDiOuhnOyatCBwYXRoXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vQ29uZmxpY3RpbmdQYXRoKFxuICBkZWNvcmF0b3JOYW1lOiBzdHJpbmcsXG4gIG1vZGVsTmFtZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIGV4aXN0aW5nUGF0aDogc3RyaW5nLFxuICBuZXdQYXRoOiBzdHJpbmcsXG4pIHtcbiAgaWYgKGV4aXN0aW5nUGF0aCAhPT0gXCJcIiAmJiBuZXdQYXRoICE9PSBcIlwiICYmIGV4aXN0aW5nUGF0aCAhPT0gbmV3UGF0aCkge1xuICAgIC8vIOydtOqyg+ydtCDrrLTsiqgg7IOB7Zmp7J2064OQ66m07JqULCBhcGkucGF0aOqwgCDrja7slrTslIzsm4zsp4DripQg7IOB7Zmp7J6F64uI64ukLlxuICAgIC8vIOqwgOuguSBAYXBpKHsgcGF0aDogXCIvYXBpL3YxL3VzZXJzXCIgfSkg642w7L2U66CI7J207YSw6rCAIOu2meyWtOyeiOuKlCDrqZTshJzrk5zsl5BcbiAgICAvLyBAc3RyZWFtKHsgcGF0aDogXCIvYXBpL3YxL3VzZXJzL3N0cmVhbVwiIH0pIOqwmeydgCDqsoPsnbQg67aZ7Ja0IOyeiOuKlCDsg4HtmansnoXri4jri6QuXG4gICAgLy8g7J2066CH6rKMIOuQmOuptCDrkZAg642w7L2U66CI7J207YSw6rCAIOqwmeydgCBhcGnsnZggcGF0aCDtlYTrk5zrpbwg6rG065Oc66as6rKMIOuQmOuvgOuhnCwg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQCR7ZGVjb3JhdG9yTmFtZX0gZGVjb3JhdG9yIG9uICR7bW9kZWxOYW1lfS4ke21ldGhvZE5hbWV9IGhhcyBjb25mbGljdGluZyBwYXRoOiAke25ld1BhdGh9LiBUaGUgZGVjb3JhdG9yIGlzIHRyeWluZyB0byBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcGF0aCgke2V4aXN0aW5nUGF0aH0pIHdpdGggdGhlIG5ldyBwYXRoKCR7bmV3UGF0aH0pLmAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICogQHBhcmFtIGRlY29yYXRvck5hbWUg642w7L2U66CI7J207YSwIOydtOumhFxuICogQHBhcmFtIG1vZGVsTmFtZSDrqqjrjbgg7J2066aEXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSDrqZTshJzrk5wg7J2066aEXG4gKiBAcGFyYW0gZXhpc3RpbmdPcHRpb25zIOq4sOyhtOydmCDsmLXshZhcbiAqIEBwYXJhbSBuZXdPcHRpb25zIOyDiOuhnOyatCDsmLXshZhcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXG4gIGRlY29yYXRvck5hbWU6IHN0cmluZyxcbiAgbW9kZWxOYW1lOiBzdHJpbmcsXG4gIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gPOyVhCDsib3qsozsib3qsowg7KKAIOqwkeyLnOuLpD5cbiAgZXhpc3RpbmdPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSA87J2065+0IOuVjCDslYTri4jrqbQgYW55IOyWuOygnCDslIHri4jquYw+XG4gIG5ld09wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4pIHtcbiAgT2JqZWN0LmtleXMobmV3T3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKGV4aXN0aW5nT3B0aW9uc1trZXldICYmICFpc0VxdWFsKGV4aXN0aW5nT3B0aW9uc1trZXldLCBuZXdPcHRpb25zW2tleV0pKSB7XG4gICAgICAvLyDsnbTqsoPsnbQg66y07IqoIOyDge2ZqeydtOuDkOuptOyalCwgYXBpLm9wdGlvbnPqsIAg642u7Ja07JSM7JuM7KeA64qUIOyDge2ZqeyeheuLiOuLpC5cbiAgICAgIC8vIOqwgOuguSBAYXBpKHsgcmVzb3VyY2VOYW1lOiBcIlVzZXJzXCIgfSkg642w7L2U66CI7J207YSw6rCAIOu2meyWtOyeiOuKlCDrqZTshJzrk5zsl5BcbiAgICAgIC8vIEBzdHJlYW0oeyByZXNvdXJjZU5hbWU6IFwiUG9zdHNcIiB9KSDqsJnsnYAg6rKD7J20IOu2meyWtCDsnojripQg7IOB7Zmp7J6F64uI64ukLlxuICAgICAgLy8g7J2066CH6rKMIOuQmOuptCDrkZAg642w7L2U66CI7J207YSw6rCAIOqwmeydgCBhcGnsnZggb3B0aW9ucyDsho0g6rCZ7J2AIO2VhOuTnOulvCDqsbTrk5zrpqzqsowg65CY66+A66GcLCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQCR7ZGVjb3JhdG9yTmFtZX0gZGVjb3JhdG9yIG9uICR7bW9kZWxOYW1lfS4ke21ldGhvZE5hbWV9IGhhcyBjb25mbGljdGluZyBvcHRpb25zOiAke2tleX0uIFRoZSBkZWNvcmF0b3IgaXMgdHJ5aW5nIHRvIG92ZXJyaWRlIHRoZSBleGlzdGluZyBvcHRpb24oJHtKU09OLnN0cmluZ2lmeShleGlzdGluZ09wdGlvbnNba2V5XSl9KSB3aXRoIHRoZSBuZXcgb3B0aW9uKCR7SlNPTi5zdHJpbmdpZnkobmV3T3B0aW9uc1trZXldKX0pLmAsXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFpSUEsU0FBUyxxQkFBcUIsUUFBeUIsYUFBcUIsZUFBdUI7Q0FDakcsTUFBTSxTQUFTLE9BQU87QUFDdEIsS0FBSSxRQUFRLG1CQUFtQixRQUFRLG9CQUFvQixlQUFlO0FBQ3hFLFFBQU0sSUFBSSxNQUNSLElBQUksY0FBYyxlQUFlLE9BQU8sY0FBYyxDQUFDLHNDQUFzQyxPQUFPLFlBQVksS0FBSyxHQUFHLFlBQVksK0ZBQ3JJO1FBQ0k7QUFDTCxTQUFPLGtCQUFrQjs7O0FBSTdCLFNBQWdCLElBQUksVUFBK0IsRUFBRSxFQUFFO0FBQ3JELFdBQVU7RUFDUixZQUFZO0VBQ1osYUFBYTtFQUNiLFNBQVMsQ0FBQyxRQUFRO0VBQ2xCLEdBQUc7RUFDSjtBQUVELFNBQVEsUUFBeUIsYUFBcUIsZUFBbUM7RUFDdkYsTUFBTSxZQUFZLE9BQU8sWUFBWSxLQUFLLE1BQU0sYUFBYSxHQUFHO0FBQ2hFLFNBQ0UsV0FDQSw4Q0FBOEMsT0FBTyxZQUFZLEtBQUssR0FBRyxjQUMxRTtFQUNELE1BQU0sYUFBYTtBQUduQix1QkFBcUIsUUFBUSxhQUFhLGdCQUFnQixJQUFJO0VBRTlELE1BQU0sY0FBYyxJQUFJLFdBQVcsU0FDakMsVUFBVSxRQUFRLFVBQVUsR0FBRyxDQUFDLFFBQVEsVUFBVSxHQUFHLEVBQ3JELEtBQ0QsQ0FBQyxHQUFHLFdBQVcsU0FBUyxhQUFhLEtBQUs7RUFDM0MsTUFBTSxPQUFPLFFBQVEsUUFBUTtFQUc3QixNQUFNLGNBQWMsZUFBZSxNQUNoQyxVQUFRQSxNQUFJLGNBQWMsYUFBYUEsTUFBSSxlQUFlLFdBQzVEO0FBQ0QsTUFBSSxhQUFhO0FBRWYsMkJBQXdCLE9BQU8sV0FBVyxZQUFZLFlBQVksTUFBTSxLQUFLO0FBQzdFLGVBQVksT0FBTztBQUduQiw4QkFBMkIsT0FBTyxXQUFXLFlBQVksWUFBWSxTQUFTLFFBQVE7QUFDdEYs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
|
|
311
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsIm5hbWVzIjpbImFwaSIsInJlZ2lzdGVyZWRBcGlzOiB7XG4gIC8qKlxuICAgKiBtb2RlbE5hbWXsnYAg66qo6424IO2BtOuemOyKpCDsnbTrpoTsnoXri4jri6QuIChleC4gXCJVc2VyTW9kZWxcIilcbiAgICovXG4gIG1vZGVsTmFtZTogc3RyaW5nO1xuICBtZXRob2ROYW1lOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbiAgb3B0aW9uczogQXBpRGVjb3JhdG9yT3B0aW9ucztcbiAgc3RyZWFtT3B0aW9ucz86IFN0cmVhbURlY29yYXRvck9wdGlvbnM7XG4gIHdlYnNvY2tldE9wdGlvbnM/OiBSZXNvbHZlZFdlYlNvY2tldERlY29yYXRvck9wdGlvbnM7XG4gIHVwbG9hZE9wdGlvbnM/OiBVcGxvYWREZWNvcmF0b3JPcHRpb25zO1xufVtdIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9kZWNvcmF0b3JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyB0eXBlIEZhc3RpZnlNdWx0aXBhcnRCYXNlT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS9tdWx0aXBhcnRcIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyB0eXBlIEhUVFBNZXRob2RzIH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IHR5cGUgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBDYWNoZUNvbnRyb2xDb25maWcgfSBmcm9tIFwiLi4vY2FjaGUtY29udHJvbC90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBDb21wcmVzc0NvbmZpZyB9IGZyb20gXCIuLi9jb21wcmVzcy90eXBlc1wiO1xuaW1wb3J0IHsgQmFzZU1vZGVsQ2xhc3MgfSBmcm9tIFwiLi4vZGF0YWJhc2UvYmFzZS1tb2RlbFwiO1xuaW1wb3J0IHsgREIgfSBmcm9tIFwiLi4vZGF0YWJhc2UvZGJcIjtcbmltcG9ydCB7IFB1cmlUcmFuc2FjdGlvbldyYXBwZXIgfSBmcm9tIFwiLi4vZGF0YWJhc2UvcHVyaS13cmFwcGVyXCI7XG5pbXBvcnQgeyB0eXBlIFRyYW5zYWN0aW9uYWxPcHRpb25zIH0gZnJvbSBcIi4uL2RhdGFiYXNlL3B1cmktd3JhcHBlclwiO1xuaW1wb3J0IHsgVXBzZXJ0QnVpbGRlciB9IGZyb20gXCIuLi9kYXRhYmFzZS91cHNlcnQtYnVpbGRlclwiO1xuaW1wb3J0IHsgY29udmVydERvbWFpblRvQ2F0ZWdvcnkgfSBmcm9tIFwiLi4vbG9nZ2VyL2NhdGVnb3J5XCI7XG5pbXBvcnQgeyB0eXBlIERyaXZlcktleSB9IGZyb20gXCIuLi9zdG9yYWdlL2RyaXZlcnNcIjtcbmltcG9ydCB7IHR5cGUgS2V5R2VuZXJhdG9yIH0gZnJvbSBcIi4uL3N0b3JhZ2UvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgQXBpUGFyYW0sIHR5cGUgQXBpUGFyYW1UeXBlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBCYXNlRnJhbWVDbGFzcyB9IGZyb20gXCIuL2Jhc2UtZnJhbWVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHdWFyZEtleXMge1xuICBxdWVyeTogdHJ1ZTtcbiAgYWRtaW46IHRydWU7XG4gIHVzZXI6IHRydWU7XG59XG5leHBvcnQgdHlwZSBHdWFyZEtleSA9IGtleW9mIEd1YXJkS2V5cztcbmV4cG9ydCB0eXBlIFNlcnZpY2VDbGllbnQgPVxuICB8IFwiYXhpb3NcIlxuICB8IFwiYXhpb3MtbXVsdGlwYXJ0XCJcbiAgfCBcInRhbnN0YWNrLXF1ZXJ5XCJcbiAgfCBcInRhbnN0YWNrLW11dGF0aW9uXCJcbiAgfCBcInRhbnN0YWNrLW11dGF0aW9uLW11bHRpcGFydFwiXG4gIHwgXCJ3aW5kb3ctZmV0Y2hcIjtcbmV4cG9ydCB0eXBlIEFwaURlY29yYXRvck9wdGlvbnMgPSB7XG4gIGh0dHBNZXRob2Q/OiBIVFRQTWV0aG9kcztcbiAgY29udGVudFR5cGU/OlxuICAgIHwgXCJ0ZXh0L3BsYWluXCJcbiAgICB8IFwidGV4dC9odG1sXCJcbiAgICB8IFwidGV4dC94bWxcIlxuICAgIHwgXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgICB8IFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCI7XG4gIGNsaWVudHM/OiBTZXJ2aWNlQ2xpZW50W107XG4gIHBhdGg/OiBzdHJpbmc7XG4gIHJlc291cmNlTmFtZT86IHN0cmluZztcbiAgZ3VhcmRzPzogR3VhcmRLZXlbXTtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKiBBUEkg7J2R64u17J2YIENhY2hlLUNvbnRyb2wg7Zek642UIOyEpOyglS4g7ISk7KCV7ZWY7KeAIOyViuycvOuptCBjYWNoZUNvbnRyb2xIYW5kbGVyIOuYkOuKlCDquLDrs7jqsJLsnbQg7KCB7Jqp65Cp64uI64ukLiAqL1xuICBjYWNoZUNvbnRyb2w/OiBDYWNoZUNvbnRyb2xDb25maWc7XG4gIC8qKiBBUEkg7J2R64u17J2YIOyVley2lSDshKTsoJUuIGZhbHNl66GcIOyEpOygle2VmOuptCDslZXstpXsnYQg67mE7Zmc7ISx7ZmU7ZWp64uI64ukLiAqL1xuICBjb21wcmVzcz86IENvbXByZXNzQ29uZmlnO1xufTtcbmV4cG9ydCB0eXBlIFN0cmVhbURlY29yYXRvck9wdGlvbnMgPSB7XG4gIHR5cGU6IFwic3NlXCI7XG4gIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIOydtOuypO2KuCDtgqTrs4TroZwg64SY6rKo7KO864qUIOqwkuydtOuvgOuhnCDslrTrlqQg7YOA7J6F7J2065OgIOyDgeq0gOyXhuydjFxuICBldmVudHM6IHouWm9kT2JqZWN0PGFueT47XG4gIHBhdGg/OiBzdHJpbmc7XG4gIHJlc291cmNlTmFtZT86IHN0cmluZztcbiAgZ3VhcmRzPzogR3VhcmRLZXlbXTtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59O1xuZXhwb3J0IHR5cGUgV2ViU29ja2V0RGVjb3JhdG9yT3B0aW9ucyA9IHtcbiAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g7J2067Kk7Yq4IO2CpOuzhOuhnCDrhJjqsqjso7zripQg6rCS7J2066+A66GcIOyWtOuWpCDtg4DsnoXsnbTrk6Ag7IOB6rSA7JeG7J2MXG4gIG91dEV2ZW50czogei5ab2RPYmplY3Q8YW55PjtcbiAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0g7J2067Kk7Yq4IO2CpOuzhOuhnCDrhJjqsqjso7zripQg6rCS7J2066+A66GcIOyWtOuWpCDtg4DsnoXsnbTrk6Ag7IOB6rSA7JeG7J2MXG4gIGluRXZlbnRzOiB6LlpvZE9iamVjdDxhbnk+O1xuICBwYXRoPzogc3RyaW5nO1xuICByZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG4gIGd1YXJkcz86IEd1YXJkS2V5W107XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBoZWFydGJlYXQ/OiBudW1iZXI7XG4gIG1heFBheWxvYWQ/OiBudW1iZXI7XG4gIG5hbWVzcGFjZT86IHN0cmluZztcbn07XG5leHBvcnQgdHlwZSBSZXNvbHZlZFdlYlNvY2tldERlY29yYXRvck9wdGlvbnMgPSBXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zICYge1xuICAvLyBjb2RlZ2Vu7J20IO2DgOyehSDsnbTrpoTsnYQg7J6s7IKs7Jqp7ZWgIOyImCDsnojrj4TroZ0gc3luY2Vy6rCAIEFTVOyXkOyEnCDrs7TqsJXtlZjripQg66mU7YOA642w7J207YSwXG4gIG91dEV2ZW50c1R5cGVSZWY/OiBBcGlQYXJhbVR5cGUuUmVmO1xuICBpbkV2ZW50c1R5cGVSZWY/OiBBcGlQYXJhbVR5cGUuUmVmO1xufTtcblxudHlwZSBCdWZmZXJVcGxvYWRPcHRpb25zID0ge1xuICBjb25zdW1lPzogXCJidWZmZXJcIjtcbn07XG50eXBlIFN0cmVhbVVwbG9hZE9wdGlvbnMgPSB7XG4gIGNvbnN1bWU6IFwic3RyZWFtXCI7XG4gIGRlc3RpbmF0aW9uOiBEcml2ZXJLZXk7XG4gIGtleUdlbmVyYXRvcj86IEtleUdlbmVyYXRvcjtcbn07XG5leHBvcnQgdHlwZSBVcGxvYWREZWNvcmF0b3JPcHRpb25zID0ge1xuICBndWFyZHM/OiBHdWFyZEtleVtdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbGltaXRzPzogRmFzdGlmeU11bHRpcGFydEJhc2VPcHRpb25zW1wibGltaXRzXCJdO1xufSAmIChCdWZmZXJVcGxvYWRPcHRpb25zIHwgU3RyZWFtVXBsb2FkT3B0aW9ucyk7XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlcmVkQXBpczoge1xuICAvKipcbiAgICogbW9kZWxOYW1l7J2AIOuqqOuNuCDtgbTrnpjsiqQg7J2066aE7J6F64uI64ukLiAoZXguIFwiVXNlck1vZGVsXCIpXG4gICAqL1xuICBtb2RlbE5hbWU6IHN0cmluZztcbiAgbWV0aG9kTmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFwaURlY29yYXRvck9wdGlvbnM7XG4gIHN0cmVhbU9wdGlvbnM/OiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zO1xuICB3ZWJzb2NrZXRPcHRpb25zPzogUmVzb2x2ZWRXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zO1xuICB1cGxvYWRPcHRpb25zPzogVXBsb2FkRGVjb3JhdG9yT3B0aW9ucztcbn1bXSA9IFtdO1xuZXhwb3J0IHR5cGUgRXh0ZW5kZWRBcGkgPSB7XG4gIG1vZGVsTmFtZTogc3RyaW5nO1xuICBtZXRob2ROYW1lOiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbiAgb3B0aW9uczogQXBpRGVjb3JhdG9yT3B0aW9ucztcbiAgc3RyZWFtT3B0aW9ucz86IFN0cmVhbURlY29yYXRvck9wdGlvbnM7XG4gIHdlYnNvY2tldE9wdGlvbnM/OiBSZXNvbHZlZFdlYlNvY2tldERlY29yYXRvck9wdGlvbnM7XG4gIHVwbG9hZE9wdGlvbnM/OiBVcGxvYWREZWNvcmF0b3JPcHRpb25zO1xuICB0eXBlUGFyYW1ldGVyczogQXBpUGFyYW1UeXBlLlR5cGVQYXJhbVtdO1xuICBwYXJhbWV0ZXJzOiBBcGlQYXJhbVtdO1xuICByZXR1cm5UeXBlOiBBcGlQYXJhbVR5cGU7XG59O1xudHlwZSBEZWNvcmF0b3JUYXJnZXQgPSB7IGNvbnN0cnVjdG9yOiB7IG5hbWU6IHN0cmluZyB9IH07XG5cbmNvbnN0IERFQ09SQVRPUl9UWVBFUyA9IHtcbiAgQVBJOiBTeW1ib2woXCJhcGlcIiksXG4gIFNUUkVBTTogU3ltYm9sKFwic3RyZWFtXCIpLFxuICBXRUJTT0NLRVQ6IFN5bWJvbChcIndlYnNvY2tldFwiKSxcbiAgVVBMT0FEOiBTeW1ib2woXCJ1cGxvYWRcIiksXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVjb3JhdG9yVHlwZTogc3ltYm9sKSB7XG4gIGNvbnN0IG1ldGhvZCA9IHRhcmdldFtwcm9wZXJ0eUtleSBhcyBrZXlvZiB0eXBlb2YgdGFyZ2V0XSBhcyB7IF9fZGVjb3JhdG9yVHlwZT86IHN5bWJvbCB9O1xuICBpZiAobWV0aG9kPy5fX2RlY29yYXRvclR5cGUgJiYgbWV0aG9kPy5fX2RlY29yYXRvclR5cGUgIT09IGRlY29yYXRvclR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQCR7ZGVjb3JhdG9yVHlwZS5kZXNjcmlwdGlvbiA/PyBTdHJpbmcoZGVjb3JhdG9yVHlwZSl9IGRlY29yYXRvciBjYW4gb25seSBiZSB1c2VkIG9uY2Ugb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX0uIFlvdSBjYW4gdXNlIG9ubHkgb25lIG9mIEBhcGksIEBzdHJlYW0sIEB3ZWJzb2NrZXQsIG9yIEB1cGxvYWQgZGVjb3JhdG9yIG9uIHRoZSBzYW1lIG1ldGhvZC5gLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgbWV0aG9kLl9fZGVjb3JhdG9yVHlwZSA9IGRlY29yYXRvclR5cGU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwaShvcHRpb25zOiBBcGlEZWNvcmF0b3JPcHRpb25zID0ge30pIHtcbiAgb3B0aW9ucyA9IHtcbiAgICBodHRwTWV0aG9kOiBcIkdFVFwiLFxuICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICBjbGllbnRzOiBbXCJheGlvc1wiXSxcbiAgICAuLi5vcHRpb25zLFxuICB9O1xuXG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBhcGkgZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuQVBJKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuXG4gICAgLy8g6riw7KG0IOuPmeydvO2VnCDrqZTshJzrk5zqsIAg7J6I64qU7KeAIO2ZleyduCDtm4Qg7J6I64qUIOqyveyasCBvdmVycmlkZVxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgLy8g6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3ruYgg7Iqk7Yq466eB7J20IOyVhOuLiOyXiOuKlOuNsCDri6Trpbgg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcImFwaVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIC8vIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXCJhcGlcIiwgbW9kZWxOYW1lLCBtZXRob2ROYW1lLCBleGlzdGluZ0FwaS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgIGV4aXN0aW5nQXBpLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmV4aXN0aW5nQXBpLm9wdGlvbnMsIC8vIOq4sOyhtOydmCDsmLXshZjsnYQg7KG07KSR7ZWY65CYXG4gICAgICAgIC4uLm9wdGlvbnMsIC8vIEBhcGkg642w7L2U66CI7J207YSw7J2YIOyYteyFmOydhCDstpTqsIDtlanri4jri6QuXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZWdpc3RlcmVkQXBpcy5wdXNoKHtcbiAgICAgICAgbW9kZWxOYW1lLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBwYXRoLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MgfCBCYXNlRnJhbWVDbGFzcywgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VNb2RlbENsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLm1vZGVsTmFtZSwgXCJtb2RlbFwiKSkuZGVidWcoXG4gICAgICAgICAgXCJhcGk6IHtodHRwTWV0aG9kfSB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHR0cE1ldGhvZDogb3B0aW9ucy5odHRwTWV0aG9kLFxuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VGcmFtZUNsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLmZyYW1lTmFtZSwgXCJmcmFtZVwiKSkuZGVidWcoXG4gICAgICAgICAgXCJhcGk6IHtodHRwTWV0aG9kfSB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaHR0cE1ldGhvZDogb3B0aW9ucy5odHRwTWV0aG9kLFxuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbShvcHRpb25zOiBTdHJlYW1EZWNvcmF0b3JPcHRpb25zKSB7XG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEBzdHJlYW0gZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIC8vIOuplOyEnOuTnOyXkCDqsbjrprAg642w7L2U66CI7J207YSwIOykkeuztSDssrTtgaxcbiAgICBjaGVja1NpbmdsZURlY29yYXRvcih0YXJnZXQsIHByb3BlcnR5S2V5LCBERUNPUkFUT1JfVFlQRVMuU1RSRUFNKTtcblxuICAgIGNvbnN0IGRlZmF1bHRQYXRoID0gYC8ke2luZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBtb2RlbE5hbWUucmVwbGFjZSgvTW9kZWwkLywgXCJcIikucmVwbGFjZSgvRnJhbWUkLywgXCJcIiksXG4gICAgICB0cnVlLFxuICAgICl9LyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wZXJ0eUtleSwgdHJ1ZSl9YDtcbiAgICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoID8/IGRlZmF1bHRQYXRoO1xuICAgIC8vIHN0cmVhbSDsoITsmqkg7ZWE65OcKGV2ZW50cywgdHlwZSnripQgQXBpRGVjb3JhdG9yT3B0aW9uc+yXkCDsho3tlZjsp4Ag7JWK7Jy866+A66GcIOygnOyZuFxuICAgIGNvbnN0IHsgZXZlbnRzOiBfLCB0eXBlOiBfdHlwZSwgLi4uYXBpT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBvcHRpb25zV2l0aERlZmF1bHRzID0ge1xuICAgICAgLi4uYXBpT3B0aW9ucyxcbiAgICAgIGh0dHBNZXRob2Q6IFwiR0VUXCIgYXMgSFRUUE1ldGhvZHMsXG4gICAgfTtcblxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuICAgIGlmIChleGlzdGluZ0FwaSkge1xuICAgICAgLy8g6riw7KG07J2YIHBhdGjsmYAg7IOI66Gc7Jq0IHBhdGjqsIAg64uk66W064uk66m0KD3ruYgg7Iqk7Yq466eB7J20IOyVhOuLiOyXiOuKlOuNsCDri6Trpbgg7Iqk7Yq466eB7Jy866GcIOuwlOuAjOqyjCDrkJzri6TrqbQpIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgICBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcInN0cmVhbVwiLCBtb2RlbE5hbWUsIG1ldGhvZE5hbWUsIGV4aXN0aW5nQXBpLnBhdGgsIHBhdGgpO1xuICAgICAgZXhpc3RpbmdBcGkucGF0aCA9IHBhdGg7XG5cbiAgICAgIC8vIOq4sOyhtOydmCDsmLXshZjqs7wg7IOI66Gc7Jq0IOyYteyFmOydtCDqsrnsuZjripQg67aA67aE7J20IOyeiOuLpOuptCDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXG4gICAgICAgIFwic3RyZWFtXCIsXG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZXhpc3RpbmdBcGkub3B0aW9ucyxcbiAgICAgICAgb3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICk7XG4gICAgICBleGlzdGluZ0FwaS5vcHRpb25zID0ge1xuICAgICAgICAuLi5leGlzdGluZ0FwaS5vcHRpb25zLCAvLyDquLDsobTsnZgg7Ji17IWY7J2EIOyhtOykke2VmOuQmFxuICAgICAgICAuLi5vcHRpb25zV2l0aERlZmF1bHRzLCAvLyBAc3RyZWFtIOuNsOy9lOugiOydtO2EsOydmCDsmLXshZjsnYQg7LaU6rCA7ZWp64uI64ukLlxuICAgICAgfTtcblxuICAgICAgZXhpc3RpbmdBcGkuc3RyZWFtT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZ2lzdGVyZWRBcGlzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnNXaXRoRGVmYXVsdHMsXG4gICAgICAgIHN0cmVhbU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZU1vZGVsQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcInN0cmVhbToge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlRnJhbWVDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5mcmFtZU5hbWUsIFwiZnJhbWVcIikpLmRlYnVnKFxuICAgICAgICAgIFwic3RyZWFtOiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdlYnNvY2tldChvcHRpb25zOiBXZWJTb2NrZXREZWNvcmF0b3JPcHRpb25zKSB7XG4gIHJldHVybiAodGFyZ2V0OiBEZWNvcmF0b3JUYXJnZXQsIHByb3BlcnR5S2V5OiBzdHJpbmcsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikgPT4ge1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEB3ZWJzb2NrZXQgZGVjb3JhdG9yIG9uICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9LiR7cHJvcGVydHlLZXl9YCxcbiAgICApO1xuICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBwcm9wZXJ0eUtleTtcblxuICAgIGNoZWNrU2luZ2xlRGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXksIERFQ09SQVRPUl9UWVBFUy5XRUJTT0NLRVQpO1xuXG4gICAgY29uc3QgZGVmYXVsdFBhdGggPSBgLyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShcbiAgICAgIG1vZGVsTmFtZS5yZXBsYWNlKC9Nb2RlbCQvLCBcIlwiKS5yZXBsYWNlKC9GcmFtZSQvLCBcIlwiKSxcbiAgICAgIHRydWUsXG4gICAgKX0vJHtpbmZsZWN0aW9uLmNhbWVsaXplKHByb3BlcnR5S2V5LCB0cnVlKX1gO1xuICAgIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggPz8gZGVmYXVsdFBhdGg7XG4gICAgY29uc3QgeyBvdXRFdmVudHM6IF9vdXRFdmVudHMsIGluRXZlbnRzOiBfaW5FdmVudHMsIC4uLmFwaU9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgb3B0aW9uc1dpdGhEZWZhdWx0cyA9IHtcbiAgICAgIC4uLmFwaU9wdGlvbnMsXG4gICAgICBodHRwTWV0aG9kOiBcIkdFVFwiIGFzIEhUVFBNZXRob2RzLFxuICAgIH07XG5cbiAgICBjb25zdCBleGlzdGluZ0FwaSA9IHJlZ2lzdGVyZWRBcGlzLmZpbmQoXG4gICAgICAoYXBpKSA9PiBhcGkubW9kZWxOYW1lID09PSBtb2RlbE5hbWUgJiYgYXBpLm1ldGhvZE5hbWUgPT09IG1ldGhvZE5hbWUsXG4gICAgKTtcbiAgICBpZiAoZXhpc3RpbmdBcGkpIHtcbiAgICAgIGFzc2VydE5vQ29uZmxpY3RpbmdQYXRoKFwid2Vic29ja2V0XCIsIG1vZGVsTmFtZSwgbWV0aG9kTmFtZSwgZXhpc3RpbmdBcGkucGF0aCwgcGF0aCk7XG4gICAgICBleGlzdGluZ0FwaS5wYXRoID0gcGF0aDtcblxuICAgICAgYXNzZXJ0Tm9Db25mbGljdGluZ09wdGlvbnMoXG4gICAgICAgIFwid2Vic29ja2V0XCIsXG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZXhpc3RpbmdBcGkub3B0aW9ucyxcbiAgICAgICAgb3B0aW9uc1dpdGhEZWZhdWx0cyxcbiAgICAgICk7XG4gICAgICBleGlzdGluZ0FwaS5vcHRpb25zID0ge1xuICAgICAgICAuLi5leGlzdGluZ0FwaS5vcHRpb25zLFxuICAgICAgICAuLi5vcHRpb25zV2l0aERlZmF1bHRzLFxuICAgICAgfTtcblxuICAgICAgZXhpc3RpbmdBcGkud2Vic29ja2V0T3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZ2lzdGVyZWRBcGlzLnB1c2goe1xuICAgICAgICBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnNXaXRoRGVmYXVsdHMsXG4gICAgICAgIHdlYnNvY2tldE9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgZGVzY3JpcHRvci52YWx1ZSA9IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBCYXNlTW9kZWxDbGFzcyB8IEJhc2VGcmFtZUNsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZU1vZGVsQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMubW9kZWxOYW1lLCBcIm1vZGVsXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcIndlYnNvY2tldDoge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBCYXNlRnJhbWVDbGFzcykge1xuICAgICAgICBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkodGhpcy5mcmFtZU5hbWUsIFwiZnJhbWVcIikpLmRlYnVnKFxuICAgICAgICAgIFwid2Vic29ja2V0OiB7bW9kZWx9LnttZXRob2R9XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kZWw6IG1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JpZ2luYWxNZXRob2QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zYWN0aW9uYWwob3B0aW9uczogVHJhbnNhY3Rpb25hbE9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IGlzb2xhdGlvbiwgcmVhZE9ubHksIGRiUHJlc2V0ID0gXCJ3XCIgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuICh0YXJnZXQ6IERlY29yYXRvclRhcmdldCwgcHJvcGVydHlLZXk6IHN0cmluZywgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxNZXRob2QgPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIGNvbnN0IG1vZGVsTmFtZSA9IHRhcmdldC5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC8oLispQ2xhc3MkLyk/LlsxXTtcbiAgICBhc3NlcnQoXG4gICAgICBtb2RlbE5hbWUsXG4gICAgICBgbW9kZWxOYW1lIGlzIHJlcXVpcmVkIG9uIEB0cmFuc2FjdGlvbmFsIGRlY29yYXRvciBvbiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfS4ke3Byb3BlcnR5S2V5fWAsXG4gICAgKTtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gcHJvcGVydHlLZXk7XG5cbiAgICBkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKHRoaXM6IEJhc2VNb2RlbENsYXNzLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwidHJhbnNhY3Rpb25hbDoge21vZGVsfS57bWV0aG9kfVwiLCB7XG4gICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgIG1ldGhvZDogbWV0aG9kTmFtZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBleGlzdGluZ0NvbnRleHQgPSBEQi50cmFuc2FjdGlvblN0b3JhZ2UuZ2V0U3RvcmUoKTtcblxuICAgICAgLy8gQXN5bmNMb2NhbFN0b3JhZ2Ug7Luo7YWN7Iqk7Yq4IOyXhuqxsOuCmCDtlbTri7kgcHJlc2V07J2YIO2KuOuenOyereyFmOydtCDsl4bsnLzrqbQg7IOI66GcIOyLnOyekVxuICAgICAgY29uc3Qgc3RhcnRUcmFuc2FjdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcHVyaSA9IHRoaXMuZ2V0UHVyaShkYlByZXNldCk7XG5cbiAgICAgICAgcmV0dXJuIHB1cmkua25leC50cmFuc2FjdGlvbihcbiAgICAgICAgICBhc3luYyAodHJ4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIm5ldyB0cmFuc2FjdGlvbiBjb250ZXh0OiB7ZGJQcmVzZXR9XCIsIHsgZGJQcmVzZXQgfSk7XG4gICAgICAgICAgICBjb25zdCB0cnhXcmFwcGVyID0gbmV3IFB1cmlUcmFuc2FjdGlvbldyYXBwZXIodHJ4LCBuZXcgVXBzZXJ0QnVpbGRlcigpKTtcbiAgICAgICAgICAgIC8vIFRyYW5zYWN0aW9uQ29udGV4dOyXkCDtirjrnpzsnq3shZgg7KCA7J6lXG4gICAgICAgICAgICBEQi5nZXRUcmFuc2FjdGlvbkNvbnRleHQoKS5zZXRUcmFuc2FjdGlvbihkYlByZXNldCwgdHJ4V3JhcHBlcik7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIC8vIO2KuOuenOyereyFmCDsoJzqsbBcbiAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJkZWxldGUgdHJhbnNhY3Rpb24gY29udGV4dDoge2RiUHJlc2V0fVwiLCB7IGRiUHJlc2V0IH0pO1xuICAgICAgICAgICAgICBEQi5nZXRUcmFuc2FjdGlvbkNvbnRleHQoKS5kZWxldGVUcmFuc2FjdGlvbihkYlByZXNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGlzb2xhdGlvbkxldmVsOiBpc29sYXRpb24sIHJlYWRPbmx5IH0sXG4gICAgICAgICk7XG4gICAgICB9O1xuXG4gICAgICAvLyBBc3luY0xvY2FsU3RvcmFnZSDsu6jthY3siqTtirjqsIAg7JeG7Jy866m0IOyDiOuhnCDsg53shLFcbiAgICAgIGlmICghZXhpc3RpbmdDb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBEQi5ydW5XaXRoVHJhbnNhY3Rpb24oc3RhcnRUcmFuc2FjdGlvbik7XG4gICAgICB9XG5cbiAgICAgIC8vIOydtOuvuCBBc3luY0xvY2FsU3RvcmFnZSDsu6jthY3siqTtirgg7JWI7JeQIOyeiOuKlOyngCDtmZXsnbgg7ZuEIO2VtOuLuSBwcmVzZXTsnZgg7Yq4656c7J6t7IWY7J20IOydtOuvuCDsnojsnLzrqbQg7J6s7IKs7JqpXG4gICAgICBpZiAoZXhpc3RpbmdDb250ZXh0Py5nZXRUcmFuc2FjdGlvbihkYlByZXNldCkpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJyZXVzZSB0cmFuc2FjdGlvbiBjb250ZXh0OiB7ZGJQcmVzZXR9XCIsIHsgZGJQcmVzZXQgfSk7XG4gICAgICAgIHJldHVybiBvcmlnaW5hbE1ldGhvZC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH1cblxuICAgICAgLy8g7Luo7YWN7Iqk7Yq464qUIOyeiOyngOunjCDsnbQgcHJlc2V07J2YIO2KuOuenOyereyFmOydgCDsl4bripQg6rK97JqwICjqsJnsnYAg7Luo7YWN7Iqk7Yq4IOuCtOyXkOyEnCDsi6TtlokpXG4gICAgICByZXR1cm4gc3RhcnRUcmFuc2FjdGlvbigpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiDtjIzsnbwg7JeF66Gc65OcIEFQSeulvCDsg53shLHtlbTspI3ri4jri6QuIChAYXBpIOuNsOy9lOugiOydtO2EsCDsl4bsnbQg64+F66a97KCB7Jy866GcIOyCrOyaqSlcbiAqIEBwYXJhbSBvcHRpb25zXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkKG9wdGlvbnM6IFVwbG9hZERlY29yYXRvck9wdGlvbnMgPSB7IGNvbnN1bWU6IFwiYnVmZmVyXCIgfSkge1xuICByZXR1cm4gKHRhcmdldDogRGVjb3JhdG9yVGFyZ2V0LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbE1ldGhvZCA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgY29uc3QgbW9kZWxOYW1lID0gdGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWUubWF0Y2goLyguKylDbGFzcyQvKT8uWzFdO1xuICAgIGFzc2VydChcbiAgICAgIG1vZGVsTmFtZSxcbiAgICAgIGBtb2RlbE5hbWUgaXMgcmVxdWlyZWQgb24gQHVwbG9hZCBkZWNvcmF0b3Igb24gJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleX1gLFxuICAgICk7XG4gICAgY29uc3QgbWV0aG9kTmFtZSA9IHByb3BlcnR5S2V5O1xuXG4gICAgLy8g66mU7ISc65Oc7JeQIOqxuOumsCDrjbDsvZTroIjsnbTthLAg7KSR67O1IOyytO2BrFxuICAgIGNoZWNrU2luZ2xlRGVjb3JhdG9yKHRhcmdldCwgcHJvcGVydHlLZXksIERFQ09SQVRPUl9UWVBFUy5VUExPQUQpO1xuXG4gICAgY29uc3QgZGVmYXVsdFBhdGggPSBgLyR7aW5mbGVjdGlvbi5jYW1lbGl6ZShcbiAgICAgIG1vZGVsTmFtZS5yZXBsYWNlKC9Nb2RlbCQvLCBcIlwiKS5yZXBsYWNlKC9GcmFtZSQvLCBcIlwiKSxcbiAgICAgIHRydWUsXG4gICAgKX0vJHtpbmZsZWN0aW9uLmNhbWVsaXplKG1ldGhvZE5hbWUsIHRydWUpfWA7XG5cbiAgICAvLyByZWdpc3RlcmVkQXBpc+yXkOyEnCDtlbTri7kgQVBJIOywvuyVhOyEnCB1cGxvYWRPcHRpb25zIOy2lOqwgFxuICAgIGNvbnN0IGV4aXN0aW5nQXBpID0gcmVnaXN0ZXJlZEFwaXMuZmluZChcbiAgICAgIChhcGkpID0+IGFwaS5tb2RlbE5hbWUgPT09IG1vZGVsTmFtZSAmJiBhcGkubWV0aG9kTmFtZSA9PT0gbWV0aG9kTmFtZSxcbiAgICApO1xuXG4gICAgaWYgKGV4aXN0aW5nQXBpKSB7XG4gICAgICAvLyDsnqzrk7HroZ0g7IucIOyXheuhnOuTnCDsmLXshZjrp4wg6rCx7IugXG4gICAgICBleGlzdGluZ0FwaS51cGxvYWRPcHRpb25zID0gb3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g7IOI66GcIOuTseuhnVxuICAgICAgcmVnaXN0ZXJlZEFwaXMucHVzaCh7XG4gICAgICAgIG1vZGVsTmFtZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgcGF0aDogZGVmYXVsdFBhdGgsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBodHRwTWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICBjbGllbnRzOiBbXCJheGlvcy1tdWx0aXBhcnRcIiwgXCJ0YW5zdGFjay1tdXRhdGlvbi1tdWx0aXBhcnRcIl0sXG4gICAgICAgICAgZ3VhcmRzOiBvcHRpb25zLmd1YXJkcyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbixcbiAgICAgICAgfSxcbiAgICAgICAgdXBsb2FkT3B0aW9uczogb3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAodGhpczogQmFzZU1vZGVsQ2xhc3MgfCBCYXNlRnJhbWVDbGFzcywgLi4uYXJnczogdW5rbm93bltdKSB7XG4gICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIEJhc2VNb2RlbENsYXNzKSB7XG4gICAgICAgIGdldExvZ2dlcihjb252ZXJ0RG9tYWluVG9DYXRlZ29yeSh0aGlzLm1vZGVsTmFtZSwgXCJtb2RlbFwiKSkuZGVidWcoXG4gICAgICAgICAgXCJ1cGxvYWQ6IHttb2RlbH0ue21ldGhvZH1cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtb2RlbDogbW9kZWxOYW1lLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2ROYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQmFzZUZyYW1lQ2xhc3MpIHtcbiAgICAgICAgZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KHRoaXMuZnJhbWVOYW1lLCBcImZyYW1lXCIpKS5kZWJ1ZyhcbiAgICAgICAgICBcInVwbG9hZDoge21vZGVsfS57bWV0aG9kfVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1vZGVsOiBtb2RlbE5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6IG1ldGhvZE5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9yaWdpbmFsTWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiDquLDsobTsnZggcGF0aOyZgCDsg4jroZzsmrQgcGF0aOqwgCDri6TrpbTri6TrqbQoPeqwkuydtCDsnojrjZgg7Iqk7Yq466eB7J20IOuLpOuluCDqsJLsnbQg7J6I64qUIOyKpO2KuOungeycvOuhnCDrsJTrgIzqsowg65Cc64uk66m0KSDsl5Drn6zrpbwg7YSw65yo66Ck7KSN64uI64ukLlxuICogQHBhcmFtIGRlY29yYXRvck5hbWUg642w7L2U66CI7J207YSwIOydtOumhFxuICogQHBhcmFtIG1vZGVsTmFtZSDrqqjrjbgg7J2066aEXG4gKiBAcGFyYW0gbWV0aG9kTmFtZSDrqZTshJzrk5wg7J2066aEXG4gKiBAcGFyYW0gZXhpc3RpbmdQYXRoIOq4sOyhtOydmCBwYXRoXG4gKiBAcGFyYW0gbmV3UGF0aCDsg4jroZzsmrQgcGF0aFxuICovXG5mdW5jdGlvbiBhc3NlcnROb0NvbmZsaWN0aW5nUGF0aChcbiAgZGVjb3JhdG9yTmFtZTogc3RyaW5nLFxuICBtb2RlbE5hbWU6IHN0cmluZyxcbiAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICBleGlzdGluZ1BhdGg6IHN0cmluZyxcbiAgbmV3UGF0aDogc3RyaW5nLFxuKSB7XG4gIGlmIChleGlzdGluZ1BhdGggIT09IFwiXCIgJiYgbmV3UGF0aCAhPT0gXCJcIiAmJiBleGlzdGluZ1BhdGggIT09IG5ld1BhdGgpIHtcbiAgICAvLyDsnbTqsoPsnbQg66y07IqoIOyDge2ZqeydtOuDkOuptOyalCwgYXBpLnBhdGjqsIAg642u7Ja07JSM7JuM7KeA64qUIOyDge2ZqeyeheuLiOuLpC5cbiAgICAvLyDqsIDroLkgQGFwaSh7IHBhdGg6IFwiL2FwaS92MS91c2Vyc1wiIH0pIOuNsOy9lOugiOydtO2EsOqwgCDrtpnslrTsnojripQg66mU7ISc65Oc7JeQXG4gICAgLy8gQHN0cmVhbSh7IHBhdGg6IFwiL2FwaS92MS91c2Vycy9zdHJlYW1cIiB9KSDqsJnsnYAg6rKD7J20IOu2meyWtCDsnojripQg7IOB7Zmp7J6F64uI64ukLlxuICAgIC8vIOydtOugh+qyjCDrkJjrqbQg65GQIOuNsOy9lOugiOydtO2EsOqwgCDqsJnsnYAgYXBp7J2YIHBhdGgg7ZWE65Oc66W8IOqxtOuTnOumrOqyjCDrkJjrr4DroZwsIOyXkOufrOulvCDthLDrnKjroKTspI3ri4jri6QuXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEAke2RlY29yYXRvck5hbWV9IGRlY29yYXRvciBvbiAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfSBoYXMgY29uZmxpY3RpbmcgcGF0aDogJHtuZXdQYXRofS4gVGhlIGRlY29yYXRvciBpcyB0cnlpbmcgdG8gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHBhdGgoJHtleGlzdGluZ1BhdGh9KSB3aXRoIHRoZSBuZXcgcGF0aCgke25ld1BhdGh9KS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiDquLDsobTsnZgg7Ji17IWY6rO8IOyDiOuhnOyatCDsmLXshZjsnbQg6rK57LmY64qUIOu2gOu2hOydtCDsnojri6TrqbQg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAqIEBwYXJhbSBkZWNvcmF0b3JOYW1lIOuNsOy9lOugiOydtO2EsCDsnbTrpoRcbiAqIEBwYXJhbSBtb2RlbE5hbWUg66qo6424IOydtOumhFxuICogQHBhcmFtIG1ldGhvZE5hbWUg66mU7ISc65OcIOydtOumhFxuICogQHBhcmFtIGV4aXN0aW5nT3B0aW9ucyDquLDsobTsnZgg7Ji17IWYXG4gKiBAcGFyYW0gbmV3T3B0aW9ucyDsg4jroZzsmrQg7Ji17IWYXG4gKi9cbmZ1bmN0aW9uIGFzc2VydE5vQ29uZmxpY3RpbmdPcHRpb25zKFxuICBkZWNvcmF0b3JOYW1lOiBzdHJpbmcsXG4gIG1vZGVsTmFtZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIDzslYQg7Im96rKM7Im96rKMIOyigCDqsJHsi5zri6Q+XG4gIGV4aXN0aW5nT3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PixcbiAgLy8gb3hsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgLS0gPOydtOuftCDrlYwg7JWE64uI66m0IGFueSDslrjsoJwg7JSB64uI6rmMPlxuICBuZXdPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuKSB7XG4gIE9iamVjdC5rZXlzKG5ld09wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChleGlzdGluZ09wdGlvbnNba2V5XSAmJiAhaXNFcXVhbChleGlzdGluZ09wdGlvbnNba2V5XSwgbmV3T3B0aW9uc1trZXldKSkge1xuICAgICAgLy8g7J206rKD7J20IOustOyKqCDsg4HtmansnbTrg5DrqbTsmpQsIGFwaS5vcHRpb25z6rCAIOuNruyWtOyUjOybjOyngOuKlCDsg4HtmansnoXri4jri6QuXG4gICAgICAvLyDqsIDroLkgQGFwaSh7IHJlc291cmNlTmFtZTogXCJVc2Vyc1wiIH0pIOuNsOy9lOugiOydtO2EsOqwgCDrtpnslrTsnojripQg66mU7ISc65Oc7JeQXG4gICAgICAvLyBAc3RyZWFtKHsgcmVzb3VyY2VOYW1lOiBcIlBvc3RzXCIgfSkg6rCZ7J2AIOqyg+ydtCDrtpnslrQg7J6I64qUIOyDge2ZqeyeheuLiOuLpC5cbiAgICAgIC8vIOydtOugh+qyjCDrkJjrqbQg65GQIOuNsOy9lOugiOydtO2EsOqwgCDqsJnsnYAgYXBp7J2YIG9wdGlvbnMg7IaNIOqwmeydgCDtlYTrk5zrpbwg6rG065Oc66as6rKMIOuQmOuvgOuhnCwg7JeQ65+s66W8IO2EsOucqOugpOykjeuLiOuLpC5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEAke2RlY29yYXRvck5hbWV9IGRlY29yYXRvciBvbiAke21vZGVsTmFtZX0uJHttZXRob2ROYW1lfSBoYXMgY29uZmxpY3Rpbmcgb3B0aW9uczogJHtrZXl9LiBUaGUgZGVjb3JhdG9yIGlzIHRyeWluZyB0byBvdmVycmlkZSB0aGUgZXhpc3Rpbmcgb3B0aW9uKCR7SlNPTi5zdHJpbmdpZnkoZXhpc3RpbmdPcHRpb25zW2tleV0pfSkgd2l0aCB0aGUgbmV3IG9wdGlvbigke0pTT04uc3RyaW5naWZ5KG5ld09wdGlvbnNba2V5XSl9KS5gLFxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBaUlBLFNBQVMscUJBQXFCLFFBQXlCLGFBQXFCLGVBQXVCO0NBQ2pHLE1BQU0sU0FBUyxPQUFPO0FBQ3RCLEtBQUksUUFBUSxtQkFBbUIsUUFBUSxvQkFBb0IsZUFBZTtBQUN4RSxRQUFNLElBQUksTUFDUixJQUFJLGNBQWMsZUFBZSxPQUFPLGNBQWMsQ0FBQyxzQ0FBc0MsT0FBTyxZQUFZLEtBQUssR0FBRyxZQUFZLCtGQUNySTtRQUNJO0FBQ0wsU0FBTyxrQkFBa0I7OztBQUk3QixTQUFnQixJQUFJLFVBQStCLEVBQUUsRUFBRTtBQUNyRCxXQUFVO0VBQ1IsWUFBWTtFQUNaLGFBQWE7RUFDYixTQUFTLENBQUMsUUFBUTtFQUNsQixHQUFHO0VBQ0o7QUFFRCxTQUFRLFFBQXlCLGFBQXFCLGVBQW1DO0VBQ3ZGLE1BQU0sWUFBWSxPQUFPLFlBQVksS0FBSyxNQUFNLGFBQWEsR0FBRztBQUNoRSxTQUNFLFdBQ0EsOENBQThDLE9BQU8sWUFBWSxLQUFLLEdBQUcsY0FDMUU7RUFDRCxNQUFNLGFBQWE7QUFHbkIsdUJBQXFCLFFBQVEsYUFBYSxnQkFBZ0IsSUFBSTtFQUU5RCxNQUFNLGNBQWMsSUFBSSxXQUFXLFNBQ2pDLFVBQVUsUUFBUSxVQUFVLEdBQUcsQ0FBQyxRQUFRLFVBQVUsR0FBRyxFQUNyRCxLQUNELENBQUMsR0FBRyxXQUFXLFNBQVMsYUFBYSxLQUFLO0VBQzNDLE1BQU0sT0FBTyxRQUFRLFFBQVE7RUFHN0IsTUFBTSxjQUFjLGVBQWUsTUFDaEMsVUFBUUEsTUFBSSxjQUFjLGFBQWFBLE1BQUksZUFBZSxXQUM1RDtBQUNELE1BQUksYUFBYTtBQUVmLDJCQUF3QixPQUFPLFdBQVcsWUFBWSxZQUFZLE1BQU0sS0FBSztBQUM3RSxlQUFZLE9BQU87QUFHbkIsOEJBQTJCLE9BQU8sV0FBVyxZQUFZLFlBQVksU0FBUyxRQUFRO0FBQ3RGLGVBQVksVUFBVTtJQUNwQixHQUFHLFlBQVk7SUFDZixHQUFHO0lBQ0o7U0FDSTtBQUNMLGtCQUFlLEtBQUs7SUFDbEI7SUFDQTtJQUNBO0lBQ0E7SUFDRCxDQUFDOztFQUdKLE1BQU0saUJBQWlCLFdBQVc7QUFDbEMsYUFBVyxRQUFRLGVBQXVELEdBQUcsTUFBaUI7QUFDNUYsT0FBSSxnQkFBZ0IsZ0JBQWdCO0FBQ2xDLGNBQVUsd0JBQXdCLEtBQUssV0FBVyxRQUFRLENBQUMsQ0FBQyxNQUMxRCxzQ0FDQTtLQUNFLFlBQVksUUFBUTtLQUNwQixPQUFPO0tBQ1AsUUFBUTtLQUNULENBQ0Y7O0FBR0gsT0FBSSxnQkFBZ0IsZ0JBQWdCO0FBQ2xDLGNBQVUsd0JBQXdCLEtBQUssV0FBVyxRQUFRLENBQUMsQ0FBQyxNQUMxRCxzQ0FDQTtLQUNFLFlBQVksUUFBUTtLQUNwQixPQUFPO0tBQ1AsUUFBUTtLQUNULENBQ0Y7O0FBR0gsVUFBTyxlQUFlLE1BQU0sTUFBTSxLQUFLOzs7O0FBSzdDLFNBQWdCLE9BQU8sU0FBaUM7QUFDdEQsU0FBUSxRQUF5QixhQUFxQixlQUFtQztFQUN2RixNQUFNLFlBQVksT0FBTyxZQUFZLEtBQUssTUFBTSxhQUFhLEdBQUc7QUFDaEUsU0FDRSxXQUNBLGlEQUFpRCxPQUFPLFlBQVksS0FBSyxHQUFHLGNBQzdFO0VBQ0QsTUFBTSxhQUFhO0FBR25CLHVCQUFxQixRQUFRLGFBQWEsZ0JBQWdCLE9BQU87RUFFakUsTUFBTSxjQUFjLElBQUksV0FBVyxTQUNqQyxVQUFVLFFBQVEsVUFBVSxHQUFHLENBQUMsUUFBUSxVQUFVLEdBQUcsRUFDckQsS0FDRCxDQUFDLEdBQUcsV0FBVyxTQUFTLGFBQWEsS0FBSztFQUMzQyxNQUFNLE9BQU8sUUFBUSxRQUFRO0VBRTdCLE1BQU0sRUFBRSxRQUFRLEdBQUcsTUFBTSxPQUFPLEdBQUcsZUFBZTtFQUNsRCxNQUFNLHNCQUFzQjtHQUMxQixHQUFHO0dBQ0gsWUFBWTtHQUNiO0VBRUQsTUFBTSxjQUFjLGVBQWUsTUFDaEMsVUFBUUEsTUFBSSxjQUFjLGFBQWFBLE1BQUksZUFBZSxXQUM1RDtBQUNELE1BQUksYUFBYTtBQUVmLDJCQUF3QixVQUFVLFdBQVcsWUFBWSxZQUFZLE1BQU0sS0FBSztBQUNoRixlQUFZLE9BQU87QUFHbkIsOEJBQ0UsVUFDQSxXQUNBLFlBQ0EsWUFBWSxTQUNaLG9CQUNEO0FBQ0QsZUFBWSxVQUFVO0lBQ3BCLEdBQUcsWUFBWTtJQUNmLEdBQUc7SUFDSjtBQUVELGVBQVksZ0JBQWdCO1NBQ3ZCO0FBQ0wsa0JBQWUsS0FBSztJQUNsQjtJQUNBO0lBQ0E7SUFDQSxTQUFTO0lBQ1QsZUFBZTtJQUNoQixDQUFDOztFQUdKLE1BQU0saUJBQWlCLFdBQVc7QUFDbEMsYUFBVyxRQUFRLGVBQXVELEdBQUcsTUFBaUI7QUFDNUYsT0FBSSxnQkFBZ0IsZ0JBQWdCO0FBQ2xDLGNBQVUsd0JBQXdCLEtBQUssV0FBVyxRQUFRLENBQUMsQ0FBQyxNQUMxRCw0QkFDQTtLQUNFLE9BQU87S0FDUCxRQUFRO0tBQ1QsQ0FDRjs7QUFHSCxPQUFJLGdCQUFnQixnQkFBZ0I7QUFDbEMsY0FBVSx3QkFBd0IsS0FBSyxXQUFXLFFBQVEsQ0FBQyxDQUFDLE1BQzFELDRCQUNBO0tBQ0UsT0FBTztLQUNQLFFBQVE7S0FDVCxDQUNGOztBQUdILFVBQU8sZUFBZSxNQUFNLE1BQU0sS0FBSzs7OztBQUs3QyxTQUFnQixVQUFVLFNBQW9DO0FBQzVELFNBQVEsUUFBeUIsYUFBcUIsZUFBbUM7RUFDdkYsTUFBTSxZQUFZLE9BQU8sWUFBWSxLQUFLLE1BQU0sYUFBYSxHQUFHO0FBQ2hFLFNBQ0UsV0FDQSxvREFBb0QsT0FBTyxZQUFZLEtBQUssR0FBRyxjQUNoRjtFQUNELE1BQU0sYUFBYTtBQUVuQix1QkFBcUIsUUFBUSxhQUFhLGdCQUFnQixVQUFVO0VBRXBFLE1BQU0sY0FBYyxJQUFJLFdBQVcsU0FDakMsVUFBVSxRQUFRLFVBQVUsR0FBRyxDQUFDLFFBQVEsVUFBVSxHQUFHLEVBQ3JELEtBQ0QsQ0FBQyxHQUFHLFdBQVcsU0FBUyxhQUFhLEtBQUs7RUFDM0MsTUFBTSxPQUFPLFFBQVEsUUFBUTtFQUM3QixNQUFNLEVBQUUsV0FBVyxZQUFZLFVBQVUsV0FBVyxHQUFHLGVBQWU7RUFDdEUsTUFBTSxzQkFBc0I7R0FDMUIsR0FBRztHQUNILFlBQVk7R0FDYjtFQUVELE1BQU0sY0FBYyxlQUFlLE1BQ2hDLFVBQVFBLE1BQUksY0FBYyxhQUFhQSxNQUFJLGVBQWUsV0FDNUQ7QUFDRCxNQUFJLGFBQWE7QUFDZiwyQkFBd0IsYUFBYSxXQUFXLFlBQVksWUFBWSxNQUFNLEtBQUs7QUFDbkYsZUFBWSxPQUFPO0FBRW5CLDhCQUNFLGFBQ0EsV0FDQSxZQUNBLFlBQVksU0FDWixvQkFDRDtBQUNELGVBQVksVUFBVTtJQUNwQixHQUFHLFlBQVk7SUFDZixHQUFHO0lBQ0o7QUFFRCxlQUFZLG1CQUFtQjtTQUMxQjtBQUNMLGtCQUFlLEtBQUs7SUFDbEI7SUFDQTtJQUNBO0lBQ0EsU0FBUztJQUNULGtCQUFrQjtJQUNuQixDQUFDOztFQUdKLE1BQU0saUJBQWlCLFdBQVc7QUFDbEMsYUFBVyxRQUFRLGVBQXVELEdBQUcsTUFBaUI7QUFDNUYsT0FBSSxnQkFBZ0IsZ0JBQWdCO0FBQ2xDLGNBQVUsd0JBQXdCLEtBQUssV0FBVyxRQUFRLENBQUMsQ0FBQyxNQUMxRCwrQkFDQTtLQUNFLE9BQU87S0FDUCxRQUFRO0tBQ1QsQ0FDRjs7QUFHSCxPQUFJLGdCQUFnQixnQkFBZ0I7QUFDbEMsY0FBVSx3QkFBd0IsS0FBSyxXQUFXLFFBQVEsQ0FBQyxDQUFDLE1BQzFELCtCQUNBO0tBQ0UsT0FBTztLQUNQLFFBQVE7S0FDVCxDQUNGOztBQUdILFVBQU8sZUFBZSxNQUFNLE1BQU0sS0FBSzs7OztBQUs3QyxTQUFnQixjQUFjLFVBQWdDLEVBQUUsRUFBRTtDQUNoRSxNQUFNLEVBQUUsV0FBVyxVQUFVLFdBQVcsUUFBUTtBQUVoRCxTQUFRLFFBQXlCLGFBQXFCLGVBQW1DO0VBQ3ZGLE1BQU0saUJBQWlCLFdBQVc7RUFDbEMsTUFBTSxZQUFZLE9BQU8sWUFBWSxLQUFLLE1BQU0sYUFBYSxHQUFHO0FBQ2hFLFNBQ0UsV0FDQSx3REFBd0QsT0FBTyxZQUFZLEtBQUssR0FBRyxjQUNwRjtFQUNELE1BQU0sYUFBYTtBQUVuQixhQUFXLFFBQVEsZUFBc0MsR0FBRyxNQUFpQjtBQUMzRSxRQUFLLE9BQU8sTUFBTSxtQ0FBbUM7SUFDbkQsT0FBTztJQUNQLFFBQVE7SUFDVCxDQUFDO0dBRUYsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsVUFBVTtHQUd4RCxNQUFNLG1CQUFtQixZQUFZO0lBQ25DLE1BQU0sT0FBTyxLQUFLLFFBQVEsU0FBUztBQUVuQyxXQUFPLEtBQUssS0FBSyxZQUNmLE9BQU8sUUFBUTtBQUNiLFVBQUssT0FBTyxNQUFNLHVDQUF1QyxFQUFFLFVBQVUsQ0FBQztLQUN0RSxNQUFNLGFBQWEsSUFBSSx1QkFBdUIsS0FBSyxJQUFJLGVBQWUsQ0FBQztBQUV2RSxRQUFHLHVCQUF1QixDQUFDLGVBQWUsVUFBVSxXQUFXO0FBRS9ELFNBQUk7QUFDRixhQUFPLE1BQU0sZUFBZSxNQUFNLE1BQU0sS0FBSztlQUNyQztBQUVSLFdBQUssT0FBTyxNQUFNLDBDQUEwQyxFQUFFLFVBQVUsQ0FBQztBQUN6RSxTQUFHLHVCQUF1QixDQUFDLGtCQUFrQixTQUFTOztPQUcxRDtLQUFFLGdCQUFnQjtLQUFXO0tBQVUsQ0FDeEM7O0FBSUgsT0FBSSxDQUFDLGlCQUFpQjtBQUNwQixXQUFPLEdBQUcsbUJBQW1CLGlCQUFpQjs7QUFJaEQsT0FBSSxpQkFBaUIsZUFBZSxTQUFTLEVBQUU7QUFDN0MsU0FBSyxPQUFPLE1BQU0seUNBQXlDLEVBQUUsVUFBVSxDQUFDO0FBQ3hFLFdBQU8sZUFBZSxNQUFNLE1BQU0sS0FBSzs7QUFJekMsVUFBTyxrQkFBa0I7O0FBRzNCLFNBQU87Ozs7Ozs7O0FBU1gsU0FBZ0IsT0FBTyxVQUFrQyxFQUFFLFNBQVMsVUFBVSxFQUFFO0FBQzlFLFNBQVEsUUFBeUIsYUFBcUIsZUFBbUM7RUFDdkYsTUFBTSxpQkFBaUIsV0FBVztFQUNsQyxNQUFNLFlBQVksT0FBTyxZQUFZLEtBQUssTUFBTSxhQUFhLEdBQUc7QUFDaEUsU0FDRSxXQUNBLGlEQUFpRCxPQUFPLFlBQVksS0FBSyxHQUFHLGNBQzdFO0VBQ0QsTUFBTSxhQUFhO0FBR25CLHVCQUFxQixRQUFRLGFBQWEsZ0JBQWdCLE9BQU87RUFFakUsTUFBTSxjQUFjLElBQUksV0FBVyxTQUNqQyxVQUFVLFFBQVEsVUFBVSxHQUFHLENBQUMsUUFBUSxVQUFVLEdBQUcsRUFDckQsS0FDRCxDQUFDLEdBQUcsV0FBVyxTQUFTLFlBQVksS0FBSztFQUcxQyxNQUFNLGNBQWMsZUFBZSxNQUNoQyxVQUFRQSxNQUFJLGNBQWMsYUFBYUEsTUFBSSxlQUFlLFdBQzVEO0FBRUQsTUFBSSxhQUFhO0FBRWYsZUFBWSxnQkFBZ0I7U0FDdkI7QUFFTCxrQkFBZSxLQUFLO0lBQ2xCO0lBQ0E7SUFDQSxNQUFNO0lBQ04sU0FBUztLQUNQLFlBQVk7S0FDWixTQUFTLENBQUMsbUJBQW1CLDhCQUE4QjtLQUMzRCxRQUFRLFFBQVE7S0FDaEIsYUFBYSxRQUFRO0tBQ3RCO0lBQ0QsZUFBZTtJQUNoQixDQUFDOztBQUdKLGFBQVcsUUFBUSxlQUF1RCxHQUFHLE1BQWlCO0FBQzVGLE9BQUksZ0JBQWdCLGdCQUFnQjtBQUNsQyxjQUFVLHdCQUF3QixLQUFLLFdBQVcsUUFBUSxDQUFDLENBQUMsTUFDMUQsNEJBQ0E7S0FDRSxPQUFPO0tBQ1AsUUFBUTtLQUNULENBQ0Y7O0FBR0gsT0FBSSxnQkFBZ0IsZ0JBQWdCO0FBQ2xDLGNBQVUsd0JBQXdCLEtBQUssV0FBVyxRQUFRLENBQUMsQ0FBQyxNQUMxRCw0QkFDQTtLQUNFLE9BQU87S0FDUCxRQUFRO0tBQ1QsQ0FDRjs7QUFHSCxVQUFPLGVBQWUsTUFBTSxNQUFNLEtBQUs7O0FBR3pDLFNBQU87Ozs7Ozs7Ozs7O0FBWVgsU0FBUyx3QkFDUCxlQUNBLFdBQ0EsWUFDQSxjQUNBLFNBQ0E7QUFDQSxLQUFJLGlCQUFpQixNQUFNLFlBQVksTUFBTSxpQkFBaUIsU0FBUztBQUtyRSxRQUFNLElBQUksTUFDUixJQUFJLGNBQWMsZ0JBQWdCLFVBQVUsR0FBRyxXQUFXLHlCQUF5QixRQUFRLDBEQUEwRCxhQUFhLHNCQUFzQixRQUFRLElBQ2pNOzs7Ozs7Ozs7OztBQVlMLFNBQVMsMkJBQ1AsZUFDQSxXQUNBLFlBRUEsaUJBRUEsWUFDQTtBQUNBLFFBQU8sS0FBSyxXQUFXLENBQUMsU0FBUyxRQUFRO0FBQ3ZDLE1BQUksZ0JBQWdCLFFBQVEsQ0FBQyxRQUFRLGdCQUFnQixNQUFNLFdBQVcsS0FBSyxFQUFFO0FBSzNFLFNBQU0sSUFBSSxNQUNSLElBQUksY0FBYyxnQkFBZ0IsVUFBVSxHQUFHLFdBQVcsNEJBQTRCLElBQUksNERBQTRELEtBQUssVUFBVSxnQkFBZ0IsS0FBSyxDQUFDLHdCQUF3QixLQUFLLFVBQVUsV0FBVyxLQUFLLENBQUMsSUFDcFA7O0dBRUg7Ozs7a0JBL2lCb0Q7VUFDcEI7b0JBQzhCO3NCQUVQO2dCQUNFO2tCQUlmO0NBNEVqQ0MsaUJBV1AsRUFBRTtDQWVGLGtCQUFrQjtFQUN0QixLQUFLLE9BQU8sTUFBTTtFQUNsQixRQUFRLE9BQU8sU0FBUztFQUN4QixXQUFXLE9BQU8sWUFBWTtFQUM5QixRQUFRLE9BQU8sU0FBUztFQUN6QiJ9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAeA;;;;;GAKG;AACH,eAAO,MAAM,UAAU,qDAGrB,CAAC"}
|
package/dist/utils/formatter.js
CHANGED
|
@@ -5,7 +5,6 @@ import { execute, init_process_utils } from "./process-utils.js";
|
|
|
5
5
|
import { createHash } from "crypto";
|
|
6
6
|
import { readFile, unlink, writeFile } from "fs/promises";
|
|
7
7
|
import path, { dirname, join } from "path";
|
|
8
|
-
import { tmpdir } from "os";
|
|
9
8
|
import { createRequire } from "module";
|
|
10
9
|
import { format } from "oxfmt";
|
|
11
10
|
|
|
@@ -14,7 +13,7 @@ import { format } from "oxfmt";
|
|
|
14
13
|
* 캐시 없는 포맷함수 엔트리.
|
|
15
14
|
*/
|
|
16
15
|
async function formatCodeInternal(code, filePath) {
|
|
17
|
-
if (filePath.endsWith("json")) {
|
|
16
|
+
if (filePath.endsWith(".json")) {
|
|
18
17
|
return runOxfmt(code, filePath);
|
|
19
18
|
}
|
|
20
19
|
return runOxfmt(await runOxlint(code), filePath);
|
|
@@ -79,7 +78,7 @@ async function runOxlint(code) {
|
|
|
79
78
|
if (isTest()) {
|
|
80
79
|
return code;
|
|
81
80
|
}
|
|
82
|
-
const tmpFile = join(
|
|
81
|
+
const tmpFile = join(process.cwd(), `.sonamu-fmt-${Date.now()}-${Math.random().toString(36).slice(2)}.ts`);
|
|
83
82
|
try {
|
|
84
83
|
await writeFile(tmpFile, code, "utf-8");
|
|
85
84
|
try {
|
|
@@ -115,7 +114,7 @@ var init_formatter = __esmMin((() => {
|
|
|
115
114
|
init_process_utils();
|
|
116
115
|
_require = createRequire(import.meta.url);
|
|
117
116
|
formatCode = cached(formatCodeInternal, (code, filePath) => {
|
|
118
|
-
const ext = filePath.endsWith(".tsx") ? "tsx" : filePath.endsWith("json") ? "json" : "ts";
|
|
117
|
+
const ext = filePath.endsWith(".tsx") ? "tsx" : filePath.endsWith(".json") ? "json" : "ts";
|
|
119
118
|
return `${ext}:${createHash("sha1").update(code).digest("hex")}`;
|
|
120
119
|
});
|
|
121
120
|
cachedOxfmtConfig = null;
|
|
@@ -124,4 +123,4 @@ var init_formatter = __esmMin((() => {
|
|
|
124
123
|
//#endregion
|
|
125
124
|
init_formatter();
|
|
126
125
|
export { formatCode, init_formatter };
|
|
127
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0dGVyLmpzIiwibmFtZXMiOlsiY2FjaGVkT3hmbXRDb25maWc6IEZvcm1hdENvbmZpZyB8IG51bGwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG4vLyDthYzsiqTtirgg7ZmY6rK97JeQ7ISc64qUIGZzL3Byb21pc2Vz6rCAIG1vY2vrkJjsp4Drp4wsIOyVhOuemCBydW5PeGxpbnTsnbQgaXNUZXN0IOqwgOuTnOuhnCDslYgg64+
|
|
126
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0dGVyLmpzIiwibmFtZXMiOlsiY2FjaGVkT3hmbXRDb25maWc6IEZvcm1hdENvbmZpZyB8IG51bGwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvZm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwiY3J5cHRvXCI7XG4vLyDthYzsiqTtirgg7ZmY6rK97JeQ7ISc64qUIGZzL3Byb21pc2Vz6rCAIG1vY2vrkJjsp4Drp4wsIOyVhOuemCBydW5PeGxpbnTsnbQgaXNUZXN0IOqwgOuTnOuhnCDslYgg64+E64uI6rmMXG4vLyDqt7jrg6UgZnMvcHJvbWlzZXMg6re464yA66GcIOyCrOyaqS4gKHByb2R1Y3Rpb27sl5DshJzrp4wg7J6E7Iuc7YyM7J28IO2dkOumhOydtCDrj5Xri4jri6QuKVxuaW1wb3J0IHsgcmVhZEZpbGUsIHVubGluaywgd3JpdGVGaWxlIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm1vZHVsZVwiO1xuaW1wb3J0IHBhdGgsIHsgZGlybmFtZSwgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IGZvcm1hdCwgdHlwZSBGb3JtYXRDb25maWcgfSBmcm9tIFwib3hmbXRcIjtcblxuaW1wb3J0IHsgY2FjaGVkIH0gZnJvbSBcIi4vYXN5bmMtdXRpbHNcIjtcbmltcG9ydCB7IGlzVGVzdCB9IGZyb20gXCIuL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGV4ZWN1dGUgfSBmcm9tIFwiLi9wcm9jZXNzLXV0aWxzXCI7XG5cbmNvbnN0IF9yZXF1aXJlID0gY3JlYXRlUmVxdWlyZShpbXBvcnQubWV0YS51cmwpO1xuXG4vKipcbiAqIOy9lOuTnOulvCDtlITroZzsoJ3tirjsnZggb3hmbXQgKyBveGxpbnQg7ISk7KCV7JeQIOunnuy2sCDtj6zrp6TtjIXtlZwg66y47J6Q7Je07J2EIOuwmO2ZmO2VqeuLiOuLpC5cbiAqXG4gKiDsupDsi7Hrj4Qg7J6I7Ja07JqUIOOFjuOFjiDrmJHqsJnsnYAg7J6F66Cl7JeQIOuMgO2VtOyEnCDsupDsi5wg7Luk67KE65Cp64uI64ukLlxuICog7IiY66qF7J2AIO2UhOuhnOyEuOyKpCDso73snYTrlYzquYzsp4Ag44WLXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRDb2RlID0gY2FjaGVkKGZvcm1hdENvZGVJbnRlcm5hbCwgKGNvZGUsIGZpbGVQYXRoKSA9PiB7XG4gIGNvbnN0IGV4dCA9IGZpbGVQYXRoLmVuZHNXaXRoKFwiLnRzeFwiKSA/IFwidHN4XCIgOiBmaWxlUGF0aC5lbmRzV2l0aChcIi5qc29uXCIpID8gXCJqc29uXCIgOiBcInRzXCI7XG4gIHJldHVybiBgJHtleHR9OiR7Y3JlYXRlSGFzaChcInNoYTFcIikudXBkYXRlKGNvZGUpLmRpZ2VzdChcImhleFwiKX1gO1xufSk7XG5cbi8qKlxuICog7LqQ7IucIOyXhuuKlCDtj6zrp7ftlajsiJgg7JeU7Yq466asLlxuICovXG5hc3luYyBmdW5jdGlvbiBmb3JtYXRDb2RlSW50ZXJuYWwoY29kZTogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgLy8ganNvbuydgCDtj6zrp7frp4wg7ZWY66m0IOuQqeuLiOuLpC5cbiAgaWYgKGZpbGVQYXRoLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICByZXR1cm4gcnVuT3hmbXQoY29kZSwgZmlsZVBhdGgpO1xuICB9XG5cbiAgLy8g66aw7Yq4IOuovOyggCDtlZwg64uk7J2M7JeQIO2PrOunt+ycvOuhnCDrp4jrrLTrpqztlbTsmpQuXG4gIHJldHVybiBydW5PeGZtdChhd2FpdCBydW5PeGxpbnQoY29kZSksIGZpbGVQYXRoKTtcbn1cblxuLyoqXG4gKiDtlITroZzsoJ3tirgg7ISk7KCV7J2EIOywvuyVhOyEnCDsnbTsl5Ag66ee7Law7IScIOy9lOuTnOulvCDtj6zrp7ftlanri4jri6QuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bk94Zm10KGNvZGU6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZvcm1hdChwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSwgY29kZSwgYXdhaXQgbG9hZE94Zm10Q29uZmlnKCkpO1xuXG4gIGNvbnN0IGVycm9ycyA9IHJlc3VsdC5lcnJvcnMuZmlsdGVyKChlKSA9PiBlLnNldmVyaXR5ID09PSBcIkVycm9yXCIpO1xuICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoIWlzVGVzdCgpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBveGZtdCBlcnJvcnMgKCR7ZmlsZVBhdGh9KTpgKTtcbiAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycm9ycykge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGVyci5sYWJlbHNbMF07XG4gICAgICAgIGlmIChsYWJlbCkge1xuICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IGNvZGUuc2xpY2UoTWF0aC5tYXgoMCwgbGFiZWwuc3RhcnQgLSA4MCksIGxhYmVsLnN0YXJ0KTtcbiAgICAgICAgICBjb25zdCBhdCA9IGNvZGUuc2xpY2UobGFiZWwuc3RhcnQsIGxhYmVsLmVuZCk7XG4gICAgICAgICAgY29uc3QgYWZ0ZXIgPSBjb2RlLnNsaWNlKGxhYmVsLmVuZCwgTWF0aC5taW4oY29kZS5sZW5ndGgsIGxhYmVsLmVuZCArIDgwKSk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgICAtICR7ZXJyLm1lc3NhZ2V9IChvZmZzZXQgJHtsYWJlbC5zdGFydH0tJHtsYWJlbC5lbmR9KWApO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCAgICBhcm91bmQ6IC4uLiR7YmVmb3JlfcK7JHthdH3CqyR7YWZ0ZXJ9Li4uYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgICAtICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5jb2RlO1xufVxuXG5sZXQgY2FjaGVkT3hmbXRDb25maWc6IEZvcm1hdENvbmZpZyB8IG51bGwgPSBudWxsO1xuYXN5bmMgZnVuY3Rpb24gbG9hZE94Zm10Q29uZmlnKCk6IFByb21pc2U8Rm9ybWF0Q29uZmlnPiB7XG4gIGlmIChjYWNoZWRPeGZtdENvbmZpZyAhPT0gbnVsbCkge1xuICAgIHJldHVybiBjYWNoZWRPeGZtdENvbmZpZztcbiAgfVxuXG4gIGxldCBkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGpvaW4oZGlyLCBcIi5veGZtdHJjLmpzb25cIik7XG4gICAgdHJ5IHtcbiAgICAgIGNhY2hlZE94Zm10Q29uZmlnID0gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShjYW5kaWRhdGUsIFwidXRmLThcIikpIGFzIEZvcm1hdENvbmZpZztcbiAgICAgIHJldHVybiBjYWNoZWRPeGZtdENvbmZpZztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoKGUgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlICE9PSBcIkVOT0VOVFwiKSB7XG4gICAgICAgICFpc1Rlc3QoKSAmJiBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCAke2NhbmRpZGF0ZX06YCwgZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKGRpcik7XG4gICAgaWYgKHBhcmVudCA9PT0gZGlyKSBicmVhaztcbiAgICBkaXIgPSBwYXJlbnQ7XG4gIH1cblxuICBjYWNoZWRPeGZtdENvbmZpZyA9IHt9O1xuICByZXR1cm4gY2FjaGVkT3hmbXRDb25maWc7XG59XG5cbi8qKlxuICog7ZSE66Gc7KCd7Yq4IOyEpOygleyXkCDrp57strAg7L2U65Oc66W8IGxpbnTtlanri4jri6QuXG4gKlxuICog7ZSE66Gc7KCd7Yq4IOyEpOygleydhCDsoIHsmqnrsJvripQgb3hsaW50IGNsaeulvCDssL7slYQg652E7JuM7IScLFxuICog7J6E7IucIO2MjOydvOyXkCBpbi1wbGFjZeuhnCDsjajshJwg6re4IOqysOqzvOulvCDrubzsmKTripQg67Cp7Iud7Jy866GcIOyekeuPme2VqeuLiOuLpC5cbiAqIOyZnCDsnbTroIfqsowg7ZWY64qQ64OQPyBveGxpbnTqsIAgbm9kZSBhcGnrj4Qg7JWIIOyjvOqzoCBjbGnsl5DshJwgc3RkaW4g7Ji17IWY64+EIOyViCDso7zquLAg65WM66y4Li4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bk94bGludChjb2RlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoaXNUZXN0KCkpIHtcbiAgICAvLyDthYzsiqTtirgg7ZmY6rK97JeQ7ISc64qUIOuKkOugpOyngOq4sOunjCDtlZjqs6Ag6rKA7Kad7ZWgIOqwgOy5mOuPhCDsl4bslrTshJwg7JWIIO2VqeuLiOuLpC5cbiAgICAvLyBHaXRIdWIgQWN0aW9ucyDtmZjqsr3sl5DshJwgbGludOqwgCDsmKTrnpgg6rG466Ck7IScIOu7l+q4sOuPhCDtlojslrTsmpQuIChodHRwczovL2dpdGh1Yi5jb20vY2FydGFub3ZhLWFpL3NvbmFtdS9hY3Rpb25zL3J1bnMvMjUyNjcyMTQwMjcvam9iLzc0MDgzNjMwMTY5KVxuICAgIHJldHVybiBjb2RlO1xuICB9XG5cbiAgY29uc3QgdG1wRmlsZSA9IGpvaW4oXG4gICAgLy8g7YOA6rKfIO2MjOydvOydtCDro6jtirgg7JWE656Y7JeQIOyeiOyWtOyVvCDtlbTsmpQuIOq3uOuemOyEnCB0bXAg65SU66CJ7Yag66as6rCZ7J2A6rGwIOyViCDslIHri4jri6QhXG4gICAgcHJvY2Vzcy5jd2QoKSxcbiAgICBgLnNvbmFtdS1mbXQtJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpfS50c2AsXG4gICk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB3cml0ZUZpbGUodG1wRmlsZSwgY29kZSwgXCJ1dGYtOFwiKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBleGVjdXRlKHJlc29sdmVPeGxpbnRCaW4oKSwgW1wiLS1maXhcIiwgXCItLWZpeC1zdWdnZXN0aW9uc1wiLCBcIi0tdHlwZS1hd2FyZVwiLCB0bXBGaWxlXSwge1xuICAgICAgICB0aW1lb3V0OiAxMDAwMCxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGxpbnQg7JyE67CYIOyLnCBleGl0IGNvZGUgIT0gMOydtOyngOunjCAtLWZpeOuKlCDsoIHsmqnrkKguIGV4ZWMg7J6Q7LK0IOyLpO2MqOunjCB0aHJvdy5cbiAgICAgIGlmICh0eXBlb2YgKGUgYXMgRXJyb3IgJiB7IGNvZGU/OiBudW1iZXIgfSkuY29kZSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCByZWFkRmlsZSh0bXBGaWxlLCBcInV0Zi04XCIpO1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB1bmxpbmsodG1wRmlsZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyDsgq3soJwg7Iuk7Yyo7ZW064+EIOyWtOywqO2UvCBpZ25vcmXrkKguXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVPeGxpbnRCaW4oKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gX3JlcXVpcmUucmVzb2x2ZShcIm94bGludC9iaW4vb3hsaW50XCIpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gXCJveGxpbnRcIjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQTZCQSxlQUFlLG1CQUFtQixNQUFjLFVBQW1DO0FBRWpGLEtBQUksU0FBUyxTQUFTLFFBQVEsRUFBRTtBQUM5QixTQUFPLFNBQVMsTUFBTSxTQUFTOztBQUlqQyxRQUFPLFNBQVMsTUFBTSxVQUFVLEtBQUssRUFBRSxTQUFTOzs7OztB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
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { type ExecFileOptions } from "child_process";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* child_process.execFile의 Promise 기반 wrapper입니다.
|
|
4
4
|
* exit code가 non-zero이면 reject해요.
|
|
5
5
|
*/
|
|
6
6
|
export declare function execute(bin: string, args: string[], options?: ExecFileOptions): Promise<string>;
|
|
7
7
|
/**
|
|
8
8
|
* 주어진 작업을 실행합니다.
|
|
9
|
-
* 주어진 프로세스 이벤트(=시그널)가 발생하였을 때에도 최대 한계(
|
|
9
|
+
* 주어진 프로세스 이벤트(=시그널)가 발생하였을 때에도 최대 한계(waitForUpTo) 동안 작업을 기다린 후 종료합니다.
|
|
10
10
|
* @param {() => Promise<void>} job - 실행할 작업
|
|
11
|
-
* @param {
|
|
12
|
-
* @param {NodeJS.Signals} options.
|
|
13
|
-
* @param {number} options.
|
|
11
|
+
* @param {{ whenThisHappens: NodeJS.Signals; waitForUpTo: number }} options - 옵션
|
|
12
|
+
* @param {NodeJS.Signals} options.whenThisHappens - 프로세스 이벤트
|
|
13
|
+
* @param {number} options.waitForUpTo - 최대 한계 시간
|
|
14
14
|
*/
|
|
15
15
|
export declare function runWithGracefulShutdown(job: () => Promise<void>, { whenThisHappens: event, waitForUpTo: delayBeforeShutdown, }?: {
|
|
16
16
|
whenThisHappens: NodeJS.Signals;
|
|
@@ -6,7 +6,7 @@ import { promisify } from "util";
|
|
|
6
6
|
|
|
7
7
|
//#region src/utils/process-utils.ts
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* child_process.execFile의 Promise 기반 wrapper입니다.
|
|
10
10
|
* exit code가 non-zero이면 reject해요.
|
|
11
11
|
*/
|
|
12
12
|
async function execute(bin, args, options) {
|
|
@@ -15,11 +15,11 @@ async function execute(bin, args, options) {
|
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* 주어진 작업을 실행합니다.
|
|
18
|
-
* 주어진 프로세스 이벤트(=시그널)가 발생하였을 때에도 최대 한계(
|
|
18
|
+
* 주어진 프로세스 이벤트(=시그널)가 발생하였을 때에도 최대 한계(waitForUpTo) 동안 작업을 기다린 후 종료합니다.
|
|
19
19
|
* @param {() => Promise<void>} job - 실행할 작업
|
|
20
|
-
* @param {
|
|
21
|
-
* @param {NodeJS.Signals} options.
|
|
22
|
-
* @param {number} options.
|
|
20
|
+
* @param {{ whenThisHappens: NodeJS.Signals; waitForUpTo: number }} options - 옵션
|
|
21
|
+
* @param {NodeJS.Signals} options.whenThisHappens - 프로세스 이벤트
|
|
22
|
+
* @param {number} options.waitForUpTo - 최대 한계 시간
|
|
23
23
|
*/
|
|
24
24
|
async function runWithGracefulShutdown(job, { whenThisHappens: event, waitForUpTo: delayBeforeShutdown } = {
|
|
25
25
|
whenThisHappens: "SIGUSR2",
|
|
@@ -52,4 +52,4 @@ var init_process_utils = __esmMin((() => {
|
|
|
52
52
|
//#endregion
|
|
53
53
|
init_process_utils();
|
|
54
54
|
export { execute, init_process_utils, runWithGracefulShutdown };
|
|
55
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy11dGlscy5qcyIsIm5hbWVzIjpbInNldFRpbWVvdXRQcm9taXNlcyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9wcm9jZXNzLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlLCB0eXBlIEV4ZWNGaWxlT3B0aW9ucyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNldFRpbWVvdXRQcm9taXNlcyB9IGZyb20gXCJ0aW1lcnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gXCJ1dGlsXCI7XG5cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcblxuY29uc3QgZXhlY0ZpbGVBc3luYyA9IHByb21pc2lmeShleGVjRmlsZSk7XG5cbi8qKlxuICogY2hpbGRfcHJvY2Vzcy5leGVjRmlsZeydmCBQcm9taXNlIOq4sOuwmCB3cmFwcGVy7J6F64uI64ukLlxuICogZXhpdCBjb2Rl6rCAIG5vbi16ZXJv7J2066m0IHJlamVjdO2VtOyalC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGUoXG4gIGJpbjogc3RyaW5nLFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgb3B0aW9ucz86IEV4ZWNGaWxlT3B0aW9ucyxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgc3Rkb3V0IH0gPSBhd2FpdCBleGVjRmlsZUFzeW5jKGJpbiwgYXJncywgb3B0aW9ucyk7XG4gIHJldHVybiB0eXBlb2Ygc3Rkb3V0ID09PSBcInN0cmluZ1wiID8gc3Rkb3V0IDogc3Rkb3V0LnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICog7KO87Ja07KeEIOyekeyXheydhCDsi6Ttlontlanri4jri6QuXG4gKiDso7zslrTsp4Qg7ZSE66Gc7IS47IqkIOydtOuypO2KuCg97Iuc6re464SQKeqwgCDrsJzsg53tlZjsmIDsnYQg65WM7JeQ64+EIOy1nOuMgCDtlZzqs4Qod2FpdEZvclVwVG8pIOuPmeyViCDsnpHsl4XsnYQg6riw64uk66awIO2bhCDsooXro4ztlanri4jri6QuXG4gKiBAcGFyYW0geygpID0+IFByb21pc2U8dm9pZD59IGpvYiAtIOyLpO2Wie2VoCDsnpHsl4VcbiAqIEBwYXJhbSB7eyB3aGVuVGhpc0hhcHBlbnM6IE5vZGVKUy5TaWduYWxzOyB3YWl0Rm9yVXBUbzogbnVtYmVyIH19IG9wdGlvbnMgLSDsmLXshZhcbiAqIEBwYXJhbSB7Tm9kZUpTLlNpZ25hbHN9IG9wdGlvbnMud2hlblRoaXNIYXBwZW5zIC0g7ZSE66Gc7IS47IqkIOydtOuypO2KuFxuICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMud2FpdEZvclVwVG8gLSDstZzrjIAg7ZWc6rOEIOyLnOqwhFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2l0aEdyYWNlZnVsU2h1dGRvd24oXG4gIGpvYjogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAge1xuICAgIHdoZW5UaGlzSGFwcGVuczogZXZlbnQsXG4gICAgd2FpdEZvclVwVG86IGRlbGF5QmVmb3JlU2h1dGRvd24sXG4gIH06IHsgd2hlblRoaXNIYXBwZW5zOiBOb2RlSlMuU2lnbmFsczsgd2FpdEZvclVwVG86IG51bWJlciB9ID0ge1xuICAgIHdoZW5UaGlzSGFwcGVuczogXCJTSUdVU1IyXCIsXG4gICAgd2FpdEZvclVwVG86IDIwMDAwLFxuICB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBpc1J1bm5pbmcgPSB0cnVlIGFzIGJvb2xlYW47XG5cbiAgY29uc3QgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCBvbkV2ZW50ID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghaXNSdW5uaW5nKSB7XG4gICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGNoYWxrLm1hZ2VudGFCcmlnaHQoYHdhaXQgZm9yIHN5bmNpbmcgZG9uZS4uLi5gKSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2V0VGltZW91dFByb21pc2VzKGRlbGF5QmVmb3JlU2h1dGRvd24sIFwid2FpdGluZy1zeW5jXCIsIHtcbiAgICAgICAgc2lnbmFsOiBhYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7fVxuICAgIGNvbnNvbGUubG9nKGNoYWxrLm1hZ2VudGFCcmlnaHQoYFN5bmNpbmcgRE9ORSFgKSk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9O1xuICBwcm9jZXNzLm9uKGV2ZW50LCBvbkV2ZW50KTtcblxuICBhd2FpdCBqb2IoKTtcblxuICBpc1J1bm5pbmcgPSBmYWxzZTtcbiAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gIHByb2Nlc3Mub2ZmKGV2ZW50LCBvbkV2ZW50KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFZQSxlQUFzQixRQUNwQixLQUNBLE1BQ0EsU0FDaUI7Q0FDakIsTUFBTSxFQUFFLFdBQVcsTUFBTSxjQUFjLEtBQUssTUFBTSxRQUFRO0FBQzFELFFBQU8sT0FBTyxXQUFXLFdBQVcsU0FBUyxPQUFPLFVBQVU7Ozs7Ozs7Ozs7QUFXaEUsZUFBc0Isd0JBQ3BCLEtBQ0EsRUFDRSxpQkFBaUIsT0FDakIsYUFBYSx3QkFDK0M7Q0FDNUQsaUJBQWlCO0NBQ2pCLGFBQWE7Q0FDZCxFQUNjO0NBQ2YsSUFBSSxZQUFZO0NBRWhCLE1BQU0sa0JBQWtCLElBQUksaUJBQWlCO0NBQzdDLE1BQU0sVUFBVSxZQUFZO0FBQzFCLE1BQUksQ0FBQyxXQUFXO0FBQ2QsV0FBUSxLQUFLLEVBQUU7O0FBRWpCLFVBQVEsSUFBSSxNQUFNLGNBQWMsNEJBQTRCLENBQUM7QUFFN0QsTUFBSTtBQUNGLFNBQU1BLFdBQW1CLHFCQUFxQixnQkFBZ0IsRUFDNUQsUUFBUSxnQkFBZ0IsUUFDekIsQ0FBQztVQUNJO0FBQ1IsVUFBUSxJQUFJLE1BQU0sY0FBYyxnQkFBZ0IsQ0FBQztBQUNqRCxVQUFRLEtBQUssRUFBRTs7QUFFakIsU0FBUSxHQUFHLE9BQU8sUUFBUTtBQUUxQixPQUFNLEtBQUs7QUFFWCxhQUFZO0FBQ1osaUJBQWdCLE9BQU87QUFDdkIsU0FBUSxJQUFJLE9BQU8sUUFBUTs7OztDQXhEdkIsZ0JBQWdCLFVBQVUsU0FBUyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sonamu",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.7",
|
|
4
4
|
"description": "Sonamu — TypeScript Fullstack API Framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"framework",
|
|
@@ -130,8 +130,8 @@
|
|
|
130
130
|
"vite": "8.0.5",
|
|
131
131
|
"vitest": "^4.1.2",
|
|
132
132
|
"@sonamu-kit/hmr-hook": "^0.5.1",
|
|
133
|
-
"@sonamu-kit/hmr-runner": "^0.2.0",
|
|
134
133
|
"@sonamu-kit/tasks": "^0.3.0",
|
|
134
|
+
"@sonamu-kit/hmr-runner": "^0.2.0",
|
|
135
135
|
"@sonamu-kit/ts-loader": "^2.2.0"
|
|
136
136
|
},
|
|
137
137
|
"devDependencies": {
|
package/src/api/decorators.ts
CHANGED
|
@@ -53,7 +53,7 @@ export type ApiDecoratorOptions = {
|
|
|
53
53
|
compress?: CompressConfig;
|
|
54
54
|
};
|
|
55
55
|
export type StreamDecoratorOptions = {
|
|
56
|
-
type: "sse";
|
|
56
|
+
type: "sse";
|
|
57
57
|
// oxlint-disable-next-line @typescript-eslint/no-explicit-any -- 이벤트 키별로 넘겨주는 값이므로 어떤 타입이든 상관없음
|
|
58
58
|
events: z.ZodObject<any>;
|
|
59
59
|
path?: string;
|
|
@@ -386,7 +386,7 @@ export function transactional(options: TransactionalOptions = {}) {
|
|
|
386
386
|
const modelName = target.constructor.name.match(/(.+)Class$/)?.[1];
|
|
387
387
|
assert(
|
|
388
388
|
modelName,
|
|
389
|
-
`modelName is required on @
|
|
389
|
+
`modelName is required on @transactional decorator on ${target.constructor.name}.${propertyKey}`,
|
|
390
390
|
);
|
|
391
391
|
const methodName = propertyKey;
|
|
392
392
|
|
package/src/utils/formatter.ts
CHANGED
|
@@ -3,7 +3,6 @@ import { createHash } from "crypto";
|
|
|
3
3
|
// 그냥 fs/promises 그대로 사용. (production에서만 임시파일 흐름이 돕니다.)
|
|
4
4
|
import { readFile, unlink, writeFile } from "fs/promises";
|
|
5
5
|
import { createRequire } from "module";
|
|
6
|
-
import { tmpdir } from "os";
|
|
7
6
|
import path, { dirname, join } from "path";
|
|
8
7
|
|
|
9
8
|
import { format, type FormatConfig } from "oxfmt";
|
|
@@ -21,7 +20,7 @@ const _require = createRequire(import.meta.url);
|
|
|
21
20
|
* 수명은 프로세스 죽을때까지 ㅋ
|
|
22
21
|
*/
|
|
23
22
|
export const formatCode = cached(formatCodeInternal, (code, filePath) => {
|
|
24
|
-
const ext = filePath.endsWith(".tsx") ? "tsx" : filePath.endsWith("json") ? "json" : "ts";
|
|
23
|
+
const ext = filePath.endsWith(".tsx") ? "tsx" : filePath.endsWith(".json") ? "json" : "ts";
|
|
25
24
|
return `${ext}:${createHash("sha1").update(code).digest("hex")}`;
|
|
26
25
|
});
|
|
27
26
|
|
|
@@ -30,7 +29,7 @@ export const formatCode = cached(formatCodeInternal, (code, filePath) => {
|
|
|
30
29
|
*/
|
|
31
30
|
async function formatCodeInternal(code: string, filePath: string): Promise<string> {
|
|
32
31
|
// json은 포맷만 하면 됩니다.
|
|
33
|
-
if (filePath.endsWith("json")) {
|
|
32
|
+
if (filePath.endsWith(".json")) {
|
|
34
33
|
return runOxfmt(code, filePath);
|
|
35
34
|
}
|
|
36
35
|
|
|
@@ -107,10 +106,9 @@ async function runOxlint(code: string): Promise<string> {
|
|
|
107
106
|
return code;
|
|
108
107
|
}
|
|
109
108
|
|
|
110
|
-
// OS tmp dir에 두는 이유: process.cwd()가 watcher 스코프(api/src 아래)일 가능성을 차단합니다.
|
|
111
|
-
// cwd가 그 위치라면 write/unlink가 짧은 순간 watcher 이벤트로 잡혀 batch에 흘러들어갈 수 있어요.
|
|
112
109
|
const tmpFile = join(
|
|
113
|
-
|
|
110
|
+
// 타겟 파일이 루트 아래에 있어야 해요. 그래서 tmp 디렉토리같은거 안 씁니다!
|
|
111
|
+
process.cwd(),
|
|
114
112
|
`.sonamu-fmt-${Date.now()}-${Math.random().toString(36).slice(2)}.ts`,
|
|
115
113
|
);
|
|
116
114
|
|
|
@@ -7,7 +7,7 @@ import chalk from "chalk";
|
|
|
7
7
|
const execFileAsync = promisify(execFile);
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* child_process.execFile의 Promise 기반 wrapper입니다.
|
|
11
11
|
* exit code가 non-zero이면 reject해요.
|
|
12
12
|
*/
|
|
13
13
|
export async function execute(
|
|
@@ -21,11 +21,11 @@ export async function execute(
|
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* 주어진 작업을 실행합니다.
|
|
24
|
-
* 주어진 프로세스 이벤트(=시그널)가 발생하였을 때에도 최대 한계(
|
|
24
|
+
* 주어진 프로세스 이벤트(=시그널)가 발생하였을 때에도 최대 한계(waitForUpTo) 동안 작업을 기다린 후 종료합니다.
|
|
25
25
|
* @param {() => Promise<void>} job - 실행할 작업
|
|
26
|
-
* @param {
|
|
27
|
-
* @param {NodeJS.Signals} options.
|
|
28
|
-
* @param {number} options.
|
|
26
|
+
* @param {{ whenThisHappens: NodeJS.Signals; waitForUpTo: number }} options - 옵션
|
|
27
|
+
* @param {NodeJS.Signals} options.whenThisHappens - 프로세스 이벤트
|
|
28
|
+
* @param {number} options.waitForUpTo - 최대 한계 시간
|
|
29
29
|
*/
|
|
30
30
|
export async function runWithGracefulShutdown(
|
|
31
31
|
job: () => Promise<void>,
|