cdk-local-lambda 0.0.4 → 0.0.6
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/lib/aspect/live-lambda-aspect.js +4 -3
- package/lib/cli/commands/local.js +22 -12
- package/lib/cli/docker/container.d.ts +5 -5
- package/lib/cli/docker/container.js +1 -1
- package/lib/cli/docker/types.d.ts +2 -2
- package/lib/cli/docker/types.js +1 -1
- package/lib/cli/runtime-api/types.d.ts +2 -2
- package/lib/cli/runtime-api/types.js +1 -1
- package/lib/shared/types.d.ts +1 -1
- package/lib/shared/types.js +1 -1
- package/package.json +1 -1
|
@@ -62,12 +62,11 @@ export class LiveLambdaAspect {
|
|
|
62
62
|
console.log(`[LiveLambda] Skipping non-matching function: ${functionId}`);
|
|
63
63
|
return;
|
|
64
64
|
}
|
|
65
|
-
console.log(`[LiveLambda] Transforming function: ${functionId}`);
|
|
66
65
|
const stackName = this.props.stackName || cdk.Stack.of(fn).stackName;
|
|
67
66
|
// Check if this is a DockerImageFunction
|
|
68
67
|
const isDockerFunction = isDockerImageFunction(fn);
|
|
69
68
|
if (isDockerFunction) {
|
|
70
|
-
console.log(`[LiveLambda]
|
|
69
|
+
console.log(`[LiveLambda] Transforming DockerImageFunction: ${functionId}`);
|
|
71
70
|
this.transformDockerFunction(fn, stackName, functionId);
|
|
72
71
|
}
|
|
73
72
|
else {
|
|
@@ -75,9 +74,11 @@ export class LiveLambdaAspect {
|
|
|
75
74
|
const handlerPaths = this.getHandlerPaths(fn);
|
|
76
75
|
// Skip unsupported functions (not NodejsFunction or DockerImageFunction)
|
|
77
76
|
if (!handlerPaths) {
|
|
77
|
+
this.processedFunctions.add(nodeId);
|
|
78
78
|
return;
|
|
79
79
|
}
|
|
80
80
|
const { originalHandler, localHandler } = handlerPaths;
|
|
81
|
+
console.log(`[LiveLambda] Transforming function: ${functionId}`);
|
|
81
82
|
// Transform the function
|
|
82
83
|
this.transformFunction(fn, stackName, functionId, originalHandler, localHandler);
|
|
83
84
|
}
|
|
@@ -274,4 +275,4 @@ export function applyLiveLambdaAspect(scope, props = {}) {
|
|
|
274
275
|
console.log("[LiveLambda] Live mode enabled - transforming Lambda functions");
|
|
275
276
|
cdk.Aspects.of(scope).add(new LiveLambdaAspect(props));
|
|
276
277
|
}
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1sYW1iZGEtYXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FzcGVjdC9saXZlLWxhbWJkYS1hc3BlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFBO0FBQ2xDLE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUE7QUFFMUMsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUUxQyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixhQUFhLEdBQ2QsTUFBTSxvQkFBb0IsQ0FBQTtBQUMzQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFFeEUsZ0RBQWdEO0FBQ2hELE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFBO0FBd0JwRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ1YsS0FBSyxDQUF1QjtJQUM1QixrQkFBa0IsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUU1RCxZQUFZLFFBQStCLEVBQUU7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFnQjtRQUNwQiw2RUFBNkU7UUFDN0Usc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFNO1FBQ1IsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxNQUFNLEVBQUUsR0FBRyxJQUFrQyxDQUFBO1FBRTdDLCtEQUErRDtRQUMvRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUM3QixJ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QUNqQixRQUErQixFQUFFO0lBRWpDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7UUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FDVCxrRUFBa0UsQ0FDbkUsQ0FBQTtRQUNELE9BQU07SUFDUixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFBO0lBQzdFLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ0RLIEFzcGVjdCB0byB0cmFuc2Zvcm0gTGFtYmRhIGZ1bmN0aW9ucyBmb3IgbGl2ZSBkZWJ1Z2dpbmdcbiAqXG4gKiBXaGVuIGFwcGxpZWQgdG8gYSBDREsgYXBwL3N0YWNrLCB0aGlzIGFzcGVjdDpcbiAqIDEuIFJlcGxhY2VzIExhbWJkYSBjb2RlIHdpdGggdGhlIGJyaWRnZSBoYW5kbGVyIGZyb20gdGhlIGJvb3RzdHJhcCBzdGFjaydzIFMzIGJ1Y2tldFxuICogMi4gR3JhbnRzIElBTSBwZXJtaXNzaW9ucyBmb3IgQXBwU3luYyBFdmVudHNcbiAqIDMuIEFkZHMgYSB0YWcgd2l0aCB0aGUgbG9jYWwgaGFuZGxlciBwYXRoIGZvciB0aGUgZGFlbW9uIHRvIGRpc2NvdmVyXG4gKlxuICogVGhlIGJyaWRnZSB1c2VzIEFXU19MQU1CREFfRlVOQ1RJT05fTkFNRSAoYXV0by1pbmplY3RlZCBieSBMYW1iZGEpIGZvciBjaGFubmVsIHJvdXRpbmcuXG4gKiBUaGUgZGFlbW9uIGRpc2NvdmVycyBmdW5jdGlvbnMgYnkgcXVlcnlpbmcgTGFtYmRhIEFQSSBmb3IgZnVuY3Rpb25zIHdpdGggdGhlIGxpdmUtbGFtYmRhIHRhZy5cbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgdHlwZSAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiXG5pbXBvcnQgKiBhcyBzc20gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zc21cIlxuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHtcbiAgTElWRV9MQU1CREFfRE9DS0VSX1RBRyxcbiAgTElWRV9MQU1CREFfVEFHLFxuICBTU01fQkFTRV9QQVRILFxufSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzLmpzXCJcbmltcG9ydCB7XG4gIGdldERvY2tlckNvbnRleHRQYXRoLFxuICBpc0RvY2tlckltYWdlRnVuY3Rpb24sXG59IGZyb20gXCIuL2RvY2tlci1mdW5jdGlvbi1ob29rLmpzXCJcbmltcG9ydCB7IGdldEVudHJ5UGF0aCwgZ2V0SGFuZGxlck5hbWUgfSBmcm9tIFwiLi9ub2RlanMtZnVuY3Rpb24taG9vay5qc1wiXG5cbi8vIFJlZ2V4IHRvIHN0cmlwIGZpbGUgZXh0ZW5zaW9uIGZyb20gZW50cnkgcGF0aFxuY29uc3QgRVhURU5TSU9OX1JFR0VYID0gL1xcLih0c3xqc3xtanN8Y2pzfG10c3xjdHMpJC9cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBMaXZlTGFtYmRhQXNwZWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZUxhbWJkYUFzcGVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBzdGFjayBuYW1lIHRvIHVzZSBmb3IgY2hhbm5lbCByb3V0aW5nLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHVzZXMgdGhlIHN0YWNrIG5hbWUgZnJvbSB0aGUgZnVuY3Rpb24ncyBzdGFjay5cbiAgICovXG4gIHN0YWNrTmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogUGF0dGVybiB0byBtYXRjaCBmdW5jdGlvbiBjb25zdHJ1Y3QgSURzIHRvIHRyYW5zZm9ybS5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBhbGwgTGFtYmRhIGZ1bmN0aW9ucyBhcmUgdHJhbnNmb3JtZWQuXG4gICAqL1xuICBmdW5jdGlvblBhdHRlcm4/OiBSZWdFeHBcblxuICAvKipcbiAgICogT3B0aW9uYWw6IEZ1bmN0aW9uIGNvbnN0cnVjdCBJRHMgdG8gZXhjbHVkZSBmcm9tIHRyYW5zZm9ybWF0aW9uLlxuICAgKi9cbiAgZXhjbHVkZUZ1bmN0aW9ucz86IHN0cmluZ1tdXG59XG5cbi8qKlxuICogQ0RLIEFzcGVjdCB0aGF0IHRyYW5zZm9ybXMgTGFtYmRhIGZ1bmN0aW9ucyBmb3IgbGl2ZSBkZWJ1Z2dpbmcuXG4gKlxuICogVXNhZ2UgaW4gYmluL2FwcC50czpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG4gKiBjb25zdCBzdGFjayA9IG5ldyBNeVN0YWNrKGFwcCwgJ015U3RhY2snKTtcbiAqXG4gKiBpZiAocHJvY2Vzcy5lbnYuQ0RLX0xJVkUgPT09ICd0cnVlJykge1xuICogICBjZGsuQXNwZWN0cy5vZihhcHApLmFkZChuZXcgTGl2ZUxhbWJkYUFzcGVjdCgpKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgTGl2ZUxhbWJkYUFzcGVjdCBpbXBsZW1lbnRzIGNkay5JQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogTGl2ZUxhbWJkYUFzcGVjdFByb3BzXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc2VkRnVuY3Rpb25zOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBMaXZlTGFtYmRhQXNwZWN0UHJvcHMgPSB7fSkge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wc1xuICB9XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBMYW1iZGEgRnVuY3Rpb24gdXNpbmcgZHVjay10eXBpbmcgaW5zdGVhZCBvZiBpbnN0YW5jZW9mXG4gICAgLy8gVGhpcyBhdm9pZHMgaXNzdWVzIHdpdGggbXVsdGlwbGUgY29waWVzIG9mIGF3cy1jZGstbGliIGJlaW5nIGxvYWRlZFxuICAgIGlmICghdGhpcy5pc0xhbWJkYUZ1bmN0aW9uKG5vZGUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDYXN0IHRvIGxhbWJkYS5GdW5jdGlvbiBmb3IgdHlwZSBjaGVja2luZyAod2UndmUgdmVyaWZpZWQgaXQncyBhIExhbWJkYSlcbiAgICBjb25zdCBmbiA9IG5vZGUgYXMgdW5rbm93biBhcyBsYW1iZGEuRnVuY3Rpb25cblxuICAgIC8vIFNraXAgaWYgYWxyZWFkeSBwcm9jZXNzZWQgKGFzcGVjdHMgY2FuIHZpc2l0IG11bHRpcGxlIHRpbWVzKVxuICAgIGNvbnN0IG5vZGVJZCA9IG5vZGUubm9kZS5hZGRyXG4gICAgaWYgKHRoaXMucHJvY2Vzc2VkRnVuY3Rpb25zLmhhcyhub2RlSWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBmdW5jdGlvbiBJRCBmcm9tIHRoZSBjb25zdHJ1Y3QgcGF0aFxuICAgIGNvbnN0IGZ1bmN0aW9uSWQgPSB0aGlzLmdlbmVyYXRlRnVuY3Rpb25JZChmbilcblxuICAgIC8vIENoZWNrIGV4Y2x1c2lvbiBsaXN0XG4gICAgaWYgKHRoaXMucHJvcHMuZXhjbHVkZUZ1bmN0aW9ucz8uaW5jbHVkZXMoZnVuY3Rpb25JZCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbTGl2ZUxhbWJkYV0gU2tpcHBpbmcgZXhjbHVkZWQgZnVuY3Rpb246ICR7ZnVuY3Rpb25JZH1gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgcGF0dGVybiBtYXRjaFxuICAgIGlmIChcbiAgICAgIHRoaXMucHJvcHMuZnVuY3Rpb25QYXR0ZXJuICYmXG4gICAgICAhdGhpcy5wcm9wcy5mdW5jdGlvblBhdHRlcm4udGVzdChmdW5jdGlvbklkKVxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coYFtMaXZlTGFtYmRhXSBTa2lwcGluZyBub24tbWF0Y2hpbmcgZnVuY3Rpb246ICR7ZnVuY3Rpb25JZH1gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coYFtMaXZlTGFtYmRhXSBUcmFuc2Zvcm1pbmcgZnVuY3Rpb246ICR7ZnVuY3Rpb25JZH1gKVxuXG4gICAgY29uc3Qgc3RhY2tOYW1lID0gdGhpcy5wcm9wcy5zdGFja05hbWUgfHwgY2RrLlN0YWNrLm9mKGZuKS5zdGFja05hbWVcblxuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBEb2NrZXJJbWFnZUZ1bmN0aW9uXG4gICAgY29uc3QgaXNEb2NrZXJGdW5jdGlvbiA9IGlzRG9ja2VySW1hZ2VGdW5jdGlvbihmbilcblxuICAgIGlmIChpc0RvY2tlckZ1bmN0aW9uKSB7XG4gICAgICBjb25zb2xlLmxvZyhgW0xpdmVMYW1iZGFdIERldGVjdGVkIERvY2tlckltYWdlRnVuY3Rpb246ICR7ZnVuY3Rpb25JZH1gKVxuICAgICAgdGhpcy50cmFuc2Zvcm1Eb2NrZXJGdW5jdGlvbihmbiwgc3RhY2tOYW1lLCBmdW5jdGlvbklkKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBHZXQgaGFuZGxlciBwYXRocyBiZWZvcmUgd2UgbW9kaWZ5IGFueXRoaW5nXG4gICAgICBjb25zdCBoYW5kbGVyUGF0aHMgPSB0aGlzLmdldEhhbmRsZXJQYXRocyhmbilcblxuICAgICAgLy8gU2tpcCB1bnN1cHBvcnRlZCBmdW5jdGlvbnMgKG5vdCBOb2RlanNGdW5jdGlvbiBvciBEb2NrZXJJbWFnZUZ1bmN0aW9uKVxuICAgICAgaWYgKCFoYW5kbGVyUGF0aHMpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgb3JpZ2luYWxIYW5kbGVyLCBsb2NhbEhhbmRsZXIgfSA9IGhhbmRsZXJQYXRoc1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gdGhlIGZ1bmN0aW9uXG4gICAgICB0aGlzLnRyYW5zZm9ybUZ1bmN0aW9uKFxuICAgICAgICBmbixcbiAgICAgICAgc3RhY2tOYW1lLFxuICAgICAgICBmdW5jdGlvbklkLFxuICAgICAgICBvcmlnaW5hbEhhbmRsZXIsXG4gICAgICAgIGxvY2FsSGFuZGxlcixcbiAgICAgIClcbiAgICB9XG5cbiAgICB0aGlzLnByb2Nlc3NlZEZ1bmN0aW9ucy5hZGQobm9kZUlkKVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgY29uc3RydWN0IGlzIGEgTGFtYmRhIEZ1bmN0aW9uIHVzaW5nIGR1Y2stdHlwaW5nLlxuICAgKiBUaGlzIGF2b2lkcyBpbnN0YW5jZW9mIGlzc3VlcyB3aGVuIG11bHRpcGxlIGNvcGllcyBvZiBhd3MtY2RrLWxpYiBhcmUgbG9hZGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0xhbWJkYUZ1bmN0aW9uKG5vZGU6IElDb25zdHJ1Y3QpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBieSBjb25zdHJ1Y3RvciBuYW1lIC0gaGFuZGxlcyBGdW5jdGlvbiwgRG9ja2VySW1hZ2VGdW5jdGlvbiwgTm9kZWpzRnVuY3Rpb24sIGV0Yy5cbiAgICAvLyBBbHNvIGhhbmRsZXMgb3VyIHBhdGNoZWQgdmVyc2lvbnMgbGlrZSBEb2NrZXJJbWFnZUZ1bmN0aW9uV2l0aENhcHR1cmVcbiAgICBjb25zdCBjb25zdHJ1Y3Rvck5hbWUgPSBub2RlLmNvbnN0cnVjdG9yLm5hbWVcbiAgICAvLyBDREsgYXBwZW5kcyBcIjJcIiB0byBjbGFzcyBuYW1lcyBpbiBzb21lIHZlcnNpb25zXG4gICAgY29uc3QgaXNGdW5jdGlvbiA9XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUgPT09IFwiRnVuY3Rpb25cIiB8fFxuICAgICAgY29uc3RydWN0b3JOYW1lID09PSBcIkZ1bmN0aW9uMlwiIHx8XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUuZW5kc1dpdGgoXCJGdW5jdGlvblwiKSB8fFxuICAgICAgY29uc3RydWN0b3JOYW1lLmVuZHNXaXRoKFwiRnVuY3Rpb24yXCIpIHx8XG4gICAgICBjb25zdHJ1Y3Rvck5hbWUuaW5jbHVkZXMoXCJGdW5jdGlvblwiKSAvLyBDYXRjaCBwYXRjaGVkIHZlcnNpb25zIGxpa2UgRG9ja2VySW1hZ2VGdW5jdGlvbldpdGhDYXB0dXJlXG5cbiAgICBpZiAoIWlzRnVuY3Rpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIEV4Y2x1ZGUgQ2ZuRnVuY3Rpb24gKHRoZSBMMSBjb25zdHJ1Y3QpXG4gICAgaWYgKGNvbnN0cnVjdG9yTmFtZSA9PT0gXCJDZm5GdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBWZXJpZnkgaXQgaGFzIGV4cGVjdGVkIExhbWJkYSBGdW5jdGlvbiBwcm9wZXJ0aWVzXG4gICAgY29uc3QgbWF5YmVGdW5jdGlvbiA9IG5vZGUgYXMgdW5rbm93biBhcyB7XG4gICAgICBmdW5jdGlvbk5hbWU/OiB1bmtub3duXG4gICAgICBmdW5jdGlvbkFybj86IHVua25vd25cbiAgICAgIG5vZGU/OiB7IGRlZmF1bHRDaGlsZD86IHVua25vd24gfVxuICAgIH1cblxuICAgIC8vIE11c3QgaGF2ZSBmdW5jdGlvbk5hbWUgYW5kIGZ1bmN0aW9uQXJuIChJRnVuY3Rpb24gaW50ZXJmYWNlKVxuICAgIGlmICghbWF5YmVGdW5jdGlvbi5mdW5jdGlvbk5hbWUgfHwgIW1heWJlRnVuY3Rpb24uZnVuY3Rpb25Bcm4pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIC8vIE11c3QgaGF2ZSBhIGRlZmF1bHRDaGlsZCAodGhlIENmbkZ1bmN0aW9uKVxuICAgIGlmICghbWF5YmVGdW5jdGlvbi5ub2RlPy5kZWZhdWx0Q2hpbGQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlRnVuY3Rpb25JZChmbjogbGFtYmRhLkZ1bmN0aW9uKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgdGhlIGNvbnN0cnVjdCBJRCBhcyB0aGUgZnVuY3Rpb24gSURcbiAgICAvLyBGb3IgbmVzdGVkIGNvbnN0cnVjdHMsIGpvaW4gd2l0aCBkYXNoZXNcbiAgICBjb25zdCBwYXJ0cyA9IGZuLm5vZGUucGF0aC5zcGxpdChcIi9cIilcbiAgICAvLyBTa2lwIGZpcnN0IHBhcnQgKEFwcCkgYW5kIHRha2UgdGhlIHJlc3RcbiAgICBjb25zdCByZWxldmFudFBhcnRzID0gcGFydHMuc2xpY2UoMSlcbiAgICByZXR1cm4gcmVsZXZhbnRQYXJ0cy5qb2luKFwiLVwiKS5yZXBsYWNlKC9bXmEtekEtWjAtOS1dL2csIFwiLVwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBoYW5kbGVyIHBhdGhzIGZvciBhIGZ1bmN0aW9uLlxuICAgKiBSZXR1cm5zIGJvdGggdGhlIG9yaWdpbmFsIGhhbmRsZXIgKGFzIHNldCBpbiBDZm5GdW5jdGlvbikgYW5kIHRoZSBsb2NhbCBoYW5kbGVyIHBhdGguXG4gICAqIFJldHVybnMgbnVsbCBpZiB0aGUgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCAoZS5nLiwgbm90IGEgTm9kZWpzRnVuY3Rpb24pLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRIYW5kbGVyUGF0aHMoZm46IGxhbWJkYS5GdW5jdGlvbik6IHtcbiAgICBvcmlnaW5hbEhhbmRsZXI6IHN0cmluZ1xuICAgIGxvY2FsSGFuZGxlcjogc3RyaW5nXG4gIH0gfCBudWxsIHtcbiAgICBjb25zdCBjZm5GdW5jdGlvbiA9IGZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvblxuICAgIGNvbnN0IG9yaWdpbmFsSGFuZGxlciA9IGNmbkZ1bmN0aW9uLmhhbmRsZXIgfHwgXCJpbmRleC5oYW5kbGVyXCJcbiAgICBjb25zdCBjb25zdHJ1Y3RJZCA9IGZuLm5vZGUuaWRcblxuICAgIC8vIENoZWNrIGlmIGNhcHR1cmVkIGJ5IHRoZSBOb2RlanNGdW5jdGlvbiBob29rXG4gICAgY29uc3QgZW50cnlQYXRoID0gZ2V0RW50cnlQYXRoKGZuKVxuICAgIGNvbnN0IGhhbmRsZXJOYW1lID0gZ2V0SGFuZGxlck5hbWUoZm4pIHx8IFwiaGFuZGxlclwiXG4gICAgaWYgKGVudHJ5UGF0aCkge1xuICAgICAgLy8gQ29udmVydCBlbnRyeSBwYXRoIHRvIGxvY2FsIGhhbmRsZXIgcGF0aFxuICAgICAgLy8gZS5nLiwgXCJmdW5jdGlvbnMvczMtd3JpdGVyL2hhbmRsZXIudHNcIiArIFwiaGFuZGxlclwiIC0+IFwiZnVuY3Rpb25zL3MzLXdyaXRlci9oYW5kbGVyLmhhbmRsZXJcIlxuICAgICAgY29uc3QgbG9jYWxIYW5kbGVyID0gYCR7ZW50cnlQYXRoLnJlcGxhY2UoRVhURU5TSU9OX1JFR0VYLCBcIlwiKX0uJHtoYW5kbGVyTmFtZX1gXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFtMaXZlTGFtYmRhXSBVc2luZyBjYXB0dXJlZCBlbnRyeSBmb3IgJHtjb25zdHJ1Y3RJZH06ICR7bG9jYWxIYW5kbGVyfWAsXG4gICAgICApXG4gICAgICByZXR1cm4geyBvcmlnaW5hbEhhbmRsZXIsIGxvY2FsSGFuZGxlciB9XG4gICAgfVxuXG4gICAgLy8gTm8gaGFuZGxlciBwYXRoIGZvdW5kIC0gdGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIChub3QgYSBOb2RlanNGdW5jdGlvbiBvciBEb2NrZXJJbWFnZUZ1bmN0aW9uKVxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYFtMaXZlTGFtYmRhXSBTa2lwcGluZyB1bnN1cHBvcnRlZCBmdW5jdGlvbiBcIiR7Y29uc3RydWN0SWR9XCI6IGAgK1xuICAgICAgICBgbm90IGEgTm9kZWpzRnVuY3Rpb24gb3IgRG9ja2VySW1hZ2VGdW5jdGlvbiAob3IgYm9vdHN0cmFwIGhvb2sgd2FzIG5vdCBpbnN0YWxsZWQgZWFybHkgZW5vdWdoKWAsXG4gICAgKVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtIGEgRG9ja2VySW1hZ2VGdW5jdGlvbiB0byB1c2UgdGhlIGJyaWRnZSBEb2NrZXIgaW1hZ2UuXG4gICAqIFN0b3JlcyB0aGUgbG9jYWwgRG9ja2VyIGNvbnRleHQgcGF0aCBpbiBhIHRhZyBmb3IgdGhlIGRhZW1vbiB0byBidWlsZC9ydW4gbG9jYWxseS5cbiAgICovXG4gIHByaXZhdGUgdHJhbnNmb3JtRG9ja2VyRnVuY3Rpb24oXG4gICAgZm46IGxhbWJkYS5GdW5jdGlvbixcbiAgICBfc3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgZnVuY3Rpb25JZDogc3RyaW5nLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjZm5GdW5jdGlvbiA9IGZuLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvblxuICAgIGNvbnN0IHN0YWNrID0gY2RrLlN0YWNrLm9mKGZuKVxuXG4gICAgLy8gR2V0IHRoZSBkb2NrZXIgY29udGV4dCBwYXRoIGZyb20gdGhlIGhvb2tcbiAgICBjb25zdCBkb2NrZXJDb250ZXh0UGF0aCA9IGdldERvY2tlckNvbnRleHRQYXRoKGZuKVxuICAgIGlmICghZG9ja2VyQ29udGV4dFBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFtMaXZlTGFtYmRhXSBObyBkb2NrZXIgY29udGV4dCBwYXRoIGZvciBcIiR7ZnVuY3Rpb25JZH1cIi4gYCArXG4gICAgICAgICAgYFRoZSBib290c3RyYXAgaG9vayB3YXMgbm90IGluc3RhbGxlZCBlYXJseSBlbm91Z2guIGAgK1xuICAgICAgICAgIGBGaXg6IGltcG9ydCBcImNkay1sb2NhbC1sYW1iZGEvYm9vdHN0cmFwXCIgYmVmb3JlIGFueSBDREsgaW1wb3J0cyAoTm9kZS5qcyksIGAgK1xuICAgICAgICAgIGBvciBydW4gQnVuIHdpdGggXCJidW4gLS1wcmVsb2FkIGNkay1sb2NhbC1sYW1iZGEvYm9vdHN0cmFwXCIuYCxcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBHZXQgU1NNIHBhcmFtZXRlcnNcbiAgICBjb25zdCBib290c3RyYXBRdWFsaWZpZXIgPVxuICAgICAgc3RhY2subm9kZS50cnlHZXRDb250ZXh0KFwiQGF3cy1jZGsvY29yZTpib290c3RyYXBRdWFsaWZpZXJcIikgfHxcbiAgICAgIFwiaG5iNjU5ZmRzXCJcbiAgICBjb25zdCBzc21CYXNlUGF0aCA9IGAke1NTTV9CQVNFX1BBVEh9LyR7Ym9vdHN0cmFwUXVhbGlmaWVyfWBcblxuICAgIGNvbnN0IGFwaUFybiA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICBzdGFjayxcbiAgICAgIGAke3NzbUJhc2VQYXRofS9hcGktYXJuYCxcbiAgICApXG5cbiAgICAvLyBEZXRlcm1pbmUgYXJjaGl0ZWN0dXJlIGFuZCBnZXQgYXBwcm9wcmlhdGUgYnJpZGdlIGltYWdlXG4gICAgY29uc3QgYXJjaGl0ZWN0dXJlID0gdGhpcy5nZXRBcmNoaXRlY3R1cmUoY2ZuRnVuY3Rpb24pXG4gICAgY29uc3QgYnJpZGdlSW1hZ2VQYXJhbSA9XG4gICAgICBhcmNoaXRlY3R1cmUgPT09IFwiYXJtNjRcIiA/IFwiYnJpZGdlLWltYWdlLWFybTY0XCIgOiBcImJyaWRnZS1pbWFnZS14ODZfNjRcIlxuXG4gICAgY29uc3QgYnJpZGdlSW1hZ2VVcmkgPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgc3RhY2ssXG4gICAgICBgJHtzc21CYXNlUGF0aH0vJHticmlkZ2VJbWFnZVBhcmFtfWAsXG4gICAgKVxuXG4gICAgLy8gQWRkIHRhZyB3aXRoIGRvY2tlciBjb250ZXh0IHBhdGggZm9yIGRhZW1vbiBkaXNjb3ZlcnlcbiAgICAvLyBUaGUgZGFlbW9uIHVzZXMgdGhpcyB0YWcgdG8gYnVpbGQgYW5kIHJ1biB0aGUgY29udGFpbmVyIGxvY2FsbHlcbiAgICBjZm5GdW5jdGlvbi50YWdzLnNldFRhZyhMSVZFX0xBTUJEQV9ET0NLRVJfVEFHLCBkb2NrZXJDb250ZXh0UGF0aClcblxuICAgIC8vIEdyYW50IHBlcm1pc3Npb25zIHRvIHB1Ymxpc2gvc3Vic2NyaWJlIHRvIEFwcFN5bmMgRXZlbnRzXG4gICAgZm4uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRDb25uZWN0XCIsXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50UHVibGlzaFwiLFxuICAgICAgICAgIFwiYXBwc3luYzpFdmVudFN1YnNjcmliZVwiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFthcGlBcm4sIGAke2FwaUFybn0vKmBdLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgLy8gR3JhbnQgcGVybWlzc2lvbnMgdG8gcmVhZCBTU00gcGFyYW1ldGVycyAoYnJpZGdlIG5lZWRzIEFwcFN5bmMgZW5kcG9pbnRzKVxuICAgIGZuLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJzc206R2V0UGFyYW1ldGVyXCIsIFwic3NtOkdldFBhcmFtZXRlcnNcIl0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGBhcm46YXdzOnNzbToke3N0YWNrLnJlZ2lvbn06JHtzdGFjay5hY2NvdW50fTpwYXJhbWV0ZXIke3NzbUJhc2VQYXRofS8qYCxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIC8vIEluY3JlYXNlIHRpbWVvdXQgdG8gYWxsb3cgZm9yIGxvY2FsIGRlYnVnZ2luZ1xuICAgIGNmbkZ1bmN0aW9uLnRpbWVvdXQgPSAzMDAgLy8gNSBtaW51dGVzXG5cbiAgICAvLyBSZXBsYWNlIHRoZSBEb2NrZXIgaW1hZ2Ugd2l0aCB0aGUgYnJpZGdlIGltYWdlXG4gICAgY2ZuRnVuY3Rpb24uY29kZSA9IHtcbiAgICAgIGltYWdlVXJpOiBicmlkZ2VJbWFnZVVyaSxcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBbTGl2ZUxhbWJkYV0gUmVwbGFjZWQgRG9ja2VyIGltYWdlIHdpdGggYnJpZGdlICgke2FyY2hpdGVjdHVyZX0pYCxcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBhcmNoaXRlY3R1cmUgb2YgYSBMYW1iZGEgZnVuY3Rpb24uXG4gICAqIERlZmF1bHRzIHRvIHg4Nl82NCBpZiBub3QgZXhwbGljaXRseSBzZXQuXG4gICAqL1xuICBwcml2YXRlIGdldEFyY2hpdGVjdHVyZShjZm5GdW5jdGlvbjogbGFtYmRhLkNmbkZ1bmN0aW9uKTogXCJhcm02NFwiIHwgXCJ4ODZfNjRcIiB7XG4gICAgY29uc3QgYXJjaGl0ZWN0dXJlcyA9IGNmbkZ1bmN0aW9uLmFyY2hpdGVjdHVyZXMgYXMgc3RyaW5nW10gfCB1bmRlZmluZWRcbiAgICBpZiAoYXJjaGl0ZWN0dXJlcz8uaW5jbHVkZXMoXCJhcm02NFwiKSkge1xuICAgICAgcmV0dXJuIFwiYXJtNjRcIlxuICAgIH1cbiAgICByZXR1cm4gXCJ4ODZfNjRcIlxuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1GdW5jdGlvbihcbiAgICBmbjogbGFtYmRhLkZ1bmN0aW9uLFxuICAgIF9zdGFja05hbWU6IHN0cmluZyxcbiAgICBfZnVuY3Rpb25JZDogc3RyaW5nLFxuICAgIF9vcmlnaW5hbEhhbmRsZXI6IHN0cmluZyxcbiAgICBsb2NhbEhhbmRsZXI6IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY2ZuRnVuY3Rpb24gPSBmbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb25cbiAgICBjb25zdCBzdGFjayA9IGNkay5TdGFjay5vZihmbilcblxuICAgIC8vIFJlYWQgdmFsdWVzIGZyb20gU1NNIHBhcmFtZXRlcnMgKGNyZWF0ZWQgYnkgYm9vdHN0cmFwIHN0YWNrKVxuICAgIC8vIFVzZSB0aGUgQ0RLIGJvb3RzdHJhcCBxdWFsaWZpZXIgZm9yIHByb3BlciBzY29waW5nXG4gICAgY29uc3QgYm9vdHN0cmFwUXVhbGlmaWVyID1cbiAgICAgIHN0YWNrLm5vZGUudHJ5R2V0Q29udGV4dChcIkBhd3MtY2RrL2NvcmU6Ym9vdHN0cmFwUXVhbGlmaWVyXCIpIHx8XG4gICAgICBcImhuYjY1OWZkc1wiXG4gICAgY29uc3Qgc3NtQmFzZVBhdGggPSBgJHtTU01fQkFTRV9QQVRIfS8ke2Jvb3RzdHJhcFF1YWxpZmllcn1gXG5cbiAgICBjb25zdCBhcGlBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgc3RhY2ssXG4gICAgICBgJHtzc21CYXNlUGF0aH0vYXBpLWFybmAsXG4gICAgKVxuICAgIGNvbnN0IGJyaWRnZUJ1Y2tldCA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICBzdGFjayxcbiAgICAgIGAke3NzbUJhc2VQYXRofS9icmlkZ2UtYnVja2V0YCxcbiAgICApXG4gICAgY29uc3QgYnJpZGdlS2V5ID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHN0YWNrLFxuICAgICAgYCR7c3NtQmFzZVBhdGh9L2JyaWRnZS1rZXlgLFxuICAgIClcblxuICAgIC8vIEFkZCB0YWcgd2l0aCBsb2NhbCBoYW5kbGVyIHBhdGggZm9yIGRhZW1vbiBkaXNjb3ZlcnlcbiAgICAvLyBUaGUgZGFlbW9uIHF1ZXJpZXMgTGFtYmRhIEFQSSBmb3IgZnVuY3Rpb25zIHdpdGggdGhpcyB0YWdcbiAgICBjZm5GdW5jdGlvbi50YWdzLnNldFRhZyhMSVZFX0xBTUJEQV9UQUcsIGxvY2FsSGFuZGxlcilcblxuICAgIC8vIEdyYW50IHBlcm1pc3Npb25zIHRvIHB1Ymxpc2gvc3Vic2NyaWJlIHRvIEFwcFN5bmMgRXZlbnRzXG4gICAgZm4uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRDb25uZWN0XCIsXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50UHVibGlzaFwiLFxuICAgICAgICAgIFwiYXBwc3luYzpFdmVudFN1YnNjcmliZVwiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFthcGlBcm4sIGAke2FwaUFybn0vKmBdLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgLy8gR3JhbnQgcGVybWlzc2lvbnMgdG8gcmVhZCBTU00gcGFyYW1ldGVycyAoYnJpZGdlIG5lZWRzIEFwcFN5bmMgZW5kcG9pbnRzKVxuICAgIGZuLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJzc206R2V0UGFyYW1ldGVyXCIsIFwic3NtOkdldFBhcmFtZXRlcnNcIl0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGBhcm46YXdzOnNzbToke3N0YWNrLnJlZ2lvbn06JHtzdGFjay5hY2NvdW50fTpwYXJhbWV0ZXIke3NzbUJhc2VQYXRofS8qYCxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIC8vIEluY3JlYXNlIHRpbWVvdXQgdG8gYWxsb3cgZm9yIGxvY2FsIGRlYnVnZ2luZ1xuICAgIGNmbkZ1bmN0aW9uLnRpbWVvdXQgPSAzMDAgLy8gNSBtaW51dGVzXG5cbiAgICAvLyBSZXBsYWNlIHRoZSBjb2RlIHdpdGggYnJpZGdlIGhhbmRsZXIgZnJvbSBib290c3RyYXAgc3RhY2sncyBTMyBidWNrZXRcbiAgICBjZm5GdW5jdGlvbi5jb2RlID0ge1xuICAgICAgczNCdWNrZXQ6IGJyaWRnZUJ1Y2tldCxcbiAgICAgIHMzS2V5OiBicmlkZ2VLZXksXG4gICAgfVxuICAgIGNmbkZ1bmN0aW9uLmhhbmRsZXIgPSBcImluZGV4LmhhbmRsZXJcIlxuICB9XG59XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGxpdmUgbW9kZSBpcyBlbmFibGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xpdmVNb2RlRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LkNES19MSVZFID09PSBcInRydWVcIlxufVxuXG4vKipcbiAqIEFwcGx5IGxpdmUgbGFtYmRhIGFzcGVjdCB0byBhIENESyBhcHAgb3Igc3RhY2sgaWYgbGl2ZSBtb2RlIGlzIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHNjb3BlIFRoZSBDREsgYXBwIG9yIHN0YWNrIHRvIGFwcGx5IHRoZSBhc3BlY3QgdG9cbiAqIEBwYXJhbSBwcm9wcyBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgbGl2ZSBsYW1iZGEgYXNwZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUxpdmVMYW1iZGFBc3BlY3QoXG4gIHNjb3BlOiBJQ29uc3RydWN0LFxuICBwcm9wczogTGl2ZUxhbWJkYUFzcGVjdFByb3BzID0ge30sXG4pOiB2b2lkIHtcbiAgaWYgKCFpc0xpdmVNb2RlRW5hYmxlZCgpKSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBcIltMaXZlTGFtYmRhXSBMaXZlIG1vZGUgbm90IGVuYWJsZWQgKHNldCBDREtfTElWRT10cnVlIHRvIGVuYWJsZSlcIixcbiAgICApXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zb2xlLmxvZyhcIltMaXZlTGFtYmRhXSBMaXZlIG1vZGUgZW5hYmxlZCAtIHRyYW5zZm9ybWluZyBMYW1iZGEgZnVuY3Rpb25zXCIpXG4gIGNkay5Bc3BlY3RzLm9mKHNjb3BlKS5hZGQobmV3IExpdmVMYW1iZGFBc3BlY3QocHJvcHMpKVxufVxuIl19
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl2ZS1sYW1iZGEtYXNwZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FzcGVjdC9saXZlLWxhbWJkYS1hc3BlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sS0FBSyxHQUFHLE1BQU0sYUFBYSxDQUFBO0FBQ2xDLE9BQU8sS0FBSyxHQUFHLE1BQU0scUJBQXFCLENBQUE7QUFFMUMsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUUxQyxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGVBQWUsRUFDZixhQUFhLEdBQ2QsTUFBTSxvQkFBb0IsQ0FBQTtBQUMzQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLHFCQUFxQixHQUN0QixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUE7QUFFeEUsZ0RBQWdEO0FBQ2hELE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFBO0FBd0JwRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ1YsS0FBSyxDQUF1QjtJQUM1QixrQkFBa0IsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUU1RCxZQUFZLFFBQStCLEVBQUU7UUFDM0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFnQjtRQUNwQiw2RUFBNkU7UUFDN0Usc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFNO1FBQ1IsQ0FBQztRQUVELDJFQUEyRTtRQUMzRSxNQUFNLEVBQUUsR0FBRyxJQUFrQyxDQUFBO1FBRTdDLCtEQUErRDtRQUMvRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUM3QixJ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Q0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxLQUFpQixFQUNqQixRQUErQixFQUFFO0lBRWpDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7UUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FDVCxrRUFBa0UsQ0FDbkUsQ0FBQTtRQUNELE9BQU07SUFDUixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFBO0lBQzdFLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ0RLIEFzcGVjdCB0byB0cmFuc2Zvcm0gTGFtYmRhIGZ1bmN0aW9ucyBmb3IgbGl2ZSBkZWJ1Z2dpbmdcbiAqXG4gKiBXaGVuIGFwcGxpZWQgdG8gYSBDREsgYXBwL3N0YWNrLCB0aGlzIGFzcGVjdDpcbiAqIDEuIFJlcGxhY2VzIExhbWJkYSBjb2RlIHdpdGggdGhlIGJyaWRnZSBoYW5kbGVyIGZyb20gdGhlIGJvb3RzdHJhcCBzdGFjaydzIFMzIGJ1Y2tldFxuICogMi4gR3JhbnRzIElBTSBwZXJtaXNzaW9ucyBmb3IgQXBwU3luYyBFdmVudHNcbiAqIDMuIEFkZHMgYSB0YWcgd2l0aCB0aGUgbG9jYWwgaGFuZGxlciBwYXRoIGZvciB0aGUgZGFlbW9uIHRvIGRpc2NvdmVyXG4gKlxuICogVGhlIGJyaWRnZSB1c2VzIEFXU19MQU1CREFfRlVOQ1RJT05fTkFNRSAoYXV0by1pbmplY3RlZCBieSBMYW1iZGEpIGZvciBjaGFubmVsIHJvdXRpbmcuXG4gKiBUaGUgZGFlbW9uIGRpc2NvdmVycyBmdW5jdGlvbnMgYnkgcXVlcnlpbmcgTGFtYmRhIEFQSSBmb3IgZnVuY3Rpb25zIHdpdGggdGhlIGxpdmUtbGFtYmRhIHRhZy5cbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgdHlwZSAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiXG5pbXBvcnQgKiBhcyBzc20gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zc21cIlxuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIlxuaW1wb3J0IHtcbiAgTElWRV9MQU1CREFfRE9DS0VSX1RBRyxcbiAgTElWRV9MQU1CREFfVEFHLFxuICBTU01fQkFTRV9QQVRILFxufSBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzLmpzXCJcbmltcG9ydCB7XG4gIGdldERvY2tlckNvbnRleHRQYXRoLFxuICBpc0RvY2tlckltYWdlRnVuY3Rpb24sXG59IGZyb20gXCIuL2RvY2tlci1mdW5jdGlvbi1ob29rLmpzXCJcbmltcG9ydCB7IGdldEVudHJ5UGF0aCwgZ2V0SGFuZGxlck5hbWUgfSBmcm9tIFwiLi9ub2RlanMtZnVuY3Rpb24taG9vay5qc1wiXG5cbi8vIFJlZ2V4IHRvIHN0cmlwIGZpbGUgZXh0ZW5zaW9uIGZyb20gZW50cnkgcGF0aFxuY29uc3QgRVhURU5TSU9OX1JFR0VYID0gL1xcLih0c3xqc3xtanN8Y2pzfG10c3xjdHMpJC9cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBMaXZlTGFtYmRhQXNwZWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZUxhbWJkYUFzcGVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBzdGFjayBuYW1lIHRvIHVzZSBmb3IgY2hhbm5lbCByb3V0aW5nLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHVzZXMgdGhlIHN0YWNrIG5hbWUgZnJvbSB0aGUgZnVuY3Rpb24ncyBzdGFjay5cbiAgICovXG4gIHN0YWNrTmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogUGF0dGVybiB0byBtYXRjaCBmdW5jdGlvbiBjb25zdHJ1Y3QgSURzIHRvIHRyYW5zZm9ybS5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBhbGwgTGFtYmRhIGZ1bmN0aW9ucyBhcmUgdHJhbnNmb3JtZWQuXG4gICAqL1xuICBmdW5jdGlvblBhdHRlcm4/OiBSZWdFeHBcblxuICAvKipcbiAgICogT3B0aW9uYWw6IEZ1bmN0aW9uIGNvbnN0cnVjdCBJRHMgdG8gZXhjbHVkZSBmcm9tIHRyYW5zZm9ybWF0aW9uLlxuICAgKi9cbiAgZXhjbHVkZUZ1bmN0aW9ucz86IHN0cmluZ1tdXG59XG5cbi8qKlxuICogQ0RLIEFzcGVjdCB0aGF0IHRyYW5zZm9ybXMgTGFtYmRhIGZ1bmN0aW9ucyBmb3IgbGl2ZSBkZWJ1Z2dpbmcuXG4gKlxuICogVXNhZ2UgaW4gYmluL2FwcC50czpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG4gKiBjb25zdCBzdGFjayA9IG5ldyBNeVN0YWNrKGFwcCwgJ015U3RhY2snKTtcbiAqXG4gKiBpZiAocHJvY2Vzcy5lbnYuQ0RLX0xJVkUgPT09ICd0cnVlJykge1xuICogICBjZGsuQXNwZWN0cy5vZihhcHApLmFkZChuZXcgTGl2ZUxhbWJkYUFzcGVjdCgpKTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgTGl2ZUxhbWJkYUFzcGVjdCBpbXBsZW1lbnRzIGNkay5JQXNwZWN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogTGl2ZUxhbWJkYUFzcGVjdFByb3BzXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc2VkRnVuY3Rpb25zOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKVxuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBMaXZlTGFtYmRhQXNwZWN0UHJvcHMgPSB7fSkge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wc1xuICB9XG5cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBMYW1iZGEgRnVuY3Rpb24gdXNpbmcgZHVjay10eXBpbmcgaW5zdGVhZCBvZiBpbnN0YW5jZW9mXG4gICAgLy8gVGhpcyBhdm9pZHMgaXNzdWVzIHdpdGggbXVsdGlwbGUgY29waWVzIG9mIGF3cy1jZGstbGliIGJlaW5nIGxvYWRlZFxuICAgIGlmICghdGhpcy5pc0xhbWJkYUZ1bmN0aW9uKG5vZGUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDYXN0IHRvIGxhbWJkYS5GdW5jdGlvbiBmb3IgdHlwZSBjaGVja2luZyAod2UndmUgdmVyaWZpZWQgaXQncyBhIExhbWJkYSlcbiAgICBjb25zdCBmbiA9IG5vZGUgYXMgdW5rbm93biBhcyBsYW1iZGEuRnVuY3Rpb25cblxuICAgIC8vIFNraXAgaWYgYWxyZWFkeSBwcm9jZXNzZWQgKGFzcGVjdHMgY2FuIHZpc2l0IG11bHRpcGxlIHRpbWVzKVxuICAgIGNvbnN0IG5vZGVJZCA9IG5vZGUubm9kZS5hZGRyXG4gICAgaWYgKHRoaXMucHJvY2Vzc2VkRnVuY3Rpb25zLmhhcyhub2RlSWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBmdW5jdGlvbiBJRCBmcm9tIHRoZSBjb25zdHJ1Y3QgcGF0aFxuICAgIGNvbnN0IGZ1bmN0aW9uSWQgPSB0aGlzLmdlbmVyYXRlRnVuY3Rpb25JZChmbilcblxuICAgIC8vIENoZWNrIGV4Y2x1c2lvbiBsaXN0XG4gICAgaWYgKHRoaXMucHJvcHMuZXhjbHVkZUZ1bmN0aW9ucz8uaW5jbHVkZXMoZnVuY3Rpb25JZCkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbTGl2ZUxhbWJkYV0gU2tpcHBpbmcgZXhjbHVkZWQgZnVuY3Rpb246ICR7ZnVuY3Rpb25JZH1gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgcGF0dGVybiBtYXRjaFxuICAgIGlmIChcbiAgICAgIHRoaXMucHJvcHMuZnVuY3Rpb25QYXR0ZXJuICYmXG4gICAgICAhdGhpcy5wcm9wcy5mdW5jdGlvblBhdHRlcm4udGVzdChmdW5jdGlvbklkKVxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coYFtMaXZlTGFtYmRhXSBTa2lwcGluZyBub24tbWF0Y2hpbmcgZnVuY3Rpb246ICR7ZnVuY3Rpb25JZH1gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhY2tOYW1lID0gdGhpcy5wcm9wcy5zdGFja05hbWUgfHwgY2RrLlN0YWNrLm9mKGZuKS5zdGFja05hbWVcblxuICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSBEb2NrZXJJbWFnZUZ1bmN0aW9uXG4gICAgY29uc3QgaXNEb2NrZXJGdW5jdGlvbiA9IGlzRG9ja2VySW1hZ2VGdW5jdGlvbihmbilcblxuICAgIGlmIChpc0RvY2tlckZ1bmN0aW9uKSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFtMaXZlTGFtYmRhXSBUcmFuc2Zvcm1pbmcgRG9ja2VySW1hZ2VGdW5jdGlvbjogJHtmdW5jdGlvbklkfWAsXG4gICAgICApXG4gICAgICB0aGlzLnRyYW5zZm9ybURvY2tlckZ1bmN0aW9uKGZuLCBzdGFja05hbWUsIGZ1bmN0aW9uSWQpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdldCBoYW5kbGVyIHBhdGhzIGJlZm9yZSB3ZSBtb2RpZnkgYW55dGhpbmdcbiAgICAgIGNvbnN0IGhhbmRsZXJQYXRocyA9IHRoaXMuZ2V0SGFuZGxlclBhdGhzKGZuKVxuXG4gICAgICAvLyBTa2lwIHVuc3VwcG9ydGVkIGZ1bmN0aW9ucyAobm90IE5vZGVqc0Z1bmN0aW9uIG9yIERvY2tlckltYWdlRnVuY3Rpb24pXG4gICAgICBpZiAoIWhhbmRsZXJQYXRocykge1xuICAgICAgICB0aGlzLnByb2Nlc3NlZEZ1bmN0aW9ucy5hZGQobm9kZUlkKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBvcmlnaW5hbEhhbmRsZXIsIGxvY2FsSGFuZGxlciB9ID0gaGFuZGxlclBhdGhzXG5cbiAgICAgIGNvbnNvbGUubG9nKGBbTGl2ZUxhbWJkYV0gVHJhbnNmb3JtaW5nIGZ1bmN0aW9uOiAke2Z1bmN0aW9uSWR9YClcblxuICAgICAgLy8gVHJhbnNmb3JtIHRoZSBmdW5jdGlvblxuICAgICAgdGhpcy50cmFuc2Zvcm1GdW5jdGlvbihcbiAgICAgICAgZm4sXG4gICAgICAgIHN0YWNrTmFtZSxcbiAgICAgICAgZnVuY3Rpb25JZCxcbiAgICAgICAgb3JpZ2luYWxIYW5kbGVyLFxuICAgICAgICBsb2NhbEhhbmRsZXIsXG4gICAgICApXG4gICAgfVxuXG4gICAgdGhpcy5wcm9jZXNzZWRGdW5jdGlvbnMuYWRkKG5vZGVJZClcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGNvbnN0cnVjdCBpcyBhIExhbWJkYSBGdW5jdGlvbiB1c2luZyBkdWNrLXR5cGluZy5cbiAgICogVGhpcyBhdm9pZHMgaW5zdGFuY2VvZiBpc3N1ZXMgd2hlbiBtdWx0aXBsZSBjb3BpZXMgb2YgYXdzLWNkay1saWIgYXJlIGxvYWRlZC5cbiAgICovXG4gIHByaXZhdGUgaXNMYW1iZGFGdW5jdGlvbihub2RlOiBJQ29uc3RydWN0KTogYm9vbGVhbiB7XG4gICAgLy8gQ2hlY2sgYnkgY29uc3RydWN0b3IgbmFtZSAtIGhhbmRsZXMgRnVuY3Rpb24sIERvY2tlckltYWdlRnVuY3Rpb24sIE5vZGVqc0Z1bmN0aW9uLCBldGMuXG4gICAgLy8gQWxzbyBoYW5kbGVzIG91ciBwYXRjaGVkIHZlcnNpb25zIGxpa2UgRG9ja2VySW1hZ2VGdW5jdGlvbldpdGhDYXB0dXJlXG4gICAgY29uc3QgY29uc3RydWN0b3JOYW1lID0gbm9kZS5jb25zdHJ1Y3Rvci5uYW1lXG4gICAgLy8gQ0RLIGFwcGVuZHMgXCIyXCIgdG8gY2xhc3MgbmFtZXMgaW4gc29tZSB2ZXJzaW9uc1xuICAgIGNvbnN0IGlzRnVuY3Rpb24gPVxuICAgICAgY29uc3RydWN0b3JOYW1lID09PSBcIkZ1bmN0aW9uXCIgfHxcbiAgICAgIGNvbnN0cnVjdG9yTmFtZSA9PT0gXCJGdW5jdGlvbjJcIiB8fFxuICAgICAgY29uc3RydWN0b3JOYW1lLmVuZHNXaXRoKFwiRnVuY3Rpb25cIikgfHxcbiAgICAgIGNvbnN0cnVjdG9yTmFtZS5lbmRzV2l0aChcIkZ1bmN0aW9uMlwiKSB8fFxuICAgICAgY29uc3RydWN0b3JOYW1lLmluY2x1ZGVzKFwiRnVuY3Rpb25cIikgLy8gQ2F0Y2ggcGF0Y2hlZCB2ZXJzaW9ucyBsaWtlIERvY2tlckltYWdlRnVuY3Rpb25XaXRoQ2FwdHVyZVxuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBFeGNsdWRlIENmbkZ1bmN0aW9uICh0aGUgTDEgY29uc3RydWN0KVxuICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUgPT09IFwiQ2ZuRnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gVmVyaWZ5IGl0IGhhcyBleHBlY3RlZCBMYW1iZGEgRnVuY3Rpb24gcHJvcGVydGllc1xuICAgIGNvbnN0IG1heWJlRnVuY3Rpb24gPSBub2RlIGFzIHVua25vd24gYXMge1xuICAgICAgZnVuY3Rpb25OYW1lPzogdW5rbm93blxuICAgICAgZnVuY3Rpb25Bcm4/OiB1bmtub3duXG4gICAgICBub2RlPzogeyBkZWZhdWx0Q2hpbGQ/OiB1bmtub3duIH1cbiAgICB9XG5cbiAgICAvLyBNdXN0IGhhdmUgZnVuY3Rpb25OYW1lIGFuZCBmdW5jdGlvbkFybiAoSUZ1bmN0aW9uIGludGVyZmFjZSlcbiAgICBpZiAoIW1heWJlRnVuY3Rpb24uZnVuY3Rpb25OYW1lIHx8ICFtYXliZUZ1bmN0aW9uLmZ1bmN0aW9uQXJuKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBNdXN0IGhhdmUgYSBkZWZhdWx0Q2hpbGQgKHRoZSBDZm5GdW5jdGlvbilcbiAgICBpZiAoIW1heWJlRnVuY3Rpb24ubm9kZT8uZGVmYXVsdENoaWxkKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUZ1bmN0aW9uSWQoZm46IGxhbWJkYS5GdW5jdGlvbik6IHN0cmluZyB7XG4gICAgLy8gVXNlIHRoZSBjb25zdHJ1Y3QgSUQgYXMgdGhlIGZ1bmN0aW9uIElEXG4gICAgLy8gRm9yIG5lc3RlZCBjb25zdHJ1Y3RzLCBqb2luIHdpdGggZGFzaGVzXG4gICAgY29uc3QgcGFydHMgPSBmbi5ub2RlLnBhdGguc3BsaXQoXCIvXCIpXG4gICAgLy8gU2tpcCBmaXJzdCBwYXJ0IChBcHApIGFuZCB0YWtlIHRoZSByZXN0XG4gICAgY29uc3QgcmVsZXZhbnRQYXJ0cyA9IHBhcnRzLnNsaWNlKDEpXG4gICAgcmV0dXJuIHJlbGV2YW50UGFydHMuam9pbihcIi1cIikucmVwbGFjZSgvW15hLXpBLVowLTktXS9nLCBcIi1cIilcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaGFuZGxlciBwYXRocyBmb3IgYSBmdW5jdGlvbi5cbiAgICogUmV0dXJucyBib3RoIHRoZSBvcmlnaW5hbCBoYW5kbGVyIChhcyBzZXQgaW4gQ2ZuRnVuY3Rpb24pIGFuZCB0aGUgbG9jYWwgaGFuZGxlciBwYXRoLlxuICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgKGUuZy4sIG5vdCBhIE5vZGVqc0Z1bmN0aW9uKS5cbiAgICovXG4gIHByaXZhdGUgZ2V0SGFuZGxlclBhdGhzKGZuOiBsYW1iZGEuRnVuY3Rpb24pOiB7XG4gICAgb3JpZ2luYWxIYW5kbGVyOiBzdHJpbmdcbiAgICBsb2NhbEhhbmRsZXI6IHN0cmluZ1xuICB9IHwgbnVsbCB7XG4gICAgY29uc3QgY2ZuRnVuY3Rpb24gPSBmbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb25cbiAgICBjb25zdCBvcmlnaW5hbEhhbmRsZXIgPSBjZm5GdW5jdGlvbi5oYW5kbGVyIHx8IFwiaW5kZXguaGFuZGxlclwiXG4gICAgY29uc3QgY29uc3RydWN0SWQgPSBmbi5ub2RlLmlkXG5cbiAgICAvLyBDaGVjayBpZiBjYXB0dXJlZCBieSB0aGUgTm9kZWpzRnVuY3Rpb24gaG9va1xuICAgIGNvbnN0IGVudHJ5UGF0aCA9IGdldEVudHJ5UGF0aChmbilcbiAgICBjb25zdCBoYW5kbGVyTmFtZSA9IGdldEhhbmRsZXJOYW1lKGZuKSB8fCBcImhhbmRsZXJcIlxuICAgIGlmIChlbnRyeVBhdGgpIHtcbiAgICAgIC8vIENvbnZlcnQgZW50cnkgcGF0aCB0byBsb2NhbCBoYW5kbGVyIHBhdGhcbiAgICAgIC8vIGUuZy4sIFwiZnVuY3Rpb25zL3MzLXdyaXRlci9oYW5kbGVyLnRzXCIgKyBcImhhbmRsZXJcIiAtPiBcImZ1bmN0aW9ucy9zMy13cml0ZXIvaGFuZGxlci5oYW5kbGVyXCJcbiAgICAgIGNvbnN0IGxvY2FsSGFuZGxlciA9IGAke2VudHJ5UGF0aC5yZXBsYWNlKEVYVEVOU0lPTl9SRUdFWCwgXCJcIil9LiR7aGFuZGxlck5hbWV9YFxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBbTGl2ZUxhbWJkYV0gVXNpbmcgY2FwdHVyZWQgZW50cnkgZm9yICR7Y29uc3RydWN0SWR9OiAke2xvY2FsSGFuZGxlcn1gLFxuICAgICAgKVxuICAgICAgcmV0dXJuIHsgb3JpZ2luYWxIYW5kbGVyLCBsb2NhbEhhbmRsZXIgfVxuICAgIH1cblxuICAgIC8vIE5vIGhhbmRsZXIgcGF0aCBmb3VuZCAtIHRoaXMgZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCAobm90IGEgTm9kZWpzRnVuY3Rpb24gb3IgRG9ja2VySW1hZ2VGdW5jdGlvbilcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBbTGl2ZUxhbWJkYV0gU2tpcHBpbmcgdW5zdXBwb3J0ZWQgZnVuY3Rpb24gXCIke2NvbnN0cnVjdElkfVwiOiBgICtcbiAgICAgICAgYG5vdCBhIE5vZGVqc0Z1bmN0aW9uIG9yIERvY2tlckltYWdlRnVuY3Rpb24gKG9yIGJvb3RzdHJhcCBob29rIHdhcyBub3QgaW5zdGFsbGVkIGVhcmx5IGVub3VnaClgLFxuICAgIClcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhIERvY2tlckltYWdlRnVuY3Rpb24gdG8gdXNlIHRoZSBicmlkZ2UgRG9ja2VyIGltYWdlLlxuICAgKiBTdG9yZXMgdGhlIGxvY2FsIERvY2tlciBjb250ZXh0IHBhdGggaW4gYSB0YWcgZm9yIHRoZSBkYWVtb24gdG8gYnVpbGQvcnVuIGxvY2FsbHkuXG4gICAqL1xuICBwcml2YXRlIHRyYW5zZm9ybURvY2tlckZ1bmN0aW9uKFxuICAgIGZuOiBsYW1iZGEuRnVuY3Rpb24sXG4gICAgX3N0YWNrTmFtZTogc3RyaW5nLFxuICAgIGZ1bmN0aW9uSWQ6IHN0cmluZyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY2ZuRnVuY3Rpb24gPSBmbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb25cbiAgICBjb25zdCBzdGFjayA9IGNkay5TdGFjay5vZihmbilcblxuICAgIC8vIEdldCB0aGUgZG9ja2VyIGNvbnRleHQgcGF0aCBmcm9tIHRoZSBob29rXG4gICAgY29uc3QgZG9ja2VyQ29udGV4dFBhdGggPSBnZXREb2NrZXJDb250ZXh0UGF0aChmbilcbiAgICBpZiAoIWRvY2tlckNvbnRleHRQYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBbTGl2ZUxhbWJkYV0gTm8gZG9ja2VyIGNvbnRleHQgcGF0aCBmb3IgXCIke2Z1bmN0aW9uSWR9XCIuIGAgK1xuICAgICAgICAgIGBUaGUgYm9vdHN0cmFwIGhvb2sgd2FzIG5vdCBpbnN0YWxsZWQgZWFybHkgZW5vdWdoLiBgICtcbiAgICAgICAgICBgRml4OiBpbXBvcnQgXCJjZGstbG9jYWwtbGFtYmRhL2Jvb3RzdHJhcFwiIGJlZm9yZSBhbnkgQ0RLIGltcG9ydHMgKE5vZGUuanMpLCBgICtcbiAgICAgICAgICBgb3IgcnVuIEJ1biB3aXRoIFwiYnVuIC0tcHJlbG9hZCBjZGstbG9jYWwtbGFtYmRhL2Jvb3RzdHJhcFwiLmAsXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gR2V0IFNTTSBwYXJhbWV0ZXJzXG4gICAgY29uc3QgYm9vdHN0cmFwUXVhbGlmaWVyID1cbiAgICAgIHN0YWNrLm5vZGUudHJ5R2V0Q29udGV4dChcIkBhd3MtY2RrL2NvcmU6Ym9vdHN0cmFwUXVhbGlmaWVyXCIpIHx8XG4gICAgICBcImhuYjY1OWZkc1wiXG4gICAgY29uc3Qgc3NtQmFzZVBhdGggPSBgJHtTU01fQkFTRV9QQVRIfS8ke2Jvb3RzdHJhcFF1YWxpZmllcn1gXG5cbiAgICBjb25zdCBhcGlBcm4gPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgc3RhY2ssXG4gICAgICBgJHtzc21CYXNlUGF0aH0vYXBpLWFybmAsXG4gICAgKVxuXG4gICAgLy8gRGV0ZXJtaW5lIGFyY2hpdGVjdHVyZSBhbmQgZ2V0IGFwcHJvcHJpYXRlIGJyaWRnZSBpbWFnZVxuICAgIGNvbnN0IGFyY2hpdGVjdHVyZSA9IHRoaXMuZ2V0QXJjaGl0ZWN0dXJlKGNmbkZ1bmN0aW9uKVxuICAgIGNvbnN0IGJyaWRnZUltYWdlUGFyYW0gPVxuICAgICAgYXJjaGl0ZWN0dXJlID09PSBcImFybTY0XCIgPyBcImJyaWRnZS1pbWFnZS1hcm02NFwiIDogXCJicmlkZ2UtaW1hZ2UteDg2XzY0XCJcblxuICAgIGNvbnN0IGJyaWRnZUltYWdlVXJpID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHN0YWNrLFxuICAgICAgYCR7c3NtQmFzZVBhdGh9LyR7YnJpZGdlSW1hZ2VQYXJhbX1gLFxuICAgIClcblxuICAgIC8vIEFkZCB0YWcgd2l0aCBkb2NrZXIgY29udGV4dCBwYXRoIGZvciBkYWVtb24gZGlzY292ZXJ5XG4gICAgLy8gVGhlIGRhZW1vbiB1c2VzIHRoaXMgdGFnIHRvIGJ1aWxkIGFuZCBydW4gdGhlIGNvbnRhaW5lciBsb2NhbGx5XG4gICAgY2ZuRnVuY3Rpb24udGFncy5zZXRUYWcoTElWRV9MQU1CREFfRE9DS0VSX1RBRywgZG9ja2VyQ29udGV4dFBhdGgpXG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBwdWJsaXNoL3N1YnNjcmliZSB0byBBcHBTeW5jIEV2ZW50c1xuICAgIGZuLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50Q29ubmVjdFwiLFxuICAgICAgICAgIFwiYXBwc3luYzpFdmVudFB1Ymxpc2hcIixcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRTdWJzY3JpYmVcIixcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbYXBpQXJuLCBgJHthcGlBcm59LypgXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIC8vIEdyYW50IHBlcm1pc3Npb25zIHRvIHJlYWQgU1NNIHBhcmFtZXRlcnMgKGJyaWRnZSBuZWVkcyBBcHBTeW5jIGVuZHBvaW50cylcbiAgICBmbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wic3NtOkdldFBhcmFtZXRlclwiLCBcInNzbTpHZXRQYXJhbWV0ZXJzXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpzc206JHtzdGFjay5yZWdpb259OiR7c3RhY2suYWNjb3VudH06cGFyYW1ldGVyJHtzc21CYXNlUGF0aH0vKmAsXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICAvLyBJbmNyZWFzZSB0aW1lb3V0IHRvIGFsbG93IGZvciBsb2NhbCBkZWJ1Z2dpbmdcbiAgICBjZm5GdW5jdGlvbi50aW1lb3V0ID0gMzAwIC8vIDUgbWludXRlc1xuXG4gICAgLy8gUmVwbGFjZSB0aGUgRG9ja2VyIGltYWdlIHdpdGggdGhlIGJyaWRnZSBpbWFnZVxuICAgIGNmbkZ1bmN0aW9uLmNvZGUgPSB7XG4gICAgICBpbWFnZVVyaTogYnJpZGdlSW1hZ2VVcmksXG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgW0xpdmVMYW1iZGFdIFJlcGxhY2VkIERvY2tlciBpbWFnZSB3aXRoIGJyaWRnZSAoJHthcmNoaXRlY3R1cmV9KWAsXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgYXJjaGl0ZWN0dXJlIG9mIGEgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBEZWZhdWx0cyB0byB4ODZfNjQgaWYgbm90IGV4cGxpY2l0bHkgc2V0LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBcmNoaXRlY3R1cmUoY2ZuRnVuY3Rpb246IGxhbWJkYS5DZm5GdW5jdGlvbik6IFwiYXJtNjRcIiB8IFwieDg2XzY0XCIge1xuICAgIGNvbnN0IGFyY2hpdGVjdHVyZXMgPSBjZm5GdW5jdGlvbi5hcmNoaXRlY3R1cmVzIGFzIHN0cmluZ1tdIHwgdW5kZWZpbmVkXG4gICAgaWYgKGFyY2hpdGVjdHVyZXM/LmluY2x1ZGVzKFwiYXJtNjRcIikpIHtcbiAgICAgIHJldHVybiBcImFybTY0XCJcbiAgICB9XG4gICAgcmV0dXJuIFwieDg2XzY0XCJcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRnVuY3Rpb24oXG4gICAgZm46IGxhbWJkYS5GdW5jdGlvbixcbiAgICBfc3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgX2Z1bmN0aW9uSWQ6IHN0cmluZyxcbiAgICBfb3JpZ2luYWxIYW5kbGVyOiBzdHJpbmcsXG4gICAgbG9jYWxIYW5kbGVyOiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNmbkZ1bmN0aW9uID0gZm4ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgbGFtYmRhLkNmbkZ1bmN0aW9uXG4gICAgY29uc3Qgc3RhY2sgPSBjZGsuU3RhY2sub2YoZm4pXG5cbiAgICAvLyBSZWFkIHZhbHVlcyBmcm9tIFNTTSBwYXJhbWV0ZXJzIChjcmVhdGVkIGJ5IGJvb3RzdHJhcCBzdGFjaylcbiAgICAvLyBVc2UgdGhlIENESyBib290c3RyYXAgcXVhbGlmaWVyIGZvciBwcm9wZXIgc2NvcGluZ1xuICAgIGNvbnN0IGJvb3RzdHJhcFF1YWxpZmllciA9XG4gICAgICBzdGFjay5ub2RlLnRyeUdldENvbnRleHQoXCJAYXdzLWNkay9jb3JlOmJvb3RzdHJhcFF1YWxpZmllclwiKSB8fFxuICAgICAgXCJobmI2NTlmZHNcIlxuICAgIGNvbnN0IHNzbUJhc2VQYXRoID0gYCR7U1NNX0JBU0VfUEFUSH0vJHtib290c3RyYXBRdWFsaWZpZXJ9YFxuXG4gICAgY29uc3QgYXBpQXJuID0gc3NtLlN0cmluZ1BhcmFtZXRlci52YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHN0YWNrLFxuICAgICAgYCR7c3NtQmFzZVBhdGh9L2FwaS1hcm5gLFxuICAgIClcbiAgICBjb25zdCBicmlkZ2VCdWNrZXQgPSBzc20uU3RyaW5nUGFyYW1ldGVyLnZhbHVlRm9yU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgc3RhY2ssXG4gICAgICBgJHtzc21CYXNlUGF0aH0vYnJpZGdlLWJ1Y2tldGAsXG4gICAgKVxuICAgIGNvbnN0IGJyaWRnZUtleSA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JTdHJpbmdQYXJhbWV0ZXIoXG4gICAgICBzdGFjayxcbiAgICAgIGAke3NzbUJhc2VQYXRofS9icmlkZ2Uta2V5YCxcbiAgICApXG5cbiAgICAvLyBBZGQgdGFnIHdpdGggbG9jYWwgaGFuZGxlciBwYXRoIGZvciBkYWVtb24gZGlzY292ZXJ5XG4gICAgLy8gVGhlIGRhZW1vbiBxdWVyaWVzIExhbWJkYSBBUEkgZm9yIGZ1bmN0aW9ucyB3aXRoIHRoaXMgdGFnXG4gICAgY2ZuRnVuY3Rpb24udGFncy5zZXRUYWcoTElWRV9MQU1CREFfVEFHLCBsb2NhbEhhbmRsZXIpXG5cbiAgICAvLyBHcmFudCBwZXJtaXNzaW9ucyB0byBwdWJsaXNoL3N1YnNjcmliZSB0byBBcHBTeW5jIEV2ZW50c1xuICAgIGZuLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJhcHBzeW5jOkV2ZW50Q29ubmVjdFwiLFxuICAgICAgICAgIFwiYXBwc3luYzpFdmVudFB1Ymxpc2hcIixcbiAgICAgICAgICBcImFwcHN5bmM6RXZlbnRTdWJzY3JpYmVcIixcbiAgICAgICAgXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbYXBpQXJuLCBgJHthcGlBcm59LypgXSxcbiAgICAgIH0pLFxuICAgIClcblxuICAgIC8vIEdyYW50IHBlcm1pc3Npb25zIHRvIHJlYWQgU1NNIHBhcmFtZXRlcnMgKGJyaWRnZSBuZWVkcyBBcHBTeW5jIGVuZHBvaW50cylcbiAgICBmbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogW1wic3NtOkdldFBhcmFtZXRlclwiLCBcInNzbTpHZXRQYXJhbWV0ZXJzXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOmF3czpzc206JHtzdGFjay5yZWdpb259OiR7c3RhY2suYWNjb3VudH06cGFyYW1ldGVyJHtzc21CYXNlUGF0aH0vKmAsXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICAvLyBJbmNyZWFzZSB0aW1lb3V0IHRvIGFsbG93IGZvciBsb2NhbCBkZWJ1Z2dpbmdcbiAgICBjZm5GdW5jdGlvbi50aW1lb3V0ID0gMzAwIC8vIDUgbWludXRlc1xuXG4gICAgLy8gUmVwbGFjZSB0aGUgY29kZSB3aXRoIGJyaWRnZSBoYW5kbGVyIGZyb20gYm9vdHN0cmFwIHN0YWNrJ3MgUzMgYnVja2V0XG4gICAgY2ZuRnVuY3Rpb24uY29kZSA9IHtcbiAgICAgIHMzQnVja2V0OiBicmlkZ2VCdWNrZXQsXG4gICAgICBzM0tleTogYnJpZGdlS2V5LFxuICAgIH1cbiAgICBjZm5GdW5jdGlvbi5oYW5kbGVyID0gXCJpbmRleC5oYW5kbGVyXCJcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBsaXZlIG1vZGUgaXMgZW5hYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNMaXZlTW9kZUVuYWJsZWQoKTogYm9vbGVhbiB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5DREtfTElWRSA9PT0gXCJ0cnVlXCJcbn1cblxuLyoqXG4gKiBBcHBseSBsaXZlIGxhbWJkYSBhc3BlY3QgdG8gYSBDREsgYXBwIG9yIHN0YWNrIGlmIGxpdmUgbW9kZSBpcyBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSBzY29wZSBUaGUgQ0RLIGFwcCBvciBzdGFjayB0byBhcHBseSB0aGUgYXNwZWN0IHRvXG4gKiBAcGFyYW0gcHJvcHMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGxpdmUgbGFtYmRhIGFzcGVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlMaXZlTGFtYmRhQXNwZWN0KFxuICBzY29wZTogSUNvbnN0cnVjdCxcbiAgcHJvcHM6IExpdmVMYW1iZGFBc3BlY3RQcm9wcyA9IHt9LFxuKTogdm9pZCB7XG4gIGlmICghaXNMaXZlTW9kZUVuYWJsZWQoKSkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgXCJbTGl2ZUxhbWJkYV0gTGl2ZSBtb2RlIG5vdCBlbmFibGVkIChzZXQgQ0RLX0xJVkU9dHJ1ZSB0byBlbmFibGUpXCIsXG4gICAgKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc29sZS5sb2coXCJbTGl2ZUxhbWJkYV0gTGl2ZSBtb2RlIGVuYWJsZWQgLSB0cmFuc2Zvcm1pbmcgTGFtYmRhIGZ1bmN0aW9uc1wiKVxuICBjZGsuQXNwZWN0cy5vZihzY29wZSkuYWRkKG5ldyBMaXZlTGFtYmRhQXNwZWN0KHByb3BzKSlcbn1cbiJdfQ==
|