WME/aufgabe5/node_modules/csvtojson/.ts-node/46be5da2105bfdf13e8db086405c89f751746b6e7f1dbb5a5600bad96af1b73b/3500075a96fc0634311ddc6388c8b34a0413289c51d292e3fc966b03f2cac468.js

192 lines
20 KiB
JavaScript

"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var stream_1 = require("stream");
var Parameters_1 = require("./Parameters");
var ParseRuntime_1 = require("./ParseRuntime");
var bluebird_1 = __importDefault(require("bluebird"));
// import { ProcessorFork } from "./ProcessFork";
var ProcessorLocal_1 = require("./ProcessorLocal");
var Result_1 = require("./Result");
var Converter = /** @class */ (function (_super) {
__extends(Converter, _super);
function Converter(param, options) {
if (options === void 0) { options = {}; }
var _this = _super.call(this, options) || this;
_this.options = options;
_this.params = Parameters_1.mergeParams(param);
_this.runtime = ParseRuntime_1.initParseRuntime(_this);
_this.result = new Result_1.Result(_this);
// if (this.params.fork) {
// this.processor = new ProcessorFork(this);
// } else {
_this.processor = new ProcessorLocal_1.ProcessorLocal(_this);
// }
_this.once("error", function (err) {
// console.log("BBB");
setTimeout(function () {
_this.result.processError(err);
_this.emit("done", err);
}, 0);
});
_this.once("done", function () {
_this.processor.destroy();
});
return _this;
}
Converter.prototype.preRawData = function (onRawData) {
this.runtime.preRawDataHook = onRawData;
return this;
};
Converter.prototype.preFileLine = function (onFileLine) {
this.runtime.preFileLineHook = onFileLine;
return this;
};
Converter.prototype.subscribe = function (onNext, onError, onCompleted) {
this.parseRuntime.subscribe = {
onNext: onNext,
onError: onError,
onCompleted: onCompleted
};
return this;
};
Converter.prototype.fromFile = function (filePath, options) {
var _this = this;
var fs = require("fs");
// var rs = null;
// this.wrapCallback(cb, function () {
// if (rs && rs.destroy) {
// rs.destroy();
// }
// });
fs.exists(filePath, function (exist) {
if (exist) {
var rs = fs.createReadStream(filePath, options);
rs.pipe(_this);
}
else {
_this.emit('error', new Error("File does not exist. Check to make sure the file path to your csv is correct."));
}
});
return this;
};
Converter.prototype.fromStream = function (readStream) {
readStream.pipe(this);
return this;
};
Converter.prototype.fromString = function (csvString) {
var csv = csvString.toString();
var read = new stream_1.Readable();
var idx = 0;
read._read = function (size) {
if (idx >= csvString.length) {
this.push(null);
}
else {
var str = csvString.substr(idx, size);
this.push(str);
idx += size;
}
};
return this.fromStream(read);
};
Converter.prototype.then = function (onfulfilled, onrejected) {
var _this = this;
return new bluebird_1.default(function (resolve, reject) {
_this.parseRuntime.then = {
onfulfilled: function (value) {
if (onfulfilled) {
resolve(onfulfilled(value));
}
else {
resolve(value);
}
},
onrejected: function (err) {
if (onrejected) {
resolve(onrejected(err));
}
else {
reject(err);
}
}
};
});
};
Object.defineProperty(Converter.prototype, "parseParam", {
get: function () {
return this.params;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Converter.prototype, "parseRuntime", {
get: function () {
return this.runtime;
},
enumerable: true,
configurable: true
});
Converter.prototype._transform = function (chunk, encoding, cb) {
var _this = this;
this.processor.process(chunk)
.then(function (result) {
// console.log(result);
if (result.length > 0) {
_this.runtime.started = true;
return _this.result.processResult(result);
}
})
.then(function () {
_this.emit("drained");
cb();
}, function (error) {
_this.runtime.hasError = true;
_this.runtime.error = error;
_this.emit("error", error);
cb();
});
};
Converter.prototype._flush = function (cb) {
var _this = this;
this.processor.flush()
.then(function (data) {
if (data.length > 0) {
return _this.result.processResult(data);
}
})
.then(function () {
_this.processEnd(cb);
}, function (err) {
_this.emit("error", err);
cb();
});
};
Converter.prototype.processEnd = function (cb) {
this.result.endProcess();
this.emit("done");
cb();
};
Object.defineProperty(Converter.prototype, "parsedLineNumber", {
get: function () {
return this.runtime.parsedLineNumber;
},
enumerable: true,
configurable: true
});
return Converter;
}(stream_1.Transform));
exports.Converter = Converter;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiL1VzZXJzL2t4aWFuZy93b3JrL3Byb2plY3RzL2NzdjJqc29uL3NyYy9Db252ZXJ0ZXIudHMiLCJzb3VyY2VzIjpbIi9Vc2Vycy9reGlhbmcvd29yay9wcm9qZWN0cy9jc3YyanNvbi9zcmMvQ29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlDQUErRDtBQUMvRCwyQ0FBMEQ7QUFDMUQsK0NBQWdFO0FBQ2hFLHNEQUF5QjtBQU96QixpREFBaUQ7QUFDakQsbURBQWtEO0FBQ2xELG1DQUFrQztBQU1sQztJQUErQiw2QkFBUztJQXVGdEMsbUJBQVksS0FBOEIsRUFBUyxPQUE4QjtRQUE5Qix3QkFBQSxFQUFBLFlBQThCO1FBQWpGLFlBQ0Usa0JBQU0sT0FBTyxDQUFDLFNBdUJmO1FBeEJrRCxhQUFPLEdBQVAsT0FBTyxDQUF1QjtRQUUvRSxLQUFJLENBQUMsTUFBTSxHQUFHLHdCQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsS0FBSSxDQUFDLE9BQU8sR0FBRywrQkFBZ0IsQ0FBQyxLQUFJLENBQUMsQ0FBQztRQUN0QyxLQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLEtBQUksQ0FBQyxDQUFDO1FBQy9CLDBCQUEwQjtRQUMxQiw4Q0FBOEM7UUFDOUMsV0FBVztRQUNYLEtBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSwrQkFBYyxDQUFDLEtBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUk7UUFDSixLQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFDLEdBQVE7WUFDMUIsc0JBQXNCO1lBRXRCLFVBQVUsQ0FBQztnQkFDVCxLQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUIsS0FBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDekIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRVIsQ0FBQyxDQUFDLENBQUM7UUFD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QUFLLENBQUM7WUFDM0IsS0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDMUIsRUFBRSxFQUFFLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCwwQkFBTSxHQUFOLFVBQU8sRUFBWTtRQUFuQixpQkFjQztRQWJDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO2FBQ25CLElBQUksQ0FBQyxVQUFDLElBQUk7WUFDVCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUVuQixPQUFPLEtBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3hDO1FBQ0gsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDO1lBQ0osS0FBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QixDQUFDLEVBQUUsVUFBQyxHQUFHO1lBQ0wsS0FBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDeEIsRUFBRSxFQUFFLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFDTyw4QkFBVSxHQUFsQixVQUFtQixFQUFFO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQixFQUFFLEVBQUUsQ0FBQztJQUNQLENBQUM7SUFDRCxzQkFBSSx1Q0FBZ0I7YUFBcEI7WUFDRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDdkMsQ0FBQzs7O09BQUE7SUFDSCxnQkFBQztBQUFELENBQUMsQUEzSkQsQ0FBK0Isa0JBQVMsR0EySnZDO0FBM0pZLDhCQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNmb3JtLCBUcmFuc2Zvcm1PcHRpb25zLCBSZWFkYWJsZSB9IGZyb20gXCJzdHJlYW1cIjtcbmltcG9ydCB7IENTVlBhcnNlUGFyYW0sIG1lcmdlUGFyYW1zIH0gZnJvbSBcIi4vUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHsgUGFyc2VSdW50aW1lLCBpbml0UGFyc2VSdW50aW1lIH0gZnJvbSBcIi4vUGFyc2VSdW50aW1lXCI7XG5pbXBvcnQgUCBmcm9tIFwiYmx1ZWJpcmRcIjtcbmltcG9ydCB7IHN0cmluZ1RvTGluZXMgfSBmcm9tIFwiLi9maWxlbGluZVwiO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSBcImxvZGFzaC9tYXBcIjtcbmltcG9ydCB7IFJvd1NwbGl0LCBSb3dTcGxpdFJlc3VsdCB9IGZyb20gXCIuL3Jvd1NwbGl0XCI7XG5pbXBvcnQgZ2V0RW9sIGZyb20gXCIuL2dldEVvbFwiO1xuaW1wb3J0IGxpbmVUb0pzb24sIHsgSlNPTlJlc3VsdCB9IGZyb20gXCIuL2xpbmVUb0pzb25cIjtcbmltcG9ydCB7IFByb2Nlc3NvciwgUHJvY2Vzc0xpbmVSZXN1bHQgfSBmcm9tIFwiLi9Qcm9jZXNzb3JcIjtcbi8vIGltcG9ydCB7IFByb2Nlc3NvckZvcmsgfSBmcm9tIFwiLi9Qcm9jZXNzRm9ya1wiO1xuaW1wb3J0IHsgUHJvY2Vzc29yTG9jYWwgfSBmcm9tIFwiLi9Qcm9jZXNzb3JMb2NhbFwiO1xuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcIi4vUmVzdWx0XCI7XG5pbXBvcnQgQ1NWRXJyb3IgZnJvbSBcIi4vQ1NWRXJyb3JcIjtcbmltcG9ydCB7IGJ1ZkZyb21TdHJpbmcgfSBmcm9tIFwiLi91dGlsXCI7XG5cblxuXG5leHBvcnQgY2xhc3MgQ29udmVydGVyIGV4dGVuZHMgVHJhbnNmb3JtIGltcGxlbWVudHMgUHJvbWlzZUxpa2U8QXJyYXk8YW55Pj4ge1xuICBwcmVSYXdEYXRhKG9uUmF3RGF0YTogUHJlUmF3RGF0YUNhbGxiYWNrKTogQ29udmVydGVyIHtcbiAgICB0aGlzLnJ1bnRpbWUucHJlUmF3RGF0YUhvb2sgPSBvblJhd0RhdGE7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgcHJlRmlsZUxpbmUob25GaWxlTGluZTogUHJlRmlsZUxpbmVDYWxsYmFjayk6IENvbnZlcnRlciB7XG4gICAgdGhpcy5ydW50aW1lLnByZUZpbGVMaW5lSG9vayA9IG9uRmlsZUxpbmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgc3Vic2NyaWJlKFxuICAgIG9uTmV4dD86IChkYXRhOiBhbnksIGxpbmVOdW1iZXI6IG51bWJlcikgPT4gdm9pZCB8IFByb21pc2VMaWtlPHZvaWQ+LFxuICAgIG9uRXJyb3I/OiAoZXJyOiBDU1ZFcnJvcikgPT4gdm9pZCxcbiAgICBvbkNvbXBsZXRlZD86ICgpID0+IHZvaWQpOiBDb252ZXJ0ZXIge1xuICAgIHRoaXMucGFyc2VSdW50aW1lLnN1YnNjcmliZSA9IHtcbiAgICAgIG9uTmV4dCxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBvbkNvbXBsZXRlZFxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBmcm9tRmlsZShmaWxlUGF0aDogc3RyaW5nLCBvcHRpb25zPzogc3RyaW5nIHwgQ3JlYXRlUmVhZFN0cmVhbU9wdGlvbiB8IHVuZGVmaW5lZCk6IENvbnZlcnRlciB7XG4gICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG4gICAgLy8gdmFyIHJzID0gbnVsbDtcbiAgICAvLyB0aGlzLndyYXBDYWxsYmFjayhjYiwgZnVuY3Rpb24gKCkge1xuICAgIC8vICAgaWYgKHJzICYmIHJzLmRlc3Ryb3kpIHtcbiAgICAvLyAgICAgcnMuZGVzdHJveSgpO1xuICAgIC8vICAgfVxuICAgIC8vIH0pO1xuICAgIGZzLmV4aXN0cyhmaWxlUGF0aCwgKGV4aXN0KSA9PiB7XG4gICAgICBpZiAoZXhpc3QpIHtcbiAgICAgICAgY29uc3QgcnMgPSBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoLCBvcHRpb25zKTtcbiAgICAgICAgcnMucGlwZSh0aGlzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoXCJGaWxlIGRvZXMgbm90IGV4aXN0LiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIGZpbGUgcGF0aCB0byB5b3VyIGNzdiBpcyBjb3JyZWN0LlwiKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbiAgZnJvbVN0cmVhbShyZWFkU3RyZWFtOiBSZWFkYWJsZSk6IENvbnZlcnRlciB7XG4gICAgcmVhZFN0cmVhbS5waXBlKHRoaXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGZyb21TdHJpbmcoY3N2U3RyaW5nOiBzdHJpbmcpOiBDb252ZXJ0ZXIge1xuICAgIGNvbnN0IGNzdiA9IGNzdlN0cmluZy50b1N0cmluZygpO1xuICAgIGNvbnN0IHJlYWQgPSBuZXcgUmVhZGFibGUoKTtcbiAgICBsZXQgaWR4ID0gMDtcbiAgICByZWFkLl9yZWFkID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgIGlmIChpZHggPj0gY3N2U3RyaW5nLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnB1c2gobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdHIgPSBjc3ZTdHJpbmcuc3Vic3RyKGlkeCwgc2l6ZSk7XG4gICAgICAgIHRoaXMucHVzaChzdHIpO1xuICAgICAgICBpZHggKz0gc2l6ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZnJvbVN0cmVhbShyZWFkKTtcbiAgfVxuICB0aGVuPFRSZXN1bHQxID0gYW55W10sIFRSZXN1bHQyID0gbmV2ZXI+KG9uZnVsZmlsbGVkPzogKHZhbHVlOiBhbnlbXSkgPT4gVFJlc3VsdDEgfCBQcm9taXNlTGlrZTxUUmVzdWx0MT4sIG9ucmVqZWN0ZWQ/OiAocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KTogUHJvbWlzZUxpa2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgIHJldHVybiBuZXcgUCgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnBhcnNlUnVudGltZS50aGVuID0ge1xuICAgICAgICBvbmZ1bGZpbGxlZDogKHZhbHVlOiBhbnlbXSkgPT4ge1xuICAgICAgICAgIGlmIChvbmZ1bGZpbGxlZCkge1xuICAgICAgICAgICAgcmVzb2x2ZShvbmZ1bGZpbGxlZCh2YWx1ZSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHZhbHVlIGFzIGFueSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvbnJlamVjdGVkOiAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGlmIChvbnJlamVjdGVkKSB7XG4gICAgICAgICAgICByZXNvbHZlKG9ucmVqZWN0ZWQoZXJyKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXQgcGFyc2VQYXJhbSgpOiBDU1ZQYXJzZVBhcmFtIHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbXM7XG4gIH1cbiAgcHVibGljIGdldCBwYXJzZVJ1bnRpbWUoKTogUGFyc2VSdW50aW1lIHtcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lO1xuICB9XG4gIHByaXZhdGUgcGFyYW1zOiBDU1ZQYXJzZVBhcmFtO1xuICBwcml2YXRlIHJ1bnRpbWU6IFBhcnNlUnVudGltZTtcbiAgcHJpdmF0ZSBwcm9jZXNzb3I6IFByb2Nlc3NvcjtcbiAgcHJpdmF0ZSByZXN1bHQ6IFJlc3VsdDtcbiAgY29uc3RydWN0b3IocGFyYW0/OiBQYXJ0aWFsPENTVlBhcnNlUGFyYW0+LCBwdWJsaWMgb3B0aW9uczogVHJhbnNmb3JtT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgdGhpcy5wYXJhbXMgPSBtZXJnZVBhcmFtcyhwYXJhbSk7XG4gICAgdGhpcy5ydW50aW1lID0gaW5pdFBhcnNlUnVudGltZSh0aGlzKTtcbiAgICB0aGlzLnJlc3VsdCA9IG5ldyBSZXN1bHQodGhpcyk7XG4gICAgLy8gaWYgKHRoaXMucGFyYW1zLmZvcmspIHtcbiAgICAvLyAgIHRoaXMucHJvY2Vzc29yID0gbmV3IFByb2Nlc3NvckZvcmsodGhpcyk7XG4gICAgLy8gfSBlbHNlIHtcbiAgICB0aGlzLnByb2Nlc3NvciA9IG5ldyBQcm9jZXNzb3JMb2NhbCh0aGlzKTtcbiAgICAvLyB9XG4gICAgdGhpcy5vbmNlKFwiZXJyb3JcIiwgKGVycjogYW55KSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcIkJCQlwiKTtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzdWx0LnByb2Nlc3NFcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmVtaXQoXCJkb25lXCIsIGVycik7XG4gICAgICB9LCAwKTtcblxuICAgIH0pO1xuICAgIHRoaXMub25jZShcImRvbmVcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5wcm9jZXNzb3IuZGVzdHJveSgpO1xuICAgIH0pXG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBfdHJhbnNmb3JtKGNodW5rOiBhbnksIGVuY29kaW5nOiBzdHJpbmcsIGNiOiBGdW5jdGlvbikge1xuICAgIHRoaXMucHJvY2Vzc29yLnByb2Nlc3MoY2h1bmspXG4gICAgICAudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMucnVudGltZS5zdGFydGVkID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLnJlc3VsdC5wcm9jZXNzUmVzdWx0KHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuZW1pdChcImRyYWluZWRcIik7XG4gICAgICAgIGNiKCk7XG4gICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5ydW50aW1lLmhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ydW50aW1lLmVycm9yID0gZXJyb3I7XG4gICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIGVycm9yKTtcbiAgICAgICAgY2IoKTtcbiAgICAgIH0pO1xuICB9XG4gIF9mbHVzaChjYjogRnVuY3Rpb24pIHtcbiAgICB0aGlzLnByb2Nlc3Nvci5mbHVzaCgpXG4gICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHQucHJvY2Vzc1Jlc3VsdChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzRW5kKGNiKTtcbiAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcbiAgICAgICAgY2IoKTtcbiAgICAgIH0pXG4gIH1cbiAgcHJpdmF0ZSBwcm9jZXNzRW5kKGNiKSB7XG4gICAgdGhpcy5yZXN1bHQuZW5kUHJvY2VzcygpO1xuICAgIHRoaXMuZW1pdChcImRvbmVcIik7XG4gICAgY2IoKTtcbiAgfVxuICBnZXQgcGFyc2VkTGluZU51bWJlcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnJ1bnRpbWUucGFyc2VkTGluZU51bWJlcjtcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVSZWFkU3RyZWFtT3B0aW9uIHtcbiAgZmxhZ3M/OiBzdHJpbmc7XG4gIGVuY29kaW5nPzogc3RyaW5nO1xuICBmZD86IG51bWJlcjtcbiAgbW9kZT86IG51bWJlcjtcbiAgYXV0b0Nsb3NlPzogYm9vbGVhbjtcbiAgc3RhcnQ/OiBudW1iZXI7XG4gIGVuZD86IG51bWJlcjtcbiAgaGlnaFdhdGVyTWFyaz86IG51bWJlcjtcbn1cbmV4cG9ydCB0eXBlIENhbGxCYWNrID0gKGVycjogRXJyb3IsIGRhdGE6IEFycmF5PGFueT4pID0+IHZvaWQ7XG5cblxuZXhwb3J0IHR5cGUgUHJlRmlsZUxpbmVDYWxsYmFjayA9IChsaW5lOiBzdHJpbmcsIGxpbmVOdW1iZXI6IG51bWJlcikgPT4gc3RyaW5nIHwgUHJvbWlzZUxpa2U8c3RyaW5nPjtcbmV4cG9ydCB0eXBlIFByZVJhd0RhdGFDYWxsYmFjayA9IChjc3ZTdHJpbmc6IHN0cmluZykgPT4gc3RyaW5nIHwgUHJvbWlzZUxpa2U8c3RyaW5nPjtcbiJdfQ==