@neo-one/smart-contract-compiler
Version:
NEO•ONE TypeScript smart contract compiler.
158 lines (156 loc) • 27.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const ts_utils_1 = require("@neo-one/ts-utils");
const Helper_1 = require("../Helper");
const map_1 = require("./map");
class UnwrapValRecursiveHelper extends Helper_1.Helper {
constructor(options) {
super();
this.type = options.type;
}
emit(sb, node, options) {
if (this.type === undefined) {
return;
}
if (!options.pushValue) {
sb.emitOp(node, 'DROP');
}
const type = ts_utils_1.tsUtils.type_.getNonNullableType(this.type);
sb.emitHelper(node, options, sb.helpers.forBuiltinType({
type: this.type,
array: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapArray);
sb.emitHelper(node, innerOptions, sb.helpers.arrMap({
map: (innerInnerOptions) => {
const localArrayType = ts_utils_1.tsUtils.type_.getArrayType(type);
const arrayType = localArrayType === undefined ? undefined : sb.context.analysis.getNotAnyType(node, localArrayType);
sb.emitHelper(node, innerInnerOptions, sb.helpers.unwrapValRecursive({ type: arrayType }));
},
}));
},
arrayStorage: (innerOptions) => {
sb.emitOp(node, 'DROP');
sb.emitHelper(node, innerOptions, sb.helpers.throwTypeError);
},
boolean: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapBoolean);
},
buffer: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapBuffer);
},
null: () => {
sb.emitOp(node, 'DROP');
sb.emitPushBuffer(node, Buffer.from([]));
},
number: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapNumber);
},
object: (innerOptions) => {
sb.emitOp(node, 'NEWMAP');
ts_utils_1.tsUtils.type_.getProperties(type).forEach((prop) => {
const propType = sb.context.analysis.getTypeOfSymbol(prop, node);
sb.emitOp(node, 'TUCK');
sb.emitOp(node, 'OVER');
sb.emitPushString(node, ts_utils_1.tsUtils.symbol.getName(prop));
sb.emitOp(node, 'TUCK');
sb.emitHelper(node, innerOptions, sb.helpers.getPropertyObjectProperty);
sb.emitHelper(node, innerOptions, sb.helpers.unwrapValRecursive({ type: propType }));
sb.emitOp(node, 'SETITEM');
sb.emitOp(node, 'SWAP');
});
sb.emitOp(node, 'NIP');
},
string: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapString);
},
symbol: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapSymbol);
},
undefined: () => {
sb.emitOp(node, 'DROP');
sb.emitPushBuffer(node, Buffer.from([]));
},
map: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapMap);
sb.emitHelper(node, innerOptions, sb.helpers.mapMap({
map: (innerInnerOptions) => {
let keyType;
let valueType;
if (map_1.isOnlyMap(sb.context, node, type)) {
const localKeyType = ts_utils_1.tsUtils.type_.getTypeArgumentsArray(type)[0];
keyType =
localKeyType === undefined ? undefined : sb.context.analysis.getNotAnyType(node, localKeyType);
const localValueType = ts_utils_1.tsUtils.type_.getTypeArgumentsArray(type)[1];
valueType =
localValueType === undefined ? undefined : sb.context.analysis.getNotAnyType(node, localValueType);
}
sb.emitHelper(node, innerInnerOptions, sb.helpers.unwrapValRecursive({ type: keyType }));
sb.emitOp(node, 'SWAP');
sb.emitHelper(node, innerInnerOptions, sb.helpers.unwrapValRecursive({ type: valueType }));
sb.emitOp(node, 'SWAP');
},
}));
},
mapStorage: (innerOptions) => {
sb.emitOp(node, 'DROP');
sb.emitHelper(node, innerOptions, sb.helpers.throwTypeError);
},
set: (innerOptions) => {
sb.emitOp(node, 'DROP');
sb.emitHelper(node, innerOptions, sb.helpers.throwTypeError);
},
setStorage: (innerOptions) => {
sb.emitOp(node, 'DROP');
sb.emitHelper(node, innerOptions, sb.helpers.throwTypeError);
},
error: (innerOptions) => {
sb.emitOp(node, 'DROP');
sb.emitHelper(node, innerOptions, sb.helpers.throwTypeError);
},
forwardValue: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapForwardValue);
},
iteratorResult: (innerOptions) => {
sb.emitOp(node, 'DROP');
sb.emitHelper(node, innerOptions, sb.helpers.throwTypeError);
},
iterableIterator: (innerOptions) => {
sb.emitOp(node, 'DROP');
sb.emitHelper(node, innerOptions, sb.helpers.throwTypeError);
},
iterable: (innerOptions) => {
sb.emitOp(node, 'DROP');
sb.emitHelper(node, innerOptions, sb.helpers.throwTypeError);
},
transaction: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapTransaction);
},
output: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapOutput);
},
attribute: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapAttribute);
},
input: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapInput);
},
account: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapAccount);
},
asset: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapAsset);
},
contract: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapContract);
},
header: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapHeader);
},
block: (innerOptions) => {
sb.emitHelper(node, innerOptions, sb.helpers.unwrapBlock);
},
}));
}
}
exports.UnwrapValRecursiveHelper = UnwrapValRecursiveHelper;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVud3JhcFZhbFJlY3Vyc2l2ZUhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLGdEQUE0QztBQUk1QyxzQ0FBbUM7QUFDbkMsK0JBQWtDO0FBUWxDLE1BQWEsd0JBQXlCLFNBQVEsZUFBTTtJQUVsRCxZQUFtQixPQUF3QztRQUN6RCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRU0sSUFBSSxDQUFDLEVBQWlCLEVBQUUsSUFBYSxFQUFFLE9BQXFCO1FBQ2pFLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDM0IsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDdEIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDekI7UUFFRCxNQUFNLElBQUksR0FBRyxrQkFBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekQsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osT0FBTyxFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1lBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLEtBQUssRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFO2dCQUN0QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDMUQsRUFBRSxDQUFDLFVBQVUsQ0FDWCxJQUFJLEVBQ0osWUFBWSxFQUNaLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO29CQUNoQixHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO3dCQUN6QixNQUFNLGNBQWMsR0FBRyxrQkFBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3hELE1BQU0sU0FBUyxHQUNiLGNBQWMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQzt3QkFDckcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzdGLENBQUM7aUJBQ0YsQ0FBQyxDQUNILENBQUM7WUFDSixDQUFDO1lBQ0QsWUFBWSxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQzdCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3hCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFDRCxNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUUsRUFBRTtnQkFDdkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0QsQ0FBQztZQUNELElBQUksRUFBRSxHQUFHLEVBQUU7Z0JBQ1QsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3hCLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3ZCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFJRCxNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUUsRUFBRTtnQkFFdkIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzFCLGtCQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDakQsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFFakUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBRXhCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUV4QixFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxrQkFBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFFdEQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBRXhCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUM7b0JBRXhFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFFckYsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7b0JBRTNCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQixDQUFDLENBQUMsQ0FBQztnQkFFSCxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6QixDQUFDO1lBQ0QsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3ZCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFDRCxNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUUsRUFBRTtnQkFDdkIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0QsQ0FBQztZQUNELFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBQ2QsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3hCLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3BCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4RCxFQUFFLENBQUMsVUFBVSxDQUNYLElBQUksRUFDSixZQUFZLEVBQ1osRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7b0JBQ2hCLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixFQUFFLEVBQUU7d0JBQ3pCLElBQUksT0FBNEIsQ0FBQzt3QkFDakMsSUFBSSxTQUE4QixDQUFDO3dCQUNuQyxJQUFJLGVBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRTs0QkFDckMsTUFBTSxZQUFZLEdBQUcsa0JBQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUF3QixDQUFDOzRCQUN6RixPQUFPO2dDQUNMLFlBQVksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQzs0QkFDakcsTUFBTSxjQUFjLEdBQUcsa0JBQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUF3QixDQUFDOzRCQUMzRixTQUFTO2dDQUNQLGNBQWMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQzt5QkFDdEc7d0JBRUQsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3pGLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUN4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDM0YsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQzFCLENBQUM7aUJBQ0YsQ0FBQyxDQUNILENBQUM7WUFDSixDQUFDO1lBQ0QsVUFBVSxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQzNCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsR0FBRyxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3BCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsVUFBVSxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQzNCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3RCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsWUFBWSxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQzdCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDbkUsQ0FBQztZQUNELGNBQWMsRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFO2dCQUMvQixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDeEIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0QsQ0FBQztZQUNELGdCQUFnQixFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ2pDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsUUFBUSxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3pCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsV0FBVyxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQzVCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDbEUsQ0FBQztZQUNELE1BQU0sRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFO2dCQUN2QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM3RCxDQUFDO1lBQ0QsU0FBUyxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQzFCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxZQUFZLEVBQUUsRUFBRTtnQkFDdEIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUQsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFO2dCQUN4QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3RCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFDRCxRQUFRLEVBQUUsQ0FBQyxZQUFZLEVBQUUsRUFBRTtnQkFDekIsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0QsQ0FBQztZQUNELE1BQU0sRUFBRSxDQUFDLFlBQVksRUFBRSxFQUFFO2dCQUN2QixFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM3RCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3RCLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzVELENBQUM7U0FDRixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXBMRCw0REFvTEMiLCJmaWxlIjoibmVvLW9uZS1zbWFydC1jb250cmFjdC1jb21waWxlci9zcmMvY29tcGlsZS9oZWxwZXIvdHlwZXMvVW53cmFwVmFsUmVjdXJzaXZlSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHNVdGlscyB9IGZyb20gJ0BuZW8tb25lL3RzLXV0aWxzJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IFNjcmlwdEJ1aWxkZXIgfSBmcm9tICcuLi8uLi9zYic7XG5pbXBvcnQgeyBWaXNpdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBIZWxwZXIgfSBmcm9tICcuLi9IZWxwZXInO1xuaW1wb3J0IHsgaXNPbmx5TWFwIH0gZnJvbSAnLi9tYXAnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVud3JhcFZhbFJlY3Vyc2l2ZUhlbHBlck9wdGlvbnMge1xuICByZWFkb25seSB0eXBlOiB0cy5UeXBlIHwgdW5kZWZpbmVkO1xufVxuXG4vLyBJbnB1dDogW3ZhbF1cbi8vIE91dHB1dDogW3ZhbHVlXVxuZXhwb3J0IGNsYXNzIFVud3JhcFZhbFJlY3Vyc2l2ZUhlbHBlciBleHRlbmRzIEhlbHBlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHlwZTogdHMuVHlwZSB8IHVuZGVmaW5lZDtcbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFVud3JhcFZhbFJlY3Vyc2l2ZUhlbHBlck9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0KHNiOiBTY3JpcHRCdWlsZGVyLCBub2RlOiB0cy5Ob2RlLCBvcHRpb25zOiBWaXNpdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMucHVzaFZhbHVlKSB7XG4gICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gdHNVdGlscy50eXBlXy5nZXROb25OdWxsYWJsZVR5cGUodGhpcy50eXBlKTtcblxuICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICBub2RlLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNiLmhlbHBlcnMuZm9yQnVpbHRpblR5cGUoe1xuICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgIGFycmF5OiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwQXJyYXkpO1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgaW5uZXJPcHRpb25zLFxuICAgICAgICAgICAgc2IuaGVscGVycy5hcnJNYXAoe1xuICAgICAgICAgICAgICBtYXA6IChpbm5lcklubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsQXJyYXlUeXBlID0gdHNVdGlscy50eXBlXy5nZXRBcnJheVR5cGUodHlwZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXJyYXlUeXBlID1cbiAgICAgICAgICAgICAgICAgIGxvY2FsQXJyYXlUeXBlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzYi5jb250ZXh0LmFuYWx5c2lzLmdldE5vdEFueVR5cGUobm9kZSwgbG9jYWxBcnJheVR5cGUpO1xuICAgICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJJbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwVmFsUmVjdXJzaXZlKHsgdHlwZTogYXJyYXlUeXBlIH0pKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5U3RvcmFnZTogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnRocm93VHlwZUVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgYm9vbGVhbjogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcEJvb2xlYW4pO1xuICAgICAgICB9LFxuICAgICAgICBidWZmZXI6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy51bndyYXBCdWZmZXIpO1xuICAgICAgICB9LFxuICAgICAgICBudWxsOiAoKSA9PiB7XG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgc2IuZW1pdFB1c2hCdWZmZXIobm9kZSwgQnVmZmVyLmZyb20oW10pKTtcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwTnVtYmVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgLy8gV2Ugb25seSBldmVyIHVzZSB1bndyYXBWYWxSZWN1cnNpdmUgaW4gY2FzZXMgd2hlcmUgdHlwZXNjcmlwdCBoYXMgYWxyZWFkeSB2ZXJpZmllZCBmb3IgdXNcbiAgICAgICAgLy8gdGhhdCBpdCdzIGFuIG9iamVjdCB3aXRoIHN0cmluZyBwcm9wZXJ0aWVzIGFuZCB1bndyYXBwYWJsZSB2YWx1ZXMsIHNvIHdlIGRvbid0IGRvIGFueSBhZGRpdGlvbmFsXG4gICAgICAgIC8vIGNoZWNrcyBoZXJlLlxuICAgICAgICBvYmplY3Q6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICAvLyBbb3V0cHV0TWFwLCBvYmplY3RWYWxdXG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdORVdNQVAnKTtcbiAgICAgICAgICB0c1V0aWxzLnR5cGVfLmdldFByb3BlcnRpZXModHlwZSkuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcFR5cGUgPSBzYi5jb250ZXh0LmFuYWx5c2lzLmdldFR5cGVPZlN5bWJvbChwcm9wLCBub2RlKTtcbiAgICAgICAgICAgIC8vIFtvdXRwdXRNYXAsIG9iamVjdFZhbCwgb3V0cHV0TWFwXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdUVUNLJyk7XG4gICAgICAgICAgICAvLyBbb2JqZWN0VmFsLCBvdXRwdXRNYXAsIG9iamVjdFZhbCwgb3V0cHV0TWFwXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdPVkVSJyk7XG4gICAgICAgICAgICAvLyBbc3RyaW5nLCBvYmplY3RWYWwsIG91dHB1dE1hcCwgb2JqZWN0VmFsLCBvdXRwdXRNYXBdXG4gICAgICAgICAgICBzYi5lbWl0UHVzaFN0cmluZyhub2RlLCB0c1V0aWxzLnN5bWJvbC5nZXROYW1lKHByb3ApKTtcbiAgICAgICAgICAgIC8vIFtzdHJpbmcsIG9iamVjdFZhbCwgc3RyaW5nLCBvdXRwdXRNYXAsIG9iamVjdFZhbCwgb3V0cHV0TWFwXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdUVUNLJyk7XG4gICAgICAgICAgICAvLyBbdmFsLCBzdHJpbmcsIG91dHB1dE1hcCwgb2JqZWN0VmFsLCBvdXRwdXRNYXBdXG4gICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy5nZXRQcm9wZXJ0eU9iamVjdFByb3BlcnR5KTtcbiAgICAgICAgICAgIC8vIFt2YWx1ZSwgc3RyaW5nLCBvdXRwdXRNYXAsIG9iamVjdFZhbCwgb3V0cHV0TWFwXVxuICAgICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwVmFsUmVjdXJzaXZlKHsgdHlwZTogcHJvcFR5cGUgfSkpO1xuICAgICAgICAgICAgLy8gW29iamVjdFZhbCwgb3V0cHV0TWFwXVxuICAgICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdTRVRJVEVNJyk7XG4gICAgICAgICAgICAvLyBbb3V0cHV0TWFwLCBvYmplY3RWYWxdXG4gICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBbb3V0cHV0TWFwXVxuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnTklQJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHN0cmluZzogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcFN0cmluZyk7XG4gICAgICAgIH0sXG4gICAgICAgIHN5bWJvbDogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcFN5bWJvbCk7XG4gICAgICAgIH0sXG4gICAgICAgIHVuZGVmaW5lZDogKCkgPT4ge1xuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgIHNiLmVtaXRQdXNoQnVmZmVyKG5vZGUsIEJ1ZmZlci5mcm9tKFtdKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1hcDogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcE1hcCk7XG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBpbm5lck9wdGlvbnMsXG4gICAgICAgICAgICBzYi5oZWxwZXJzLm1hcE1hcCh7XG4gICAgICAgICAgICAgIG1hcDogKGlubmVySW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGtleVR5cGU6IHRzLlR5cGUgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlVHlwZTogdHMuVHlwZSB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBpZiAoaXNPbmx5TWFwKHNiLmNvbnRleHQsIG5vZGUsIHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsb2NhbEtleVR5cGUgPSB0c1V0aWxzLnR5cGVfLmdldFR5cGVBcmd1bWVudHNBcnJheSh0eXBlKVswXSBhcyB0cy5UeXBlIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAga2V5VHlwZSA9XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsS2V5VHlwZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2IuY29udGV4dC5hbmFseXNpcy5nZXROb3RBbnlUeXBlKG5vZGUsIGxvY2FsS2V5VHlwZSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBsb2NhbFZhbHVlVHlwZSA9IHRzVXRpbHMudHlwZV8uZ2V0VHlwZUFyZ3VtZW50c0FycmF5KHR5cGUpWzFdIGFzIHRzLlR5cGUgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICB2YWx1ZVR5cGUgPVxuICAgICAgICAgICAgICAgICAgICBsb2NhbFZhbHVlVHlwZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2IuY29udGV4dC5hbmFseXNpcy5nZXROb3RBbnlUeXBlKG5vZGUsIGxvY2FsVmFsdWVUeXBlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVySW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcFZhbFJlY3Vyc2l2ZSh7IHR5cGU6IGtleVR5cGUgfSkpO1xuICAgICAgICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnU1dBUCcpO1xuICAgICAgICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJJbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwVmFsUmVjdXJzaXZlKHsgdHlwZTogdmFsdWVUeXBlIH0pKTtcbiAgICAgICAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ1NXQVAnKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIG1hcFN0b3JhZ2U6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy50aHJvd1R5cGVFcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnRocm93VHlwZUVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0U3RvcmFnZTogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnRocm93VHlwZUVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICBzYi5lbWl0T3Aobm9kZSwgJ0RST1AnKTtcbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy50aHJvd1R5cGVFcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgIGZvcndhcmRWYWx1ZTogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcEZvcndhcmRWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGl0ZXJhdG9yUmVzdWx0OiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudGhyb3dUeXBlRXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICBpdGVyYWJsZUl0ZXJhdG9yOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgc2IuZW1pdE9wKG5vZGUsICdEUk9QJyk7XG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudGhyb3dUeXBlRXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICBpdGVyYWJsZTogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIHNiLmVtaXRPcChub2RlLCAnRFJPUCcpO1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnRocm93VHlwZUVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNhY3Rpb246IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy51bndyYXBUcmFuc2FjdGlvbik7XG4gICAgICAgIH0sXG4gICAgICAgIG91dHB1dDogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcE91dHB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIGF0dHJpYnV0ZTogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcEF0dHJpYnV0ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwSW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBhY2NvdW50OiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwQWNjb3VudCk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzc2V0OiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwQXNzZXQpO1xuICAgICAgICB9LFxuICAgICAgICBjb250cmFjdDogKGlubmVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIHNiLmVtaXRIZWxwZXIobm9kZSwgaW5uZXJPcHRpb25zLCBzYi5oZWxwZXJzLnVud3JhcENvbnRyYWN0KTtcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGVyOiAoaW5uZXJPcHRpb25zKSA9PiB7XG4gICAgICAgICAgc2IuZW1pdEhlbHBlcihub2RlLCBpbm5lck9wdGlvbnMsIHNiLmhlbHBlcnMudW53cmFwSGVhZGVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgYmxvY2s6IChpbm5lck9wdGlvbnMpID0+IHtcbiAgICAgICAgICBzYi5lbWl0SGVscGVyKG5vZGUsIGlubmVyT3B0aW9ucywgc2IuaGVscGVycy51bndyYXBCbG9jayk7XG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=