Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@glimmer/compiler

Package Overview
Dependencies
Maintainers
11
Versions
289
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@glimmer/compiler - npm Package Compare versions

Comparing version 0.33.0 to 0.33.1

dist/commonjs/es2017/lib/allocate-symbols.js

20

dist/commonjs/es2017/lib/javascript-compiler.js

@@ -117,7 +117,9 @@ "use strict";

process() {
this.opcodes.forEach(([opcode, ...args]) => {
this.opcodes.forEach(op => {
let opcode = op[0];
let arg = op[1];
if (!this[opcode]) {
throw new Error(`unimplemented ${opcode} on JavaScriptCompiler`);
}
this[opcode](...args);
this[opcode](arg);
});

@@ -127,3 +129,3 @@ return this.template;

/// Nesting
startBlock([program]) {
startBlock(program) {
let block = new InlineBlock(program['symbols']);

@@ -156,3 +158,3 @@ this.blocks.push(block);

}
block(name, template, inverse) {
block([name, template, inverse]) {
let params = this.popValue();

@@ -198,11 +200,11 @@ let hash = this.popValue();

}
staticAttr(name, namespace) {
staticAttr([name, namespace]) {
let value = this.popValue();
this.push([_wireFormat.Ops.StaticAttr, name, value, namespace]);
}
dynamicAttr(name, namespace) {
dynamicAttr([name, namespace]) {
let value = this.popValue();
this.push([_wireFormat.Ops.DynamicAttr, name, value, namespace]);
}
trustingAttr(name, namespace) {
trustingAttr([name, namespace]) {
let value = this.popValue();

@@ -252,3 +254,3 @@ this.push([_wireFormat.Ops.TrustingAttr, name, value, namespace]);

}
get(head, path) {
get([head, path]) {
this.pushValue([_wireFormat.Ops.Get, head, path]);

@@ -317,2 +319,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9qYXZhc2NyaXB0LWNvbXBpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQUUsQUFBTSxBQUFFLEFBQU0sQUFBZSxBQUFDLEFBQ3ZDLEFBQU8sQUFBRSxBQUFLLEFBQUUsQUFBTyxBQUFVLEFBQU0sQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFJL0QsQUFBTyxBQVFMLEFBQUcsQUFDSCxBQUFVLEFBQ1YsQUFBYyxBQUNkLEFBQVUsQUFDVixBQUFXLEFBQ1osQUFBTSxBQUFzQixBQUFDLEFBUTlCLEFBQU07OztrQkFDRzthQUFVLGFBQWdCLEFBQUUsQUFBQyxBQU90QyxBQUFDO0FBSEMsQUFBSTtTQUFDLEFBQW9CLFdBQ3ZCLEFBQUk7YUFBQyxBQUFVLFdBQUMsQUFBSSxLQUFDLEFBQVMsQUFBQyxBQUFDLEFBQ2xDLEFBQUMsQUFDRjtBQUVELEFBQU07QUFWTjs7TUFVeUIsb0JBQVEsQUFBSztnQkFDakIsQUFBdUIsT0FDeEMsQUFBSyxBQUFFLEFBQUM7QUFEUzthQUFLLFFBQUwsQUFBSyxBQUFrQixBQUUxQyxBQUFDO0FBRUQsQUFBTTthQUNKLEFBQU07O3dCQUNRLEFBQUksS0FBQyxBQUFVLEFBQzNCLEFBQVU7d0JBQUUsQUFBSSxLQUFDLEFBQUssTUFGakIsQUFFa0IsQUFBSyxBQUM3QixBQUFDLEFBQ0osQUFBQyxBQUNGO0FBSkssQUFBVTtBQU1oQixBQUFNO0FBWko7O01BWXlCLHNCQUFRLEFBQUs7Z0JBT2xCLEFBQStCLGFBQ2pELEFBQUssQUFBRSxBQUFDO0FBRFU7YUFBVyxjQU54QixBQU1hLEFBQVcsQUFBb0I7YUFOeEMsT0FBRyxBQUFVLEFBQUMsQUFDbEI7YUFBTSxTQUFHLEFBQUksQUFBTyxBQUFVLEFBQUMsQUFDL0I7YUFBSyxRQUFHLEFB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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgU3RhY2ssIERpY3RTZXQsIE9wdGlvbiwgZXhwZWN0IH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IEFTVCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBCbG9ja1N5bWJvbFRhYmxlLCBQcm9ncmFtU3ltYm9sVGFibGUgfSBmcm9tICcuL3RlbXBsYXRlLXZpc2l0b3InO1xuXG5pbXBvcnQge1xuICBTZXJpYWxpemVkSW5saW5lQmxvY2ssXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLFxuICBDb3JlLFxuICBTdGF0ZW1lbnQsXG4gIFN0YXRlbWVudHMsXG4gIEV4cHJlc3Npb24sXG4gIEV4cHJlc3Npb25zLFxuICBPcHMsXG4gIGlzTW9kaWZpZXIsXG4gIGlzRmx1c2hFbGVtZW50LFxuICBpc0FyZ3VtZW50LFxuICBpc0F0dHJpYnV0ZVxufSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5cbmV4cG9ydCB0eXBlIHN0ciA9IHN0cmluZztcbmV4cG9ydCB0eXBlIFBhcmFtcyA9IENvcmUuUGFyYW1zO1xuZXhwb3J0IHR5cGUgSGFzaCA9IENvcmUuSGFzaDtcbmV4cG9ydCB0eXBlIFBhdGggPSBDb3JlLlBhdGg7XG5leHBvcnQgdHlwZSBTdGFja1ZhbHVlID0gRXhwcmVzc2lvbiB8IFBhcmFtcyB8IEhhc2ggfCBzdHI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9jayB7XG4gIHB1YmxpYyBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSA9IFtdO1xuXG4gIGFic3RyYWN0IHRvSlNPTigpOiBPYmplY3Q7XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElubGluZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGFibGU6IEJsb2NrU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgdG9KU09OKCk6IFNlcmlhbGl6ZWRJbmxpbmVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgIHBhcmFtZXRlcnM6IHRoaXMudGFibGUuc2xvdHNcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBwdWJsaWMgdHlwZSA9IFwidGVtcGxhdGVcIjtcbiAgcHVibGljIHlpZWxkcyA9IG5ldyBEaWN0U2V0PHN0cmluZz4oKTtcbiAgcHVibGljIG5hbWVkID0gbmV3IERpY3RTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgYmxvY2tzOiBTZXJpYWxpemVkSW5saW5lQmxvY2tbXSA9IFtdO1xuICBwdWJsaWMgaGFzRXZhbCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3ltYm9sVGFibGU6IFByb2dyYW1TeW1ib2xUYWJsZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdXNoKHN0YXRlbWVudDogU3RhdGVtZW50KSB7XG4gICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgfVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN5bWJvbHM6IHRoaXMuc3ltYm9sVGFibGUuc3ltYm9scyxcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgIGhhc0V2YWw6IHRoaXMuaGFzRXZhbFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBwdWJsaWMgYXR0cmlidXRlczogU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSA9IFtdO1xuICBwdWJsaWMgYXJndW1lbnRzOiBTdGF0ZW1lbnRzLkFyZ3VtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBpblBhcmFtcyA9IHRydWU7XG4gIHB1YmxpYyBwb3NpdGlvbmFsczogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhYmxlOiBCbG9ja1N5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICBpZiAodGhpcy5pblBhcmFtcykge1xuICAgICAgaWYgKGlzTW9kaWZpZXIoc3RhdGVtZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGUgRXJyb3I6IEVsZW1lbnQgbW9kaWZpZXJzIGFyZSBub3QgYWxsb3dlZCBpbiBjb21wb25lbnRzJyk7XG4gICAgICB9IGVsc2UgaWYgKGlzRmx1c2hFbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5pblBhcmFtcyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChpc0FyZ3VtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5hcmd1bWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChpc0F0dHJpYnV0ZShzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGUgRXJyb3I6IG9ubHkgcGFyYW1ldGVycyBhbGxvd2VkIGJlZm9yZSBmbHVzaC1lbGVtZW50Jyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IFtTdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBDb3JlLkhhc2gsIE9wdGlvbjxTZXJpYWxpemVkSW5saW5lQmxvY2s+XSB7XG4gICAgbGV0IGFyZ3MgPSB0aGlzLmFyZ3VtZW50cztcbiAgICBsZXQga2V5cyA9IGFyZ3MubWFwKGFyZyA9PiBhcmdbMV0pO1xuICAgIGxldCB2YWx1ZXMgPSBhcmdzLm1hcChhcmcgPT4gYXJnWzJdKTtcblxuICAgIHJldHVybiBbXG4gICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICBba2V5cywgdmFsdWVzXSxcbiAgICAgIHtcbiAgICAgICAgc3RhdGVtZW50czogdGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgICBwYXJhbWV0ZXJzOiB0aGlzLnRhYmxlLnNsb3RzXG4gICAgICB9XG4gICAgXTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGUge1xuICBwdWJsaWMgYmxvY2s6IFRlbXBsYXRlQmxvY2s7XG5cbiAgY29uc3RydWN0b3Ioc3ltYm9sczogUHJvZ3JhbVN5bWJvbFRhYmxlKSB7XG4gICAgdGhpcy5ibG9jayA9IG5ldyBUZW1wbGF0ZUJsb2NrKHN5bWJvbHMpO1xuICB9XG5cbiAgdG9KU09OKCk6IFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrIHtcbiAgICByZXR1cm4gdGhpcy5ibG9jay50b0pTT04oKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKYXZhU2NyaXB0Q29tcGlsZXIge1xuICBzdGF0aWMgcHJvY2VzcyhvcGNvZGVzOiBhbnlbXSwgc3ltYm9sczogUHJvZ3JhbVN5bWJvbFRhYmxlKTogVGVtcGxhdGUge1xuICAgIGxldCBjb21waWxlciA9IG5ldyBKYXZhU2NyaXB0Q29tcGlsZXIob3Bjb2Rlcywgc3ltYm9scyk7XG4gICAgcmV0dXJuIGNvbXBpbGVyLnByb2Nlc3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVtcGxhdGU6IFRlbXBsYXRlO1xuICBwcml2YXRlIGJsb2NrcyA9IG5ldyBTdGFjazxCbG9jaz4oKTtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBhbnlbXTtcbiAgcHJpdmF0ZSB2YWx1ZXM6IFN0YWNrVmFsdWVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKG9wY29kZXM6IGFueVtdLCBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgICB0aGlzLm9wY29kZXMgPSBvcGNvZGVzO1xuICAgIHRoaXMudGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUoc3ltYm9scyk7XG4gIH1cblxuICBnZXQgY3VycmVudEJsb2NrKCk6IEJsb2NrIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuYmxvY2tzLmN1cnJlbnQsICdFeHBlY3RlZCBhIGJsb2NrIG9uIHRoZSBzdGFjaycpO1xuICB9XG5cbiAgcHJvY2VzcygpOiBUZW1wbGF0ZSB7XG4gICAgdGhpcy5vcGNvZGVzLmZvckVhY2goKFtvcGNvZGUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbb3Bjb2RlXSkgeyB0aHJvdyBuZXcgRXJyb3IoYHVuaW1wbGVtZW50ZWQgJHtvcGNvZGV9IG9uIEphdmFTY3JpcHRDb21waWxlcmApOyB9XG4gICAgICB0aGlzW29wY29kZV0oLi4uYXJncyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vLyBOZXN0aW5nXG5cbiAgc3RhcnRCbG9jayhbcHJvZ3JhbV06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICBsZXQgYmxvY2s6IEJsb2NrID0gbmV3IElubGluZUJsb2NrKHByb2dyYW1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICBsZXQgeyB0ZW1wbGF0ZSwgYmxvY2tzIH0gPSB0aGlzO1xuICAgIGxldCBibG9jayA9IGJsb2Nrcy5wb3AoKSBhcyBJbmxpbmVCbG9jaztcbiAgICB0ZW1wbGF0ZS5ibG9jay5ibG9ja3MucHVzaChibG9jay50b0pTT04oKSk7XG4gIH1cblxuICBzdGFydFByb2dyYW0oKSB7XG4gICAgdGhpcy5ibG9ja3MucHVzaCh0aGlzLnRlbXBsYXRlLmJsb2NrKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG5cbiAgfVxuXG4gIC8vLyBTdGF0ZW1lbnRzXG5cbiAgdGV4dChjb250ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5UZXh0LCBjb250ZW50XSk7XG4gIH1cblxuICBhcHBlbmQodHJ1c3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMucHVzaChbT3BzLkFwcGVuZCwgdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpLCB0cnVzdGVkXSk7XG4gIH1cblxuICBjb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5Db21tZW50LCB2YWx1ZV0pO1xuICB9XG5cbiAgbW9kaWZpZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuTW9kaWZpZXIsIG5hbWUsIHBhcmFtcywgaGFzaF0pO1xuICB9XG5cbiAgYmxvY2sobmFtZTogc3RyaW5nLCB0ZW1wbGF0ZTogbnVtYmVyLCBpbnZlcnNlOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICBsZXQgYmxvY2tzID0gdGhpcy50ZW1wbGF0ZS5ibG9jay5ibG9ja3M7XG4gICAgYXNzZXJ0KHR5cGVvZiB0ZW1wbGF0ZSAhPT0gJ251bWJlcicgfHwgYmxvY2tzW3RlbXBsYXRlXSAhPT0gbnVsbCwgJ21pc3NpbmcgYmxvY2sgaW4gdGhlIGNvbXBpbGVyJyk7XG4gICAgYXNzZXJ0KHR5cGVvZiBpbnZlcnNlICE9PSAnbnVtYmVyJyB8fCBibG9ja3NbaW52ZXJzZV0gIT09IG51bGwsICdtaXNzaW5nIGJsb2NrIGluIHRoZSBjb21waWxlcicpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuQmxvY2ssIG5hbWUsIHBhcmFtcywgaGFzaCwgYmxvY2tzW3RlbXBsYXRlXSwgYmxvY2tzW2ludmVyc2VdXSk7XG4gIH1cblxuICBvcGVuU3BsYXR0ZWRFbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmIChpc0NvbXBvbmVudCh0YWcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGUgRXJyb3I6IC4uLmF0dHJpYnV0ZXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBhbiBlbGVtZW50YCk7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50LmJsb2NrUGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcGlsZSBFcnJvcjogPCR7ZWxlbWVudC50YWd9PiBpcyBub3QgYSBjb21wb25lbnQgYW5kIGRvZXNuJ3Qgc3VwcG9ydCBibG9jayBwYXJhbWV0ZXJzYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaChbT3BzLk9wZW5TcGxhdHRlZEVsZW1lbnQsIHRhZ10pO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmIChpc0NvbXBvbmVudCh0YWcpKSB7XG4gICAgICB0aGlzLnN0YXJ0Q29tcG9uZW50KGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ibG9ja1BhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGUgRXJyb3I6IDwke2VsZW1lbnQudGFnfT4gaXMgbm90IGEgY29tcG9uZW50IGFuZCBkb2Vzbid0IHN1cHBvcnQgYmxvY2sgcGFyYW1ldGVyc2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goW09wcy5PcGVuRWxlbWVudCwgdGFnXSk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2hFbGVtZW50KCkge1xuICAgIHRoaXMucHVzaChbT3BzLkZsdXNoRWxlbWVudF0pO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmIChpc0NvbXBvbmVudCh0YWcpKSB7XG4gICAgICBsZXQgW2F0dHJzLCBhcmdzLCBibG9ja10gPSB0aGlzLmVuZENvbXBvbmVudCgpO1xuICAgICAgdGhpcy5wdXNoKFtPcHMuQ29tcG9uZW50LCB0YWcsIGF0dHJzLCBhcmdzLCBibG9ja10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goW09wcy5DbG9zZUVsZW1lbnRdKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWNBdHRyKG5hbWU6IHN0ciwgbmFtZXNwYWNlOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuU3RhdGljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgZHluYW1pY0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5EeW5hbWljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgdHJ1c3RpbmdBdHRyKG5hbWU6IHN0ciwgbmFtZXNwYWNlOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuVHJ1c3RpbmdBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICBzdGF0aWNBcmcobmFtZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLlN0YXRpY0FyZywgbmFtZSwgdmFsdWVdKTtcbiAgfVxuXG4gIGR5bmFtaWNBcmcobmFtZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBcmcsIG5hbWUsIHZhbHVlXSk7XG4gIH1cblxuICB5aWVsZCh0bzogbnVtYmVyKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIHRoaXMucHVzaChbT3BzLllpZWxkLCB0bywgcGFyYW1zXSk7XG4gIH1cblxuICBhdHRyU3BsYXQodG86IG51bWJlcikge1xuICAgIHRoaXMucHVzaChbT3BzLkF0dHJTcGxhdCwgdG9dKTtcbiAgfVxuXG4gIGRlYnVnZ2VyKGV2YWxJbmZvOiBDb3JlLkV2YWxJbmZvKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuRGVidWdnZXIsIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIGhhc0Jsb2NrKG5hbWU6IG51bWJlcikge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkhhc0Jsb2NrPihbT3BzLkhhc0Jsb2NrLCBuYW1lXSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9ja1BhcmFtcz4oW09wcy5IYXNCbG9ja1BhcmFtcywgbmFtZV0pO1xuICB9XG5cbiAgcGFydGlhbChldmFsSW5mbzogQ29yZS5FdmFsSW5mbykge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5QYXJ0aWFsLCBwYXJhbXNbMF0sIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9uc1xuXG4gIGxpdGVyYWwodmFsdWU6IEV4cHJlc3Npb25zLlZhbHVlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVuZGVmaW5lZD4oW09wcy5VbmRlZmluZWRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuVmFsdWU+KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB1bmtub3duKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVua25vd24+KFtPcHMuVW5rbm93biwgbmFtZV0pO1xuICB9XG5cbiAgZ2V0KGhlYWQ6IG51bWJlciwgcGF0aDogc3RyaW5nW10pIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5HZXQ+KFtPcHMuR2V0LCBoZWFkLCBwYXRoXSk7XG4gIH1cblxuICBtYXliZUxvY2FsKHBhdGg6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuTWF5YmVMb2NhbD4oW09wcy5NYXliZUxvY2FsLCBwYXRoXSk7XG4gIH1cblxuICBjb25jYXQoKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuQ29uY2F0PihbT3BzLkNvbmNhdCwgdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCldKTtcbiAgfVxuXG4gIGhlbHBlcihuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IZWxwZXI+KFtPcHMuSGVscGVyLCBuYW1lLCBwYXJhbXMsIGhhc2hdKTtcbiAgfVxuXG4gIC8vLyBTdGFjayBNYW5hZ2VtZW50IE9wY29kZXNcblxuICBzdGFydENvbXBvbmVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudEJsb2NrKGVsZW1lbnRbJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChjb21wb25lbnQpO1xuICB9XG5cbiAgZW5kQ29tcG9uZW50KCk6IFtTdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBDb3JlLkhhc2gsIE9wdGlvbjxTZXJpYWxpemVkSW5saW5lQmxvY2s+XSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuYmxvY2tzLnBvcCgpO1xuICAgIGFzc2VydChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRCbG9jaywgXCJDb21waWxlciBidWc6IGVuZENvbXBvbmVudCgpIHNob3VsZCBlbmQgYSBjb21wb25lbnRcIik7XG4gICAgcmV0dXJuIChjb21wb25lbnQgYXMgQ29tcG9uZW50QmxvY2spLnRvSlNPTigpO1xuICB9XG5cbiAgcHJlcGFyZUFycmF5KHNpemU6IG51bWJlcikge1xuICAgIGxldCB2YWx1ZXM6IEV4cHJlc3Npb25bXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIHZhbHVlcy5wdXNoKHRoaXMucG9wVmFsdWUoKSBhcyBFeHByZXNzaW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxQYXJhbXM+KHZhbHVlcyk7XG4gIH1cblxuICBwcmVwYXJlT2JqZWN0KHNpemU6IG51bWJlcikge1xuICAgIGFzc2VydCh0aGlzLnZhbHVlcy5sZW5ndGggPj0gc2l6ZSwgYEV4cGVjdGVkICR7c2l6ZX0gdmFsdWVzIG9uIHRoZSBzdGFjaywgZm91bmQgJHt0aGlzLnZhbHVlcy5sZW5ndGh9YCk7XG5cbiAgICBsZXQga2V5czogc3RyaW5nW10gPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgbGV0IHZhbHVlczogRXhwcmVzc2lvbltdID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIGtleXNbaV0gPSB0aGlzLnBvcFZhbHVlPHN0cj4oKTtcbiAgICAgIHZhbHVlc1tpXSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxIYXNoPihba2V5cywgdmFsdWVzXSk7XG4gIH1cblxuICAvLy8gVXRpbGl0aWVzXG5cbiAgcHVzaChhcmdzOiBTdGF0ZW1lbnQpIHtcbiAgICB3aGlsZSAoYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSBudWxsKSB7XG4gICAgICBhcmdzLnBvcCgpO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsb2NrLnB1c2goYXJncyk7XG4gIH1cblxuICBwdXNoVmFsdWU8UyBleHRlbmRzIEV4cHJlc3Npb24gfCBQYXJhbXMgfCBIYXNoPih2YWw6IFMpIHtcbiAgICB0aGlzLnZhbHVlcy5wdXNoKHZhbCk7XG4gIH1cblxuICBwb3BWYWx1ZTxUIGV4dGVuZHMgU3RhY2tWYWx1ZT4oKTogVCB7XG4gICAgYXNzZXJ0KHRoaXMudmFsdWVzLmxlbmd0aCwgXCJObyBleHByZXNzaW9uIGZvdW5kIG9uIHN0YWNrXCIpO1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5wb3AoKSBhcyBUO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ29tcG9uZW50KHRhZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGxldCBvcGVuID0gdGFnLmNoYXJBdCgwKTtcblxuICByZXR1cm4gb3BlbiA9PT0gb3Blbi50b1VwcGVyQ2FzZSgpO1xufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9qYXZhc2NyaXB0LWNvbXBpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQUUsQUFBTSxBQUFFLEFBQU0sQUFBZSxBQUFDLEFBQ3ZDLEFBQU8sQUFBRSxBQUFLLEFBQUUsQUFBTyxBQUFVLEFBQU0sQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFJL0QsQUFBTyxBQVFMLEFBQUcsQUFDSCxBQUFVLEFBQ1YsQUFBYyxBQUNkLEFBQVUsQUFDVixBQUFXLEFBQ1osQUFBTSxBQUFzQixBQUFDLEFBUzlCLEFBQU07OztrQkFDRzthQUFVLGFBQWdCLEFBQUUsQUFBQyxBQU90QyxBQUFDO0FBSEMsQUFBSTtTQUFDLEFBQW9CLFdBQ3ZCLEFBQUk7YUFBQyxBQUFVLFdBQUMsQUFBSSxLQUFDLEFBQVMsQUFBQyxBQUFDLEFBQ2xDLEFBQUMsQUFDRjtBQUVELEFBQU07QUFWTjs7TUFVeUIsb0JBQVEsQUFBSztnQkFDakIsQUFBdUIsT0FDeEMsQUFBSyxBQUFFLEFBQUM7QUFEUzthQUFLLFFBQUwsQUFBSyxBQUFrQixBQUUxQyxBQUFDO0FBRUQsQUFBTTthQUNKLEFBQU07O3dCQUNRLEFBQUksS0FBQyxBQUFVLEFBQzNCLEFBQVU7d0JBQUUsQUFBSSxLQUFDLEFBQUssTUFGakIsQUFFa0IsQUFBSyxBQUM3QixBQUFDLEFBQ0osQUFBQyxBQUNGO0FBSkssQUFBVTtBQU1oQixBQUFNO0FBWko7O01BWXlCLHNCQUFRLEFBQUs7Z0JBT2xCLEFBQStCLGFBQ2pELEFBQUssQUFBRSxBQUFDO0FBRFU7YUFBVyxjQU54QixBQU1hLEFBQVcsQUFBb0I7YUFOeEMsT0FBRyxBQUFVLEFBQUMsQUFDbEI7YUFBTSxTQUFHLEFBQUksQUFBTyxBQUFVLEFBQUMsQUFDL0I7YUFBSyxRQUFHLEFB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QUFBRyxJQUFDLEFBQU0sT0FBQyxBQUFDLEFBQUMsQUFBQyxBQUV6QixBQUFNO1dBQUMsQUFBSSxTQUFLLEFBQUksS0FBQyxBQUFXLEFBQUUsQUFBQyxBQUNyQyxBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IFN0YWNrLCBEaWN0U2V0LCBPcHRpb24sIGV4cGVjdCB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgQmxvY2tTeW1ib2xUYWJsZSwgUHJvZ3JhbVN5bWJvbFRhYmxlIH0gZnJvbSAnLi90ZW1wbGF0ZS12aXNpdG9yJztcblxuaW1wb3J0IHtcbiAgU2VyaWFsaXplZElubGluZUJsb2NrLFxuICBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayxcbiAgQ29yZSxcbiAgU3RhdGVtZW50LFxuICBTdGF0ZW1lbnRzLFxuICBFeHByZXNzaW9uLFxuICBFeHByZXNzaW9ucyxcbiAgT3BzLFxuICBpc01vZGlmaWVyLFxuICBpc0ZsdXNoRWxlbWVudCxcbiAgaXNBcmd1bWVudCxcbiAgaXNBdHRyaWJ1dGVcbn0gZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuaW1wb3J0IHsgUHJvY2Vzc29yLCBDb21waWxlck9wcywgT3BOYW1lLCBPcCB9IGZyb20gXCIuL2NvbXBpbGVyLW9wc1wiO1xuXG5leHBvcnQgdHlwZSBzdHIgPSBzdHJpbmc7XG5leHBvcnQgdHlwZSBQYXJhbXMgPSBDb3JlLlBhcmFtcztcbmV4cG9ydCB0eXBlIEhhc2ggPSBDb3JlLkhhc2g7XG5leHBvcnQgdHlwZSBQYXRoID0gQ29yZS5QYXRoO1xuZXhwb3J0IHR5cGUgU3RhY2tWYWx1ZSA9IEV4cHJlc3Npb24gfCBQYXJhbXMgfCBIYXNoIHwgc3RyO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmxvY2sge1xuICBwdWJsaWMgc3RhdGVtZW50czogU3RhdGVtZW50W10gPSBbXTtcblxuICBhYnN0cmFjdCB0b0pTT04oKTogT2JqZWN0O1xuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbmxpbmVCbG9jayBleHRlbmRzIEJsb2NrIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRhYmxlOiBCbG9ja1N5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkSW5saW5lQmxvY2sge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZW1lbnRzOiB0aGlzLnN0YXRlbWVudHMsXG4gICAgICBwYXJhbWV0ZXJzOiB0aGlzLnRhYmxlLnNsb3RzXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVCbG9jayBleHRlbmRzIEJsb2NrIHtcbiAgcHVibGljIHR5cGUgPSBcInRlbXBsYXRlXCI7XG4gIHB1YmxpYyB5aWVsZHMgPSBuZXcgRGljdFNldDxzdHJpbmc+KCk7XG4gIHB1YmxpYyBuYW1lZCA9IG5ldyBEaWN0U2V0PHN0cmluZz4oKTtcbiAgcHVibGljIGJsb2NrczogU2VyaWFsaXplZElubGluZUJsb2NrW10gPSBbXTtcbiAgcHVibGljIGhhc0V2YWwgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN5bWJvbFRhYmxlOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gIH1cblxuICB0b0pTT04oKTogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2sge1xuICAgIHJldHVybiB7XG4gICAgICBzeW1ib2xzOiB0aGlzLnN5bWJvbFRhYmxlLnN5bWJvbHMsXG4gICAgICBzdGF0ZW1lbnRzOiB0aGlzLnN0YXRlbWVudHMsXG4gICAgICBoYXNFdmFsOiB0aGlzLmhhc0V2YWxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRCbG9jayBleHRlbmRzIEJsb2NrIHtcbiAgcHVibGljIGF0dHJpYnV0ZXM6IFN0YXRlbWVudHMuQXR0cmlidXRlW10gPSBbXTtcbiAgcHVibGljIGFyZ3VtZW50czogU3RhdGVtZW50cy5Bcmd1bWVudFtdID0gW107XG4gIHByaXZhdGUgaW5QYXJhbXMgPSB0cnVlO1xuICBwdWJsaWMgcG9zaXRpb25hbHM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0YWJsZTogQmxvY2tTeW1ib2xUYWJsZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdXNoKHN0YXRlbWVudDogU3RhdGVtZW50KSB7XG4gICAgaWYgKHRoaXMuaW5QYXJhbXMpIHtcbiAgICAgIGlmIChpc01vZGlmaWVyKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBFbGVtZW50IG1vZGlmaWVycyBhcmUgbm90IGFsbG93ZWQgaW4gY29tcG9uZW50cycpO1xuICAgICAgfSBlbHNlIGlmIChpc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNBcmd1bWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuYXJndW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNBdHRyaWJ1dGUoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBvbmx5IHBhcmFtZXRlcnMgYWxsb3dlZCBiZWZvcmUgZmx1c2gtZWxlbWVudCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBbU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSwgQ29yZS5IYXNoLCBPcHRpb248U2VyaWFsaXplZElubGluZUJsb2NrPl0ge1xuICAgIGxldCBhcmdzID0gdGhpcy5hcmd1bWVudHM7XG4gICAgbGV0IGtleXMgPSBhcmdzLm1hcChhcmcgPT4gYXJnWzFdKTtcbiAgICBsZXQgdmFsdWVzID0gYXJncy5tYXAoYXJnID0+IGFyZ1syXSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgW2tleXMsIHZhbHVlc10sXG4gICAgICB7XG4gICAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgICAgfVxuICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlIHtcbiAgcHVibGljIGJsb2NrOiBUZW1wbGF0ZUJsb2NrO1xuXG4gIGNvbnN0cnVjdG9yKHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSkge1xuICAgIHRoaXMuYmxvY2sgPSBuZXcgVGVtcGxhdGVCbG9jayhzeW1ib2xzKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayB7XG4gICAgcmV0dXJuIHRoaXMuYmxvY2sudG9KU09OKCk7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgSW5WYXJpYWJsZSA9IG51bWJlcjtcbmV4cG9ydCB0eXBlIEluT3A8SyBleHRlbmRzIGtleW9mIENvbXBpbGVyT3BzPEluVmFyaWFibGU+ID0gT3BOYW1lPiA9IE9wPEluVmFyaWFibGUsIENvbXBpbGVyT3BzPEluVmFyaWFibGU+LCBLPjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSmF2YVNjcmlwdENvbXBpbGVyIGltcGxlbWVudHMgUHJvY2Vzc29yPENvbXBpbGVyT3BzPG51bWJlcj4sIHZvaWQsIENvbXBpbGVyT3BzPHZvaWQ+PiB7XG4gIHN0YXRpYyBwcm9jZXNzKG9wY29kZXM6IEluT3BbXSwgc3ltYm9sczogUHJvZ3JhbVN5bWJvbFRhYmxlKTogVGVtcGxhdGUge1xuICAgIGxldCBjb21waWxlciA9IG5ldyBKYXZhU2NyaXB0Q29tcGlsZXIob3Bjb2Rlcywgc3ltYm9scyk7XG4gICAgcmV0dXJuIGNvbXBpbGVyLnByb2Nlc3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVtcGxhdGU6IFRlbXBsYXRlO1xuICBwcml2YXRlIGJsb2NrcyA9IG5ldyBTdGFjazxCbG9jaz4oKTtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBJbk9wW107XG4gIHByaXZhdGUgdmFsdWVzOiBTdGFja1ZhbHVlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihvcGNvZGVzOiBJbk9wW10sIHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSkge1xuICAgIHRoaXMub3Bjb2RlcyA9IG9wY29kZXM7XG4gICAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShzeW1ib2xzKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50QmxvY2soKTogQmxvY2sge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5ibG9ja3MuY3VycmVudCwgJ0V4cGVjdGVkIGEgYmxvY2sgb24gdGhlIHN0YWNrJyk7XG4gIH1cblxuICBwcm9jZXNzKCk6IFRlbXBsYXRlIHtcbiAgICB0aGlzLm9wY29kZXMuZm9yRWFjaChvcCA9PiB7XG4gICAgICBsZXQgb3Bjb2RlID0gb3BbMF07XG4gICAgICBsZXQgYXJnID0gb3BbMV07XG5cbiAgICAgIGlmICghdGhpc1tvcGNvZGVdKSB7IHRocm93IG5ldyBFcnJvcihgdW5pbXBsZW1lbnRlZCAke29wY29kZX0gb24gSmF2YVNjcmlwdENvbXBpbGVyYCk7IH1cbiAgICAgICh0aGlzW29wY29kZV0gYXMgYW55KShhcmcpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGU7XG4gIH1cblxuICAvLy8gTmVzdGluZ1xuXG4gIHN0YXJ0QmxvY2socHJvZ3JhbTogQVNULlByb2dyYW0pIHtcbiAgICBsZXQgYmxvY2s6IEJsb2NrID0gbmV3IElubGluZUJsb2NrKHByb2dyYW1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICBsZXQgeyB0ZW1wbGF0ZSwgYmxvY2tzIH0gPSB0aGlzO1xuICAgIGxldCBibG9jayA9IGJsb2Nrcy5wb3AoKSBhcyBJbmxpbmVCbG9jaztcbiAgICB0ZW1wbGF0ZS5ibG9jay5ibG9ja3MucHVzaChibG9jay50b0pTT04oKSk7XG4gIH1cblxuICBzdGFydFByb2dyYW0oKSB7XG4gICAgdGhpcy5ibG9ja3MucHVzaCh0aGlzLnRlbXBsYXRlLmJsb2NrKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG5cbiAgfVxuXG4gIC8vLyBTdGF0ZW1lbnRzXG5cbiAgdGV4dChjb250ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5UZXh0LCBjb250ZW50XSk7XG4gIH1cblxuICBhcHBlbmQodHJ1c3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMucHVzaChbT3BzLkFwcGVuZCwgdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpLCB0cnVzdGVkXSk7XG4gIH1cblxuICBjb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5Db21tZW50LCB2YWx1ZV0pO1xuICB9XG5cbiAgbW9kaWZpZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuTW9kaWZpZXIsIG5hbWUsIHBhcmFtcywgaGFzaF0pO1xuICB9XG5cbiAgYmxvY2soW25hbWUsIHRlbXBsYXRlLCBpbnZlcnNlXTogW3N0cmluZywgbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgbGV0IGJsb2NrcyA9IHRoaXMudGVtcGxhdGUuYmxvY2suYmxvY2tzO1xuICAgIGFzc2VydCh0eXBlb2YgdGVtcGxhdGUgIT09ICdudW1iZXInIHx8IGJsb2Nrc1t0ZW1wbGF0ZV0gIT09IG51bGwsICdtaXNzaW5nIGJsb2NrIGluIHRoZSBjb21waWxlcicpO1xuICAgIGFzc2VydCh0eXBlb2YgaW52ZXJzZSAhPT0gJ251bWJlcicgfHwgYmxvY2tzW2ludmVyc2VdICE9PSBudWxsLCAnbWlzc2luZyBibG9jayBpbiB0aGUgY29tcGlsZXInKTtcblxuICAgIHRoaXMucHVzaChbT3BzLkJsb2NrLCBuYW1lLCBwYXJhbXMsIGhhc2gsIGJsb2Nrc1t0ZW1wbGF0ZV0sIGJsb2Nrc1tpbnZlcnNlXV0pO1xuICB9XG5cbiAgb3BlblNwbGF0dGVkRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAoaXNDb21wb25lbnQodGFnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21waWxlIEVycm9yOiAuLi5hdHRyaWJ1dGVzIGNhbiBvbmx5IGJlIHVzZWQgaW4gYW4gZWxlbWVudGApO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ibG9ja1BhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGUgRXJyb3I6IDwke2VsZW1lbnQudGFnfT4gaXMgbm90IGEgY29tcG9uZW50IGFuZCBkb2Vzbid0IHN1cHBvcnQgYmxvY2sgcGFyYW1ldGVyc2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goW09wcy5PcGVuU3BsYXR0ZWRFbGVtZW50LCB0YWddKTtcbiAgICB9XG4gIH1cblxuICBvcGVuRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAoaXNDb21wb25lbnQodGFnKSkge1xuICAgICAgdGhpcy5zdGFydENvbXBvbmVudChlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYmxvY2tQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21waWxlIEVycm9yOiA8JHtlbGVtZW50LnRhZ30+IGlzIG5vdCBhIGNvbXBvbmVudCBhbmQgZG9lc24ndCBzdXBwb3J0IGJsb2NrIHBhcmFtZXRlcnNgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKFtPcHMuT3BlbkVsZW1lbnQsIHRhZ10pO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoRWxlbWVudCgpIHtcbiAgICB0aGlzLnB1c2goW09wcy5GbHVzaEVsZW1lbnRdKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAoaXNDb21wb25lbnQodGFnKSkge1xuICAgICAgbGV0IFthdHRycywgYXJncywgYmxvY2tdID0gdGhpcy5lbmRDb21wb25lbnQoKTtcbiAgICAgIHRoaXMucHVzaChbT3BzLkNvbXBvbmVudCwgdGFnLCBhdHRycywgYXJncywgYmxvY2tdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKFtPcHMuQ2xvc2VFbGVtZW50XSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljQXR0cihbbmFtZSwgbmFtZXNwYWNlXTogW3N0cmluZywgc3RyaW5nXSkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5TdGF0aWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICBkeW5hbWljQXR0cihbbmFtZSwgbmFtZXNwYWNlXTogW3N0cmluZywgc3RyaW5nXSkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5EeW5hbWljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgdHJ1c3RpbmdBdHRyKFtuYW1lLCBuYW1lc3BhY2VdOiBbc3RyaW5nLCBzdHJpbmddKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLlRydXN0aW5nQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgc3RhdGljQXJnKG5hbWU6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5TdGF0aWNBcmcsIG5hbWUsIHZhbHVlXSk7XG4gIH1cblxuICBkeW5hbWljQXJnKG5hbWU6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5EeW5hbWljQXJnLCBuYW1lLCB2YWx1ZV0pO1xuICB9XG5cbiAgeWllbGQodG86IG51bWJlcikge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5ZaWVsZCwgdG8sIHBhcmFtc10pO1xuICB9XG5cbiAgYXR0clNwbGF0KHRvOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2goW09wcy5BdHRyU3BsYXQsIHRvXSk7XG4gIH1cblxuICBkZWJ1Z2dlcihldmFsSW5mbzogQ29yZS5FdmFsSW5mbykge1xuICAgIHRoaXMucHVzaChbT3BzLkRlYnVnZ2VyLCBldmFsSW5mb10pO1xuICAgIHRoaXMudGVtcGxhdGUuYmxvY2suaGFzRXZhbCA9IHRydWU7XG4gIH1cblxuICBoYXNCbG9jayhuYW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9jaz4oW09wcy5IYXNCbG9jaywgbmFtZV0pO1xuICB9XG5cbiAgaGFzQmxvY2tQYXJhbXMobmFtZTogbnVtYmVyKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuSGFzQmxvY2tQYXJhbXM+KFtPcHMuSGFzQmxvY2tQYXJhbXMsIG5hbWVdKTtcbiAgfVxuXG4gIHBhcnRpYWwoZXZhbEluZm86IENvcmUuRXZhbEluZm8pIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuUGFydGlhbCwgcGFyYW1zWzBdLCBldmFsSW5mb10pO1xuICAgIHRoaXMudGVtcGxhdGUuYmxvY2suaGFzRXZhbCA9IHRydWU7XG4gIH1cblxuICAvLy8gRXhwcmVzc2lvbnNcblxuICBsaXRlcmFsKHZhbHVlOiBFeHByZXNzaW9ucy5WYWx1ZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5VbmRlZmluZWQ+KFtPcHMuVW5kZWZpbmVkXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlZhbHVlPih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdW5rbm93bihuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5Vbmtub3duPihbT3BzLlVua25vd24sIG5hbWVdKTtcbiAgfVxuXG4gIGdldChbaGVhZCwgcGF0aF06IFtudW1iZXIsIHN0cmluZ1tdXSkge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkdldD4oW09wcy5HZXQsIGhlYWQsIHBhdGhdKTtcbiAgfVxuXG4gIG1heWJlTG9jYWwocGF0aDogc3RyaW5nW10pIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5NYXliZUxvY2FsPihbT3BzLk1heWJlTG9jYWwsIHBhdGhdKTtcbiAgfVxuXG4gIGNvbmNhdCgpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5Db25jYXQ+KFtPcHMuQ29uY2F0LCB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKV0pO1xuICB9XG5cbiAgaGVscGVyKG5hbWU6IHN0cmluZykge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICBsZXQgaGFzaCA9IHRoaXMucG9wVmFsdWU8SGFzaD4oKTtcblxuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkhlbHBlcj4oW09wcy5IZWxwZXIsIG5hbWUsIHBhcmFtcywgaGFzaF0pO1xuICB9XG5cbiAgLy8vIFN0YWNrIE1hbmFnZW1lbnQgT3Bjb2Rlc1xuXG4gIHN0YXJ0Q29tcG9uZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCBjb21wb25lbnQgPSBuZXcgQ29tcG9uZW50QmxvY2soZWxlbWVudFsnc3ltYm9scyddKTtcbiAgICB0aGlzLmJsb2Nrcy5wdXNoKGNvbXBvbmVudCk7XG4gIH1cblxuICBlbmRDb21wb25lbnQoKTogW1N0YXRlbWVudHMuQXR0cmlidXRlW10sIENvcmUuSGFzaCwgT3B0aW9uPFNlcmlhbGl6ZWRJbmxpbmVCbG9jaz5dIHtcbiAgICBsZXQgY29tcG9uZW50ID0gdGhpcy5ibG9ja3MucG9wKCk7XG4gICAgYXNzZXJ0KGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudEJsb2NrLCBcIkNvbXBpbGVyIGJ1ZzogZW5kQ29tcG9uZW50KCkgc2hvdWxkIGVuZCBhIGNvbXBvbmVudFwiKTtcbiAgICByZXR1cm4gKGNvbXBvbmVudCBhcyBDb21wb25lbnRCbG9jaykudG9KU09OKCk7XG4gIH1cblxuICBwcmVwYXJlQXJyYXkoc2l6ZTogbnVtYmVyKSB7XG4gICAgbGV0IHZhbHVlczogRXhwcmVzc2lvbltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgdmFsdWVzLnB1c2godGhpcy5wb3BWYWx1ZSgpIGFzIEV4cHJlc3Npb24pO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFZhbHVlPFBhcmFtcz4odmFsdWVzKTtcbiAgfVxuXG4gIHByZXBhcmVPYmplY3Qoc2l6ZTogbnVtYmVyKSB7XG4gICAgYXNzZXJ0KHRoaXMudmFsdWVzLmxlbmd0aCA+PSBzaXplLCBgRXhwZWN0ZWQgJHtzaXplfSB2YWx1ZXMgb24gdGhlIHN0YWNrLCBmb3VuZCAke3RoaXMudmFsdWVzLmxlbmd0aH1gKTtcblxuICAgIGxldCBrZXlzOiBzdHJpbmdbXSA9IG5ldyBBcnJheShzaXplKTtcbiAgICBsZXQgdmFsdWVzOiBFeHByZXNzaW9uW10gPSBuZXcgQXJyYXkoc2l6ZSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAga2V5c1tpXSA9IHRoaXMucG9wVmFsdWU8c3RyPigpO1xuICAgICAgdmFsdWVzW2ldID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFZhbHVlPEhhc2g+KFtrZXlzLCB2YWx1ZXNdKTtcbiAgfVxuXG4gIC8vLyBVdGlsaXRpZXNcblxuICBwdXNoKGFyZ3M6IFN0YXRlbWVudCkge1xuICAgIHdoaWxlIChhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IG51bGwpIHtcbiAgICAgIGFyZ3MucG9wKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50QmxvY2sucHVzaChhcmdzKTtcbiAgfVxuXG4gIHB1c2hWYWx1ZTxTIGV4dGVuZHMgRXhwcmVzc2lvbiB8IFBhcmFtcyB8IEhhc2g+KHZhbDogUykge1xuICAgIHRoaXMudmFsdWVzLnB1c2godmFsKTtcbiAgfVxuXG4gIHBvcFZhbHVlPFQgZXh0ZW5kcyBTdGFja1ZhbHVlPigpOiBUIHtcbiAgICBhc3NlcnQodGhpcy52YWx1ZXMubGVuZ3RoLCBcIk5vIGV4cHJlc3Npb24gZm91bmQgb24gc3RhY2tcIik7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzLnBvcCgpIGFzIFQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDb21wb25lbnQodGFnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IG9wZW4gPSB0YWcuY2hhckF0KDApO1xuXG4gIHJldHVybiBvcGVuID09PSBvcGVuLnRvVXBwZXJDYXNlKCk7XG59XG4iXX0=

@@ -6,2 +6,3 @@ "use strict";

});
exports.THIS = undefined;

@@ -22,2 +23,4 @@ var _templateVisitor = require("./template-visitor");

var _allocateSymbols = require("./allocate-symbols");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -28,2 +31,3 @@

}
const THIS = exports.THIS = 0;
class TemplateCompiler {

@@ -33,3 +37,2 @@ constructor() {

this.templateIds = [];
this.symbolStack = new _util.Stack();
this.opcodes = [];

@@ -43,7 +46,5 @@ this.includeMeta = false;

let opcodes = compiler.process(templateVisitor.actions);
return _javascriptCompiler2.default.process(opcodes, ast['symbols']);
let symbols = new _allocateSymbols.SymbolAllocator(opcodes).process();
return _javascriptCompiler2.default.process(symbols, ast['symbols']);
}
get symbols() {
return this.symbolStack.current;
}
process(actions) {

@@ -58,25 +59,21 @@ actions.forEach(([name, ...args]) => {

}
startProgram(program) {
this.symbolStack.push(program[0]['symbols']);
this.opcode('startProgram', program, program);
startProgram([program]) {
this.opcode(['startProgram', program], program);
}
endProgram() {
this.symbolStack.pop();
this.opcode('endProgram', null);
this.opcode(['endProgram', null], null);
}
startBlock(program) {
this.symbolStack.push(program[0]['symbols']);
startBlock([program]) {
this.templateId++;
this.opcode('startBlock', program, program);
this.opcode(['startBlock', program], program);
}
endBlock() {
this.symbolStack.pop();
this.templateIds.push(this.templateId - 1);
this.opcode('endBlock', null);
this.opcode(['endBlock', null], null);
}
text([action]) {
this.opcode('text', action, action.chars);
this.opcode(['text', action.chars], action);
}
comment([action]) {
this.opcode('comment', action, action.value);
this.opcode(['comment', action.value], action);
}

@@ -94,5 +91,5 @@ openElement([action]) {

if (hasSplat) {
this.opcode('openSplattedElement', action, action);
this.opcode(['openSplattedElement', action], action);
} else {
this.opcode('openElement', action, action);
this.opcode(['openElement', action], action);
}

@@ -114,8 +111,6 @@ let typeAttr = null;

}
this.opcode('flushElement', null);
this.symbolStack.push(action['symbols']);
this.opcode(['flushElement', action], null);
}
closeElement([action]) {
this.symbolStack.pop();
this.opcode('closeElement', null, action);
this.opcode(['closeElement', action], action);
}

@@ -129,7 +124,7 @@ attribute([action]) {

if (isStatic) {
this.opcode('staticArg', action, name);
this.opcode(['staticArg', name], action);
} else if (action.value.type === 'MustacheStatement') {
this.opcode('dynamicArg', action, name);
this.opcode(['dynamicArg', name], action);
} else {
this.opcode('dynamicArg', action, name);
this.opcode(['dynamicArg', name], action);
}

@@ -139,11 +134,11 @@ } else {

if (isStatic && name === '...attributes') {
this.opcode('attrSplat', action, this.symbols.allocateBlock('attrs'));
this.opcode(['attrSplat', null], action);
} else if (isStatic) {
this.opcode('staticAttr', action, name, namespace);
this.opcode(['staticAttr', [name, namespace]], action);
} else if (isTrusting) {
this.opcode('trustingAttr', action, name, namespace);
this.opcode(['trustingAttr', [name, namespace]], action);
} else if (action.value.type === 'MustacheStatement') {
this.opcode('dynamicAttr', action, name);
this.opcode(['dynamicAttr', [name, null]], action);
} else {
this.opcode('dynamicAttr', action, name, namespace);
this.opcode(['dynamicAttr', [name, namespace]], action);
}

@@ -156,3 +151,3 @@ }

this.prepareHelper(action);
this.opcode('modifier', action, parts[0]);
this.opcode(['modifier', parts[0]], action);
}

@@ -163,3 +158,3 @@ mustache([action]) {

this.mustacheExpression(action);
this.opcode('append', action, !action.escaped);
this.opcode(['append', !action.escaped], action);
} else if (isYield(path)) {

@@ -176,3 +171,3 @@ let to = assertValidYield(action);

this.mustacheExpression(action);
this.opcode('append', action, !action.escaped);
this.opcode(['append', !action.escaped], action);
}

@@ -184,3 +179,3 @@ }

let inverseId = action.inverse === null ? null : this.templateIds.pop();
this.opcode('block', action, action.path.parts[0], templateId, inverseId);
this.opcode(['block', [action.path.parts[0], templateId, inverseId]], action);
}

@@ -190,4 +185,3 @@ /// Internal actions, not found in the original processed actions

let { parts: [head, ...rest] } = path;
let symbol = this.symbols.allocateNamed(head);
this.opcode('get', path, symbol, rest);
this.opcode(['get', [`@${head}`, rest]], path);
}

@@ -197,3 +191,3 @@ mustacheExpression(expr) {

if ((0, _syntax.isLiteral)(path)) {
this.opcode('literal', expr, path.value);
this.opcode(['literal', path.value], expr);
} else if (isBuiltInHelper(path)) {

@@ -205,13 +199,17 @@ this.builtInHelper(expr);

this.prepareHelper(expr);
this.opcode('helper', expr, path.parts[0]);
this.opcode(['helper', path.parts[0]], expr);
} else if (path.this) {
this.opcode('get', expr, 0, path.parts);
} else if (isLocal(path, this.symbols)) {
this.opcode(['get', [0, path.parts]], expr);
} else {
let [head, ...parts] = path.parts;
this.opcode('get', expr, this.symbols.get(head), parts);
} else if (isSimplePath(path)) {
this.opcode('unknown', expr, path.parts[0]);
} else {
this.opcode('maybeLocal', expr, path.parts);
this.opcode(['maybeGet', [head, parts]], expr);
}
// } else if (isLocal(path, this.symbols)) {
// let [head, ...parts] = path.parts;
// this.opcode(['get', [head, parts]], expr);
// } else if (isSimplePath(path)) {
// this.opcode(['unknown', path.parts[0]], expr);
// } else {
// this.opcode(['maybeLocal', path.parts], expr);
// }
}

@@ -221,16 +219,16 @@ /// Internal Syntax

this.prepareParams(action.params);
this.opcode('yield', action, this.symbols.allocateBlock(to));
this.opcode(['yield', to], action);
}
debugger(_name, action) {
this.opcode('debugger', action, this.symbols.getEvalInfo());
this.opcode(['debugger', null], action);
}
hasBlock(name, action) {
this.opcode('hasBlock', action, this.symbols.allocateBlock(name));
this.opcode(['hasBlock', name], action);
}
hasBlockParams(name, action) {
this.opcode('hasBlockParams', action, this.symbols.allocateBlock(name));
this.opcode(['hasBlockParams', name], action);
}
partial(_params, action) {
this.prepareParams(action.params);
this.opcode('partial', action, this.symbols.getEvalInfo());
this.opcode(['partial', null], action);
}

@@ -253,3 +251,3 @@ builtInHelper(expr) {

this.prepareHelper(expr);
this.opcode('helper', expr, expr.path.parts[0]);
this.opcode(['helper', expr.path.parts[0]], expr);
}

@@ -261,10 +259,7 @@ }

} else {
let { symbols } = this;
let [head] = expr.parts;
let [head, ...rest] = expr.parts;
if (expr.this) {
this.opcode('get', expr, 0, expr.parts);
} else if (symbols.has(head)) {
this.opcode('get', expr, symbols.get(head), expr.parts.slice(1));
this.opcode(['get', [0, expr.parts]], expr);
} else {
this.opcode('maybeLocal', expr, expr.parts);
this.opcode(['get', [head, rest]], expr);
}

@@ -274,19 +269,19 @@ }

StringLiteral(action) {
this.opcode('literal', null, action.value);
this.opcode(['literal', action.value], action);
}
BooleanLiteral(action) {
this.opcode('literal', null, action.value);
this.opcode(['literal', action.value], action);
}
NumberLiteral(action) {
this.opcode('literal', null, action.value);
this.opcode(['literal', action.value], action);
}
NullLiteral(action) {
this.opcode('literal', null, action.value);
this.opcode(['literal', action.value], action);
}
UndefinedLiteral(action) {
this.opcode('literal', null, action.value);
this.opcode(['literal', action.value], action);
}
/// Utilities
opcode(name, action, ...args) {
let opcode = [name, ...args];
opcode(opcode, action = null) {
// TODO: This doesn't really work
if (this.includeMeta && action) {

@@ -305,3 +300,3 @@ opcode.push(this.meta(action));

if (!params.length) {
this.opcode('literal', null, null);
this.opcode(['literal', null], null);
return;

@@ -315,3 +310,3 @@ }

}
this.opcode('prepareArray', null, params.length);
this.opcode(['prepareArray', params.length], null);
}

@@ -321,3 +316,3 @@ prepareHash(hash) {

if (!pairs.length) {
this.opcode('literal', null, null);
this.opcode(['literal', null], null);
return;

@@ -330,5 +325,5 @@ }

this[value.type](value);
this.opcode('literal', null, key);
this.opcode(['literal', key], null);
}
this.opcode('prepareObject', null, pairs.length);
this.opcode(['prepareObject', pairs.length], null);
}

@@ -339,3 +334,3 @@ prepareAttributeValue(value) {

case 'TextNode':
this.opcode('literal', value, value.chars);
this.opcode(['literal', value.chars], value);
return true;

@@ -347,3 +342,3 @@ case 'MustacheStatement':

this.prepareConcatParts(value.parts);
this.opcode('concat', value);
this.opcode(['concat', null], value);
return false;

@@ -358,6 +353,6 @@ }

} else if (part.type === 'TextNode') {
this.opcode('literal', null, part.chars);
this.opcode(['literal', part.chars], null);
}
}
this.opcode('prepareArray', null, parts.length);
this.opcode(['prepareArray', parts.length], null);
}

@@ -383,5 +378,2 @@ attributeMustache([action]) {

}
function isLocal({ parts }, symbols) {
return symbols && symbols.has(parts[0]);
}
function isYield(path) {

@@ -465,2 +457,2 @@ return path.original === 'yield';

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9jb21waWxlci9saWIvdGVtcGxhdGUtY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsQUFBTyxBQUF3QyxBQUFNLEFBQW9CLEFBQUM7Ozs7QUFDMUUsQUFBTyxBQUFnQyxBQUFNLEFBQXVCLEFBQUM7Ozs7QUFDckUsQUFBTyxBQUFFLEFBQUssQUFBRSxBQUFNLEFBQWUsQUFBQyxBQUN0QyxBQUFPLEFBQUUsQUFBTSxBQUFFLEFBQU0sQUFBVSxBQUFNLEFBQWUsQUFBQzs7QUFDdkQsQUFBTyxBQUFPLEFBQVMsQUFBRSxBQUFXLEFBQUUsQUFBTSxBQUFpQixBQUFDOztBQUM5RCxBQUFPLEFBQUUsQUFBZ0IsQUFBRSxBQUFNLEFBQVMsQUFBQzs7OztBQU8zQyx3QkFBd0IsQUFBVSxPQUNoQyxBQUFNO1dBQUMsQUFBSyxNQUFDLEFBQU8sWUFBSyxBQUFTLGFBQUksQ0FBQyxBQUFLLE1BQUMsQUFBTyxBQUFDLEFBQ3ZELEFBQUM7QUFFRCxBQUFNLEFBQUMsQUFBTzs7a0JBVUo7YUFBVSxhQUFHLEFBQUMsQUFBQyxBQUNmO2FBQVcsY0FBYSxBQUFFLEFBQUMsQUFDM0I7YUFBVyxjQUFHLEFBQUksQUFBSyxBQUFlLEFBQUMsQUFDdkM7YUFBTyxVQUFVLEFBQUUsQUFBQyxBQUNwQjthQUFXLGNBQUcsQUFBSyxBQUFDLEFBa1g5QixBQUFDO0FBL1hDLEFBQU07V0FBQyxBQUFPLFFBQUMsQUFBZ0IsS0FDN0I7WUFBSSxBQUFlLGtCQUFHLEFBQUksQUFBZSxBQUFFLEFBQUMsQUFDNUMsQUFBZTt3QkFBQyxBQUFLLE1BQUMsQUFBRyxBQUFDLEFBQUMsQUFFM0I7WUFBSSxBQUFRLFdBQUcsSUFBSSxBQUFnQixBQUFFLEFBQUMsQUFDdEM7WUFBSSxBQUFPLFVBQUcsQUFBUSxTQUFDLEFBQU8sUUFBQyxB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SSxBQUFXLEFBQUMsMkJBQUcsQUFBSSx5REFBcUQsQUFBRyxJQUFDLEFBQUssTUFBQyxBQUFJLEFBQUcsU0FBRSxBQUFJLEtBQUMsQUFBRyxBQUFDLEFBQUMsQUFDakgsQUFBQyxBQUNIO0FBQUM7O0FBRUQsa0NBQWtDLEFBQWdDLFdBQ2hFO1FBQUksRUFBRSxBQUFNLFFBQUUsQUFBSSxBQUFFLFNBQUcsQUFBUyxBQUFDLEFBRWpDLEFBQUUsQUFBQztRQUFDLEFBQUksUUFBSSxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQU0sU0FBRyxBQUFDLEFBQUMsR0FBQyxBQUFDLEFBQ2xDO2NBQU0sQUFBSSxBQUFXLEFBQUMsQUFBNEMsc0VBQUUsQUFBUyxVQUFDLEFBQUcsQUFBQyxBQUFDLEFBQ3JGLEFBQUM7QUFFRCxBQUFFLEFBQUM7UUFBQyxBQUFNLE9BQUMsQUFBTSxXQUFLLEFBQUMsQUFBQyxHQUFDLEFBQUMsQUFDeEIsQUFBTTtlQUFDLEFBQVMsQUFBQyxBQUNuQixBQUFDLEFBQUMsQUFBSTtXQUFDLEFBQUMsQUFDTjtjQUFNLEFBQUksQUFBVyxBQUFDLEFBQWlELDJFQUFFLEFBQVMsVUFBQyxBQUFHLEFBQUMsQUFBQyxBQUMxRixBQUFDLEFBQ0g7QUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZW1wbGF0ZVZpc2l0b3IsIHsgU3ltYm9sVGFibGUsIEFjdGlvbiB9IGZyb20gXCIuL3RlbXBsYXRlLXZpc2l0b3JcIjtcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIsIHsgVGVtcGxhdGUgfSBmcm9tIFwiLi9qYXZhc2NyaXB0LWNvbXBpbGVyXCI7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBhc3NlcnQsIGV4cGVjdCwgT3B0aW9uIH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IEFTVCwgaXNMaXRlcmFsLCBTeW50YXhFcnJvciB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBnZXRBdHRyTmFtZXNwYWNlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBPcGFxdWUgfSBmcm9tIFwiQGdsaW1tZXIvaW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zIHtcbiAgbWV0YTogT3BhcXVlO1xufVxuXG5mdW5jdGlvbiBpc1RydXN0ZWRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gIHJldHVybiB2YWx1ZS5lc2NhcGVkICE9PSB1bmRlZmluZWQgJiYgIXZhbHVlLmVzY2FwZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlQ29tcGlsZXIge1xuICBzdGF0aWMgY29tcGlsZShhc3Q6IEFTVC5Qcm9ncmFtKTogVGVtcGxhdGUge1xuICAgIGxldCB0ZW1wbGF0ZVZpc2l0b3IgPSBuZXcgVGVtcGxhdGVWaXNpdG9yKCk7XG4gICAgdGVtcGxhdGVWaXNpdG9yLnZpc2l0KGFzdCk7XG5cbiAgICBsZXQgY29tcGlsZXIgPSBuZXcgVGVtcGxhdGVDb21waWxlcigpO1xuICAgIGxldCBvcGNvZGVzID0gY29tcGlsZXIucHJvY2Vzcyh0ZW1wbGF0ZVZpc2l0b3IuYWN0aW9ucyk7XG4gICAgcmV0dXJuIEphdmFTY3JpcHRDb21waWxlci5wcm9jZXNzKG9wY29kZXMsIGFzdFsnc3ltYm9scyddKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVtcGxhdGVJZCA9IDA7XG4gIHByaXZhdGUgdGVtcGxhdGVJZHM6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgc3ltYm9sU3RhY2sgPSBuZXcgU3RhY2s8U3ltYm9sVGFibGU+KCk7XG4gIHByaXZhdGUgb3Bjb2RlczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBpbmNsdWRlTWV0YSA9IGZhbHNlO1xuXG4gIGdldCBzeW1ib2xzKCk6IFN5bWJvbFRhYmxlIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuc3ltYm9sU3RhY2suY3VycmVudCwgJ0V4cGVjdGVkIGEgc3ltYm9sIHRhYmxlIG9uIHRoZSBzdGFjaycpO1xuICB9XG5cbiAgcHJvY2VzcyhhY3Rpb25zOiBBY3Rpb25bXSk6IEFjdGlvbltdIHtcbiAgICBhY3Rpb25zLmZvckVhY2goKFtuYW1lLCAuLi5hcmdzXSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW25hbWVdKSB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCAke25hbWV9IG9uIFRlbXBsYXRlQ29tcGlsZXJgKTsgfVxuICAgICAgKHRoaXNbbmFtZV0gYXMgYW55KSguLi5hcmdzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5vcGNvZGVzO1xuICB9XG5cbiAgc3RhcnRQcm9ncmFtKHByb2dyYW06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2gocHJvZ3JhbVswXVsnc3ltYm9scyddKTtcbiAgICB0aGlzLm9wY29kZSgnc3RhcnRQcm9ncmFtJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRQcm9ncmFtKCkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2VuZFByb2dyYW0nLCBudWxsKTtcbiAgfVxuXG4gIHN0YXJ0QmxvY2socHJvZ3JhbTogW0FTVC5Qcm9ncmFtXSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChwcm9ncmFtWzBdWydzeW1ib2xzJ10pO1xuICAgIHRoaXMudGVtcGxhdGVJZCsrO1xuICAgIHRoaXMub3Bjb2RlKCdzdGFydEJsb2NrJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgIHRoaXMudGVtcGxhdGVJZHMucHVzaCh0aGlzLnRlbXBsYXRlSWQgLSAxKTtcbiAgICB0aGlzLm9wY29kZSgnZW5kQmxvY2snLCBudWxsKTtcbiAgfVxuXG4gIHRleHQoW2FjdGlvbl06IFtBU1QuVGV4dE5vZGVdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3RleHQnLCBhY3Rpb24sIGFjdGlvbi5jaGFycyk7XG4gIH1cblxuICBjb21tZW50KFthY3Rpb25dOiBbQVNULkNvbW1lbnRTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2NvbW1lbnQnLCBhY3Rpb24sIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBvcGVuRWxlbWVudChbYWN0aW9uXTogW0FTVC5FbGVtZW50Tm9kZV0pIHtcbiAgICBsZXQgYXR0cmlidXRlcyA9IGFjdGlvbi5hdHRyaWJ1dGVzO1xuICAgIGxldCBoYXNTcGxhdDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGF0dHIgPSBhdHRyaWJ1dGVzW2ldO1xuICAgICAgaWYgKGF0dHIubmFtZSA9PT0gJy4uLmF0dHJpYnV0ZXMnKSB7XG4gICAgICAgIGhhc1NwbGF0ID0gYXR0cjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1NwbGF0KSB7XG4gICAgICB0aGlzLm9wY29kZSgnb3BlblNwbGF0dGVkRWxlbWVudCcsIGFjdGlvbiwgYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ29wZW5FbGVtZW50JywgYWN0aW9uLCBhY3Rpb24pO1xuICAgIH1cblxuICAgIGxldCB0eXBlQXR0ciA6IE9wdGlvbjxBU1QuQXR0ck5vZGU+ID0gbnVsbDtcbiAgICBsZXQgYXR0cnMgPSBhY3Rpb24uYXR0cmlidXRlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXR0cnNbaV0ubmFtZSA9PT0gJ3R5cGUnKSB7XG4gICAgICAgIHR5cGVBdHRyID0gYXR0cnNbaV07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5hdHRyaWJ1dGUoW2F0dHJzW2ldXSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVBdHRyKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZShbdHlwZUF0dHJdKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5tb2RpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubW9kaWZpZXIoW2FjdGlvbi5tb2RpZmllcnNbaV1dKTtcbiAgICB9XG4gICAgdGhpcy5vcGNvZGUoJ2ZsdXNoRWxlbWVudCcsIG51bGwpO1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChhY3Rpb25bJ3N5bWJvbHMnXSk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoW2FjdGlvbl06IFtBU1QuRWxlbWVudE5vZGVdKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnY2xvc2VFbGVtZW50JywgbnVsbCwgYWN0aW9uKTtcbiAgfVxuXG4gIGF0dHJpYnV0ZShbYWN0aW9uXTogW0FTVC5BdHRyTm9kZV0pIHtcbiAgICBsZXQgeyBuYW1lLCB2YWx1ZSB9ID0gYWN0aW9uO1xuXG4gICAgbGV0IG5hbWVzcGFjZSA9IGdldEF0dHJOYW1lc3BhY2UobmFtZSk7XG5cbiAgICBsZXQgaXNTdGF0aWMgPSB0aGlzLnByZXBhcmVBdHRyaWJ1dGVWYWx1ZSh2YWx1ZSk7XG5cbiAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09ICdAJykge1xuICAgICAgLy8gQXJndW1lbnRzXG4gICAgICBpZiAoaXNTdGF0aWMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3N0YXRpY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGlzVHJ1c3RpbmcgPSBpc1RydXN0ZWRWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGlmIChpc1N0YXRpYyAmJiBuYW1lID09PSAnLi4uYXR0cmlidXRlcycpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2F0dHJTcGxhdCcsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2soJ2F0dHJzJykpO1xuICAgICAgfSBlbHNlIGlmIChpc1N0YXRpYykge1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhdGljQXR0cicsIGFjdGlvbiwgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUcnVzdGluZykge1xuICAgICAgICB0aGlzLm9wY29kZSgndHJ1c3RpbmdBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24udmFsdWUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1vZGlmaWVyKFthY3Rpb25dOiBbQVNULkVsZW1lbnRNb2RpZmllclN0YXRlbWVudF0pIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoYWN0aW9uLnBhdGgsIGFjdGlvbi5sb2MsICdtb2RpZmllcicpO1xuXG4gICAgbGV0IHsgcGF0aDogeyBwYXJ0cyB9IH0gPSBhY3Rpb247XG5cbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICB0aGlzLm9wY29kZSgnbW9kaWZpZXInLCBhY3Rpb24sIHBhcnRzWzBdKTtcbiAgfVxuXG4gIG11c3RhY2hlKFthY3Rpb25dOiBbQVNULk11c3RhY2hlU3RhdGVtZW50XSkge1xuICAgIGxldCB7IHBhdGggfSA9IGFjdGlvbjtcblxuICAgIGlmIChpc0xpdGVyYWwocGF0aCkpIHtcbiAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJywgYWN0aW9uLCAhYWN0aW9uLmVzY2FwZWQpO1xuICAgIH0gZWxzZSBpZiAoaXNZaWVsZChwYXRoKSkge1xuICAgICAgbGV0IHRvID0gYXNzZXJ0VmFsaWRZaWVsZChhY3Rpb24pO1xuICAgICAgdGhpcy55aWVsZCh0bywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFydGlhbChwYXRoKSkge1xuICAgICAgbGV0IHBhcmFtcyA9IGFzc2VydFZhbGlkUGFydGlhbChhY3Rpb24pO1xuICAgICAgdGhpcy5wYXJ0aWFsKHBhcmFtcywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzRGVidWdnZXIocGF0aCkpIHtcbiAgICAgIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZShhY3Rpb24pO1xuICAgICAgdGhpcy5kZWJ1Z2dlcignZGVidWdnZXInLCBhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcsIGFjdGlvbiwgIWFjdGlvbi5lc2NhcGVkKTtcbiAgICB9XG4gIH1cblxuICBibG9jayhbYWN0aW9uLyosIGluZGV4LCBjb3VudCovXTogW0FTVC5CbG9ja1N0YXRlbWVudF0pIHtcbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICBsZXQgdGVtcGxhdGVJZCA9IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgbGV0IGludmVyc2VJZCA9IGFjdGlvbi5pbnZlcnNlID09PSBudWxsID8gbnVsbCA6IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2Jsb2NrJywgYWN0aW9uLCBhY3Rpb24ucGF0aC5wYXJ0c1swXSwgdGVtcGxhdGVJZCwgaW52ZXJzZUlkKTtcbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBhY3Rpb25zLCBub3QgZm91bmQgaW4gdGhlIG9yaWdpbmFsIHByb2Nlc3NlZCBhY3Rpb25zXG5cbiAgYXJnKFtwYXRoXTogW0FTVC5QYXRoRXhwcmVzc2lvbl0pIHtcbiAgICBsZXQgeyBwYXJ0czogW2hlYWQsIC4uLnJlc3RdIH0gPSBwYXRoO1xuICAgIGxldCBzeW1ib2wgPSB0aGlzLnN5bWJvbHMuYWxsb2NhdGVOYW1lZChoZWFkKTtcbiAgICB0aGlzLm9wY29kZSgnZ2V0JywgcGF0aCwgc3ltYm9sLCByZXN0KTtcbiAgfVxuXG4gIG11c3RhY2hlRXhwcmVzc2lvbihleHByOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuXG4gICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBleHByLCBwYXRoLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGlzQnVpbHRJbkhlbHBlcihwYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIgYXMgQVNULkNhbGwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcmcocGF0aCkpIHtcbiAgICAgIHRoaXMuYXJnKFtwYXRoXSk7XG4gICAgfSBlbHNlIGlmIChpc0hlbHBlckludm9jYXRpb24oZXhwcikpIHtcbiAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihleHByKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdoZWxwZXInLCBleHByLCBwYXRoLnBhcnRzWzBdKTtcbiAgICB9IGVsc2UgaWYgKHBhdGgudGhpcykge1xuICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIHBhdGgucGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNMb2NhbChwYXRoLCB0aGlzLnN5bWJvbHMpKSB7XG4gICAgICBsZXQgW2hlYWQsIC4uLnBhcnRzXSA9IHBhdGgucGFydHM7XG4gICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgdGhpcy5zeW1ib2xzLmdldChoZWFkKSwgcGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgICB0aGlzLm9wY29kZSgndW5rbm93bicsIGV4cHIsIHBhdGgucGFydHNbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wY29kZSgnbWF5YmVMb2NhbCcsIGV4cHIsIHBhdGgucGFydHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBTeW50YXhcblxuICB5aWVsZCh0bzogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICB0aGlzLm9wY29kZSgneWllbGQnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKHRvKSk7XG4gIH1cblxuICBkZWJ1Z2dlcihfbmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMub3Bjb2RlKCdkZWJ1Z2dlcicsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCkpO1xuICB9XG5cbiAgaGFzQmxvY2sobmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5DYWxsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2hhc0Jsb2NrJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuYWxsb2NhdGVCbG9jayhuYW1lKSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULkNhbGwpIHtcbiAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2tQYXJhbXMnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgfVxuXG4gIHBhcnRpYWwoX3BhcmFtczogQVNULkV4cHJlc3Npb25bXSwgYWN0aW9uOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMoYWN0aW9uLnBhcmFtcyk7XG4gICAgdGhpcy5vcGNvZGUoJ3BhcnRpYWwnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5nZXRFdmFsSW5mbygpKTtcbiAgfVxuXG4gIGJ1aWx0SW5IZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuICAgIGlmIChpc0hhc0Jsb2NrKHBhdGgpKSB7XG4gICAgICBsZXQgbmFtZSA9IGFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZShleHByLnBhdGgub3JpZ2luYWwsIGV4cHIpO1xuICAgICAgdGhpcy5oYXNCbG9jayhuYW1lLCBleHByKTtcbiAgICB9IGVsc2UgaWYgKGlzSGFzQmxvY2tQYXJhbXMocGF0aCkpIHtcbiAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICB0aGlzLmhhc0Jsb2NrUGFyYW1zKG5hbWUsIGV4cHIpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9ucywgaW52b2tlZCByZWN1cnNpdmVseSBmcm9tIHByZXBhcmVQYXJhbXMgYW5kIHByZXBhcmVIYXNoXG5cbiAgU3ViRXhwcmVzc2lvbihleHByOiBBU1QuU3ViRXhwcmVzc2lvbikge1xuICAgIGlmIChpc0J1aWx0SW5IZWxwZXIoZXhwci5wYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXBhcmVIZWxwZXIoZXhwcik7XG4gICAgICB0aGlzLm9wY29kZSgnaGVscGVyJywgZXhwciwgZXhwci5wYXRoLnBhcnRzWzBdKTtcbiAgICB9XG4gIH1cblxuICBQYXRoRXhwcmVzc2lvbihleHByOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgICBpZiAoZXhwci5kYXRhKSB7XG4gICAgICB0aGlzLmFyZyhbZXhwcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgeyBzeW1ib2xzIH0gPSB0aGlzO1xuICAgICAgbGV0IFtoZWFkXSA9IGV4cHIucGFydHM7XG5cbiAgICAgIGlmIChleHByLnRoaXMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIGV4cHIucGFydHMpO1xuICAgICAgfSBlbHNlIGlmIChzeW1ib2xzLmhhcyhoZWFkKSkge1xuICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgc3ltYm9scy5nZXQoaGVhZCksIGV4cHIucGFydHMuc2xpY2UoMSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ21heWJlTG9jYWwnLGV4cHIsIGV4cHIucGFydHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFN0cmluZ0xpdGVyYWwoYWN0aW9uOiBBU1QuU3RyaW5nTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIEJvb2xlYW5MaXRlcmFsKGFjdGlvbjogQVNULkJvb2xlYW5MaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgTnVtYmVyTGl0ZXJhbChhY3Rpb246IEFTVC5OdW1iZXJMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgTnVsbExpdGVyYWwoYWN0aW9uOiBBU1QuTnVsbExpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBVbmRlZmluZWRMaXRlcmFsKGFjdGlvbjogQVNULlVuZGVmaW5lZExpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICAvLy8gVXRpbGl0aWVzXG5cbiAgb3Bjb2RlKG5hbWU6IGFueSwgYWN0aW9uOiBhbnksIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgbGV0IG9wY29kZSA9IFtuYW1lLCAuLi5hcmdzXTtcbiAgICBpZiAodGhpcy5pbmNsdWRlTWV0YSAmJiBhY3Rpb24pIHtcbiAgICAgIG9wY29kZS5wdXNoKHRoaXMubWV0YShhY3Rpb24pKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZXMucHVzaChvcGNvZGUpO1xuICB9XG5cbiAgcHJlcGFyZUhlbHBlcihleHByOiBBU1QuQ2FsbCkge1xuICAgIGFzc2VydElzU2ltcGxlUGF0aChleHByLnBhdGgsIGV4cHIubG9jLCAnaGVscGVyJyk7XG5cbiAgICBsZXQgeyBwYXJhbXMsIGhhc2ggfSA9IGV4cHI7XG5cbiAgICB0aGlzLnByZXBhcmVIYXNoKGhhc2gpO1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhwYXJhbXMpO1xuICB9XG5cbiAgcHJlcGFyZVBhcmFtcyhwYXJhbXM6IEFTVC5FeHByZXNzaW9uW10pIHtcbiAgICBpZiAoIXBhcmFtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHBhcmFtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHBhcmFtID0gcGFyYW1zW2ldO1xuXG4gICAgICBhc3NlcnQodGhpc1twYXJhbS50eXBlXSwgYFVuaW1wbGVtZW50ZWQgJHtwYXJhbS50eXBlfSBvbiBUZW1wbGF0ZUNvbXBpbGVyYCk7XG4gICAgICAodGhpc1twYXJhbS50eXBlXSBhcyBhbnkpKHBhcmFtKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZUFycmF5JywgbnVsbCwgcGFyYW1zLmxlbmd0aCk7XG4gIH1cblxuICBwcmVwYXJlSGFzaChoYXNoOiBBU1QuSGFzaCkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG5cbiAgICBpZiAoIXBhaXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gcGFpcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCB7IGtleSwgdmFsdWUgfSA9IHBhaXJzW2ldO1xuXG4gICAgICBhc3NlcnQodGhpc1t2YWx1ZS50eXBlXSwgYFVuaW1wbGVtZW50ZWQgJHt2YWx1ZS50eXBlfSBvbiBUZW1wbGF0ZUNvbXBpbGVyYCk7XG4gICAgICAodGhpc1t2YWx1ZS50eXBlXSBhcyBhbnkpKHZhbHVlKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwga2V5KTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZU9iamVjdCcsIG51bGwsIHBhaXJzLmxlbmd0aCk7XG4gIH1cblxuICBwcmVwYXJlQXR0cmlidXRlVmFsdWUodmFsdWU6IEFTVC5BdHRyTm9kZVsndmFsdWUnXSkge1xuICAgIC8vIHJldHVybnMgdGhlIHN0YXRpYyB2YWx1ZSBpZiB0aGUgdmFsdWUgaXMgc3RhdGljXG5cbiAgICBzd2l0Y2ggKHZhbHVlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ1RleHROb2RlJzpcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCB2YWx1ZSwgdmFsdWUuY2hhcnMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ011c3RhY2hlU3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVNdXN0YWNoZShbdmFsdWVdKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY2FzZSAnQ29uY2F0U3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5wcmVwYXJlQ29uY2F0UGFydHModmFsdWUucGFydHMpO1xuICAgICAgICB0aGlzLm9wY29kZSgnY29uY2F0JywgdmFsdWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZUNvbmNhdFBhcnRzKHBhcnRzOiBBU1QuQ29uY2F0U3RhdGVtZW50WydwYXJ0cyddKSB7XG4gICAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgcGFydCA9IHBhcnRzW2ldO1xuXG4gICAgICBpZiAocGFydC50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3BhcnRdKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydC50eXBlID09PSAnVGV4dE5vZGUnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgcGFydC5jaGFycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcnRzLmxlbmd0aCk7XG4gIH1cblxuICBhdHRyaWJ1dGVNdXN0YWNoZShbYWN0aW9uXTogW0FTVC5NdXN0YWNoZVN0YXRlbWVudF0pIHtcbiAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICB9XG5cbiAgbWV0YShub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICBsZXQgbG9jID0gbm9kZS5sb2M7XG4gICAgaWYgKCFsb2MpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICBsZXQgeyBzb3VyY2UsIHN0YXJ0LCBlbmQgfSA9IGxvYztcbiAgICByZXR1cm4gWyAnbG9jJywgW3NvdXJjZSB8fCBudWxsLCBbc3RhcnQubGluZSwgc3RhcnQuY29sdW1uXSwgW2VuZC5saW5lLCBlbmQuY29sdW1uXV0gXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0hlbHBlckludm9jYXRpb24obXVzdGFjaGU6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCk6IG11c3RhY2hlIGlzIEFTVC5NdXN0YWNoZVN0YXRlbWVudCAmIHsgcGF0aDogQVNULlBhdGhFeHByZXNzaW9uIH0ge1xuICByZXR1cm4gKG11c3RhY2hlLnBhcmFtcyAmJiBtdXN0YWNoZS5wYXJhbXMubGVuZ3RoID4gMCkgfHxcbiAgICAobXVzdGFjaGUuaGFzaCAmJiBtdXN0YWNoZS5oYXNoLnBhaXJzLmxlbmd0aCA+IDApO1xufVxuXG5mdW5jdGlvbiBpc1NpbXBsZVBhdGgoeyBwYXJ0cyB9OiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMTtcbn1cblxuZnVuY3Rpb24gaXNMb2NhbCh7IHBhcnRzIH06IEFTVC5QYXRoRXhwcmVzc2lvbiwgc3ltYm9sczogU3ltYm9sVGFibGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN5bWJvbHMgJiYgLyogcGFydHMubGVuZ3RoICYmICovIHN5bWJvbHMuaGFzKHBhcnRzWzBdKTtcbn1cblxuZnVuY3Rpb24gaXNZaWVsZChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICd5aWVsZCc7XG59XG5cbmZ1bmN0aW9uIGlzUGFydGlhbChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdwYXJ0aWFsJztcbn1cblxuZnVuY3Rpb24gaXNEZWJ1Z2dlcihwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdkZWJ1Z2dlcic7XG59XG5cbmZ1bmN0aW9uIGlzSGFzQmxvY2socGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrJztcbn1cblxuZnVuY3Rpb24gaXNIYXNCbG9ja1BhcmFtcyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdoYXMtYmxvY2stcGFyYW1zJztcbn1cblxuZnVuY3Rpb24gaXNCdWlsdEluSGVscGVyKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gaXNIYXNCbG9jayhwYXRoKSB8fCBpc0hhc0Jsb2NrUGFyYW1zKHBhdGgpO1xufVxuXG5mdW5jdGlvbiBpc0FyZyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuICEhcGF0aFsnZGF0YSddO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRJc1NpbXBsZVBhdGgocGF0aDogQVNULlBhdGhFeHByZXNzaW9uLCBsb2M6IEFTVC5Tb3VyY2VMb2NhdGlvbiwgY29udGV4dDogc3RyaW5nKSB7XG4gIGlmICghaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBcXGAke3BhdGgub3JpZ2luYWx9XFxgIGlzIG5vdCBhIHZhbGlkIG5hbWUgZm9yIGEgJHtjb250ZXh0fSBvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9LmAsIHBhdGgubG9jKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFlpZWxkKHN0YXRlbWVudDogQVNULk11c3RhY2hlU3RhdGVtZW50KTogc3RyaW5nIHtcbiAgbGV0IHsgcGFpcnMgfSA9IHN0YXRlbWVudC5oYXNoO1xuXG4gIGlmICgocGFpcnMubGVuZ3RoID09PSAxICYmIHBhaXJzWzBdLmtleSAhPT0gJ3RvJykgfHwgcGFpcnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgeWllbGQgb25seSB0YWtlcyBhIHNpbmdsZSBuYW1lZCBhcmd1bWVudDogJ3RvJ2AsIHN0YXRlbWVudC5sb2MpO1xuICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMSAmJiBwYWlyc1swXS52YWx1ZS50eXBlICE9PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWVgLCBzdGF0ZW1lbnQubG9jKTtcbiAgfSBlbHNlIGlmIChwYWlycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAocGFpcnNbMF0udmFsdWUgYXMgQVNULlN0cmluZ0xpdGVyYWwpLnZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUGFydGlhbChzdGF0ZW1lbnQ6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkgLyogOiBleHByICovIHtcbiAgbGV0IHsgcGFyYW1zLCBoYXNoLCBlc2NhcGVkLCBsb2MgfSA9IHN0YXRlbWVudDtcblxuICBpZiAocGFyYW1zICYmIHBhcmFtcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFBhcnRpYWwgZm91bmQgd2l0aCBubyBhcmd1bWVudHMuIFlvdSBtdXN0IHNwZWNpZnkgYSB0ZW1wbGF0ZSBuYW1lLiAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgLCBzdGF0ZW1lbnQubG9jKTtcbiAgfSBlbHNlIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgcGFydGlhbCBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHMgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCwgc3RhdGVtZW50LmxvYyk7XG4gIH0gZWxzZSBpZiAoIWVzY2FwZWQpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYHt7e3BhcnRpYWwgLi4ufX19IGlzIG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSB1c2Uge3twYXJ0aWFsIC4uLn19IGluc3RlYWQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCwgc3RhdGVtZW50LmxvYyk7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UodHlwZTogc3RyaW5nLCBjYWxsOiBBU1QuQ2FsbCk6IHN0cmluZyB7XG4gIGxldCB7IHBhcmFtcywgaGFzaCwgbG9jIH0gPSBjYWxsO1xuXG4gIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgJHt0eXBlfSBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHNgLCBjYWxsLmxvYyk7XG4gIH1cblxuICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMSkge1xuICAgIGxldCBwYXJhbSA9IHBhcmFtc1swXTtcbiAgICBpZiAocGFyYW0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICByZXR1cm4gcGFyYW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgeW91IGNhbiBvbmx5IHlpZWxkIHRvIGEgbGl0ZXJhbCB2YWx1ZSAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgLCBjYWxsLmxvYyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgJHt0eXBlfSBvbmx5IHRha2VzIGEgc2luZ2xlIHBvc2l0aW9uYWwgYXJndW1lbnQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCwgY2FsbC5sb2MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZShzdGF0ZW1lbnQ6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICBsZXQgeyBwYXJhbXMsIGhhc2ggfSA9IHN0YXRlbWVudDtcblxuICBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYGRlYnVnZ2VyIGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2AsIHN0YXRlbWVudC5sb2MpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgcG9zaXRpb25hbCBhcmd1bWVudHNgLCBzdGF0ZW1lbnQubG9jKTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9jb21waWxlci9saWIvdGVtcGxhdGUtY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLEFBQU8sQUFBMkIsQUFBTSxBQUFvQixBQUFDOzs7O0FBQzdELEFBQU8sQUFBZ0MsQUFBTSxBQUF1QixBQUFDOzs7O0FBQ3JFLEFBQU8sQUFBRSxBQUFNLEFBQVUsQUFBTSxBQUFlLEFBQUM7O0FBQy9DLEFBQU8sQUFBTyxBQUFTLEFBQUUsQUFBVyxBQUFFLEFBQU0sQUFBaUIsQUFBQzs7QUFDOUQsQUFBTyxBQUFFLEFBQWdCLEFBQUUsQUFBTSxBQUFTLEFBQUM7O0FBRTNDLEFBQU8sQUFBRSxBQUFlLEFBQTRDLEFBQU0sQUFBb0IsQUFBQzs7OztBQU0vRix3QkFBd0IsQUFBVSxPQUNoQyxBQUFNO1dBQUMsQUFBSyxNQUFDLEFBQU8sWUFBSyxBQUFTLGFBQUksQ0FBQyxBQUFLLE1BQUMsQUFBTyxBQUFDLEFBQ3ZELEFBQUM7QUFFRCxBQUFNO0FBQUMsTUFBTSxBQUFJLHNCQUFHLEFBQUMsQUFBQyxBQUV0QixBQUFNLEFBQUMsQUFBTzs7a0JBWUo7YUFBVSxhQUFHLEFBQUMsQUFBQyxBQUNmO2FBQVcsY0FBYSxBQUFFLEFBQUMsQUFDM0I7YUFBTyxVQUFpQixBQUFFLEFBQUMsQUFDM0I7YUFBVyxjQUFHLEFBQUssQUFBQyxBQXlXOUIsQUFBQztBQXZYQyxBQUFNO1dBQUMsQUFBTyxRQUFDLEFBQWdCLEtBQzdCO1lBQUksQUFBZSxrQkFBRyxBQUFJLEFBQWUsQUFBRSxBQUFDLEFBQzVDLEFBQWU7d0JBQUMsQUFBSyxNQUFDLEFBQUcsQUFBQyxBQUFDLEFBRTNCO1lBQUksQUFBUSxXQUFHLElBQUksQUFBZ0IsQUFBRSxBQUFDLEFBQ3RDO1lBQUksQUFBTyxVQUFpQixBQUFRLFNBQUMsQUFBTyxRQUFD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QUFDLEFBQ25DLEFBQU07bUJBQUMsQUFBSyxNQUFDLEFBQUssQUFBQyxBQUNyQixBQUFDLEFBQUMsQUFBSTtlQUFDLEFBQUMsQUFDTjtrQkFBTSxBQUFJLEFBQVcsQUFBQywwRUFBa0QsQUFBRyxJQUFDLEFBQUssTUFBQyxBQUFJLEFBQUcsU0FBRSxBQUFJLEtBQUMsQUFBRyxBQUFDLEFBQUMsQUFDdkcsQUFBQyxBQUNIO0FBQUMsQUFBQyxBQUFJO0FBUEMsQUFBRSxBQUFDLFdBT0gsQUFBQyxBQUNOO2NBQU0sQUFBSSxBQUFXLEFBQUMsMkJBQUcsQUFBSSx5REFBcUQsQUFBRyxJQUFDLEFBQUssTUFBQyxBQUFJLEFBQUcsU0FBRSxBQUFJLEtBQUMsQUFBRyxBQUFDLEFBQUMsQUFDakgsQUFBQyxBQUNIO0FBQUM7O0FBRUQsa0NBQWtDLEFBQWdDLFdBQ2hFO1FBQUksRUFBRSxBQUFNLFFBQUUsQUFBSSxBQUFFLFNBQUcsQUFBUyxBQUFDLEFBRWpDLEFBQUUsQUFBQztRQUFDLEFBQUksUUFBSSxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQU0sU0FBRyxBQUFDLEFBQUMsR0FBQyxBQUFDLEFBQ2xDO2NBQU0sQUFBSSxBQUFXLEFBQUMsQUFBNEMsc0VBQUUsQUFBUyxVQUFDLEFBQUcsQUFBQyxBQUFDLEFBQ3JGLEFBQUM7QUFFRCxBQUFFLEFBQUM7UUFBQyxBQUFNLE9BQUMsQUFBTSxXQUFLLEFBQUMsQUFBQyxHQUFDLEFBQUMsQUFDeEIsQUFBTTtlQUFDLEFBQVMsQUFBQyxBQUNuQixBQUFDLEFBQUMsQUFBSTtXQUFDLEFBQUMsQUFDTjtjQUFNLEFBQUksQUFBVyxBQUFDLEFBQWlELDJFQUFFLEFBQVMsVUFBQyxBQUFHLEFBQUMsQUFBQyxBQUMxRixBQUFDLEFBQ0g7QUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZW1wbGF0ZVZpc2l0b3IsIHsgQWN0aW9uIH0gZnJvbSBcIi4vdGVtcGxhdGUtdmlzaXRvclwiO1xuaW1wb3J0IEphdmFTY3JpcHRDb21waWxlciwgeyBUZW1wbGF0ZSB9IGZyb20gXCIuL2phdmFzY3JpcHQtY29tcGlsZXJcIjtcbmltcG9ydCB7IGFzc2VydCwgT3B0aW9uIH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IEFTVCwgaXNMaXRlcmFsLCBTeW50YXhFcnJvciB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBnZXRBdHRyTmFtZXNwYWNlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBPcGFxdWUgfSBmcm9tIFwiQGdsaW1tZXIvaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgU3ltYm9sQWxsb2NhdG9yLCBJbk9wIGFzIFN5bWJvbEluT3AsIE91dE9wIGFzIFN5bWJvbE91dE9wIH0gZnJvbSBcIi4vYWxsb2NhdGUtc3ltYm9sc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zIHtcbiAgbWV0YTogT3BhcXVlO1xufVxuXG5mdW5jdGlvbiBpc1RydXN0ZWRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gIHJldHVybiB2YWx1ZS5lc2NhcGVkICE9PSB1bmRlZmluZWQgJiYgIXZhbHVlLmVzY2FwZWQ7XG59XG5cbmV4cG9ydCBjb25zdCBUSElTID0gMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVtcGxhdGVDb21waWxlciB7XG4gIHN0YXRpYyBjb21waWxlKGFzdDogQVNULlByb2dyYW0pOiBUZW1wbGF0ZSB7XG4gICAgbGV0IHRlbXBsYXRlVmlzaXRvciA9IG5ldyBUZW1wbGF0ZVZpc2l0b3IoKTtcbiAgICB0ZW1wbGF0ZVZpc2l0b3IudmlzaXQoYXN0KTtcblxuICAgIGxldCBjb21waWxlciA9IG5ldyBUZW1wbGF0ZUNvbXBpbGVyKCk7XG4gICAgbGV0IG9wY29kZXM6IFN5bWJvbEluT3BbXSA9IGNvbXBpbGVyLnByb2Nlc3ModGVtcGxhdGVWaXNpdG9yLmFjdGlvbnMpO1xuICAgIGxldCBzeW1ib2xzOiBTeW1ib2xPdXRPcFtdID0gbmV3IFN5bWJvbEFsbG9jYXRvcihvcGNvZGVzKS5wcm9jZXNzKCk7XG5cbiAgICByZXR1cm4gSmF2YVNjcmlwdENvbXBpbGVyLnByb2Nlc3Moc3ltYm9scywgYXN0WydzeW1ib2xzJ10pO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZW1wbGF0ZUlkID0gMDtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZUlkczogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBTeW1ib2xJbk9wW10gPSBbXTtcbiAgcHJpdmF0ZSBpbmNsdWRlTWV0YSA9IGZhbHNlO1xuXG4gIHByb2Nlc3MoYWN0aW9uczogQWN0aW9uW10pOiBTeW1ib2xJbk9wW10ge1xuICAgIGFjdGlvbnMuZm9yRWFjaCgoW25hbWUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbbmFtZV0pIHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkICR7bmFtZX0gb24gVGVtcGxhdGVDb21waWxlcmApOyB9XG4gICAgICAodGhpc1tuYW1lXSBhcyBhbnkpKC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm9wY29kZXM7XG4gIH1cblxuICBzdGFydFByb2dyYW0oW3Byb2dyYW1dOiBbQVNULlByb2dyYW1dKSB7XG4gICAgdGhpcy5vcGNvZGUoWydzdGFydFByb2dyYW0nLCBwcm9ncmFtXSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRQcm9ncmFtKCkge1xuICAgIHRoaXMub3Bjb2RlKFsnZW5kUHJvZ3JhbScsIG51bGxdLCBudWxsKTtcbiAgfVxuXG4gIHN0YXJ0QmxvY2soW3Byb2dyYW1dOiBbQVNULlByb2dyYW1dKSB7XG4gICAgdGhpcy50ZW1wbGF0ZUlkKys7XG4gICAgdGhpcy5vcGNvZGUoWydzdGFydEJsb2NrJywgcHJvZ3JhbV0sIHByb2dyYW0pO1xuICB9XG5cbiAgZW5kQmxvY2soKSB7XG4gICAgdGhpcy50ZW1wbGF0ZUlkcy5wdXNoKHRoaXMudGVtcGxhdGVJZCAtIDEpO1xuICAgIHRoaXMub3Bjb2RlKFsnZW5kQmxvY2snLCBudWxsXSwgbnVsbCk7XG4gIH1cblxuICB0ZXh0KFthY3Rpb25dOiBbQVNULlRleHROb2RlXSkge1xuICAgIHRoaXMub3Bjb2RlKFsndGV4dCcsIGFjdGlvbi5jaGFyc10sIGFjdGlvbik7XG4gIH1cblxuICBjb21tZW50KFthY3Rpb25dOiBbQVNULkNvbW1lbnRTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5vcGNvZGUoWydjb21tZW50JywgYWN0aW9uLnZhbHVlXSwgYWN0aW9uKTtcbiAgfVxuXG4gIG9wZW5FbGVtZW50KFthY3Rpb25dOiBbQVNULkVsZW1lbnROb2RlXSkge1xuICAgIGxldCBhdHRyaWJ1dGVzID0gYWN0aW9uLmF0dHJpYnV0ZXM7XG4gICAgbGV0IGhhc1NwbGF0O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgYXR0ciA9IGF0dHJpYnV0ZXNbaV07XG4gICAgICBpZiAoYXR0ci5uYW1lID09PSAnLi4uYXR0cmlidXRlcycpIHtcbiAgICAgICAgaGFzU3BsYXQgPSBhdHRyO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzU3BsYXQpIHtcbiAgICAgIHRoaXMub3Bjb2RlKFsnb3BlblNwbGF0dGVkRWxlbWVudCcsIGFjdGlvbl0sIGFjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKFsnb3BlbkVsZW1lbnQnLCBhY3Rpb25dLCBhY3Rpb24pO1xuICAgIH1cblxuICAgIGxldCB0eXBlQXR0ciA6IE9wdGlvbjxBU1QuQXR0ck5vZGU+ID0gbnVsbDtcbiAgICBsZXQgYXR0cnMgPSBhY3Rpb24uYXR0cmlidXRlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXR0cnNbaV0ubmFtZSA9PT0gJ3R5cGUnKSB7XG4gICAgICAgIHR5cGVBdHRyID0gYXR0cnNbaV07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5hdHRyaWJ1dGUoW2F0dHJzW2ldXSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVBdHRyKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZShbdHlwZUF0dHJdKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5tb2RpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubW9kaWZpZXIoW2FjdGlvbi5tb2RpZmllcnNbaV1dKTtcbiAgICB9XG4gICAgdGhpcy5vcGNvZGUoWydmbHVzaEVsZW1lbnQnLCBhY3Rpb25dLCBudWxsKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudChbYWN0aW9uXTogW0FTVC5FbGVtZW50Tm9kZV0pIHtcbiAgICB0aGlzLm9wY29kZShbJ2Nsb3NlRWxlbWVudCcsIGFjdGlvbl0sIGFjdGlvbik7XG4gIH1cblxuICBhdHRyaWJ1dGUoW2FjdGlvbl06IFtBU1QuQXR0ck5vZGVdKSB7XG4gICAgbGV0IHsgbmFtZSwgdmFsdWUgfSA9IGFjdGlvbjtcblxuICAgIGxldCBuYW1lc3BhY2UgPSBnZXRBdHRyTmFtZXNwYWNlKG5hbWUpO1xuXG4gICAgbGV0IGlzU3RhdGljID0gdGhpcy5wcmVwYXJlQXR0cmlidXRlVmFsdWUodmFsdWUpO1xuXG4gICAgaWYgKG5hbWUuY2hhckF0KDApID09PSAnQCcpIHtcbiAgICAgIC8vIEFyZ3VtZW50c1xuICAgICAgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKFsnc3RhdGljQXJnJywgbmFtZV0sIGFjdGlvbik7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKFsnZHluYW1pY0FyZycsIG5hbWVdLCBhY3Rpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoWydkeW5hbWljQXJnJywgbmFtZV0sIGFjdGlvbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpc1RydXN0aW5nID0gaXNUcnVzdGVkVmFsdWUodmFsdWUpO1xuXG4gICAgICBpZiAoaXNTdGF0aWMgJiYgbmFtZSA9PT0gJy4uLmF0dHJpYnV0ZXMnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKFsnYXR0clNwbGF0JywgbnVsbF0sIGFjdGlvbik7XG4gICAgICB9IGVsc2UgaWYgKGlzU3RhdGljKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKFsnc3RhdGljQXR0cicsIFtuYW1lLCBuYW1lc3BhY2VdXSwgYWN0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUcnVzdGluZykge1xuICAgICAgICB0aGlzLm9wY29kZShbJ3RydXN0aW5nQXR0cicsIFtuYW1lLCBuYW1lc3BhY2VdXSwgYWN0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoWydkeW5hbWljQXR0cicsIFtuYW1lLCBudWxsXV0sIGFjdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wY29kZShbJ2R5bmFtaWNBdHRyJywgW25hbWUsIG5hbWVzcGFjZV1dLCBhY3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1vZGlmaWVyKFthY3Rpb25dOiBbQVNULkVsZW1lbnRNb2RpZmllclN0YXRlbWVudF0pIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoYWN0aW9uLnBhdGgsIGFjdGlvbi5sb2MsICdtb2RpZmllcicpO1xuXG4gICAgbGV0IHsgcGF0aDogeyBwYXJ0cyB9IH0gPSBhY3Rpb247XG5cbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICB0aGlzLm9wY29kZShbJ21vZGlmaWVyJywgcGFydHNbMF1dLCBhY3Rpb24pO1xuICB9XG5cbiAgbXVzdGFjaGUoW2FjdGlvbl06IFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnRdKSB7XG4gICAgbGV0IHsgcGF0aCB9ID0gYWN0aW9uO1xuXG4gICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgICAgIHRoaXMub3Bjb2RlKFsnYXBwZW5kJywgIWFjdGlvbi5lc2NhcGVkXSwgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzWWllbGQocGF0aCkpIHtcbiAgICAgIGxldCB0byA9IGFzc2VydFZhbGlkWWllbGQoYWN0aW9uKTtcbiAgICAgIHRoaXMueWllbGQodG8sIGFjdGlvbik7XG4gICAgfSBlbHNlIGlmIChpc1BhcnRpYWwocGF0aCkpIHtcbiAgICAgIGxldCBwYXJhbXMgPSBhc3NlcnRWYWxpZFBhcnRpYWwoYWN0aW9uKTtcbiAgICAgIHRoaXMucGFydGlhbChwYXJhbXMsIGFjdGlvbik7XG4gICAgfSBlbHNlIGlmIChpc0RlYnVnZ2VyKHBhdGgpKSB7XG4gICAgICBhc3NlcnRWYWxpZERlYnVnZ2VyVXNhZ2UoYWN0aW9uKTtcbiAgICAgIHRoaXMuZGVidWdnZXIoJ2RlYnVnZ2VyJywgYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgICAgIHRoaXMub3Bjb2RlKFsnYXBwZW5kJywgIWFjdGlvbi5lc2NhcGVkXSwgYWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBibG9jayhbYWN0aW9uLyosIGluZGV4LCBjb3VudCovXTogW0FTVC5CbG9ja1N0YXRlbWVudF0pIHtcbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICBsZXQgdGVtcGxhdGVJZCA9IHRoaXMudGVtcGxhdGVJZHMucG9wKCkhO1xuICAgIGxldCBpbnZlcnNlSWQgPSBhY3Rpb24uaW52ZXJzZSA9PT0gbnVsbCA/IG51bGwgOiB0aGlzLnRlbXBsYXRlSWRzLnBvcCgpITtcbiAgICB0aGlzLm9wY29kZShbJ2Jsb2NrJywgW2FjdGlvbi5wYXRoLnBhcnRzWzBdLCB0ZW1wbGF0ZUlkLCBpbnZlcnNlSWRdXSwgYWN0aW9uKTtcbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBhY3Rpb25zLCBub3QgZm91bmQgaW4gdGhlIG9yaWdpbmFsIHByb2Nlc3NlZCBhY3Rpb25zXG5cbiAgYXJnKFtwYXRoXTogW0FTVC5QYXRoRXhwcmVzc2lvbl0pIHtcbiAgICBsZXQgeyBwYXJ0czogW2hlYWQsIC4uLnJlc3RdIH0gPSBwYXRoO1xuICAgIHRoaXMub3Bjb2RlKFsnZ2V0JywgW2BAJHtoZWFkfWAsIHJlc3RdXSwgcGF0aCk7XG4gIH1cblxuICBtdXN0YWNoZUV4cHJlc3Npb24oZXhwcjogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgbGV0IHsgcGF0aCB9ID0gZXhwcjtcblxuICAgIGlmIChpc0xpdGVyYWwocGF0aCkpIHtcbiAgICAgIHRoaXMub3Bjb2RlKFsnbGl0ZXJhbCcsIHBhdGgudmFsdWVdLCBleHByKTtcbiAgICB9IGVsc2UgaWYgKGlzQnVpbHRJbkhlbHBlcihwYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIgYXMgQVNULkNhbGwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcmcocGF0aCkpIHtcbiAgICAgIHRoaXMuYXJnKFtwYXRoXSk7XG4gICAgfSBlbHNlIGlmIChpc0hlbHBlckludm9jYXRpb24oZXhwcikpIHtcbiAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihleHByKTtcbiAgICAgIHRoaXMub3Bjb2RlKFsnaGVscGVyJywgcGF0aC5wYXJ0c1swXV0sIGV4cHIpO1xuICAgIH0gZWxzZSBpZiAocGF0aC50aGlzKSB7XG4gICAgICB0aGlzLm9wY29kZShbJ2dldCcsIFswLCBwYXRoLnBhcnRzXV0sIGV4cHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgW2hlYWQsIC4uLnBhcnRzXSA9IHBhdGgucGFydHM7XG4gICAgICB0aGlzLm9wY29kZShbJ21heWJlR2V0JywgW2hlYWQsIHBhcnRzXV0sIGV4cHIpO1xuICAgIH1cblxuICAgIC8vIH0gZWxzZSBpZiAoaXNMb2NhbChwYXRoLCB0aGlzLnN5bWJvbHMpKSB7XG4gICAgLy8gICBsZXQgW2hlYWQsIC4uLnBhcnRzXSA9IHBhdGgucGFydHM7XG4gICAgLy8gICB0aGlzLm9wY29kZShbJ2dldCcsIFtoZWFkLCBwYXJ0c11dLCBleHByKTtcbiAgICAvLyB9IGVsc2UgaWYgKGlzU2ltcGxlUGF0aChwYXRoKSkge1xuICAgIC8vICAgdGhpcy5vcGNvZGUoWyd1bmtub3duJywgcGF0aC5wYXJ0c1swXV0sIGV4cHIpO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICB0aGlzLm9wY29kZShbJ21heWJlTG9jYWwnLCBwYXRoLnBhcnRzXSwgZXhwcik7XG4gICAgLy8gfVxuICB9XG5cbiAgLy8vIEludGVybmFsIFN5bnRheFxuXG4gIHlpZWxkKHRvOiBzdHJpbmcsIGFjdGlvbjogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgdGhpcy5wcmVwYXJlUGFyYW1zKGFjdGlvbi5wYXJhbXMpO1xuICAgIHRoaXMub3Bjb2RlKFsneWllbGQnLCB0b10sIGFjdGlvbik7XG4gIH1cblxuICBkZWJ1Z2dlcihfbmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMub3Bjb2RlKFsnZGVidWdnZXInLCBudWxsXSwgYWN0aW9uKTtcbiAgfVxuXG4gIGhhc0Jsb2NrKG5hbWU6IHN0cmluZywgYWN0aW9uOiBBU1QuQ2FsbCkge1xuICAgIHRoaXMub3Bjb2RlKFsnaGFzQmxvY2snLCBuYW1lXSwgYWN0aW9uKTtcbiAgfVxuXG4gIGhhc0Jsb2NrUGFyYW1zKG5hbWU6IHN0cmluZywgYWN0aW9uOiBBU1QuQ2FsbCkge1xuICAgIHRoaXMub3Bjb2RlKFsnaGFzQmxvY2tQYXJhbXMnLCBuYW1lXSwgYWN0aW9uKTtcbiAgfVxuXG4gIHBhcnRpYWwoX3BhcmFtczogQVNULkV4cHJlc3Npb25bXSwgYWN0aW9uOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMoYWN0aW9uLnBhcmFtcyk7XG4gICAgdGhpcy5vcGNvZGUoWydwYXJ0aWFsJywgbnVsbF0sIGFjdGlvbik7XG4gIH1cblxuICBidWlsdEluSGVscGVyKGV4cHI6IEFTVC5DYWxsKSB7XG4gICAgbGV0IHsgcGF0aCB9ID0gZXhwcjtcbiAgICBpZiAoaXNIYXNCbG9jayhwYXRoKSkge1xuICAgICAgbGV0IG5hbWUgPSBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UoZXhwci5wYXRoLm9yaWdpbmFsLCBleHByKTtcbiAgICAgIHRoaXMuaGFzQmxvY2sobmFtZSwgZXhwcik7XG4gICAgfSBlbHNlIGlmIChpc0hhc0Jsb2NrUGFyYW1zKHBhdGgpKSB7XG4gICAgICBsZXQgbmFtZSA9IGFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZShleHByLnBhdGgub3JpZ2luYWwsIGV4cHIpO1xuICAgICAgdGhpcy5oYXNCbG9ja1BhcmFtcyhuYW1lLCBleHByKTtcbiAgICB9XG4gIH1cblxuICAvLy8gRXhwcmVzc2lvbnMsIGludm9rZWQgcmVjdXJzaXZlbHkgZnJvbSBwcmVwYXJlUGFyYW1zIGFuZCBwcmVwYXJlSGFzaFxuXG4gIFN1YkV4cHJlc3Npb24oZXhwcjogQVNULlN1YkV4cHJlc3Npb24pIHtcbiAgICBpZiAoaXNCdWlsdEluSGVscGVyKGV4cHIucGF0aCkpIHtcbiAgICAgIHRoaXMuYnVpbHRJbkhlbHBlcihleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcmVwYXJlSGVscGVyKGV4cHIpO1xuICAgICAgdGhpcy5vcGNvZGUoWydoZWxwZXInLCBleHByLnBhdGgucGFydHNbMF1dLCBleHByKTtcbiAgICB9XG4gIH1cblxuICBQYXRoRXhwcmVzc2lvbihleHByOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgICBpZiAoZXhwci5kYXRhKSB7XG4gICAgICB0aGlzLmFyZyhbZXhwcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgW2hlYWQsIC4uLnJlc3RdID0gZXhwci5wYXJ0cztcblxuICAgICAgaWYgKGV4cHIudGhpcykge1xuICAgICAgICB0aGlzLm9wY29kZShbJ2dldCcsIFswLCBleHByLnBhcnRzXV0sIGV4cHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoWydnZXQnLCBbaGVhZCwgcmVzdF1dLCBleHByKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBTdHJpbmdMaXRlcmFsKGFjdGlvbjogQVNULlN0cmluZ0xpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZShbJ2xpdGVyYWwnLCBhY3Rpb24udmFsdWVdLCBhY3Rpb24pO1xuICB9XG5cbiAgQm9vbGVhbkxpdGVyYWwoYWN0aW9uOiBBU1QuQm9vbGVhbkxpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZShbJ2xpdGVyYWwnLCBhY3Rpb24udmFsdWVdLCBhY3Rpb24pO1xuICB9XG5cbiAgTnVtYmVyTGl0ZXJhbChhY3Rpb246IEFTVC5OdW1iZXJMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoWydsaXRlcmFsJywgYWN0aW9uLnZhbHVlXSwgYWN0aW9uKTtcbiAgfVxuXG4gIE51bGxMaXRlcmFsKGFjdGlvbjogQVNULk51bGxMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoWydsaXRlcmFsJywgYWN0aW9uLnZhbHVlXSwgYWN0aW9uKTtcbiAgfVxuXG4gIFVuZGVmaW5lZExpdGVyYWwoYWN0aW9uOiBBU1QuVW5kZWZpbmVkTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKFsnbGl0ZXJhbCcsIGFjdGlvbi52YWx1ZV0sIGFjdGlvbik7XG4gIH1cblxuICAvLy8gVXRpbGl0aWVzXG5cbiAgb3Bjb2RlPE8gZXh0ZW5kcyBTeW1ib2xJbk9wPihvcGNvZGU6IE8sIGFjdGlvbjogT3B0aW9uPEFTVC5CYXNlTm9kZT4gPSBudWxsKSB7XG4gICAgLy8gVE9ETzogVGhpcyBkb2Vzbid0IHJlYWxseSB3b3JrXG4gICAgaWYgKHRoaXMuaW5jbHVkZU1ldGEgJiYgYWN0aW9uKSB7XG4gICAgICAob3Bjb2RlIGFzIGFueSkucHVzaCh0aGlzLm1ldGEoYWN0aW9uKSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGVzLnB1c2gob3Bjb2RlKTtcbiAgfVxuXG4gIHByZXBhcmVIZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoZXhwci5wYXRoLCBleHByLmxvYywgJ2hlbHBlcicpO1xuXG4gICAgbGV0IHsgcGFyYW1zLCBoYXNoIH0gPSBleHByO1xuXG4gICAgdGhpcy5wcmVwYXJlSGFzaChoYXNoKTtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMocGFyYW1zKTtcbiAgfVxuXG4gIHByZXBhcmVQYXJhbXMocGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdKSB7XG4gICAgaWYgKCFwYXJhbXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLm9wY29kZShbJ2xpdGVyYWwnLCBudWxsXSwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHBhcmFtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHBhcmFtID0gcGFyYW1zW2ldO1xuXG4gICAgICBhc3NlcnQodGhpc1twYXJhbS50eXBlXSwgYFVuaW1wbGVtZW50ZWQgJHtwYXJhbS50eXBlfSBvbiBUZW1wbGF0ZUNvbXBpbGVyYCk7XG4gICAgICAodGhpc1twYXJhbS50eXBlXSBhcyBhbnkpKHBhcmFtKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZShbJ3ByZXBhcmVBcnJheScsIHBhcmFtcy5sZW5ndGhdLCBudWxsKTtcbiAgfVxuXG4gIHByZXBhcmVIYXNoKGhhc2g6IEFTVC5IYXNoKSB7XG4gICAgbGV0IHBhaXJzID0gaGFzaC5wYWlycztcblxuICAgIGlmICghcGFpcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLm9wY29kZShbJ2xpdGVyYWwnLCBudWxsXSwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHBhaXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgeyBrZXksIHZhbHVlIH0gPSBwYWlyc1tpXTtcblxuICAgICAgYXNzZXJ0KHRoaXNbdmFsdWUudHlwZV0sIGBVbmltcGxlbWVudGVkICR7dmFsdWUudHlwZX0gb24gVGVtcGxhdGVDb21waWxlcmApO1xuICAgICAgKHRoaXNbdmFsdWUudHlwZV0gYXMgYW55KSh2YWx1ZSk7XG4gICAgICB0aGlzLm9wY29kZShbJ2xpdGVyYWwnLCBrZXldLCBudWxsKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZShbJ3ByZXBhcmVPYmplY3QnLCBwYWlycy5sZW5ndGhdLCBudWxsKTtcbiAgfVxuXG4gIHByZXBhcmVBdHRyaWJ1dGVWYWx1ZSh2YWx1ZTogQVNULkF0dHJOb2RlWyd2YWx1ZSddKSB7XG4gICAgLy8gcmV0dXJucyB0aGUgc3RhdGljIHZhbHVlIGlmIHRoZSB2YWx1ZSBpcyBzdGF0aWNcblxuICAgIHN3aXRjaCAodmFsdWUudHlwZSkge1xuICAgICAgY2FzZSAnVGV4dE5vZGUnOlxuICAgICAgICB0aGlzLm9wY29kZShbJ2xpdGVyYWwnLCB2YWx1ZS5jaGFyc10sIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdNdXN0YWNoZVN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3ZhbHVlXSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGNhc2UgJ0NvbmNhdFN0YXRlbWVudCc6XG4gICAgICAgIHRoaXMucHJlcGFyZUNvbmNhdFBhcnRzKHZhbHVlLnBhcnRzKTtcbiAgICAgICAgdGhpcy5vcGNvZGUoWydjb25jYXQnLCBudWxsXSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZUNvbmNhdFBhcnRzKHBhcnRzOiBBU1QuQ29uY2F0U3RhdGVtZW50WydwYXJ0cyddKSB7XG4gICAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgcGFydCA9IHBhcnRzW2ldO1xuXG4gICAgICBpZiAocGFydC50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3BhcnRdKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydC50eXBlID09PSAnVGV4dE5vZGUnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKFsnbGl0ZXJhbCcsIHBhcnQuY2hhcnNdLCBudWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZShbJ3ByZXBhcmVBcnJheScsIHBhcnRzLmxlbmd0aF0sIG51bGwpO1xuICB9XG5cbiAgYXR0cmlidXRlTXVzdGFjaGUoW2FjdGlvbl06IFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5tdXN0YWNoZUV4cHJlc3Npb24oYWN0aW9uKTtcbiAgfVxuXG4gIG1ldGEobm9kZTogQVNULkJhc2VOb2RlKSB7XG4gICAgbGV0IGxvYyA9IG5vZGUubG9jO1xuICAgIGlmICghbG9jKSB7IHJldHVybiBbXTsgfVxuXG4gICAgbGV0IHsgc291cmNlLCBzdGFydCwgZW5kIH0gPSBsb2M7XG4gICAgcmV0dXJuIFsgJ2xvYycsIFtzb3VyY2UgfHwgbnVsbCwgW3N0YXJ0LmxpbmUsIHN0YXJ0LmNvbHVtbl0sIFtlbmQubGluZSwgZW5kLmNvbHVtbl1dIF07XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNIZWxwZXJJbnZvY2F0aW9uKG11c3RhY2hlOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpOiBtdXN0YWNoZSBpcyBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQgJiB7IHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbiB9IHtcbiAgcmV0dXJuIChtdXN0YWNoZS5wYXJhbXMgJiYgbXVzdGFjaGUucGFyYW1zLmxlbmd0aCA+IDApIHx8XG4gICAgKG11c3RhY2hlLmhhc2ggJiYgbXVzdGFjaGUuaGFzaC5wYWlycy5sZW5ndGggPiAwKTtcbn1cblxuZnVuY3Rpb24gaXNTaW1wbGVQYXRoKHsgcGFydHMgfTogQVNULlBhdGhFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBwYXJ0cy5sZW5ndGggPT09IDE7XG59XG5cbmZ1bmN0aW9uIGlzWWllbGQocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAneWllbGQnO1xufVxuXG5mdW5jdGlvbiBpc1BhcnRpYWwocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAncGFydGlhbCc7XG59XG5cbmZ1bmN0aW9uIGlzRGVidWdnZXIocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnZGVidWdnZXInO1xufVxuXG5mdW5jdGlvbiBpc0hhc0Jsb2NrKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gcGF0aC5vcmlnaW5hbCA9PT0gJ2hhcy1ibG9jayc7XG59XG5cbmZ1bmN0aW9uIGlzSGFzQmxvY2tQYXJhbXMocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrLXBhcmFtcyc7XG59XG5cbmZ1bmN0aW9uIGlzQnVpbHRJbkhlbHBlcihwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIGlzSGFzQmxvY2socGF0aCkgfHwgaXNIYXNCbG9ja1BhcmFtcyhwYXRoKTtcbn1cblxuZnVuY3Rpb24gaXNBcmcocGF0aDogQVNULlBhdGhFeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIXBhdGhbJ2RhdGEnXTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SXNTaW1wbGVQYXRoKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbiwgbG9jOiBBU1QuU291cmNlTG9jYXRpb24sIGNvbnRleHQ6IHN0cmluZykge1xuICBpZiAoIWlzU2ltcGxlUGF0aChwYXRoKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgXFxgJHtwYXRoLm9yaWdpbmFsfVxcYCBpcyBub3QgYSB2YWxpZCBuYW1lIGZvciBhICR7Y29udGV4dH0gb24gbGluZSAke2xvYy5zdGFydC5saW5lfS5gLCBwYXRoLmxvYyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRZaWVsZChzdGF0ZW1lbnQ6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCk6IHN0cmluZyB7XG4gIGxldCB7IHBhaXJzIH0gPSBzdGF0ZW1lbnQuaGFzaDtcblxuICBpZiAoKHBhaXJzLmxlbmd0aCA9PT0gMSAmJiBwYWlyc1swXS5rZXkgIT09ICd0bycpIHx8IHBhaXJzLmxlbmd0aCA+IDEpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYHlpZWxkIG9ubHkgdGFrZXMgYSBzaW5nbGUgbmFtZWQgYXJndW1lbnQ6ICd0bydgLCBzdGF0ZW1lbnQubG9jKTtcbiAgfSBlbHNlIGlmIChwYWlycy5sZW5ndGggPT09IDEgJiYgcGFpcnNbMF0udmFsdWUudHlwZSAhPT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGB5b3UgY2FuIG9ubHkgeWllbGQgdG8gYSBsaXRlcmFsIHZhbHVlYCwgc3RhdGVtZW50LmxvYyk7XG4gIH0gZWxzZSBpZiAocGFpcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdkZWZhdWx0JztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKHBhaXJzWzBdLnZhbHVlIGFzIEFTVC5TdHJpbmdMaXRlcmFsKS52YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFBhcnRpYWwoc3RhdGVtZW50OiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIC8qIDogZXhwciAqLyB7XG4gIGxldCB7IHBhcmFtcywgaGFzaCwgZXNjYXBlZCwgbG9jIH0gPSBzdGF0ZW1lbnQ7XG5cbiAgaWYgKHBhcmFtcyAmJiBwYXJhbXMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBQYXJ0aWFsIGZvdW5kIHdpdGggbm8gYXJndW1lbnRzLiBZb3UgbXVzdCBzcGVjaWZ5IGEgdGVtcGxhdGUgbmFtZS4gKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCwgc3RhdGVtZW50LmxvYyk7XG4gIH0gZWxzZSBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYHBhcnRpYWwgZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWAsIHN0YXRlbWVudC5sb2MpO1xuICB9IGVsc2UgaWYgKCFlc2NhcGVkKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGB7e3twYXJ0aWFsIC4uLn19fSBpcyBub3Qgc3VwcG9ydGVkLCBwbGVhc2UgdXNlIHt7cGFydGlhbCAuLi59fSBpbnN0ZWFkIChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWAsIHN0YXRlbWVudC5sb2MpO1xuICB9XG5cbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZnVuY3Rpb24gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKHR5cGU6IHN0cmluZywgY2FsbDogQVNULkNhbGwpOiBzdHJpbmcge1xuICBsZXQgeyBwYXJhbXMsIGhhc2gsIGxvYyB9ID0gY2FsbDtcblxuICBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYCR7dHlwZX0gZG9lcyBub3QgdGFrZSBhbnkgbmFtZWQgYXJndW1lbnRzYCwgY2FsbC5sb2MpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2UgaWYgKHBhcmFtcy5sZW5ndGggPT09IDEpIHtcbiAgICBsZXQgcGFyYW0gPSBwYXJhbXNbMF07XG4gICAgaWYgKHBhcmFtLnR5cGUgPT09ICdTdHJpbmdMaXRlcmFsJykge1xuICAgICAgcmV0dXJuIHBhcmFtLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWUgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCwgY2FsbC5sb2MpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYCR7dHlwZX0gb25seSB0YWtlcyBhIHNpbmdsZSBwb3NpdGlvbmFsIGFyZ3VtZW50IChvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9KWAsIGNhbGwubG9jKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZERlYnVnZ2VyVXNhZ2Uoc3RhdGVtZW50OiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgbGV0IHsgcGFyYW1zLCBoYXNoIH0gPSBzdGF0ZW1lbnQ7XG5cbiAgaWYgKGhhc2ggJiYgaGFzaC5wYWlycy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBkZWJ1Z2dlciBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHNgLCBzdGF0ZW1lbnQubG9jKTtcbiAgfVxuXG4gIGlmIChwYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdkZWZhdWx0JztcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYGRlYnVnZ2VyIGRvZXMgbm90IHRha2UgYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzYCwgc3RhdGVtZW50LmxvYyk7XG4gIH1cbn1cbiJdfQ==

@@ -43,3 +43,3 @@ 'use strict';

if (!named) {
named = this.named[name] = this.allocate(`@${name}`);
named = this.named[name] = this.allocate(name);
}

@@ -312,2 +312,2 @@ return named;

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi90ZW1wbGF0ZS12aXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQSxBQUFPLEFBQWdCLEFBQUksQUFBRSxBQUFXLEFBQUUsQUFBTSxBQUFFLEFBQU0sQUFBZSxBQUFDLEFBRXhFLEFBQU07OztXQUNHLEFBQUcsTUFDUixBQUFNO2VBQUMsSUFBSSxBQUFrQixBQUFFLEFBQUMsQUFDbEMsQUFBQztBQVlELEFBQUs7VUFBQyxBQUFnQixRQUNwQjtZQUFJLEFBQU8sVUFBRyxBQUFNLE9BQUMsQUFBRyxJQUFDLEFBQUksUUFBSSxBQUFJLEtBQUMsQUFBUSxTQUFDLEFBQUksQUFBQyxBQUFDLEFBQUMsQUFDdEQsQUFBTTtlQUFDLElBQUksQUFBZ0IsaUJBQUMsQUFBSSxNQUFFLEFBQU0sUUFBRSxBQUFPLEFBQUMsQUFBQyxBQUNyRCxBQUFDLEFBQ0Y7QUFFRCxBQUFNO0FBcEJKLEFBQU07O01Bb0J3QiwyQkFBUSxBQUFXOztpQkFDMUM7YUFBTyxVQUFhLEFBQUUsQUFBQyxBQUV0QjthQUFJLE9BQUcsQUFBQyxBQUFDLEFBQ1Q7YUFBSyxRQUFHLEFBQUksQUFBVSxBQUFDLEFBQ3ZCO2FBQU0sU0FBRyxBQUFJLEFBQVUsQUFBQyxBQTBDbEMsQUFBQztBQXhDQyxBQUFHO1FBQUMsQUFBYSxPQUNmLEFBQU07ZUFBQyxBQUFLLEFBQUMsQUFDZixBQUFDO0FBRUQsQUFBRztRQUFDLEFBQWEsT0FDZjtjQUFNLEFBQVcsQUFBRSxBQUFDLEFBQ3RCLEFBQUM7QUFFRCxBQUFZO21CQUNWLEFBQU07ZUFBQyxBQUFFLEFBQUMsQUFDWixBQUFDO0FBRUQsQUFBVztrQkFDVCxBQUFNO2VBQUMsQUFBRSxBQUFDLEFBQ1osQUFBQztBQUVELEFBQWE7a0JBQUMsQUFBWSxNQUN4QjtZQUFJLEFBQUss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LEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgQ29yZSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IERpY3QsIE9wdGlvbiwgZGljdCwgdW5yZWFjaGFibGUsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3ltYm9sVGFibGUge1xuICBzdGF0aWMgdG9wKCk6IFByb2dyYW1TeW1ib2xUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9ncmFtU3ltYm9sVGFibGUoKTtcbiAgfVxuXG4gIGFic3RyYWN0IGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuICBhYnN0cmFjdCBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj47XG4gIGFic3RyYWN0IGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm87XG5cbiAgYWJzdHJhY3QgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIGFic3RyYWN0IGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBhYnN0cmFjdCBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgY2hpbGQobG9jYWxzOiBzdHJpbmdbXSk6IEJsb2NrU3ltYm9sVGFibGUge1xuICAgIGxldCBzeW1ib2xzID0gbG9jYWxzLm1hcChuYW1lID0+IHRoaXMuYWxsb2NhdGUobmFtZSkpO1xuICAgIHJldHVybiBuZXcgQmxvY2tTeW1ib2xUYWJsZSh0aGlzLCBsb2NhbHMsIHN5bWJvbHMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gIHB1YmxpYyBzeW1ib2xzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByaXZhdGUgc2l6ZSA9IDE7XG4gIHByaXZhdGUgbmFtZWQgPSBkaWN0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBibG9ja3MgPSBkaWN0PG51bWJlcj4oKTtcblxuICBoYXMoX25hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldChfbmFtZTogc3RyaW5nKTogbmV2ZXIge1xuICAgIHRocm93IHVucmVhY2hhYmxlKCk7XG4gIH1cblxuICBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBnZXRFdmFsSW5mbygpOiBDb3JlLkV2YWxJbmZvIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IG5hbWVkID0gdGhpcy5uYW1lZFtuYW1lXTtcblxuICAgIGlmICghbmFtZWQpIHtcbiAgICAgIG5hbWVkID0gdGhpcy5uYW1lZFtuYW1lXSA9IHRoaXMuYWxsb2NhdGUoYEAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWVkO1xuICB9XG5cbiAgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBibG9jayA9IHRoaXMuYmxvY2tzW25hbWVdO1xuXG4gICAgaWYgKCFibG9jaykge1xuICAgICAgYmxvY2sgPSB0aGlzLmJsb2Nrc1tuYW1lXSA9IHRoaXMuYWxsb2NhdGUoYCYke25hbWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJsb2NrO1xuICB9XG5cbiAgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICB0aGlzLnN5bWJvbHMucHVzaChpZGVudGlmaWVyKTtcbiAgICByZXR1cm4gdGhpcy5zaXplKys7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJsb2NrU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyZW50OiBTeW1ib2xUYWJsZSwgcHVibGljIHN5bWJvbHM6IHN0cmluZ1tdLCBwdWJsaWMgc2xvdHM6IG51bWJlcltdKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuc3ltYm9scy5pbmRleE9mKG5hbWUpICE9PSAtMSkgfHwgdGhpcy5wYXJlbnQuaGFzKG5hbWUpO1xuICB9XG5cbiAgZ2V0KG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IHNsb3QgPSB0aGlzLnN5bWJvbHMuaW5kZXhPZihuYW1lKTtcbiAgICByZXR1cm4gc2xvdCA9PT0gLTEgPyB0aGlzLnBhcmVudC5nZXQobmFtZSkgOiB0aGlzLnNsb3RzW3Nsb3RdO1xuICB9XG5cbiAgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPiB7XG4gICAgbGV0IGRpY3QgPSB0aGlzLnBhcmVudC5nZXRMb2NhbHNNYXAoKTtcbiAgICB0aGlzLnN5bWJvbHMuZm9yRWFjaChzeW1ib2wgPT4gZGljdFtzeW1ib2xdID0gdGhpcy5nZXQoc3ltYm9sKSk7XG4gICAgcmV0dXJuIGRpY3Q7XG4gIH1cblxuICBnZXRFdmFsSW5mbygpOiBDb3JlLkV2YWxJbmZvIHtcbiAgICBsZXQgbG9jYWxzID0gdGhpcy5nZXRMb2NhbHNNYXAoKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobG9jYWxzKS5tYXAoc3ltYm9sID0+IGxvY2Fsc1tzeW1ib2xdKTtcbiAgfVxuXG4gIGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGVOYW1lZChuYW1lKTtcbiAgfVxuXG4gIGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGVCbG9jayhuYW1lKTtcbiAgfVxuXG4gIGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlKGlkZW50aWZpZXIpO1xuICB9XG59XG5cbi8qKlxuICogVGFrZXMgaW4gYW4gQVNUIGFuZCBvdXRwdXRzIGEgbGlzdCBvZiBhY3Rpb25zIHRvIGJlIGNvbnN1bWVkXG4gKiBieSBhIGNvbXBpbGVyLiBGb3IgZXhhbXBsZSwgdGhlIHRlbXBsYXRlXG4gKlxuICogICAgIGZvb3t7YmFyfX08ZGl2PmJhejwvZGl2PlxuICpcbiAqIHByb2R1Y2VzIHRoZSBhY3Rpb25zXG4gKlxuICogICAgIFtbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDNdXSxcbiAqICAgICAgWydtdXN0YWNoZScsIFttdXN0YWNoZU5vZGUsIDEsIDNdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMiwgMywgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDIsIDNdLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXV1cbiAqXG4gKiBUaGlzIHZpc2l0b3Igd2Fsa3MgdGhlIEFTVCBkZXB0aCBmaXJzdCBhbmQgYmFja3dhcmRzLiBBc1xuICogYSByZXN1bHQgdGhlIGJvdHRvbS1tb3N0IGNoaWxkIHRlbXBsYXRlIHdpbGwgYXBwZWFyIGF0IHRoZVxuICogdG9wIG9mIHRoZSBhY3Rpb25zIGxpc3Qgd2hlcmVhcyB0aGUgcm9vdCB0ZW1wbGF0ZSB3aWxsIGFwcGVhclxuICogYXQgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdC4gRm9yIGV4YW1wbGUsXG4gKlxuICogICAgIDxkaXY+e3sjaWZ9fWZvb3t7ZWxzZX19YmFyPGI+PC9iPnt7L2lmfX08L2Rpdj5cbiAqXG4gKiBwcm9kdWNlcyB0aGUgYWN0aW9uc1xuICpcbiAqICAgICBbWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAyLCAwXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDEsIDIsIDBdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDEsIDJdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV0sXG4gKiAgICAgIFsnc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXSxcbiAqICAgICAgWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDJdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMCwgMSwgMV1dLFxuICogICAgICBbJ2Jsb2NrJywgW2Jsb2NrTm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXV1cbiAqXG4gKiBUaGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbCBpcyBtYWludGFpbmVkIGJ5IGEgc3RhY2sgb2YgZnJhbWVzLlxuICogV2hlbmV2ZXIgYSBub2RlIHdpdGggY2hpbGRyZW4gaXMgZW50ZXJlZCAoZWl0aGVyIGEgUHJvZ3JhbU5vZGVcbiAqIG9yIGFuIEVsZW1lbnROb2RlKSBhIGZyYW1lIGlzIHB1c2hlZCBvbnRvIHRoZSBzdGFjay4gVGhlIGZyYW1lXG4gKiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbCBvZiB0aGF0XG4gKiBub2RlLiBGb3IgZXhhbXBsZSxcbiAqXG4gKiAgIC0gaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hpbGQgbm9kZSBiZWluZyB2aXNpdGVkXG4gKiAgIC0gdGhlIG51bWJlciBvZiBtdXN0YWNoZXMgY29udGFpbmVkIHdpdGhpbiBpdHMgY2hpbGQgbm9kZXNcbiAqICAgLSB0aGUgbGlzdCBvZiBhY3Rpb25zIGdlbmVyYXRlZCBieSBpdHMgY2hpbGQgbm9kZXNcbiAqL1xuXG5jbGFzcyBGcmFtZSB7XG4gIHB1YmxpYyBwYXJlbnROb2RlOiBPcHRpb248T2JqZWN0PiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZHJlbjogT3B0aW9uPEFTVC5Ob2RlW10+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkSW5kZXg6IE9wdGlvbjxudW1iZXI+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkQ291bnQ6IE9wdGlvbjxudW1iZXI+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkVGVtcGxhdGVDb3VudCA9IDA7XG4gIHB1YmxpYyBtdXN0YWNoZUNvdW50ID0gMDtcbiAgcHVibGljIGFjdGlvbnM6IEFjdGlvbltdID0gW107XG4gIHB1YmxpYyBibGFua0NoaWxkVGV4dE5vZGVzOiBPcHRpb248bnVtYmVyW10+ID0gbnVsbDtcbiAgcHVibGljIHN5bWJvbHM6IE9wdGlvbjxTeW1ib2xUYWJsZT4gPSBudWxsO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEFjdGlvbiB7XG4gIGV4cG9ydCB0eXBlIFN0YXJ0UHJvZ3JhbSA9IFsnc3RhcnRQcm9ncmFtJywgW0FTVC5Qcm9ncmFtLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIEVuZFByb2dyYW0gPSBbJ2VuZFByb2dyYW0nLCBbQVNULlByb2dyYW0sIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBTdGFydEJsb2NrID0gWydzdGFydEJsb2NrJywgW0FTVC5Qcm9ncmFtLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIEVuZEJsb2NrID0gWydlbmRCbG9jaycsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIEJsb2NrID0gWydibG9jaycsIFtBU1QuQmxvY2tTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIE11c3RhY2hlID0gWydtdXN0YWNoZScsIFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnQgfCBBU1QuUGFydGlhbFN0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgT3BlbkVsZW1lbnQgPSBbJ29wZW5FbGVtZW50JywgW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgQ2xvc2VFbGVtZW50ID0gWydjbG9zZUVsZW1lbnQnLCBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBUZXh0ID0gWyd0ZXh0JywgW0FTVC5UZXh0Tm9kZSwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgQ29tbWVudCA9IFsnY29tbWVudCcsIFtBU1QuQ29tbWVudFN0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcblxuICBleHBvcnQgdHlwZSBBY3Rpb24gPVxuICAgICAgU3RhcnRQcm9ncmFtXG4gICAgfCBFbmRQcm9ncmFtXG4gICAgfCBTdGFydEJsb2NrXG4gICAgfCBFbmRCbG9ja1xuICAgIHwgQmxvY2tcbiAgICB8IE11c3RhY2hlXG4gICAgfCBPcGVuRWxlbWVudFxuICAgIHwgQ2xvc2VFbGVtZW50XG4gICAgfCBUZXh0XG4gICAgfCBDb21tZW50XG4gICAgO1xufVxuXG5leHBvcnQgdHlwZSBBY3Rpb24gPSBBY3Rpb24uQWN0aW9uO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZVZpc2l0b3Ige1xuICBwcml2YXRlIGZyYW1lU3RhY2s6IEZyYW1lW10gPSBbXTtcbiAgcHVibGljIGFjdGlvbnM6IEFjdGlvbltdID0gW107XG4gIHByaXZhdGUgcHJvZ3JhbURlcHRoID0gLTE7XG5cbiAgdmlzaXQobm9kZTogQVNULkJhc2VOb2RlKSB7XG4gICAgdGhpc1tub2RlLnR5cGVdKG5vZGUpO1xuICB9XG5cbiAgLy8gVHJhdmVyc2FsIG1ldGhvZHNcblxuICBQcm9ncmFtKHByb2dyYW06IEFTVC5Qcm9ncmFtKSB7XG4gICAgdGhpcy5wcm9ncmFtRGVwdGgrKztcblxuICAgIGxldCBwYXJlbnRGcmFtZSA9IHRoaXMuZ2V0Q3VycmVudEZyYW1lKCk7XG4gICAgbGV0IHByb2dyYW1GcmFtZSA9IHRoaXMucHVzaEZyYW1lKCk7XG5cbiAgICBpZiAoIXBhcmVudEZyYW1lKSB7XG4gICAgICBwcm9ncmFtWydzeW1ib2xzJ10gPSBTeW1ib2xUYWJsZS50b3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZ3JhbVsnc3ltYm9scyddID0gcGFyZW50RnJhbWUuc3ltYm9scyEuY2hpbGQocHJvZ3JhbS5ibG9ja1BhcmFtcyk7XG4gICAgfVxuXG4gICAgbGV0IHN0YXJ0VHlwZTogc3RyaW5nLCBlbmRUeXBlOiBzdHJpbmc7XG5cbiAgICBpZiAodGhpcy5wcm9ncmFtRGVwdGggPT09IDApIHtcbiAgICAgIHN0YXJ0VHlwZSA9ICdzdGFydFByb2dyYW0nO1xuICAgICAgZW5kVHlwZSA9ICdlbmRQcm9ncmFtJztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRUeXBlID0gJ3N0YXJ0QmxvY2snO1xuICAgICAgZW5kVHlwZSA9ICdlbmRCbG9jayc7XG4gICAgfVxuXG4gICAgcHJvZ3JhbUZyYW1lLnBhcmVudE5vZGUgPSBwcm9ncmFtO1xuICAgIHByb2dyYW1GcmFtZS5jaGlsZHJlbiA9IHByb2dyYW0uYm9keTtcbiAgICBwcm9ncmFtRnJhbWUuY2hpbGRDb3VudCA9IHByb2dyYW0uYm9keS5sZW5ndGg7XG4gICAgcHJvZ3JhbUZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMgPSBbXTtcbiAgICBwcm9ncmFtRnJhbWUuYWN0aW9ucy5wdXNoKFtlbmRUeXBlLCBbcHJvZ3JhbSwgdGhpcy5wcm9ncmFtRGVwdGhdXSBhcyBBY3Rpb24pO1xuICAgIHByb2dyYW1GcmFtZS5zeW1ib2xzID0gcHJvZ3JhbVsnc3ltYm9scyddO1xuXG4gICAgZm9yIChsZXQgaSA9IHByb2dyYW0uYm9keS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgcHJvZ3JhbUZyYW1lLmNoaWxkSW5kZXggPSBpO1xuICAgICAgdGhpcy52aXNpdChwcm9ncmFtLmJvZHlbaV0pO1xuICAgIH1cblxuICAgIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW3N0YXJ0VHlwZSwgW1xuICAgICAgcHJvZ3JhbSwgcHJvZ3JhbUZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCxcbiAgICAgIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKVxuICAgIF1dIGFzIEFjdGlvbik7XG4gICAgdGhpcy5wb3BGcmFtZSgpO1xuXG4gICAgdGhpcy5wcm9ncmFtRGVwdGgtLTtcblxuICAgIC8vIFB1c2ggdGhlIGNvbXBsZXRlZCB0ZW1wbGF0ZSBpbnRvIHRoZSBnbG9iYWwgYWN0aW9ucyBsaXN0XG4gICAgaWYgKHBhcmVudEZyYW1lKSB7IHBhcmVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCsrOyB9XG4gICAgdGhpcy5hY3Rpb25zLnB1c2goLi4ucHJvZ3JhbUZyYW1lLmFjdGlvbnMucmV2ZXJzZSgpKTtcbiAgfVxuXG4gIEVsZW1lbnROb2RlKGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCBwYXJlbnRGcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGxldCBlbGVtZW50RnJhbWUgPSB0aGlzLnB1c2hGcmFtZSgpO1xuXG4gICAgZWxlbWVudEZyYW1lLnBhcmVudE5vZGUgPSBlbGVtZW50O1xuICAgIGVsZW1lbnRGcmFtZS5jaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgZWxlbWVudEZyYW1lLmNoaWxkQ291bnQgPSBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aDtcbiAgICBlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCArPSBlbGVtZW50Lm1vZGlmaWVycy5sZW5ndGg7XG4gICAgZWxlbWVudEZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMgPSBbXTtcbiAgICBlbGVtZW50RnJhbWUuc3ltYm9scyA9IGVsZW1lbnRbJ3N5bWJvbHMnXSA9IHBhcmVudEZyYW1lLnN5bWJvbHMhLmNoaWxkKGVsZW1lbnQuYmxvY2tQYXJhbXMpO1xuXG4gICAgbGV0IGFjdGlvbkFyZ3M6IFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyXSA9IFtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwYXJlbnRGcmFtZS5jaGlsZEluZGV4ISxcbiAgICAgIHBhcmVudEZyYW1lLmNoaWxkQ291bnQhXG4gICAgXTtcblxuICAgIGVsZW1lbnRGcmFtZS5hY3Rpb25zLnB1c2goWydjbG9zZUVsZW1lbnQnLCBhY3Rpb25BcmdzXSk7XG5cbiAgICBmb3IgKGxldCBpID0gZWxlbWVudC5hdHRyaWJ1dGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLnZpc2l0KGVsZW1lbnQuYXR0cmlidXRlc1tpXSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGVsZW1lbnRGcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICAgIHRoaXMudmlzaXQoZWxlbWVudC5jaGlsZHJlbltpXSk7XG4gICAgfVxuXG4gICAgbGV0IG9wZW4gPSBbJ29wZW5FbGVtZW50JywgWy4uLmFjdGlvbkFyZ3MsIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50LCBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5yZXZlcnNlKCldXSBhcyBBY3Rpb24uT3BlbkVsZW1lbnQ7XG4gICAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChvcGVuKTtcblxuICAgIHRoaXMucG9wRnJhbWUoKTtcblxuICAgIC8vIFByb3BhZ2F0ZSB0aGUgZWxlbWVudCdzIGZyYW1lIHN0YXRlIHRvIHRoZSBwYXJlbnQgZnJhbWVcbiAgICBpZiAoZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQgPiAwKSB7IHBhcmVudEZyYW1lLm11c3RhY2hlQ291bnQrKzsgfVxuICAgIHBhcmVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCArPSBlbGVtZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50O1xuICAgIHBhcmVudEZyYW1lLmFjdGlvbnMucHVzaCguLi5lbGVtZW50RnJhbWUuYWN0aW9ucyk7XG4gIH1cblxuICBBdHRyTm9kZShhdHRyOiBBU1QuQXR0ck5vZGUpIHtcbiAgICBpZiAoYXR0ci52YWx1ZS50eXBlICE9PSAnVGV4dE5vZGUnKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgfVxuICB9O1xuXG4gIFRleHROb2RlKHRleHQ6IEFTVC5UZXh0Tm9kZSkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGlmICh0ZXh0LmNoYXJzID09PSAnJykge1xuICAgICAgZnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyEucHVzaChkb21JbmRleE9mKGZyYW1lLmNoaWxkcmVuISwgdGV4dCkpO1xuICAgIH1cbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWyd0ZXh0JywgW3RleHQsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIEJsb2NrU3RhdGVtZW50KG5vZGU6IEFTVC5CbG9ja1N0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ2Jsb2NrJywgW25vZGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuXG4gICAgaWYgKG5vZGUuaW52ZXJzZSkgeyB0aGlzLnZpc2l0KG5vZGUuaW52ZXJzZSk7IH1cbiAgICBpZiAobm9kZS5wcm9ncmFtKSB7IHRoaXMudmlzaXQobm9kZS5wcm9ncmFtKTsgfVxuICB9O1xuXG4gIFBhcnRpYWxTdGF0ZW1lbnQobm9kZTogQVNULlBhcnRpYWxTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgQ29tbWVudFN0YXRlbWVudCh0ZXh0OiBBU1QuQ29tbWVudFN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ2NvbW1lbnQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgTXVzdGFjaGVDb21tZW50U3RhdGVtZW50KCkge1xuICAgIC8vIEludGVudGlvbmFsIGVtcHR5OiBIYW5kbGViYXJzIGNvbW1lbnRzIHNob3VsZCBub3QgYWZmZWN0IG91dHB1dC5cbiAgfTtcblxuICBNdXN0YWNoZVN0YXRlbWVudChtdXN0YWNoZTogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ211c3RhY2hlJywgW211c3RhY2hlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICAvLyBGcmFtZSBoZWxwZXJzXG5cbiAgcHJpdmF0ZSBnZXQgY3VycmVudEZyYW1lKCk6IEZyYW1lIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuZ2V0Q3VycmVudEZyYW1lKCksIFwiRXhwZWN0ZWQgYSBjdXJyZW50IGZyYW1lXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50RnJhbWUoKTogT3B0aW9uPEZyYW1lPiB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVTdGFja1t0aGlzLmZyYW1lU3RhY2subGVuZ3RoIC0gMV07XG4gIH1cblxuICBwcml2YXRlIHB1c2hGcmFtZSgpIHtcbiAgICBsZXQgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLmZyYW1lU3RhY2sucHVzaChmcmFtZSk7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3BGcmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZVN0YWNrLnBvcCgpO1xuICB9XG59XG5cbi8vIFJldHVybnMgdGhlIGluZGV4IG9mIGBkb21Ob2RlYCBpbiB0aGUgYG5vZGVzYCBhcnJheSwgc2tpcHBpbmdcbi8vIG92ZXIgYW55IG5vZGVzIHdoaWNoIGRvIG5vdCByZXByZXNlbnQgRE9NIG5vZGVzLlxuZnVuY3Rpb24gZG9tSW5kZXhPZihub2RlczogQVNULk5vZGVbXSwgZG9tTm9kZTogQVNULlRleHROb2RlIHwgQVNULkVsZW1lbnROb2RlKSB7XG4gIGxldCBpbmRleCA9IC0xO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgbm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgaWYgKG5vZGUudHlwZSAhPT0gJ1RleHROb2RlJyAmJiBub2RlLnR5cGUgIT09ICdFbGVtZW50Tm9kZScpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCsrO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSBkb21Ob2RlKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi90ZW1wbGF0ZS12aXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQSxBQUFPLEFBQWdCLEFBQUksQUFBRSxBQUFXLEFBQUUsQUFBTSxBQUFFLEFBQU0sQUFBZSxBQUFDLEFBRXhFLEFBQU07OztXQUNHLEFBQUcsTUFDUixBQUFNO2VBQUMsSUFBSSxBQUFrQixBQUFFLEFBQUMsQUFDbEMsQUFBQztBQVlELEFBQUs7VUFBQyxBQUFnQixRQUNwQjtZQUFJLEFBQU8sVUFBRyxBQUFNLE9BQUMsQUFBRyxJQUFDLEFBQUksUUFBSSxBQUFJLEtBQUMsQUFBUSxTQUFDLEFBQUksQUFBQyxBQUFDLEFBQUMsQUFDdEQsQUFBTTtlQUFDLElBQUksQUFBZ0IsaUJBQUMsQUFBSSxNQUFFLEFBQU0sUUFBRSxBQUFPLEFBQUMsQUFBQyxBQUNyRCxBQUFDLEFBQ0Y7QUFFRCxBQUFNO0FBcEJKLEFBQU07O01Bb0J3QiwyQkFBUSxBQUFXOztpQkFDMUM7YUFBTyxVQUFhLEFBQUUsQUFBQyxBQUV0QjthQUFJLE9BQUcsQUFBQyxBQUFDLEFBQ1Q7YUFBSyxRQUFHLEFBQUksQUFBVSxBQUFDLEFBQ3ZCO2FBQU0sU0FBRyxBQUFJLEFBQVUsQUFBQyxBQTBDbEMsQUFBQztBQXhDQyxBQUFHO1FBQUMsQUFBYSxPQUNmLEFBQU07ZUFBQyxBQUFLLEFBQUMsQUFDZixBQUFDO0FBRUQsQUFBRztRQUFDLEFBQWEsT0FDZjtjQUFNLEFBQVcsQUFBRSxBQUFDLEFBQ3RCLEFBQUM7QUFFRCxBQUFZO21CQUNWLEFBQU07ZUFBQyxBQUFFLEFBQUMsQUFDWixBQUFDO0FBRUQsQUFBVztrQkFDVCxBQUFNO2VBQUMsQUFBRSxBQUFDLEFBQ1osQUFBQztBQUVELEFBQWE7a0JBQUMsQUFBWSxNQUN4QjtZQUFJLEFBQUss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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFTVCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBDb3JlIH0gZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuaW1wb3J0IHsgRGljdCwgT3B0aW9uLCBkaWN0LCB1bnJlYWNoYWJsZSwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTeW1ib2xUYWJsZSB7XG4gIHN0YXRpYyB0b3AoKTogUHJvZ3JhbVN5bWJvbFRhYmxlIHtcbiAgICByZXR1cm4gbmV3IFByb2dyYW1TeW1ib2xUYWJsZSgpO1xuICB9XG5cbiAgYWJzdHJhY3QgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW47XG4gIGFic3RyYWN0IGdldChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgYWJzdHJhY3QgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPjtcbiAgYWJzdHJhY3QgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbztcblxuICBhYnN0cmFjdCBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgYWJzdHJhY3QgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIGFic3RyYWN0IGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlcjtcblxuICBjaGlsZChsb2NhbHM6IHN0cmluZ1tdKTogQmxvY2tTeW1ib2xUYWJsZSB7XG4gICAgbGV0IHN5bWJvbHMgPSBsb2NhbHMubWFwKG5hbWUgPT4gdGhpcy5hbGxvY2F0ZShuYW1lKSk7XG4gICAgcmV0dXJuIG5ldyBCbG9ja1N5bWJvbFRhYmxlKHRoaXMsIGxvY2Fscywgc3ltYm9scyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb2dyYW1TeW1ib2xUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlIHtcbiAgcHVibGljIHN5bWJvbHM6IHN0cmluZ1tdID0gW107XG5cbiAgcHJpdmF0ZSBzaXplID0gMTtcbiAgcHJpdmF0ZSBuYW1lZCA9IGRpY3Q8bnVtYmVyPigpO1xuICBwcml2YXRlIGJsb2NrcyA9IGRpY3Q8bnVtYmVyPigpO1xuXG4gIGhhcyhfbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0KF9uYW1lOiBzdHJpbmcpOiBuZXZlciB7XG4gICAgdGhyb3cgdW5yZWFjaGFibGUoKTtcbiAgfVxuXG4gIGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdO1xuXG4gICAgaWYgKCFuYW1lZCkge1xuICAgICAgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdID0gdGhpcy5hbGxvY2F0ZShuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmFtZWQ7XG4gIH1cblxuICBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV07XG5cbiAgICBpZiAoIWJsb2NrKSB7XG4gICAgICBibG9jayA9IHRoaXMuYmxvY2tzW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgJiR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmxvY2s7XG4gIH1cblxuICBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHRoaXMuc3ltYm9scy5wdXNoKGlkZW50aWZpZXIpO1xuICAgIHJldHVybiB0aGlzLnNpemUrKztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxvY2tTeW1ib2xUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJlbnQ6IFN5bWJvbFRhYmxlLCBwdWJsaWMgc3ltYm9sczogc3RyaW5nW10sIHB1YmxpYyBzbG90czogbnVtYmVyW10pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSkgIT09IC0xKSB8fCB0aGlzLnBhcmVudC5oYXMobmFtZSk7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgc2xvdCA9IHRoaXMuc3ltYm9scy5pbmRleE9mKG5hbWUpO1xuICAgIHJldHVybiBzbG90ID09PSAtMSA/IHRoaXMucGFyZW50LmdldChuYW1lKSA6IHRoaXMuc2xvdHNbc2xvdF07XG4gIH1cblxuICBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+IHtcbiAgICBsZXQgZGljdCA9IHRoaXMucGFyZW50LmdldExvY2Fsc01hcCgpO1xuICAgIHRoaXMuc3ltYm9scy5mb3JFYWNoKHN5bWJvbCA9PiBkaWN0W3N5bWJvbF0gPSB0aGlzLmdldChzeW1ib2wpKTtcbiAgICByZXR1cm4gZGljdDtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIGxldCBsb2NhbHMgPSB0aGlzLmdldExvY2Fsc01hcCgpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhsb2NhbHMpLm1hcChzeW1ib2wgPT4gbG9jYWxzW3N5bWJvbF0pO1xuICB9XG5cbiAgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZU5hbWVkKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZUJsb2NrKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGUoaWRlbnRpZmllcik7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBpbiBhbiBBU1QgYW5kIG91dHB1dHMgYSBsaXN0IG9mIGFjdGlvbnMgdG8gYmUgY29uc3VtZWRcbiAqIGJ5IGEgY29tcGlsZXIuIEZvciBleGFtcGxlLCB0aGUgdGVtcGxhdGVcbiAqXG4gKiAgICAgZm9ve3tiYXJ9fTxkaXY+YmF6PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgM11dLFxuICogICAgICBbJ211c3RhY2hlJywgW211c3RhY2hlTm9kZSwgMSwgM11dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMiwgM10sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoaXMgdmlzaXRvciB3YWxrcyB0aGUgQVNUIGRlcHRoIGZpcnN0IGFuZCBiYWNrd2FyZHMuIEFzXG4gKiBhIHJlc3VsdCB0aGUgYm90dG9tLW1vc3QgY2hpbGQgdGVtcGxhdGUgd2lsbCBhcHBlYXIgYXQgdGhlXG4gKiB0b3Agb2YgdGhlIGFjdGlvbnMgbGlzdCB3aGVyZWFzIHRoZSByb290IHRlbXBsYXRlIHdpbGwgYXBwZWFyXG4gKiBhdCB0aGUgYm90dG9tIG9mIHRoZSBsaXN0LiBGb3IgZXhhbXBsZSxcbiAqXG4gKiAgICAgPGRpdj57eyNpZn19Zm9ve3tlbHNlfX1iYXI8Yj48L2I+e3svaWZ9fTwvZGl2PlxuICpcbiAqIHByb2R1Y2VzIHRoZSBhY3Rpb25zXG4gKlxuICogICAgIFtbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDIsIDBdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMiwgMF1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMl1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXSxcbiAqICAgICAgWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMl1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxLCAxXV0sXG4gKiAgICAgIFsnYmxvY2snLCBbYmxvY2tOb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIGlzIG1haW50YWluZWQgYnkgYSBzdGFjayBvZiBmcmFtZXMuXG4gKiBXaGVuZXZlciBhIG5vZGUgd2l0aCBjaGlsZHJlbiBpcyBlbnRlcmVkIChlaXRoZXIgYSBQcm9ncmFtTm9kZVxuICogb3IgYW4gRWxlbWVudE5vZGUpIGEgZnJhbWUgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrLiBUaGUgZnJhbWVcbiAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIG9mIHRoYXRcbiAqIG5vZGUuIEZvciBleGFtcGxlLFxuICpcbiAqICAgLSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGlsZCBub2RlIGJlaW5nIHZpc2l0ZWRcbiAqICAgLSB0aGUgbnVtYmVyIG9mIG11c3RhY2hlcyBjb250YWluZWQgd2l0aGluIGl0cyBjaGlsZCBub2Rlc1xuICogICAtIHRoZSBsaXN0IG9mIGFjdGlvbnMgZ2VuZXJhdGVkIGJ5IGl0cyBjaGlsZCBub2Rlc1xuICovXG5cbmNsYXNzIEZyYW1lIHtcbiAgcHVibGljIHBhcmVudE5vZGU6IE9wdGlvbjxPYmplY3Q+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkcmVuOiBPcHRpb248QVNULk5vZGVbXT4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRJbmRleDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRDb3VudDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRUZW1wbGF0ZUNvdW50ID0gMDtcbiAgcHVibGljIG11c3RhY2hlQ291bnQgPSAwO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHVibGljIGJsYW5rQ2hpbGRUZXh0Tm9kZXM6IE9wdGlvbjxudW1iZXJbXT4gPSBudWxsO1xuICBwdWJsaWMgc3ltYm9sczogT3B0aW9uPFN5bWJvbFRhYmxlPiA9IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQWN0aW9uIHtcbiAgZXhwb3J0IHR5cGUgU3RhcnRQcm9ncmFtID0gWydzdGFydFByb2dyYW0nLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kUHJvZ3JhbSA9IFsnZW5kUHJvZ3JhbScsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFN0YXJ0QmxvY2sgPSBbJ3N0YXJ0QmxvY2snLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kQmxvY2sgPSBbJ2VuZEJsb2NrJywgW0FTVC5Qcm9ncmFtLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgQmxvY2sgPSBbJ2Jsb2NrJywgW0FTVC5CbG9ja1N0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgTXVzdGFjaGUgPSBbJ211c3RhY2hlJywgW0FTVC5NdXN0YWNoZVN0YXRlbWVudCB8IEFTVC5QYXJ0aWFsU3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBPcGVuRWxlbWVudCA9IFsnb3BlbkVsZW1lbnQnLCBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBDbG9zZUVsZW1lbnQgPSBbJ2Nsb3NlRWxlbWVudCcsIFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFRleHQgPSBbJ3RleHQnLCBbQVNULlRleHROb2RlLCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBDb21tZW50ID0gWydjb21tZW50JywgW0FTVC5Db21tZW50U3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuXG4gIGV4cG9ydCB0eXBlIEFjdGlvbiA9XG4gICAgICBTdGFydFByb2dyYW1cbiAgICB8IEVuZFByb2dyYW1cbiAgICB8IFN0YXJ0QmxvY2tcbiAgICB8IEVuZEJsb2NrXG4gICAgfCBCbG9ja1xuICAgIHwgTXVzdGFjaGVcbiAgICB8IE9wZW5FbGVtZW50XG4gICAgfCBDbG9zZUVsZW1lbnRcbiAgICB8IFRleHRcbiAgICB8IENvbW1lbnRcbiAgICA7XG59XG5cbmV4cG9ydCB0eXBlIEFjdGlvbiA9IEFjdGlvbi5BY3Rpb247XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlVmlzaXRvciB7XG4gIHByaXZhdGUgZnJhbWVTdGFjazogRnJhbWVbXSA9IFtdO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBwcm9ncmFtRGVwdGggPSAtMTtcblxuICB2aXNpdChub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICB0aGlzW25vZGUudHlwZV0obm9kZSk7XG4gIH1cblxuICAvLyBUcmF2ZXJzYWwgbWV0aG9kc1xuXG4gIFByb2dyYW0ocHJvZ3JhbTogQVNULlByb2dyYW0pIHtcbiAgICB0aGlzLnByb2dyYW1EZXB0aCsrO1xuXG4gICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5nZXRDdXJyZW50RnJhbWUoKTtcbiAgICBsZXQgcHJvZ3JhbUZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcblxuICAgIGlmICghcGFyZW50RnJhbWUpIHtcbiAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IFN5bWJvbFRhYmxlLnRvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmFtWydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzIS5jaGlsZChwcm9ncmFtLmJsb2NrUGFyYW1zKTtcbiAgICB9XG5cbiAgICBsZXQgc3RhcnRUeXBlOiBzdHJpbmcsIGVuZFR5cGU6IHN0cmluZztcblxuICAgIGlmICh0aGlzLnByb2dyYW1EZXB0aCA9PT0gMCkge1xuICAgICAgc3RhcnRUeXBlID0gJ3N0YXJ0UHJvZ3JhbSc7XG4gICAgICBlbmRUeXBlID0gJ2VuZFByb2dyYW0nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFR5cGUgPSAnc3RhcnRCbG9jayc7XG4gICAgICBlbmRUeXBlID0gJ2VuZEJsb2NrJztcbiAgICB9XG5cbiAgICBwcm9ncmFtRnJhbWUucGFyZW50Tm9kZSA9IHByb2dyYW07XG4gICAgcHJvZ3JhbUZyYW1lLmNoaWxkcmVuID0gcHJvZ3JhbS5ib2R5O1xuICAgIHByb2dyYW1GcmFtZS5jaGlsZENvdW50ID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aDtcbiAgICBwcm9ncmFtRnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW2VuZFR5cGUsIFtwcm9ncmFtLCB0aGlzLnByb2dyYW1EZXB0aF1dIGFzIEFjdGlvbik7XG4gICAgcHJvZ3JhbUZyYW1lLnN5bWJvbHMgPSBwcm9ncmFtWydzeW1ib2xzJ107XG5cbiAgICBmb3IgKGxldCBpID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBwcm9ncmFtRnJhbWUuY2hpbGRJbmRleCA9IGk7XG4gICAgICB0aGlzLnZpc2l0KHByb2dyYW0uYm9keVtpXSk7XG4gICAgfVxuXG4gICAgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucHVzaChbc3RhcnRUeXBlLCBbXG4gICAgICBwcm9ncmFtLCBwcm9ncmFtRnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50LFxuICAgICAgcHJvZ3JhbUZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucmV2ZXJzZSgpXG4gICAgXV0gYXMgQWN0aW9uKTtcbiAgICB0aGlzLnBvcEZyYW1lKCk7XG5cbiAgICB0aGlzLnByb2dyYW1EZXB0aC0tO1xuXG4gICAgLy8gUHVzaCB0aGUgY29tcGxldGVkIHRlbXBsYXRlIGludG8gdGhlIGdsb2JhbCBhY3Rpb25zIGxpc3RcbiAgICBpZiAocGFyZW50RnJhbWUpIHsgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50Kys7IH1cbiAgICB0aGlzLmFjdGlvbnMucHVzaCguLi5wcm9ncmFtRnJhbWUuYWN0aW9ucy5yZXZlcnNlKCkpO1xuICB9XG5cbiAgRWxlbWVudE5vZGUoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgbGV0IGVsZW1lbnRGcmFtZSA9IHRoaXMucHVzaEZyYW1lKCk7XG5cbiAgICBlbGVtZW50RnJhbWUucGFyZW50Tm9kZSA9IGVsZW1lbnQ7XG4gICAgZWxlbWVudEZyYW1lLmNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbjtcbiAgICBlbGVtZW50RnJhbWUuY2hpbGRDb3VudCA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ICs9IGVsZW1lbnQubW9kaWZpZXJzLmxlbmd0aDtcbiAgICBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgIGVsZW1lbnRGcmFtZS5zeW1ib2xzID0gZWxlbWVudFsnc3ltYm9scyddID0gcGFyZW50RnJhbWUuc3ltYm9scyEuY2hpbGQoZWxlbWVudC5ibG9ja1BhcmFtcyk7XG5cbiAgICBsZXQgYWN0aW9uQXJnczogW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXJdID0gW1xuICAgICAgZWxlbWVudCxcbiAgICAgIHBhcmVudEZyYW1lLmNoaWxkSW5kZXghLFxuICAgICAgcGFyZW50RnJhbWUuY2hpbGRDb3VudCFcbiAgICBdO1xuXG4gICAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChbJ2Nsb3NlRWxlbWVudCcsIGFjdGlvbkFyZ3NdKTtcblxuICAgIGZvciAobGV0IGkgPSBlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMudmlzaXQoZWxlbWVudC5hdHRyaWJ1dGVzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZWxlbWVudEZyYW1lLmNoaWxkSW5kZXggPSBpO1xuICAgICAgdGhpcy52aXNpdChlbGVtZW50LmNoaWxkcmVuW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgb3BlbiA9IFsnb3BlbkVsZW1lbnQnLCBbLi4uYWN0aW9uQXJncywgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQsIGVsZW1lbnRGcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKV1dIGFzIEFjdGlvbi5PcGVuRWxlbWVudDtcbiAgICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKG9wZW4pO1xuXG4gICAgdGhpcy5wb3BGcmFtZSgpO1xuXG4gICAgLy8gUHJvcGFnYXRlIHRoZSBlbGVtZW50J3MgZnJhbWUgc3RhdGUgdG8gdGhlIHBhcmVudCBmcmFtZVxuICAgIGlmIChlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCA+IDApIHsgcGFyZW50RnJhbWUubXVzdGFjaGVDb3VudCsrOyB9XG4gICAgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50ICs9IGVsZW1lbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQ7XG4gICAgcGFyZW50RnJhbWUuYWN0aW9ucy5wdXNoKC4uLmVsZW1lbnRGcmFtZS5hY3Rpb25zKTtcbiAgfVxuXG4gIEF0dHJOb2RlKGF0dHI6IEFTVC5BdHRyTm9kZSkge1xuICAgIGlmIChhdHRyLnZhbHVlLnR5cGUgIT09ICdUZXh0Tm9kZScpIHtcbiAgICAgIHRoaXMuY3VycmVudEZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICB9XG4gIH07XG5cbiAgVGV4dE5vZGUodGV4dDogQVNULlRleHROb2RlKSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgaWYgKHRleHQuY2hhcnMgPT09ICcnKSB7XG4gICAgICBmcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzIS5wdXNoKGRvbUluZGV4T2YoZnJhbWUuY2hpbGRyZW4hLCB0ZXh0KSk7XG4gICAgfVxuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ3RleHQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgQmxvY2tTdGF0ZW1lbnQobm9kZTogQVNULkJsb2NrU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG5cbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnYmxvY2snLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG5cbiAgICBpZiAobm9kZS5pbnZlcnNlKSB7IHRoaXMudmlzaXQobm9kZS5pbnZlcnNlKTsgfVxuICAgIGlmIChub2RlLnByb2dyYW0pIHsgdGhpcy52aXNpdChub2RlLnByb2dyYW0pOyB9XG4gIH07XG5cbiAgUGFydGlhbFN0YXRlbWVudChub2RlOiBBU1QuUGFydGlhbFN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydtdXN0YWNoZScsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBDb21tZW50U3RhdGVtZW50KHRleHQ6IEFTVC5Db21tZW50U3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnY29tbWVudCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBNdXN0YWNoZUNvbW1lbnRTdGF0ZW1lbnQoKSB7XG4gICAgLy8gSW50ZW50aW9uYWwgZW1wdHk6IEhhbmRsZWJhcnMgY29tbWVudHMgc2hvdWxkIG5vdCBhZmZlY3Qgb3V0cHV0LlxuICB9O1xuXG4gIE11c3RhY2hlU3RhdGVtZW50KG11c3RhY2hlOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbXVzdGFjaGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIC8vIEZyYW1lIGhlbHBlcnNcblxuICBwcml2YXRlIGdldCBjdXJyZW50RnJhbWUoKTogRnJhbWUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5nZXRDdXJyZW50RnJhbWUoKSwgXCJFeHBlY3RlZCBhIGN1cnJlbnQgZnJhbWVcIik7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRGcmFtZSgpOiBPcHRpb248RnJhbWU+IHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZVN0YWNrW3RoaXMuZnJhbWVTdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEZyYW1lKCkge1xuICAgIGxldCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuZnJhbWVTdGFjay5wdXNoKGZyYW1lKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBwcml2YXRlIHBvcEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgYGRvbU5vZGVgIGluIHRoZSBgbm9kZXNgIGFycmF5LCBza2lwcGluZ1xuLy8gb3ZlciBhbnkgbm9kZXMgd2hpY2ggZG8gbm90IHJlcHJlc2VudCBET00gbm9kZXMuXG5mdW5jdGlvbiBkb21JbmRleE9mKG5vZGVzOiBBU1QuTm9kZVtdLCBkb21Ob2RlOiBBU1QuVGV4dE5vZGUgfCBBU1QuRWxlbWVudE5vZGUpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBub2RlID0gbm9kZXNbaV07XG5cbiAgICBpZiAobm9kZS50eXBlICE9PSAnVGV4dE5vZGUnICYmIG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykge1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGRvbU5vZGUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG4iXX0=

@@ -195,10 +195,9 @@ "use strict";

this.opcodes.forEach(function (_ref) {
var opcode = _ref[0],
args = _ref.slice(1);
this.opcodes.forEach(function (op) {
var opcode = op[0];
var arg = op[1];
if (!_this4[opcode]) {
throw new Error("unimplemented " + opcode + " on JavaScriptCompiler");
}
_this4[opcode].apply(_this4, args);
_this4[opcode](arg);
});

@@ -210,5 +209,3 @@ return this.template;

JavaScriptCompiler.prototype.startBlock = function startBlock(_ref2) {
var program = _ref2[0];
JavaScriptCompiler.prototype.startBlock = function startBlock(program) {
var block = new InlineBlock(program['symbols']);

@@ -252,3 +249,7 @@ this.blocks.push(block);

JavaScriptCompiler.prototype.block = function block(name, template, inverse) {
JavaScriptCompiler.prototype.block = function block(_ref) {
var name = _ref[0],
template = _ref[1],
inverse = _ref[2];
var params = this.popValue();

@@ -303,3 +304,6 @@ var hash = this.popValue();

JavaScriptCompiler.prototype.staticAttr = function staticAttr(name, namespace) {
JavaScriptCompiler.prototype.staticAttr = function staticAttr(_ref2) {
var name = _ref2[0],
namespace = _ref2[1];
var value = this.popValue();

@@ -309,3 +313,6 @@ this.push([_wireFormat.Ops.StaticAttr, name, value, namespace]);

JavaScriptCompiler.prototype.dynamicAttr = function dynamicAttr(name, namespace) {
JavaScriptCompiler.prototype.dynamicAttr = function dynamicAttr(_ref3) {
var name = _ref3[0],
namespace = _ref3[1];
var value = this.popValue();

@@ -315,3 +322,6 @@ this.push([_wireFormat.Ops.DynamicAttr, name, value, namespace]);

JavaScriptCompiler.prototype.trustingAttr = function trustingAttr(name, namespace) {
JavaScriptCompiler.prototype.trustingAttr = function trustingAttr(_ref4) {
var name = _ref4[0],
namespace = _ref4[1];
var value = this.popValue();

@@ -373,3 +383,6 @@ this.push([_wireFormat.Ops.TrustingAttr, name, value, namespace]);

JavaScriptCompiler.prototype.get = function get(head, path) {
JavaScriptCompiler.prototype.get = function get(_ref5) {
var head = _ref5[0],
path = _ref5[1];
this.pushValue([_wireFormat.Ops.Get, head, path]);

@@ -462,2 +475,2 @@ };

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9qYXZhc2NyaXB0LWNvbXBpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQUUsQUFBTSxBQUFFLEFBQU0sQUFBZSxBQUFDLEFBQ3ZDLEFBQU8sQUFBRSxBQUFLLEFBQUUsQUFBTyxBQUFVLEFBQU0sQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFJL0QsQUFBTyxBQVFMLEFBQUcsQUFDSCxBQUFVLEFBQ1YsQUFBYyxBQUNkLEFBQVUsQUFDVixBQUFXLEFBQ1osQUFBTSxBQUFzQixBQUFDLEFBUTlCLEFBQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQU47cUJBQ1M7OzthQUFVLGFBQWdCLEFBQUUsQUFBQyxBQU90QyxBQUFDLEFBSEMsQUFBSTs7O3lDQUFDLEFBQW9CLFdBQ3ZCLEFBQUk7YUFBQyxBQUFVLFdBQUMsQUFBSSxLQUFDLEFBQVMsQUFBQyxBQUFDLEFBQ2xDLEFBQUMsQUFDRjs7OztBQUVELEFBQU07SUFBbUI7Ozt5QkFDSixBQUF1QixPQUN4QyxBQUFLLEFBQUUsQUFBQzs7O3FEQURTOztjQUFLLFFBQUwsQUFBSyxBQUFrQixBQUUxQyxBQUFDO2VBRUQsQUFBTTs7O3FEQUNKLEFBQU07O3dCQUNRLEFBQUksS0FBQyxBQUFVLEFBQzNCLEFBQVU7d0JBQUUsQUFBSSxLQUFDLEFBQUssTUFGakIsQUFFa0IsQUFBSyxBQUM3QixBQUFDLEFBQ0osQUFBQyxBQUNGLEFBSkssQUFBVTs7Ozs7RUFQaUIsQUFBSyxBQUNwQyxBQVlGLEFBQU07SUFBcUI7OzsyQkFPTCxBQUErQixhQUNqRCxBQUFLLEFBQUUsQUFBQzs7O3NEQURVOztlQUFXLGNBTnhCLEFBTWEsQUFBVyxBQUFvQjtlQU54QyxPQUFHLEFBQVUsQUFBQyxBQUNsQjtl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LEFBQU0sQUFBQyxBQUFNO21CQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBTyxBQUFFLEFBQStCLEFBQUMsQUFBQyxBQUN0RSxBQUFDLEFBRUQsQUFBTzs7Ozs7Ozs7OztBQW9QVCxxQkFBcUIsQUFBVyxLQUM5QjtRQUFJLEFBQUksT0FBRyxBQUFHLElBQUMsQUFBTSxPQUFDLEFBQUMsQUFBQyxBQUFDLEFBRXpCLEFBQU07V0FBQyxBQUFJLFNBQUssQUFBSSxLQUFDLEFBQVcsQUFBRSxBQUFDLEFBQ3JDLEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgU3RhY2ssIERpY3RTZXQsIE9wdGlvbiwgZXhwZWN0IH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IEFTVCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBCbG9ja1N5bWJvbFRhYmxlLCBQcm9ncmFtU3ltYm9sVGFibGUgfSBmcm9tICcuL3RlbXBsYXRlLXZpc2l0b3InO1xuXG5pbXBvcnQge1xuICBTZXJpYWxpemVkSW5saW5lQmxvY2ssXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLFxuICBDb3JlLFxuICBTdGF0ZW1lbnQsXG4gIFN0YXRlbWVudHMsXG4gIEV4cHJlc3Npb24sXG4gIEV4cHJlc3Npb25zLFxuICBPcHMsXG4gIGlzTW9kaWZpZXIsXG4gIGlzRmx1c2hFbGVtZW50LFxuICBpc0FyZ3VtZW50LFxuICBpc0F0dHJpYnV0ZVxufSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5cbmV4cG9ydCB0eXBlIHN0ciA9IHN0cmluZztcbmV4cG9ydCB0eXBlIFBhcmFtcyA9IENvcmUuUGFyYW1zO1xuZXhwb3J0IHR5cGUgSGFzaCA9IENvcmUuSGFzaDtcbmV4cG9ydCB0eXBlIFBhdGggPSBDb3JlLlBhdGg7XG5leHBvcnQgdHlwZSBTdGFja1ZhbHVlID0gRXhwcmVzc2lvbiB8IFBhcmFtcyB8IEhhc2ggfCBzdHI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9jayB7XG4gIHB1YmxpYyBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSA9IFtdO1xuXG4gIGFic3RyYWN0IHRvSlNPTigpOiBPYmplY3Q7XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElubGluZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGFibGU6IEJsb2NrU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgdG9KU09OKCk6IFNlcmlhbGl6ZWRJbmxpbmVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgIHBhcmFtZXRlcnM6IHRoaXMudGFibGUuc2xvdHNcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBwdWJsaWMgdHlwZSA9IFwidGVtcGxhdGVcIjtcbiAgcHVibGljIHlpZWxkcyA9IG5ldyBEaWN0U2V0PHN0cmluZz4oKTtcbiAgcHVibGljIG5hbWVkID0gbmV3IERpY3RTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgYmxvY2tzOiBTZXJpYWxpemVkSW5saW5lQmxvY2tbXSA9IFtdO1xuICBwdWJsaWMgaGFzRXZhbCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3ltYm9sVGFibGU6IFByb2dyYW1TeW1ib2xUYWJsZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdXNoKHN0YXRlbWVudDogU3RhdGVtZW50KSB7XG4gICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgfVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN5bWJvbHM6IHRoaXMuc3ltYm9sVGFibGUuc3ltYm9scyxcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgIGhhc0V2YWw6IHRoaXMuaGFzRXZhbFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBwdWJsaWMgYXR0cmlidXRlczogU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSA9IFtdO1xuICBwdWJsaWMgYXJndW1lbnRzOiBTdGF0ZW1lbnRzLkFyZ3VtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBpblBhcmFtcyA9IHRydWU7XG4gIHB1YmxpYyBwb3NpdGlvbmFsczogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhYmxlOiBCbG9ja1N5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICBpZiAodGhpcy5pblBhcmFtcykge1xuICAgICAgaWYgKGlzTW9kaWZpZXIoc3RhdGVtZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGUgRXJyb3I6IEVsZW1lbnQgbW9kaWZpZXJzIGFyZSBub3QgYWxsb3dlZCBpbiBjb21wb25lbnRzJyk7XG4gICAgICB9IGVsc2UgaWYgKGlzRmx1c2hFbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5pblBhcmFtcyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChpc0FyZ3VtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5hcmd1bWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChpc0F0dHJpYnV0ZShzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGUgRXJyb3I6IG9ubHkgcGFyYW1ldGVycyBhbGxvd2VkIGJlZm9yZSBmbHVzaC1lbGVtZW50Jyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IFtTdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBDb3JlLkhhc2gsIE9wdGlvbjxTZXJpYWxpemVkSW5saW5lQmxvY2s+XSB7XG4gICAgbGV0IGFyZ3MgPSB0aGlzLmFyZ3VtZW50cztcbiAgICBsZXQga2V5cyA9IGFyZ3MubWFwKGFyZyA9PiBhcmdbMV0pO1xuICAgIGxldCB2YWx1ZXMgPSBhcmdzLm1hcChhcmcgPT4gYXJnWzJdKTtcblxuICAgIHJldHVybiBbXG4gICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICBba2V5cywgdmFsdWVzXSxcbiAgICAgIHtcbiAgICAgICAgc3RhdGVtZW50czogdGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgICBwYXJhbWV0ZXJzOiB0aGlzLnRhYmxlLnNsb3RzXG4gICAgICB9XG4gICAgXTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGUge1xuICBwdWJsaWMgYmxvY2s6IFRlbXBsYXRlQmxvY2s7XG5cbiAgY29uc3RydWN0b3Ioc3ltYm9sczogUHJvZ3JhbVN5bWJvbFRhYmxlKSB7XG4gICAgdGhpcy5ibG9jayA9IG5ldyBUZW1wbGF0ZUJsb2NrKHN5bWJvbHMpO1xuICB9XG5cbiAgdG9KU09OKCk6IFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrIHtcbiAgICByZXR1cm4gdGhpcy5ibG9jay50b0pTT04oKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKYXZhU2NyaXB0Q29tcGlsZXIge1xuICBzdGF0aWMgcHJvY2VzcyhvcGNvZGVzOiBhbnlbXSwgc3ltYm9sczogUHJvZ3JhbVN5bWJvbFRhYmxlKTogVGVtcGxhdGUge1xuICAgIGxldCBjb21waWxlciA9IG5ldyBKYXZhU2NyaXB0Q29tcGlsZXIob3Bjb2Rlcywgc3ltYm9scyk7XG4gICAgcmV0dXJuIGNvbXBpbGVyLnByb2Nlc3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVtcGxhdGU6IFRlbXBsYXRlO1xuICBwcml2YXRlIGJsb2NrcyA9IG5ldyBTdGFjazxCbG9jaz4oKTtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBhbnlbXTtcbiAgcHJpdmF0ZSB2YWx1ZXM6IFN0YWNrVmFsdWVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKG9wY29kZXM6IGFueVtdLCBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgICB0aGlzLm9wY29kZXMgPSBvcGNvZGVzO1xuICAgIHRoaXMudGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUoc3ltYm9scyk7XG4gIH1cblxuICBnZXQgY3VycmVudEJsb2NrKCk6IEJsb2NrIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuYmxvY2tzLmN1cnJlbnQsICdFeHBlY3RlZCBhIGJsb2NrIG9uIHRoZSBzdGFjaycpO1xuICB9XG5cbiAgcHJvY2VzcygpOiBUZW1wbGF0ZSB7XG4gICAgdGhpcy5vcGNvZGVzLmZvckVhY2goKFtvcGNvZGUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbb3Bjb2RlXSkgeyB0aHJvdyBuZXcgRXJyb3IoYHVuaW1wbGVtZW50ZWQgJHtvcGNvZGV9IG9uIEphdmFTY3JpcHRDb21waWxlcmApOyB9XG4gICAgICB0aGlzW29wY29kZV0oLi4uYXJncyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vLyBOZXN0aW5nXG5cbiAgc3RhcnRCbG9jayhbcHJvZ3JhbV06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICBsZXQgYmxvY2s6IEJsb2NrID0gbmV3IElubGluZUJsb2NrKHByb2dyYW1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICBsZXQgeyB0ZW1wbGF0ZSwgYmxvY2tzIH0gPSB0aGlzO1xuICAgIGxldCBibG9jayA9IGJsb2Nrcy5wb3AoKSBhcyBJbmxpbmVCbG9jaztcbiAgICB0ZW1wbGF0ZS5ibG9jay5ibG9ja3MucHVzaChibG9jay50b0pTT04oKSk7XG4gIH1cblxuICBzdGFydFByb2dyYW0oKSB7XG4gICAgdGhpcy5ibG9ja3MucHVzaCh0aGlzLnRlbXBsYXRlLmJsb2NrKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG5cbiAgfVxuXG4gIC8vLyBTdGF0ZW1lbnRzXG5cbiAgdGV4dChjb250ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5UZXh0LCBjb250ZW50XSk7XG4gIH1cblxuICBhcHBlbmQodHJ1c3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMucHVzaChbT3BzLkFwcGVuZCwgdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpLCB0cnVzdGVkXSk7XG4gIH1cblxuICBjb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5Db21tZW50LCB2YWx1ZV0pO1xuICB9XG5cbiAgbW9kaWZpZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuTW9kaWZpZXIsIG5hbWUsIHBhcmFtcywgaGFzaF0pO1xuICB9XG5cbiAgYmxvY2sobmFtZTogc3RyaW5nLCB0ZW1wbGF0ZTogbnVtYmVyLCBpbnZlcnNlOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICBsZXQgYmxvY2tzID0gdGhpcy50ZW1wbGF0ZS5ibG9jay5ibG9ja3M7XG4gICAgYXNzZXJ0KHR5cGVvZiB0ZW1wbGF0ZSAhPT0gJ251bWJlcicgfHwgYmxvY2tzW3RlbXBsYXRlXSAhPT0gbnVsbCwgJ21pc3NpbmcgYmxvY2sgaW4gdGhlIGNvbXBpbGVyJyk7XG4gICAgYXNzZXJ0KHR5cGVvZiBpbnZlcnNlICE9PSAnbnVtYmVyJyB8fCBibG9ja3NbaW52ZXJzZV0gIT09IG51bGwsICdtaXNzaW5nIGJsb2NrIGluIHRoZSBjb21waWxlcicpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuQmxvY2ssIG5hbWUsIHBhcmFtcywgaGFzaCwgYmxvY2tzW3RlbXBsYXRlXSwgYmxvY2tzW2ludmVyc2VdXSk7XG4gIH1cblxuICBvcGVuU3BsYXR0ZWRFbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmIChpc0NvbXBvbmVudCh0YWcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGUgRXJyb3I6IC4uLmF0dHJpYnV0ZXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBhbiBlbGVtZW50YCk7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50LmJsb2NrUGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcGlsZSBFcnJvcjogPCR7ZWxlbWVudC50YWd9PiBpcyBub3QgYSBjb21wb25lbnQgYW5kIGRvZXNuJ3Qgc3VwcG9ydCBibG9jayBwYXJhbWV0ZXJzYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaChbT3BzLk9wZW5TcGxhdHRlZEVsZW1lbnQsIHRhZ10pO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmIChpc0NvbXBvbmVudCh0YWcpKSB7XG4gICAgICB0aGlzLnN0YXJ0Q29tcG9uZW50KGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ibG9ja1BhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGUgRXJyb3I6IDwke2VsZW1lbnQudGFnfT4gaXMgbm90IGEgY29tcG9uZW50IGFuZCBkb2Vzbid0IHN1cHBvcnQgYmxvY2sgcGFyYW1ldGVyc2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goW09wcy5PcGVuRWxlbWVudCwgdGFnXSk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2hFbGVtZW50KCkge1xuICAgIHRoaXMucHVzaChbT3BzLkZsdXNoRWxlbWVudF0pO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmIChpc0NvbXBvbmVudCh0YWcpKSB7XG4gICAgICBsZXQgW2F0dHJzLCBhcmdzLCBibG9ja10gPSB0aGlzLmVuZENvbXBvbmVudCgpO1xuICAgICAgdGhpcy5wdXNoKFtPcHMuQ29tcG9uZW50LCB0YWcsIGF0dHJzLCBhcmdzLCBibG9ja10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goW09wcy5DbG9zZUVsZW1lbnRdKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWNBdHRyKG5hbWU6IHN0ciwgbmFtZXNwYWNlOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuU3RhdGljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgZHluYW1pY0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5EeW5hbWljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgdHJ1c3RpbmdBdHRyKG5hbWU6IHN0ciwgbmFtZXNwYWNlOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuVHJ1c3RpbmdBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICBzdGF0aWNBcmcobmFtZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLlN0YXRpY0FyZywgbmFtZSwgdmFsdWVdKTtcbiAgfVxuXG4gIGR5bmFtaWNBcmcobmFtZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBcmcsIG5hbWUsIHZhbHVlXSk7XG4gIH1cblxuICB5aWVsZCh0bzogbnVtYmVyKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIHRoaXMucHVzaChbT3BzLllpZWxkLCB0bywgcGFyYW1zXSk7XG4gIH1cblxuICBhdHRyU3BsYXQodG86IG51bWJlcikge1xuICAgIHRoaXMucHVzaChbT3BzLkF0dHJTcGxhdCwgdG9dKTtcbiAgfVxuXG4gIGRlYnVnZ2VyKGV2YWxJbmZvOiBDb3JlLkV2YWxJbmZvKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuRGVidWdnZXIsIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIGhhc0Jsb2NrKG5hbWU6IG51bWJlcikge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkhhc0Jsb2NrPihbT3BzLkhhc0Jsb2NrLCBuYW1lXSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9ja1BhcmFtcz4oW09wcy5IYXNCbG9ja1BhcmFtcywgbmFtZV0pO1xuICB9XG5cbiAgcGFydGlhbChldmFsSW5mbzogQ29yZS5FdmFsSW5mbykge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5QYXJ0aWFsLCBwYXJhbXNbMF0sIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9uc1xuXG4gIGxpdGVyYWwodmFsdWU6IEV4cHJlc3Npb25zLlZhbHVlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVuZGVmaW5lZD4oW09wcy5VbmRlZmluZWRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuVmFsdWU+KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB1bmtub3duKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVua25vd24+KFtPcHMuVW5rbm93biwgbmFtZV0pO1xuICB9XG5cbiAgZ2V0KGhlYWQ6IG51bWJlciwgcGF0aDogc3RyaW5nW10pIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5HZXQ+KFtPcHMuR2V0LCBoZWFkLCBwYXRoXSk7XG4gIH1cblxuICBtYXliZUxvY2FsKHBhdGg6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuTWF5YmVMb2NhbD4oW09wcy5NYXliZUxvY2FsLCBwYXRoXSk7XG4gIH1cblxuICBjb25jYXQoKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuQ29uY2F0PihbT3BzLkNvbmNhdCwgdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCldKTtcbiAgfVxuXG4gIGhlbHBlcihuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IZWxwZXI+KFtPcHMuSGVscGVyLCBuYW1lLCBwYXJhbXMsIGhhc2hdKTtcbiAgfVxuXG4gIC8vLyBTdGFjayBNYW5hZ2VtZW50IE9wY29kZXNcblxuICBzdGFydENvbXBvbmVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudEJsb2NrKGVsZW1lbnRbJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChjb21wb25lbnQpO1xuICB9XG5cbiAgZW5kQ29tcG9uZW50KCk6IFtTdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBDb3JlLkhhc2gsIE9wdGlvbjxTZXJpYWxpemVkSW5saW5lQmxvY2s+XSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuYmxvY2tzLnBvcCgpO1xuICAgIGFzc2VydChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRCbG9jaywgXCJDb21waWxlciBidWc6IGVuZENvbXBvbmVudCgpIHNob3VsZCBlbmQgYSBjb21wb25lbnRcIik7XG4gICAgcmV0dXJuIChjb21wb25lbnQgYXMgQ29tcG9uZW50QmxvY2spLnRvSlNPTigpO1xuICB9XG5cbiAgcHJlcGFyZUFycmF5KHNpemU6IG51bWJlcikge1xuICAgIGxldCB2YWx1ZXM6IEV4cHJlc3Npb25bXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIHZhbHVlcy5wdXNoKHRoaXMucG9wVmFsdWUoKSBhcyBFeHByZXNzaW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxQYXJhbXM+KHZhbHVlcyk7XG4gIH1cblxuICBwcmVwYXJlT2JqZWN0KHNpemU6IG51bWJlcikge1xuICAgIGFzc2VydCh0aGlzLnZhbHVlcy5sZW5ndGggPj0gc2l6ZSwgYEV4cGVjdGVkICR7c2l6ZX0gdmFsdWVzIG9uIHRoZSBzdGFjaywgZm91bmQgJHt0aGlzLnZhbHVlcy5sZW5ndGh9YCk7XG5cbiAgICBsZXQga2V5czogc3RyaW5nW10gPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgbGV0IHZhbHVlczogRXhwcmVzc2lvbltdID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIGtleXNbaV0gPSB0aGlzLnBvcFZhbHVlPHN0cj4oKTtcbiAgICAgIHZhbHVlc1tpXSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxIYXNoPihba2V5cywgdmFsdWVzXSk7XG4gIH1cblxuICAvLy8gVXRpbGl0aWVzXG5cbiAgcHVzaChhcmdzOiBTdGF0ZW1lbnQpIHtcbiAgICB3aGlsZSAoYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSBudWxsKSB7XG4gICAgICBhcmdzLnBvcCgpO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsb2NrLnB1c2goYXJncyk7XG4gIH1cblxuICBwdXNoVmFsdWU8UyBleHRlbmRzIEV4cHJlc3Npb24gfCBQYXJhbXMgfCBIYXNoPih2YWw6IFMpIHtcbiAgICB0aGlzLnZhbHVlcy5wdXNoKHZhbCk7XG4gIH1cblxuICBwb3BWYWx1ZTxUIGV4dGVuZHMgU3RhY2tWYWx1ZT4oKTogVCB7XG4gICAgYXNzZXJ0KHRoaXMudmFsdWVzLmxlbmd0aCwgXCJObyBleHByZXNzaW9uIGZvdW5kIG9uIHN0YWNrXCIpO1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5wb3AoKSBhcyBUO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ29tcG9uZW50KHRhZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGxldCBvcGVuID0gdGFnLmNoYXJBdCgwKTtcblxuICByZXR1cm4gb3BlbiA9PT0gb3Blbi50b1VwcGVyQ2FzZSgpO1xufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9qYXZhc2NyaXB0LWNvbXBpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxBQUFPLEFBQUUsQUFBTSxBQUFFLEFBQU0sQUFBZSxBQUFDLEFBQ3ZDLEFBQU8sQUFBRSxBQUFLLEFBQUUsQUFBTyxBQUFVLEFBQU0sQUFBRSxBQUFNLEFBQWUsQUFBQzs7QUFJL0QsQUFBTyxBQVFMLEFBQUcsQUFDSCxBQUFVLEFBQ1YsQUFBYyxBQUNkLEFBQVUsQUFDVixBQUFXLEFBQ1osQUFBTSxBQUFzQixBQUFDLEFBUzlCLEFBQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQU47cUJBQ1M7OzthQUFVLGFBQWdCLEFBQUUsQUFBQyxBQU90QyxBQUFDLEFBSEMsQUFBSTs7O3lDQUFDLEFBQW9CLFdBQ3ZCLEFBQUk7YUFBQyxBQUFVLFdBQUMsQUFBSSxLQUFDLEFBQVMsQUFBQyxBQUFDLEFBQ2xDLEFBQUMsQUFDRjs7OztBQUVELEFBQU07SUFBbUI7Ozt5QkFDSixBQUF1QixPQUN4QyxBQUFLLEFBQUUsQUFBQzs7O3FEQURTOztjQUFLLFFBQUwsQUFBSyxBQUFrQixBQUUxQyxBQUFDO2VBRUQsQUFBTTs7O3FEQUNKLEFBQU07O3dCQUNRLEFBQUksS0FBQyxBQUFVLEFBQzNCLEFBQVU7d0JBQUUsQUFBSSxLQUFDLEFBQUssTUFGakIsQUFFa0IsQUFBSyxBQUM3QixBQUFDLEFBQ0osQUFBQyxBQUNGLEFBSkssQUFBVTs7Ozs7RUFQaUIsQUFBSyxBQUNwQyxBQVlGLEFBQU07SUFBcUI7OzsyQkFPTCxBQUErQixhQUNqRCxBQUFLLEFBQUUsQUFBQzs7O3NEQURVOztlQUFXLGNBTnhCLEFBTWEsQUFBVyxBQUFvQjtlQU54QyxPQUFHLEFBQVUsQUFBQyxBQUNsQjtl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QUFBTSxRQUFFLEFBQThCLEFBQUMsQUFBQyxBQUMzRCxBQUFNOztlQUFDLEFBQUksS0FBQyxBQUFNLE9BQUMsQUFBRyxBQUFPLEFBQUMsQUFDaEMsQUFBQyxBQUNGOzs7Ozs0QkF4UEcsQUFBTSxBQUFDLEFBQU07bUJBQUMsQUFBSSxLQUFDLEFBQU0sT0FBQyxBQUFPLEFBQUUsQUFBK0IsQUFBQyxBQUFDLEFBQ3RFLEFBQUMsQUFFRCxBQUFPOzs7Ozs7Ozs7O0FBdVBULHFCQUFxQixBQUFXLEtBQzlCO1FBQUksQUFBSSxPQUFHLEFBQUcsSUFBQyxBQUFNLE9BQUMsQUFBQyxBQUFDLEFBQUMsQUFFekIsQUFBTTtXQUFDLEFBQUksU0FBSyxBQUFJLEtBQUMsQUFBVyxBQUFFLEFBQUMsQUFDckMsQUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzc2VydCB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBTdGFjaywgRGljdFNldCwgT3B0aW9uLCBleHBlY3QgfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgQVNUIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcbmltcG9ydCB7IEJsb2NrU3ltYm9sVGFibGUsIFByb2dyYW1TeW1ib2xUYWJsZSB9IGZyb20gJy4vdGVtcGxhdGUtdmlzaXRvcic7XG5cbmltcG9ydCB7XG4gIFNlcmlhbGl6ZWRJbmxpbmVCbG9jayxcbiAgU2VyaWFsaXplZFRlbXBsYXRlQmxvY2ssXG4gIENvcmUsXG4gIFN0YXRlbWVudCxcbiAgU3RhdGVtZW50cyxcbiAgRXhwcmVzc2lvbixcbiAgRXhwcmVzc2lvbnMsXG4gIE9wcyxcbiAgaXNNb2RpZmllcixcbiAgaXNGbHVzaEVsZW1lbnQsXG4gIGlzQXJndW1lbnQsXG4gIGlzQXR0cmlidXRlXG59IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IFByb2Nlc3NvciwgQ29tcGlsZXJPcHMsIE9wTmFtZSwgT3AgfSBmcm9tIFwiLi9jb21waWxlci1vcHNcIjtcblxuZXhwb3J0IHR5cGUgc3RyID0gc3RyaW5nO1xuZXhwb3J0IHR5cGUgUGFyYW1zID0gQ29yZS5QYXJhbXM7XG5leHBvcnQgdHlwZSBIYXNoID0gQ29yZS5IYXNoO1xuZXhwb3J0IHR5cGUgUGF0aCA9IENvcmUuUGF0aDtcbmV4cG9ydCB0eXBlIFN0YWNrVmFsdWUgPSBFeHByZXNzaW9uIHwgUGFyYW1zIHwgSGFzaCB8IHN0cjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJsb2NrIHtcbiAgcHVibGljIHN0YXRlbWVudHM6IFN0YXRlbWVudFtdID0gW107XG5cbiAgYWJzdHJhY3QgdG9KU09OKCk6IE9iamVjdDtcblxuICBwdXNoKHN0YXRlbWVudDogU3RhdGVtZW50KSB7XG4gICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW5saW5lQmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0YWJsZTogQmxvY2tTeW1ib2xUYWJsZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICB0b0pTT04oKTogU2VyaWFsaXplZElubGluZUJsb2NrIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGVtZW50czogdGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlQmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gIHB1YmxpYyB0eXBlID0gXCJ0ZW1wbGF0ZVwiO1xuICBwdWJsaWMgeWllbGRzID0gbmV3IERpY3RTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgbmFtZWQgPSBuZXcgRGljdFNldDxzdHJpbmc+KCk7XG4gIHB1YmxpYyBibG9ja3M6IFNlcmlhbGl6ZWRJbmxpbmVCbG9ja1tdID0gW107XG4gIHB1YmxpYyBoYXNFdmFsID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzeW1ib2xUYWJsZTogUHJvZ3JhbVN5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICB9XG5cbiAgdG9KU09OKCk6IFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3ltYm9sczogdGhpcy5zeW1ib2xUYWJsZS5zeW1ib2xzLFxuICAgICAgc3RhdGVtZW50czogdGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgaGFzRXZhbDogdGhpcy5oYXNFdmFsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50QmxvY2sgZXh0ZW5kcyBCbG9jayB7XG4gIHB1YmxpYyBhdHRyaWJ1dGVzOiBTdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdID0gW107XG4gIHB1YmxpYyBhcmd1bWVudHM6IFN0YXRlbWVudHMuQXJndW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIGluUGFyYW1zID0gdHJ1ZTtcbiAgcHVibGljIHBvc2l0aW9uYWxzOiBudW1iZXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFibGU6IEJsb2NrU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIGlmICh0aGlzLmluUGFyYW1zKSB7XG4gICAgICBpZiAoaXNNb2RpZmllcihzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcGlsZSBFcnJvcjogRWxlbWVudCBtb2RpZmllcnMgYXJlIG5vdCBhbGxvd2VkIGluIGNvbXBvbmVudHMnKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNGbHVzaEVsZW1lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmluUGFyYW1zID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGlzQXJndW1lbnQoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmFyZ3VtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKGlzQXR0cmlidXRlKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcGlsZSBFcnJvcjogb25seSBwYXJhbWV0ZXJzIGFsbG93ZWQgYmVmb3JlIGZsdXNoLWVsZW1lbnQnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG4gIH1cblxuICB0b0pTT04oKTogW1N0YXRlbWVudHMuQXR0cmlidXRlW10sIENvcmUuSGFzaCwgT3B0aW9uPFNlcmlhbGl6ZWRJbmxpbmVCbG9jaz5dIHtcbiAgICBsZXQgYXJncyA9IHRoaXMuYXJndW1lbnRzO1xuICAgIGxldCBrZXlzID0gYXJncy5tYXAoYXJnID0+IGFyZ1sxXSk7XG4gICAgbGV0IHZhbHVlcyA9IGFyZ3MubWFwKGFyZyA9PiBhcmdbMl0pO1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuYXR0cmlidXRlcyxcbiAgICAgIFtrZXlzLCB2YWx1ZXNdLFxuICAgICAge1xuICAgICAgICBzdGF0ZW1lbnRzOiB0aGlzLnN0YXRlbWVudHMsXG4gICAgICAgIHBhcmFtZXRlcnM6IHRoaXMudGFibGUuc2xvdHNcbiAgICAgIH1cbiAgICBdO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZSB7XG4gIHB1YmxpYyBibG9jazogVGVtcGxhdGVCbG9jaztcblxuICBjb25zdHJ1Y3RvcihzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgICB0aGlzLmJsb2NrID0gbmV3IFRlbXBsYXRlQmxvY2soc3ltYm9scyk7XG4gIH1cblxuICB0b0pTT04oKTogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2sge1xuICAgIHJldHVybiB0aGlzLmJsb2NrLnRvSlNPTigpO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEluVmFyaWFibGUgPSBudW1iZXI7XG5leHBvcnQgdHlwZSBJbk9wPEsgZXh0ZW5kcyBrZXlvZiBDb21waWxlck9wczxJblZhcmlhYmxlPiA9IE9wTmFtZT4gPSBPcDxJblZhcmlhYmxlLCBDb21waWxlck9wczxJblZhcmlhYmxlPiwgSz47XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEphdmFTY3JpcHRDb21waWxlciBpbXBsZW1lbnRzIFByb2Nlc3NvcjxDb21waWxlck9wczxudW1iZXI+LCB2b2lkLCBDb21waWxlck9wczx2b2lkPj4ge1xuICBzdGF0aWMgcHJvY2VzcyhvcGNvZGVzOiBJbk9wW10sIHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSk6IFRlbXBsYXRlIHtcbiAgICBsZXQgY29tcGlsZXIgPSBuZXcgSmF2YVNjcmlwdENvbXBpbGVyKG9wY29kZXMsIHN5bWJvbHMpO1xuICAgIHJldHVybiBjb21waWxlci5wcm9jZXNzKCk7XG4gIH1cblxuICBwcml2YXRlIHRlbXBsYXRlOiBUZW1wbGF0ZTtcbiAgcHJpdmF0ZSBibG9ja3MgPSBuZXcgU3RhY2s8QmxvY2s+KCk7XG4gIHByaXZhdGUgb3Bjb2RlczogSW5PcFtdO1xuICBwcml2YXRlIHZhbHVlczogU3RhY2tWYWx1ZVtdID0gW107XG5cbiAgY29uc3RydWN0b3Iob3Bjb2RlczogSW5PcFtdLCBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgICB0aGlzLm9wY29kZXMgPSBvcGNvZGVzO1xuICAgIHRoaXMudGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUoc3ltYm9scyk7XG4gIH1cblxuICBnZXQgY3VycmVudEJsb2NrKCk6IEJsb2NrIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuYmxvY2tzLmN1cnJlbnQsICdFeHBlY3RlZCBhIGJsb2NrIG9uIHRoZSBzdGFjaycpO1xuICB9XG5cbiAgcHJvY2VzcygpOiBUZW1wbGF0ZSB7XG4gICAgdGhpcy5vcGNvZGVzLmZvckVhY2gob3AgPT4ge1xuICAgICAgbGV0IG9wY29kZSA9IG9wWzBdO1xuICAgICAgbGV0IGFyZyA9IG9wWzFdO1xuXG4gICAgICBpZiAoIXRoaXNbb3Bjb2RlXSkgeyB0aHJvdyBuZXcgRXJyb3IoYHVuaW1wbGVtZW50ZWQgJHtvcGNvZGV9IG9uIEphdmFTY3JpcHRDb21waWxlcmApOyB9XG4gICAgICAodGhpc1tvcGNvZGVdIGFzIGFueSkoYXJnKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlO1xuICB9XG5cbiAgLy8vIE5lc3RpbmdcblxuICBzdGFydEJsb2NrKHByb2dyYW06IEFTVC5Qcm9ncmFtKSB7XG4gICAgbGV0IGJsb2NrOiBCbG9jayA9IG5ldyBJbmxpbmVCbG9jayhwcm9ncmFtWydzeW1ib2xzJ10pO1xuICAgIHRoaXMuYmxvY2tzLnB1c2goYmxvY2spO1xuICB9XG5cbiAgZW5kQmxvY2soKSB7XG4gICAgbGV0IHsgdGVtcGxhdGUsIGJsb2NrcyB9ID0gdGhpcztcbiAgICBsZXQgYmxvY2sgPSBibG9ja3MucG9wKCkgYXMgSW5saW5lQmxvY2s7XG4gICAgdGVtcGxhdGUuYmxvY2suYmxvY2tzLnB1c2goYmxvY2sudG9KU09OKCkpO1xuICB9XG5cbiAgc3RhcnRQcm9ncmFtKCkge1xuICAgIHRoaXMuYmxvY2tzLnB1c2godGhpcy50ZW1wbGF0ZS5ibG9jayk7XG4gIH1cblxuICBlbmRQcm9ncmFtKCkge1xuXG4gIH1cblxuICAvLy8gU3RhdGVtZW50c1xuXG4gIHRleHQoY29udGVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuVGV4dCwgY29udGVudF0pO1xuICB9XG5cbiAgYXBwZW5kKHRydXN0ZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnB1c2goW09wcy5BcHBlbmQsIHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKSwgdHJ1c3RlZF0pO1xuICB9XG5cbiAgY29tbWVudCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuQ29tbWVudCwgdmFsdWVdKTtcbiAgfVxuXG4gIG1vZGlmaWVyKG5hbWU6IHN0cmluZykge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICBsZXQgaGFzaCA9IHRoaXMucG9wVmFsdWU8SGFzaD4oKTtcblxuICAgIHRoaXMucHVzaChbT3BzLk1vZGlmaWVyLCBuYW1lLCBwYXJhbXMsIGhhc2hdKTtcbiAgfVxuXG4gIGJsb2NrKFtuYW1lLCB0ZW1wbGF0ZSwgaW52ZXJzZV06IFtzdHJpbmcsIG51bWJlciwgbnVtYmVyXSkge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICBsZXQgaGFzaCA9IHRoaXMucG9wVmFsdWU8SGFzaD4oKTtcblxuICAgIGxldCBibG9ja3MgPSB0aGlzLnRlbXBsYXRlLmJsb2NrLmJsb2NrcztcbiAgICBhc3NlcnQodHlwZW9mIHRlbXBsYXRlICE9PSAnbnVtYmVyJyB8fCBibG9ja3NbdGVtcGxhdGVdICE9PSBudWxsLCAnbWlzc2luZyBibG9jayBpbiB0aGUgY29tcGlsZXInKTtcbiAgICBhc3NlcnQodHlwZW9mIGludmVyc2UgIT09ICdudW1iZXInIHx8IGJsb2Nrc1tpbnZlcnNlXSAhPT0gbnVsbCwgJ21pc3NpbmcgYmxvY2sgaW4gdGhlIGNvbXBpbGVyJyk7XG5cbiAgICB0aGlzLnB1c2goW09wcy5CbG9jaywgbmFtZSwgcGFyYW1zLCBoYXNoLCBibG9ja3NbdGVtcGxhdGVdLCBibG9ja3NbaW52ZXJzZV1dKTtcbiAgfVxuXG4gIG9wZW5TcGxhdHRlZEVsZW1lbnQoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IHRhZyA9IGVsZW1lbnQudGFnO1xuXG4gICAgaWYgKGlzQ29tcG9uZW50KHRhZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcGlsZSBFcnJvcjogLi4uYXR0cmlidXRlcyBjYW4gb25seSBiZSB1c2VkIGluIGFuIGVsZW1lbnRgKTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYmxvY2tQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21waWxlIEVycm9yOiA8JHtlbGVtZW50LnRhZ30+IGlzIG5vdCBhIGNvbXBvbmVudCBhbmQgZG9lc24ndCBzdXBwb3J0IGJsb2NrIHBhcmFtZXRlcnNgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKFtPcHMuT3BlblNwbGF0dGVkRWxlbWVudCwgdGFnXSk7XG4gICAgfVxuICB9XG5cbiAgb3BlbkVsZW1lbnQoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IHRhZyA9IGVsZW1lbnQudGFnO1xuXG4gICAgaWYgKGlzQ29tcG9uZW50KHRhZykpIHtcbiAgICAgIHRoaXMuc3RhcnRDb21wb25lbnQoZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50LmJsb2NrUGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcGlsZSBFcnJvcjogPCR7ZWxlbWVudC50YWd9PiBpcyBub3QgYSBjb21wb25lbnQgYW5kIGRvZXNuJ3Qgc3VwcG9ydCBibG9jayBwYXJhbWV0ZXJzYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaChbT3BzLk9wZW5FbGVtZW50LCB0YWddKTtcbiAgICB9XG4gIH1cblxuICBmbHVzaEVsZW1lbnQoKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuRmx1c2hFbGVtZW50XSk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IHRhZyA9IGVsZW1lbnQudGFnO1xuXG4gICAgaWYgKGlzQ29tcG9uZW50KHRhZykpIHtcbiAgICAgIGxldCBbYXR0cnMsIGFyZ3MsIGJsb2NrXSA9IHRoaXMuZW5kQ29tcG9uZW50KCk7XG4gICAgICB0aGlzLnB1c2goW09wcy5Db21wb25lbnQsIHRhZywgYXR0cnMsIGFyZ3MsIGJsb2NrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaChbT3BzLkNsb3NlRWxlbWVudF0pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpY0F0dHIoW25hbWUsIG5hbWVzcGFjZV06IFtzdHJpbmcsIHN0cmluZ10pIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuU3RhdGljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgZHluYW1pY0F0dHIoW25hbWUsIG5hbWVzcGFjZV06IFtzdHJpbmcsIHN0cmluZ10pIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuRHluYW1pY0F0dHIsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2VdKTtcbiAgfVxuXG4gIHRydXN0aW5nQXR0cihbbmFtZSwgbmFtZXNwYWNlXTogW3N0cmluZywgc3RyaW5nXSkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5UcnVzdGluZ0F0dHIsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2VdKTtcbiAgfVxuXG4gIHN0YXRpY0FyZyhuYW1lOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuU3RhdGljQXJnLCBuYW1lLCB2YWx1ZV0pO1xuICB9XG5cbiAgZHluYW1pY0FyZyhuYW1lOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuRHluYW1pY0FyZywgbmFtZSwgdmFsdWVdKTtcbiAgfVxuXG4gIHlpZWxkKHRvOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuWWllbGQsIHRvLCBwYXJhbXNdKTtcbiAgfVxuXG4gIGF0dHJTcGxhdCh0bzogbnVtYmVyKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuQXR0clNwbGF0LCB0b10pO1xuICB9XG5cbiAgZGVidWdnZXIoZXZhbEluZm86IENvcmUuRXZhbEluZm8pIHtcbiAgICB0aGlzLnB1c2goW09wcy5EZWJ1Z2dlciwgZXZhbEluZm9dKTtcbiAgICB0aGlzLnRlbXBsYXRlLmJsb2NrLmhhc0V2YWwgPSB0cnVlO1xuICB9XG5cbiAgaGFzQmxvY2sobmFtZTogbnVtYmVyKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuSGFzQmxvY2s+KFtPcHMuSGFzQmxvY2ssIG5hbWVdKTtcbiAgfVxuXG4gIGhhc0Jsb2NrUGFyYW1zKG5hbWU6IG51bWJlcikge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkhhc0Jsb2NrUGFyYW1zPihbT3BzLkhhc0Jsb2NrUGFyYW1zLCBuYW1lXSk7XG4gIH1cblxuICBwYXJ0aWFsKGV2YWxJbmZvOiBDb3JlLkV2YWxJbmZvKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIHRoaXMucHVzaChbT3BzLlBhcnRpYWwsIHBhcmFtc1swXSwgZXZhbEluZm9dKTtcbiAgICB0aGlzLnRlbXBsYXRlLmJsb2NrLmhhc0V2YWwgPSB0cnVlO1xuICB9XG5cbiAgLy8vIEV4cHJlc3Npb25zXG5cbiAgbGl0ZXJhbCh2YWx1ZTogRXhwcmVzc2lvbnMuVmFsdWUgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuVW5kZWZpbmVkPihbT3BzLlVuZGVmaW5lZF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5WYWx1ZT4odmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHVua25vd24obmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuVW5rbm93bj4oW09wcy5Vbmtub3duLCBuYW1lXSk7XG4gIH1cblxuICBnZXQoW2hlYWQsIHBhdGhdOiBbbnVtYmVyLCBzdHJpbmdbXV0pIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5HZXQ+KFtPcHMuR2V0LCBoZWFkLCBwYXRoXSk7XG4gIH1cblxuICBtYXliZUxvY2FsKHBhdGg6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuTWF5YmVMb2NhbD4oW09wcy5NYXliZUxvY2FsLCBwYXRoXSk7XG4gIH1cblxuICBjb25jYXQoKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuQ29uY2F0PihbT3BzLkNvbmNhdCwgdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCldKTtcbiAgfVxuXG4gIGhlbHBlcihuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IZWxwZXI+KFtPcHMuSGVscGVyLCBuYW1lLCBwYXJhbXMsIGhhc2hdKTtcbiAgfVxuXG4gIC8vLyBTdGFjayBNYW5hZ2VtZW50IE9wY29kZXNcblxuICBzdGFydENvbXBvbmVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudEJsb2NrKGVsZW1lbnRbJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChjb21wb25lbnQpO1xuICB9XG5cbiAgZW5kQ29tcG9uZW50KCk6IFtTdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBDb3JlLkhhc2gsIE9wdGlvbjxTZXJpYWxpemVkSW5saW5lQmxvY2s+XSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuYmxvY2tzLnBvcCgpO1xuICAgIGFzc2VydChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRCbG9jaywgXCJDb21waWxlciBidWc6IGVuZENvbXBvbmVudCgpIHNob3VsZCBlbmQgYSBjb21wb25lbnRcIik7XG4gICAgcmV0dXJuIChjb21wb25lbnQgYXMgQ29tcG9uZW50QmxvY2spLnRvSlNPTigpO1xuICB9XG5cbiAgcHJlcGFyZUFycmF5KHNpemU6IG51bWJlcikge1xuICAgIGxldCB2YWx1ZXM6IEV4cHJlc3Npb25bXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIHZhbHVlcy5wdXNoKHRoaXMucG9wVmFsdWUoKSBhcyBFeHByZXNzaW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxQYXJhbXM+KHZhbHVlcyk7XG4gIH1cblxuICBwcmVwYXJlT2JqZWN0KHNpemU6IG51bWJlcikge1xuICAgIGFzc2VydCh0aGlzLnZhbHVlcy5sZW5ndGggPj0gc2l6ZSwgYEV4cGVjdGVkICR7c2l6ZX0gdmFsdWVzIG9uIHRoZSBzdGFjaywgZm91bmQgJHt0aGlzLnZhbHVlcy5sZW5ndGh9YCk7XG5cbiAgICBsZXQga2V5czogc3RyaW5nW10gPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgbGV0IHZhbHVlczogRXhwcmVzc2lvbltdID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIGtleXNbaV0gPSB0aGlzLnBvcFZhbHVlPHN0cj4oKTtcbiAgICAgIHZhbHVlc1tpXSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxIYXNoPihba2V5cywgdmFsdWVzXSk7XG4gIH1cblxuICAvLy8gVXRpbGl0aWVzXG5cbiAgcHVzaChhcmdzOiBTdGF0ZW1lbnQpIHtcbiAgICB3aGlsZSAoYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSBudWxsKSB7XG4gICAgICBhcmdzLnBvcCgpO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsb2NrLnB1c2goYXJncyk7XG4gIH1cblxuICBwdXNoVmFsdWU8UyBleHRlbmRzIEV4cHJlc3Npb24gfCBQYXJhbXMgfCBIYXNoPih2YWw6IFMpIHtcbiAgICB0aGlzLnZhbHVlcy5wdXNoKHZhbCk7XG4gIH1cblxuICBwb3BWYWx1ZTxUIGV4dGVuZHMgU3RhY2tWYWx1ZT4oKTogVCB7XG4gICAgYXNzZXJ0KHRoaXMudmFsdWVzLmxlbmd0aCwgXCJObyBleHByZXNzaW9uIGZvdW5kIG9uIHN0YWNrXCIpO1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5wb3AoKSBhcyBUO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ29tcG9uZW50KHRhZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGxldCBvcGVuID0gdGFnLmNoYXJBdCgwKTtcblxuICByZXR1cm4gb3BlbiA9PT0gb3Blbi50b1VwcGVyQ2FzZSgpO1xufVxuIl19

@@ -100,3 +100,3 @@ "use strict";

if (!named) {
named = this.named[name] = this.allocate('@' + name);
named = this.named[name] = this.allocate(name);
}

@@ -419,2 +419,2 @@ return named;

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi90ZW1wbGF0ZS12aXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQSxBQUFPLEFBQWdCLEFBQUksQUFBRSxBQUFXLEFBQUUsQUFBTSxBQUFFLEFBQU0sQUFBZSxBQUFDLEFBRXhFLEFBQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQ0osQUFBTTs7Ozs7Z0JBQUMsQUFBRyxxQkFDUixBQUFNO2VBQUMsSUFBSSxBQUFrQixBQUFFLEFBQUMsQUFDbEMsQUFBQyxBQVlELEFBQUs7OztpREFBQyxBQUFnQixRQUNwQjs7O1lBQUksQUFBTyxpQkFBVSxBQUFHLG9CQUFDLEFBQUk7bUJBQUksQUFBSSxNQUFDLEFBQVEsU0FBQyxBQUFJLEFBQUMsQUFBQyxBQUFDLEFBQ3RELEFBQU07QUFEUSxBQUFNO2VBQ2IsSUFBSSxBQUFnQixpQkFBQyxBQUFJLE1BQUUsQUFBTSxRQUFFLEFBQU8sQUFBQyxBQUFDLEFBQ3JELEFBQUMsQUFDRjs7OztBQUVELEFBQU07SUFBMEI7Ozs7OzsrRUFDdkI7O2VBQU8sVUFBYSxBQUFFLEFBQUMsQUFFdEI7ZUFBSSxPQUFHLEFBQUMsQUFBQyxBQUNUO2VBQUssUUFBRyxBQUFJLEFBQVUsQUFBQyxBQUN2QjtlQUFNLFNBQUcsQUFBSSxBQUFVLEFBQUMsQUEwQ2xDLEFBQUM7ZUF4Q0MsQUFBRzs7O29EQUFDLEFBQWEsT0FDZixBQUFNO2VBQUMsQUFBSyxBQUFDLEFBQ2YsQUFBQyxBQUVELEFBQUc7OztvREFBQyxBQUFhLE9BQ2Y7Y0FBTSxBQUFXLEFBQUUsQUFBQyxBQUN0QixBQUFDLEFBRUQsQUFBWTs7O3dFQUNWLEFBQU07ZUFBQyxBQUFFLEFBQUMsQUFDWixBQUFDLEFBRUQsQUFBVzs7O3NFQUNULEFBQU07ZUFBQyxBQUFF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QUMsQUFBQyxBQUNOLEFBQUssQUFBRSxBQUFDLEFBQ1YsQUFBQztBQUVELEFBQUUsQUFBQzs7WUFBQyxBQUFJLFNBQUssQUFBTyxBQUFDLFNBQUMsQUFBQyxBQUNyQixBQUFNO21CQUFDLEFBQUssQUFBQyxBQUNmLEFBQUMsQUFDSCxBQUFDO0FBRUQsQUFBTTs7V0FBQyxDQUFDLEFBQUMsQUFBQyxBQUNaLEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgQ29yZSB9IGZyb20gJ0BnbGltbWVyL3dpcmUtZm9ybWF0JztcbmltcG9ydCB7IERpY3QsIE9wdGlvbiwgZGljdCwgdW5yZWFjaGFibGUsIGV4cGVjdCB9IGZyb20gJ0BnbGltbWVyL3V0aWwnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3ltYm9sVGFibGUge1xuICBzdGF0aWMgdG9wKCk6IFByb2dyYW1TeW1ib2xUYWJsZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9ncmFtU3ltYm9sVGFibGUoKTtcbiAgfVxuXG4gIGFic3RyYWN0IGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuICBhYnN0cmFjdCBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj47XG4gIGFic3RyYWN0IGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm87XG5cbiAgYWJzdHJhY3QgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIGFic3RyYWN0IGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBhYnN0cmFjdCBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgY2hpbGQobG9jYWxzOiBzdHJpbmdbXSk6IEJsb2NrU3ltYm9sVGFibGUge1xuICAgIGxldCBzeW1ib2xzID0gbG9jYWxzLm1hcChuYW1lID0+IHRoaXMuYWxsb2NhdGUobmFtZSkpO1xuICAgIHJldHVybiBuZXcgQmxvY2tTeW1ib2xUYWJsZSh0aGlzLCBsb2NhbHMsIHN5bWJvbHMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9ncmFtU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gIHB1YmxpYyBzeW1ib2xzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByaXZhdGUgc2l6ZSA9IDE7XG4gIHByaXZhdGUgbmFtZWQgPSBkaWN0PG51bWJlcj4oKTtcbiAgcHJpdmF0ZSBibG9ja3MgPSBkaWN0PG51bWJlcj4oKTtcblxuICBoYXMoX25hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldChfbmFtZTogc3RyaW5nKTogbmV2ZXIge1xuICAgIHRocm93IHVucmVhY2hhYmxlKCk7XG4gIH1cblxuICBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBnZXRFdmFsSW5mbygpOiBDb3JlLkV2YWxJbmZvIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IG5hbWVkID0gdGhpcy5uYW1lZFtuYW1lXTtcblxuICAgIGlmICghbmFtZWQpIHtcbiAgICAgIG5hbWVkID0gdGhpcy5uYW1lZFtuYW1lXSA9IHRoaXMuYWxsb2NhdGUoYEAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hbWVkO1xuICB9XG5cbiAgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBibG9jayA9IHRoaXMuYmxvY2tzW25hbWVdO1xuXG4gICAgaWYgKCFibG9jaykge1xuICAgICAgYmxvY2sgPSB0aGlzLmJsb2Nrc1tuYW1lXSA9IHRoaXMuYWxsb2NhdGUoYCYke25hbWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJsb2NrO1xuICB9XG5cbiAgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICB0aGlzLnN5bWJvbHMucHVzaChpZGVudGlmaWVyKTtcbiAgICByZXR1cm4gdGhpcy5zaXplKys7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJsb2NrU3ltYm9sVGFibGUgZXh0ZW5kcyBTeW1ib2xUYWJsZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyZW50OiBTeW1ib2xUYWJsZSwgcHVibGljIHN5bWJvbHM6IHN0cmluZ1tdLCBwdWJsaWMgc2xvdHM6IG51bWJlcltdKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGhhcyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuc3ltYm9scy5pbmRleE9mKG5hbWUpICE9PSAtMSkgfHwgdGhpcy5wYXJlbnQuaGFzKG5hbWUpO1xuICB9XG5cbiAgZ2V0KG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IHNsb3QgPSB0aGlzLnN5bWJvbHMuaW5kZXhPZihuYW1lKTtcbiAgICByZXR1cm4gc2xvdCA9PT0gLTEgPyB0aGlzLnBhcmVudC5nZXQobmFtZSkgOiB0aGlzLnNsb3RzW3Nsb3RdO1xuICB9XG5cbiAgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPiB7XG4gICAgbGV0IGRpY3QgPSB0aGlzLnBhcmVudC5nZXRMb2NhbHNNYXAoKTtcbiAgICB0aGlzLnN5bWJvbHMuZm9yRWFjaChzeW1ib2wgPT4gZGljdFtzeW1ib2xdID0gdGhpcy5nZXQoc3ltYm9sKSk7XG4gICAgcmV0dXJuIGRpY3Q7XG4gIH1cblxuICBnZXRFdmFsSW5mbygpOiBDb3JlLkV2YWxJbmZvIHtcbiAgICBsZXQgbG9jYWxzID0gdGhpcy5nZXRMb2NhbHNNYXAoKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobG9jYWxzKS5tYXAoc3ltYm9sID0+IGxvY2Fsc1tzeW1ib2xdKTtcbiAgfVxuXG4gIGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGVOYW1lZChuYW1lKTtcbiAgfVxuXG4gIGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGVCbG9jayhuYW1lKTtcbiAgfVxuXG4gIGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlKGlkZW50aWZpZXIpO1xuICB9XG59XG5cbi8qKlxuICogVGFrZXMgaW4gYW4gQVNUIGFuZCBvdXRwdXRzIGEgbGlzdCBvZiBhY3Rpb25zIHRvIGJlIGNvbnN1bWVkXG4gKiBieSBhIGNvbXBpbGVyLiBGb3IgZXhhbXBsZSwgdGhlIHRlbXBsYXRlXG4gKlxuICogICAgIGZvb3t7YmFyfX08ZGl2PmJhejwvZGl2PlxuICpcbiAqIHByb2R1Y2VzIHRoZSBhY3Rpb25zXG4gKlxuICogICAgIFtbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDNdXSxcbiAqICAgICAgWydtdXN0YWNoZScsIFttdXN0YWNoZU5vZGUsIDEsIDNdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMiwgMywgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDIsIDNdLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXV1cbiAqXG4gKiBUaGlzIHZpc2l0b3Igd2Fsa3MgdGhlIEFTVCBkZXB0aCBmaXJzdCBhbmQgYmFja3dhcmRzLiBBc1xuICogYSByZXN1bHQgdGhlIGJvdHRvbS1tb3N0IGNoaWxkIHRlbXBsYXRlIHdpbGwgYXBwZWFyIGF0IHRoZVxuICogdG9wIG9mIHRoZSBhY3Rpb25zIGxpc3Qgd2hlcmVhcyB0aGUgcm9vdCB0ZW1wbGF0ZSB3aWxsIGFwcGVhclxuICogYXQgdGhlIGJvdHRvbSBvZiB0aGUgbGlzdC4gRm9yIGV4YW1wbGUsXG4gKlxuICogICAgIDxkaXY+e3sjaWZ9fWZvb3t7ZWxzZX19YmFyPGI+PC9iPnt7L2lmfX08L2Rpdj5cbiAqXG4gKiBwcm9kdWNlcyB0aGUgYWN0aW9uc1xuICpcbiAqICAgICBbWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAyLCAwXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDEsIDIsIDBdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDEsIDJdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV0sXG4gKiAgICAgIFsnc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXSxcbiAqICAgICAgWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDJdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMCwgMSwgMV1dLFxuICogICAgICBbJ2Jsb2NrJywgW2Jsb2NrTm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXV1cbiAqXG4gKiBUaGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbCBpcyBtYWludGFpbmVkIGJ5IGEgc3RhY2sgb2YgZnJhbWVzLlxuICogV2hlbmV2ZXIgYSBub2RlIHdpdGggY2hpbGRyZW4gaXMgZW50ZXJlZCAoZWl0aGVyIGEgUHJvZ3JhbU5vZGVcbiAqIG9yIGFuIEVsZW1lbnROb2RlKSBhIGZyYW1lIGlzIHB1c2hlZCBvbnRvIHRoZSBzdGFjay4gVGhlIGZyYW1lXG4gKiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbCBvZiB0aGF0XG4gKiBub2RlLiBGb3IgZXhhbXBsZSxcbiAqXG4gKiAgIC0gaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hpbGQgbm9kZSBiZWluZyB2aXNpdGVkXG4gKiAgIC0gdGhlIG51bWJlciBvZiBtdXN0YWNoZXMgY29udGFpbmVkIHdpdGhpbiBpdHMgY2hpbGQgbm9kZXNcbiAqICAgLSB0aGUgbGlzdCBvZiBhY3Rpb25zIGdlbmVyYXRlZCBieSBpdHMgY2hpbGQgbm9kZXNcbiAqL1xuXG5jbGFzcyBGcmFtZSB7XG4gIHB1YmxpYyBwYXJlbnROb2RlOiBPcHRpb248T2JqZWN0PiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZHJlbjogT3B0aW9uPEFTVC5Ob2RlW10+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkSW5kZXg6IE9wdGlvbjxudW1iZXI+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkQ291bnQ6IE9wdGlvbjxudW1iZXI+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkVGVtcGxhdGVDb3VudCA9IDA7XG4gIHB1YmxpYyBtdXN0YWNoZUNvdW50ID0gMDtcbiAgcHVibGljIGFjdGlvbnM6IEFjdGlvbltdID0gW107XG4gIHB1YmxpYyBibGFua0NoaWxkVGV4dE5vZGVzOiBPcHRpb248bnVtYmVyW10+ID0gbnVsbDtcbiAgcHVibGljIHN5bWJvbHM6IE9wdGlvbjxTeW1ib2xUYWJsZT4gPSBudWxsO1xufVxuXG5leHBvcnQgbmFtZXNwYWNlIEFjdGlvbiB7XG4gIGV4cG9ydCB0eXBlIFN0YXJ0UHJvZ3JhbSA9IFsnc3RhcnRQcm9ncmFtJywgW0FTVC5Qcm9ncmFtLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIEVuZFByb2dyYW0gPSBbJ2VuZFByb2dyYW0nLCBbQVNULlByb2dyYW0sIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBTdGFydEJsb2NrID0gWydzdGFydEJsb2NrJywgW0FTVC5Qcm9ncmFtLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIEVuZEJsb2NrID0gWydlbmRCbG9jaycsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIEJsb2NrID0gWydibG9jaycsIFtBU1QuQmxvY2tTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIE11c3RhY2hlID0gWydtdXN0YWNoZScsIFtBU1QuTXVzdGFjaGVTdGF0ZW1lbnQgfCBBU1QuUGFydGlhbFN0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgT3BlbkVsZW1lbnQgPSBbJ29wZW5FbGVtZW50JywgW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgQ2xvc2VFbGVtZW50ID0gWydjbG9zZUVsZW1lbnQnLCBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBUZXh0ID0gWyd0ZXh0JywgW0FTVC5UZXh0Tm9kZSwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgQ29tbWVudCA9IFsnY29tbWVudCcsIFtBU1QuQ29tbWVudFN0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcblxuICBleHBvcnQgdHlwZSBBY3Rpb24gPVxuICAgICAgU3RhcnRQcm9ncmFtXG4gICAgfCBFbmRQcm9ncmFtXG4gICAgfCBTdGFydEJsb2NrXG4gICAgfCBFbmRCbG9ja1xuICAgIHwgQmxvY2tcbiAgICB8IE11c3RhY2hlXG4gICAgfCBPcGVuRWxlbWVudFxuICAgIHwgQ2xvc2VFbGVtZW50XG4gICAgfCBUZXh0XG4gICAgfCBDb21tZW50XG4gICAgO1xufVxuXG5leHBvcnQgdHlwZSBBY3Rpb24gPSBBY3Rpb24uQWN0aW9uO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZVZpc2l0b3Ige1xuICBwcml2YXRlIGZyYW1lU3RhY2s6IEZyYW1lW10gPSBbXTtcbiAgcHVibGljIGFjdGlvbnM6IEFjdGlvbltdID0gW107XG4gIHByaXZhdGUgcHJvZ3JhbURlcHRoID0gLTE7XG5cbiAgdmlzaXQobm9kZTogQVNULkJhc2VOb2RlKSB7XG4gICAgdGhpc1tub2RlLnR5cGVdKG5vZGUpO1xuICB9XG5cbiAgLy8gVHJhdmVyc2FsIG1ldGhvZHNcblxuICBQcm9ncmFtKHByb2dyYW06IEFTVC5Qcm9ncmFtKSB7XG4gICAgdGhpcy5wcm9ncmFtRGVwdGgrKztcblxuICAgIGxldCBwYXJlbnRGcmFtZSA9IHRoaXMuZ2V0Q3VycmVudEZyYW1lKCk7XG4gICAgbGV0IHByb2dyYW1GcmFtZSA9IHRoaXMucHVzaEZyYW1lKCk7XG5cbiAgICBpZiAoIXBhcmVudEZyYW1lKSB7XG4gICAgICBwcm9ncmFtWydzeW1ib2xzJ10gPSBTeW1ib2xUYWJsZS50b3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZ3JhbVsnc3ltYm9scyddID0gcGFyZW50RnJhbWUuc3ltYm9scyEuY2hpbGQocHJvZ3JhbS5ibG9ja1BhcmFtcyk7XG4gICAgfVxuXG4gICAgbGV0IHN0YXJ0VHlwZTogc3RyaW5nLCBlbmRUeXBlOiBzdHJpbmc7XG5cbiAgICBpZiAodGhpcy5wcm9ncmFtRGVwdGggPT09IDApIHtcbiAgICAgIHN0YXJ0VHlwZSA9ICdzdGFydFByb2dyYW0nO1xuICAgICAgZW5kVHlwZSA9ICdlbmRQcm9ncmFtJztcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRUeXBlID0gJ3N0YXJ0QmxvY2snO1xuICAgICAgZW5kVHlwZSA9ICdlbmRCbG9jayc7XG4gICAgfVxuXG4gICAgcHJvZ3JhbUZyYW1lLnBhcmVudE5vZGUgPSBwcm9ncmFtO1xuICAgIHByb2dyYW1GcmFtZS5jaGlsZHJlbiA9IHByb2dyYW0uYm9keTtcbiAgICBwcm9ncmFtRnJhbWUuY2hpbGRDb3VudCA9IHByb2dyYW0uYm9keS5sZW5ndGg7XG4gICAgcHJvZ3JhbUZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMgPSBbXTtcbiAgICBwcm9ncmFtRnJhbWUuYWN0aW9ucy5wdXNoKFtlbmRUeXBlLCBbcHJvZ3JhbSwgdGhpcy5wcm9ncmFtRGVwdGhdXSBhcyBBY3Rpb24pO1xuICAgIHByb2dyYW1GcmFtZS5zeW1ib2xzID0gcHJvZ3JhbVsnc3ltYm9scyddO1xuXG4gICAgZm9yIChsZXQgaSA9IHByb2dyYW0uYm9keS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgcHJvZ3JhbUZyYW1lLmNoaWxkSW5kZXggPSBpO1xuICAgICAgdGhpcy52aXNpdChwcm9ncmFtLmJvZHlbaV0pO1xuICAgIH1cblxuICAgIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW3N0YXJ0VHlwZSwgW1xuICAgICAgcHJvZ3JhbSwgcHJvZ3JhbUZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCxcbiAgICAgIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKVxuICAgIF1dIGFzIEFjdGlvbik7XG4gICAgdGhpcy5wb3BGcmFtZSgpO1xuXG4gICAgdGhpcy5wcm9ncmFtRGVwdGgtLTtcblxuICAgIC8vIFB1c2ggdGhlIGNvbXBsZXRlZCB0ZW1wbGF0ZSBpbnRvIHRoZSBnbG9iYWwgYWN0aW9ucyBsaXN0XG4gICAgaWYgKHBhcmVudEZyYW1lKSB7IHBhcmVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCsrOyB9XG4gICAgdGhpcy5hY3Rpb25zLnB1c2goLi4ucHJvZ3JhbUZyYW1lLmFjdGlvbnMucmV2ZXJzZSgpKTtcbiAgfVxuXG4gIEVsZW1lbnROb2RlKGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCBwYXJlbnRGcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGxldCBlbGVtZW50RnJhbWUgPSB0aGlzLnB1c2hGcmFtZSgpO1xuXG4gICAgZWxlbWVudEZyYW1lLnBhcmVudE5vZGUgPSBlbGVtZW50O1xuICAgIGVsZW1lbnRGcmFtZS5jaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgZWxlbWVudEZyYW1lLmNoaWxkQ291bnQgPSBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aDtcbiAgICBlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCArPSBlbGVtZW50Lm1vZGlmaWVycy5sZW5ndGg7XG4gICAgZWxlbWVudEZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMgPSBbXTtcbiAgICBlbGVtZW50RnJhbWUuc3ltYm9scyA9IGVsZW1lbnRbJ3N5bWJvbHMnXSA9IHBhcmVudEZyYW1lLnN5bWJvbHMhLmNoaWxkKGVsZW1lbnQuYmxvY2tQYXJhbXMpO1xuXG4gICAgbGV0IGFjdGlvbkFyZ3M6IFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyXSA9IFtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwYXJlbnRGcmFtZS5jaGlsZEluZGV4ISxcbiAgICAgIHBhcmVudEZyYW1lLmNoaWxkQ291bnQhXG4gICAgXTtcblxuICAgIGVsZW1lbnRGcmFtZS5hY3Rpb25zLnB1c2goWydjbG9zZUVsZW1lbnQnLCBhY3Rpb25BcmdzXSk7XG5cbiAgICBmb3IgKGxldCBpID0gZWxlbWVudC5hdHRyaWJ1dGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB0aGlzLnZpc2l0KGVsZW1lbnQuYXR0cmlidXRlc1tpXSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGVsZW1lbnRGcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICAgIHRoaXMudmlzaXQoZWxlbWVudC5jaGlsZHJlbltpXSk7XG4gICAgfVxuXG4gICAgbGV0IG9wZW4gPSBbJ29wZW5FbGVtZW50JywgWy4uLmFjdGlvbkFyZ3MsIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50LCBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5yZXZlcnNlKCldXSBhcyBBY3Rpb24uT3BlbkVsZW1lbnQ7XG4gICAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChvcGVuKTtcblxuICAgIHRoaXMucG9wRnJhbWUoKTtcblxuICAgIC8vIFByb3BhZ2F0ZSB0aGUgZWxlbWVudCdzIGZyYW1lIHN0YXRlIHRvIHRoZSBwYXJlbnQgZnJhbWVcbiAgICBpZiAoZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQgPiAwKSB7IHBhcmVudEZyYW1lLm11c3RhY2hlQ291bnQrKzsgfVxuICAgIHBhcmVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudCArPSBlbGVtZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50O1xuICAgIHBhcmVudEZyYW1lLmFjdGlvbnMucHVzaCguLi5lbGVtZW50RnJhbWUuYWN0aW9ucyk7XG4gIH1cblxuICBBdHRyTm9kZShhdHRyOiBBU1QuQXR0ck5vZGUpIHtcbiAgICBpZiAoYXR0ci52YWx1ZS50eXBlICE9PSAnVGV4dE5vZGUnKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgfVxuICB9O1xuXG4gIFRleHROb2RlKHRleHQ6IEFTVC5UZXh0Tm9kZSkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGlmICh0ZXh0LmNoYXJzID09PSAnJykge1xuICAgICAgZnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyEucHVzaChkb21JbmRleE9mKGZyYW1lLmNoaWxkcmVuISwgdGV4dCkpO1xuICAgIH1cbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWyd0ZXh0JywgW3RleHQsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIEJsb2NrU3RhdGVtZW50KG5vZGU6IEFTVC5CbG9ja1N0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuXG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ2Jsb2NrJywgW25vZGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuXG4gICAgaWYgKG5vZGUuaW52ZXJzZSkgeyB0aGlzLnZpc2l0KG5vZGUuaW52ZXJzZSk7IH1cbiAgICBpZiAobm9kZS5wcm9ncmFtKSB7IHRoaXMudmlzaXQobm9kZS5wcm9ncmFtKTsgfVxuICB9O1xuXG4gIFBhcnRpYWxTdGF0ZW1lbnQobm9kZTogQVNULlBhcnRpYWxTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgQ29tbWVudFN0YXRlbWVudCh0ZXh0OiBBU1QuQ29tbWVudFN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ2NvbW1lbnQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgTXVzdGFjaGVDb21tZW50U3RhdGVtZW50KCkge1xuICAgIC8vIEludGVudGlvbmFsIGVtcHR5OiBIYW5kbGViYXJzIGNvbW1lbnRzIHNob3VsZCBub3QgYWZmZWN0IG91dHB1dC5cbiAgfTtcblxuICBNdXN0YWNoZVN0YXRlbWVudChtdXN0YWNoZTogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ211c3RhY2hlJywgW211c3RhY2hlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICAvLyBGcmFtZSBoZWxwZXJzXG5cbiAgcHJpdmF0ZSBnZXQgY3VycmVudEZyYW1lKCk6IEZyYW1lIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuZ2V0Q3VycmVudEZyYW1lKCksIFwiRXhwZWN0ZWQgYSBjdXJyZW50IGZyYW1lXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50RnJhbWUoKTogT3B0aW9uPEZyYW1lPiB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVTdGFja1t0aGlzLmZyYW1lU3RhY2subGVuZ3RoIC0gMV07XG4gIH1cblxuICBwcml2YXRlIHB1c2hGcmFtZSgpIHtcbiAgICBsZXQgZnJhbWUgPSBuZXcgRnJhbWUoKTtcbiAgICB0aGlzLmZyYW1lU3RhY2sucHVzaChmcmFtZSk7XG4gICAgcmV0dXJuIGZyYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3BGcmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZVN0YWNrLnBvcCgpO1xuICB9XG59XG5cbi8vIFJldHVybnMgdGhlIGluZGV4IG9mIGBkb21Ob2RlYCBpbiB0aGUgYG5vZGVzYCBhcnJheSwgc2tpcHBpbmdcbi8vIG92ZXIgYW55IG5vZGVzIHdoaWNoIGRvIG5vdCByZXByZXNlbnQgRE9NIG5vZGVzLlxuZnVuY3Rpb24gZG9tSW5kZXhPZihub2RlczogQVNULk5vZGVbXSwgZG9tTm9kZTogQVNULlRleHROb2RlIHwgQVNULkVsZW1lbnROb2RlKSB7XG4gIGxldCBpbmRleCA9IC0xO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgbm9kZSA9IG5vZGVzW2ldO1xuXG4gICAgaWYgKG5vZGUudHlwZSAhPT0gJ1RleHROb2RlJyAmJiBub2RlLnR5cGUgIT09ICdFbGVtZW50Tm9kZScpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCsrO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSBkb21Ob2RlKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi90ZW1wbGF0ZS12aXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQSxBQUFPLEFBQWdCLEFBQUksQUFBRSxBQUFXLEFBQUUsQUFBTSxBQUFFLEFBQU0sQUFBZSxBQUFDLEFBRXhFLEFBQU07Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQ0osQUFBTTs7Ozs7Z0JBQUMsQUFBRyxxQkFDUixBQUFNO2VBQUMsSUFBSSxBQUFrQixBQUFFLEFBQUMsQUFDbEMsQUFBQyxBQVlELEFBQUs7OztpREFBQyxBQUFnQixRQUNwQjs7O1lBQUksQUFBTyxpQkFBVSxBQUFHLG9CQUFDLEFBQUk7bUJBQUksQUFBSSxNQUFDLEFBQVEsU0FBQyxBQUFJLEFBQUMsQUFBQyxBQUFDLEFBQ3RELEFBQU07QUFEUSxBQUFNO2VBQ2IsSUFBSSxBQUFnQixpQkFBQyxBQUFJLE1BQUUsQUFBTSxRQUFFLEFBQU8sQUFBQyxBQUFDLEFBQ3JELEFBQUMsQUFDRjs7OztBQUVELEFBQU07SUFBMEI7Ozs7OzsrRUFDdkI7O2VBQU8sVUFBYSxBQUFFLEFBQUMsQUFFdEI7ZUFBSSxPQUFHLEFBQUMsQUFBQyxBQUNUO2VBQUssUUFBRyxBQUFJLEFBQVUsQUFBQyxBQUN2QjtlQUFNLFNBQUcsQUFBSSxBQUFVLEFBQUMsQUEwQ2xDLEFBQUM7ZUF4Q0MsQUFBRzs7O29EQUFDLEFBQWEsT0FDZixBQUFNO2VBQUMsQUFBSyxBQUFDLEFBQ2YsQUFBQyxBQUVELEFBQUc7OztvREFBQyxBQUFhLE9BQ2Y7Y0FBTSxBQUFXLEFBQUUsQUFBQyxBQUN0QixBQUFDLEFBRUQsQUFBWTs7O3dFQUNWLEFBQU07ZUFBQyxBQUFFLEFBQUMsQUFDWixBQUFDLEFBRUQsQUFBVzs7O3NFQUNULEFBQU07ZUFBQyxBQUFF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Q04sQUFBSyxBQUFFLEFBQUMsQUFDVixBQUFDO0FBRUQsQUFBRSxBQUFDOztZQUFDLEFBQUksU0FBSyxBQUFPLEFBQUMsU0FBQyxBQUFDLEFBQ3JCLEFBQU07bUJBQUMsQUFBSyxBQUFDLEFBQ2YsQUFBQyxBQUNILEFBQUM7QUFFRCxBQUFNOztXQUFDLENBQUMsQUFBQyxBQUFDLEFBQ1osQUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFTVCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBDb3JlIH0gZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuaW1wb3J0IHsgRGljdCwgT3B0aW9uLCBkaWN0LCB1bnJlYWNoYWJsZSwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTeW1ib2xUYWJsZSB7XG4gIHN0YXRpYyB0b3AoKTogUHJvZ3JhbVN5bWJvbFRhYmxlIHtcbiAgICByZXR1cm4gbmV3IFByb2dyYW1TeW1ib2xUYWJsZSgpO1xuICB9XG5cbiAgYWJzdHJhY3QgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW47XG4gIGFic3RyYWN0IGdldChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgYWJzdHJhY3QgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPjtcbiAgYWJzdHJhY3QgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbztcblxuICBhYnN0cmFjdCBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgYWJzdHJhY3QgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIGFic3RyYWN0IGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlcjtcblxuICBjaGlsZChsb2NhbHM6IHN0cmluZ1tdKTogQmxvY2tTeW1ib2xUYWJsZSB7XG4gICAgbGV0IHN5bWJvbHMgPSBsb2NhbHMubWFwKG5hbWUgPT4gdGhpcy5hbGxvY2F0ZShuYW1lKSk7XG4gICAgcmV0dXJuIG5ldyBCbG9ja1N5bWJvbFRhYmxlKHRoaXMsIGxvY2Fscywgc3ltYm9scyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb2dyYW1TeW1ib2xUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlIHtcbiAgcHVibGljIHN5bWJvbHM6IHN0cmluZ1tdID0gW107XG5cbiAgcHJpdmF0ZSBzaXplID0gMTtcbiAgcHJpdmF0ZSBuYW1lZCA9IGRpY3Q8bnVtYmVyPigpO1xuICBwcml2YXRlIGJsb2NrcyA9IGRpY3Q8bnVtYmVyPigpO1xuXG4gIGhhcyhfbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0KF9uYW1lOiBzdHJpbmcpOiBuZXZlciB7XG4gICAgdGhyb3cgdW5yZWFjaGFibGUoKTtcbiAgfVxuXG4gIGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdO1xuXG4gICAgaWYgKCFuYW1lZCkge1xuICAgICAgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdID0gdGhpcy5hbGxvY2F0ZShuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmFtZWQ7XG4gIH1cblxuICBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV07XG5cbiAgICBpZiAoIWJsb2NrKSB7XG4gICAgICBibG9jayA9IHRoaXMuYmxvY2tzW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgJiR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmxvY2s7XG4gIH1cblxuICBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHRoaXMuc3ltYm9scy5wdXNoKGlkZW50aWZpZXIpO1xuICAgIHJldHVybiB0aGlzLnNpemUrKztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxvY2tTeW1ib2xUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJlbnQ6IFN5bWJvbFRhYmxlLCBwdWJsaWMgc3ltYm9sczogc3RyaW5nW10sIHB1YmxpYyBzbG90czogbnVtYmVyW10pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSkgIT09IC0xKSB8fCB0aGlzLnBhcmVudC5oYXMobmFtZSk7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgc2xvdCA9IHRoaXMuc3ltYm9scy5pbmRleE9mKG5hbWUpO1xuICAgIHJldHVybiBzbG90ID09PSAtMSA/IHRoaXMucGFyZW50LmdldChuYW1lKSA6IHRoaXMuc2xvdHNbc2xvdF07XG4gIH1cblxuICBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+IHtcbiAgICBsZXQgZGljdCA9IHRoaXMucGFyZW50LmdldExvY2Fsc01hcCgpO1xuICAgIHRoaXMuc3ltYm9scy5mb3JFYWNoKHN5bWJvbCA9PiBkaWN0W3N5bWJvbF0gPSB0aGlzLmdldChzeW1ib2wpKTtcbiAgICByZXR1cm4gZGljdDtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIGxldCBsb2NhbHMgPSB0aGlzLmdldExvY2Fsc01hcCgpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhsb2NhbHMpLm1hcChzeW1ib2wgPT4gbG9jYWxzW3N5bWJvbF0pO1xuICB9XG5cbiAgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZU5hbWVkKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZUJsb2NrKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGUoaWRlbnRpZmllcik7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBpbiBhbiBBU1QgYW5kIG91dHB1dHMgYSBsaXN0IG9mIGFjdGlvbnMgdG8gYmUgY29uc3VtZWRcbiAqIGJ5IGEgY29tcGlsZXIuIEZvciBleGFtcGxlLCB0aGUgdGVtcGxhdGVcbiAqXG4gKiAgICAgZm9ve3tiYXJ9fTxkaXY+YmF6PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgM11dLFxuICogICAgICBbJ211c3RhY2hlJywgW211c3RhY2hlTm9kZSwgMSwgM11dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMiwgM10sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoaXMgdmlzaXRvciB3YWxrcyB0aGUgQVNUIGRlcHRoIGZpcnN0IGFuZCBiYWNrd2FyZHMuIEFzXG4gKiBhIHJlc3VsdCB0aGUgYm90dG9tLW1vc3QgY2hpbGQgdGVtcGxhdGUgd2lsbCBhcHBlYXIgYXQgdGhlXG4gKiB0b3Agb2YgdGhlIGFjdGlvbnMgbGlzdCB3aGVyZWFzIHRoZSByb290IHRlbXBsYXRlIHdpbGwgYXBwZWFyXG4gKiBhdCB0aGUgYm90dG9tIG9mIHRoZSBsaXN0LiBGb3IgZXhhbXBsZSxcbiAqXG4gKiAgICAgPGRpdj57eyNpZn19Zm9ve3tlbHNlfX1iYXI8Yj48L2I+e3svaWZ9fTwvZGl2PlxuICpcbiAqIHByb2R1Y2VzIHRoZSBhY3Rpb25zXG4gKlxuICogICAgIFtbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDIsIDBdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMiwgMF1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMl1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXSxcbiAqICAgICAgWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMl1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxLCAxXV0sXG4gKiAgICAgIFsnYmxvY2snLCBbYmxvY2tOb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIGlzIG1haW50YWluZWQgYnkgYSBzdGFjayBvZiBmcmFtZXMuXG4gKiBXaGVuZXZlciBhIG5vZGUgd2l0aCBjaGlsZHJlbiBpcyBlbnRlcmVkIChlaXRoZXIgYSBQcm9ncmFtTm9kZVxuICogb3IgYW4gRWxlbWVudE5vZGUpIGEgZnJhbWUgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrLiBUaGUgZnJhbWVcbiAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIG9mIHRoYXRcbiAqIG5vZGUuIEZvciBleGFtcGxlLFxuICpcbiAqICAgLSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGlsZCBub2RlIGJlaW5nIHZpc2l0ZWRcbiAqICAgLSB0aGUgbnVtYmVyIG9mIG11c3RhY2hlcyBjb250YWluZWQgd2l0aGluIGl0cyBjaGlsZCBub2Rlc1xuICogICAtIHRoZSBsaXN0IG9mIGFjdGlvbnMgZ2VuZXJhdGVkIGJ5IGl0cyBjaGlsZCBub2Rlc1xuICovXG5cbmNsYXNzIEZyYW1lIHtcbiAgcHVibGljIHBhcmVudE5vZGU6IE9wdGlvbjxPYmplY3Q+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkcmVuOiBPcHRpb248QVNULk5vZGVbXT4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRJbmRleDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRDb3VudDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRUZW1wbGF0ZUNvdW50ID0gMDtcbiAgcHVibGljIG11c3RhY2hlQ291bnQgPSAwO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHVibGljIGJsYW5rQ2hpbGRUZXh0Tm9kZXM6IE9wdGlvbjxudW1iZXJbXT4gPSBudWxsO1xuICBwdWJsaWMgc3ltYm9sczogT3B0aW9uPFN5bWJvbFRhYmxlPiA9IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQWN0aW9uIHtcbiAgZXhwb3J0IHR5cGUgU3RhcnRQcm9ncmFtID0gWydzdGFydFByb2dyYW0nLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kUHJvZ3JhbSA9IFsnZW5kUHJvZ3JhbScsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFN0YXJ0QmxvY2sgPSBbJ3N0YXJ0QmxvY2snLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kQmxvY2sgPSBbJ2VuZEJsb2NrJywgW0FTVC5Qcm9ncmFtLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgQmxvY2sgPSBbJ2Jsb2NrJywgW0FTVC5CbG9ja1N0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgTXVzdGFjaGUgPSBbJ211c3RhY2hlJywgW0FTVC5NdXN0YWNoZVN0YXRlbWVudCB8IEFTVC5QYXJ0aWFsU3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBPcGVuRWxlbWVudCA9IFsnb3BlbkVsZW1lbnQnLCBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBDbG9zZUVsZW1lbnQgPSBbJ2Nsb3NlRWxlbWVudCcsIFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFRleHQgPSBbJ3RleHQnLCBbQVNULlRleHROb2RlLCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBDb21tZW50ID0gWydjb21tZW50JywgW0FTVC5Db21tZW50U3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuXG4gIGV4cG9ydCB0eXBlIEFjdGlvbiA9XG4gICAgICBTdGFydFByb2dyYW1cbiAgICB8IEVuZFByb2dyYW1cbiAgICB8IFN0YXJ0QmxvY2tcbiAgICB8IEVuZEJsb2NrXG4gICAgfCBCbG9ja1xuICAgIHwgTXVzdGFjaGVcbiAgICB8IE9wZW5FbGVtZW50XG4gICAgfCBDbG9zZUVsZW1lbnRcbiAgICB8IFRleHRcbiAgICB8IENvbW1lbnRcbiAgICA7XG59XG5cbmV4cG9ydCB0eXBlIEFjdGlvbiA9IEFjdGlvbi5BY3Rpb247XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlVmlzaXRvciB7XG4gIHByaXZhdGUgZnJhbWVTdGFjazogRnJhbWVbXSA9IFtdO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBwcm9ncmFtRGVwdGggPSAtMTtcblxuICB2aXNpdChub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICB0aGlzW25vZGUudHlwZV0obm9kZSk7XG4gIH1cblxuICAvLyBUcmF2ZXJzYWwgbWV0aG9kc1xuXG4gIFByb2dyYW0ocHJvZ3JhbTogQVNULlByb2dyYW0pIHtcbiAgICB0aGlzLnByb2dyYW1EZXB0aCsrO1xuXG4gICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5nZXRDdXJyZW50RnJhbWUoKTtcbiAgICBsZXQgcHJvZ3JhbUZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcblxuICAgIGlmICghcGFyZW50RnJhbWUpIHtcbiAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IFN5bWJvbFRhYmxlLnRvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmFtWydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzIS5jaGlsZChwcm9ncmFtLmJsb2NrUGFyYW1zKTtcbiAgICB9XG5cbiAgICBsZXQgc3RhcnRUeXBlOiBzdHJpbmcsIGVuZFR5cGU6IHN0cmluZztcblxuICAgIGlmICh0aGlzLnByb2dyYW1EZXB0aCA9PT0gMCkge1xuICAgICAgc3RhcnRUeXBlID0gJ3N0YXJ0UHJvZ3JhbSc7XG4gICAgICBlbmRUeXBlID0gJ2VuZFByb2dyYW0nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFR5cGUgPSAnc3RhcnRCbG9jayc7XG4gICAgICBlbmRUeXBlID0gJ2VuZEJsb2NrJztcbiAgICB9XG5cbiAgICBwcm9ncmFtRnJhbWUucGFyZW50Tm9kZSA9IHByb2dyYW07XG4gICAgcHJvZ3JhbUZyYW1lLmNoaWxkcmVuID0gcHJvZ3JhbS5ib2R5O1xuICAgIHByb2dyYW1GcmFtZS5jaGlsZENvdW50ID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aDtcbiAgICBwcm9ncmFtRnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW2VuZFR5cGUsIFtwcm9ncmFtLCB0aGlzLnByb2dyYW1EZXB0aF1dIGFzIEFjdGlvbik7XG4gICAgcHJvZ3JhbUZyYW1lLnN5bWJvbHMgPSBwcm9ncmFtWydzeW1ib2xzJ107XG5cbiAgICBmb3IgKGxldCBpID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBwcm9ncmFtRnJhbWUuY2hpbGRJbmRleCA9IGk7XG4gICAgICB0aGlzLnZpc2l0KHByb2dyYW0uYm9keVtpXSk7XG4gICAgfVxuXG4gICAgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucHVzaChbc3RhcnRUeXBlLCBbXG4gICAgICBwcm9ncmFtLCBwcm9ncmFtRnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50LFxuICAgICAgcHJvZ3JhbUZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucmV2ZXJzZSgpXG4gICAgXV0gYXMgQWN0aW9uKTtcbiAgICB0aGlzLnBvcEZyYW1lKCk7XG5cbiAgICB0aGlzLnByb2dyYW1EZXB0aC0tO1xuXG4gICAgLy8gUHVzaCB0aGUgY29tcGxldGVkIHRlbXBsYXRlIGludG8gdGhlIGdsb2JhbCBhY3Rpb25zIGxpc3RcbiAgICBpZiAocGFyZW50RnJhbWUpIHsgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50Kys7IH1cbiAgICB0aGlzLmFjdGlvbnMucHVzaCguLi5wcm9ncmFtRnJhbWUuYWN0aW9ucy5yZXZlcnNlKCkpO1xuICB9XG5cbiAgRWxlbWVudE5vZGUoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgbGV0IGVsZW1lbnRGcmFtZSA9IHRoaXMucHVzaEZyYW1lKCk7XG5cbiAgICBlbGVtZW50RnJhbWUucGFyZW50Tm9kZSA9IGVsZW1lbnQ7XG4gICAgZWxlbWVudEZyYW1lLmNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbjtcbiAgICBlbGVtZW50RnJhbWUuY2hpbGRDb3VudCA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ICs9IGVsZW1lbnQubW9kaWZpZXJzLmxlbmd0aDtcbiAgICBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgIGVsZW1lbnRGcmFtZS5zeW1ib2xzID0gZWxlbWVudFsnc3ltYm9scyddID0gcGFyZW50RnJhbWUuc3ltYm9scyEuY2hpbGQoZWxlbWVudC5ibG9ja1BhcmFtcyk7XG5cbiAgICBsZXQgYWN0aW9uQXJnczogW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXJdID0gW1xuICAgICAgZWxlbWVudCxcbiAgICAgIHBhcmVudEZyYW1lLmNoaWxkSW5kZXghLFxuICAgICAgcGFyZW50RnJhbWUuY2hpbGRDb3VudCFcbiAgICBdO1xuXG4gICAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChbJ2Nsb3NlRWxlbWVudCcsIGFjdGlvbkFyZ3NdKTtcblxuICAgIGZvciAobGV0IGkgPSBlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMudmlzaXQoZWxlbWVudC5hdHRyaWJ1dGVzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZWxlbWVudEZyYW1lLmNoaWxkSW5kZXggPSBpO1xuICAgICAgdGhpcy52aXNpdChlbGVtZW50LmNoaWxkcmVuW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgb3BlbiA9IFsnb3BlbkVsZW1lbnQnLCBbLi4uYWN0aW9uQXJncywgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQsIGVsZW1lbnRGcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKV1dIGFzIEFjdGlvbi5PcGVuRWxlbWVudDtcbiAgICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKG9wZW4pO1xuXG4gICAgdGhpcy5wb3BGcmFtZSgpO1xuXG4gICAgLy8gUHJvcGFnYXRlIHRoZSBlbGVtZW50J3MgZnJhbWUgc3RhdGUgdG8gdGhlIHBhcmVudCBmcmFtZVxuICAgIGlmIChlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCA+IDApIHsgcGFyZW50RnJhbWUubXVzdGFjaGVDb3VudCsrOyB9XG4gICAgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50ICs9IGVsZW1lbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQ7XG4gICAgcGFyZW50RnJhbWUuYWN0aW9ucy5wdXNoKC4uLmVsZW1lbnRGcmFtZS5hY3Rpb25zKTtcbiAgfVxuXG4gIEF0dHJOb2RlKGF0dHI6IEFTVC5BdHRyTm9kZSkge1xuICAgIGlmIChhdHRyLnZhbHVlLnR5cGUgIT09ICdUZXh0Tm9kZScpIHtcbiAgICAgIHRoaXMuY3VycmVudEZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICB9XG4gIH07XG5cbiAgVGV4dE5vZGUodGV4dDogQVNULlRleHROb2RlKSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgaWYgKHRleHQuY2hhcnMgPT09ICcnKSB7XG4gICAgICBmcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzIS5wdXNoKGRvbUluZGV4T2YoZnJhbWUuY2hpbGRyZW4hLCB0ZXh0KSk7XG4gICAgfVxuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ3RleHQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgQmxvY2tTdGF0ZW1lbnQobm9kZTogQVNULkJsb2NrU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG5cbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnYmxvY2snLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG5cbiAgICBpZiAobm9kZS5pbnZlcnNlKSB7IHRoaXMudmlzaXQobm9kZS5pbnZlcnNlKTsgfVxuICAgIGlmIChub2RlLnByb2dyYW0pIHsgdGhpcy52aXNpdChub2RlLnByb2dyYW0pOyB9XG4gIH07XG5cbiAgUGFydGlhbFN0YXRlbWVudChub2RlOiBBU1QuUGFydGlhbFN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydtdXN0YWNoZScsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBDb21tZW50U3RhdGVtZW50KHRleHQ6IEFTVC5Db21tZW50U3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnY29tbWVudCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBNdXN0YWNoZUNvbW1lbnRTdGF0ZW1lbnQoKSB7XG4gICAgLy8gSW50ZW50aW9uYWwgZW1wdHk6IEhhbmRsZWJhcnMgY29tbWVudHMgc2hvdWxkIG5vdCBhZmZlY3Qgb3V0cHV0LlxuICB9O1xuXG4gIE11c3RhY2hlU3RhdGVtZW50KG11c3RhY2hlOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbXVzdGFjaGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIC8vIEZyYW1lIGhlbHBlcnNcblxuICBwcml2YXRlIGdldCBjdXJyZW50RnJhbWUoKTogRnJhbWUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5nZXRDdXJyZW50RnJhbWUoKSwgXCJFeHBlY3RlZCBhIGN1cnJlbnQgZnJhbWVcIik7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRGcmFtZSgpOiBPcHRpb248RnJhbWU+IHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZVN0YWNrW3RoaXMuZnJhbWVTdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEZyYW1lKCkge1xuICAgIGxldCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuZnJhbWVTdGFjay5wdXNoKGZyYW1lKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBwcml2YXRlIHBvcEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgYGRvbU5vZGVgIGluIHRoZSBgbm9kZXNgIGFycmF5LCBza2lwcGluZ1xuLy8gb3ZlciBhbnkgbm9kZXMgd2hpY2ggZG8gbm90IHJlcHJlc2VudCBET00gbm9kZXMuXG5mdW5jdGlvbiBkb21JbmRleE9mKG5vZGVzOiBBU1QuTm9kZVtdLCBkb21Ob2RlOiBBU1QuVGV4dE5vZGUgfCBBU1QuRWxlbWVudE5vZGUpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBub2RlID0gbm9kZXNbaV07XG5cbiAgICBpZiAobm9kZS50eXBlICE9PSAnVGV4dE5vZGUnICYmIG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykge1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGRvbU5vZGUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG4iXX0=

@@ -104,7 +104,9 @@ import { assert } from "@glimmer/util";

process() {
this.opcodes.forEach(([opcode, ...args]) => {
this.opcodes.forEach(op => {
let opcode = op[0];
let arg = op[1];
if (!this[opcode]) {
throw new Error(`unimplemented ${opcode} on JavaScriptCompiler`);
}
this[opcode](...args);
this[opcode](arg);
});

@@ -114,3 +116,3 @@ return this.template;

/// Nesting
startBlock([program]) {
startBlock(program) {
let block = new InlineBlock(program['symbols']);

@@ -143,3 +145,3 @@ this.blocks.push(block);

}
block(name, template, inverse) {
block([name, template, inverse]) {
let params = this.popValue();

@@ -185,11 +187,11 @@ let hash = this.popValue();

}
staticAttr(name, namespace) {
staticAttr([name, namespace]) {
let value = this.popValue();
this.push([Ops.StaticAttr, name, value, namespace]);
}
dynamicAttr(name, namespace) {
dynamicAttr([name, namespace]) {
let value = this.popValue();
this.push([Ops.DynamicAttr, name, value, namespace]);
}
trustingAttr(name, namespace) {
trustingAttr([name, namespace]) {
let value = this.popValue();

@@ -239,3 +241,3 @@ this.push([Ops.TrustingAttr, name, value, namespace]);

}
get(head, path) {
get([head, path]) {
this.pushValue([Ops.Get, head, path]);

@@ -303,2 +305,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9qYXZhc2NyaXB0LWNvbXBpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLEFBQU8sU0FBRSxBQUFNLEFBQUUsY0FBTSxBQUFlLEFBQUM7QUFDdkMsQUFBTyxTQUFFLEFBQUssT0FBRSxBQUFPLEFBQVUsQUFBTSxBQUFFLGVBQU0sQUFBZSxBQUFDO0FBSS9ELEFBQU8sU0FRTCxBQUFHLEtBQ0gsQUFBVSxZQUNWLEFBQWMsZ0JBQ2QsQUFBVSxZQUNWLEFBQVcsQUFDWixtQkFBTSxBQUFzQixBQUFDO0FBUTlCLEFBQU07QUFBTjtBQUNTLGFBQVUsYUFBZ0IsQUFBRSxBQUFDLEFBT3RDO0FBQUM7QUFIQyxBQUFJLFNBQUMsQUFBb0I7QUFDdkIsQUFBSSxhQUFDLEFBQVUsV0FBQyxBQUFJLEtBQUMsQUFBUyxBQUFDLEFBQUMsQUFDbEM7QUFBQyxBQUNGOztBQUVELEFBQU0sYUFBbUIsb0JBQVEsQUFBSztBQUNwQyxnQkFBbUIsQUFBdUI7QUFDeEMsQUFBSyxBQUFFLEFBQUM7QUFEUyxhQUFLLFFBQUwsQUFBSyxBQUFrQixBQUUxQztBQUFDO0FBRUQsQUFBTTtBQUNKLEFBQU07QUFDSixBQUFVLHdCQUFFLEFBQUksS0FBQyxBQUFVO0FBQzNCLEFBQVUsd0JBQUUsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFLLEFBQzdCLEFBQUMsQUFDSjtBQUpTO0FBSVIsQUFDRjs7QUFFRCxBQUFNLGFBQXFCLHNCQUFRLEFBQUs7QUFPdEMsZ0JBQW9CLEFBQStCO0FBQ2pELEFBQUssQUFBRSxBQUFDO0FBRFUsYUFBVyxjQUFYLEFBQVcsQUFBb0I7QUFONUMsYUFBSSxPQUFHLEFBQVUsQUFBQztBQUNsQixhQUFNLFNBQUcsSUFBSSxBQUFPLEFBQVUsQUFBQztBQUMvQixhQUFLLFFBQUcsSUFBSSxBQUFP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LElBQUksQUFBQyxJQUFHLEFBQUMsR0FBRSxBQUFDLElBQUcsQUFBSSxNQUFFLEFBQUMsQUFBRSxLQUFFLEFBQUM7QUFDOUIsQUFBSSxpQkFBQyxBQUFDLEFBQUMsS0FBRyxBQUFJLEtBQUMsQUFBUSxBQUFPLEFBQUM7QUFDL0IsQUFBTSxtQkFBQyxBQUFDLEFBQUMsS0FBRyxBQUFJLEtBQUMsQUFBUSxBQUFjLEFBQUMsQUFDMUM7QUFBQztBQUVELEFBQUksYUFBQyxBQUFTLFVBQU8sQ0FBQyxBQUFJLE1BQUUsQUFBTSxBQUFDLEFBQUMsQUFBQyxBQUN2QztBQUFDO0FBRUQsQUFBYTtBQUViLEFBQUksU0FBQyxBQUFlO0FBQ2xCLGVBQU8sQUFBSSxLQUFDLEFBQUksS0FBQyxBQUFNLFNBQUcsQUFBQyxBQUFDLE9BQUssQUFBSSxNQUFFLEFBQUM7QUFDdEMsQUFBSSxpQkFBQyxBQUFHLEFBQUUsQUFBQyxBQUNiO0FBQUM7QUFFRCxBQUFJLGFBQUMsQUFBWSxhQUFDLEFBQUksS0FBQyxBQUFJLEFBQUMsQUFBQyxBQUMvQjtBQUFDO0FBRUQsQUFBUyxjQUF1QyxBQUFNO0FBQ3BELEFBQUksYUFBQyxBQUFNLE9BQUMsQUFBSSxLQUFDLEFBQUcsQUFBQyxBQUFDLEFBQ3hCO0FBQUM7QUFFRCxBQUFRO2tCQUNOLEFBQU0sT0FBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQU0sUUFBRSxBQUE4QixBQUFDLEFBQUM7O0FBQzNELEFBQU0sZUFBQyxBQUFJLEtBQUMsQUFBTSxPQUFDLEFBQUcsQUFBTyxBQUFDLEFBQ2hDO0FBQUMsQUFDRjs7QUFFRCxxQkFBcUIsQUFBVztBQUM5QixRQUFJLEFBQUksT0FBRyxBQUFHLElBQUMsQUFBTSxPQUFDLEFBQUMsQUFBQyxBQUFDO0FBRXpCLEFBQU0sV0FBQyxBQUFJLFNBQUssQUFBSSxLQUFDLEFBQVcsQUFBRSxBQUFDLEFBQ3JDO0FBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgU3RhY2ssIERpY3RTZXQsIE9wdGlvbiwgZXhwZWN0IH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IEFTVCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBCbG9ja1N5bWJvbFRhYmxlLCBQcm9ncmFtU3ltYm9sVGFibGUgfSBmcm9tICcuL3RlbXBsYXRlLXZpc2l0b3InO1xuXG5pbXBvcnQge1xuICBTZXJpYWxpemVkSW5saW5lQmxvY2ssXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLFxuICBDb3JlLFxuICBTdGF0ZW1lbnQsXG4gIFN0YXRlbWVudHMsXG4gIEV4cHJlc3Npb24sXG4gIEV4cHJlc3Npb25zLFxuICBPcHMsXG4gIGlzTW9kaWZpZXIsXG4gIGlzRmx1c2hFbGVtZW50LFxuICBpc0FyZ3VtZW50LFxuICBpc0F0dHJpYnV0ZVxufSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5cbmV4cG9ydCB0eXBlIHN0ciA9IHN0cmluZztcbmV4cG9ydCB0eXBlIFBhcmFtcyA9IENvcmUuUGFyYW1zO1xuZXhwb3J0IHR5cGUgSGFzaCA9IENvcmUuSGFzaDtcbmV4cG9ydCB0eXBlIFBhdGggPSBDb3JlLlBhdGg7XG5leHBvcnQgdHlwZSBTdGFja1ZhbHVlID0gRXhwcmVzc2lvbiB8IFBhcmFtcyB8IEhhc2ggfCBzdHI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9jayB7XG4gIHB1YmxpYyBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSA9IFtdO1xuXG4gIGFic3RyYWN0IHRvSlNPTigpOiBPYmplY3Q7XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElubGluZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGFibGU6IEJsb2NrU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgdG9KU09OKCk6IFNlcmlhbGl6ZWRJbmxpbmVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgIHBhcmFtZXRlcnM6IHRoaXMudGFibGUuc2xvdHNcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBwdWJsaWMgdHlwZSA9IFwidGVtcGxhdGVcIjtcbiAgcHVibGljIHlpZWxkcyA9IG5ldyBEaWN0U2V0PHN0cmluZz4oKTtcbiAgcHVibGljIG5hbWVkID0gbmV3IERpY3RTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgYmxvY2tzOiBTZXJpYWxpemVkSW5saW5lQmxvY2tbXSA9IFtdO1xuICBwdWJsaWMgaGFzRXZhbCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3ltYm9sVGFibGU6IFByb2dyYW1TeW1ib2xUYWJsZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdXNoKHN0YXRlbWVudDogU3RhdGVtZW50KSB7XG4gICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgfVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN5bWJvbHM6IHRoaXMuc3ltYm9sVGFibGUuc3ltYm9scyxcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgIGhhc0V2YWw6IHRoaXMuaGFzRXZhbFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBwdWJsaWMgYXR0cmlidXRlczogU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSA9IFtdO1xuICBwdWJsaWMgYXJndW1lbnRzOiBTdGF0ZW1lbnRzLkFyZ3VtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBpblBhcmFtcyA9IHRydWU7XG4gIHB1YmxpYyBwb3NpdGlvbmFsczogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhYmxlOiBCbG9ja1N5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICBpZiAodGhpcy5pblBhcmFtcykge1xuICAgICAgaWYgKGlzTW9kaWZpZXIoc3RhdGVtZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGUgRXJyb3I6IEVsZW1lbnQgbW9kaWZpZXJzIGFyZSBub3QgYWxsb3dlZCBpbiBjb21wb25lbnRzJyk7XG4gICAgICB9IGVsc2UgaWYgKGlzRmx1c2hFbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5pblBhcmFtcyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChpc0FyZ3VtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5hcmd1bWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChpc0F0dHJpYnV0ZShzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGUgRXJyb3I6IG9ubHkgcGFyYW1ldGVycyBhbGxvd2VkIGJlZm9yZSBmbHVzaC1lbGVtZW50Jyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IFtTdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBDb3JlLkhhc2gsIE9wdGlvbjxTZXJpYWxpemVkSW5saW5lQmxvY2s+XSB7XG4gICAgbGV0IGFyZ3MgPSB0aGlzLmFyZ3VtZW50cztcbiAgICBsZXQga2V5cyA9IGFyZ3MubWFwKGFyZyA9PiBhcmdbMV0pO1xuICAgIGxldCB2YWx1ZXMgPSBhcmdzLm1hcChhcmcgPT4gYXJnWzJdKTtcblxuICAgIHJldHVybiBbXG4gICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICBba2V5cywgdmFsdWVzXSxcbiAgICAgIHtcbiAgICAgICAgc3RhdGVtZW50czogdGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgICBwYXJhbWV0ZXJzOiB0aGlzLnRhYmxlLnNsb3RzXG4gICAgICB9XG4gICAgXTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGUge1xuICBwdWJsaWMgYmxvY2s6IFRlbXBsYXRlQmxvY2s7XG5cbiAgY29uc3RydWN0b3Ioc3ltYm9sczogUHJvZ3JhbVN5bWJvbFRhYmxlKSB7XG4gICAgdGhpcy5ibG9jayA9IG5ldyBUZW1wbGF0ZUJsb2NrKHN5bWJvbHMpO1xuICB9XG5cbiAgdG9KU09OKCk6IFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrIHtcbiAgICByZXR1cm4gdGhpcy5ibG9jay50b0pTT04oKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKYXZhU2NyaXB0Q29tcGlsZXIge1xuICBzdGF0aWMgcHJvY2VzcyhvcGNvZGVzOiBhbnlbXSwgc3ltYm9sczogUHJvZ3JhbVN5bWJvbFRhYmxlKTogVGVtcGxhdGUge1xuICAgIGxldCBjb21waWxlciA9IG5ldyBKYXZhU2NyaXB0Q29tcGlsZXIob3Bjb2Rlcywgc3ltYm9scyk7XG4gICAgcmV0dXJuIGNvbXBpbGVyLnByb2Nlc3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVtcGxhdGU6IFRlbXBsYXRlO1xuICBwcml2YXRlIGJsb2NrcyA9IG5ldyBTdGFjazxCbG9jaz4oKTtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBhbnlbXTtcbiAgcHJpdmF0ZSB2YWx1ZXM6IFN0YWNrVmFsdWVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKG9wY29kZXM6IGFueVtdLCBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgICB0aGlzLm9wY29kZXMgPSBvcGNvZGVzO1xuICAgIHRoaXMudGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUoc3ltYm9scyk7XG4gIH1cblxuICBnZXQgY3VycmVudEJsb2NrKCk6IEJsb2NrIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuYmxvY2tzLmN1cnJlbnQsICdFeHBlY3RlZCBhIGJsb2NrIG9uIHRoZSBzdGFjaycpO1xuICB9XG5cbiAgcHJvY2VzcygpOiBUZW1wbGF0ZSB7XG4gICAgdGhpcy5vcGNvZGVzLmZvckVhY2goKFtvcGNvZGUsIC4uLmFyZ3NdKSA9PiB7XG4gICAgICBpZiAoIXRoaXNbb3Bjb2RlXSkgeyB0aHJvdyBuZXcgRXJyb3IoYHVuaW1wbGVtZW50ZWQgJHtvcGNvZGV9IG9uIEphdmFTY3JpcHRDb21waWxlcmApOyB9XG4gICAgICB0aGlzW29wY29kZV0oLi4uYXJncyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vLyBOZXN0aW5nXG5cbiAgc3RhcnRCbG9jayhbcHJvZ3JhbV06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICBsZXQgYmxvY2s6IEJsb2NrID0gbmV3IElubGluZUJsb2NrKHByb2dyYW1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICBsZXQgeyB0ZW1wbGF0ZSwgYmxvY2tzIH0gPSB0aGlzO1xuICAgIGxldCBibG9jayA9IGJsb2Nrcy5wb3AoKSBhcyBJbmxpbmVCbG9jaztcbiAgICB0ZW1wbGF0ZS5ibG9jay5ibG9ja3MucHVzaChibG9jay50b0pTT04oKSk7XG4gIH1cblxuICBzdGFydFByb2dyYW0oKSB7XG4gICAgdGhpcy5ibG9ja3MucHVzaCh0aGlzLnRlbXBsYXRlLmJsb2NrKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG5cbiAgfVxuXG4gIC8vLyBTdGF0ZW1lbnRzXG5cbiAgdGV4dChjb250ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5UZXh0LCBjb250ZW50XSk7XG4gIH1cblxuICBhcHBlbmQodHJ1c3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMucHVzaChbT3BzLkFwcGVuZCwgdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpLCB0cnVzdGVkXSk7XG4gIH1cblxuICBjb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5Db21tZW50LCB2YWx1ZV0pO1xuICB9XG5cbiAgbW9kaWZpZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuTW9kaWZpZXIsIG5hbWUsIHBhcmFtcywgaGFzaF0pO1xuICB9XG5cbiAgYmxvY2sobmFtZTogc3RyaW5nLCB0ZW1wbGF0ZTogbnVtYmVyLCBpbnZlcnNlOiBudW1iZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICBsZXQgYmxvY2tzID0gdGhpcy50ZW1wbGF0ZS5ibG9jay5ibG9ja3M7XG4gICAgYXNzZXJ0KHR5cGVvZiB0ZW1wbGF0ZSAhPT0gJ251bWJlcicgfHwgYmxvY2tzW3RlbXBsYXRlXSAhPT0gbnVsbCwgJ21pc3NpbmcgYmxvY2sgaW4gdGhlIGNvbXBpbGVyJyk7XG4gICAgYXNzZXJ0KHR5cGVvZiBpbnZlcnNlICE9PSAnbnVtYmVyJyB8fCBibG9ja3NbaW52ZXJzZV0gIT09IG51bGwsICdtaXNzaW5nIGJsb2NrIGluIHRoZSBjb21waWxlcicpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuQmxvY2ssIG5hbWUsIHBhcmFtcywgaGFzaCwgYmxvY2tzW3RlbXBsYXRlXSwgYmxvY2tzW2ludmVyc2VdXSk7XG4gIH1cblxuICBvcGVuU3BsYXR0ZWRFbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmIChpc0NvbXBvbmVudCh0YWcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGUgRXJyb3I6IC4uLmF0dHJpYnV0ZXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBhbiBlbGVtZW50YCk7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50LmJsb2NrUGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcGlsZSBFcnJvcjogPCR7ZWxlbWVudC50YWd9PiBpcyBub3QgYSBjb21wb25lbnQgYW5kIGRvZXNuJ3Qgc3VwcG9ydCBibG9jayBwYXJhbWV0ZXJzYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaChbT3BzLk9wZW5TcGxhdHRlZEVsZW1lbnQsIHRhZ10pO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmIChpc0NvbXBvbmVudCh0YWcpKSB7XG4gICAgICB0aGlzLnN0YXJ0Q29tcG9uZW50KGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ibG9ja1BhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGUgRXJyb3I6IDwke2VsZW1lbnQudGFnfT4gaXMgbm90IGEgY29tcG9uZW50IGFuZCBkb2Vzbid0IHN1cHBvcnQgYmxvY2sgcGFyYW1ldGVyc2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goW09wcy5PcGVuRWxlbWVudCwgdGFnXSk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2hFbGVtZW50KCkge1xuICAgIHRoaXMucHVzaChbT3BzLkZsdXNoRWxlbWVudF0pO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmIChpc0NvbXBvbmVudCh0YWcpKSB7XG4gICAgICBsZXQgW2F0dHJzLCBhcmdzLCBibG9ja10gPSB0aGlzLmVuZENvbXBvbmVudCgpO1xuICAgICAgdGhpcy5wdXNoKFtPcHMuQ29tcG9uZW50LCB0YWcsIGF0dHJzLCBhcmdzLCBibG9ja10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goW09wcy5DbG9zZUVsZW1lbnRdKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWNBdHRyKG5hbWU6IHN0ciwgbmFtZXNwYWNlOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuU3RhdGljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgZHluYW1pY0F0dHIobmFtZTogc3RyLCBuYW1lc3BhY2U6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5EeW5hbWljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgdHJ1c3RpbmdBdHRyKG5hbWU6IHN0ciwgbmFtZXNwYWNlOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuVHJ1c3RpbmdBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICBzdGF0aWNBcmcobmFtZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLlN0YXRpY0FyZywgbmFtZSwgdmFsdWVdKTtcbiAgfVxuXG4gIGR5bmFtaWNBcmcobmFtZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBcmcsIG5hbWUsIHZhbHVlXSk7XG4gIH1cblxuICB5aWVsZCh0bzogbnVtYmVyKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIHRoaXMucHVzaChbT3BzLllpZWxkLCB0bywgcGFyYW1zXSk7XG4gIH1cblxuICBhdHRyU3BsYXQodG86IG51bWJlcikge1xuICAgIHRoaXMucHVzaChbT3BzLkF0dHJTcGxhdCwgdG9dKTtcbiAgfVxuXG4gIGRlYnVnZ2VyKGV2YWxJbmZvOiBDb3JlLkV2YWxJbmZvKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuRGVidWdnZXIsIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIGhhc0Jsb2NrKG5hbWU6IG51bWJlcikge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkhhc0Jsb2NrPihbT3BzLkhhc0Jsb2NrLCBuYW1lXSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9ja1BhcmFtcz4oW09wcy5IYXNCbG9ja1BhcmFtcywgbmFtZV0pO1xuICB9XG5cbiAgcGFydGlhbChldmFsSW5mbzogQ29yZS5FdmFsSW5mbykge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5QYXJ0aWFsLCBwYXJhbXNbMF0sIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9uc1xuXG4gIGxpdGVyYWwodmFsdWU6IEV4cHJlc3Npb25zLlZhbHVlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVuZGVmaW5lZD4oW09wcy5VbmRlZmluZWRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuVmFsdWU+KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB1bmtub3duKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVua25vd24+KFtPcHMuVW5rbm93biwgbmFtZV0pO1xuICB9XG5cbiAgZ2V0KGhlYWQ6IG51bWJlciwgcGF0aDogc3RyaW5nW10pIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5HZXQ+KFtPcHMuR2V0LCBoZWFkLCBwYXRoXSk7XG4gIH1cblxuICBtYXliZUxvY2FsKHBhdGg6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuTWF5YmVMb2NhbD4oW09wcy5NYXliZUxvY2FsLCBwYXRoXSk7XG4gIH1cblxuICBjb25jYXQoKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuQ29uY2F0PihbT3BzLkNvbmNhdCwgdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCldKTtcbiAgfVxuXG4gIGhlbHBlcihuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IZWxwZXI+KFtPcHMuSGVscGVyLCBuYW1lLCBwYXJhbXMsIGhhc2hdKTtcbiAgfVxuXG4gIC8vLyBTdGFjayBNYW5hZ2VtZW50IE9wY29kZXNcblxuICBzdGFydENvbXBvbmVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudEJsb2NrKGVsZW1lbnRbJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChjb21wb25lbnQpO1xuICB9XG5cbiAgZW5kQ29tcG9uZW50KCk6IFtTdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBDb3JlLkhhc2gsIE9wdGlvbjxTZXJpYWxpemVkSW5saW5lQmxvY2s+XSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuYmxvY2tzLnBvcCgpO1xuICAgIGFzc2VydChjb21wb25lbnQgaW5zdGFuY2VvZiBDb21wb25lbnRCbG9jaywgXCJDb21waWxlciBidWc6IGVuZENvbXBvbmVudCgpIHNob3VsZCBlbmQgYSBjb21wb25lbnRcIik7XG4gICAgcmV0dXJuIChjb21wb25lbnQgYXMgQ29tcG9uZW50QmxvY2spLnRvSlNPTigpO1xuICB9XG5cbiAgcHJlcGFyZUFycmF5KHNpemU6IG51bWJlcikge1xuICAgIGxldCB2YWx1ZXM6IEV4cHJlc3Npb25bXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIHZhbHVlcy5wdXNoKHRoaXMucG9wVmFsdWUoKSBhcyBFeHByZXNzaW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxQYXJhbXM+KHZhbHVlcyk7XG4gIH1cblxuICBwcmVwYXJlT2JqZWN0KHNpemU6IG51bWJlcikge1xuICAgIGFzc2VydCh0aGlzLnZhbHVlcy5sZW5ndGggPj0gc2l6ZSwgYEV4cGVjdGVkICR7c2l6ZX0gdmFsdWVzIG9uIHRoZSBzdGFjaywgZm91bmQgJHt0aGlzLnZhbHVlcy5sZW5ndGh9YCk7XG5cbiAgICBsZXQga2V5czogc3RyaW5nW10gPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgbGV0IHZhbHVlczogRXhwcmVzc2lvbltdID0gbmV3IEFycmF5KHNpemUpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICAgIGtleXNbaV0gPSB0aGlzLnBvcFZhbHVlPHN0cj4oKTtcbiAgICAgIHZhbHVlc1tpXSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2hWYWx1ZTxIYXNoPihba2V5cywgdmFsdWVzXSk7XG4gIH1cblxuICAvLy8gVXRpbGl0aWVzXG5cbiAgcHVzaChhcmdzOiBTdGF0ZW1lbnQpIHtcbiAgICB3aGlsZSAoYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSBudWxsKSB7XG4gICAgICBhcmdzLnBvcCgpO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEJsb2NrLnB1c2goYXJncyk7XG4gIH1cblxuICBwdXNoVmFsdWU8UyBleHRlbmRzIEV4cHJlc3Npb24gfCBQYXJhbXMgfCBIYXNoPih2YWw6IFMpIHtcbiAgICB0aGlzLnZhbHVlcy5wdXNoKHZhbCk7XG4gIH1cblxuICBwb3BWYWx1ZTxUIGV4dGVuZHMgU3RhY2tWYWx1ZT4oKTogVCB7XG4gICAgYXNzZXJ0KHRoaXMudmFsdWVzLmxlbmd0aCwgXCJObyBleHByZXNzaW9uIGZvdW5kIG9uIHN0YWNrXCIpO1xuICAgIHJldHVybiB0aGlzLnZhbHVlcy5wb3AoKSBhcyBUO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ29tcG9uZW50KHRhZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGxldCBvcGVuID0gdGFnLmNoYXJBdCgwKTtcblxuICByZXR1cm4gb3BlbiA9PT0gb3Blbi50b1VwcGVyQ2FzZSgpO1xufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9qYXZhc2NyaXB0LWNvbXBpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLEFBQU8sU0FBRSxBQUFNLEFBQUUsY0FBTSxBQUFlLEFBQUM7QUFDdkMsQUFBTyxTQUFFLEFBQUssT0FBRSxBQUFPLEFBQVUsQUFBTSxBQUFFLGVBQU0sQUFBZSxBQUFDO0FBSS9ELEFBQU8sU0FRTCxBQUFHLEtBQ0gsQUFBVSxZQUNWLEFBQWMsZ0JBQ2QsQUFBVSxZQUNWLEFBQVcsQUFDWixtQkFBTSxBQUFzQixBQUFDO0FBUzlCLEFBQU07QUFBTjtBQUNTLGFBQVUsYUFBZ0IsQUFBRSxBQUFDLEFBT3RDO0FBQUM7QUFIQyxBQUFJLFNBQUMsQUFBb0I7QUFDdkIsQUFBSSxhQUFDLEFBQVUsV0FBQyxBQUFJLEtBQUMsQUFBUyxBQUFDLEFBQUMsQUFDbEM7QUFBQyxBQUNGOztBQUVELEFBQU0sYUFBbUIsb0JBQVEsQUFBSztBQUNwQyxnQkFBbUIsQUFBdUI7QUFDeEMsQUFBSyxBQUFFLEFBQUM7QUFEUyxhQUFLLFFBQUwsQUFBSyxBQUFrQixBQUUxQztBQUFDO0FBRUQsQUFBTTtBQUNKLEFBQU07QUFDSixBQUFVLHdCQUFFLEFBQUksS0FBQyxBQUFVO0FBQzNCLEFBQVUsd0JBQUUsQUFBSSxLQUFDLEFBQUssTUFBQyxBQUFLLEFBQzdCLEFBQUMsQUFDSjtBQUpTO0FBSVIsQUFDRjs7QUFFRCxBQUFNLGFBQXFCLHNCQUFRLEFBQUs7QUFPdEMsZ0JBQW9CLEFBQStCO0FBQ2pELEFBQUssQUFBRSxBQUFDO0FBRFUsYUFBVyxjQUFYLEFBQVcsQUFBb0I7QUFONUMsYUFBSSxPQUFHLEFBQVUsQUFBQztBQUNsQixhQUFNLFNBQUcsSUFBSSxBQUFPLEFBQVUsQUFBQztBQUMvQixhQUFLLFFBQUcsSUFBSSxBQUFP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QyxBQUFXLEFBQUUsQUFBQyxBQUNyQztBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IFN0YWNrLCBEaWN0U2V0LCBPcHRpb24sIGV4cGVjdCB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgQmxvY2tTeW1ib2xUYWJsZSwgUHJvZ3JhbVN5bWJvbFRhYmxlIH0gZnJvbSAnLi90ZW1wbGF0ZS12aXNpdG9yJztcblxuaW1wb3J0IHtcbiAgU2VyaWFsaXplZElubGluZUJsb2NrLFxuICBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayxcbiAgQ29yZSxcbiAgU3RhdGVtZW50LFxuICBTdGF0ZW1lbnRzLFxuICBFeHByZXNzaW9uLFxuICBFeHByZXNzaW9ucyxcbiAgT3BzLFxuICBpc01vZGlmaWVyLFxuICBpc0ZsdXNoRWxlbWVudCxcbiAgaXNBcmd1bWVudCxcbiAgaXNBdHRyaWJ1dGVcbn0gZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuaW1wb3J0IHsgUHJvY2Vzc29yLCBDb21waWxlck9wcywgT3BOYW1lLCBPcCB9IGZyb20gXCIuL2NvbXBpbGVyLW9wc1wiO1xuXG5leHBvcnQgdHlwZSBzdHIgPSBzdHJpbmc7XG5leHBvcnQgdHlwZSBQYXJhbXMgPSBDb3JlLlBhcmFtcztcbmV4cG9ydCB0eXBlIEhhc2ggPSBDb3JlLkhhc2g7XG5leHBvcnQgdHlwZSBQYXRoID0gQ29yZS5QYXRoO1xuZXhwb3J0IHR5cGUgU3RhY2tWYWx1ZSA9IEV4cHJlc3Npb24gfCBQYXJhbXMgfCBIYXNoIHwgc3RyO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmxvY2sge1xuICBwdWJsaWMgc3RhdGVtZW50czogU3RhdGVtZW50W10gPSBbXTtcblxuICBhYnN0cmFjdCB0b0pTT04oKTogT2JqZWN0O1xuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbmxpbmVCbG9jayBleHRlbmRzIEJsb2NrIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRhYmxlOiBCbG9ja1N5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkSW5saW5lQmxvY2sge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZW1lbnRzOiB0aGlzLnN0YXRlbWVudHMsXG4gICAgICBwYXJhbWV0ZXJzOiB0aGlzLnRhYmxlLnNsb3RzXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVCbG9jayBleHRlbmRzIEJsb2NrIHtcbiAgcHVibGljIHR5cGUgPSBcInRlbXBsYXRlXCI7XG4gIHB1YmxpYyB5aWVsZHMgPSBuZXcgRGljdFNldDxzdHJpbmc+KCk7XG4gIHB1YmxpYyBuYW1lZCA9IG5ldyBEaWN0U2V0PHN0cmluZz4oKTtcbiAgcHVibGljIGJsb2NrczogU2VyaWFsaXplZElubGluZUJsb2NrW10gPSBbXTtcbiAgcHVibGljIGhhc0V2YWwgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN5bWJvbFRhYmxlOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gIH1cblxuICB0b0pTT04oKTogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2sge1xuICAgIHJldHVybiB7XG4gICAgICBzeW1ib2xzOiB0aGlzLnN5bWJvbFRhYmxlLnN5bWJvbHMsXG4gICAgICBzdGF0ZW1lbnRzOiB0aGlzLnN0YXRlbWVudHMsXG4gICAgICBoYXNFdmFsOiB0aGlzLmhhc0V2YWxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRCbG9jayBleHRlbmRzIEJsb2NrIHtcbiAgcHVibGljIGF0dHJpYnV0ZXM6IFN0YXRlbWVudHMuQXR0cmlidXRlW10gPSBbXTtcbiAgcHVibGljIGFyZ3VtZW50czogU3RhdGVtZW50cy5Bcmd1bWVudFtdID0gW107XG4gIHByaXZhdGUgaW5QYXJhbXMgPSB0cnVlO1xuICBwdWJsaWMgcG9zaXRpb25hbHM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0YWJsZTogQmxvY2tTeW1ib2xUYWJsZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdXNoKHN0YXRlbWVudDogU3RhdGVtZW50KSB7XG4gICAgaWYgKHRoaXMuaW5QYXJhbXMpIHtcbiAgICAgIGlmIChpc01vZGlmaWVyKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBFbGVtZW50IG1vZGlmaWVycyBhcmUgbm90IGFsbG93ZWQgaW4gY29tcG9uZW50cycpO1xuICAgICAgfSBlbHNlIGlmIChpc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNBcmd1bWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuYXJndW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNBdHRyaWJ1dGUoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBvbmx5IHBhcmFtZXRlcnMgYWxsb3dlZCBiZWZvcmUgZmx1c2gtZWxlbWVudCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBbU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSwgQ29yZS5IYXNoLCBPcHRpb248U2VyaWFsaXplZElubGluZUJsb2NrPl0ge1xuICAgIGxldCBhcmdzID0gdGhpcy5hcmd1bWVudHM7XG4gICAgbGV0IGtleXMgPSBhcmdzLm1hcChhcmcgPT4gYXJnWzFdKTtcbiAgICBsZXQgdmFsdWVzID0gYXJncy5tYXAoYXJnID0+IGFyZ1syXSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgW2tleXMsIHZhbHVlc10sXG4gICAgICB7XG4gICAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgICAgfVxuICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlIHtcbiAgcHVibGljIGJsb2NrOiBUZW1wbGF0ZUJsb2NrO1xuXG4gIGNvbnN0cnVjdG9yKHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSkge1xuICAgIHRoaXMuYmxvY2sgPSBuZXcgVGVtcGxhdGVCbG9jayhzeW1ib2xzKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayB7XG4gICAgcmV0dXJuIHRoaXMuYmxvY2sudG9KU09OKCk7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgSW5WYXJpYWJsZSA9IG51bWJlcjtcbmV4cG9ydCB0eXBlIEluT3A8SyBleHRlbmRzIGtleW9mIENvbXBpbGVyT3BzPEluVmFyaWFibGU+ID0gT3BOYW1lPiA9IE9wPEluVmFyaWFibGUsIENvbXBpbGVyT3BzPEluVmFyaWFibGU+LCBLPjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSmF2YVNjcmlwdENvbXBpbGVyIGltcGxlbWVudHMgUHJvY2Vzc29yPENvbXBpbGVyT3BzPG51bWJlcj4sIHZvaWQsIENvbXBpbGVyT3BzPHZvaWQ+PiB7XG4gIHN0YXRpYyBwcm9jZXNzKG9wY29kZXM6IEluT3BbXSwgc3ltYm9sczogUHJvZ3JhbVN5bWJvbFRhYmxlKTogVGVtcGxhdGUge1xuICAgIGxldCBjb21waWxlciA9IG5ldyBKYXZhU2NyaXB0Q29tcGlsZXIob3Bjb2Rlcywgc3ltYm9scyk7XG4gICAgcmV0dXJuIGNvbXBpbGVyLnByb2Nlc3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVtcGxhdGU6IFRlbXBsYXRlO1xuICBwcml2YXRlIGJsb2NrcyA9IG5ldyBTdGFjazxCbG9jaz4oKTtcbiAgcHJpdmF0ZSBvcGNvZGVzOiBJbk9wW107XG4gIHByaXZhdGUgdmFsdWVzOiBTdGFja1ZhbHVlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihvcGNvZGVzOiBJbk9wW10sIHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSkge1xuICAgIHRoaXMub3Bjb2RlcyA9IG9wY29kZXM7XG4gICAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZShzeW1ib2xzKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50QmxvY2soKTogQmxvY2sge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5ibG9ja3MuY3VycmVudCwgJ0V4cGVjdGVkIGEgYmxvY2sgb24gdGhlIHN0YWNrJyk7XG4gIH1cblxuICBwcm9jZXNzKCk6IFRlbXBsYXRlIHtcbiAgICB0aGlzLm9wY29kZXMuZm9yRWFjaChvcCA9PiB7XG4gICAgICBsZXQgb3Bjb2RlID0gb3BbMF07XG4gICAgICBsZXQgYXJnID0gb3BbMV07XG5cbiAgICAgIGlmICghdGhpc1tvcGNvZGVdKSB7IHRocm93IG5ldyBFcnJvcihgdW5pbXBsZW1lbnRlZCAke29wY29kZX0gb24gSmF2YVNjcmlwdENvbXBpbGVyYCk7IH1cbiAgICAgICh0aGlzW29wY29kZV0gYXMgYW55KShhcmcpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGU7XG4gIH1cblxuICAvLy8gTmVzdGluZ1xuXG4gIHN0YXJ0QmxvY2socHJvZ3JhbTogQVNULlByb2dyYW0pIHtcbiAgICBsZXQgYmxvY2s6IEJsb2NrID0gbmV3IElubGluZUJsb2NrKHByb2dyYW1bJ3N5bWJvbHMnXSk7XG4gICAgdGhpcy5ibG9ja3MucHVzaChibG9jayk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICBsZXQgeyB0ZW1wbGF0ZSwgYmxvY2tzIH0gPSB0aGlzO1xuICAgIGxldCBibG9jayA9IGJsb2Nrcy5wb3AoKSBhcyBJbmxpbmVCbG9jaztcbiAgICB0ZW1wbGF0ZS5ibG9jay5ibG9ja3MucHVzaChibG9jay50b0pTT04oKSk7XG4gIH1cblxuICBzdGFydFByb2dyYW0oKSB7XG4gICAgdGhpcy5ibG9ja3MucHVzaCh0aGlzLnRlbXBsYXRlLmJsb2NrKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG5cbiAgfVxuXG4gIC8vLyBTdGF0ZW1lbnRzXG5cbiAgdGV4dChjb250ZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5UZXh0LCBjb250ZW50XSk7XG4gIH1cblxuICBhcHBlbmQodHJ1c3RlZDogYm9vbGVhbikge1xuICAgIHRoaXMucHVzaChbT3BzLkFwcGVuZCwgdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpLCB0cnVzdGVkXSk7XG4gIH1cblxuICBjb21tZW50KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2goW09wcy5Db21tZW50LCB2YWx1ZV0pO1xuICB9XG5cbiAgbW9kaWZpZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuTW9kaWZpZXIsIG5hbWUsIHBhcmFtcywgaGFzaF0pO1xuICB9XG5cbiAgYmxvY2soW25hbWUsIHRlbXBsYXRlLCBpbnZlcnNlXTogW3N0cmluZywgbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgbGV0IGJsb2NrcyA9IHRoaXMudGVtcGxhdGUuYmxvY2suYmxvY2tzO1xuICAgIGFzc2VydCh0eXBlb2YgdGVtcGxhdGUgIT09ICdudW1iZXInIHx8IGJsb2Nrc1t0ZW1wbGF0ZV0gIT09IG51bGwsICdtaXNzaW5nIGJsb2NrIGluIHRoZSBjb21waWxlcicpO1xuICAgIGFzc2VydCh0eXBlb2YgaW52ZXJzZSAhPT0gJ251bWJlcicgfHwgYmxvY2tzW2ludmVyc2VdICE9PSBudWxsLCAnbWlzc2luZyBibG9jayBpbiB0aGUgY29tcGlsZXInKTtcblxuICAgIHRoaXMucHVzaChbT3BzLkJsb2NrLCBuYW1lLCBwYXJhbXMsIGhhc2gsIGJsb2Nrc1t0ZW1wbGF0ZV0sIGJsb2Nrc1tpbnZlcnNlXV0pO1xuICB9XG5cbiAgb3BlblNwbGF0dGVkRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAoaXNDb21wb25lbnQodGFnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21waWxlIEVycm9yOiAuLi5hdHRyaWJ1dGVzIGNhbiBvbmx5IGJlIHVzZWQgaW4gYW4gZWxlbWVudGApO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ibG9ja1BhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGUgRXJyb3I6IDwke2VsZW1lbnQudGFnfT4gaXMgbm90IGEgY29tcG9uZW50IGFuZCBkb2Vzbid0IHN1cHBvcnQgYmxvY2sgcGFyYW1ldGVyc2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goW09wcy5PcGVuU3BsYXR0ZWRFbGVtZW50LCB0YWddKTtcbiAgICB9XG4gIH1cblxuICBvcGVuRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAoaXNDb21wb25lbnQodGFnKSkge1xuICAgICAgdGhpcy5zdGFydENvbXBvbmVudChlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYmxvY2tQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21waWxlIEVycm9yOiA8JHtlbGVtZW50LnRhZ30+IGlzIG5vdCBhIGNvbXBvbmVudCBhbmQgZG9lc24ndCBzdXBwb3J0IGJsb2NrIHBhcmFtZXRlcnNgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKFtPcHMuT3BlbkVsZW1lbnQsIHRhZ10pO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoRWxlbWVudCgpIHtcbiAgICB0aGlzLnB1c2goW09wcy5GbHVzaEVsZW1lbnRdKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAoaXNDb21wb25lbnQodGFnKSkge1xuICAgICAgbGV0IFthdHRycywgYXJncywgYmxvY2tdID0gdGhpcy5lbmRDb21wb25lbnQoKTtcbiAgICAgIHRoaXMucHVzaChbT3BzLkNvbXBvbmVudCwgdGFnLCBhdHRycywgYXJncywgYmxvY2tdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKFtPcHMuQ2xvc2VFbGVtZW50XSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljQXR0cihbbmFtZSwgbmFtZXNwYWNlXTogW3N0cmluZywgc3RyaW5nXSkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5TdGF0aWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICBkeW5hbWljQXR0cihbbmFtZSwgbmFtZXNwYWNlXTogW3N0cmluZywgc3RyaW5nXSkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5EeW5hbWljQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgdHJ1c3RpbmdBdHRyKFtuYW1lLCBuYW1lc3BhY2VdOiBbc3RyaW5nLCBzdHJpbmddKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLlRydXN0aW5nQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgc3RhdGljQXJnKG5hbWU6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5TdGF0aWNBcmcsIG5hbWUsIHZhbHVlXSk7XG4gIH1cblxuICBkeW5hbWljQXJnKG5hbWU6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5EeW5hbWljQXJnLCBuYW1lLCB2YWx1ZV0pO1xuICB9XG5cbiAgeWllbGQodG86IG51bWJlcikge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5ZaWVsZCwgdG8sIHBhcmFtc10pO1xuICB9XG5cbiAgYXR0clNwbGF0KHRvOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2goW09wcy5BdHRyU3BsYXQsIHRvXSk7XG4gIH1cblxuICBkZWJ1Z2dlcihldmFsSW5mbzogQ29yZS5FdmFsSW5mbykge1xuICAgIHRoaXMucHVzaChbT3BzLkRlYnVnZ2VyLCBldmFsSW5mb10pO1xuICAgIHRoaXMudGVtcGxhdGUuYmxvY2suaGFzRXZhbCA9IHRydWU7XG4gIH1cblxuICBoYXNCbG9jayhuYW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9jaz4oW09wcy5IYXNCbG9jaywgbmFtZV0pO1xuICB9XG5cbiAgaGFzQmxvY2tQYXJhbXMobmFtZTogbnVtYmVyKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuSGFzQmxvY2tQYXJhbXM+KFtPcHMuSGFzQmxvY2tQYXJhbXMsIG5hbWVdKTtcbiAgfVxuXG4gIHBhcnRpYWwoZXZhbEluZm86IENvcmUuRXZhbEluZm8pIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuUGFydGlhbCwgcGFyYW1zWzBdLCBldmFsSW5mb10pO1xuICAgIHRoaXMudGVtcGxhdGUuYmxvY2suaGFzRXZhbCA9IHRydWU7XG4gIH1cblxuICAvLy8gRXhwcmVzc2lvbnNcblxuICBsaXRlcmFsKHZhbHVlOiBFeHByZXNzaW9ucy5WYWx1ZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5VbmRlZmluZWQ+KFtPcHMuVW5kZWZpbmVkXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlZhbHVlPih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdW5rbm93bihuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5Vbmtub3duPihbT3BzLlVua25vd24sIG5hbWVdKTtcbiAgfVxuXG4gIGdldChbaGVhZCwgcGF0aF06IFtudW1iZXIsIHN0cmluZ1tdXSkge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkdldD4oW09wcy5HZXQsIGhlYWQsIHBhdGhdKTtcbiAgfVxuXG4gIG1heWJlTG9jYWwocGF0aDogc3RyaW5nW10pIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5NYXliZUxvY2FsPihbT3BzLk1heWJlTG9jYWwsIHBhdGhdKTtcbiAgfVxuXG4gIGNvbmNhdCgpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5Db25jYXQ+KFtPcHMuQ29uY2F0LCB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKV0pO1xuICB9XG5cbiAgaGVscGVyKG5hbWU6IHN0cmluZykge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICBsZXQgaGFzaCA9IHRoaXMucG9wVmFsdWU8SGFzaD4oKTtcblxuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkhlbHBlcj4oW09wcy5IZWxwZXIsIG5hbWUsIHBhcmFtcywgaGFzaF0pO1xuICB9XG5cbiAgLy8vIFN0YWNrIE1hbmFnZW1lbnQgT3Bjb2Rlc1xuXG4gIHN0YXJ0Q29tcG9uZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCBjb21wb25lbnQgPSBuZXcgQ29tcG9uZW50QmxvY2soZWxlbWVudFsnc3ltYm9scyddKTtcbiAgICB0aGlzLmJsb2Nrcy5wdXNoKGNvbXBvbmVudCk7XG4gIH1cblxuICBlbmRDb21wb25lbnQoKTogW1N0YXRlbWVudHMuQXR0cmlidXRlW10sIENvcmUuSGFzaCwgT3B0aW9uPFNlcmlhbGl6ZWRJbmxpbmVCbG9jaz5dIHtcbiAgICBsZXQgY29tcG9uZW50ID0gdGhpcy5ibG9ja3MucG9wKCk7XG4gICAgYXNzZXJ0KGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudEJsb2NrLCBcIkNvbXBpbGVyIGJ1ZzogZW5kQ29tcG9uZW50KCkgc2hvdWxkIGVuZCBhIGNvbXBvbmVudFwiKTtcbiAgICByZXR1cm4gKGNvbXBvbmVudCBhcyBDb21wb25lbnRCbG9jaykudG9KU09OKCk7XG4gIH1cblxuICBwcmVwYXJlQXJyYXkoc2l6ZTogbnVtYmVyKSB7XG4gICAgbGV0IHZhbHVlczogRXhwcmVzc2lvbltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgdmFsdWVzLnB1c2godGhpcy5wb3BWYWx1ZSgpIGFzIEV4cHJlc3Npb24pO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFZhbHVlPFBhcmFtcz4odmFsdWVzKTtcbiAgfVxuXG4gIHByZXBhcmVPYmplY3Qoc2l6ZTogbnVtYmVyKSB7XG4gICAgYXNzZXJ0KHRoaXMudmFsdWVzLmxlbmd0aCA+PSBzaXplLCBgRXhwZWN0ZWQgJHtzaXplfSB2YWx1ZXMgb24gdGhlIHN0YWNrLCBmb3VuZCAke3RoaXMudmFsdWVzLmxlbmd0aH1gKTtcblxuICAgIGxldCBrZXlzOiBzdHJpbmdbXSA9IG5ldyBBcnJheShzaXplKTtcbiAgICBsZXQgdmFsdWVzOiBFeHByZXNzaW9uW10gPSBuZXcgQXJyYXkoc2l6ZSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAga2V5c1tpXSA9IHRoaXMucG9wVmFsdWU8c3RyPigpO1xuICAgICAgdmFsdWVzW2ldID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIH1cblxuICAgIHRoaXMucHVzaFZhbHVlPEhhc2g+KFtrZXlzLCB2YWx1ZXNdKTtcbiAgfVxuXG4gIC8vLyBVdGlsaXRpZXNcblxuICBwdXNoKGFyZ3M6IFN0YXRlbWVudCkge1xuICAgIHdoaWxlIChhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IG51bGwpIHtcbiAgICAgIGFyZ3MucG9wKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50QmxvY2sucHVzaChhcmdzKTtcbiAgfVxuXG4gIHB1c2hWYWx1ZTxTIGV4dGVuZHMgRXhwcmVzc2lvbiB8IFBhcmFtcyB8IEhhc2g+KHZhbDogUykge1xuICAgIHRoaXMudmFsdWVzLnB1c2godmFsKTtcbiAgfVxuXG4gIHBvcFZhbHVlPFQgZXh0ZW5kcyBTdGFja1ZhbHVlPigpOiBUIHtcbiAgICBhc3NlcnQodGhpcy52YWx1ZXMubGVuZ3RoLCBcIk5vIGV4cHJlc3Npb24gZm91bmQgb24gc3RhY2tcIik7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzLnBvcCgpIGFzIFQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDb21wb25lbnQodGFnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgbGV0IG9wZW4gPSB0YWcuY2hhckF0KDApO1xuXG4gIHJldHVybiBvcGVuID09PSBvcGVuLnRvVXBwZXJDYXNlKCk7XG59XG4iXX0=
import TemplateVisitor from "./template-visitor";
import JavaScriptCompiler from "./javascript-compiler";
import { Stack } from "@glimmer/util";
import { assert } from "@glimmer/util";
import { isLiteral, SyntaxError } from '@glimmer/syntax';
import { getAttrNamespace } from './utils';
import { SymbolAllocator } from "./allocate-symbols";
function isTrustedValue(value) {
return value.escaped !== undefined && !value.escaped;
}
export const THIS = 0;
export default class TemplateCompiler {

@@ -14,3 +15,2 @@ constructor() {

this.templateIds = [];
this.symbolStack = new Stack();
this.opcodes = [];

@@ -24,7 +24,5 @@ this.includeMeta = false;

let opcodes = compiler.process(templateVisitor.actions);
return JavaScriptCompiler.process(opcodes, ast['symbols']);
let symbols = new SymbolAllocator(opcodes).process();
return JavaScriptCompiler.process(symbols, ast['symbols']);
}
get symbols() {
return this.symbolStack.current;
}
process(actions) {

@@ -39,25 +37,21 @@ actions.forEach(([name, ...args]) => {

}
startProgram(program) {
this.symbolStack.push(program[0]['symbols']);
this.opcode('startProgram', program, program);
startProgram([program]) {
this.opcode(['startProgram', program], program);
}
endProgram() {
this.symbolStack.pop();
this.opcode('endProgram', null);
this.opcode(['endProgram', null], null);
}
startBlock(program) {
this.symbolStack.push(program[0]['symbols']);
startBlock([program]) {
this.templateId++;
this.opcode('startBlock', program, program);
this.opcode(['startBlock', program], program);
}
endBlock() {
this.symbolStack.pop();
this.templateIds.push(this.templateId - 1);
this.opcode('endBlock', null);
this.opcode(['endBlock', null], null);
}
text([action]) {
this.opcode('text', action, action.chars);
this.opcode(['text', action.chars], action);
}
comment([action]) {
this.opcode('comment', action, action.value);
this.opcode(['comment', action.value], action);
}

@@ -75,5 +69,5 @@ openElement([action]) {

if (hasSplat) {
this.opcode('openSplattedElement', action, action);
this.opcode(['openSplattedElement', action], action);
} else {
this.opcode('openElement', action, action);
this.opcode(['openElement', action], action);
}

@@ -95,8 +89,6 @@ let typeAttr = null;

}
this.opcode('flushElement', null);
this.symbolStack.push(action['symbols']);
this.opcode(['flushElement', action], null);
}
closeElement([action]) {
this.symbolStack.pop();
this.opcode('closeElement', null, action);
this.opcode(['closeElement', action], action);
}

@@ -110,7 +102,7 @@ attribute([action]) {

if (isStatic) {
this.opcode('staticArg', action, name);
this.opcode(['staticArg', name], action);
} else if (action.value.type === 'MustacheStatement') {
this.opcode('dynamicArg', action, name);
this.opcode(['dynamicArg', name], action);
} else {
this.opcode('dynamicArg', action, name);
this.opcode(['dynamicArg', name], action);
}

@@ -120,11 +112,11 @@ } else {

if (isStatic && name === '...attributes') {
this.opcode('attrSplat', action, this.symbols.allocateBlock('attrs'));
this.opcode(['attrSplat', null], action);
} else if (isStatic) {
this.opcode('staticAttr', action, name, namespace);
this.opcode(['staticAttr', [name, namespace]], action);
} else if (isTrusting) {
this.opcode('trustingAttr', action, name, namespace);
this.opcode(['trustingAttr', [name, namespace]], action);
} else if (action.value.type === 'MustacheStatement') {
this.opcode('dynamicAttr', action, name);
this.opcode(['dynamicAttr', [name, null]], action);
} else {
this.opcode('dynamicAttr', action, name, namespace);
this.opcode(['dynamicAttr', [name, namespace]], action);
}

@@ -137,3 +129,3 @@ }

this.prepareHelper(action);
this.opcode('modifier', action, parts[0]);
this.opcode(['modifier', parts[0]], action);
}

@@ -144,3 +136,3 @@ mustache([action]) {

this.mustacheExpression(action);
this.opcode('append', action, !action.escaped);
this.opcode(['append', !action.escaped], action);
} else if (isYield(path)) {

@@ -157,3 +149,3 @@ let to = assertValidYield(action);

this.mustacheExpression(action);
this.opcode('append', action, !action.escaped);
this.opcode(['append', !action.escaped], action);
}

@@ -165,3 +157,3 @@ }

let inverseId = action.inverse === null ? null : this.templateIds.pop();
this.opcode('block', action, action.path.parts[0], templateId, inverseId);
this.opcode(['block', [action.path.parts[0], templateId, inverseId]], action);
}

@@ -171,4 +163,3 @@ /// Internal actions, not found in the original processed actions

let { parts: [head, ...rest] } = path;
let symbol = this.symbols.allocateNamed(head);
this.opcode('get', path, symbol, rest);
this.opcode(['get', [`@${head}`, rest]], path);
}

@@ -178,3 +169,3 @@ mustacheExpression(expr) {

if (isLiteral(path)) {
this.opcode('literal', expr, path.value);
this.opcode(['literal', path.value], expr);
} else if (isBuiltInHelper(path)) {

@@ -186,13 +177,17 @@ this.builtInHelper(expr);

this.prepareHelper(expr);
this.opcode('helper', expr, path.parts[0]);
this.opcode(['helper', path.parts[0]], expr);
} else if (path.this) {
this.opcode('get', expr, 0, path.parts);
} else if (isLocal(path, this.symbols)) {
this.opcode(['get', [0, path.parts]], expr);
} else {
let [head, ...parts] = path.parts;
this.opcode('get', expr, this.symbols.get(head), parts);
} else if (isSimplePath(path)) {
this.opcode('unknown', expr, path.parts[0]);
} else {
this.opcode('maybeLocal', expr, path.parts);
this.opcode(['maybeGet', [head, parts]], expr);
}
// } else if (isLocal(path, this.symbols)) {
// let [head, ...parts] = path.parts;
// this.opcode(['get', [head, parts]], expr);
// } else if (isSimplePath(path)) {
// this.opcode(['unknown', path.parts[0]], expr);
// } else {
// this.opcode(['maybeLocal', path.parts], expr);
// }
}

@@ -202,16 +197,16 @@ /// Internal Syntax

this.prepareParams(action.params);
this.opcode('yield', action, this.symbols.allocateBlock(to));
this.opcode(['yield', to], action);
}
debugger(_name, action) {
this.opcode('debugger', action, this.symbols.getEvalInfo());
this.opcode(['debugger', null], action);
}
hasBlock(name, action) {
this.opcode('hasBlock', action, this.symbols.allocateBlock(name));
this.opcode(['hasBlock', name], action);
}
hasBlockParams(name, action) {
this.opcode('hasBlockParams', action, this.symbols.allocateBlock(name));
this.opcode(['hasBlockParams', name], action);
}
partial(_params, action) {
this.prepareParams(action.params);
this.opcode('partial', action, this.symbols.getEvalInfo());
this.opcode(['partial', null], action);
}

@@ -234,3 +229,3 @@ builtInHelper(expr) {

this.prepareHelper(expr);
this.opcode('helper', expr, expr.path.parts[0]);
this.opcode(['helper', expr.path.parts[0]], expr);
}

@@ -242,10 +237,7 @@ }

} else {
let { symbols } = this;
let [head] = expr.parts;
let [head, ...rest] = expr.parts;
if (expr.this) {
this.opcode('get', expr, 0, expr.parts);
} else if (symbols.has(head)) {
this.opcode('get', expr, symbols.get(head), expr.parts.slice(1));
this.opcode(['get', [0, expr.parts]], expr);
} else {
this.opcode('maybeLocal', expr, expr.parts);
this.opcode(['get', [head, rest]], expr);
}

@@ -255,19 +247,19 @@ }

StringLiteral(action) {
this.opcode('literal', null, action.value);
this.opcode(['literal', action.value], action);
}
BooleanLiteral(action) {
this.opcode('literal', null, action.value);
this.opcode(['literal', action.value], action);
}
NumberLiteral(action) {
this.opcode('literal', null, action.value);
this.opcode(['literal', action.value], action);
}
NullLiteral(action) {
this.opcode('literal', null, action.value);
this.opcode(['literal', action.value], action);
}
UndefinedLiteral(action) {
this.opcode('literal', null, action.value);
this.opcode(['literal', action.value], action);
}
/// Utilities
opcode(name, action, ...args) {
let opcode = [name, ...args];
opcode(opcode, action = null) {
// TODO: This doesn't really work
if (this.includeMeta && action) {

@@ -286,3 +278,3 @@ opcode.push(this.meta(action));

if (!params.length) {
this.opcode('literal', null, null);
this.opcode(['literal', null], null);
return;

@@ -296,3 +288,3 @@ }

}
this.opcode('prepareArray', null, params.length);
this.opcode(['prepareArray', params.length], null);
}

@@ -302,3 +294,3 @@ prepareHash(hash) {

if (!pairs.length) {
this.opcode('literal', null, null);
this.opcode(['literal', null], null);
return;

@@ -311,5 +303,5 @@ }

this[value.type](value);
this.opcode('literal', null, key);
this.opcode(['literal', key], null);
}
this.opcode('prepareObject', null, pairs.length);
this.opcode(['prepareObject', pairs.length], null);
}

@@ -320,3 +312,3 @@ prepareAttributeValue(value) {

case 'TextNode':
this.opcode('literal', value, value.chars);
this.opcode(['literal', value.chars], value);
return true;

@@ -328,3 +320,3 @@ case 'MustacheStatement':

this.prepareConcatParts(value.parts);
this.opcode('concat', value);
this.opcode(['concat', null], value);
return false;

@@ -339,6 +331,6 @@ }

} else if (part.type === 'TextNode') {
this.opcode('literal', null, part.chars);
this.opcode(['literal', part.chars], null);
}
}
this.opcode('prepareArray', null, parts.length);
this.opcode(['prepareArray', parts.length], null);
}

@@ -363,5 +355,2 @@ attributeMustache([action]) {

}
function isLocal({ parts }, symbols) {
return symbols && symbols.has(parts[0]);
}
function isYield(path) {

@@ -445,2 +434,2 @@ return path.original === 'yield';

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9jb21waWxlci9saWIvdGVtcGxhdGUtY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxBQUF3QyxxQkFBTSxBQUFvQixBQUFDO0FBQzFFLE9BQU8sQUFBZ0Msd0JBQU0sQUFBdUIsQUFBQztBQUNyRSxBQUFPLFNBQUUsQUFBSyxBQUFFLGFBQU0sQUFBZSxBQUFDO0FBQ3RDLEFBQU8sU0FBRSxBQUFNLEFBQUUsQUFBTSxBQUFVLGNBQU0sQUFBZSxBQUFDO0FBQ3ZELEFBQU8sU0FBTyxBQUFTLFdBQUUsQUFBVyxBQUFFLG1CQUFNLEFBQWlCLEFBQUM7QUFDOUQsQUFBTyxTQUFFLEFBQWdCLEFBQUUsd0JBQU0sQUFBUyxBQUFDO0FBTzNDLHdCQUF3QixBQUFVO0FBQ2hDLEFBQU0sV0FBQyxBQUFLLE1BQUMsQUFBTyxZQUFLLEFBQVMsYUFBSSxDQUFDLEFBQUssTUFBQyxBQUFPLEFBQUMsQUFDdkQ7QUFBQztBQUVELEFBQU0sQUFBQyxBQUFPO0FBQWQ7QUFVVSxhQUFVLGFBQUcsQUFBQyxBQUFDO0FBQ2YsYUFBVyxjQUFhLEFBQUUsQUFBQztBQUMzQixhQUFXLGNBQUcsSUFBSSxBQUFLLEFBQWUsQUFBQztBQUN2QyxhQUFPLFVBQVUsQUFBRSxBQUFDO0FBQ3BCLGFBQVcsY0FBRyxBQUFLLEFBQUMsQUFrWDlCO0FBQUM7QUEvWEMsQUFBTSxXQUFDLEFBQU8sUUFBQyxBQUFnQjtBQUM3QixZQUFJLEFBQWUsa0JBQUcsSUFBSSxBQUFlLEFBQUUsQUFBQztBQUM1QyxBQUFlLHdCQUFDLEFBQUssTUFBQyxBQUFHLEFBQUMsQUFBQztBQUUzQixZQUFJLEFBQVEsV0FBRyxJQUFJLEFBQWdCLEFBQUUsQUFBQztBQUN0QyxZQUFJLEFBQU8sVUFBRyxBQUFRLFNBQUMsQUFBTyxRQUFDLEFBQWUsZ0JBQUMs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QUFHLEtBQUUsQUFBSSxLQUFDLEFBQUcsQUFBQyxBQUFDLEFBQ2pIO0FBQUMsQUFDSDtBQUFDO0FBRUQsa0NBQWtDLEFBQWdDO0FBQ2hFLFFBQUksRUFBRSxBQUFNLFFBQUUsQUFBSSxBQUFFLFNBQUcsQUFBUyxBQUFDO0FBRWpDLEFBQUUsQUFBQyxRQUFDLEFBQUksUUFBSSxBQUFJLEtBQUMsQUFBSyxNQUFDLEFBQU0sU0FBRyxBQUFDLEFBQUMsR0FBQyxBQUFDO0FBQ2xDLGNBQU0sSUFBSSxBQUFXLEFBQUMsWUFBNEMsOENBQUUsQUFBUyxVQUFDLEFBQUcsQUFBQyxBQUFDLEFBQ3JGO0FBQUM7QUFFRCxBQUFFLEFBQUMsUUFBQyxBQUFNLE9BQUMsQUFBTSxXQUFLLEFBQUMsQUFBQyxHQUFDLEFBQUM7QUFDeEIsQUFBTSxlQUFDLEFBQVMsQUFBQyxBQUNuQjtBQUFDLEFBQUMsQUFBSSxXQUFDLEFBQUM7QUFDTixjQUFNLElBQUksQUFBVyxBQUFDLFlBQWlELG1EQUFFLEFBQVMsVUFBQyxBQUFHLEFBQUMsQUFBQyxBQUMxRjtBQUFDLEFBQ0g7QUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZW1wbGF0ZVZpc2l0b3IsIHsgU3ltYm9sVGFibGUsIEFjdGlvbiB9IGZyb20gXCIuL3RlbXBsYXRlLXZpc2l0b3JcIjtcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIsIHsgVGVtcGxhdGUgfSBmcm9tIFwiLi9qYXZhc2NyaXB0LWNvbXBpbGVyXCI7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBhc3NlcnQsIGV4cGVjdCwgT3B0aW9uIH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IEFTVCwgaXNMaXRlcmFsLCBTeW50YXhFcnJvciB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBnZXRBdHRyTmFtZXNwYWNlIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBPcGFxdWUgfSBmcm9tIFwiQGdsaW1tZXIvaW50ZXJmYWNlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zIHtcbiAgbWV0YTogT3BhcXVlO1xufVxuXG5mdW5jdGlvbiBpc1RydXN0ZWRWYWx1ZSh2YWx1ZTogYW55KSB7XG4gIHJldHVybiB2YWx1ZS5lc2NhcGVkICE9PSB1bmRlZmluZWQgJiYgIXZhbHVlLmVzY2FwZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlQ29tcGlsZXIge1xuICBzdGF0aWMgY29tcGlsZShhc3Q6IEFTVC5Qcm9ncmFtKTogVGVtcGxhdGUge1xuICAgIGxldCB0ZW1wbGF0ZVZpc2l0b3IgPSBuZXcgVGVtcGxhdGVWaXNpdG9yKCk7XG4gICAgdGVtcGxhdGVWaXNpdG9yLnZpc2l0KGFzdCk7XG5cbiAgICBsZXQgY29tcGlsZXIgPSBuZXcgVGVtcGxhdGVDb21waWxlcigpO1xuICAgIGxldCBvcGNvZGVzID0gY29tcGlsZXIucHJvY2Vzcyh0ZW1wbGF0ZVZpc2l0b3IuYWN0aW9ucyk7XG4gICAgcmV0dXJuIEphdmFTY3JpcHRDb21waWxlci5wcm9jZXNzKG9wY29kZXMsIGFzdFsnc3ltYm9scyddKTtcbiAgfVxuXG4gIHByaXZhdGUgdGVtcGxhdGVJZCA9IDA7XG4gIHByaXZhdGUgdGVtcGxhdGVJZHM6IG51bWJlcltdID0gW107XG4gIHByaXZhdGUgc3ltYm9sU3RhY2sgPSBuZXcgU3RhY2s8U3ltYm9sVGFibGU+KCk7XG4gIHByaXZhdGUgb3Bjb2RlczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBpbmNsdWRlTWV0YSA9IGZhbHNlO1xuXG4gIGdldCBzeW1ib2xzKCk6IFN5bWJvbFRhYmxlIHtcbiAgICByZXR1cm4gZXhwZWN0KHRoaXMuc3ltYm9sU3RhY2suY3VycmVudCwgJ0V4cGVjdGVkIGEgc3ltYm9sIHRhYmxlIG9uIHRoZSBzdGFjaycpO1xuICB9XG5cbiAgcHJvY2VzcyhhY3Rpb25zOiBBY3Rpb25bXSk6IEFjdGlvbltdIHtcbiAgICBhY3Rpb25zLmZvckVhY2goKFtuYW1lLCAuLi5hcmdzXSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW25hbWVdKSB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZCAke25hbWV9IG9uIFRlbXBsYXRlQ29tcGlsZXJgKTsgfVxuICAgICAgKHRoaXNbbmFtZV0gYXMgYW55KSguLi5hcmdzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5vcGNvZGVzO1xuICB9XG5cbiAgc3RhcnRQcm9ncmFtKHByb2dyYW06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnB1c2gocHJvZ3JhbVswXVsnc3ltYm9scyddKTtcbiAgICB0aGlzLm9wY29kZSgnc3RhcnRQcm9ncmFtJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRQcm9ncmFtKCkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2VuZFByb2dyYW0nLCBudWxsKTtcbiAgfVxuXG4gIHN0YXJ0QmxvY2socHJvZ3JhbTogW0FTVC5Qcm9ncmFtXSkge1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChwcm9ncmFtWzBdWydzeW1ib2xzJ10pO1xuICAgIHRoaXMudGVtcGxhdGVJZCsrO1xuICAgIHRoaXMub3Bjb2RlKCdzdGFydEJsb2NrJywgcHJvZ3JhbSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICB0aGlzLnN5bWJvbFN0YWNrLnBvcCgpO1xuICAgIHRoaXMudGVtcGxhdGVJZHMucHVzaCh0aGlzLnRlbXBsYXRlSWQgLSAxKTtcbiAgICB0aGlzLm9wY29kZSgnZW5kQmxvY2snLCBudWxsKTtcbiAgfVxuXG4gIHRleHQoW2FjdGlvbl06IFtBU1QuVGV4dE5vZGVdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3RleHQnLCBhY3Rpb24sIGFjdGlvbi5jaGFycyk7XG4gIH1cblxuICBjb21tZW50KFthY3Rpb25dOiBbQVNULkNvbW1lbnRTdGF0ZW1lbnRdKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2NvbW1lbnQnLCBhY3Rpb24sIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBvcGVuRWxlbWVudChbYWN0aW9uXTogW0FTVC5FbGVtZW50Tm9kZV0pIHtcbiAgICBsZXQgYXR0cmlidXRlcyA9IGFjdGlvbi5hdHRyaWJ1dGVzO1xuICAgIGxldCBoYXNTcGxhdDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGF0dHIgPSBhdHRyaWJ1dGVzW2ldO1xuICAgICAgaWYgKGF0dHIubmFtZSA9PT0gJy4uLmF0dHJpYnV0ZXMnKSB7XG4gICAgICAgIGhhc1NwbGF0ID0gYXR0cjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1NwbGF0KSB7XG4gICAgICB0aGlzLm9wY29kZSgnb3BlblNwbGF0dGVkRWxlbWVudCcsIGFjdGlvbiwgYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ29wZW5FbGVtZW50JywgYWN0aW9uLCBhY3Rpb24pO1xuICAgIH1cblxuICAgIGxldCB0eXBlQXR0ciA6IE9wdGlvbjxBU1QuQXR0ck5vZGU+ID0gbnVsbDtcbiAgICBsZXQgYXR0cnMgPSBhY3Rpb24uYXR0cmlidXRlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXR0cnNbaV0ubmFtZSA9PT0gJ3R5cGUnKSB7XG4gICAgICAgIHR5cGVBdHRyID0gYXR0cnNbaV07XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5hdHRyaWJ1dGUoW2F0dHJzW2ldXSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVBdHRyKSB7XG4gICAgICB0aGlzLmF0dHJpYnV0ZShbdHlwZUF0dHJdKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGlvbi5tb2RpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubW9kaWZpZXIoW2FjdGlvbi5tb2RpZmllcnNbaV1dKTtcbiAgICB9XG4gICAgdGhpcy5vcGNvZGUoJ2ZsdXNoRWxlbWVudCcsIG51bGwpO1xuICAgIHRoaXMuc3ltYm9sU3RhY2sucHVzaChhY3Rpb25bJ3N5bWJvbHMnXSk7XG4gIH1cblxuICBjbG9zZUVsZW1lbnQoW2FjdGlvbl06IFtBU1QuRWxlbWVudE5vZGVdKSB7XG4gICAgdGhpcy5zeW1ib2xTdGFjay5wb3AoKTtcbiAgICB0aGlzLm9wY29kZSgnY2xvc2VFbGVtZW50JywgbnVsbCwgYWN0aW9uKTtcbiAgfVxuXG4gIGF0dHJpYnV0ZShbYWN0aW9uXTogW0FTVC5BdHRyTm9kZV0pIHtcbiAgICBsZXQgeyBuYW1lLCB2YWx1ZSB9ID0gYWN0aW9uO1xuXG4gICAgbGV0IG5hbWVzcGFjZSA9IGdldEF0dHJOYW1lc3BhY2UobmFtZSk7XG5cbiAgICBsZXQgaXNTdGF0aWMgPSB0aGlzLnByZXBhcmVBdHRyaWJ1dGVWYWx1ZSh2YWx1ZSk7XG5cbiAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09ICdAJykge1xuICAgICAgLy8gQXJndW1lbnRzXG4gICAgICBpZiAoaXNTdGF0aWMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3N0YXRpY0FyZycsIGFjdGlvbiwgbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKGFjdGlvbi52YWx1ZS50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdkeW5hbWljQXJnJywgYWN0aW9uLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGlzVHJ1c3RpbmcgPSBpc1RydXN0ZWRWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGlmIChpc1N0YXRpYyAmJiBuYW1lID09PSAnLi4uYXR0cmlidXRlcycpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2F0dHJTcGxhdCcsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmFsbG9jYXRlQmxvY2soJ2F0dHJzJykpO1xuICAgICAgfSBlbHNlIGlmIChpc1N0YXRpYykge1xuICAgICAgICB0aGlzLm9wY29kZSgnc3RhdGljQXR0cicsIGFjdGlvbiwgbmFtZSwgbmFtZXNwYWNlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNUcnVzdGluZykge1xuICAgICAgICB0aGlzLm9wY29kZSgndHJ1c3RpbmdBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24udmFsdWUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLm9wY29kZSgnZHluYW1pY0F0dHInLCBhY3Rpb24sIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2R5bmFtaWNBdHRyJywgYWN0aW9uLCBuYW1lLCBuYW1lc3BhY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1vZGlmaWVyKFthY3Rpb25dOiBbQVNULkVsZW1lbnRNb2RpZmllclN0YXRlbWVudF0pIHtcbiAgICBhc3NlcnRJc1NpbXBsZVBhdGgoYWN0aW9uLnBhdGgsIGFjdGlvbi5sb2MsICdtb2RpZmllcicpO1xuXG4gICAgbGV0IHsgcGF0aDogeyBwYXJ0cyB9IH0gPSBhY3Rpb247XG5cbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICB0aGlzLm9wY29kZSgnbW9kaWZpZXInLCBhY3Rpb24sIHBhcnRzWzBdKTtcbiAgfVxuXG4gIG11c3RhY2hlKFthY3Rpb25dOiBbQVNULk11c3RhY2hlU3RhdGVtZW50XSkge1xuICAgIGxldCB7IHBhdGggfSA9IGFjdGlvbjtcblxuICAgIGlmIChpc0xpdGVyYWwocGF0aCkpIHtcbiAgICAgIHRoaXMubXVzdGFjaGVFeHByZXNzaW9uKGFjdGlvbik7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kJywgYWN0aW9uLCAhYWN0aW9uLmVzY2FwZWQpO1xuICAgIH0gZWxzZSBpZiAoaXNZaWVsZChwYXRoKSkge1xuICAgICAgbGV0IHRvID0gYXNzZXJ0VmFsaWRZaWVsZChhY3Rpb24pO1xuICAgICAgdGhpcy55aWVsZCh0bywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFydGlhbChwYXRoKSkge1xuICAgICAgbGV0IHBhcmFtcyA9IGFzc2VydFZhbGlkUGFydGlhbChhY3Rpb24pO1xuICAgICAgdGhpcy5wYXJ0aWFsKHBhcmFtcywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzRGVidWdnZXIocGF0aCkpIHtcbiAgICAgIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZShhY3Rpb24pO1xuICAgICAgdGhpcy5kZWJ1Z2dlcignZGVidWdnZXInLCBhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcsIGFjdGlvbiwgIWFjdGlvbi5lc2NhcGVkKTtcbiAgICB9XG4gIH1cblxuICBibG9jayhbYWN0aW9uLyosIGluZGV4LCBjb3VudCovXTogW0FTVC5CbG9ja1N0YXRlbWVudF0pIHtcbiAgICB0aGlzLnByZXBhcmVIZWxwZXIoYWN0aW9uKTtcbiAgICBsZXQgdGVtcGxhdGVJZCA9IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgbGV0IGludmVyc2VJZCA9IGFjdGlvbi5pbnZlcnNlID09PSBudWxsID8gbnVsbCA6IHRoaXMudGVtcGxhdGVJZHMucG9wKCk7XG4gICAgdGhpcy5vcGNvZGUoJ2Jsb2NrJywgYWN0aW9uLCBhY3Rpb24ucGF0aC5wYXJ0c1swXSwgdGVtcGxhdGVJZCwgaW52ZXJzZUlkKTtcbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBhY3Rpb25zLCBub3QgZm91bmQgaW4gdGhlIG9yaWdpbmFsIHByb2Nlc3NlZCBhY3Rpb25zXG5cbiAgYXJnKFtwYXRoXTogW0FTVC5QYXRoRXhwcmVzc2lvbl0pIHtcbiAgICBsZXQgeyBwYXJ0czogW2hlYWQsIC4uLnJlc3RdIH0gPSBwYXRoO1xuICAgIGxldCBzeW1ib2wgPSB0aGlzLnN5bWJvbHMuYWxsb2NhdGVOYW1lZChoZWFkKTtcbiAgICB0aGlzLm9wY29kZSgnZ2V0JywgcGF0aCwgc3ltYm9sLCByZXN0KTtcbiAgfVxuXG4gIG11c3RhY2hlRXhwcmVzc2lvbihleHByOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuXG4gICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBleHByLCBwYXRoLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGlzQnVpbHRJbkhlbHBlcihwYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIgYXMgQVNULkNhbGwpO1xuICAgIH0gZWxzZSBpZiAoaXNBcmcocGF0aCkpIHtcbiAgICAgIHRoaXMuYXJnKFtwYXRoXSk7XG4gICAgfSBlbHNlIGlmIChpc0hlbHBlckludm9jYXRpb24oZXhwcikpIHtcbiAgICAgIHRoaXMucHJlcGFyZUhlbHBlcihleHByKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdoZWxwZXInLCBleHByLCBwYXRoLnBhcnRzWzBdKTtcbiAgICB9IGVsc2UgaWYgKHBhdGgudGhpcykge1xuICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIHBhdGgucGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNMb2NhbChwYXRoLCB0aGlzLnN5bWJvbHMpKSB7XG4gICAgICBsZXQgW2hlYWQsIC4uLnBhcnRzXSA9IHBhdGgucGFydHM7XG4gICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgdGhpcy5zeW1ib2xzLmdldChoZWFkKSwgcGFydHMpO1xuICAgIH0gZWxzZSBpZiAoaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgICB0aGlzLm9wY29kZSgndW5rbm93bicsIGV4cHIsIHBhdGgucGFydHNbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wY29kZSgnbWF5YmVMb2NhbCcsIGV4cHIsIHBhdGgucGFydHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBJbnRlcm5hbCBTeW50YXhcblxuICB5aWVsZCh0bzogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICB0aGlzLm9wY29kZSgneWllbGQnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKHRvKSk7XG4gIH1cblxuICBkZWJ1Z2dlcihfbmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMub3Bjb2RlKCdkZWJ1Z2dlcicsIGFjdGlvbiwgdGhpcy5zeW1ib2xzLmdldEV2YWxJbmZvKCkpO1xuICB9XG5cbiAgaGFzQmxvY2sobmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5DYWxsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2hhc0Jsb2NrJywgYWN0aW9uLCB0aGlzLnN5bWJvbHMuYWxsb2NhdGVCbG9jayhuYW1lKSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULkNhbGwpIHtcbiAgICB0aGlzLm9wY29kZSgnaGFzQmxvY2tQYXJhbXMnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5hbGxvY2F0ZUJsb2NrKG5hbWUpKTtcbiAgfVxuXG4gIHBhcnRpYWwoX3BhcmFtczogQVNULkV4cHJlc3Npb25bXSwgYWN0aW9uOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMoYWN0aW9uLnBhcmFtcyk7XG4gICAgdGhpcy5vcGNvZGUoJ3BhcnRpYWwnLCBhY3Rpb24sIHRoaXMuc3ltYm9scy5nZXRFdmFsSW5mbygpKTtcbiAgfVxuXG4gIGJ1aWx0SW5IZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuICAgIGlmIChpc0hhc0Jsb2NrKHBhdGgpKSB7XG4gICAgICBsZXQgbmFtZSA9IGFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZShleHByLnBhdGgub3JpZ2luYWwsIGV4cHIpO1xuICAgICAgdGhpcy5oYXNCbG9jayhuYW1lLCBleHByKTtcbiAgICB9IGVsc2UgaWYgKGlzSGFzQmxvY2tQYXJhbXMocGF0aCkpIHtcbiAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICB0aGlzLmhhc0Jsb2NrUGFyYW1zKG5hbWUsIGV4cHIpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9ucywgaW52b2tlZCByZWN1cnNpdmVseSBmcm9tIHByZXBhcmVQYXJhbXMgYW5kIHByZXBhcmVIYXNoXG5cbiAgU3ViRXhwcmVzc2lvbihleHByOiBBU1QuU3ViRXhwcmVzc2lvbikge1xuICAgIGlmIChpc0J1aWx0SW5IZWxwZXIoZXhwci5wYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXBhcmVIZWxwZXIoZXhwcik7XG4gICAgICB0aGlzLm9wY29kZSgnaGVscGVyJywgZXhwciwgZXhwci5wYXRoLnBhcnRzWzBdKTtcbiAgICB9XG4gIH1cblxuICBQYXRoRXhwcmVzc2lvbihleHByOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgICBpZiAoZXhwci5kYXRhKSB7XG4gICAgICB0aGlzLmFyZyhbZXhwcl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgeyBzeW1ib2xzIH0gPSB0aGlzO1xuICAgICAgbGV0IFtoZWFkXSA9IGV4cHIucGFydHM7XG5cbiAgICAgIGlmIChleHByLnRoaXMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2dldCcsIGV4cHIsIDAsIGV4cHIucGFydHMpO1xuICAgICAgfSBlbHNlIGlmIChzeW1ib2xzLmhhcyhoZWFkKSkge1xuICAgICAgICB0aGlzLm9wY29kZSgnZ2V0JywgZXhwciwgc3ltYm9scy5nZXQoaGVhZCksIGV4cHIucGFydHMuc2xpY2UoMSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ21heWJlTG9jYWwnLGV4cHIsIGV4cHIucGFydHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFN0cmluZ0xpdGVyYWwoYWN0aW9uOiBBU1QuU3RyaW5nTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgYWN0aW9uLnZhbHVlKTtcbiAgfVxuXG4gIEJvb2xlYW5MaXRlcmFsKGFjdGlvbjogQVNULkJvb2xlYW5MaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgTnVtYmVyTGl0ZXJhbChhY3Rpb246IEFTVC5OdW1iZXJMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBhY3Rpb24udmFsdWUpO1xuICB9XG5cbiAgTnVsbExpdGVyYWwoYWN0aW9uOiBBU1QuTnVsbExpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICBVbmRlZmluZWRMaXRlcmFsKGFjdGlvbjogQVNULlVuZGVmaW5lZExpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZSgnbGl0ZXJhbCcsIG51bGwsIGFjdGlvbi52YWx1ZSk7XG4gIH1cblxuICAvLy8gVXRpbGl0aWVzXG5cbiAgb3Bjb2RlKG5hbWU6IGFueSwgYWN0aW9uOiBhbnksIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgbGV0IG9wY29kZSA9IFtuYW1lLCAuLi5hcmdzXTtcbiAgICBpZiAodGhpcy5pbmNsdWRlTWV0YSAmJiBhY3Rpb24pIHtcbiAgICAgIG9wY29kZS5wdXNoKHRoaXMubWV0YShhY3Rpb24pKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZXMucHVzaChvcGNvZGUpO1xuICB9XG5cbiAgcHJlcGFyZUhlbHBlcihleHByOiBBU1QuQ2FsbCkge1xuICAgIGFzc2VydElzU2ltcGxlUGF0aChleHByLnBhdGgsIGV4cHIubG9jLCAnaGVscGVyJyk7XG5cbiAgICBsZXQgeyBwYXJhbXMsIGhhc2ggfSA9IGV4cHI7XG5cbiAgICB0aGlzLnByZXBhcmVIYXNoKGhhc2gpO1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhwYXJhbXMpO1xuICB9XG5cbiAgcHJlcGFyZVBhcmFtcyhwYXJhbXM6IEFTVC5FeHByZXNzaW9uW10pIHtcbiAgICBpZiAoIXBhcmFtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHBhcmFtcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgbGV0IHBhcmFtID0gcGFyYW1zW2ldO1xuXG4gICAgICBhc3NlcnQodGhpc1twYXJhbS50eXBlXSwgYFVuaW1wbGVtZW50ZWQgJHtwYXJhbS50eXBlfSBvbiBUZW1wbGF0ZUNvbXBpbGVyYCk7XG4gICAgICAodGhpc1twYXJhbS50eXBlXSBhcyBhbnkpKHBhcmFtKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZUFycmF5JywgbnVsbCwgcGFyYW1zLmxlbmd0aCk7XG4gIH1cblxuICBwcmVwYXJlSGFzaChoYXNoOiBBU1QuSGFzaCkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnM7XG5cbiAgICBpZiAoIXBhaXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCBudWxsLCBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gcGFpcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCB7IGtleSwgdmFsdWUgfSA9IHBhaXJzW2ldO1xuXG4gICAgICBhc3NlcnQodGhpc1t2YWx1ZS50eXBlXSwgYFVuaW1wbGVtZW50ZWQgJHt2YWx1ZS50eXBlfSBvbiBUZW1wbGF0ZUNvbXBpbGVyYCk7XG4gICAgICAodGhpc1t2YWx1ZS50eXBlXSBhcyBhbnkpKHZhbHVlKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwga2V5KTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgncHJlcGFyZU9iamVjdCcsIG51bGwsIHBhaXJzLmxlbmd0aCk7XG4gIH1cblxuICBwcmVwYXJlQXR0cmlidXRlVmFsdWUodmFsdWU6IEFTVC5BdHRyTm9kZVsndmFsdWUnXSkge1xuICAgIC8vIHJldHVybnMgdGhlIHN0YXRpYyB2YWx1ZSBpZiB0aGUgdmFsdWUgaXMgc3RhdGljXG5cbiAgICBzd2l0Y2ggKHZhbHVlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ1RleHROb2RlJzpcbiAgICAgICAgdGhpcy5vcGNvZGUoJ2xpdGVyYWwnLCB2YWx1ZSwgdmFsdWUuY2hhcnMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ011c3RhY2hlU3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVNdXN0YWNoZShbdmFsdWVdKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY2FzZSAnQ29uY2F0U3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5wcmVwYXJlQ29uY2F0UGFydHModmFsdWUucGFydHMpO1xuICAgICAgICB0aGlzLm9wY29kZSgnY29uY2F0JywgdmFsdWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZUNvbmNhdFBhcnRzKHBhcnRzOiBBU1QuQ29uY2F0U3RhdGVtZW50WydwYXJ0cyddKSB7XG4gICAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgcGFydCA9IHBhcnRzW2ldO1xuXG4gICAgICBpZiAocGFydC50eXBlID09PSAnTXVzdGFjaGVTdGF0ZW1lbnQnKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlTXVzdGFjaGUoW3BhcnRdKTtcbiAgICAgIH0gZWxzZSBpZiAocGFydC50eXBlID09PSAnVGV4dE5vZGUnKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdsaXRlcmFsJywgbnVsbCwgcGFydC5jaGFycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ3ByZXBhcmVBcnJheScsIG51bGwsIHBhcnRzLmxlbmd0aCk7XG4gIH1cblxuICBhdHRyaWJ1dGVNdXN0YWNoZShbYWN0aW9uXTogW0FTVC5NdXN0YWNoZVN0YXRlbWVudF0pIHtcbiAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICB9XG5cbiAgbWV0YShub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICBsZXQgbG9jID0gbm9kZS5sb2M7XG4gICAgaWYgKCFsb2MpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICBsZXQgeyBzb3VyY2UsIHN0YXJ0LCBlbmQgfSA9IGxvYztcbiAgICByZXR1cm4gWyAnbG9jJywgW3NvdXJjZSB8fCBudWxsLCBbc3RhcnQubGluZSwgc3RhcnQuY29sdW1uXSwgW2VuZC5saW5lLCBlbmQuY29sdW1uXV0gXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0hlbHBlckludm9jYXRpb24obXVzdGFjaGU6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCk6IG11c3RhY2hlIGlzIEFTVC5NdXN0YWNoZVN0YXRlbWVudCAmIHsgcGF0aDogQVNULlBhdGhFeHByZXNzaW9uIH0ge1xuICByZXR1cm4gKG11c3RhY2hlLnBhcmFtcyAmJiBtdXN0YWNoZS5wYXJhbXMubGVuZ3RoID4gMCkgfHxcbiAgICAobXVzdGFjaGUuaGFzaCAmJiBtdXN0YWNoZS5oYXNoLnBhaXJzLmxlbmd0aCA+IDApO1xufVxuXG5mdW5jdGlvbiBpc1NpbXBsZVBhdGgoeyBwYXJ0cyB9OiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMTtcbn1cblxuZnVuY3Rpb24gaXNMb2NhbCh7IHBhcnRzIH06IEFTVC5QYXRoRXhwcmVzc2lvbiwgc3ltYm9sczogU3ltYm9sVGFibGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHN5bWJvbHMgJiYgLyogcGFydHMubGVuZ3RoICYmICovIHN5bWJvbHMuaGFzKHBhcnRzWzBdKTtcbn1cblxuZnVuY3Rpb24gaXNZaWVsZChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICd5aWVsZCc7XG59XG5cbmZ1bmN0aW9uIGlzUGFydGlhbChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdwYXJ0aWFsJztcbn1cblxuZnVuY3Rpb24gaXNEZWJ1Z2dlcihwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdkZWJ1Z2dlcic7XG59XG5cbmZ1bmN0aW9uIGlzSGFzQmxvY2socGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrJztcbn1cblxuZnVuY3Rpb24gaXNIYXNCbG9ja1BhcmFtcyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdoYXMtYmxvY2stcGFyYW1zJztcbn1cblxuZnVuY3Rpb24gaXNCdWlsdEluSGVscGVyKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gaXNIYXNCbG9jayhwYXRoKSB8fCBpc0hhc0Jsb2NrUGFyYW1zKHBhdGgpO1xufVxuXG5mdW5jdGlvbiBpc0FyZyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuICEhcGF0aFsnZGF0YSddO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRJc1NpbXBsZVBhdGgocGF0aDogQVNULlBhdGhFeHByZXNzaW9uLCBsb2M6IEFTVC5Tb3VyY2VMb2NhdGlvbiwgY29udGV4dDogc3RyaW5nKSB7XG4gIGlmICghaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBcXGAke3BhdGgub3JpZ2luYWx9XFxgIGlzIG5vdCBhIHZhbGlkIG5hbWUgZm9yIGEgJHtjb250ZXh0fSBvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9LmAsIHBhdGgubG9jKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFlpZWxkKHN0YXRlbWVudDogQVNULk11c3RhY2hlU3RhdGVtZW50KTogc3RyaW5nIHtcbiAgbGV0IHsgcGFpcnMgfSA9IHN0YXRlbWVudC5oYXNoO1xuXG4gIGlmICgocGFpcnMubGVuZ3RoID09PSAxICYmIHBhaXJzWzBdLmtleSAhPT0gJ3RvJykgfHwgcGFpcnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgeWllbGQgb25seSB0YWtlcyBhIHNpbmdsZSBuYW1lZCBhcmd1bWVudDogJ3RvJ2AsIHN0YXRlbWVudC5sb2MpO1xuICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMSAmJiBwYWlyc1swXS52YWx1ZS50eXBlICE9PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWVgLCBzdGF0ZW1lbnQubG9jKTtcbiAgfSBlbHNlIGlmIChwYWlycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAocGFpcnNbMF0udmFsdWUgYXMgQVNULlN0cmluZ0xpdGVyYWwpLnZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUGFydGlhbChzdGF0ZW1lbnQ6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkgLyogOiBleHByICovIHtcbiAgbGV0IHsgcGFyYW1zLCBoYXNoLCBlc2NhcGVkLCBsb2MgfSA9IHN0YXRlbWVudDtcblxuICBpZiAocGFyYW1zICYmIHBhcmFtcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFBhcnRpYWwgZm91bmQgd2l0aCBubyBhcmd1bWVudHMuIFlvdSBtdXN0IHNwZWNpZnkgYSB0ZW1wbGF0ZSBuYW1lLiAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgLCBzdGF0ZW1lbnQubG9jKTtcbiAgfSBlbHNlIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgcGFydGlhbCBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHMgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCwgc3RhdGVtZW50LmxvYyk7XG4gIH0gZWxzZSBpZiAoIWVzY2FwZWQpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYHt7e3BhcnRpYWwgLi4ufX19IGlzIG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSB1c2Uge3twYXJ0aWFsIC4uLn19IGluc3RlYWQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCwgc3RhdGVtZW50LmxvYyk7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UodHlwZTogc3RyaW5nLCBjYWxsOiBBU1QuQ2FsbCk6IHN0cmluZyB7XG4gIGxldCB7IHBhcmFtcywgaGFzaCwgbG9jIH0gPSBjYWxsO1xuXG4gIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgJHt0eXBlfSBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHNgLCBjYWxsLmxvYyk7XG4gIH1cblxuICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMSkge1xuICAgIGxldCBwYXJhbSA9IHBhcmFtc1swXTtcbiAgICBpZiAocGFyYW0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICByZXR1cm4gcGFyYW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgeW91IGNhbiBvbmx5IHlpZWxkIHRvIGEgbGl0ZXJhbCB2YWx1ZSAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgLCBjYWxsLmxvYyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgJHt0eXBlfSBvbmx5IHRha2VzIGEgc2luZ2xlIHBvc2l0aW9uYWwgYXJndW1lbnQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCwgY2FsbC5sb2MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZShzdGF0ZW1lbnQ6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICBsZXQgeyBwYXJhbXMsIGhhc2ggfSA9IHN0YXRlbWVudDtcblxuICBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYGRlYnVnZ2VyIGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2AsIHN0YXRlbWVudC5sb2MpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgcG9zaXRpb25hbCBhcmd1bWVudHNgLCBzdGF0ZW1lbnQubG9jKTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9AZ2xpbW1lci9jb21waWxlci9saWIvdGVtcGxhdGUtY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxBQUEyQixxQkFBTSxBQUFvQixBQUFDO0FBQzdELE9BQU8sQUFBZ0Msd0JBQU0sQUFBdUIsQUFBQztBQUNyRSxBQUFPLFNBQUUsQUFBTSxBQUFVLGNBQU0sQUFBZSxBQUFDO0FBQy9DLEFBQU8sU0FBTyxBQUFTLFdBQUUsQUFBVyxBQUFFLG1CQUFNLEFBQWlCLEFBQUM7QUFDOUQsQUFBTyxTQUFFLEFBQWdCLEFBQUUsd0JBQU0sQUFBUyxBQUFDO0FBRTNDLEFBQU8sU0FBRSxBQUFlLEFBQTRDLHVCQUFNLEFBQW9CLEFBQUM7QUFNL0Ysd0JBQXdCLEFBQVU7QUFDaEMsQUFBTSxXQUFDLEFBQUssTUFBQyxBQUFPLFlBQUssQUFBUyxhQUFJLENBQUMsQUFBSyxNQUFDLEFBQU8sQUFBQyxBQUN2RDtBQUFDO0FBRUQsQUFBTSxPQUFDLE1BQU0sQUFBSSxPQUFHLEFBQUMsQUFBQztBQUV0QixBQUFNLEFBQUMsQUFBTztBQUFkO0FBWVUsYUFBVSxhQUFHLEFBQUMsQUFBQztBQUNmLGFBQVcsY0FBYSxBQUFFLEFBQUM7QUFDM0IsYUFBTyxVQUFpQixBQUFFLEFBQUM7QUFDM0IsYUFBVyxjQUFHLEFBQUssQUFBQyxBQXlXOUI7QUFBQztBQXZYQyxBQUFNLFdBQUMsQUFBTyxRQUFDLEFBQWdCO0FBQzdCLFlBQUksQUFBZSxrQkFBRyxJQUFJLEFBQWUsQUFBRSxBQUFDO0FBQzVDLEFBQWUsd0JBQUMsQUFBSyxNQUFDLEFBQUcsQUFBQyxBQUFDO0FBRTNCLFlBQUksQUFBUSxXQUFHLElBQUksQUFBZ0IsQUFBRSxBQUFDO0FBQ3RDLFlBQUksQUFBTyxVQUFpQixBQUFRLFNBQUMsQUFBTyxRQUFDLEFBQWUsZ0JBQUMs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QUFDLEFBQUksZUFBQyxBQUFDO0FBQ04sa0JBQU0sSUFBSSxBQUFXLEFBQUMsOERBQWtELEFBQUcsSUFBQyxBQUFLLE1BQUMsQUFBSSxJQUFHLEtBQUUsQUFBSSxLQUFDLEFBQUcsQUFBQyxBQUFDLEFBQ3ZHO0FBQUMsQUFDSDtBQUFDLEFBQUMsQUFBSSxLQVBDLEFBQUUsQUFBQyxNQU9ILEFBQUM7QUFDTixjQUFNLElBQUksQUFBVyxBQUFDLGVBQUcsQUFBSSx5REFBcUQsQUFBRyxJQUFDLEFBQUssTUFBQyxBQUFJLElBQUcsS0FBRSxBQUFJLEtBQUMsQUFBRyxBQUFDLEFBQUMsQUFDakg7QUFBQyxBQUNIO0FBQUM7QUFFRCxrQ0FBa0MsQUFBZ0M7QUFDaEUsUUFBSSxFQUFFLEFBQU0sUUFBRSxBQUFJLEFBQUUsU0FBRyxBQUFTLEFBQUM7QUFFakMsQUFBRSxBQUFDLFFBQUMsQUFBSSxRQUFJLEFBQUksS0FBQyxBQUFLLE1BQUMsQUFBTSxTQUFHLEFBQUMsQUFBQyxHQUFDLEFBQUM7QUFDbEMsY0FBTSxJQUFJLEFBQVcsQUFBQyxZQUE0Qyw4Q0FBRSxBQUFTLFVBQUMsQUFBRyxBQUFDLEFBQUMsQUFDckY7QUFBQztBQUVELEFBQUUsQUFBQyxRQUFDLEFBQU0sT0FBQyxBQUFNLFdBQUssQUFBQyxBQUFDLEdBQUMsQUFBQztBQUN4QixBQUFNLGVBQUMsQUFBUyxBQUFDLEFBQ25CO0FBQUMsQUFBQyxBQUFJLFdBQUMsQUFBQztBQUNOLGNBQU0sSUFBSSxBQUFXLEFBQUMsWUFBaUQsbURBQUUsQUFBUyxVQUFDLEFBQUcsQUFBQyxBQUFDLEFBQzFGO0FBQUMsQUFDSDtBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRlbXBsYXRlVmlzaXRvciwgeyBBY3Rpb24gfSBmcm9tIFwiLi90ZW1wbGF0ZS12aXNpdG9yXCI7XG5pbXBvcnQgSmF2YVNjcmlwdENvbXBpbGVyLCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4vamF2YXNjcmlwdC1jb21waWxlclwiO1xuaW1wb3J0IHsgYXNzZXJ0LCBPcHRpb24gfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgQVNULCBpc0xpdGVyYWwsIFN5bnRheEVycm9yIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcbmltcG9ydCB7IGdldEF0dHJOYW1lc3BhY2UgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IE9wYXF1ZSB9IGZyb20gXCJAZ2xpbW1lci9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBTeW1ib2xBbGxvY2F0b3IsIEluT3AgYXMgU3ltYm9sSW5PcCwgT3V0T3AgYXMgU3ltYm9sT3V0T3AgfSBmcm9tIFwiLi9hbGxvY2F0ZS1zeW1ib2xzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGlsZU9wdGlvbnMge1xuICBtZXRhOiBPcGFxdWU7XG59XG5cbmZ1bmN0aW9uIGlzVHJ1c3RlZFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgcmV0dXJuIHZhbHVlLmVzY2FwZWQgIT09IHVuZGVmaW5lZCAmJiAhdmFsdWUuZXNjYXBlZDtcbn1cblxuZXhwb3J0IGNvbnN0IFRISVMgPSAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZW1wbGF0ZUNvbXBpbGVyIHtcbiAgc3RhdGljIGNvbXBpbGUoYXN0OiBBU1QuUHJvZ3JhbSk6IFRlbXBsYXRlIHtcbiAgICBsZXQgdGVtcGxhdGVWaXNpdG9yID0gbmV3IFRlbXBsYXRlVmlzaXRvcigpO1xuICAgIHRlbXBsYXRlVmlzaXRvci52aXNpdChhc3QpO1xuXG4gICAgbGV0IGNvbXBpbGVyID0gbmV3IFRlbXBsYXRlQ29tcGlsZXIoKTtcbiAgICBsZXQgb3Bjb2RlczogU3ltYm9sSW5PcFtdID0gY29tcGlsZXIucHJvY2Vzcyh0ZW1wbGF0ZVZpc2l0b3IuYWN0aW9ucyk7XG4gICAgbGV0IHN5bWJvbHM6IFN5bWJvbE91dE9wW10gPSBuZXcgU3ltYm9sQWxsb2NhdG9yKG9wY29kZXMpLnByb2Nlc3MoKTtcblxuICAgIHJldHVybiBKYXZhU2NyaXB0Q29tcGlsZXIucHJvY2VzcyhzeW1ib2xzLCBhc3RbJ3N5bWJvbHMnXSk7XG4gIH1cblxuICBwcml2YXRlIHRlbXBsYXRlSWQgPSAwO1xuICBwcml2YXRlIHRlbXBsYXRlSWRzOiBudW1iZXJbXSA9IFtdO1xuICBwcml2YXRlIG9wY29kZXM6IFN5bWJvbEluT3BbXSA9IFtdO1xuICBwcml2YXRlIGluY2x1ZGVNZXRhID0gZmFsc2U7XG5cbiAgcHJvY2VzcyhhY3Rpb25zOiBBY3Rpb25bXSk6IFN5bWJvbEluT3BbXSB7XG4gICAgYWN0aW9ucy5mb3JFYWNoKChbbmFtZSwgLi4uYXJnc10pID0+IHtcbiAgICAgIGlmICghdGhpc1tuYW1lXSkgeyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQgJHtuYW1lfSBvbiBUZW1wbGF0ZUNvbXBpbGVyYCk7IH1cbiAgICAgICh0aGlzW25hbWVdIGFzIGFueSkoLi4uYXJncyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMub3Bjb2RlcztcbiAgfVxuXG4gIHN0YXJ0UHJvZ3JhbShbcHJvZ3JhbV06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICB0aGlzLm9wY29kZShbJ3N0YXJ0UHJvZ3JhbScsIHByb2dyYW1dLCBwcm9ncmFtKTtcbiAgfVxuXG4gIGVuZFByb2dyYW0oKSB7XG4gICAgdGhpcy5vcGNvZGUoWydlbmRQcm9ncmFtJywgbnVsbF0sIG51bGwpO1xuICB9XG5cbiAgc3RhcnRCbG9jayhbcHJvZ3JhbV06IFtBU1QuUHJvZ3JhbV0pIHtcbiAgICB0aGlzLnRlbXBsYXRlSWQrKztcbiAgICB0aGlzLm9wY29kZShbJ3N0YXJ0QmxvY2snLCBwcm9ncmFtXSwgcHJvZ3JhbSk7XG4gIH1cblxuICBlbmRCbG9jaygpIHtcbiAgICB0aGlzLnRlbXBsYXRlSWRzLnB1c2godGhpcy50ZW1wbGF0ZUlkIC0gMSk7XG4gICAgdGhpcy5vcGNvZGUoWydlbmRCbG9jaycsIG51bGxdLCBudWxsKTtcbiAgfVxuXG4gIHRleHQoW2FjdGlvbl06IFtBU1QuVGV4dE5vZGVdKSB7XG4gICAgdGhpcy5vcGNvZGUoWyd0ZXh0JywgYWN0aW9uLmNoYXJzXSwgYWN0aW9uKTtcbiAgfVxuXG4gIGNvbW1lbnQoW2FjdGlvbl06IFtBU1QuQ29tbWVudFN0YXRlbWVudF0pIHtcbiAgICB0aGlzLm9wY29kZShbJ2NvbW1lbnQnLCBhY3Rpb24udmFsdWVdLCBhY3Rpb24pO1xuICB9XG5cbiAgb3BlbkVsZW1lbnQoW2FjdGlvbl06IFtBU1QuRWxlbWVudE5vZGVdKSB7XG4gICAgbGV0IGF0dHJpYnV0ZXMgPSBhY3Rpb24uYXR0cmlidXRlcztcbiAgICBsZXQgaGFzU3BsYXQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBhdHRyID0gYXR0cmlidXRlc1tpXTtcbiAgICAgIGlmIChhdHRyLm5hbWUgPT09ICcuLi5hdHRyaWJ1dGVzJykge1xuICAgICAgICBoYXNTcGxhdCA9IGF0dHI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNTcGxhdCkge1xuICAgICAgdGhpcy5vcGNvZGUoWydvcGVuU3BsYXR0ZWRFbGVtZW50JywgYWN0aW9uXSwgYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoWydvcGVuRWxlbWVudCcsIGFjdGlvbl0sIGFjdGlvbik7XG4gICAgfVxuXG4gICAgbGV0IHR5cGVBdHRyIDogT3B0aW9uPEFTVC5BdHRyTm9kZT4gPSBudWxsO1xuICAgIGxldCBhdHRycyA9IGFjdGlvbi5hdHRyaWJ1dGVzO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhdHRyc1tpXS5uYW1lID09PSAndHlwZScpIHtcbiAgICAgICAgdHlwZUF0dHIgPSBhdHRyc1tpXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0aGlzLmF0dHJpYnV0ZShbYXR0cnNbaV1dKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZUF0dHIpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlKFt0eXBlQXR0cl0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aW9uLm1vZGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5tb2RpZmllcihbYWN0aW9uLm1vZGlmaWVyc1tpXV0pO1xuICAgIH1cbiAgICB0aGlzLm9wY29kZShbJ2ZsdXNoRWxlbWVudCcsIGFjdGlvbl0sIG51bGwpO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KFthY3Rpb25dOiBbQVNULkVsZW1lbnROb2RlXSkge1xuICAgIHRoaXMub3Bjb2RlKFsnY2xvc2VFbGVtZW50JywgYWN0aW9uXSwgYWN0aW9uKTtcbiAgfVxuXG4gIGF0dHJpYnV0ZShbYWN0aW9uXTogW0FTVC5BdHRyTm9kZV0pIHtcbiAgICBsZXQgeyBuYW1lLCB2YWx1ZSB9ID0gYWN0aW9uO1xuXG4gICAgbGV0IG5hbWVzcGFjZSA9IGdldEF0dHJOYW1lc3BhY2UobmFtZSk7XG5cbiAgICBsZXQgaXNTdGF0aWMgPSB0aGlzLnByZXBhcmVBdHRyaWJ1dGVWYWx1ZSh2YWx1ZSk7XG5cbiAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09ICdAJykge1xuICAgICAgLy8gQXJndW1lbnRzXG4gICAgICBpZiAoaXNTdGF0aWMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoWydzdGF0aWNBcmcnLCBuYW1lXSwgYWN0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnZhbHVlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoWydkeW5hbWljQXJnJywgbmFtZV0sIGFjdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wY29kZShbJ2R5bmFtaWNBcmcnLCBuYW1lXSwgYWN0aW9uKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGlzVHJ1c3RpbmcgPSBpc1RydXN0ZWRWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGlmIChpc1N0YXRpYyAmJiBuYW1lID09PSAnLi4uYXR0cmlidXRlcycpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoWydhdHRyU3BsYXQnLCBudWxsXSwgYWN0aW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNTdGF0aWMpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoWydzdGF0aWNBdHRyJywgW25hbWUsIG5hbWVzcGFjZV1dLCBhY3Rpb24pO1xuICAgICAgfSBlbHNlIGlmIChpc1RydXN0aW5nKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKFsndHJ1c3RpbmdBdHRyJywgW25hbWUsIG5hbWVzcGFjZV1dLCBhY3Rpb24pO1xuICAgICAgfSBlbHNlIGlmIChhY3Rpb24udmFsdWUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50Jykge1xuICAgICAgICB0aGlzLm9wY29kZShbJ2R5bmFtaWNBdHRyJywgW25hbWUsIG51bGxdXSwgYWN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKFsnZHluYW1pY0F0dHInLCBbbmFtZSwgbmFtZXNwYWNlXV0sIGFjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbW9kaWZpZXIoW2FjdGlvbl06IFtBU1QuRWxlbWVudE1vZGlmaWVyU3RhdGVtZW50XSkge1xuICAgIGFzc2VydElzU2ltcGxlUGF0aChhY3Rpb24ucGF0aCwgYWN0aW9uLmxvYywgJ21vZGlmaWVyJyk7XG5cbiAgICBsZXQgeyBwYXRoOiB7IHBhcnRzIH0gfSA9IGFjdGlvbjtcblxuICAgIHRoaXMucHJlcGFyZUhlbHBlcihhY3Rpb24pO1xuICAgIHRoaXMub3Bjb2RlKFsnbW9kaWZpZXInLCBwYXJ0c1swXV0sIGFjdGlvbik7XG4gIH1cblxuICBtdXN0YWNoZShbYWN0aW9uXTogW0FTVC5NdXN0YWNoZVN0YXRlbWVudF0pIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBhY3Rpb247XG5cbiAgICBpZiAoaXNMaXRlcmFsKHBhdGgpKSB7XG4gICAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICAgICAgdGhpcy5vcGNvZGUoWydhcHBlbmQnLCAhYWN0aW9uLmVzY2FwZWRdLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNZaWVsZChwYXRoKSkge1xuICAgICAgbGV0IHRvID0gYXNzZXJ0VmFsaWRZaWVsZChhY3Rpb24pO1xuICAgICAgdGhpcy55aWVsZCh0bywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzUGFydGlhbChwYXRoKSkge1xuICAgICAgbGV0IHBhcmFtcyA9IGFzc2VydFZhbGlkUGFydGlhbChhY3Rpb24pO1xuICAgICAgdGhpcy5wYXJ0aWFsKHBhcmFtcywgYWN0aW9uKTtcbiAgICB9IGVsc2UgaWYgKGlzRGVidWdnZXIocGF0aCkpIHtcbiAgICAgIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZShhY3Rpb24pO1xuICAgICAgdGhpcy5kZWJ1Z2dlcignZGVidWdnZXInLCBhY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICAgICAgdGhpcy5vcGNvZGUoWydhcHBlbmQnLCAhYWN0aW9uLmVzY2FwZWRdLCBhY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIGJsb2NrKFthY3Rpb24vKiwgaW5kZXgsIGNvdW50Ki9dOiBbQVNULkJsb2NrU3RhdGVtZW50XSkge1xuICAgIHRoaXMucHJlcGFyZUhlbHBlcihhY3Rpb24pO1xuICAgIGxldCB0ZW1wbGF0ZUlkID0gdGhpcy50ZW1wbGF0ZUlkcy5wb3AoKSE7XG4gICAgbGV0IGludmVyc2VJZCA9IGFjdGlvbi5pbnZlcnNlID09PSBudWxsID8gbnVsbCA6IHRoaXMudGVtcGxhdGVJZHMucG9wKCkhO1xuICAgIHRoaXMub3Bjb2RlKFsnYmxvY2snLCBbYWN0aW9uLnBhdGgucGFydHNbMF0sIHRlbXBsYXRlSWQsIGludmVyc2VJZF1dLCBhY3Rpb24pO1xuICB9XG5cbiAgLy8vIEludGVybmFsIGFjdGlvbnMsIG5vdCBmb3VuZCBpbiB0aGUgb3JpZ2luYWwgcHJvY2Vzc2VkIGFjdGlvbnNcblxuICBhcmcoW3BhdGhdOiBbQVNULlBhdGhFeHByZXNzaW9uXSkge1xuICAgIGxldCB7IHBhcnRzOiBbaGVhZCwgLi4ucmVzdF0gfSA9IHBhdGg7XG4gICAgdGhpcy5vcGNvZGUoWydnZXQnLCBbYEAke2hlYWR9YCwgcmVzdF1dLCBwYXRoKTtcbiAgfVxuXG4gIG11c3RhY2hlRXhwcmVzc2lvbihleHByOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuXG4gICAgaWYgKGlzTGl0ZXJhbChwYXRoKSkge1xuICAgICAgdGhpcy5vcGNvZGUoWydsaXRlcmFsJywgcGF0aC52YWx1ZV0sIGV4cHIpO1xuICAgIH0gZWxzZSBpZiAoaXNCdWlsdEluSGVscGVyKHBhdGgpKSB7XG4gICAgICB0aGlzLmJ1aWx0SW5IZWxwZXIoZXhwciBhcyBBU1QuQ2FsbCk7XG4gICAgfSBlbHNlIGlmIChpc0FyZyhwYXRoKSkge1xuICAgICAgdGhpcy5hcmcoW3BhdGhdKTtcbiAgICB9IGVsc2UgaWYgKGlzSGVscGVySW52b2NhdGlvbihleHByKSkge1xuICAgICAgdGhpcy5wcmVwYXJlSGVscGVyKGV4cHIpO1xuICAgICAgdGhpcy5vcGNvZGUoWydoZWxwZXInLCBwYXRoLnBhcnRzWzBdXSwgZXhwcik7XG4gICAgfSBlbHNlIGlmIChwYXRoLnRoaXMpIHtcbiAgICAgIHRoaXMub3Bjb2RlKFsnZ2V0JywgWzAsIHBhdGgucGFydHNdXSwgZXhwcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBbaGVhZCwgLi4ucGFydHNdID0gcGF0aC5wYXJ0cztcbiAgICAgIHRoaXMub3Bjb2RlKFsnbWF5YmVHZXQnLCBbaGVhZCwgcGFydHNdXSwgZXhwcik7XG4gICAgfVxuXG4gICAgLy8gfSBlbHNlIGlmIChpc0xvY2FsKHBhdGgsIHRoaXMuc3ltYm9scykpIHtcbiAgICAvLyAgIGxldCBbaGVhZCwgLi4ucGFydHNdID0gcGF0aC5wYXJ0cztcbiAgICAvLyAgIHRoaXMub3Bjb2RlKFsnZ2V0JywgW2hlYWQsIHBhcnRzXV0sIGV4cHIpO1xuICAgIC8vIH0gZWxzZSBpZiAoaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgLy8gICB0aGlzLm9wY29kZShbJ3Vua25vd24nLCBwYXRoLnBhcnRzWzBdXSwgZXhwcik7XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIHRoaXMub3Bjb2RlKFsnbWF5YmVMb2NhbCcsIHBhdGgucGFydHNdLCBleHByKTtcbiAgICAvLyB9XG4gIH1cblxuICAvLy8gSW50ZXJuYWwgU3ludGF4XG5cbiAgeWllbGQodG86IHN0cmluZywgYWN0aW9uOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnByZXBhcmVQYXJhbXMoYWN0aW9uLnBhcmFtcyk7XG4gICAgdGhpcy5vcGNvZGUoWyd5aWVsZCcsIHRvXSwgYWN0aW9uKTtcbiAgfVxuXG4gIGRlYnVnZ2VyKF9uYW1lOiBzdHJpbmcsIGFjdGlvbjogQVNULk11c3RhY2hlU3RhdGVtZW50KSB7XG4gICAgdGhpcy5vcGNvZGUoWydkZWJ1Z2dlcicsIG51bGxdLCBhY3Rpb24pO1xuICB9XG5cbiAgaGFzQmxvY2sobmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5DYWxsKSB7XG4gICAgdGhpcy5vcGNvZGUoWydoYXNCbG9jaycsIG5hbWVdLCBhY3Rpb24pO1xuICB9XG5cbiAgaGFzQmxvY2tQYXJhbXMobmFtZTogc3RyaW5nLCBhY3Rpb246IEFTVC5DYWxsKSB7XG4gICAgdGhpcy5vcGNvZGUoWydoYXNCbG9ja1BhcmFtcycsIG5hbWVdLCBhY3Rpb24pO1xuICB9XG5cbiAgcGFydGlhbChfcGFyYW1zOiBBU1QuRXhwcmVzc2lvbltdLCBhY3Rpb246IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhhY3Rpb24ucGFyYW1zKTtcbiAgICB0aGlzLm9wY29kZShbJ3BhcnRpYWwnLCBudWxsXSwgYWN0aW9uKTtcbiAgfVxuXG4gIGJ1aWx0SW5IZWxwZXIoZXhwcjogQVNULkNhbGwpIHtcbiAgICBsZXQgeyBwYXRoIH0gPSBleHByO1xuICAgIGlmIChpc0hhc0Jsb2NrKHBhdGgpKSB7XG4gICAgICBsZXQgbmFtZSA9IGFzc2VydFZhbGlkSGFzQmxvY2tVc2FnZShleHByLnBhdGgub3JpZ2luYWwsIGV4cHIpO1xuICAgICAgdGhpcy5oYXNCbG9jayhuYW1lLCBleHByKTtcbiAgICB9IGVsc2UgaWYgKGlzSGFzQmxvY2tQYXJhbXMocGF0aCkpIHtcbiAgICAgIGxldCBuYW1lID0gYXNzZXJ0VmFsaWRIYXNCbG9ja1VzYWdlKGV4cHIucGF0aC5vcmlnaW5hbCwgZXhwcik7XG4gICAgICB0aGlzLmhhc0Jsb2NrUGFyYW1zKG5hbWUsIGV4cHIpO1xuICAgIH1cbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9ucywgaW52b2tlZCByZWN1cnNpdmVseSBmcm9tIHByZXBhcmVQYXJhbXMgYW5kIHByZXBhcmVIYXNoXG5cbiAgU3ViRXhwcmVzc2lvbihleHByOiBBU1QuU3ViRXhwcmVzc2lvbikge1xuICAgIGlmIChpc0J1aWx0SW5IZWxwZXIoZXhwci5wYXRoKSkge1xuICAgICAgdGhpcy5idWlsdEluSGVscGVyKGV4cHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByZXBhcmVIZWxwZXIoZXhwcik7XG4gICAgICB0aGlzLm9wY29kZShbJ2hlbHBlcicsIGV4cHIucGF0aC5wYXJ0c1swXV0sIGV4cHIpO1xuICAgIH1cbiAgfVxuXG4gIFBhdGhFeHByZXNzaW9uKGV4cHI6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICAgIGlmIChleHByLmRhdGEpIHtcbiAgICAgIHRoaXMuYXJnKFtleHByXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBbaGVhZCwgLi4ucmVzdF0gPSBleHByLnBhcnRzO1xuXG4gICAgICBpZiAoZXhwci50aGlzKSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKFsnZ2V0JywgWzAsIGV4cHIucGFydHNdXSwgZXhwcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wY29kZShbJ2dldCcsIFtoZWFkLCByZXN0XV0sIGV4cHIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFN0cmluZ0xpdGVyYWwoYWN0aW9uOiBBU1QuU3RyaW5nTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKFsnbGl0ZXJhbCcsIGFjdGlvbi52YWx1ZV0sIGFjdGlvbik7XG4gIH1cblxuICBCb29sZWFuTGl0ZXJhbChhY3Rpb246IEFTVC5Cb29sZWFuTGl0ZXJhbCkge1xuICAgIHRoaXMub3Bjb2RlKFsnbGl0ZXJhbCcsIGFjdGlvbi52YWx1ZV0sIGFjdGlvbik7XG4gIH1cblxuICBOdW1iZXJMaXRlcmFsKGFjdGlvbjogQVNULk51bWJlckxpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZShbJ2xpdGVyYWwnLCBhY3Rpb24udmFsdWVdLCBhY3Rpb24pO1xuICB9XG5cbiAgTnVsbExpdGVyYWwoYWN0aW9uOiBBU1QuTnVsbExpdGVyYWwpIHtcbiAgICB0aGlzLm9wY29kZShbJ2xpdGVyYWwnLCBhY3Rpb24udmFsdWVdLCBhY3Rpb24pO1xuICB9XG5cbiAgVW5kZWZpbmVkTGl0ZXJhbChhY3Rpb246IEFTVC5VbmRlZmluZWRMaXRlcmFsKSB7XG4gICAgdGhpcy5vcGNvZGUoWydsaXRlcmFsJywgYWN0aW9uLnZhbHVlXSwgYWN0aW9uKTtcbiAgfVxuXG4gIC8vLyBVdGlsaXRpZXNcblxuICBvcGNvZGU8TyBleHRlbmRzIFN5bWJvbEluT3A+KG9wY29kZTogTywgYWN0aW9uOiBPcHRpb248QVNULkJhc2VOb2RlPiA9IG51bGwpIHtcbiAgICAvLyBUT0RPOiBUaGlzIGRvZXNuJ3QgcmVhbGx5IHdvcmtcbiAgICBpZiAodGhpcy5pbmNsdWRlTWV0YSAmJiBhY3Rpb24pIHtcbiAgICAgIChvcGNvZGUgYXMgYW55KS5wdXNoKHRoaXMubWV0YShhY3Rpb24pKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZXMucHVzaChvcGNvZGUpO1xuICB9XG5cbiAgcHJlcGFyZUhlbHBlcihleHByOiBBU1QuQ2FsbCkge1xuICAgIGFzc2VydElzU2ltcGxlUGF0aChleHByLnBhdGgsIGV4cHIubG9jLCAnaGVscGVyJyk7XG5cbiAgICBsZXQgeyBwYXJhbXMsIGhhc2ggfSA9IGV4cHI7XG5cbiAgICB0aGlzLnByZXBhcmVIYXNoKGhhc2gpO1xuICAgIHRoaXMucHJlcGFyZVBhcmFtcyhwYXJhbXMpO1xuICB9XG5cbiAgcHJlcGFyZVBhcmFtcyhwYXJhbXM6IEFTVC5FeHByZXNzaW9uW10pIHtcbiAgICBpZiAoIXBhcmFtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3Bjb2RlKFsnbGl0ZXJhbCcsIG51bGxdLCBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gcGFyYW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBsZXQgcGFyYW0gPSBwYXJhbXNbaV07XG5cbiAgICAgIGFzc2VydCh0aGlzW3BhcmFtLnR5cGVdLCBgVW5pbXBsZW1lbnRlZCAke3BhcmFtLnR5cGV9IG9uIFRlbXBsYXRlQ29tcGlsZXJgKTtcbiAgICAgICh0aGlzW3BhcmFtLnR5cGVdIGFzIGFueSkocGFyYW0pO1xuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKFsncHJlcGFyZUFycmF5JywgcGFyYW1zLmxlbmd0aF0sIG51bGwpO1xuICB9XG5cbiAgcHJlcGFyZUhhc2goaGFzaDogQVNULkhhc2gpIHtcbiAgICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzO1xuXG4gICAgaWYgKCFwYWlycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMub3Bjb2RlKFsnbGl0ZXJhbCcsIG51bGxdLCBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gcGFpcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCB7IGtleSwgdmFsdWUgfSA9IHBhaXJzW2ldO1xuXG4gICAgICBhc3NlcnQodGhpc1t2YWx1ZS50eXBlXSwgYFVuaW1wbGVtZW50ZWQgJHt2YWx1ZS50eXBlfSBvbiBUZW1wbGF0ZUNvbXBpbGVyYCk7XG4gICAgICAodGhpc1t2YWx1ZS50eXBlXSBhcyBhbnkpKHZhbHVlKTtcbiAgICAgIHRoaXMub3Bjb2RlKFsnbGl0ZXJhbCcsIGtleV0sIG51bGwpO1xuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKFsncHJlcGFyZU9iamVjdCcsIHBhaXJzLmxlbmd0aF0sIG51bGwpO1xuICB9XG5cbiAgcHJlcGFyZUF0dHJpYnV0ZVZhbHVlKHZhbHVlOiBBU1QuQXR0ck5vZGVbJ3ZhbHVlJ10pIHtcbiAgICAvLyByZXR1cm5zIHRoZSBzdGF0aWMgdmFsdWUgaWYgdGhlIHZhbHVlIGlzIHN0YXRpY1xuXG4gICAgc3dpdGNoICh2YWx1ZS50eXBlKSB7XG4gICAgICBjYXNlICdUZXh0Tm9kZSc6XG4gICAgICAgIHRoaXMub3Bjb2RlKFsnbGl0ZXJhbCcsIHZhbHVlLmNoYXJzXSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ011c3RhY2hlU3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVNdXN0YWNoZShbdmFsdWVdKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgY2FzZSAnQ29uY2F0U3RhdGVtZW50JzpcbiAgICAgICAgdGhpcy5wcmVwYXJlQ29uY2F0UGFydHModmFsdWUucGFydHMpO1xuICAgICAgICB0aGlzLm9wY29kZShbJ2NvbmNhdCcsIG51bGxdLCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcmVwYXJlQ29uY2F0UGFydHMocGFydHM6IEFTVC5Db25jYXRTdGF0ZW1lbnRbJ3BhcnRzJ10pIHtcbiAgICBmb3IgKGxldCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBwYXJ0ID0gcGFydHNbaV07XG5cbiAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcpIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVNdXN0YWNoZShbcGFydF0pO1xuICAgICAgfSBlbHNlIGlmIChwYXJ0LnR5cGUgPT09ICdUZXh0Tm9kZScpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoWydsaXRlcmFsJywgcGFydC5jaGFyc10sIG51bGwpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKFsncHJlcGFyZUFycmF5JywgcGFydHMubGVuZ3RoXSwgbnVsbCk7XG4gIH1cblxuICBhdHRyaWJ1dGVNdXN0YWNoZShbYWN0aW9uXTogW0FTVC5NdXN0YWNoZVN0YXRlbWVudF0pIHtcbiAgICB0aGlzLm11c3RhY2hlRXhwcmVzc2lvbihhY3Rpb24pO1xuICB9XG5cbiAgbWV0YShub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICBsZXQgbG9jID0gbm9kZS5sb2M7XG4gICAgaWYgKCFsb2MpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICBsZXQgeyBzb3VyY2UsIHN0YXJ0LCBlbmQgfSA9IGxvYztcbiAgICByZXR1cm4gWyAnbG9jJywgW3NvdXJjZSB8fCBudWxsLCBbc3RhcnQubGluZSwgc3RhcnQuY29sdW1uXSwgW2VuZC5saW5lLCBlbmQuY29sdW1uXV0gXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0hlbHBlckludm9jYXRpb24obXVzdGFjaGU6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCk6IG11c3RhY2hlIGlzIEFTVC5NdXN0YWNoZVN0YXRlbWVudCAmIHsgcGF0aDogQVNULlBhdGhFeHByZXNzaW9uIH0ge1xuICByZXR1cm4gKG11c3RhY2hlLnBhcmFtcyAmJiBtdXN0YWNoZS5wYXJhbXMubGVuZ3RoID4gMCkgfHxcbiAgICAobXVzdGFjaGUuaGFzaCAmJiBtdXN0YWNoZS5oYXNoLnBhaXJzLmxlbmd0aCA+IDApO1xufVxuXG5mdW5jdGlvbiBpc1NpbXBsZVBhdGgoeyBwYXJ0cyB9OiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA9PT0gMTtcbn1cblxuZnVuY3Rpb24gaXNZaWVsZChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICd5aWVsZCc7XG59XG5cbmZ1bmN0aW9uIGlzUGFydGlhbChwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdwYXJ0aWFsJztcbn1cblxuZnVuY3Rpb24gaXNEZWJ1Z2dlcihwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdkZWJ1Z2dlcic7XG59XG5cbmZ1bmN0aW9uIGlzSGFzQmxvY2socGF0aDogQVNULlBhdGhFeHByZXNzaW9uKSB7XG4gIHJldHVybiBwYXRoLm9yaWdpbmFsID09PSAnaGFzLWJsb2NrJztcbn1cblxuZnVuY3Rpb24gaXNIYXNCbG9ja1BhcmFtcyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHBhdGgub3JpZ2luYWwgPT09ICdoYXMtYmxvY2stcGFyYW1zJztcbn1cblxuZnVuY3Rpb24gaXNCdWlsdEluSGVscGVyKHBhdGg6IEFTVC5QYXRoRXhwcmVzc2lvbikge1xuICByZXR1cm4gaXNIYXNCbG9jayhwYXRoKSB8fCBpc0hhc0Jsb2NrUGFyYW1zKHBhdGgpO1xufVxuXG5mdW5jdGlvbiBpc0FyZyhwYXRoOiBBU1QuUGF0aEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuICEhcGF0aFsnZGF0YSddO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRJc1NpbXBsZVBhdGgocGF0aDogQVNULlBhdGhFeHByZXNzaW9uLCBsb2M6IEFTVC5Tb3VyY2VMb2NhdGlvbiwgY29udGV4dDogc3RyaW5nKSB7XG4gIGlmICghaXNTaW1wbGVQYXRoKHBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKGBcXGAke3BhdGgub3JpZ2luYWx9XFxgIGlzIG5vdCBhIHZhbGlkIG5hbWUgZm9yIGEgJHtjb250ZXh0fSBvbiBsaW5lICR7bG9jLnN0YXJ0LmxpbmV9LmAsIHBhdGgubG9jKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFlpZWxkKHN0YXRlbWVudDogQVNULk11c3RhY2hlU3RhdGVtZW50KTogc3RyaW5nIHtcbiAgbGV0IHsgcGFpcnMgfSA9IHN0YXRlbWVudC5oYXNoO1xuXG4gIGlmICgocGFpcnMubGVuZ3RoID09PSAxICYmIHBhaXJzWzBdLmtleSAhPT0gJ3RvJykgfHwgcGFpcnMubGVuZ3RoID4gMSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgeWllbGQgb25seSB0YWtlcyBhIHNpbmdsZSBuYW1lZCBhcmd1bWVudDogJ3RvJ2AsIHN0YXRlbWVudC5sb2MpO1xuICB9IGVsc2UgaWYgKHBhaXJzLmxlbmd0aCA9PT0gMSAmJiBwYWlyc1swXS52YWx1ZS50eXBlICE9PSAnU3RyaW5nTGl0ZXJhbCcpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYHlvdSBjYW4gb25seSB5aWVsZCB0byBhIGxpdGVyYWwgdmFsdWVgLCBzdGF0ZW1lbnQubG9jKTtcbiAgfSBlbHNlIGlmIChwYWlycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAocGFpcnNbMF0udmFsdWUgYXMgQVNULlN0cmluZ0xpdGVyYWwpLnZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUGFydGlhbChzdGF0ZW1lbnQ6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkgLyogOiBleHByICovIHtcbiAgbGV0IHsgcGFyYW1zLCBoYXNoLCBlc2NhcGVkLCBsb2MgfSA9IHN0YXRlbWVudDtcblxuICBpZiAocGFyYW1zICYmIHBhcmFtcy5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFBhcnRpYWwgZm91bmQgd2l0aCBubyBhcmd1bWVudHMuIFlvdSBtdXN0IHNwZWNpZnkgYSB0ZW1wbGF0ZSBuYW1lLiAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgLCBzdGF0ZW1lbnQubG9jKTtcbiAgfSBlbHNlIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgcGFydGlhbCBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHMgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCwgc3RhdGVtZW50LmxvYyk7XG4gIH0gZWxzZSBpZiAoIWVzY2FwZWQpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYHt7e3BhcnRpYWwgLi4ufX19IGlzIG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSB1c2Uge3twYXJ0aWFsIC4uLn19IGluc3RlYWQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCwgc3RhdGVtZW50LmxvYyk7XG4gIH1cblxuICByZXR1cm4gcGFyYW1zO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZEhhc0Jsb2NrVXNhZ2UodHlwZTogc3RyaW5nLCBjYWxsOiBBU1QuQ2FsbCk6IHN0cmluZyB7XG4gIGxldCB7IHBhcmFtcywgaGFzaCwgbG9jIH0gPSBjYWxsO1xuXG4gIGlmIChoYXNoICYmIGhhc2gucGFpcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgJHt0eXBlfSBkb2VzIG5vdCB0YWtlIGFueSBuYW1lZCBhcmd1bWVudHNgLCBjYWxsLmxvYyk7XG4gIH1cblxuICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH0gZWxzZSBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMSkge1xuICAgIGxldCBwYXJhbSA9IHBhcmFtc1swXTtcbiAgICBpZiAocGFyYW0udHlwZSA9PT0gJ1N0cmluZ0xpdGVyYWwnKSB7XG4gICAgICByZXR1cm4gcGFyYW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgeW91IGNhbiBvbmx5IHlpZWxkIHRvIGEgbGl0ZXJhbCB2YWx1ZSAob24gbGluZSAke2xvYy5zdGFydC5saW5lfSlgLCBjYWxsLmxvYyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgJHt0eXBlfSBvbmx5IHRha2VzIGEgc2luZ2xlIHBvc2l0aW9uYWwgYXJndW1lbnQgKG9uIGxpbmUgJHtsb2Muc3RhcnQubGluZX0pYCwgY2FsbC5sb2MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkRGVidWdnZXJVc2FnZShzdGF0ZW1lbnQ6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICBsZXQgeyBwYXJhbXMsIGhhc2ggfSA9IHN0YXRlbWVudDtcblxuICBpZiAoaGFzaCAmJiBoYXNoLnBhaXJzLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYGRlYnVnZ2VyIGRvZXMgbm90IHRha2UgYW55IG5hbWVkIGFyZ3VtZW50c2AsIHN0YXRlbWVudC5sb2MpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJ2RlZmF1bHQnO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihgZGVidWdnZXIgZG9lcyBub3QgdGFrZSBhbnkgcG9zaXRpb25hbCBhcmd1bWVudHNgLCBzdGF0ZW1lbnQubG9jKTtcbiAgfVxufVxuIl19

@@ -34,3 +34,3 @@ import { dict, unreachable } from '@glimmer/util';

if (!named) {
named = this.named[name] = this.allocate(`@${name}`);
named = this.named[name] = this.allocate(name);
}

@@ -300,2 +300,2 @@ return named;

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi90ZW1wbGF0ZS12aXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLEFBQU8sU0FBZ0IsQUFBSSxNQUFFLEFBQVcsQUFBRSxBQUFNLEFBQUUsbUJBQU0sQUFBZSxBQUFDO0FBRXhFLEFBQU07QUFDSixBQUFNLFdBQUMsQUFBRztBQUNSLEFBQU0sZUFBQyxJQUFJLEFBQWtCLEFBQUUsQUFBQyxBQUNsQztBQUFDO0FBWUQsQUFBSyxVQUFDLEFBQWdCO0FBQ3BCLFlBQUksQUFBTyxVQUFHLEFBQU0sT0FBQyxBQUFHLElBQUMsQUFBSSxRQUFJLEFBQUksS0FBQyxBQUFRLFNBQUMsQUFBSSxBQUFDLEFBQUMsQUFBQztBQUN0RCxBQUFNLGVBQUMsSUFBSSxBQUFnQixpQkFBQyxBQUFJLE1BQUUsQUFBTSxRQUFFLEFBQU8sQUFBQyxBQUFDLEFBQ3JEO0FBQUMsQUFDRjs7QUFFRCxBQUFNLGFBQTBCLDJCQUFRLEFBQVc7QUFBbkQ7O0FBQ1MsYUFBTyxVQUFhLEFBQUUsQUFBQztBQUV0QixhQUFJLE9BQUcsQUFBQyxBQUFDO0FBQ1QsYUFBSyxRQUFHLEFBQUksQUFBVSxBQUFDO0FBQ3ZCLGFBQU0sU0FBRyxBQUFJLEFBQVUsQUFBQyxBQTBDbEM7QUFBQztBQXhDQyxBQUFHLFFBQUMsQUFBYTtBQUNmLEFBQU0sZUFBQyxBQUFLLEFBQUMsQUFDZjtBQUFDO0FBRUQsQUFBRyxRQUFDLEFBQWE7QUFDZixjQUFNLEFBQVcsQUFBRSxBQUFDLEFBQ3RCO0FBQUM7QUFFRCxBQUFZO0FBQ1YsQUFBTSxlQUFDLEFBQUUsQUFBQyxBQUNaO0FBQUM7QUFFRCxBQUFXO0FBQ1QsQUFBTSxlQUFDLEFBQUUsQUFBQyxBQUNaO0FBQUM7QUFFRCxBQUFhLGtCQUFDLEFBQVk7QUFDeEIsWUFBSSxBQUFLLFFBQUcsQUFB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dCB7IEFTVCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBDb3JlIH0gZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuaW1wb3J0IHsgRGljdCwgT3B0aW9uLCBkaWN0LCB1bnJlYWNoYWJsZSwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTeW1ib2xUYWJsZSB7XG4gIHN0YXRpYyB0b3AoKTogUHJvZ3JhbVN5bWJvbFRhYmxlIHtcbiAgICByZXR1cm4gbmV3IFByb2dyYW1TeW1ib2xUYWJsZSgpO1xuICB9XG5cbiAgYWJzdHJhY3QgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW47XG4gIGFic3RyYWN0IGdldChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgYWJzdHJhY3QgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPjtcbiAgYWJzdHJhY3QgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbztcblxuICBhYnN0cmFjdCBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgYWJzdHJhY3QgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIGFic3RyYWN0IGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlcjtcblxuICBjaGlsZChsb2NhbHM6IHN0cmluZ1tdKTogQmxvY2tTeW1ib2xUYWJsZSB7XG4gICAgbGV0IHN5bWJvbHMgPSBsb2NhbHMubWFwKG5hbWUgPT4gdGhpcy5hbGxvY2F0ZShuYW1lKSk7XG4gICAgcmV0dXJuIG5ldyBCbG9ja1N5bWJvbFRhYmxlKHRoaXMsIGxvY2Fscywgc3ltYm9scyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb2dyYW1TeW1ib2xUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlIHtcbiAgcHVibGljIHN5bWJvbHM6IHN0cmluZ1tdID0gW107XG5cbiAgcHJpdmF0ZSBzaXplID0gMTtcbiAgcHJpdmF0ZSBuYW1lZCA9IGRpY3Q8bnVtYmVyPigpO1xuICBwcml2YXRlIGJsb2NrcyA9IGRpY3Q8bnVtYmVyPigpO1xuXG4gIGhhcyhfbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0KF9uYW1lOiBzdHJpbmcpOiBuZXZlciB7XG4gICAgdGhyb3cgdW5yZWFjaGFibGUoKTtcbiAgfVxuXG4gIGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdO1xuXG4gICAgaWYgKCFuYW1lZCkge1xuICAgICAgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgQCR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmFtZWQ7XG4gIH1cblxuICBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV07XG5cbiAgICBpZiAoIWJsb2NrKSB7XG4gICAgICBibG9jayA9IHRoaXMuYmxvY2tzW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgJiR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmxvY2s7XG4gIH1cblxuICBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHRoaXMuc3ltYm9scy5wdXNoKGlkZW50aWZpZXIpO1xuICAgIHJldHVybiB0aGlzLnNpemUrKztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxvY2tTeW1ib2xUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJlbnQ6IFN5bWJvbFRhYmxlLCBwdWJsaWMgc3ltYm9sczogc3RyaW5nW10sIHB1YmxpYyBzbG90czogbnVtYmVyW10pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSkgIT09IC0xKSB8fCB0aGlzLnBhcmVudC5oYXMobmFtZSk7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgc2xvdCA9IHRoaXMuc3ltYm9scy5pbmRleE9mKG5hbWUpO1xuICAgIHJldHVybiBzbG90ID09PSAtMSA/IHRoaXMucGFyZW50LmdldChuYW1lKSA6IHRoaXMuc2xvdHNbc2xvdF07XG4gIH1cblxuICBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+IHtcbiAgICBsZXQgZGljdCA9IHRoaXMucGFyZW50LmdldExvY2Fsc01hcCgpO1xuICAgIHRoaXMuc3ltYm9scy5mb3JFYWNoKHN5bWJvbCA9PiBkaWN0W3N5bWJvbF0gPSB0aGlzLmdldChzeW1ib2wpKTtcbiAgICByZXR1cm4gZGljdDtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIGxldCBsb2NhbHMgPSB0aGlzLmdldExvY2Fsc01hcCgpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhsb2NhbHMpLm1hcChzeW1ib2wgPT4gbG9jYWxzW3N5bWJvbF0pO1xuICB9XG5cbiAgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZU5hbWVkKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZUJsb2NrKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGUoaWRlbnRpZmllcik7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBpbiBhbiBBU1QgYW5kIG91dHB1dHMgYSBsaXN0IG9mIGFjdGlvbnMgdG8gYmUgY29uc3VtZWRcbiAqIGJ5IGEgY29tcGlsZXIuIEZvciBleGFtcGxlLCB0aGUgdGVtcGxhdGVcbiAqXG4gKiAgICAgZm9ve3tiYXJ9fTxkaXY+YmF6PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgM11dLFxuICogICAgICBbJ211c3RhY2hlJywgW211c3RhY2hlTm9kZSwgMSwgM11dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMiwgM10sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoaXMgdmlzaXRvciB3YWxrcyB0aGUgQVNUIGRlcHRoIGZpcnN0IGFuZCBiYWNrd2FyZHMuIEFzXG4gKiBhIHJlc3VsdCB0aGUgYm90dG9tLW1vc3QgY2hpbGQgdGVtcGxhdGUgd2lsbCBhcHBlYXIgYXQgdGhlXG4gKiB0b3Agb2YgdGhlIGFjdGlvbnMgbGlzdCB3aGVyZWFzIHRoZSByb290IHRlbXBsYXRlIHdpbGwgYXBwZWFyXG4gKiBhdCB0aGUgYm90dG9tIG9mIHRoZSBsaXN0LiBGb3IgZXhhbXBsZSxcbiAqXG4gKiAgICAgPGRpdj57eyNpZn19Zm9ve3tlbHNlfX1iYXI8Yj48L2I+e3svaWZ9fTwvZGl2PlxuICpcbiAqIHByb2R1Y2VzIHRoZSBhY3Rpb25zXG4gKlxuICogICAgIFtbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDIsIDBdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMiwgMF1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMl1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXSxcbiAqICAgICAgWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMl1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxLCAxXV0sXG4gKiAgICAgIFsnYmxvY2snLCBbYmxvY2tOb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIGlzIG1haW50YWluZWQgYnkgYSBzdGFjayBvZiBmcmFtZXMuXG4gKiBXaGVuZXZlciBhIG5vZGUgd2l0aCBjaGlsZHJlbiBpcyBlbnRlcmVkIChlaXRoZXIgYSBQcm9ncmFtTm9kZVxuICogb3IgYW4gRWxlbWVudE5vZGUpIGEgZnJhbWUgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrLiBUaGUgZnJhbWVcbiAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIG9mIHRoYXRcbiAqIG5vZGUuIEZvciBleGFtcGxlLFxuICpcbiAqICAgLSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGlsZCBub2RlIGJlaW5nIHZpc2l0ZWRcbiAqICAgLSB0aGUgbnVtYmVyIG9mIG11c3RhY2hlcyBjb250YWluZWQgd2l0aGluIGl0cyBjaGlsZCBub2Rlc1xuICogICAtIHRoZSBsaXN0IG9mIGFjdGlvbnMgZ2VuZXJhdGVkIGJ5IGl0cyBjaGlsZCBub2Rlc1xuICovXG5cbmNsYXNzIEZyYW1lIHtcbiAgcHVibGljIHBhcmVudE5vZGU6IE9wdGlvbjxPYmplY3Q+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkcmVuOiBPcHRpb248QVNULk5vZGVbXT4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRJbmRleDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRDb3VudDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRUZW1wbGF0ZUNvdW50ID0gMDtcbiAgcHVibGljIG11c3RhY2hlQ291bnQgPSAwO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHVibGljIGJsYW5rQ2hpbGRUZXh0Tm9kZXM6IE9wdGlvbjxudW1iZXJbXT4gPSBudWxsO1xuICBwdWJsaWMgc3ltYm9sczogT3B0aW9uPFN5bWJvbFRhYmxlPiA9IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQWN0aW9uIHtcbiAgZXhwb3J0IHR5cGUgU3RhcnRQcm9ncmFtID0gWydzdGFydFByb2dyYW0nLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kUHJvZ3JhbSA9IFsnZW5kUHJvZ3JhbScsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFN0YXJ0QmxvY2sgPSBbJ3N0YXJ0QmxvY2snLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kQmxvY2sgPSBbJ2VuZEJsb2NrJywgW0FTVC5Qcm9ncmFtLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgQmxvY2sgPSBbJ2Jsb2NrJywgW0FTVC5CbG9ja1N0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgTXVzdGFjaGUgPSBbJ211c3RhY2hlJywgW0FTVC5NdXN0YWNoZVN0YXRlbWVudCB8IEFTVC5QYXJ0aWFsU3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBPcGVuRWxlbWVudCA9IFsnb3BlbkVsZW1lbnQnLCBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBDbG9zZUVsZW1lbnQgPSBbJ2Nsb3NlRWxlbWVudCcsIFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFRleHQgPSBbJ3RleHQnLCBbQVNULlRleHROb2RlLCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBDb21tZW50ID0gWydjb21tZW50JywgW0FTVC5Db21tZW50U3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuXG4gIGV4cG9ydCB0eXBlIEFjdGlvbiA9XG4gICAgICBTdGFydFByb2dyYW1cbiAgICB8IEVuZFByb2dyYW1cbiAgICB8IFN0YXJ0QmxvY2tcbiAgICB8IEVuZEJsb2NrXG4gICAgfCBCbG9ja1xuICAgIHwgTXVzdGFjaGVcbiAgICB8IE9wZW5FbGVtZW50XG4gICAgfCBDbG9zZUVsZW1lbnRcbiAgICB8IFRleHRcbiAgICB8IENvbW1lbnRcbiAgICA7XG59XG5cbmV4cG9ydCB0eXBlIEFjdGlvbiA9IEFjdGlvbi5BY3Rpb247XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlVmlzaXRvciB7XG4gIHByaXZhdGUgZnJhbWVTdGFjazogRnJhbWVbXSA9IFtdO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBwcm9ncmFtRGVwdGggPSAtMTtcblxuICB2aXNpdChub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICB0aGlzW25vZGUudHlwZV0obm9kZSk7XG4gIH1cblxuICAvLyBUcmF2ZXJzYWwgbWV0aG9kc1xuXG4gIFByb2dyYW0ocHJvZ3JhbTogQVNULlByb2dyYW0pIHtcbiAgICB0aGlzLnByb2dyYW1EZXB0aCsrO1xuXG4gICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5nZXRDdXJyZW50RnJhbWUoKTtcbiAgICBsZXQgcHJvZ3JhbUZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcblxuICAgIGlmICghcGFyZW50RnJhbWUpIHtcbiAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IFN5bWJvbFRhYmxlLnRvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmFtWydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzIS5jaGlsZChwcm9ncmFtLmJsb2NrUGFyYW1zKTtcbiAgICB9XG5cbiAgICBsZXQgc3RhcnRUeXBlOiBzdHJpbmcsIGVuZFR5cGU6IHN0cmluZztcblxuICAgIGlmICh0aGlzLnByb2dyYW1EZXB0aCA9PT0gMCkge1xuICAgICAgc3RhcnRUeXBlID0gJ3N0YXJ0UHJvZ3JhbSc7XG4gICAgICBlbmRUeXBlID0gJ2VuZFByb2dyYW0nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFR5cGUgPSAnc3RhcnRCbG9jayc7XG4gICAgICBlbmRUeXBlID0gJ2VuZEJsb2NrJztcbiAgICB9XG5cbiAgICBwcm9ncmFtRnJhbWUucGFyZW50Tm9kZSA9IHByb2dyYW07XG4gICAgcHJvZ3JhbUZyYW1lLmNoaWxkcmVuID0gcHJvZ3JhbS5ib2R5O1xuICAgIHByb2dyYW1GcmFtZS5jaGlsZENvdW50ID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aDtcbiAgICBwcm9ncmFtRnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW2VuZFR5cGUsIFtwcm9ncmFtLCB0aGlzLnByb2dyYW1EZXB0aF1dIGFzIEFjdGlvbik7XG4gICAgcHJvZ3JhbUZyYW1lLnN5bWJvbHMgPSBwcm9ncmFtWydzeW1ib2xzJ107XG5cbiAgICBmb3IgKGxldCBpID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBwcm9ncmFtRnJhbWUuY2hpbGRJbmRleCA9IGk7XG4gICAgICB0aGlzLnZpc2l0KHByb2dyYW0uYm9keVtpXSk7XG4gICAgfVxuXG4gICAgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucHVzaChbc3RhcnRUeXBlLCBbXG4gICAgICBwcm9ncmFtLCBwcm9ncmFtRnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50LFxuICAgICAgcHJvZ3JhbUZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucmV2ZXJzZSgpXG4gICAgXV0gYXMgQWN0aW9uKTtcbiAgICB0aGlzLnBvcEZyYW1lKCk7XG5cbiAgICB0aGlzLnByb2dyYW1EZXB0aC0tO1xuXG4gICAgLy8gUHVzaCB0aGUgY29tcGxldGVkIHRlbXBsYXRlIGludG8gdGhlIGdsb2JhbCBhY3Rpb25zIGxpc3RcbiAgICBpZiAocGFyZW50RnJhbWUpIHsgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50Kys7IH1cbiAgICB0aGlzLmFjdGlvbnMucHVzaCguLi5wcm9ncmFtRnJhbWUuYWN0aW9ucy5yZXZlcnNlKCkpO1xuICB9XG5cbiAgRWxlbWVudE5vZGUoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgbGV0IGVsZW1lbnRGcmFtZSA9IHRoaXMucHVzaEZyYW1lKCk7XG5cbiAgICBlbGVtZW50RnJhbWUucGFyZW50Tm9kZSA9IGVsZW1lbnQ7XG4gICAgZWxlbWVudEZyYW1lLmNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbjtcbiAgICBlbGVtZW50RnJhbWUuY2hpbGRDb3VudCA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ICs9IGVsZW1lbnQubW9kaWZpZXJzLmxlbmd0aDtcbiAgICBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgIGVsZW1lbnRGcmFtZS5zeW1ib2xzID0gZWxlbWVudFsnc3ltYm9scyddID0gcGFyZW50RnJhbWUuc3ltYm9scyEuY2hpbGQoZWxlbWVudC5ibG9ja1BhcmFtcyk7XG5cbiAgICBsZXQgYWN0aW9uQXJnczogW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXJdID0gW1xuICAgICAgZWxlbWVudCxcbiAgICAgIHBhcmVudEZyYW1lLmNoaWxkSW5kZXghLFxuICAgICAgcGFyZW50RnJhbWUuY2hpbGRDb3VudCFcbiAgICBdO1xuXG4gICAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChbJ2Nsb3NlRWxlbWVudCcsIGFjdGlvbkFyZ3NdKTtcblxuICAgIGZvciAobGV0IGkgPSBlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMudmlzaXQoZWxlbWVudC5hdHRyaWJ1dGVzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZWxlbWVudEZyYW1lLmNoaWxkSW5kZXggPSBpO1xuICAgICAgdGhpcy52aXNpdChlbGVtZW50LmNoaWxkcmVuW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgb3BlbiA9IFsnb3BlbkVsZW1lbnQnLCBbLi4uYWN0aW9uQXJncywgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQsIGVsZW1lbnRGcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKV1dIGFzIEFjdGlvbi5PcGVuRWxlbWVudDtcbiAgICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKG9wZW4pO1xuXG4gICAgdGhpcy5wb3BGcmFtZSgpO1xuXG4gICAgLy8gUHJvcGFnYXRlIHRoZSBlbGVtZW50J3MgZnJhbWUgc3RhdGUgdG8gdGhlIHBhcmVudCBmcmFtZVxuICAgIGlmIChlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCA+IDApIHsgcGFyZW50RnJhbWUubXVzdGFjaGVDb3VudCsrOyB9XG4gICAgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50ICs9IGVsZW1lbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQ7XG4gICAgcGFyZW50RnJhbWUuYWN0aW9ucy5wdXNoKC4uLmVsZW1lbnRGcmFtZS5hY3Rpb25zKTtcbiAgfVxuXG4gIEF0dHJOb2RlKGF0dHI6IEFTVC5BdHRyTm9kZSkge1xuICAgIGlmIChhdHRyLnZhbHVlLnR5cGUgIT09ICdUZXh0Tm9kZScpIHtcbiAgICAgIHRoaXMuY3VycmVudEZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICB9XG4gIH07XG5cbiAgVGV4dE5vZGUodGV4dDogQVNULlRleHROb2RlKSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgaWYgKHRleHQuY2hhcnMgPT09ICcnKSB7XG4gICAgICBmcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzIS5wdXNoKGRvbUluZGV4T2YoZnJhbWUuY2hpbGRyZW4hLCB0ZXh0KSk7XG4gICAgfVxuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ3RleHQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgQmxvY2tTdGF0ZW1lbnQobm9kZTogQVNULkJsb2NrU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG5cbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnYmxvY2snLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG5cbiAgICBpZiAobm9kZS5pbnZlcnNlKSB7IHRoaXMudmlzaXQobm9kZS5pbnZlcnNlKTsgfVxuICAgIGlmIChub2RlLnByb2dyYW0pIHsgdGhpcy52aXNpdChub2RlLnByb2dyYW0pOyB9XG4gIH07XG5cbiAgUGFydGlhbFN0YXRlbWVudChub2RlOiBBU1QuUGFydGlhbFN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydtdXN0YWNoZScsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBDb21tZW50U3RhdGVtZW50KHRleHQ6IEFTVC5Db21tZW50U3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnY29tbWVudCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBNdXN0YWNoZUNvbW1lbnRTdGF0ZW1lbnQoKSB7XG4gICAgLy8gSW50ZW50aW9uYWwgZW1wdHk6IEhhbmRsZWJhcnMgY29tbWVudHMgc2hvdWxkIG5vdCBhZmZlY3Qgb3V0cHV0LlxuICB9O1xuXG4gIE11c3RhY2hlU3RhdGVtZW50KG11c3RhY2hlOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbXVzdGFjaGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIC8vIEZyYW1lIGhlbHBlcnNcblxuICBwcml2YXRlIGdldCBjdXJyZW50RnJhbWUoKTogRnJhbWUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5nZXRDdXJyZW50RnJhbWUoKSwgXCJFeHBlY3RlZCBhIGN1cnJlbnQgZnJhbWVcIik7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRGcmFtZSgpOiBPcHRpb248RnJhbWU+IHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZVN0YWNrW3RoaXMuZnJhbWVTdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEZyYW1lKCkge1xuICAgIGxldCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuZnJhbWVTdGFjay5wdXNoKGZyYW1lKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBwcml2YXRlIHBvcEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgYGRvbU5vZGVgIGluIHRoZSBgbm9kZXNgIGFycmF5LCBza2lwcGluZ1xuLy8gb3ZlciBhbnkgbm9kZXMgd2hpY2ggZG8gbm90IHJlcHJlc2VudCBET00gbm9kZXMuXG5mdW5jdGlvbiBkb21JbmRleE9mKG5vZGVzOiBBU1QuTm9kZVtdLCBkb21Ob2RlOiBBU1QuVGV4dE5vZGUgfCBBU1QuRWxlbWVudE5vZGUpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBub2RlID0gbm9kZXNbaV07XG5cbiAgICBpZiAobm9kZS50eXBlICE9PSAnVGV4dE5vZGUnICYmIG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykge1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGRvbU5vZGUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi90ZW1wbGF0ZS12aXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLEFBQU8sU0FBZ0IsQUFBSSxNQUFFLEFBQVcsQUFBRSxBQUFNLEFBQUUsbUJBQU0sQUFBZSxBQUFDO0FBRXhFLEFBQU07QUFDSixBQUFNLFdBQUMsQUFBRztBQUNSLEFBQU0sZUFBQyxJQUFJLEFBQWtCLEFBQUUsQUFBQyxBQUNsQztBQUFDO0FBWUQsQUFBSyxVQUFDLEFBQWdCO0FBQ3BCLFlBQUksQUFBTyxVQUFHLEFBQU0sT0FBQyxBQUFHLElBQUMsQUFBSSxRQUFJLEFBQUksS0FBQyxBQUFRLFNBQUMsQUFBSSxBQUFDLEFBQUMsQUFBQztBQUN0RCxBQUFNLGVBQUMsSUFBSSxBQUFnQixpQkFBQyxBQUFJLE1BQUUsQUFBTSxRQUFFLEFBQU8sQUFBQyxBQUFDLEFBQ3JEO0FBQUMsQUFDRjs7QUFFRCxBQUFNLGFBQTBCLDJCQUFRLEFBQVc7QUFBbkQ7O0FBQ1MsYUFBTyxVQUFhLEFBQUUsQUFBQztBQUV0QixhQUFJLE9BQUcsQUFBQyxBQUFDO0FBQ1QsYUFBSyxRQUFHLEFBQUksQUFBVSxBQUFDO0FBQ3ZCLGFBQU0sU0FBRyxBQUFJLEFBQVUsQUFBQyxBQTBDbEM7QUFBQztBQXhDQyxBQUFHLFFBQUMsQUFBYTtBQUNmLEFBQU0sZUFBQyxBQUFLLEFBQUMsQUFDZjtBQUFDO0FBRUQsQUFBRyxRQUFDLEFBQWE7QUFDZixjQUFNLEFBQVcsQUFBRSxBQUFDLEFBQ3RCO0FBQUM7QUFFRCxBQUFZO0FBQ1YsQUFBTSxlQUFDLEFBQUUsQUFBQyxBQUNaO0FBQUM7QUFFRCxBQUFXO0FBQ1QsQUFBTSxlQUFDLEFBQUUsQUFBQyxBQUNaO0FBQUM7QUFFRCxBQUFhLGtCQUFDLEFBQVk7QUFDeEIsWUFBSSxBQUFLLFFBQUcsQUFB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ZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcbmltcG9ydCB7IENvcmUgfSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5pbXBvcnQgeyBEaWN0LCBPcHRpb24sIGRpY3QsIHVucmVhY2hhYmxlLCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN5bWJvbFRhYmxlIHtcbiAgc3RhdGljIHRvcCgpOiBQcm9ncmFtU3ltYm9sVGFibGUge1xuICAgIHJldHVybiBuZXcgUHJvZ3JhbVN5bWJvbFRhYmxlKCk7XG4gIH1cblxuICBhYnN0cmFjdCBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbiAgYWJzdHJhY3QgZ2V0KG5hbWU6IHN0cmluZyk6IG51bWJlcjtcblxuICBhYnN0cmFjdCBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+O1xuICBhYnN0cmFjdCBnZXRFdmFsSW5mbygpOiBDb3JlLkV2YWxJbmZvO1xuXG4gIGFic3RyYWN0IGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBhYnN0cmFjdCBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgYWJzdHJhY3QgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyO1xuXG4gIGNoaWxkKGxvY2Fsczogc3RyaW5nW10pOiBCbG9ja1N5bWJvbFRhYmxlIHtcbiAgICBsZXQgc3ltYm9scyA9IGxvY2Fscy5tYXAobmFtZSA9PiB0aGlzLmFsbG9jYXRlKG5hbWUpKTtcbiAgICByZXR1cm4gbmV3IEJsb2NrU3ltYm9sVGFibGUodGhpcywgbG9jYWxzLCBzeW1ib2xzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvZ3JhbVN5bWJvbFRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUge1xuICBwdWJsaWMgc3ltYm9sczogc3RyaW5nW10gPSBbXTtcblxuICBwcml2YXRlIHNpemUgPSAxO1xuICBwcml2YXRlIG5hbWVkID0gZGljdDxudW1iZXI+KCk7XG4gIHByaXZhdGUgYmxvY2tzID0gZGljdDxudW1iZXI+KCk7XG5cbiAgaGFzKF9uYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQoX25hbWU6IHN0cmluZyk6IG5ldmVyIHtcbiAgICB0aHJvdyB1bnJlYWNoYWJsZSgpO1xuICB9XG5cbiAgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbyB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBuYW1lZCA9IHRoaXMubmFtZWRbbmFtZV07XG5cbiAgICBpZiAoIW5hbWVkKSB7XG4gICAgICBuYW1lZCA9IHRoaXMubmFtZWRbbmFtZV0gPSB0aGlzLmFsbG9jYXRlKG5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBuYW1lZDtcbiAgfVxuXG4gIGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgYmxvY2sgPSB0aGlzLmJsb2Nrc1tuYW1lXTtcblxuICAgIGlmICghYmxvY2spIHtcbiAgICAgIGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV0gPSB0aGlzLmFsbG9jYXRlKGAmJHtuYW1lfWApO1xuICAgIH1cblxuICAgIHJldHVybiBibG9jaztcbiAgfVxuXG4gIGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgdGhpcy5zeW1ib2xzLnB1c2goaWRlbnRpZmllcik7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSsrO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbG9ja1N5bWJvbFRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcmVudDogU3ltYm9sVGFibGUsIHB1YmxpYyBzeW1ib2xzOiBzdHJpbmdbXSwgcHVibGljIHNsb3RzOiBudW1iZXJbXSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnN5bWJvbHMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHx8IHRoaXMucGFyZW50LmhhcyhuYW1lKTtcbiAgfVxuXG4gIGdldChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBzbG90ID0gdGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSk7XG4gICAgcmV0dXJuIHNsb3QgPT09IC0xID8gdGhpcy5wYXJlbnQuZ2V0KG5hbWUpIDogdGhpcy5zbG90c1tzbG90XTtcbiAgfVxuXG4gIGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj4ge1xuICAgIGxldCBkaWN0ID0gdGhpcy5wYXJlbnQuZ2V0TG9jYWxzTWFwKCk7XG4gICAgdGhpcy5zeW1ib2xzLmZvckVhY2goc3ltYm9sID0+IGRpY3Rbc3ltYm9sXSA9IHRoaXMuZ2V0KHN5bWJvbCkpO1xuICAgIHJldHVybiBkaWN0O1xuICB9XG5cbiAgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbyB7XG4gICAgbGV0IGxvY2FscyA9IHRoaXMuZ2V0TG9jYWxzTWFwKCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxvY2FscykubWFwKHN5bWJvbCA9PiBsb2NhbHNbc3ltYm9sXSk7XG4gIH1cblxuICBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlTmFtZWQobmFtZSk7XG4gIH1cblxuICBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlQmxvY2sobmFtZSk7XG4gIH1cblxuICBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZShpZGVudGlmaWVyKTtcbiAgfVxufVxuXG4vKipcbiAqIFRha2VzIGluIGFuIEFTVCBhbmQgb3V0cHV0cyBhIGxpc3Qgb2YgYWN0aW9ucyB0byBiZSBjb25zdW1lZFxuICogYnkgYSBjb21waWxlci4gRm9yIGV4YW1wbGUsIHRoZSB0ZW1wbGF0ZVxuICpcbiAqICAgICBmb297e2Jhcn19PGRpdj5iYXo8L2Rpdj5cbiAqXG4gKiBwcm9kdWNlcyB0aGUgYWN0aW9uc1xuICpcbiAqICAgICBbWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAzXV0sXG4gKiAgICAgIFsnbXVzdGFjaGUnLCBbbXVzdGFjaGVOb2RlLCAxLCAzXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDIsIDMsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhpcyB2aXNpdG9yIHdhbGtzIHRoZSBBU1QgZGVwdGggZmlyc3QgYW5kIGJhY2t3YXJkcy4gQXNcbiAqIGEgcmVzdWx0IHRoZSBib3R0b20tbW9zdCBjaGlsZCB0ZW1wbGF0ZSB3aWxsIGFwcGVhciBhdCB0aGVcbiAqIHRvcCBvZiB0aGUgYWN0aW9ucyBsaXN0IHdoZXJlYXMgdGhlIHJvb3QgdGVtcGxhdGUgd2lsbCBhcHBlYXJcbiAqIGF0IHRoZSBib3R0b20gb2YgdGhlIGxpc3QuIEZvciBleGFtcGxlLFxuICpcbiAqICAgICA8ZGl2Pnt7I2lmfX1mb297e2Vsc2V9fWJhcjxiPjwvYj57ey9pZn19PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMiwgMF1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyLCAwXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV0sXG4gKiAgICAgIFsnc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAyXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDEsIDFdXSxcbiAqICAgICAgWydibG9jaycsIFtibG9ja05vZGUsIDAsIDFdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgaXMgbWFpbnRhaW5lZCBieSBhIHN0YWNrIG9mIGZyYW1lcy5cbiAqIFdoZW5ldmVyIGEgbm9kZSB3aXRoIGNoaWxkcmVuIGlzIGVudGVyZWQgKGVpdGhlciBhIFByb2dyYW1Ob2RlXG4gKiBvciBhbiBFbGVtZW50Tm9kZSkgYSBmcmFtZSBpcyBwdXNoZWQgb250byB0aGUgc3RhY2suIFRoZSBmcmFtZVxuICogY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgb2YgdGhhdFxuICogbm9kZS4gRm9yIGV4YW1wbGUsXG4gKlxuICogICAtIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoaWxkIG5vZGUgYmVpbmcgdmlzaXRlZFxuICogICAtIHRoZSBudW1iZXIgb2YgbXVzdGFjaGVzIGNvbnRhaW5lZCB3aXRoaW4gaXRzIGNoaWxkIG5vZGVzXG4gKiAgIC0gdGhlIGxpc3Qgb2YgYWN0aW9ucyBnZW5lcmF0ZWQgYnkgaXRzIGNoaWxkIG5vZGVzXG4gKi9cblxuY2xhc3MgRnJhbWUge1xuICBwdWJsaWMgcGFyZW50Tm9kZTogT3B0aW9uPE9iamVjdD4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRyZW46IE9wdGlvbjxBU1QuTm9kZVtdPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZEluZGV4OiBPcHRpb248bnVtYmVyPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZENvdW50OiBPcHRpb248bnVtYmVyPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZFRlbXBsYXRlQ291bnQgPSAwO1xuICBwdWJsaWMgbXVzdGFjaGVDb3VudCA9IDA7XG4gIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwdWJsaWMgYmxhbmtDaGlsZFRleHROb2RlczogT3B0aW9uPG51bWJlcltdPiA9IG51bGw7XG4gIHB1YmxpYyBzeW1ib2xzOiBPcHRpb248U3ltYm9sVGFibGU+ID0gbnVsbDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY3Rpb24ge1xuICBleHBvcnQgdHlwZSBTdGFydFByb2dyYW0gPSBbJ3N0YXJ0UHJvZ3JhbScsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBFbmRQcm9ncmFtID0gWydlbmRQcm9ncmFtJywgW0FTVC5Qcm9ncmFtLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgU3RhcnRCbG9jayA9IFsnc3RhcnRCbG9jaycsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBFbmRCbG9jayA9IFsnZW5kQmxvY2snLCBbQVNULlByb2dyYW0sIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBCbG9jayA9IFsnYmxvY2snLCBbQVNULkJsb2NrU3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBNdXN0YWNoZSA9IFsnbXVzdGFjaGUnLCBbQVNULk11c3RhY2hlU3RhdGVtZW50IHwgQVNULlBhcnRpYWxTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIE9wZW5FbGVtZW50ID0gWydvcGVuRWxlbWVudCcsIFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIENsb3NlRWxlbWVudCA9IFsnY2xvc2VFbGVtZW50JywgW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgVGV4dCA9IFsndGV4dCcsIFtBU1QuVGV4dE5vZGUsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIENvbW1lbnQgPSBbJ2NvbW1lbnQnLCBbQVNULkNvbW1lbnRTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uID1cbiAgICAgIFN0YXJ0UHJvZ3JhbVxuICAgIHwgRW5kUHJvZ3JhbVxuICAgIHwgU3RhcnRCbG9ja1xuICAgIHwgRW5kQmxvY2tcbiAgICB8IEJsb2NrXG4gICAgfCBNdXN0YWNoZVxuICAgIHwgT3BlbkVsZW1lbnRcbiAgICB8IENsb3NlRWxlbWVudFxuICAgIHwgVGV4dFxuICAgIHwgQ29tbWVudFxuICAgIDtcbn1cblxuZXhwb3J0IHR5cGUgQWN0aW9uID0gQWN0aW9uLkFjdGlvbjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVtcGxhdGVWaXNpdG9yIHtcbiAgcHJpdmF0ZSBmcmFtZVN0YWNrOiBGcmFtZVtdID0gW107XG4gIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIHByb2dyYW1EZXB0aCA9IC0xO1xuXG4gIHZpc2l0KG5vZGU6IEFTVC5CYXNlTm9kZSkge1xuICAgIHRoaXNbbm9kZS50eXBlXShub2RlKTtcbiAgfVxuXG4gIC8vIFRyYXZlcnNhbCBtZXRob2RzXG5cbiAgUHJvZ3JhbShwcm9ncmFtOiBBU1QuUHJvZ3JhbSkge1xuICAgIHRoaXMucHJvZ3JhbURlcHRoKys7XG5cbiAgICBsZXQgcGFyZW50RnJhbWUgPSB0aGlzLmdldEN1cnJlbnRGcmFtZSgpO1xuICAgIGxldCBwcm9ncmFtRnJhbWUgPSB0aGlzLnB1c2hGcmFtZSgpO1xuXG4gICAgaWYgKCFwYXJlbnRGcmFtZSkge1xuICAgICAgcHJvZ3JhbVsnc3ltYm9scyddID0gU3ltYm9sVGFibGUudG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IHBhcmVudEZyYW1lLnN5bWJvbHMhLmNoaWxkKHByb2dyYW0uYmxvY2tQYXJhbXMpO1xuICAgIH1cblxuICAgIGxldCBzdGFydFR5cGU6IHN0cmluZywgZW5kVHlwZTogc3RyaW5nO1xuXG4gICAgaWYgKHRoaXMucHJvZ3JhbURlcHRoID09PSAwKSB7XG4gICAgICBzdGFydFR5cGUgPSAnc3RhcnRQcm9ncmFtJztcbiAgICAgIGVuZFR5cGUgPSAnZW5kUHJvZ3JhbSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VHlwZSA9ICdzdGFydEJsb2NrJztcbiAgICAgIGVuZFR5cGUgPSAnZW5kQmxvY2snO1xuICAgIH1cblxuICAgIHByb2dyYW1GcmFtZS5wYXJlbnROb2RlID0gcHJvZ3JhbTtcbiAgICBwcm9ncmFtRnJhbWUuY2hpbGRyZW4gPSBwcm9ncmFtLmJvZHk7XG4gICAgcHJvZ3JhbUZyYW1lLmNoaWxkQ291bnQgPSBwcm9ncmFtLmJvZHkubGVuZ3RoO1xuICAgIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzID0gW107XG4gICAgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucHVzaChbZW5kVHlwZSwgW3Byb2dyYW0sIHRoaXMucHJvZ3JhbURlcHRoXV0gYXMgQWN0aW9uKTtcbiAgICBwcm9ncmFtRnJhbWUuc3ltYm9scyA9IHByb2dyYW1bJ3N5bWJvbHMnXTtcblxuICAgIGZvciAobGV0IGkgPSBwcm9ncmFtLmJvZHkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHByb2dyYW1GcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICAgIHRoaXMudmlzaXQocHJvZ3JhbS5ib2R5W2ldKTtcbiAgICB9XG5cbiAgICBwcm9ncmFtRnJhbWUuYWN0aW9ucy5wdXNoKFtzdGFydFR5cGUsIFtcbiAgICAgIHByb2dyYW0sIHByb2dyYW1GcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQsXG4gICAgICBwcm9ncmFtRnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5yZXZlcnNlKClcbiAgICBdXSBhcyBBY3Rpb24pO1xuICAgIHRoaXMucG9wRnJhbWUoKTtcblxuICAgIHRoaXMucHJvZ3JhbURlcHRoLS07XG5cbiAgICAvLyBQdXNoIHRoZSBjb21wbGV0ZWQgdGVtcGxhdGUgaW50byB0aGUgZ2xvYmFsIGFjdGlvbnMgbGlzdFxuICAgIGlmIChwYXJlbnRGcmFtZSkgeyBwYXJlbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQrKzsgfVxuICAgIHRoaXMuYWN0aW9ucy5wdXNoKC4uLnByb2dyYW1GcmFtZS5hY3Rpb25zLnJldmVyc2UoKSk7XG4gIH1cblxuICBFbGVtZW50Tm9kZShlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgcGFyZW50RnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBsZXQgZWxlbWVudEZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcblxuICAgIGVsZW1lbnRGcmFtZS5wYXJlbnROb2RlID0gZWxlbWVudDtcbiAgICBlbGVtZW50RnJhbWUuY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuO1xuICAgIGVsZW1lbnRGcmFtZS5jaGlsZENvdW50ID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7XG4gICAgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQgKz0gZWxlbWVudC5tb2RpZmllcnMubGVuZ3RoO1xuICAgIGVsZW1lbnRGcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzID0gW107XG4gICAgZWxlbWVudEZyYW1lLnN5bWJvbHMgPSBlbGVtZW50WydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzIS5jaGlsZChlbGVtZW50LmJsb2NrUGFyYW1zKTtcblxuICAgIGxldCBhY3Rpb25BcmdzOiBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgICBlbGVtZW50LFxuICAgICAgcGFyZW50RnJhbWUuY2hpbGRJbmRleCEsXG4gICAgICBwYXJlbnRGcmFtZS5jaGlsZENvdW50IVxuICAgIF07XG5cbiAgICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKFsnY2xvc2VFbGVtZW50JywgYWN0aW9uQXJnc10pO1xuXG4gICAgZm9yIChsZXQgaSA9IGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy52aXNpdChlbGVtZW50LmF0dHJpYnV0ZXNbaV0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBlbGVtZW50RnJhbWUuY2hpbGRJbmRleCA9IGk7XG4gICAgICB0aGlzLnZpc2l0KGVsZW1lbnQuY2hpbGRyZW5baV0pO1xuICAgIH1cblxuICAgIGxldCBvcGVuID0gWydvcGVuRWxlbWVudCcsIFsuLi5hY3Rpb25BcmdzLCBlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCwgZWxlbWVudEZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucmV2ZXJzZSgpXV0gYXMgQWN0aW9uLk9wZW5FbGVtZW50O1xuICAgIGVsZW1lbnRGcmFtZS5hY3Rpb25zLnB1c2gob3Blbik7XG5cbiAgICB0aGlzLnBvcEZyYW1lKCk7XG5cbiAgICAvLyBQcm9wYWdhdGUgdGhlIGVsZW1lbnQncyBmcmFtZSBzdGF0ZSB0byB0aGUgcGFyZW50IGZyYW1lXG4gICAgaWYgKGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ID4gMCkgeyBwYXJlbnRGcmFtZS5tdXN0YWNoZUNvdW50Kys7IH1cbiAgICBwYXJlbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQgKz0gZWxlbWVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudDtcbiAgICBwYXJlbnRGcmFtZS5hY3Rpb25zLnB1c2goLi4uZWxlbWVudEZyYW1lLmFjdGlvbnMpO1xuICB9XG5cbiAgQXR0ck5vZGUoYXR0cjogQVNULkF0dHJOb2RlKSB7XG4gICAgaWYgKGF0dHIudmFsdWUudHlwZSAhPT0gJ1RleHROb2RlJykge1xuICAgICAgdGhpcy5jdXJyZW50RnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIH1cbiAgfTtcblxuICBUZXh0Tm9kZSh0ZXh0OiBBU1QuVGV4dE5vZGUpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBpZiAodGV4dC5jaGFycyA9PT0gJycpIHtcbiAgICAgIGZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMhLnB1c2goZG9tSW5kZXhPZihmcmFtZS5jaGlsZHJlbiEsIHRleHQpKTtcbiAgICB9XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsndGV4dCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBCbG9ja1N0YXRlbWVudChub2RlOiBBU1QuQmxvY2tTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydibG9jaycsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcblxuICAgIGlmIChub2RlLmludmVyc2UpIHsgdGhpcy52aXNpdChub2RlLmludmVyc2UpOyB9XG4gICAgaWYgKG5vZGUucHJvZ3JhbSkgeyB0aGlzLnZpc2l0KG5vZGUucHJvZ3JhbSk7IH1cbiAgfTtcblxuICBQYXJ0aWFsU3RhdGVtZW50KG5vZGU6IEFTVC5QYXJ0aWFsU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ211c3RhY2hlJywgW25vZGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIENvbW1lbnRTdGF0ZW1lbnQodGV4dDogQVNULkNvbW1lbnRTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydjb21tZW50JywgW3RleHQsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIE11c3RhY2hlQ29tbWVudFN0YXRlbWVudCgpIHtcbiAgICAvLyBJbnRlbnRpb25hbCBlbXB0eTogSGFuZGxlYmFycyBjb21tZW50cyBzaG91bGQgbm90IGFmZmVjdCBvdXRwdXQuXG4gIH07XG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQobXVzdGFjaGU6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydtdXN0YWNoZScsIFttdXN0YWNoZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgLy8gRnJhbWUgaGVscGVyc1xuXG4gIHByaXZhdGUgZ2V0IGN1cnJlbnRGcmFtZSgpOiBGcmFtZSB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmdldEN1cnJlbnRGcmFtZSgpLCBcIkV4cGVjdGVkIGEgY3VycmVudCBmcmFtZVwiKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudEZyYW1lKCk6IE9wdGlvbjxGcmFtZT4ge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2tbdGhpcy5mcmFtZVN0YWNrLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoRnJhbWUoKSB7XG4gICAgbGV0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5mcmFtZVN0YWNrLnB1c2goZnJhbWUpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wRnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiBgZG9tTm9kZWAgaW4gdGhlIGBub2Rlc2AgYXJyYXksIHNraXBwaW5nXG4vLyBvdmVyIGFueSBub2RlcyB3aGljaCBkbyBub3QgcmVwcmVzZW50IERPTSBub2Rlcy5cbmZ1bmN0aW9uIGRvbUluZGV4T2Yobm9kZXM6IEFTVC5Ob2RlW10sIGRvbU5vZGU6IEFTVC5UZXh0Tm9kZSB8IEFTVC5FbGVtZW50Tm9kZSkge1xuICBsZXQgaW5kZXggPSAtMTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG5vZGUgPSBub2Rlc1tpXTtcblxuICAgIGlmIChub2RlLnR5cGUgIT09ICdUZXh0Tm9kZScgJiYgbm9kZS50eXBlICE9PSAnRWxlbWVudE5vZGUnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gZG9tTm9kZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cbiJdfQ==

@@ -161,10 +161,9 @@ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

this.opcodes.forEach(function (_ref) {
var opcode = _ref[0],
args = _ref.slice(1);
this.opcodes.forEach(function (op) {
var opcode = op[0];
var arg = op[1];
if (!_this4[opcode]) {
throw new Error("unimplemented " + opcode + " on JavaScriptCompiler");
}
_this4[opcode].apply(_this4, args);
_this4[opcode](arg);
});

@@ -176,5 +175,3 @@ return this.template;

JavaScriptCompiler.prototype.startBlock = function startBlock(_ref2) {
var program = _ref2[0];
JavaScriptCompiler.prototype.startBlock = function startBlock(program) {
var block = new InlineBlock(program['symbols']);

@@ -218,3 +215,7 @@ this.blocks.push(block);

JavaScriptCompiler.prototype.block = function block(name, template, inverse) {
JavaScriptCompiler.prototype.block = function block(_ref) {
var name = _ref[0],
template = _ref[1],
inverse = _ref[2];
var params = this.popValue();

@@ -269,3 +270,6 @@ var hash = this.popValue();

JavaScriptCompiler.prototype.staticAttr = function staticAttr(name, namespace) {
JavaScriptCompiler.prototype.staticAttr = function staticAttr(_ref2) {
var name = _ref2[0],
namespace = _ref2[1];
var value = this.popValue();

@@ -275,3 +279,6 @@ this.push([Ops.StaticAttr, name, value, namespace]);

JavaScriptCompiler.prototype.dynamicAttr = function dynamicAttr(name, namespace) {
JavaScriptCompiler.prototype.dynamicAttr = function dynamicAttr(_ref3) {
var name = _ref3[0],
namespace = _ref3[1];
var value = this.popValue();

@@ -281,3 +288,6 @@ this.push([Ops.DynamicAttr, name, value, namespace]);

JavaScriptCompiler.prototype.trustingAttr = function trustingAttr(name, namespace) {
JavaScriptCompiler.prototype.trustingAttr = function trustingAttr(_ref4) {
var name = _ref4[0],
namespace = _ref4[1];
var value = this.popValue();

@@ -339,3 +349,6 @@ this.push([Ops.TrustingAttr, name, value, namespace]);

JavaScriptCompiler.prototype.get = function get(head, path) {
JavaScriptCompiler.prototype.get = function get(_ref5) {
var head = _ref5[0],
path = _ref5[1];
this.pushValue([Ops.Get, head, path]);

@@ -427,2 +440,2 @@ };

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9qYXZhc2NyaXB0LWNvbXBpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxBQUFPLFNBQUUsQUFBTSxBQUFFLGNBQU0sQUFBZSxBQUFDO0FBQ3ZDLEFBQU8sU0FBRSxBQUFLLE9BQUUsQUFBTyxBQUFVLEFBQU0sQUFBRSxlQUFNLEFBQWUsQUFBQztBQUkvRCxBQUFPLFNBUUwsQUFBRyxLQUNILEFBQVUsWUFDVixBQUFjLGdCQUNkLEFBQVUsWUFDVixBQUFXLEFBQ1osbUJBQU0sQUFBc0IsQUFBQztBQVE5QixBQUFNLFdBQU47O0FBQ1M7O2FBQVUsYUFBZ0IsQUFBRSxBQUFDLEFBT3RDLEFBQUM7QUFIQyxBQUFJOzt5Q0FBQyxBQUFvQixXQUN2QixBQUFJO2FBQUMsQUFBVSxXQUFDLEFBQUksS0FBQyxBQUFTLEFBQUMsQUFBQyxBQUNsQyxBQUFDLEFBQ0Y7Ozs7O0FBRUQsQUFBTSxXQUFtQjs7O3lCQUNKLEFBQXVCO0FBQ3hDLEFBQUssQUFBRSxBQUFDOztxREFEUzs7Y0FBSyxRQUFMLEFBQUssQUFBa0IsQUFFMUMsQUFBQzs7QUFFRCxBQUFNOztxREFDSixBQUFNOzt3QkFDUSxBQUFJLEtBQUMsQUFBVSxBQUMzQixBQUFVO3dCQUFFLEFBQUksS0FBQyxBQUFLLE1BRmpCLEFBRWtCLEFBQUssQUFDN0IsQUFBQyxBQUNKLEFBQUMsQUFDRjtBQUpLLEFBQVU7Ozs7RUFQaUIsQUFBSyxBQUNwQztBQVlGLEFBQU0sV0FBcUI7OzsyQkFPTCxBQUErQjtBQUNqRCxBQUFLLEFBQUUsQUFBQzs7c0RBRFU7O2VBQVcsY0FOeEIsQUFNYSxBQUFXLEFBQW9CO2VBTnhDLE9BQUcsQUFBVSxBQUFDLEFBQ2xCO2VBQU0sU0FBRyxJQUFJLEFBQU8sQUFBVSxBQUFDLEFBQy9CO2VB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QUcsQUFBRyxJQUFDLEFBQU0sT0FBQyxBQUFDLEFBQUMsQUFBQyxBQUV6QixBQUFNO1dBQUMsQUFBSSxTQUFLLEFBQUksS0FBQyxBQUFXLEFBQUUsQUFBQyxBQUNyQyxBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IFN0YWNrLCBEaWN0U2V0LCBPcHRpb24sIGV4cGVjdCB9IGZyb20gXCJAZ2xpbW1lci91dGlsXCI7XG5pbXBvcnQgeyBBU1QgfSBmcm9tICdAZ2xpbW1lci9zeW50YXgnO1xuaW1wb3J0IHsgQmxvY2tTeW1ib2xUYWJsZSwgUHJvZ3JhbVN5bWJvbFRhYmxlIH0gZnJvbSAnLi90ZW1wbGF0ZS12aXNpdG9yJztcblxuaW1wb3J0IHtcbiAgU2VyaWFsaXplZElubGluZUJsb2NrLFxuICBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayxcbiAgQ29yZSxcbiAgU3RhdGVtZW50LFxuICBTdGF0ZW1lbnRzLFxuICBFeHByZXNzaW9uLFxuICBFeHByZXNzaW9ucyxcbiAgT3BzLFxuICBpc01vZGlmaWVyLFxuICBpc0ZsdXNoRWxlbWVudCxcbiAgaXNBcmd1bWVudCxcbiAgaXNBdHRyaWJ1dGVcbn0gZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuXG5leHBvcnQgdHlwZSBzdHIgPSBzdHJpbmc7XG5leHBvcnQgdHlwZSBQYXJhbXMgPSBDb3JlLlBhcmFtcztcbmV4cG9ydCB0eXBlIEhhc2ggPSBDb3JlLkhhc2g7XG5leHBvcnQgdHlwZSBQYXRoID0gQ29yZS5QYXRoO1xuZXhwb3J0IHR5cGUgU3RhY2tWYWx1ZSA9IEV4cHJlc3Npb24gfCBQYXJhbXMgfCBIYXNoIHwgc3RyO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmxvY2sge1xuICBwdWJsaWMgc3RhdGVtZW50czogU3RhdGVtZW50W10gPSBbXTtcblxuICBhYnN0cmFjdCB0b0pTT04oKTogT2JqZWN0O1xuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbmxpbmVCbG9jayBleHRlbmRzIEJsb2NrIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRhYmxlOiBCbG9ja1N5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkSW5saW5lQmxvY2sge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZW1lbnRzOiB0aGlzLnN0YXRlbWVudHMsXG4gICAgICBwYXJhbWV0ZXJzOiB0aGlzLnRhYmxlLnNsb3RzXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVCbG9jayBleHRlbmRzIEJsb2NrIHtcbiAgcHVibGljIHR5cGUgPSBcInRlbXBsYXRlXCI7XG4gIHB1YmxpYyB5aWVsZHMgPSBuZXcgRGljdFNldDxzdHJpbmc+KCk7XG4gIHB1YmxpYyBuYW1lZCA9IG5ldyBEaWN0U2V0PHN0cmluZz4oKTtcbiAgcHVibGljIGJsb2NrczogU2VyaWFsaXplZElubGluZUJsb2NrW10gPSBbXTtcbiAgcHVibGljIGhhc0V2YWwgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN5bWJvbFRhYmxlOiBQcm9ncmFtU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gIH1cblxuICB0b0pTT04oKTogU2VyaWFsaXplZFRlbXBsYXRlQmxvY2sge1xuICAgIHJldHVybiB7XG4gICAgICBzeW1ib2xzOiB0aGlzLnN5bWJvbFRhYmxlLnN5bWJvbHMsXG4gICAgICBzdGF0ZW1lbnRzOiB0aGlzLnN0YXRlbWVudHMsXG4gICAgICBoYXNFdmFsOiB0aGlzLmhhc0V2YWxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRCbG9jayBleHRlbmRzIEJsb2NrIHtcbiAgcHVibGljIGF0dHJpYnV0ZXM6IFN0YXRlbWVudHMuQXR0cmlidXRlW10gPSBbXTtcbiAgcHVibGljIGFyZ3VtZW50czogU3RhdGVtZW50cy5Bcmd1bWVudFtdID0gW107XG4gIHByaXZhdGUgaW5QYXJhbXMgPSB0cnVlO1xuICBwdWJsaWMgcG9zaXRpb25hbHM6IG51bWJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0YWJsZTogQmxvY2tTeW1ib2xUYWJsZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdXNoKHN0YXRlbWVudDogU3RhdGVtZW50KSB7XG4gICAgaWYgKHRoaXMuaW5QYXJhbXMpIHtcbiAgICAgIGlmIChpc01vZGlmaWVyKHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBFbGVtZW50IG1vZGlmaWVycyBhcmUgbm90IGFsbG93ZWQgaW4gY29tcG9uZW50cycpO1xuICAgICAgfSBlbHNlIGlmIChpc0ZsdXNoRWxlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuaW5QYXJhbXMgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNBcmd1bWVudChzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuYXJndW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNBdHRyaWJ1dGUoc3RhdGVtZW50KSkge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21waWxlIEVycm9yOiBvbmx5IHBhcmFtZXRlcnMgYWxsb3dlZCBiZWZvcmUgZmx1c2gtZWxlbWVudCcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHRvSlNPTigpOiBbU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSwgQ29yZS5IYXNoLCBPcHRpb248U2VyaWFsaXplZElubGluZUJsb2NrPl0ge1xuICAgIGxldCBhcmdzID0gdGhpcy5hcmd1bWVudHM7XG4gICAgbGV0IGtleXMgPSBhcmdzLm1hcChhcmcgPT4gYXJnWzFdKTtcbiAgICBsZXQgdmFsdWVzID0gYXJncy5tYXAoYXJnID0+IGFyZ1syXSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgdGhpcy5hdHRyaWJ1dGVzLFxuICAgICAgW2tleXMsIHZhbHVlc10sXG4gICAgICB7XG4gICAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgICAgcGFyYW1ldGVyczogdGhpcy50YWJsZS5zbG90c1xuICAgICAgfVxuICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlIHtcbiAgcHVibGljIGJsb2NrOiBUZW1wbGF0ZUJsb2NrO1xuXG4gIGNvbnN0cnVjdG9yKHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSkge1xuICAgIHRoaXMuYmxvY2sgPSBuZXcgVGVtcGxhdGVCbG9jayhzeW1ib2xzKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayB7XG4gICAgcmV0dXJuIHRoaXMuYmxvY2sudG9KU09OKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSmF2YVNjcmlwdENvbXBpbGVyIHtcbiAgc3RhdGljIHByb2Nlc3Mob3Bjb2RlczogYW55W10sIHN5bWJvbHM6IFByb2dyYW1TeW1ib2xUYWJsZSk6IFRlbXBsYXRlIHtcbiAgICBsZXQgY29tcGlsZXIgPSBuZXcgSmF2YVNjcmlwdENvbXBpbGVyKG9wY29kZXMsIHN5bWJvbHMpO1xuICAgIHJldHVybiBjb21waWxlci5wcm9jZXNzKCk7XG4gIH1cblxuICBwcml2YXRlIHRlbXBsYXRlOiBUZW1wbGF0ZTtcbiAgcHJpdmF0ZSBibG9ja3MgPSBuZXcgU3RhY2s8QmxvY2s+KCk7XG4gIHByaXZhdGUgb3Bjb2RlczogYW55W107XG4gIHByaXZhdGUgdmFsdWVzOiBTdGFja1ZhbHVlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihvcGNvZGVzOiBhbnlbXSwgc3ltYm9sczogUHJvZ3JhbVN5bWJvbFRhYmxlKSB7XG4gICAgdGhpcy5vcGNvZGVzID0gb3Bjb2RlcztcbiAgICB0aGlzLnRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKHN5bWJvbHMpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRCbG9jaygpOiBCbG9jayB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmJsb2Nrcy5jdXJyZW50LCAnRXhwZWN0ZWQgYSBibG9jayBvbiB0aGUgc3RhY2snKTtcbiAgfVxuXG4gIHByb2Nlc3MoKTogVGVtcGxhdGUge1xuICAgIHRoaXMub3Bjb2Rlcy5mb3JFYWNoKChbb3Bjb2RlLCAuLi5hcmdzXSkgPT4ge1xuICAgICAgaWYgKCF0aGlzW29wY29kZV0pIHsgdGhyb3cgbmV3IEVycm9yKGB1bmltcGxlbWVudGVkICR7b3Bjb2RlfSBvbiBKYXZhU2NyaXB0Q29tcGlsZXJgKTsgfVxuICAgICAgdGhpc1tvcGNvZGVdKC4uLmFyZ3MpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGU7XG4gIH1cblxuICAvLy8gTmVzdGluZ1xuXG4gIHN0YXJ0QmxvY2soW3Byb2dyYW1dOiBbQVNULlByb2dyYW1dKSB7XG4gICAgbGV0IGJsb2NrOiBCbG9jayA9IG5ldyBJbmxpbmVCbG9jayhwcm9ncmFtWydzeW1ib2xzJ10pO1xuICAgIHRoaXMuYmxvY2tzLnB1c2goYmxvY2spO1xuICB9XG5cbiAgZW5kQmxvY2soKSB7XG4gICAgbGV0IHsgdGVtcGxhdGUsIGJsb2NrcyB9ID0gdGhpcztcbiAgICBsZXQgYmxvY2sgPSBibG9ja3MucG9wKCkgYXMgSW5saW5lQmxvY2s7XG4gICAgdGVtcGxhdGUuYmxvY2suYmxvY2tzLnB1c2goYmxvY2sudG9KU09OKCkpO1xuICB9XG5cbiAgc3RhcnRQcm9ncmFtKCkge1xuICAgIHRoaXMuYmxvY2tzLnB1c2godGhpcy50ZW1wbGF0ZS5ibG9jayk7XG4gIH1cblxuICBlbmRQcm9ncmFtKCkge1xuXG4gIH1cblxuICAvLy8gU3RhdGVtZW50c1xuXG4gIHRleHQoY29udGVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuVGV4dCwgY29udGVudF0pO1xuICB9XG5cbiAgYXBwZW5kKHRydXN0ZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnB1c2goW09wcy5BcHBlbmQsIHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKSwgdHJ1c3RlZF0pO1xuICB9XG5cbiAgY29tbWVudCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuQ29tbWVudCwgdmFsdWVdKTtcbiAgfVxuXG4gIG1vZGlmaWVyKG5hbWU6IHN0cmluZykge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICBsZXQgaGFzaCA9IHRoaXMucG9wVmFsdWU8SGFzaD4oKTtcblxuICAgIHRoaXMucHVzaChbT3BzLk1vZGlmaWVyLCBuYW1lLCBwYXJhbXMsIGhhc2hdKTtcbiAgfVxuXG4gIGJsb2NrKG5hbWU6IHN0cmluZywgdGVtcGxhdGU6IG51bWJlciwgaW52ZXJzZTogbnVtYmVyKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgbGV0IGJsb2NrcyA9IHRoaXMudGVtcGxhdGUuYmxvY2suYmxvY2tzO1xuICAgIGFzc2VydCh0eXBlb2YgdGVtcGxhdGUgIT09ICdudW1iZXInIHx8IGJsb2Nrc1t0ZW1wbGF0ZV0gIT09IG51bGwsICdtaXNzaW5nIGJsb2NrIGluIHRoZSBjb21waWxlcicpO1xuICAgIGFzc2VydCh0eXBlb2YgaW52ZXJzZSAhPT0gJ251bWJlcicgfHwgYmxvY2tzW2ludmVyc2VdICE9PSBudWxsLCAnbWlzc2luZyBibG9jayBpbiB0aGUgY29tcGlsZXInKTtcblxuICAgIHRoaXMucHVzaChbT3BzLkJsb2NrLCBuYW1lLCBwYXJhbXMsIGhhc2gsIGJsb2Nrc1t0ZW1wbGF0ZV0sIGJsb2Nrc1tpbnZlcnNlXV0pO1xuICB9XG5cbiAgb3BlblNwbGF0dGVkRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAoaXNDb21wb25lbnQodGFnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21waWxlIEVycm9yOiAuLi5hdHRyaWJ1dGVzIGNhbiBvbmx5IGJlIHVzZWQgaW4gYW4gZWxlbWVudGApO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ibG9ja1BhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGUgRXJyb3I6IDwke2VsZW1lbnQudGFnfT4gaXMgbm90IGEgY29tcG9uZW50IGFuZCBkb2Vzbid0IHN1cHBvcnQgYmxvY2sgcGFyYW1ldGVyc2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goW09wcy5PcGVuU3BsYXR0ZWRFbGVtZW50LCB0YWddKTtcbiAgICB9XG4gIH1cblxuICBvcGVuRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAoaXNDb21wb25lbnQodGFnKSkge1xuICAgICAgdGhpcy5zdGFydENvbXBvbmVudChlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYmxvY2tQYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21waWxlIEVycm9yOiA8JHtlbGVtZW50LnRhZ30+IGlzIG5vdCBhIGNvbXBvbmVudCBhbmQgZG9lc24ndCBzdXBwb3J0IGJsb2NrIHBhcmFtZXRlcnNgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKFtPcHMuT3BlbkVsZW1lbnQsIHRhZ10pO1xuICAgIH1cbiAgfVxuXG4gIGZsdXNoRWxlbWVudCgpIHtcbiAgICB0aGlzLnB1c2goW09wcy5GbHVzaEVsZW1lbnRdKTtcbiAgfVxuXG4gIGNsb3NlRWxlbWVudChlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgdGFnID0gZWxlbWVudC50YWc7XG5cbiAgICBpZiAoaXNDb21wb25lbnQodGFnKSkge1xuICAgICAgbGV0IFthdHRycywgYXJncywgYmxvY2tdID0gdGhpcy5lbmRDb21wb25lbnQoKTtcbiAgICAgIHRoaXMucHVzaChbT3BzLkNvbXBvbmVudCwgdGFnLCBhdHRycywgYXJncywgYmxvY2tdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoKFtPcHMuQ2xvc2VFbGVtZW50XSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljQXR0cihuYW1lOiBzdHIsIG5hbWVzcGFjZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLlN0YXRpY0F0dHIsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2VdKTtcbiAgfVxuXG4gIGR5bmFtaWNBdHRyKG5hbWU6IHN0ciwgbmFtZXNwYWNlOiBzdHIpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuRHluYW1pY0F0dHIsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2VdKTtcbiAgfVxuXG4gIHRydXN0aW5nQXR0cihuYW1lOiBzdHIsIG5hbWVzcGFjZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLlRydXN0aW5nQXR0ciwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZV0pO1xuICB9XG5cbiAgc3RhdGljQXJnKG5hbWU6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5TdGF0aWNBcmcsIG5hbWUsIHZhbHVlXSk7XG4gIH1cblxuICBkeW5hbWljQXJnKG5hbWU6IHN0cikge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMucG9wVmFsdWU8RXhwcmVzc2lvbj4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5EeW5hbWljQXJnLCBuYW1lLCB2YWx1ZV0pO1xuICB9XG5cbiAgeWllbGQodG86IG51bWJlcikge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5ZaWVsZCwgdG8sIHBhcmFtc10pO1xuICB9XG5cbiAgYXR0clNwbGF0KHRvOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2goW09wcy5BdHRyU3BsYXQsIHRvXSk7XG4gIH1cblxuICBkZWJ1Z2dlcihldmFsSW5mbzogQ29yZS5FdmFsSW5mbykge1xuICAgIHRoaXMucHVzaChbT3BzLkRlYnVnZ2VyLCBldmFsSW5mb10pO1xuICAgIHRoaXMudGVtcGxhdGUuYmxvY2suaGFzRXZhbCA9IHRydWU7XG4gIH1cblxuICBoYXNCbG9jayhuYW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9jaz4oW09wcy5IYXNCbG9jaywgbmFtZV0pO1xuICB9XG5cbiAgaGFzQmxvY2tQYXJhbXMobmFtZTogbnVtYmVyKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuSGFzQmxvY2tQYXJhbXM+KFtPcHMuSGFzQmxvY2tQYXJhbXMsIG5hbWVdKTtcbiAgfVxuXG4gIHBhcnRpYWwoZXZhbEluZm86IENvcmUuRXZhbEluZm8pIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuUGFydGlhbCwgcGFyYW1zWzBdLCBldmFsSW5mb10pO1xuICAgIHRoaXMudGVtcGxhdGUuYmxvY2suaGFzRXZhbCA9IHRydWU7XG4gIH1cblxuICAvLy8gRXhwcmVzc2lvbnNcblxuICBsaXRlcmFsKHZhbHVlOiBFeHByZXNzaW9ucy5WYWx1ZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5VbmRlZmluZWQ+KFtPcHMuVW5kZWZpbmVkXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlZhbHVlPih2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgdW5rbm93bihuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5Vbmtub3duPihbT3BzLlVua25vd24sIG5hbWVdKTtcbiAgfVxuXG4gIGdldChoZWFkOiBudW1iZXIsIHBhdGg6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuR2V0PihbT3BzLkdldCwgaGVhZCwgcGF0aF0pO1xuICB9XG5cbiAgbWF5YmVMb2NhbChwYXRoOiBzdHJpbmdbXSkge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLk1heWJlTG9jYWw+KFtPcHMuTWF5YmVMb2NhbCwgcGF0aF0pO1xuICB9XG5cbiAgY29uY2F0KCkge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkNvbmNhdD4oW09wcy5Db25jYXQsIHRoaXMucG9wVmFsdWU8UGFyYW1zPigpXSk7XG4gIH1cblxuICBoZWxwZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuSGVscGVyPihbT3BzLkhlbHBlciwgbmFtZSwgcGFyYW1zLCBoYXNoXSk7XG4gIH1cblxuICAvLy8gU3RhY2sgTWFuYWdlbWVudCBPcGNvZGVzXG5cbiAgc3RhcnRDb21wb25lbnQoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRCbG9jayhlbGVtZW50WydzeW1ib2xzJ10pO1xuICAgIHRoaXMuYmxvY2tzLnB1c2goY29tcG9uZW50KTtcbiAgfVxuXG4gIGVuZENvbXBvbmVudCgpOiBbU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSwgQ29yZS5IYXNoLCBPcHRpb248U2VyaWFsaXplZElubGluZUJsb2NrPl0ge1xuICAgIGxldCBjb21wb25lbnQgPSB0aGlzLmJsb2Nrcy5wb3AoKTtcbiAgICBhc3NlcnQoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50QmxvY2ssIFwiQ29tcGlsZXIgYnVnOiBlbmRDb21wb25lbnQoKSBzaG91bGQgZW5kIGEgY29tcG9uZW50XCIpO1xuICAgIHJldHVybiAoY29tcG9uZW50IGFzIENvbXBvbmVudEJsb2NrKS50b0pTT04oKTtcbiAgfVxuXG4gIHByZXBhcmVBcnJheShzaXplOiBudW1iZXIpIHtcbiAgICBsZXQgdmFsdWVzOiBFeHByZXNzaW9uW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICB2YWx1ZXMucHVzaCh0aGlzLnBvcFZhbHVlKCkgYXMgRXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8UGFyYW1zPih2YWx1ZXMpO1xuICB9XG5cbiAgcHJlcGFyZU9iamVjdChzaXplOiBudW1iZXIpIHtcbiAgICBhc3NlcnQodGhpcy52YWx1ZXMubGVuZ3RoID49IHNpemUsIGBFeHBlY3RlZCAke3NpemV9IHZhbHVlcyBvbiB0aGUgc3RhY2ssIGZvdW5kICR7dGhpcy52YWx1ZXMubGVuZ3RofWApO1xuXG4gICAgbGV0IGtleXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KHNpemUpO1xuICAgIGxldCB2YWx1ZXM6IEV4cHJlc3Npb25bXSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBrZXlzW2ldID0gdGhpcy5wb3BWYWx1ZTxzdHI+KCk7XG4gICAgICB2YWx1ZXNbaV0gPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8SGFzaD4oW2tleXMsIHZhbHVlc10pO1xuICB9XG5cbiAgLy8vIFV0aWxpdGllc1xuXG4gIHB1c2goYXJnczogU3RhdGVtZW50KSB7XG4gICAgd2hpbGUgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gbnVsbCkge1xuICAgICAgYXJncy5wb3AoKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbG9jay5wdXNoKGFyZ3MpO1xuICB9XG5cbiAgcHVzaFZhbHVlPFMgZXh0ZW5kcyBFeHByZXNzaW9uIHwgUGFyYW1zIHwgSGFzaD4odmFsOiBTKSB7XG4gICAgdGhpcy52YWx1ZXMucHVzaCh2YWwpO1xuICB9XG5cbiAgcG9wVmFsdWU8VCBleHRlbmRzIFN0YWNrVmFsdWU+KCk6IFQge1xuICAgIGFzc2VydCh0aGlzLnZhbHVlcy5sZW5ndGgsIFwiTm8gZXhwcmVzc2lvbiBmb3VuZCBvbiBzdGFja1wiKTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMucG9wKCkgYXMgVDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NvbXBvbmVudCh0YWc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgb3BlbiA9IHRhZy5jaGFyQXQoMCk7XG5cbiAgcmV0dXJuIG9wZW4gPT09IG9wZW4udG9VcHBlckNhc2UoKTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi9qYXZhc2NyaXB0LWNvbXBpbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxBQUFPLFNBQUUsQUFBTSxBQUFFLGNBQU0sQUFBZSxBQUFDO0FBQ3ZDLEFBQU8sU0FBRSxBQUFLLE9BQUUsQUFBTyxBQUFVLEFBQU0sQUFBRSxlQUFNLEFBQWUsQUFBQztBQUkvRCxBQUFPLFNBUUwsQUFBRyxLQUNILEFBQVUsWUFDVixBQUFjLGdCQUNkLEFBQVUsWUFDVixBQUFXLEFBQ1osbUJBQU0sQUFBc0IsQUFBQztBQVM5QixBQUFNLFdBQU47O0FBQ1M7O2FBQVUsYUFBZ0IsQUFBRSxBQUFDLEFBT3RDLEFBQUM7QUFIQyxBQUFJOzt5Q0FBQyxBQUFvQixXQUN2QixBQUFJO2FBQUMsQUFBVSxXQUFDLEFBQUksS0FBQyxBQUFTLEFBQUMsQUFBQyxBQUNsQyxBQUFDLEFBQ0Y7Ozs7O0FBRUQsQUFBTSxXQUFtQjs7O3lCQUNKLEFBQXVCO0FBQ3hDLEFBQUssQUFBRSxBQUFDOztxREFEUzs7Y0FBSyxRQUFMLEFBQUssQUFBa0IsQUFFMUMsQUFBQzs7QUFFRCxBQUFNOztxREFDSixBQUFNOzt3QkFDUSxBQUFJLEtBQUMsQUFBVSxBQUMzQixBQUFVO3dCQUFFLEFBQUksS0FBQyxBQUFLLE1BRmpCLEFBRWtCLEFBQUssQUFDN0IsQUFBQyxBQUNKLEFBQUMsQUFDRjtBQUpLLEFBQVU7Ozs7RUFQaUIsQUFBSyxBQUNwQztBQVlGLEFBQU0sV0FBcUI7OzsyQkFPTCxBQUErQjtBQUNqRCxBQUFLLEFBQUUsQUFBQzs7c0RBRFU7O2VBQVcsY0FOeEIsQUFNYSxBQUFXLEFBQW9CO2VBTnhDLE9BQUcsQUFBVSxBQUFDLEFBQ2xCO2VBQU0sU0FBRyxJQUFJLEFBQU8sQUFBVSxBQUFDLEFBQy9CO2VB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LEFBQU0sT0FBQyxBQUFPLEFBQUUsQUFBK0IsQUFBQyxBQUFDLEFBQ3RFLEFBQUM7QUFFRCxBQUFPOzs7Ozs7OztBQXVQVCxxQkFBcUIsQUFBVyxLQUM5QjtRQUFJLEFBQUksT0FBRyxBQUFHLElBQUMsQUFBTSxPQUFDLEFBQUMsQUFBQyxBQUFDLEFBRXpCLEFBQU07V0FBQyxBQUFJLFNBQUssQUFBSSxLQUFDLEFBQVcsQUFBRSxBQUFDLEFBQ3JDLEFBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhc3NlcnQgfSBmcm9tIFwiQGdsaW1tZXIvdXRpbFwiO1xuaW1wb3J0IHsgU3RhY2ssIERpY3RTZXQsIE9wdGlvbiwgZXhwZWN0IH0gZnJvbSBcIkBnbGltbWVyL3V0aWxcIjtcbmltcG9ydCB7IEFTVCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBCbG9ja1N5bWJvbFRhYmxlLCBQcm9ncmFtU3ltYm9sVGFibGUgfSBmcm9tICcuL3RlbXBsYXRlLXZpc2l0b3InO1xuXG5pbXBvcnQge1xuICBTZXJpYWxpemVkSW5saW5lQmxvY2ssXG4gIFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrLFxuICBDb3JlLFxuICBTdGF0ZW1lbnQsXG4gIFN0YXRlbWVudHMsXG4gIEV4cHJlc3Npb24sXG4gIEV4cHJlc3Npb25zLFxuICBPcHMsXG4gIGlzTW9kaWZpZXIsXG4gIGlzRmx1c2hFbGVtZW50LFxuICBpc0FyZ3VtZW50LFxuICBpc0F0dHJpYnV0ZVxufSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5pbXBvcnQgeyBQcm9jZXNzb3IsIENvbXBpbGVyT3BzLCBPcE5hbWUsIE9wIH0gZnJvbSBcIi4vY29tcGlsZXItb3BzXCI7XG5cbmV4cG9ydCB0eXBlIHN0ciA9IHN0cmluZztcbmV4cG9ydCB0eXBlIFBhcmFtcyA9IENvcmUuUGFyYW1zO1xuZXhwb3J0IHR5cGUgSGFzaCA9IENvcmUuSGFzaDtcbmV4cG9ydCB0eXBlIFBhdGggPSBDb3JlLlBhdGg7XG5leHBvcnQgdHlwZSBTdGFja1ZhbHVlID0gRXhwcmVzc2lvbiB8IFBhcmFtcyB8IEhhc2ggfCBzdHI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCbG9jayB7XG4gIHB1YmxpYyBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSA9IFtdO1xuXG4gIGFic3RyYWN0IHRvSlNPTigpOiBPYmplY3Q7XG5cbiAgcHVzaChzdGF0ZW1lbnQ6IFN0YXRlbWVudCkge1xuICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIElubGluZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGFibGU6IEJsb2NrU3ltYm9sVGFibGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgdG9KU09OKCk6IFNlcmlhbGl6ZWRJbmxpbmVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgIHBhcmFtZXRlcnM6IHRoaXMudGFibGUuc2xvdHNcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBwdWJsaWMgdHlwZSA9IFwidGVtcGxhdGVcIjtcbiAgcHVibGljIHlpZWxkcyA9IG5ldyBEaWN0U2V0PHN0cmluZz4oKTtcbiAgcHVibGljIG5hbWVkID0gbmV3IERpY3RTZXQ8c3RyaW5nPigpO1xuICBwdWJsaWMgYmxvY2tzOiBTZXJpYWxpemVkSW5saW5lQmxvY2tbXSA9IFtdO1xuICBwdWJsaWMgaGFzRXZhbCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3ltYm9sVGFibGU6IFByb2dyYW1TeW1ib2xUYWJsZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdXNoKHN0YXRlbWVudDogU3RhdGVtZW50KSB7XG4gICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgfVxuXG4gIHRvSlNPTigpOiBTZXJpYWxpemVkVGVtcGxhdGVCbG9jayB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN5bWJvbHM6IHRoaXMuc3ltYm9sVGFibGUuc3ltYm9scyxcbiAgICAgIHN0YXRlbWVudHM6IHRoaXMuc3RhdGVtZW50cyxcbiAgICAgIGhhc0V2YWw6IHRoaXMuaGFzRXZhbFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvbmVudEJsb2NrIGV4dGVuZHMgQmxvY2sge1xuICBwdWJsaWMgYXR0cmlidXRlczogU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSA9IFtdO1xuICBwdWJsaWMgYXJndW1lbnRzOiBTdGF0ZW1lbnRzLkFyZ3VtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBpblBhcmFtcyA9IHRydWU7XG4gIHB1YmxpYyBwb3NpdGlvbmFsczogbnVtYmVyW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhYmxlOiBCbG9ja1N5bWJvbFRhYmxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1c2goc3RhdGVtZW50OiBTdGF0ZW1lbnQpIHtcbiAgICBpZiAodGhpcy5pblBhcmFtcykge1xuICAgICAgaWYgKGlzTW9kaWZpZXIoc3RhdGVtZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGUgRXJyb3I6IEVsZW1lbnQgbW9kaWZpZXJzIGFyZSBub3QgYWxsb3dlZCBpbiBjb21wb25lbnRzJyk7XG4gICAgICB9IGVsc2UgaWYgKGlzRmx1c2hFbGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5pblBhcmFtcyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChpc0FyZ3VtZW50KHN0YXRlbWVudCkpIHtcbiAgICAgICAgdGhpcy5hcmd1bWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChpc0F0dHJpYnV0ZShzdGF0ZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlcy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGUgRXJyb3I6IG9ubHkgcGFyYW1ldGVycyBhbGxvd2VkIGJlZm9yZSBmbHVzaC1lbGVtZW50Jyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgdG9KU09OKCk6IFtTdGF0ZW1lbnRzLkF0dHJpYnV0ZVtdLCBDb3JlLkhhc2gsIE9wdGlvbjxTZXJpYWxpemVkSW5saW5lQmxvY2s+XSB7XG4gICAgbGV0IGFyZ3MgPSB0aGlzLmFyZ3VtZW50cztcbiAgICBsZXQga2V5cyA9IGFyZ3MubWFwKGFyZyA9PiBhcmdbMV0pO1xuICAgIGxldCB2YWx1ZXMgPSBhcmdzLm1hcChhcmcgPT4gYXJnWzJdKTtcblxuICAgIHJldHVybiBbXG4gICAgICB0aGlzLmF0dHJpYnV0ZXMsXG4gICAgICBba2V5cywgdmFsdWVzXSxcbiAgICAgIHtcbiAgICAgICAgc3RhdGVtZW50czogdGhpcy5zdGF0ZW1lbnRzLFxuICAgICAgICBwYXJhbWV0ZXJzOiB0aGlzLnRhYmxlLnNsb3RzXG4gICAgICB9XG4gICAgXTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGUge1xuICBwdWJsaWMgYmxvY2s6IFRlbXBsYXRlQmxvY2s7XG5cbiAgY29uc3RydWN0b3Ioc3ltYm9sczogUHJvZ3JhbVN5bWJvbFRhYmxlKSB7XG4gICAgdGhpcy5ibG9jayA9IG5ldyBUZW1wbGF0ZUJsb2NrKHN5bWJvbHMpO1xuICB9XG5cbiAgdG9KU09OKCk6IFNlcmlhbGl6ZWRUZW1wbGF0ZUJsb2NrIHtcbiAgICByZXR1cm4gdGhpcy5ibG9jay50b0pTT04oKTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBJblZhcmlhYmxlID0gbnVtYmVyO1xuZXhwb3J0IHR5cGUgSW5PcDxLIGV4dGVuZHMga2V5b2YgQ29tcGlsZXJPcHM8SW5WYXJpYWJsZT4gPSBPcE5hbWU+ID0gT3A8SW5WYXJpYWJsZSwgQ29tcGlsZXJPcHM8SW5WYXJpYWJsZT4sIEs+O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBKYXZhU2NyaXB0Q29tcGlsZXIgaW1wbGVtZW50cyBQcm9jZXNzb3I8Q29tcGlsZXJPcHM8bnVtYmVyPiwgdm9pZCwgQ29tcGlsZXJPcHM8dm9pZD4+IHtcbiAgc3RhdGljIHByb2Nlc3Mob3Bjb2RlczogSW5PcFtdLCBzeW1ib2xzOiBQcm9ncmFtU3ltYm9sVGFibGUpOiBUZW1wbGF0ZSB7XG4gICAgbGV0IGNvbXBpbGVyID0gbmV3IEphdmFTY3JpcHRDb21waWxlcihvcGNvZGVzLCBzeW1ib2xzKTtcbiAgICByZXR1cm4gY29tcGlsZXIucHJvY2VzcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZW1wbGF0ZTogVGVtcGxhdGU7XG4gIHByaXZhdGUgYmxvY2tzID0gbmV3IFN0YWNrPEJsb2NrPigpO1xuICBwcml2YXRlIG9wY29kZXM6IEluT3BbXTtcbiAgcHJpdmF0ZSB2YWx1ZXM6IFN0YWNrVmFsdWVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKG9wY29kZXM6IEluT3BbXSwgc3ltYm9sczogUHJvZ3JhbVN5bWJvbFRhYmxlKSB7XG4gICAgdGhpcy5vcGNvZGVzID0gb3Bjb2RlcztcbiAgICB0aGlzLnRlbXBsYXRlID0gbmV3IFRlbXBsYXRlKHN5bWJvbHMpO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRCbG9jaygpOiBCbG9jayB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmJsb2Nrcy5jdXJyZW50LCAnRXhwZWN0ZWQgYSBibG9jayBvbiB0aGUgc3RhY2snKTtcbiAgfVxuXG4gIHByb2Nlc3MoKTogVGVtcGxhdGUge1xuICAgIHRoaXMub3Bjb2Rlcy5mb3JFYWNoKG9wID0+IHtcbiAgICAgIGxldCBvcGNvZGUgPSBvcFswXTtcbiAgICAgIGxldCBhcmcgPSBvcFsxXTtcblxuICAgICAgaWYgKCF0aGlzW29wY29kZV0pIHsgdGhyb3cgbmV3IEVycm9yKGB1bmltcGxlbWVudGVkICR7b3Bjb2RlfSBvbiBKYXZhU2NyaXB0Q29tcGlsZXJgKTsgfVxuICAgICAgKHRoaXNbb3Bjb2RlXSBhcyBhbnkpKGFyZyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vLyBOZXN0aW5nXG5cbiAgc3RhcnRCbG9jayhwcm9ncmFtOiBBU1QuUHJvZ3JhbSkge1xuICAgIGxldCBibG9jazogQmxvY2sgPSBuZXcgSW5saW5lQmxvY2socHJvZ3JhbVsnc3ltYm9scyddKTtcbiAgICB0aGlzLmJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgfVxuXG4gIGVuZEJsb2NrKCkge1xuICAgIGxldCB7IHRlbXBsYXRlLCBibG9ja3MgfSA9IHRoaXM7XG4gICAgbGV0IGJsb2NrID0gYmxvY2tzLnBvcCgpIGFzIElubGluZUJsb2NrO1xuICAgIHRlbXBsYXRlLmJsb2NrLmJsb2Nrcy5wdXNoKGJsb2NrLnRvSlNPTigpKTtcbiAgfVxuXG4gIHN0YXJ0UHJvZ3JhbSgpIHtcbiAgICB0aGlzLmJsb2Nrcy5wdXNoKHRoaXMudGVtcGxhdGUuYmxvY2spO1xuICB9XG5cbiAgZW5kUHJvZ3JhbSgpIHtcblxuICB9XG5cbiAgLy8vIFN0YXRlbWVudHNcblxuICB0ZXh0KGNvbnRlbnQ6IHN0cmluZykge1xuICAgIHRoaXMucHVzaChbT3BzLlRleHQsIGNvbnRlbnRdKTtcbiAgfVxuXG4gIGFwcGVuZCh0cnVzdGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuQXBwZW5kLCB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCksIHRydXN0ZWRdKTtcbiAgfVxuXG4gIGNvbW1lbnQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMucHVzaChbT3BzLkNvbW1lbnQsIHZhbHVlXSk7XG4gIH1cblxuICBtb2RpZmllcihuYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICB0aGlzLnB1c2goW09wcy5Nb2RpZmllciwgbmFtZSwgcGFyYW1zLCBoYXNoXSk7XG4gIH1cblxuICBibG9jayhbbmFtZSwgdGVtcGxhdGUsIGludmVyc2VdOiBbc3RyaW5nLCBudW1iZXIsIG51bWJlcl0pIHtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5wb3BWYWx1ZTxQYXJhbXM+KCk7XG4gICAgbGV0IGhhc2ggPSB0aGlzLnBvcFZhbHVlPEhhc2g+KCk7XG5cbiAgICBsZXQgYmxvY2tzID0gdGhpcy50ZW1wbGF0ZS5ibG9jay5ibG9ja3M7XG4gICAgYXNzZXJ0KHR5cGVvZiB0ZW1wbGF0ZSAhPT0gJ251bWJlcicgfHwgYmxvY2tzW3RlbXBsYXRlXSAhPT0gbnVsbCwgJ21pc3NpbmcgYmxvY2sgaW4gdGhlIGNvbXBpbGVyJyk7XG4gICAgYXNzZXJ0KHR5cGVvZiBpbnZlcnNlICE9PSAnbnVtYmVyJyB8fCBibG9ja3NbaW52ZXJzZV0gIT09IG51bGwsICdtaXNzaW5nIGJsb2NrIGluIHRoZSBjb21waWxlcicpO1xuXG4gICAgdGhpcy5wdXNoKFtPcHMuQmxvY2ssIG5hbWUsIHBhcmFtcywgaGFzaCwgYmxvY2tzW3RlbXBsYXRlXSwgYmxvY2tzW2ludmVyc2VdXSk7XG4gIH1cblxuICBvcGVuU3BsYXR0ZWRFbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmIChpc0NvbXBvbmVudCh0YWcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGUgRXJyb3I6IC4uLmF0dHJpYnV0ZXMgY2FuIG9ubHkgYmUgdXNlZCBpbiBhbiBlbGVtZW50YCk7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50LmJsb2NrUGFyYW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcGlsZSBFcnJvcjogPCR7ZWxlbWVudC50YWd9PiBpcyBub3QgYSBjb21wb25lbnQgYW5kIGRvZXNuJ3Qgc3VwcG9ydCBibG9jayBwYXJhbWV0ZXJzYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaChbT3BzLk9wZW5TcGxhdHRlZEVsZW1lbnQsIHRhZ10pO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5FbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmIChpc0NvbXBvbmVudCh0YWcpKSB7XG4gICAgICB0aGlzLnN0YXJ0Q29tcG9uZW50KGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudC5ibG9ja1BhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBpbGUgRXJyb3I6IDwke2VsZW1lbnQudGFnfT4gaXMgbm90IGEgY29tcG9uZW50IGFuZCBkb2Vzbid0IHN1cHBvcnQgYmxvY2sgcGFyYW1ldGVyc2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goW09wcy5PcGVuRWxlbWVudCwgdGFnXSk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2hFbGVtZW50KCkge1xuICAgIHRoaXMucHVzaChbT3BzLkZsdXNoRWxlbWVudF0pO1xuICB9XG5cbiAgY2xvc2VFbGVtZW50KGVsZW1lbnQ6IEFTVC5FbGVtZW50Tm9kZSkge1xuICAgIGxldCB0YWcgPSBlbGVtZW50LnRhZztcblxuICAgIGlmIChpc0NvbXBvbmVudCh0YWcpKSB7XG4gICAgICBsZXQgW2F0dHJzLCBhcmdzLCBibG9ja10gPSB0aGlzLmVuZENvbXBvbmVudCgpO1xuICAgICAgdGhpcy5wdXNoKFtPcHMuQ29tcG9uZW50LCB0YWcsIGF0dHJzLCBhcmdzLCBibG9ja10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2goW09wcy5DbG9zZUVsZW1lbnRdKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWNBdHRyKFtuYW1lLCBuYW1lc3BhY2VdOiBbc3RyaW5nLCBzdHJpbmddKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLlN0YXRpY0F0dHIsIG5hbWUsIHZhbHVlLCBuYW1lc3BhY2VdKTtcbiAgfVxuXG4gIGR5bmFtaWNBdHRyKFtuYW1lLCBuYW1lc3BhY2VdOiBbc3RyaW5nLCBzdHJpbmddKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICB0cnVzdGluZ0F0dHIoW25hbWUsIG5hbWVzcGFjZV06IFtzdHJpbmcsIHN0cmluZ10pIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgdGhpcy5wdXNoKFtPcHMuVHJ1c3RpbmdBdHRyLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG4gIH1cblxuICBzdGF0aWNBcmcobmFtZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLlN0YXRpY0FyZywgbmFtZSwgdmFsdWVdKTtcbiAgfVxuXG4gIGR5bmFtaWNBcmcobmFtZTogc3RyKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BWYWx1ZTxFeHByZXNzaW9uPigpO1xuICAgIHRoaXMucHVzaChbT3BzLkR5bmFtaWNBcmcsIG5hbWUsIHZhbHVlXSk7XG4gIH1cblxuICB5aWVsZCh0bzogbnVtYmVyKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIHRoaXMucHVzaChbT3BzLllpZWxkLCB0bywgcGFyYW1zXSk7XG4gIH1cblxuICBhdHRyU3BsYXQodG86IG51bWJlcikge1xuICAgIHRoaXMucHVzaChbT3BzLkF0dHJTcGxhdCwgdG9dKTtcbiAgfVxuXG4gIGRlYnVnZ2VyKGV2YWxJbmZvOiBDb3JlLkV2YWxJbmZvKSB7XG4gICAgdGhpcy5wdXNoKFtPcHMuRGVidWdnZXIsIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIGhhc0Jsb2NrKG5hbWU6IG51bWJlcikge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkhhc0Jsb2NrPihbT3BzLkhhc0Jsb2NrLCBuYW1lXSk7XG4gIH1cblxuICBoYXNCbG9ja1BhcmFtcyhuYW1lOiBudW1iZXIpIHtcbiAgICB0aGlzLnB1c2hWYWx1ZTxFeHByZXNzaW9ucy5IYXNCbG9ja1BhcmFtcz4oW09wcy5IYXNCbG9ja1BhcmFtcywgbmFtZV0pO1xuICB9XG5cbiAgcGFydGlhbChldmFsSW5mbzogQ29yZS5FdmFsSW5mbykge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnBvcFZhbHVlPFBhcmFtcz4oKTtcbiAgICB0aGlzLnB1c2goW09wcy5QYXJ0aWFsLCBwYXJhbXNbMF0sIGV2YWxJbmZvXSk7XG4gICAgdGhpcy50ZW1wbGF0ZS5ibG9jay5oYXNFdmFsID0gdHJ1ZTtcbiAgfVxuXG4gIC8vLyBFeHByZXNzaW9uc1xuXG4gIGxpdGVyYWwodmFsdWU6IEV4cHJlc3Npb25zLlZhbHVlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVuZGVmaW5lZD4oW09wcy5VbmRlZmluZWRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuVmFsdWU+KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB1bmtub3duKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLlVua25vd24+KFtPcHMuVW5rbm93biwgbmFtZV0pO1xuICB9XG5cbiAgZ2V0KFtoZWFkLCBwYXRoXTogW251bWJlciwgc3RyaW5nW11dKSB7XG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuR2V0PihbT3BzLkdldCwgaGVhZCwgcGF0aF0pO1xuICB9XG5cbiAgbWF5YmVMb2NhbChwYXRoOiBzdHJpbmdbXSkge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLk1heWJlTG9jYWw+KFtPcHMuTWF5YmVMb2NhbCwgcGF0aF0pO1xuICB9XG5cbiAgY29uY2F0KCkge1xuICAgIHRoaXMucHVzaFZhbHVlPEV4cHJlc3Npb25zLkNvbmNhdD4oW09wcy5Db25jYXQsIHRoaXMucG9wVmFsdWU8UGFyYW1zPigpXSk7XG4gIH1cblxuICBoZWxwZXIobmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMucG9wVmFsdWU8UGFyYW1zPigpO1xuICAgIGxldCBoYXNoID0gdGhpcy5wb3BWYWx1ZTxIYXNoPigpO1xuXG4gICAgdGhpcy5wdXNoVmFsdWU8RXhwcmVzc2lvbnMuSGVscGVyPihbT3BzLkhlbHBlciwgbmFtZSwgcGFyYW1zLCBoYXNoXSk7XG4gIH1cblxuICAvLy8gU3RhY2sgTWFuYWdlbWVudCBPcGNvZGVzXG5cbiAgc3RhcnRDb21wb25lbnQoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IGNvbXBvbmVudCA9IG5ldyBDb21wb25lbnRCbG9jayhlbGVtZW50WydzeW1ib2xzJ10pO1xuICAgIHRoaXMuYmxvY2tzLnB1c2goY29tcG9uZW50KTtcbiAgfVxuXG4gIGVuZENvbXBvbmVudCgpOiBbU3RhdGVtZW50cy5BdHRyaWJ1dGVbXSwgQ29yZS5IYXNoLCBPcHRpb248U2VyaWFsaXplZElubGluZUJsb2NrPl0ge1xuICAgIGxldCBjb21wb25lbnQgPSB0aGlzLmJsb2Nrcy5wb3AoKTtcbiAgICBhc3NlcnQoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50QmxvY2ssIFwiQ29tcGlsZXIgYnVnOiBlbmRDb21wb25lbnQoKSBzaG91bGQgZW5kIGEgY29tcG9uZW50XCIpO1xuICAgIHJldHVybiAoY29tcG9uZW50IGFzIENvbXBvbmVudEJsb2NrKS50b0pTT04oKTtcbiAgfVxuXG4gIHByZXBhcmVBcnJheShzaXplOiBudW1iZXIpIHtcbiAgICBsZXQgdmFsdWVzOiBFeHByZXNzaW9uW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICB2YWx1ZXMucHVzaCh0aGlzLnBvcFZhbHVlKCkgYXMgRXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8UGFyYW1zPih2YWx1ZXMpO1xuICB9XG5cbiAgcHJlcGFyZU9iamVjdChzaXplOiBudW1iZXIpIHtcbiAgICBhc3NlcnQodGhpcy52YWx1ZXMubGVuZ3RoID49IHNpemUsIGBFeHBlY3RlZCAke3NpemV9IHZhbHVlcyBvbiB0aGUgc3RhY2ssIGZvdW5kICR7dGhpcy52YWx1ZXMubGVuZ3RofWApO1xuXG4gICAgbGV0IGtleXM6IHN0cmluZ1tdID0gbmV3IEFycmF5KHNpemUpO1xuICAgIGxldCB2YWx1ZXM6IEV4cHJlc3Npb25bXSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBrZXlzW2ldID0gdGhpcy5wb3BWYWx1ZTxzdHI+KCk7XG4gICAgICB2YWx1ZXNbaV0gPSB0aGlzLnBvcFZhbHVlPEV4cHJlc3Npb24+KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoVmFsdWU8SGFzaD4oW2tleXMsIHZhbHVlc10pO1xuICB9XG5cbiAgLy8vIFV0aWxpdGllc1xuXG4gIHB1c2goYXJnczogU3RhdGVtZW50KSB7XG4gICAgd2hpbGUgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gbnVsbCkge1xuICAgICAgYXJncy5wb3AoKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRCbG9jay5wdXNoKGFyZ3MpO1xuICB9XG5cbiAgcHVzaFZhbHVlPFMgZXh0ZW5kcyBFeHByZXNzaW9uIHwgUGFyYW1zIHwgSGFzaD4odmFsOiBTKSB7XG4gICAgdGhpcy52YWx1ZXMucHVzaCh2YWwpO1xuICB9XG5cbiAgcG9wVmFsdWU8VCBleHRlbmRzIFN0YWNrVmFsdWU+KCk6IFQge1xuICAgIGFzc2VydCh0aGlzLnZhbHVlcy5sZW5ndGgsIFwiTm8gZXhwcmVzc2lvbiBmb3VuZCBvbiBzdGFja1wiKTtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXMucG9wKCkgYXMgVDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NvbXBvbmVudCh0YWc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBsZXQgb3BlbiA9IHRhZy5jaGFyQXQoMCk7XG5cbiAgcmV0dXJuIG9wZW4gPT09IG9wZW4udG9VcHBlckNhc2UoKTtcbn1cbiJdfQ==

@@ -66,3 +66,3 @@ var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

if (!named) {
named = this.named[name] = this.allocate('@' + name);
named = this.named[name] = this.allocate(name);
}

@@ -384,2 +384,2 @@ return named;

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi90ZW1wbGF0ZS12aXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFQSxBQUFPLFNBQWdCLEFBQUksTUFBRSxBQUFXLEFBQUUsQUFBTSxBQUFFLG1CQUFNLEFBQWUsQUFBQztBQUV4RSxBQUFNLFdBQ0osQUFBTTs7Ozs7Z0JBQUMsQUFBRyxxQkFDUixBQUFNO2VBQUMsSUFBSSxBQUFrQixBQUFFLEFBQUMsQUFDbEMsQUFBQztBQVlELEFBQUs7O2lEQUFDLEFBQWdCO0FBQ3BCOztZQUFJLEFBQU8saUJBQVUsQUFBRztBQUFDLEFBQUksbUJBQUksQUFBSSxNQUFDLEFBQVEsU0FBQyxBQUFJLEFBQUMsQUFBQyxBQUFDLEFBQ3RELEFBQU07U0FEUSxBQUFNO2VBQ2IsSUFBSSxBQUFnQixpQkFBQyxBQUFJLE1BQUUsQUFBTSxRQUFFLEFBQU8sQUFBQyxBQUFDLEFBQ3JELEFBQUMsQUFDRjs7Ozs7QUFFRCxBQUFNLFdBQTBCOzs7Ozs7K0VBQ3ZCOztlQUFPLFVBQWEsQUFBRSxBQUFDLEFBRXRCO2VBQUksT0FBRyxBQUFDLEFBQUMsQUFDVDtlQUFLLFFBQUcsQUFBSSxBQUFVLEFBQUMsQUFDdkI7ZUFBTSxTQUFHLEFBQUksQUFBVSxBQUFDLEFBMENsQyxBQUFDOztBQXhDQyxBQUFHOztvREFBQyxBQUFhLE9BQ2YsQUFBTTtlQUFDLEFBQUssQUFBQyxBQUNmLEFBQUM7QUFFRCxBQUFHOztvREFBQyxBQUFhLE9BQ2Y7Y0FBTSxBQUFXLEFBQUUsQUFBQyxBQUN0QixBQUFDO0FBRUQsQUFBWTs7d0VBQ1YsQUFBTTtlQUFDLEFBQUUsQUFBQyxBQUNaLEFBQUM7QUFFRCxBQUFXOztzRUFDVCxBQUFNO2VBQUMsQUFBRSxBQUFDLEFBQ1osQUFBQztBQUVELEFBQWE7O3dFQUFDLEFBQVks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QyxBQUNyQixBQUFNO21CQUFDLEFBQUssQUFBQyxBQUNmLEFBQUMsQUFDSDtBQUFDO0FBRUQsQUFBTTtXQUFDLENBQUMsQUFBQyxBQUFDLEFBQ1osQUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFTVCB9IGZyb20gJ0BnbGltbWVyL3N5bnRheCc7XG5pbXBvcnQgeyBDb3JlIH0gZnJvbSAnQGdsaW1tZXIvd2lyZS1mb3JtYXQnO1xuaW1wb3J0IHsgRGljdCwgT3B0aW9uLCBkaWN0LCB1bnJlYWNoYWJsZSwgZXhwZWN0IH0gZnJvbSAnQGdsaW1tZXIvdXRpbCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTeW1ib2xUYWJsZSB7XG4gIHN0YXRpYyB0b3AoKTogUHJvZ3JhbVN5bWJvbFRhYmxlIHtcbiAgICByZXR1cm4gbmV3IFByb2dyYW1TeW1ib2xUYWJsZSgpO1xuICB9XG5cbiAgYWJzdHJhY3QgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW47XG4gIGFic3RyYWN0IGdldChuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG5cbiAgYWJzdHJhY3QgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPjtcbiAgYWJzdHJhY3QgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbztcblxuICBhYnN0cmFjdCBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgYWJzdHJhY3QgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXI7XG4gIGFic3RyYWN0IGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlcjtcblxuICBjaGlsZChsb2NhbHM6IHN0cmluZ1tdKTogQmxvY2tTeW1ib2xUYWJsZSB7XG4gICAgbGV0IHN5bWJvbHMgPSBsb2NhbHMubWFwKG5hbWUgPT4gdGhpcy5hbGxvY2F0ZShuYW1lKSk7XG4gICAgcmV0dXJuIG5ldyBCbG9ja1N5bWJvbFRhYmxlKHRoaXMsIGxvY2Fscywgc3ltYm9scyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb2dyYW1TeW1ib2xUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlIHtcbiAgcHVibGljIHN5bWJvbHM6IHN0cmluZ1tdID0gW107XG5cbiAgcHJpdmF0ZSBzaXplID0gMTtcbiAgcHJpdmF0ZSBuYW1lZCA9IGRpY3Q8bnVtYmVyPigpO1xuICBwcml2YXRlIGJsb2NrcyA9IGRpY3Q8bnVtYmVyPigpO1xuXG4gIGhhcyhfbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0KF9uYW1lOiBzdHJpbmcpOiBuZXZlciB7XG4gICAgdGhyb3cgdW5yZWFjaGFibGUoKTtcbiAgfVxuXG4gIGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdO1xuXG4gICAgaWYgKCFuYW1lZCkge1xuICAgICAgbmFtZWQgPSB0aGlzLm5hbWVkW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgQCR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmFtZWQ7XG4gIH1cblxuICBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV07XG5cbiAgICBpZiAoIWJsb2NrKSB7XG4gICAgICBibG9jayA9IHRoaXMuYmxvY2tzW25hbWVdID0gdGhpcy5hbGxvY2F0ZShgJiR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmxvY2s7XG4gIH1cblxuICBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHRoaXMuc3ltYm9scy5wdXNoKGlkZW50aWZpZXIpO1xuICAgIHJldHVybiB0aGlzLnNpemUrKztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQmxvY2tTeW1ib2xUYWJsZSBleHRlbmRzIFN5bWJvbFRhYmxlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwYXJlbnQ6IFN5bWJvbFRhYmxlLCBwdWJsaWMgc3ltYm9sczogc3RyaW5nW10sIHB1YmxpYyBzbG90czogbnVtYmVyW10pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgaGFzKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSkgIT09IC0xKSB8fCB0aGlzLnBhcmVudC5oYXMobmFtZSk7XG4gIH1cblxuICBnZXQobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgc2xvdCA9IHRoaXMuc3ltYm9scy5pbmRleE9mKG5hbWUpO1xuICAgIHJldHVybiBzbG90ID09PSAtMSA/IHRoaXMucGFyZW50LmdldChuYW1lKSA6IHRoaXMuc2xvdHNbc2xvdF07XG4gIH1cblxuICBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+IHtcbiAgICBsZXQgZGljdCA9IHRoaXMucGFyZW50LmdldExvY2Fsc01hcCgpO1xuICAgIHRoaXMuc3ltYm9scy5mb3JFYWNoKHN5bWJvbCA9PiBkaWN0W3N5bWJvbF0gPSB0aGlzLmdldChzeW1ib2wpKTtcbiAgICByZXR1cm4gZGljdDtcbiAgfVxuXG4gIGdldEV2YWxJbmZvKCk6IENvcmUuRXZhbEluZm8ge1xuICAgIGxldCBsb2NhbHMgPSB0aGlzLmdldExvY2Fsc01hcCgpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhsb2NhbHMpLm1hcChzeW1ib2wgPT4gbG9jYWxzW3N5bWJvbF0pO1xuICB9XG5cbiAgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZU5hbWVkKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGVCbG9jayhuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZUJsb2NrKG5hbWUpO1xuICB9XG5cbiAgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuYWxsb2NhdGUoaWRlbnRpZmllcik7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBpbiBhbiBBU1QgYW5kIG91dHB1dHMgYSBsaXN0IG9mIGFjdGlvbnMgdG8gYmUgY29uc3VtZWRcbiAqIGJ5IGEgY29tcGlsZXIuIEZvciBleGFtcGxlLCB0aGUgdGVtcGxhdGVcbiAqXG4gKiAgICAgZm9ve3tiYXJ9fTxkaXY+YmF6PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgM11dLFxuICogICAgICBbJ211c3RhY2hlJywgW211c3RhY2hlTm9kZSwgMSwgM11dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMV1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMiwgM10sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoaXMgdmlzaXRvciB3YWxrcyB0aGUgQVNUIGRlcHRoIGZpcnN0IGFuZCBiYWNrd2FyZHMuIEFzXG4gKiBhIHJlc3VsdCB0aGUgYm90dG9tLW1vc3QgY2hpbGQgdGVtcGxhdGUgd2lsbCBhcHBlYXIgYXQgdGhlXG4gKiB0b3Agb2YgdGhlIGFjdGlvbnMgbGlzdCB3aGVyZWFzIHRoZSByb290IHRlbXBsYXRlIHdpbGwgYXBwZWFyXG4gKiBhdCB0aGUgYm90dG9tIG9mIHRoZSBsaXN0LiBGb3IgZXhhbXBsZSxcbiAqXG4gKiAgICAgPGRpdj57eyNpZn19Zm9ve3tlbHNlfX1iYXI8Yj48L2I+e3svaWZ9fTwvZGl2PlxuICpcbiAqIHByb2R1Y2VzIHRoZSBhY3Rpb25zXG4gKlxuICogICAgIFtbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDIsIDBdXSxcbiAqICAgICAgWydvcGVuRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMiwgMF1dLFxuICogICAgICBbJ2Nsb3NlRWxlbWVudCcsIFtlbGVtZW50Tm9kZSwgMSwgMl1dLFxuICogICAgICBbJ2VuZFByb2dyYW0nLCBbcHJvZ3JhbU5vZGVdXSxcbiAqICAgICAgWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMl1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxLCAxXV0sXG4gKiAgICAgIFsnYmxvY2snLCBbYmxvY2tOb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dXVxuICpcbiAqIFRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIGlzIG1haW50YWluZWQgYnkgYSBzdGFjayBvZiBmcmFtZXMuXG4gKiBXaGVuZXZlciBhIG5vZGUgd2l0aCBjaGlsZHJlbiBpcyBlbnRlcmVkIChlaXRoZXIgYSBQcm9ncmFtTm9kZVxuICogb3IgYW4gRWxlbWVudE5vZGUpIGEgZnJhbWUgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrLiBUaGUgZnJhbWVcbiAqIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgdHJhdmVyc2FsIG9mIHRoYXRcbiAqIG5vZGUuIEZvciBleGFtcGxlLFxuICpcbiAqICAgLSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGlsZCBub2RlIGJlaW5nIHZpc2l0ZWRcbiAqICAgLSB0aGUgbnVtYmVyIG9mIG11c3RhY2hlcyBjb250YWluZWQgd2l0aGluIGl0cyBjaGlsZCBub2Rlc1xuICogICAtIHRoZSBsaXN0IG9mIGFjdGlvbnMgZ2VuZXJhdGVkIGJ5IGl0cyBjaGlsZCBub2Rlc1xuICovXG5cbmNsYXNzIEZyYW1lIHtcbiAgcHVibGljIHBhcmVudE5vZGU6IE9wdGlvbjxPYmplY3Q+ID0gbnVsbDtcbiAgcHVibGljIGNoaWxkcmVuOiBPcHRpb248QVNULk5vZGVbXT4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRJbmRleDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRDb3VudDogT3B0aW9uPG51bWJlcj4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRUZW1wbGF0ZUNvdW50ID0gMDtcbiAgcHVibGljIG11c3RhY2hlQ291bnQgPSAwO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHVibGljIGJsYW5rQ2hpbGRUZXh0Tm9kZXM6IE9wdGlvbjxudW1iZXJbXT4gPSBudWxsO1xuICBwdWJsaWMgc3ltYm9sczogT3B0aW9uPFN5bWJvbFRhYmxlPiA9IG51bGw7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQWN0aW9uIHtcbiAgZXhwb3J0IHR5cGUgU3RhcnRQcm9ncmFtID0gWydzdGFydFByb2dyYW0nLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kUHJvZ3JhbSA9IFsnZW5kUHJvZ3JhbScsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFN0YXJ0QmxvY2sgPSBbJ3N0YXJ0QmxvY2snLCBbQVNULlByb2dyYW0sIG51bWJlciwgbnVtYmVyW11dXTtcbiAgZXhwb3J0IHR5cGUgRW5kQmxvY2sgPSBbJ2VuZEJsb2NrJywgW0FTVC5Qcm9ncmFtLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgQmxvY2sgPSBbJ2Jsb2NrJywgW0FTVC5CbG9ja1N0YXRlbWVudCwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgTXVzdGFjaGUgPSBbJ211c3RhY2hlJywgW0FTVC5NdXN0YWNoZVN0YXRlbWVudCB8IEFTVC5QYXJ0aWFsU3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBPcGVuRWxlbWVudCA9IFsnb3BlbkVsZW1lbnQnLCBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBDbG9zZUVsZW1lbnQgPSBbJ2Nsb3NlRWxlbWVudCcsIFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIFRleHQgPSBbJ3RleHQnLCBbQVNULlRleHROb2RlLCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBDb21tZW50ID0gWydjb21tZW50JywgW0FTVC5Db21tZW50U3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuXG4gIGV4cG9ydCB0eXBlIEFjdGlvbiA9XG4gICAgICBTdGFydFByb2dyYW1cbiAgICB8IEVuZFByb2dyYW1cbiAgICB8IFN0YXJ0QmxvY2tcbiAgICB8IEVuZEJsb2NrXG4gICAgfCBCbG9ja1xuICAgIHwgTXVzdGFjaGVcbiAgICB8IE9wZW5FbGVtZW50XG4gICAgfCBDbG9zZUVsZW1lbnRcbiAgICB8IFRleHRcbiAgICB8IENvbW1lbnRcbiAgICA7XG59XG5cbmV4cG9ydCB0eXBlIEFjdGlvbiA9IEFjdGlvbi5BY3Rpb247XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbXBsYXRlVmlzaXRvciB7XG4gIHByaXZhdGUgZnJhbWVTdGFjazogRnJhbWVbXSA9IFtdO1xuICBwdWJsaWMgYWN0aW9uczogQWN0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBwcm9ncmFtRGVwdGggPSAtMTtcblxuICB2aXNpdChub2RlOiBBU1QuQmFzZU5vZGUpIHtcbiAgICB0aGlzW25vZGUudHlwZV0obm9kZSk7XG4gIH1cblxuICAvLyBUcmF2ZXJzYWwgbWV0aG9kc1xuXG4gIFByb2dyYW0ocHJvZ3JhbTogQVNULlByb2dyYW0pIHtcbiAgICB0aGlzLnByb2dyYW1EZXB0aCsrO1xuXG4gICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5nZXRDdXJyZW50RnJhbWUoKTtcbiAgICBsZXQgcHJvZ3JhbUZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcblxuICAgIGlmICghcGFyZW50RnJhbWUpIHtcbiAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IFN5bWJvbFRhYmxlLnRvcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmFtWydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzIS5jaGlsZChwcm9ncmFtLmJsb2NrUGFyYW1zKTtcbiAgICB9XG5cbiAgICBsZXQgc3RhcnRUeXBlOiBzdHJpbmcsIGVuZFR5cGU6IHN0cmluZztcblxuICAgIGlmICh0aGlzLnByb2dyYW1EZXB0aCA9PT0gMCkge1xuICAgICAgc3RhcnRUeXBlID0gJ3N0YXJ0UHJvZ3JhbSc7XG4gICAgICBlbmRUeXBlID0gJ2VuZFByb2dyYW0nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFR5cGUgPSAnc3RhcnRCbG9jayc7XG4gICAgICBlbmRUeXBlID0gJ2VuZEJsb2NrJztcbiAgICB9XG5cbiAgICBwcm9ncmFtRnJhbWUucGFyZW50Tm9kZSA9IHByb2dyYW07XG4gICAgcHJvZ3JhbUZyYW1lLmNoaWxkcmVuID0gcHJvZ3JhbS5ib2R5O1xuICAgIHByb2dyYW1GcmFtZS5jaGlsZENvdW50ID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aDtcbiAgICBwcm9ncmFtRnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgIHByb2dyYW1GcmFtZS5hY3Rpb25zLnB1c2goW2VuZFR5cGUsIFtwcm9ncmFtLCB0aGlzLnByb2dyYW1EZXB0aF1dIGFzIEFjdGlvbik7XG4gICAgcHJvZ3JhbUZyYW1lLnN5bWJvbHMgPSBwcm9ncmFtWydzeW1ib2xzJ107XG5cbiAgICBmb3IgKGxldCBpID0gcHJvZ3JhbS5ib2R5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBwcm9ncmFtRnJhbWUuY2hpbGRJbmRleCA9IGk7XG4gICAgICB0aGlzLnZpc2l0KHByb2dyYW0uYm9keVtpXSk7XG4gICAgfVxuXG4gICAgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucHVzaChbc3RhcnRUeXBlLCBbXG4gICAgICBwcm9ncmFtLCBwcm9ncmFtRnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50LFxuICAgICAgcHJvZ3JhbUZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucmV2ZXJzZSgpXG4gICAgXV0gYXMgQWN0aW9uKTtcbiAgICB0aGlzLnBvcEZyYW1lKCk7XG5cbiAgICB0aGlzLnByb2dyYW1EZXB0aC0tO1xuXG4gICAgLy8gUHVzaCB0aGUgY29tcGxldGVkIHRlbXBsYXRlIGludG8gdGhlIGdsb2JhbCBhY3Rpb25zIGxpc3RcbiAgICBpZiAocGFyZW50RnJhbWUpIHsgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50Kys7IH1cbiAgICB0aGlzLmFjdGlvbnMucHVzaCguLi5wcm9ncmFtRnJhbWUuYWN0aW9ucy5yZXZlcnNlKCkpO1xuICB9XG5cbiAgRWxlbWVudE5vZGUoZWxlbWVudDogQVNULkVsZW1lbnROb2RlKSB7XG4gICAgbGV0IHBhcmVudEZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgbGV0IGVsZW1lbnRGcmFtZSA9IHRoaXMucHVzaEZyYW1lKCk7XG5cbiAgICBlbGVtZW50RnJhbWUucGFyZW50Tm9kZSA9IGVsZW1lbnQ7XG4gICAgZWxlbWVudEZyYW1lLmNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbjtcbiAgICBlbGVtZW50RnJhbWUuY2hpbGRDb3VudCA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ICs9IGVsZW1lbnQubW9kaWZpZXJzLmxlbmd0aDtcbiAgICBlbGVtZW50RnJhbWUuYmxhbmtDaGlsZFRleHROb2RlcyA9IFtdO1xuICAgIGVsZW1lbnRGcmFtZS5zeW1ib2xzID0gZWxlbWVudFsnc3ltYm9scyddID0gcGFyZW50RnJhbWUuc3ltYm9scyEuY2hpbGQoZWxlbWVudC5ibG9ja1BhcmFtcyk7XG5cbiAgICBsZXQgYWN0aW9uQXJnczogW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXJdID0gW1xuICAgICAgZWxlbWVudCxcbiAgICAgIHBhcmVudEZyYW1lLmNoaWxkSW5kZXghLFxuICAgICAgcGFyZW50RnJhbWUuY2hpbGRDb3VudCFcbiAgICBdO1xuXG4gICAgZWxlbWVudEZyYW1lLmFjdGlvbnMucHVzaChbJ2Nsb3NlRWxlbWVudCcsIGFjdGlvbkFyZ3NdKTtcblxuICAgIGZvciAobGV0IGkgPSBlbGVtZW50LmF0dHJpYnV0ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMudmlzaXQoZWxlbWVudC5hdHRyaWJ1dGVzW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZWxlbWVudEZyYW1lLmNoaWxkSW5kZXggPSBpO1xuICAgICAgdGhpcy52aXNpdChlbGVtZW50LmNoaWxkcmVuW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgb3BlbiA9IFsnb3BlbkVsZW1lbnQnLCBbLi4uYWN0aW9uQXJncywgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQsIGVsZW1lbnRGcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzLnJldmVyc2UoKV1dIGFzIEFjdGlvbi5PcGVuRWxlbWVudDtcbiAgICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKG9wZW4pO1xuXG4gICAgdGhpcy5wb3BGcmFtZSgpO1xuXG4gICAgLy8gUHJvcGFnYXRlIHRoZSBlbGVtZW50J3MgZnJhbWUgc3RhdGUgdG8gdGhlIHBhcmVudCBmcmFtZVxuICAgIGlmIChlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCA+IDApIHsgcGFyZW50RnJhbWUubXVzdGFjaGVDb3VudCsrOyB9XG4gICAgcGFyZW50RnJhbWUuY2hpbGRUZW1wbGF0ZUNvdW50ICs9IGVsZW1lbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQ7XG4gICAgcGFyZW50RnJhbWUuYWN0aW9ucy5wdXNoKC4uLmVsZW1lbnRGcmFtZS5hY3Rpb25zKTtcbiAgfVxuXG4gIEF0dHJOb2RlKGF0dHI6IEFTVC5BdHRyTm9kZSkge1xuICAgIGlmIChhdHRyLnZhbHVlLnR5cGUgIT09ICdUZXh0Tm9kZScpIHtcbiAgICAgIHRoaXMuY3VycmVudEZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICB9XG4gIH07XG5cbiAgVGV4dE5vZGUodGV4dDogQVNULlRleHROb2RlKSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgaWYgKHRleHQuY2hhcnMgPT09ICcnKSB7XG4gICAgICBmcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzIS5wdXNoKGRvbUluZGV4T2YoZnJhbWUuY2hpbGRyZW4hLCB0ZXh0KSk7XG4gICAgfVxuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ3RleHQnLCBbdGV4dCwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgQmxvY2tTdGF0ZW1lbnQobm9kZTogQVNULkJsb2NrU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG5cbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnYmxvY2snLCBbbm9kZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG5cbiAgICBpZiAobm9kZS5pbnZlcnNlKSB7IHRoaXMudmlzaXQobm9kZS5pbnZlcnNlKTsgfVxuICAgIGlmIChub2RlLnByb2dyYW0pIHsgdGhpcy52aXNpdChub2RlLnByb2dyYW0pOyB9XG4gIH07XG5cbiAgUGFydGlhbFN0YXRlbWVudChub2RlOiBBU1QuUGFydGlhbFN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydtdXN0YWNoZScsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBDb21tZW50U3RhdGVtZW50KHRleHQ6IEFTVC5Db21tZW50U3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnY29tbWVudCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBNdXN0YWNoZUNvbW1lbnRTdGF0ZW1lbnQoKSB7XG4gICAgLy8gSW50ZW50aW9uYWwgZW1wdHk6IEhhbmRsZWJhcnMgY29tbWVudHMgc2hvdWxkIG5vdCBhZmZlY3Qgb3V0cHV0LlxuICB9O1xuXG4gIE11c3RhY2hlU3RhdGVtZW50KG11c3RhY2hlOiBBU1QuTXVzdGFjaGVTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5tdXN0YWNoZUNvdW50Kys7XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsnbXVzdGFjaGUnLCBbbXVzdGFjaGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIC8vIEZyYW1lIGhlbHBlcnNcblxuICBwcml2YXRlIGdldCBjdXJyZW50RnJhbWUoKTogRnJhbWUge1xuICAgIHJldHVybiBleHBlY3QodGhpcy5nZXRDdXJyZW50RnJhbWUoKSwgXCJFeHBlY3RlZCBhIGN1cnJlbnQgZnJhbWVcIik7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRGcmFtZSgpOiBPcHRpb248RnJhbWU+IHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZVN0YWNrW3RoaXMuZnJhbWVTdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEZyYW1lKCkge1xuICAgIGxldCBmcmFtZSA9IG5ldyBGcmFtZSgpO1xuICAgIHRoaXMuZnJhbWVTdGFjay5wdXNoKGZyYW1lKTtcbiAgICByZXR1cm4gZnJhbWU7XG4gIH1cblxuICBwcml2YXRlIHBvcEZyYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2sucG9wKCk7XG4gIH1cbn1cblxuLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgYGRvbU5vZGVgIGluIHRoZSBgbm9kZXNgIGFycmF5LCBza2lwcGluZ1xuLy8gb3ZlciBhbnkgbm9kZXMgd2hpY2ggZG8gbm90IHJlcHJlc2VudCBET00gbm9kZXMuXG5mdW5jdGlvbiBkb21JbmRleE9mKG5vZGVzOiBBU1QuTm9kZVtdLCBkb21Ob2RlOiBBU1QuVGV4dE5vZGUgfCBBU1QuRWxlbWVudE5vZGUpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIGxldCBub2RlID0gbm9kZXNbaV07XG5cbiAgICBpZiAobm9kZS50eXBlICE9PSAnVGV4dE5vZGUnICYmIG5vZGUudHlwZSAhPT0gJ0VsZW1lbnROb2RlJykge1xuICAgICAgY29udGludWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGRvbU5vZGUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL0BnbGltbWVyL2NvbXBpbGVyL2xpYi90ZW1wbGF0ZS12aXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFQSxBQUFPLFNBQWdCLEFBQUksTUFBRSxBQUFXLEFBQUUsQUFBTSxBQUFFLG1CQUFNLEFBQWUsQUFBQztBQUV4RSxBQUFNLFdBQ0osQUFBTTs7Ozs7Z0JBQUMsQUFBRyxxQkFDUixBQUFNO2VBQUMsSUFBSSxBQUFrQixBQUFFLEFBQUMsQUFDbEMsQUFBQztBQVlELEFBQUs7O2lEQUFDLEFBQWdCO0FBQ3BCOztZQUFJLEFBQU8saUJBQVUsQUFBRztBQUFDLEFBQUksbUJBQUksQUFBSSxNQUFDLEFBQVEsU0FBQyxBQUFJLEFBQUMsQUFBQyxBQUFDLEFBQ3RELEFBQU07U0FEUSxBQUFNO2VBQ2IsSUFBSSxBQUFnQixpQkFBQyxBQUFJLE1BQUUsQUFBTSxRQUFFLEFBQU8sQUFBQyxBQUFDLEFBQ3JELEFBQUMsQUFDRjs7Ozs7QUFFRCxBQUFNLFdBQTBCOzs7Ozs7K0VBQ3ZCOztlQUFPLFVBQWEsQUFBRSxBQUFDLEFBRXRCO2VBQUksT0FBRyxBQUFDLEFBQUMsQUFDVDtlQUFLLFFBQUcsQUFBSSxBQUFVLEFBQUMsQUFDdkI7ZUFBTSxTQUFHLEFBQUksQUFBVSxBQUFDLEFBMENsQyxBQUFDOztBQXhDQyxBQUFHOztvREFBQyxBQUFhLE9BQ2YsQUFBTTtlQUFDLEFBQUssQUFBQyxBQUNmLEFBQUM7QUFFRCxBQUFHOztvREFBQyxBQUFhLE9BQ2Y7Y0FBTSxBQUFXLEFBQUUsQUFBQyxBQUN0QixBQUFDO0FBRUQsQUFBWTs7d0VBQ1YsQUFBTTtlQUFDLEFBQUUsQUFBQyxBQUNaLEFBQUM7QUFFRCxBQUFXOztzRUFDVCxBQUFNO2VBQUMsQUFBRSxBQUFDLEFBQ1osQUFBQztBQUVELEFBQWE7O3dFQUFDLEFBQVks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QU07bUJBQUMsQUFBSyxBQUFDLEFBQ2YsQUFBQyxBQUNIO0FBQUM7QUFFRCxBQUFNO1dBQUMsQ0FBQyxBQUFDLEFBQUMsQUFDWixBQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVNUIH0gZnJvbSAnQGdsaW1tZXIvc3ludGF4JztcbmltcG9ydCB7IENvcmUgfSBmcm9tICdAZ2xpbW1lci93aXJlLWZvcm1hdCc7XG5pbXBvcnQgeyBEaWN0LCBPcHRpb24sIGRpY3QsIHVucmVhY2hhYmxlLCBleHBlY3QgfSBmcm9tICdAZ2xpbW1lci91dGlsJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFN5bWJvbFRhYmxlIHtcbiAgc3RhdGljIHRvcCgpOiBQcm9ncmFtU3ltYm9sVGFibGUge1xuICAgIHJldHVybiBuZXcgUHJvZ3JhbVN5bWJvbFRhYmxlKCk7XG4gIH1cblxuICBhYnN0cmFjdCBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbjtcbiAgYWJzdHJhY3QgZ2V0KG5hbWU6IHN0cmluZyk6IG51bWJlcjtcblxuICBhYnN0cmFjdCBnZXRMb2NhbHNNYXAoKTogRGljdDxudW1iZXI+O1xuICBhYnN0cmFjdCBnZXRFdmFsSW5mbygpOiBDb3JlLkV2YWxJbmZvO1xuXG4gIGFic3RyYWN0IGFsbG9jYXRlTmFtZWQobmFtZTogc3RyaW5nKTogbnVtYmVyO1xuICBhYnN0cmFjdCBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlcjtcbiAgYWJzdHJhY3QgYWxsb2NhdGUoaWRlbnRpZmllcjogc3RyaW5nKTogbnVtYmVyO1xuXG4gIGNoaWxkKGxvY2Fsczogc3RyaW5nW10pOiBCbG9ja1N5bWJvbFRhYmxlIHtcbiAgICBsZXQgc3ltYm9scyA9IGxvY2Fscy5tYXAobmFtZSA9PiB0aGlzLmFsbG9jYXRlKG5hbWUpKTtcbiAgICByZXR1cm4gbmV3IEJsb2NrU3ltYm9sVGFibGUodGhpcywgbG9jYWxzLCBzeW1ib2xzKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvZ3JhbVN5bWJvbFRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUge1xuICBwdWJsaWMgc3ltYm9sczogc3RyaW5nW10gPSBbXTtcblxuICBwcml2YXRlIHNpemUgPSAxO1xuICBwcml2YXRlIG5hbWVkID0gZGljdDxudW1iZXI+KCk7XG4gIHByaXZhdGUgYmxvY2tzID0gZGljdDxudW1iZXI+KCk7XG5cbiAgaGFzKF9uYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQoX25hbWU6IHN0cmluZyk6IG5ldmVyIHtcbiAgICB0aHJvdyB1bnJlYWNoYWJsZSgpO1xuICB9XG5cbiAgZ2V0TG9jYWxzTWFwKCk6IERpY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbyB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgYWxsb2NhdGVOYW1lZChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBuYW1lZCA9IHRoaXMubmFtZWRbbmFtZV07XG5cbiAgICBpZiAoIW5hbWVkKSB7XG4gICAgICBuYW1lZCA9IHRoaXMubmFtZWRbbmFtZV0gPSB0aGlzLmFsbG9jYXRlKG5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBuYW1lZDtcbiAgfVxuXG4gIGFsbG9jYXRlQmxvY2sobmFtZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgYmxvY2sgPSB0aGlzLmJsb2Nrc1tuYW1lXTtcblxuICAgIGlmICghYmxvY2spIHtcbiAgICAgIGJsb2NrID0gdGhpcy5ibG9ja3NbbmFtZV0gPSB0aGlzLmFsbG9jYXRlKGAmJHtuYW1lfWApO1xuICAgIH1cblxuICAgIHJldHVybiBibG9jaztcbiAgfVxuXG4gIGFsbG9jYXRlKGlkZW50aWZpZXI6IHN0cmluZyk6IG51bWJlciB7XG4gICAgdGhpcy5zeW1ib2xzLnB1c2goaWRlbnRpZmllcik7XG4gICAgcmV0dXJuIHRoaXMuc2l6ZSsrO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCbG9ja1N5bWJvbFRhYmxlIGV4dGVuZHMgU3ltYm9sVGFibGUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBhcmVudDogU3ltYm9sVGFibGUsIHB1YmxpYyBzeW1ib2xzOiBzdHJpbmdbXSwgcHVibGljIHNsb3RzOiBudW1iZXJbXSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBoYXMobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnN5bWJvbHMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHx8IHRoaXMucGFyZW50LmhhcyhuYW1lKTtcbiAgfVxuXG4gIGdldChuYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGxldCBzbG90ID0gdGhpcy5zeW1ib2xzLmluZGV4T2YobmFtZSk7XG4gICAgcmV0dXJuIHNsb3QgPT09IC0xID8gdGhpcy5wYXJlbnQuZ2V0KG5hbWUpIDogdGhpcy5zbG90c1tzbG90XTtcbiAgfVxuXG4gIGdldExvY2Fsc01hcCgpOiBEaWN0PG51bWJlcj4ge1xuICAgIGxldCBkaWN0ID0gdGhpcy5wYXJlbnQuZ2V0TG9jYWxzTWFwKCk7XG4gICAgdGhpcy5zeW1ib2xzLmZvckVhY2goc3ltYm9sID0+IGRpY3Rbc3ltYm9sXSA9IHRoaXMuZ2V0KHN5bWJvbCkpO1xuICAgIHJldHVybiBkaWN0O1xuICB9XG5cbiAgZ2V0RXZhbEluZm8oKTogQ29yZS5FdmFsSW5mbyB7XG4gICAgbGV0IGxvY2FscyA9IHRoaXMuZ2V0TG9jYWxzTWFwKCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGxvY2FscykubWFwKHN5bWJvbCA9PiBsb2NhbHNbc3ltYm9sXSk7XG4gIH1cblxuICBhbGxvY2F0ZU5hbWVkKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlTmFtZWQobmFtZSk7XG4gIH1cblxuICBhbGxvY2F0ZUJsb2NrKG5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmFsbG9jYXRlQmxvY2sobmFtZSk7XG4gIH1cblxuICBhbGxvY2F0ZShpZGVudGlmaWVyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcmVudC5hbGxvY2F0ZShpZGVudGlmaWVyKTtcbiAgfVxufVxuXG4vKipcbiAqIFRha2VzIGluIGFuIEFTVCBhbmQgb3V0cHV0cyBhIGxpc3Qgb2YgYWN0aW9ucyB0byBiZSBjb25zdW1lZFxuICogYnkgYSBjb21waWxlci4gRm9yIGV4YW1wbGUsIHRoZSB0ZW1wbGF0ZVxuICpcbiAqICAgICBmb297e2Jhcn19PGRpdj5iYXo8L2Rpdj5cbiAqXG4gKiBwcm9kdWNlcyB0aGUgYWN0aW9uc1xuICpcbiAqICAgICBbWydzdGFydFByb2dyYW0nLCBbcHJvZ3JhbU5vZGUsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAzXV0sXG4gKiAgICAgIFsnbXVzdGFjaGUnLCBbbXVzdGFjaGVOb2RlLCAxLCAzXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDIsIDMsIDBdXSxcbiAqICAgICAgWyd0ZXh0JywgW3RleHROb2RlLCAwLCAxXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAyLCAzXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhpcyB2aXNpdG9yIHdhbGtzIHRoZSBBU1QgZGVwdGggZmlyc3QgYW5kIGJhY2t3YXJkcy4gQXNcbiAqIGEgcmVzdWx0IHRoZSBib3R0b20tbW9zdCBjaGlsZCB0ZW1wbGF0ZSB3aWxsIGFwcGVhciBhdCB0aGVcbiAqIHRvcCBvZiB0aGUgYWN0aW9ucyBsaXN0IHdoZXJlYXMgdGhlIHJvb3QgdGVtcGxhdGUgd2lsbCBhcHBlYXJcbiAqIGF0IHRoZSBib3R0b20gb2YgdGhlIGxpc3QuIEZvciBleGFtcGxlLFxuICpcbiAqICAgICA8ZGl2Pnt7I2lmfX1mb297e2Vsc2V9fWJhcjxiPjwvYj57ey9pZn19PC9kaXY+XG4gKlxuICogcHJvZHVjZXMgdGhlIGFjdGlvbnNcbiAqXG4gKiAgICAgW1snc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAwXV0sXG4gKiAgICAgIFsndGV4dCcsIFt0ZXh0Tm9kZSwgMCwgMiwgMF1dLFxuICogICAgICBbJ29wZW5FbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyLCAwXV0sXG4gKiAgICAgIFsnY2xvc2VFbGVtZW50JywgW2VsZW1lbnROb2RlLCAxLCAyXV0sXG4gKiAgICAgIFsnZW5kUHJvZ3JhbScsIFtwcm9ncmFtTm9kZV1dLFxuICogICAgICBbJ3N0YXJ0UHJvZ3JhbScsIFtwcm9ncmFtTm9kZSwgMF1dLFxuICogICAgICBbJ3RleHQnLCBbdGV4dE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV0sXG4gKiAgICAgIFsnc3RhcnRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlLCAyXV0sXG4gKiAgICAgIFsnb3BlbkVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDEsIDFdXSxcbiAqICAgICAgWydibG9jaycsIFtibG9ja05vZGUsIDAsIDFdXSxcbiAqICAgICAgWydjbG9zZUVsZW1lbnQnLCBbZWxlbWVudE5vZGUsIDAsIDFdXSxcbiAqICAgICAgWydlbmRQcm9ncmFtJywgW3Byb2dyYW1Ob2RlXV1dXG4gKlxuICogVGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgaXMgbWFpbnRhaW5lZCBieSBhIHN0YWNrIG9mIGZyYW1lcy5cbiAqIFdoZW5ldmVyIGEgbm9kZSB3aXRoIGNoaWxkcmVuIGlzIGVudGVyZWQgKGVpdGhlciBhIFByb2dyYW1Ob2RlXG4gKiBvciBhbiBFbGVtZW50Tm9kZSkgYSBmcmFtZSBpcyBwdXNoZWQgb250byB0aGUgc3RhY2suIFRoZSBmcmFtZVxuICogY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSB0cmF2ZXJzYWwgb2YgdGhhdFxuICogbm9kZS4gRm9yIGV4YW1wbGUsXG4gKlxuICogICAtIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoaWxkIG5vZGUgYmVpbmcgdmlzaXRlZFxuICogICAtIHRoZSBudW1iZXIgb2YgbXVzdGFjaGVzIGNvbnRhaW5lZCB3aXRoaW4gaXRzIGNoaWxkIG5vZGVzXG4gKiAgIC0gdGhlIGxpc3Qgb2YgYWN0aW9ucyBnZW5lcmF0ZWQgYnkgaXRzIGNoaWxkIG5vZGVzXG4gKi9cblxuY2xhc3MgRnJhbWUge1xuICBwdWJsaWMgcGFyZW50Tm9kZTogT3B0aW9uPE9iamVjdD4gPSBudWxsO1xuICBwdWJsaWMgY2hpbGRyZW46IE9wdGlvbjxBU1QuTm9kZVtdPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZEluZGV4OiBPcHRpb248bnVtYmVyPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZENvdW50OiBPcHRpb248bnVtYmVyPiA9IG51bGw7XG4gIHB1YmxpYyBjaGlsZFRlbXBsYXRlQ291bnQgPSAwO1xuICBwdWJsaWMgbXVzdGFjaGVDb3VudCA9IDA7XG4gIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwdWJsaWMgYmxhbmtDaGlsZFRleHROb2RlczogT3B0aW9uPG51bWJlcltdPiA9IG51bGw7XG4gIHB1YmxpYyBzeW1ib2xzOiBPcHRpb248U3ltYm9sVGFibGU+ID0gbnVsbDtcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY3Rpb24ge1xuICBleHBvcnQgdHlwZSBTdGFydFByb2dyYW0gPSBbJ3N0YXJ0UHJvZ3JhbScsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBFbmRQcm9ncmFtID0gWydlbmRQcm9ncmFtJywgW0FTVC5Qcm9ncmFtLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgU3RhcnRCbG9jayA9IFsnc3RhcnRCbG9jaycsIFtBU1QuUHJvZ3JhbSwgbnVtYmVyLCBudW1iZXJbXV1dO1xuICBleHBvcnQgdHlwZSBFbmRCbG9jayA9IFsnZW5kQmxvY2snLCBbQVNULlByb2dyYW0sIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBCbG9jayA9IFsnYmxvY2snLCBbQVNULkJsb2NrU3RhdGVtZW50LCBudW1iZXIsIG51bWJlcl1dO1xuICBleHBvcnQgdHlwZSBNdXN0YWNoZSA9IFsnbXVzdGFjaGUnLCBbQVNULk11c3RhY2hlU3RhdGVtZW50IHwgQVNULlBhcnRpYWxTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIE9wZW5FbGVtZW50ID0gWydvcGVuRWxlbWVudCcsIFtBU1QuRWxlbWVudE5vZGUsIG51bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcltdXV07XG4gIGV4cG9ydCB0eXBlIENsb3NlRWxlbWVudCA9IFsnY2xvc2VFbGVtZW50JywgW0FTVC5FbGVtZW50Tm9kZSwgbnVtYmVyLCBudW1iZXJdXTtcbiAgZXhwb3J0IHR5cGUgVGV4dCA9IFsndGV4dCcsIFtBU1QuVGV4dE5vZGUsIG51bWJlciwgbnVtYmVyXV07XG4gIGV4cG9ydCB0eXBlIENvbW1lbnQgPSBbJ2NvbW1lbnQnLCBbQVNULkNvbW1lbnRTdGF0ZW1lbnQsIG51bWJlciwgbnVtYmVyXV07XG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uID1cbiAgICAgIFN0YXJ0UHJvZ3JhbVxuICAgIHwgRW5kUHJvZ3JhbVxuICAgIHwgU3RhcnRCbG9ja1xuICAgIHwgRW5kQmxvY2tcbiAgICB8IEJsb2NrXG4gICAgfCBNdXN0YWNoZVxuICAgIHwgT3BlbkVsZW1lbnRcbiAgICB8IENsb3NlRWxlbWVudFxuICAgIHwgVGV4dFxuICAgIHwgQ29tbWVudFxuICAgIDtcbn1cblxuZXhwb3J0IHR5cGUgQWN0aW9uID0gQWN0aW9uLkFjdGlvbjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVtcGxhdGVWaXNpdG9yIHtcbiAgcHJpdmF0ZSBmcmFtZVN0YWNrOiBGcmFtZVtdID0gW107XG4gIHB1YmxpYyBhY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIHByb2dyYW1EZXB0aCA9IC0xO1xuXG4gIHZpc2l0KG5vZGU6IEFTVC5CYXNlTm9kZSkge1xuICAgIHRoaXNbbm9kZS50eXBlXShub2RlKTtcbiAgfVxuXG4gIC8vIFRyYXZlcnNhbCBtZXRob2RzXG5cbiAgUHJvZ3JhbShwcm9ncmFtOiBBU1QuUHJvZ3JhbSkge1xuICAgIHRoaXMucHJvZ3JhbURlcHRoKys7XG5cbiAgICBsZXQgcGFyZW50RnJhbWUgPSB0aGlzLmdldEN1cnJlbnRGcmFtZSgpO1xuICAgIGxldCBwcm9ncmFtRnJhbWUgPSB0aGlzLnB1c2hGcmFtZSgpO1xuXG4gICAgaWYgKCFwYXJlbnRGcmFtZSkge1xuICAgICAgcHJvZ3JhbVsnc3ltYm9scyddID0gU3ltYm9sVGFibGUudG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyYW1bJ3N5bWJvbHMnXSA9IHBhcmVudEZyYW1lLnN5bWJvbHMhLmNoaWxkKHByb2dyYW0uYmxvY2tQYXJhbXMpO1xuICAgIH1cblxuICAgIGxldCBzdGFydFR5cGU6IHN0cmluZywgZW5kVHlwZTogc3RyaW5nO1xuXG4gICAgaWYgKHRoaXMucHJvZ3JhbURlcHRoID09PSAwKSB7XG4gICAgICBzdGFydFR5cGUgPSAnc3RhcnRQcm9ncmFtJztcbiAgICAgIGVuZFR5cGUgPSAnZW5kUHJvZ3JhbSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VHlwZSA9ICdzdGFydEJsb2NrJztcbiAgICAgIGVuZFR5cGUgPSAnZW5kQmxvY2snO1xuICAgIH1cblxuICAgIHByb2dyYW1GcmFtZS5wYXJlbnROb2RlID0gcHJvZ3JhbTtcbiAgICBwcm9ncmFtRnJhbWUuY2hpbGRyZW4gPSBwcm9ncmFtLmJvZHk7XG4gICAgcHJvZ3JhbUZyYW1lLmNoaWxkQ291bnQgPSBwcm9ncmFtLmJvZHkubGVuZ3RoO1xuICAgIHByb2dyYW1GcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzID0gW107XG4gICAgcHJvZ3JhbUZyYW1lLmFjdGlvbnMucHVzaChbZW5kVHlwZSwgW3Byb2dyYW0sIHRoaXMucHJvZ3JhbURlcHRoXV0gYXMgQWN0aW9uKTtcbiAgICBwcm9ncmFtRnJhbWUuc3ltYm9scyA9IHByb2dyYW1bJ3N5bWJvbHMnXTtcblxuICAgIGZvciAobGV0IGkgPSBwcm9ncmFtLmJvZHkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHByb2dyYW1GcmFtZS5jaGlsZEluZGV4ID0gaTtcbiAgICAgIHRoaXMudmlzaXQocHJvZ3JhbS5ib2R5W2ldKTtcbiAgICB9XG5cbiAgICBwcm9ncmFtRnJhbWUuYWN0aW9ucy5wdXNoKFtzdGFydFR5cGUsIFtcbiAgICAgIHByb2dyYW0sIHByb2dyYW1GcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQsXG4gICAgICBwcm9ncmFtRnJhbWUuYmxhbmtDaGlsZFRleHROb2Rlcy5yZXZlcnNlKClcbiAgICBdXSBhcyBBY3Rpb24pO1xuICAgIHRoaXMucG9wRnJhbWUoKTtcblxuICAgIHRoaXMucHJvZ3JhbURlcHRoLS07XG5cbiAgICAvLyBQdXNoIHRoZSBjb21wbGV0ZWQgdGVtcGxhdGUgaW50byB0aGUgZ2xvYmFsIGFjdGlvbnMgbGlzdFxuICAgIGlmIChwYXJlbnRGcmFtZSkgeyBwYXJlbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQrKzsgfVxuICAgIHRoaXMuYWN0aW9ucy5wdXNoKC4uLnByb2dyYW1GcmFtZS5hY3Rpb25zLnJldmVyc2UoKSk7XG4gIH1cblxuICBFbGVtZW50Tm9kZShlbGVtZW50OiBBU1QuRWxlbWVudE5vZGUpIHtcbiAgICBsZXQgcGFyZW50RnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBsZXQgZWxlbWVudEZyYW1lID0gdGhpcy5wdXNoRnJhbWUoKTtcblxuICAgIGVsZW1lbnRGcmFtZS5wYXJlbnROb2RlID0gZWxlbWVudDtcbiAgICBlbGVtZW50RnJhbWUuY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuO1xuICAgIGVsZW1lbnRGcmFtZS5jaGlsZENvdW50ID0gZWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7XG4gICAgZWxlbWVudEZyYW1lLm11c3RhY2hlQ291bnQgKz0gZWxlbWVudC5tb2RpZmllcnMubGVuZ3RoO1xuICAgIGVsZW1lbnRGcmFtZS5ibGFua0NoaWxkVGV4dE5vZGVzID0gW107XG4gICAgZWxlbWVudEZyYW1lLnN5bWJvbHMgPSBlbGVtZW50WydzeW1ib2xzJ10gPSBwYXJlbnRGcmFtZS5zeW1ib2xzIS5jaGlsZChlbGVtZW50LmJsb2NrUGFyYW1zKTtcblxuICAgIGxldCBhY3Rpb25BcmdzOiBbQVNULkVsZW1lbnROb2RlLCBudW1iZXIsIG51bWJlcl0gPSBbXG4gICAgICBlbGVtZW50LFxuICAgICAgcGFyZW50RnJhbWUuY2hpbGRJbmRleCEsXG4gICAgICBwYXJlbnRGcmFtZS5jaGlsZENvdW50IVxuICAgIF07XG5cbiAgICBlbGVtZW50RnJhbWUuYWN0aW9ucy5wdXNoKFsnY2xvc2VFbGVtZW50JywgYWN0aW9uQXJnc10pO1xuXG4gICAgZm9yIChsZXQgaSA9IGVsZW1lbnQuYXR0cmlidXRlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdGhpcy52aXNpdChlbGVtZW50LmF0dHJpYnV0ZXNbaV0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBlbGVtZW50RnJhbWUuY2hpbGRJbmRleCA9IGk7XG4gICAgICB0aGlzLnZpc2l0KGVsZW1lbnQuY2hpbGRyZW5baV0pO1xuICAgIH1cblxuICAgIGxldCBvcGVuID0gWydvcGVuRWxlbWVudCcsIFsuLi5hY3Rpb25BcmdzLCBlbGVtZW50RnJhbWUubXVzdGFjaGVDb3VudCwgZWxlbWVudEZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMucmV2ZXJzZSgpXV0gYXMgQWN0aW9uLk9wZW5FbGVtZW50O1xuICAgIGVsZW1lbnRGcmFtZS5hY3Rpb25zLnB1c2gob3Blbik7XG5cbiAgICB0aGlzLnBvcEZyYW1lKCk7XG5cbiAgICAvLyBQcm9wYWdhdGUgdGhlIGVsZW1lbnQncyBmcmFtZSBzdGF0ZSB0byB0aGUgcGFyZW50IGZyYW1lXG4gICAgaWYgKGVsZW1lbnRGcmFtZS5tdXN0YWNoZUNvdW50ID4gMCkgeyBwYXJlbnRGcmFtZS5tdXN0YWNoZUNvdW50Kys7IH1cbiAgICBwYXJlbnRGcmFtZS5jaGlsZFRlbXBsYXRlQ291bnQgKz0gZWxlbWVudEZyYW1lLmNoaWxkVGVtcGxhdGVDb3VudDtcbiAgICBwYXJlbnRGcmFtZS5hY3Rpb25zLnB1c2goLi4uZWxlbWVudEZyYW1lLmFjdGlvbnMpO1xuICB9XG5cbiAgQXR0ck5vZGUoYXR0cjogQVNULkF0dHJOb2RlKSB7XG4gICAgaWYgKGF0dHIudmFsdWUudHlwZSAhPT0gJ1RleHROb2RlJykge1xuICAgICAgdGhpcy5jdXJyZW50RnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIH1cbiAgfTtcblxuICBUZXh0Tm9kZSh0ZXh0OiBBU1QuVGV4dE5vZGUpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBpZiAodGV4dC5jaGFycyA9PT0gJycpIHtcbiAgICAgIGZyYW1lLmJsYW5rQ2hpbGRUZXh0Tm9kZXMhLnB1c2goZG9tSW5kZXhPZihmcmFtZS5jaGlsZHJlbiEsIHRleHQpKTtcbiAgICB9XG4gICAgZnJhbWUuYWN0aW9ucy5wdXNoKFsndGV4dCcsIFt0ZXh0LCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcbiAgfTtcblxuICBCbG9ja1N0YXRlbWVudChub2RlOiBBU1QuQmxvY2tTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcblxuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydibG9jaycsIFtub2RlLCBmcmFtZS5jaGlsZEluZGV4LCBmcmFtZS5jaGlsZENvdW50XV0gYXMgQWN0aW9uKTtcblxuICAgIGlmIChub2RlLmludmVyc2UpIHsgdGhpcy52aXNpdChub2RlLmludmVyc2UpOyB9XG4gICAgaWYgKG5vZGUucHJvZ3JhbSkgeyB0aGlzLnZpc2l0KG5vZGUucHJvZ3JhbSk7IH1cbiAgfTtcblxuICBQYXJ0aWFsU3RhdGVtZW50KG5vZGU6IEFTVC5QYXJ0aWFsU3RhdGVtZW50KSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5jdXJyZW50RnJhbWU7XG4gICAgZnJhbWUubXVzdGFjaGVDb3VudCsrO1xuICAgIGZyYW1lLmFjdGlvbnMucHVzaChbJ211c3RhY2hlJywgW25vZGUsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIENvbW1lbnRTdGF0ZW1lbnQodGV4dDogQVNULkNvbW1lbnRTdGF0ZW1lbnQpIHtcbiAgICBsZXQgZnJhbWUgPSB0aGlzLmN1cnJlbnRGcmFtZTtcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydjb21tZW50JywgW3RleHQsIGZyYW1lLmNoaWxkSW5kZXgsIGZyYW1lLmNoaWxkQ291bnRdXSBhcyBBY3Rpb24pO1xuICB9O1xuXG4gIE11c3RhY2hlQ29tbWVudFN0YXRlbWVudCgpIHtcbiAgICAvLyBJbnRlbnRpb25hbCBlbXB0eTogSGFuZGxlYmFycyBjb21tZW50cyBzaG91bGQgbm90IGFmZmVjdCBvdXRwdXQuXG4gIH07XG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQobXVzdGFjaGU6IEFTVC5NdXN0YWNoZVN0YXRlbWVudCkge1xuICAgIGxldCBmcmFtZSA9IHRoaXMuY3VycmVudEZyYW1lO1xuICAgIGZyYW1lLm11c3RhY2hlQ291bnQrKztcbiAgICBmcmFtZS5hY3Rpb25zLnB1c2goWydtdXN0YWNoZScsIFttdXN0YWNoZSwgZnJhbWUuY2hpbGRJbmRleCwgZnJhbWUuY2hpbGRDb3VudF1dIGFzIEFjdGlvbik7XG4gIH07XG5cbiAgLy8gRnJhbWUgaGVscGVyc1xuXG4gIHByaXZhdGUgZ2V0IGN1cnJlbnRGcmFtZSgpOiBGcmFtZSB7XG4gICAgcmV0dXJuIGV4cGVjdCh0aGlzLmdldEN1cnJlbnRGcmFtZSgpLCBcIkV4cGVjdGVkIGEgY3VycmVudCBmcmFtZVwiKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudEZyYW1lKCk6IE9wdGlvbjxGcmFtZT4ge1xuICAgIHJldHVybiB0aGlzLmZyYW1lU3RhY2tbdGhpcy5mcmFtZVN0YWNrLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoRnJhbWUoKSB7XG4gICAgbGV0IGZyYW1lID0gbmV3IEZyYW1lKCk7XG4gICAgdGhpcy5mcmFtZVN0YWNrLnB1c2goZnJhbWUpO1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wRnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWVTdGFjay5wb3AoKTtcbiAgfVxufVxuXG4vLyBSZXR1cm5zIHRoZSBpbmRleCBvZiBgZG9tTm9kZWAgaW4gdGhlIGBub2Rlc2AgYXJyYXksIHNraXBwaW5nXG4vLyBvdmVyIGFueSBub2RlcyB3aGljaCBkbyBub3QgcmVwcmVzZW50IERPTSBub2Rlcy5cbmZ1bmN0aW9uIGRvbUluZGV4T2Yobm9kZXM6IEFTVC5Ob2RlW10sIGRvbU5vZGU6IEFTVC5UZXh0Tm9kZSB8IEFTVC5FbGVtZW50Tm9kZSkge1xuICBsZXQgaW5kZXggPSAtMTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IG5vZGUgPSBub2Rlc1tpXTtcblxuICAgIGlmIChub2RlLnR5cGUgIT09ICdUZXh0Tm9kZScgJiYgbm9kZS50eXBlICE9PSAnRWxlbWVudE5vZGUnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gZG9tTm9kZSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cbiJdfQ==

@@ -5,2 +5,3 @@ import { DictSet, Option } from "@glimmer/util";

import { SerializedInlineBlock, SerializedTemplateBlock, Core, Statement, Statements, Expression, Expressions } from '@glimmer/wire-format';
import { Processor, CompilerOps, OpName, Op } from "./compiler-ops";
export declare type str = string;

@@ -47,4 +48,6 @@ export declare type Params = Core.Params;

}
export default class JavaScriptCompiler {
static process(opcodes: any[], symbols: ProgramSymbolTable): Template;
export declare type InVariable = number;
export declare type InOp<K extends keyof CompilerOps<InVariable> = OpName> = Op<InVariable, CompilerOps<InVariable>, K>;
export default class JavaScriptCompiler implements Processor<CompilerOps<number>, void, CompilerOps<void>> {
static process(opcodes: InOp[], symbols: ProgramSymbolTable): Template;
private template;

@@ -54,6 +57,6 @@ private blocks;

private values;
constructor(opcodes: any[], symbols: ProgramSymbolTable);
constructor(opcodes: InOp[], symbols: ProgramSymbolTable);
readonly currentBlock: Block;
process(): Template;
startBlock([program]: [AST.Program]): void;
startBlock(program: AST.Program): void;
endBlock(): void;

@@ -66,3 +69,3 @@ startProgram(): void;

modifier(name: string): void;
block(name: string, template: number, inverse: number): void;
block([name, template, inverse]: [string, number, number]): void;
openSplattedElement(element: AST.ElementNode): void;

@@ -72,5 +75,5 @@ openElement(element: AST.ElementNode): void;

closeElement(element: AST.ElementNode): void;
staticAttr(name: str, namespace: str): void;
dynamicAttr(name: str, namespace: str): void;
trustingAttr(name: str, namespace: str): void;
staticAttr([name, namespace]: [string, string]): void;
dynamicAttr([name, namespace]: [string, string]): void;
trustingAttr([name, namespace]: [string, string]): void;
staticArg(name: str): void;

@@ -86,3 +89,3 @@ dynamicArg(name: str): void;

unknown(name: string): void;
get(head: number, path: string[]): void;
get([head, path]: [number, string[]]): void;
maybeLocal(path: string[]): void;

@@ -89,0 +92,0 @@ concat(): void;

@@ -1,8 +0,11 @@

import { SymbolTable, Action } from "./template-visitor";
import { Action } from "./template-visitor";
import { Template } from "./javascript-compiler";
import { Option } from "@glimmer/util";
import { AST } from '@glimmer/syntax';
import { Opaque } from "@glimmer/interfaces";
import { InOp as SymbolInOp } from "./allocate-symbols";
export interface CompileOptions {
meta: Opaque;
}
export declare const THIS = 0;
export default class TemplateCompiler {

@@ -12,10 +15,8 @@ static compile(ast: AST.Program): Template;

private templateIds;
private symbolStack;
private opcodes;
private includeMeta;
readonly symbols: SymbolTable;
process(actions: Action[]): Action[];
startProgram(program: [AST.Program]): void;
process(actions: Action[]): SymbolInOp[];
startProgram([program]: [AST.Program]): void;
endProgram(): void;
startBlock(program: [AST.Program]): void;
startBlock([program]: [AST.Program]): void;
endBlock(): void;

@@ -45,3 +46,3 @@ text([action]: [AST.TextNode]): void;

UndefinedLiteral(action: AST.UndefinedLiteral): void;
opcode(name: any, action: any, ...args: any[]): void;
opcode<O extends SymbolInOp>(opcode: O, action?: Option<AST.BaseNode>): void;
prepareHelper(expr: AST.Call): void;

@@ -48,0 +49,0 @@ prepareParams(params: AST.Expression[]): void;

{
"name": "@glimmer/compiler",
"version": "0.33.0",
"version": "0.33.1",
"repository": "https://github.com/glimmerjs/glimmer-vm/tree/master/packages/@glimmer/compiler",
"dependencies": {
"@glimmer/syntax": "^0.33.0",
"@glimmer/util": "^0.33.0",
"@glimmer/wire-format": "^0.33.0",
"@glimmer/interfaces": "^0.33.0",
"@glimmer/syntax": "^0.33.1",
"@glimmer/util": "^0.33.1",
"@glimmer/wire-format": "^0.33.1",
"@glimmer/interfaces": "^0.33.1",
"simple-html-tokenizer": "^0.4.1"

@@ -11,0 +11,0 @@ },

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc