UNPKG

react-image-markup

Version:
257 lines (213 loc) 27.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _fabric = require("fabric"); var _canvasHistory = _interopRequireDefault(require("./canvasHistory")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } var _default = function () { var drag; var shape; var color; var lineWidth, fillCircle, angle; var properties; function Shape(canvas) { var draggable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var type = arguments.length > 2 ? arguments[2] : undefined; var params = arguments.length > 3 ? arguments[3] : undefined; if (!draggable) { drag = false; return Shape; } if (color && color !== params.stroke) { color = params.stroke; shape = type; new Shape(canvas, true, shape, params); return Shape; } if (shape && shape !== type) { shape = type; drag = true; new Shape(canvas, true, shape, params); return Shape; } properties = params; if (properties) { fillCircle = properties.fill; color = properties.stroke; lineWidth = properties.strokeWidth; angle = properties.angle; } this.canvas = canvas; this.className = 'Shape'; this.isDrawing = false; this.origX = 0; this.origY = 0; drag = draggable; shape = type; this.bindEvents(); } Shape.prototype.bindEvents = function () { var inst = this; document.onkeydown = function (e) { if (e.which === 46 || e.keycode === 46) { inst.canvas.getActiveObjects().forEach(function (obj) { inst.canvas.remove(obj); }); } inst.canvas.renderAll(); }; inst.selectable = true; inst.canvas.off('mouse:down'); inst.canvas.on('mouse:down', function (o) { inst.onMouseDown(o); }); inst.canvas.on('mouse:move', function (o) { inst.onMouseMove(o); }); inst.canvas.on('mouse:up', function (o) { inst.onMouseUp(o); }); inst.canvas.on('object:moving', function () { inst.disable(); }); }; Shape.prototype.onMouseUp = function () { var inst = this; if (!inst.isEnable()) { return; } if (drag) { inst.canvas.getObjects().forEach(function (object, index, array) { if (index === array.length - 1) { if (inst.canvas.getActiveObject() && inst.canvas.getActiveObject()._objects && inst.canvas.getActiveObject()._objects.length > 1) { inst.canvas.setActiveObject(object); } } }); if (inst.canvas.getActiveObject()) { inst.canvas.getActiveObject().hasControls = false; inst.canvas.getActiveObject().hasBorders = false; inst.canvas.getActiveObject().lockMovementX = true; inst.canvas.getActiveObject().lockMovementY = true; inst.canvas.getActiveObject().lockUniScaling = true; } inst.canvas.renderAll(); } new _canvasHistory["default"](inst.canvas); inst.disable(); }; Shape.prototype.onMouseMove = function (o) { var inst = this; if (!inst.isEnable()) { return; } inst.canvas.selection = false; var pointer = inst.canvas.getPointer(o.e); var activeObj; if (inst.canvas.getActiveObject()) { activeObj = inst.canvas.getActiveObject(); activeObj.stroke = color; activeObj.strokeWidth = lineWidth; activeObj.fill = fillCircle; activeObj.noScaleCache = false; activeObj.strokeUniform = true; } if (this.origX > pointer.x) { activeObj.set({ left: Math.abs(pointer.x) }); } if (this.origY > pointer.y) { activeObj.set({ top: Math.abs(pointer.y) }); } if (shape === "rect") { activeObj.set({ width: Math.abs(this.origX - pointer.x) }); activeObj.set({ height: Math.abs(this.origY - pointer.y) }); } if (shape === "circle") { activeObj.set({ rx: Math.abs(this.origX - pointer.x) / 2 }); activeObj.set({ ry: Math.abs(this.origY - pointer.y) / 2 }); } activeObj.setCoords(); inst.canvas.renderAll(); }; Shape.prototype.onMouseDown = function (o) { var inst = this; if (!drag) { if (inst.canvas.getActiveObject()) { inst.canvas.getActiveObject().hasControls = true; inst.canvas.getActiveObject().hasBorders = true; inst.canvas.getActiveObject().lockMovementX = false; inst.canvas.getActiveObject().lockMovementY = false; inst.canvas.getActiveObject().lockUniScaling = false; inst.canvas.renderAll(); } inst.disable(); return; } inst.enable(); if (inst.canvas.getActiveObject()) { inst.canvas.getActiveObject().hasControls = false; inst.canvas.getActiveObject().hasBorders = false; inst.canvas.getActiveObject().lockMovementX = true; inst.canvas.getActiveObject().lockMovementY = true; inst.canvas.getActiveObject().lockUniScaling = true; inst.canvas.renderAll(); } var pointer = inst.canvas.getPointer(o.e); this.origX = pointer.x; this.origY = pointer.y; if (shape === "rect") { var rect = new _fabric.fabric.Rect({ left: this.origX, top: this.origY, originX: 'left', originY: 'top', width: pointer.x - this.origX, height: pointer.y - this.origY, angle: angle, fill: fillCircle, transparentCorners: false, stroke: color, strokeWidth: lineWidth }); inst.canvas.add(rect).setActiveObject(rect); } if (shape === "circle") { var circle = new _fabric.fabric.Ellipse({ top: this.origY, left: this.origX, rx: 0, ry: 0, transparentCorners: false, hasBorders: true, hasControls: true }); inst.canvas.add(circle).setActiveObject(circle); } }; Shape.prototype.isEnable = function () { return this.isDrawing; }; Shape.prototype.enable = function () { this.isDrawing = true; }; Shape.prototype.disable = function () { this.isDrawing = false; }; return Shape; }(); exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hc3NldHMvanMvc2hhcGUuanMiXSwibmFtZXMiOlsiZHJhZyIsInNoYXBlIiwiY29sb3IiLCJsaW5lV2lkdGgiLCJmaWxsQ2lyY2xlIiwiYW5nbGUiLCJwcm9wZXJ0aWVzIiwiU2hhcGUiLCJjYW52YXMiLCJkcmFnZ2FibGUiLCJ0eXBlIiwicGFyYW1zIiwic3Ryb2tlIiwiZmlsbCIsInN0cm9rZVdpZHRoIiwiY2xhc3NOYW1lIiwiaXNEcmF3aW5nIiwib3JpZ1giLCJvcmlnWSIsImJpbmRFdmVudHMiLCJwcm90b3R5cGUiLCJpbnN0IiwiZG9jdW1lbnQiLCJvbmtleWRvd24iLCJlIiwid2hpY2giLCJrZXljb2RlIiwiZ2V0QWN0aXZlT2JqZWN0cyIsImZvckVhY2giLCJvYmoiLCJyZW1vdmUiLCJyZW5kZXJBbGwiLCJzZWxlY3RhYmxlIiwib2ZmIiwib24iLCJvIiwib25Nb3VzZURvd24iLCJvbk1vdXNlTW92ZSIsIm9uTW91c2VVcCIsImRpc2FibGUiLCJpc0VuYWJsZSIsImdldE9iamVjdHMiLCJvYmplY3QiLCJpbmRleCIsImFycmF5IiwibGVuZ3RoIiwiZ2V0QWN0aXZlT2JqZWN0IiwiX29iamVjdHMiLCJzZXRBY3RpdmVPYmplY3QiLCJoYXNDb250cm9scyIsImhhc0JvcmRlcnMiLCJsb2NrTW92ZW1lbnRYIiwibG9ja01vdmVtZW50WSIsImxvY2tVbmlTY2FsaW5nIiwiQ2FudmFzSGlzdG9yeSIsInNlbGVjdGlvbiIsInBvaW50ZXIiLCJnZXRQb2ludGVyIiwiYWN0aXZlT2JqIiwibm9TY2FsZUNhY2hlIiwic3Ryb2tlVW5pZm9ybSIsIngiLCJzZXQiLCJsZWZ0IiwiTWF0aCIsImFicyIsInkiLCJ0b3AiLCJ3aWR0aCIsImhlaWdodCIsInJ4IiwicnkiLCJzZXRDb29yZHMiLCJlbmFibGUiLCJyZWN0IiwiZmFicmljIiwiUmVjdCIsIm9yaWdpblgiLCJvcmlnaW5ZIiwidHJhbnNwYXJlbnRDb3JuZXJzIiwiYWRkIiwiY2lyY2xlIiwiRWxsaXBzZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOzs7O2VBQ2dCLFlBQVk7QUFDeEIsTUFBSUEsSUFBSjtBQUNBLE1BQUlDLEtBQUo7QUFDQSxNQUFJQyxLQUFKO0FBQ0EsTUFBSUMsU0FBSixFQUFjQyxVQUFkLEVBQXlCQyxLQUF6QjtBQUNBLE1BQUlDLFVBQUo7O0FBQ0EsV0FBU0MsS0FBVCxDQUFlQyxNQUFmLEVBQXFEO0FBQUEsUUFBL0JDLFNBQStCLHVFQUFuQixLQUFtQjtBQUFBLFFBQWJDLElBQWE7QUFBQSxRQUFSQyxNQUFROztBQUNqRCxRQUFHLENBQUNGLFNBQUosRUFBYztBQUNWVCxNQUFBQSxJQUFJLEdBQUcsS0FBUDtBQUNBLGFBQU9PLEtBQVA7QUFDSDs7QUFDRCxRQUFHTCxLQUFLLElBQUlBLEtBQUssS0FBS1MsTUFBTSxDQUFDQyxNQUE3QixFQUFvQztBQUNoQ1YsTUFBQUEsS0FBSyxHQUFHUyxNQUFNLENBQUNDLE1BQWY7QUFDQVgsTUFBQUEsS0FBSyxHQUFHUyxJQUFSO0FBQ0EsVUFBSUgsS0FBSixDQUFVQyxNQUFWLEVBQWlCLElBQWpCLEVBQXNCUCxLQUF0QixFQUE0QlUsTUFBNUI7QUFDQSxhQUFPSixLQUFQO0FBQ0g7O0FBQ0QsUUFBSU4sS0FBSyxJQUFJQSxLQUFLLEtBQUtTLElBQXZCLEVBQTZCO0FBQ3pCVCxNQUFBQSxLQUFLLEdBQUdTLElBQVI7QUFDQVYsTUFBQUEsSUFBSSxHQUFHLElBQVA7QUFDQSxVQUFJTyxLQUFKLENBQVVDLE1BQVYsRUFBaUIsSUFBakIsRUFBc0JQLEtBQXRCLEVBQTRCVSxNQUE1QjtBQUNBLGFBQU9KLEtBQVA7QUFDSDs7QUFDREQsSUFBQUEsVUFBVSxHQUFHSyxNQUFiOztBQUNBLFFBQUdMLFVBQUgsRUFBYztBQUNWRixNQUFBQSxVQUFVLEdBQUdFLFVBQVUsQ0FBQ08sSUFBeEI7QUFDQVgsTUFBQUEsS0FBSyxHQUFHSSxVQUFVLENBQUNNLE1BQW5CO0FBQ0FULE1BQUFBLFNBQVMsR0FBR0csVUFBVSxDQUFDUSxXQUF2QjtBQUNBVCxNQUFBQSxLQUFLLEdBQUdDLFVBQVUsQ0FBQ0QsS0FBbkI7QUFDSDs7QUFDRCxTQUFLRyxNQUFMLEdBQWNBLE1BQWQ7QUFDQSxTQUFLTyxTQUFMLEdBQWlCLE9BQWpCO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQixLQUFqQjtBQUNBLFNBQUtDLEtBQUwsR0FBYSxDQUFiO0FBQ0EsU0FBS0MsS0FBTCxHQUFhLENBQWI7QUFFQWxCLElBQUFBLElBQUksR0FBR1MsU0FBUDtBQUNBUixJQUFBQSxLQUFLLEdBQUdTLElBQVI7QUFFQSxTQUFLUyxVQUFMO0FBQ0g7O0FBRURaLEVBQUFBLEtBQUssQ0FBQ2EsU0FBTixDQUFnQkQsVUFBaEIsR0FBNkIsWUFBWTtBQUNyQyxRQUFJRSxJQUFJLEdBQUcsSUFBWDs7QUFDQUMsSUFBQUEsUUFBUSxDQUFDQyxTQUFULEdBQW1CLFVBQUNDLENBQUQsRUFBSztBQUNwQixVQUFHQSxDQUFDLENBQUNDLEtBQUYsS0FBWSxFQUFaLElBQWtCRCxDQUFDLENBQUNFLE9BQUYsS0FBYyxFQUFuQyxFQUFzQztBQUNsQ0wsUUFBQUEsSUFBSSxDQUFDYixNQUFMLENBQVltQixnQkFBWixHQUErQkMsT0FBL0IsQ0FBdUMsVUFBQ0MsR0FBRCxFQUFTO0FBQzVDUixVQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXNCLE1BQVosQ0FBbUJELEdBQW5CO0FBQ0gsU0FGRDtBQUdIOztBQUNEUixNQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXVCLFNBQVo7QUFDSCxLQVBEOztBQVFBVixJQUFBQSxJQUFJLENBQUNXLFVBQUwsR0FBa0IsSUFBbEI7QUFDUVgsSUFBQUEsSUFBSSxDQUFDYixNQUFMLENBQVl5QixHQUFaLENBQWdCLFlBQWhCO0FBRUFaLElBQUFBLElBQUksQ0FBQ2IsTUFBTCxDQUFZMEIsRUFBWixDQUFlLFlBQWYsRUFBNkIsVUFBVUMsQ0FBVixFQUFhO0FBQ3RDZCxNQUFBQSxJQUFJLENBQUNlLFdBQUwsQ0FBaUJELENBQWpCO0FBQ0gsS0FGRDtBQUdBZCxJQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWTBCLEVBQVosQ0FBZSxZQUFmLEVBQTZCLFVBQVVDLENBQVYsRUFBYTtBQUN0Q2QsTUFBQUEsSUFBSSxDQUFDZ0IsV0FBTCxDQUFpQkYsQ0FBakI7QUFDSCxLQUZEO0FBR0FkLElBQUFBLElBQUksQ0FBQ2IsTUFBTCxDQUFZMEIsRUFBWixDQUFlLFVBQWYsRUFBMkIsVUFBVUMsQ0FBVixFQUFhO0FBQ3BDZCxNQUFBQSxJQUFJLENBQUNpQixTQUFMLENBQWVILENBQWY7QUFDSCxLQUZEO0FBR0FkLElBQUFBLElBQUksQ0FBQ2IsTUFBTCxDQUFZMEIsRUFBWixDQUFlLGVBQWYsRUFBZ0MsWUFBWTtBQUN4Q2IsTUFBQUEsSUFBSSxDQUFDa0IsT0FBTDtBQUNILEtBRkQ7QUFLWCxHQTNCRDs7QUE0QkFoQyxFQUFBQSxLQUFLLENBQUNhLFNBQU4sQ0FBZ0JrQixTQUFoQixHQUE0QixZQUFZO0FBRXBDLFFBQUlqQixJQUFJLEdBQUcsSUFBWDs7QUFDQSxRQUFJLENBQUNBLElBQUksQ0FBQ21CLFFBQUwsRUFBTCxFQUFzQjtBQUNsQjtBQUNIOztBQUNELFFBQUd4QyxJQUFILEVBQVE7QUFDSnFCLE1BQUFBLElBQUksQ0FBQ2IsTUFBTCxDQUFZaUMsVUFBWixHQUF5QmIsT0FBekIsQ0FBaUMsVUFBU2MsTUFBVCxFQUFnQkMsS0FBaEIsRUFBc0JDLEtBQXRCLEVBQTZCO0FBQzFELFlBQUlELEtBQUssS0FBTUMsS0FBSyxDQUFDQyxNQUFOLEdBQWMsQ0FBN0IsRUFBaUM7QUFDN0IsY0FBR3hCLElBQUksQ0FBQ2IsTUFBTCxDQUFZc0MsZUFBWixNQUFpQ3pCLElBQUksQ0FBQ2IsTUFBTCxDQUFZc0MsZUFBWixHQUE4QkMsUUFBL0QsSUFBMkUxQixJQUFJLENBQUNiLE1BQUwsQ0FBWXNDLGVBQVosR0FBOEJDLFFBQTlCLENBQXVDRixNQUF2QyxHQUFnRCxDQUE5SCxFQUFnSTtBQUM1SHhCLFlBQUFBLElBQUksQ0FBQ2IsTUFBTCxDQUFZd0MsZUFBWixDQUE0Qk4sTUFBNUI7QUFFSDtBQUNKO0FBQ0osT0FQRDs7QUFRQSxVQUFHckIsSUFBSSxDQUFDYixNQUFMLENBQVlzQyxlQUFaLEVBQUgsRUFBaUM7QUFDN0J6QixRQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXNDLGVBQVosR0FBOEJHLFdBQTlCLEdBQTRDLEtBQTVDO0FBQ0E1QixRQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXNDLGVBQVosR0FBOEJJLFVBQTlCLEdBQTJDLEtBQTNDO0FBQ0E3QixRQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXNDLGVBQVosR0FBOEJLLGFBQTlCLEdBQThDLElBQTlDO0FBQ0E5QixRQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXNDLGVBQVosR0FBOEJNLGFBQTlCLEdBQThDLElBQTlDO0FBQ0EvQixRQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXNDLGVBQVosR0FBOEJPLGNBQTlCLEdBQStDLElBQS9DO0FBQ0g7O0FBQ0RoQyxNQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXVCLFNBQVo7QUFDSDs7QUFDRCxRQUFJdUIseUJBQUosQ0FBa0JqQyxJQUFJLENBQUNiLE1BQXZCO0FBQ0FhLElBQUFBLElBQUksQ0FBQ2tCLE9BQUw7QUFFSCxHQTNCRDs7QUE0QkFoQyxFQUFBQSxLQUFLLENBQUNhLFNBQU4sQ0FBZ0JpQixXQUFoQixHQUE4QixVQUFVRixDQUFWLEVBQWE7QUFDdkMsUUFBSWQsSUFBSSxHQUFHLElBQVg7O0FBQ0EsUUFBSSxDQUFDQSxJQUFJLENBQUNtQixRQUFMLEVBQUwsRUFBc0I7QUFDbEI7QUFDSDs7QUFDRG5CLElBQUFBLElBQUksQ0FBQ2IsTUFBTCxDQUFZK0MsU0FBWixHQUF3QixLQUF4QjtBQUNBLFFBQUlDLE9BQU8sR0FBR25DLElBQUksQ0FBQ2IsTUFBTCxDQUFZaUQsVUFBWixDQUF1QnRCLENBQUMsQ0FBQ1gsQ0FBekIsQ0FBZDtBQUNBLFFBQUlrQyxTQUFKOztBQUNBLFFBQUdyQyxJQUFJLENBQUNiLE1BQUwsQ0FBWXNDLGVBQVosRUFBSCxFQUFpQztBQUM3QlksTUFBQUEsU0FBUyxHQUFHckMsSUFBSSxDQUFDYixNQUFMLENBQVlzQyxlQUFaLEVBQVo7QUFDQVksTUFBQUEsU0FBUyxDQUFDOUMsTUFBVixHQUFtQlYsS0FBbkI7QUFDQXdELE1BQUFBLFNBQVMsQ0FBQzVDLFdBQVYsR0FBd0JYLFNBQXhCO0FBQ0F1RCxNQUFBQSxTQUFTLENBQUM3QyxJQUFWLEdBQWlCVCxVQUFqQjtBQUNBc0QsTUFBQUEsU0FBUyxDQUFDQyxZQUFWLEdBQXlCLEtBQXpCO0FBQ0FELE1BQUFBLFNBQVMsQ0FBQ0UsYUFBVixHQUEwQixJQUExQjtBQUNIOztBQUVELFFBQUksS0FBSzNDLEtBQUwsR0FBYXVDLE9BQU8sQ0FBQ0ssQ0FBekIsRUFBNEI7QUFDeEJILE1BQUFBLFNBQVMsQ0FBQ0ksR0FBVixDQUFjO0FBQ1ZDLFFBQUFBLElBQUksRUFBRUMsSUFBSSxDQUFDQyxHQUFMLENBQVNULE9BQU8sQ0FBQ0ssQ0FBakI7QUFESSxPQUFkO0FBR0g7O0FBQ0QsUUFBSSxLQUFLM0MsS0FBTCxHQUFhc0MsT0FBTyxDQUFDVSxDQUF6QixFQUE0QjtBQUN4QlIsTUFBQUEsU0FBUyxDQUFDSSxHQUFWLENBQWM7QUFDVkssUUFBQUEsR0FBRyxFQUFFSCxJQUFJLENBQUNDLEdBQUwsQ0FBU1QsT0FBTyxDQUFDVSxDQUFqQjtBQURLLE9BQWQ7QUFHSDs7QUFDRCxRQUFHakUsS0FBSyxLQUFLLE1BQWIsRUFBb0I7QUFDaEJ5RCxNQUFBQSxTQUFTLENBQUNJLEdBQVYsQ0FBYztBQUNWTSxRQUFBQSxLQUFLLEVBQUVKLElBQUksQ0FBQ0MsR0FBTCxDQUFTLEtBQUtoRCxLQUFMLEdBQWF1QyxPQUFPLENBQUNLLENBQTlCO0FBREcsT0FBZDtBQUdBSCxNQUFBQSxTQUFTLENBQUNJLEdBQVYsQ0FBYztBQUNWTyxRQUFBQSxNQUFNLEVBQUVMLElBQUksQ0FBQ0MsR0FBTCxDQUFTLEtBQUsvQyxLQUFMLEdBQWFzQyxPQUFPLENBQUNVLENBQTlCO0FBREUsT0FBZDtBQUdIOztBQUNELFFBQUdqRSxLQUFLLEtBQUssUUFBYixFQUFzQjtBQUNsQnlELE1BQUFBLFNBQVMsQ0FBQ0ksR0FBVixDQUFjO0FBQ1ZRLFFBQUFBLEVBQUUsRUFBRU4sSUFBSSxDQUFDQyxHQUFMLENBQVMsS0FBS2hELEtBQUwsR0FBYXVDLE9BQU8sQ0FBQ0ssQ0FBOUIsSUFBbUM7QUFEN0IsT0FBZDtBQUdBSCxNQUFBQSxTQUFTLENBQUNJLEdBQVYsQ0FBYztBQUNWUyxRQUFBQSxFQUFFLEVBQUVQLElBQUksQ0FBQ0MsR0FBTCxDQUFTLEtBQUsvQyxLQUFMLEdBQWFzQyxPQUFPLENBQUNVLENBQTlCLElBQW1DO0FBRDdCLE9BQWQ7QUFHSDs7QUFDRFIsSUFBQUEsU0FBUyxDQUFDYyxTQUFWO0FBQ0FuRCxJQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXVCLFNBQVo7QUFDSCxHQTdDRDs7QUErQ0F4QixFQUFBQSxLQUFLLENBQUNhLFNBQU4sQ0FBZ0JnQixXQUFoQixHQUE4QixVQUFVRCxDQUFWLEVBQWE7QUFFdkMsUUFBSWQsSUFBSSxHQUFHLElBQVg7O0FBQ0EsUUFBRyxDQUFDckIsSUFBSixFQUFTO0FBRUwsVUFBSXFCLElBQUksQ0FBQ2IsTUFBTCxDQUFZc0MsZUFBWixFQUFKLEVBQWtDO0FBQzlCekIsUUFBQUEsSUFBSSxDQUFDYixNQUFMLENBQVlzQyxlQUFaLEdBQThCRyxXQUE5QixHQUE0QyxJQUE1QztBQUNBNUIsUUFBQUEsSUFBSSxDQUFDYixNQUFMLENBQVlzQyxlQUFaLEdBQThCSSxVQUE5QixHQUEyQyxJQUEzQztBQUNBN0IsUUFBQUEsSUFBSSxDQUFDYixNQUFMLENBQVlzQyxlQUFaLEdBQThCSyxhQUE5QixHQUE4QyxLQUE5QztBQUNBOUIsUUFBQUEsSUFBSSxDQUFDYixNQUFMLENBQVlzQyxlQUFaLEdBQThCTSxhQUE5QixHQUE4QyxLQUE5QztBQUNBL0IsUUFBQUEsSUFBSSxDQUFDYixNQUFMLENBQVlzQyxlQUFaLEdBQThCTyxjQUE5QixHQUErQyxLQUEvQztBQUNBaEMsUUFBQUEsSUFBSSxDQUFDYixNQUFMLENBQVl1QixTQUFaO0FBQ0g7O0FBQ0RWLE1BQUFBLElBQUksQ0FBQ2tCLE9BQUw7QUFDQTtBQUNIOztBQUNHbEIsSUFBQUEsSUFBSSxDQUFDb0QsTUFBTDs7QUFFQSxRQUFHcEQsSUFBSSxDQUFDYixNQUFMLENBQVlzQyxlQUFaLEVBQUgsRUFBaUM7QUFDN0J6QixNQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXNDLGVBQVosR0FBOEJHLFdBQTlCLEdBQTRDLEtBQTVDO0FBQ0E1QixNQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXNDLGVBQVosR0FBOEJJLFVBQTlCLEdBQTJDLEtBQTNDO0FBQ0E3QixNQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXNDLGVBQVosR0FBOEJLLGFBQTlCLEdBQThDLElBQTlDO0FBQ0E5QixNQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXNDLGVBQVosR0FBOEJNLGFBQTlCLEdBQThDLElBQTlDO0FBQ0EvQixNQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXNDLGVBQVosR0FBOEJPLGNBQTlCLEdBQStDLElBQS9DO0FBQ0FoQyxNQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXVCLFNBQVo7QUFDSDs7QUFDRCxRQUFJeUIsT0FBTyxHQUFHbkMsSUFBSSxDQUFDYixNQUFMLENBQVlpRCxVQUFaLENBQXVCdEIsQ0FBQyxDQUFDWCxDQUF6QixDQUFkO0FBQ0EsU0FBS1AsS0FBTCxHQUFhdUMsT0FBTyxDQUFDSyxDQUFyQjtBQUNBLFNBQUszQyxLQUFMLEdBQWFzQyxPQUFPLENBQUNVLENBQXJCOztBQUNBLFFBQUdqRSxLQUFLLEtBQUssTUFBYixFQUFvQjtBQUNoQixVQUFJeUUsSUFBSSxHQUFHLElBQUlDLGVBQU9DLElBQVgsQ0FBZ0I7QUFDdkJiLFFBQUFBLElBQUksRUFBRSxLQUFLOUMsS0FEWTtBQUV2QmtELFFBQUFBLEdBQUcsRUFBRSxLQUFLakQsS0FGYTtBQUd2QjJELFFBQUFBLE9BQU8sRUFBRSxNQUhjO0FBSXZCQyxRQUFBQSxPQUFPLEVBQUUsS0FKYztBQUt2QlYsUUFBQUEsS0FBSyxFQUFFWixPQUFPLENBQUNLLENBQVIsR0FBWSxLQUFLNUMsS0FMRDtBQU12Qm9ELFFBQUFBLE1BQU0sRUFBRWIsT0FBTyxDQUFDVSxDQUFSLEdBQVksS0FBS2hELEtBTkY7QUFPdkJiLFFBQUFBLEtBQUssRUFBRUEsS0FQZ0I7QUFRdkJRLFFBQUFBLElBQUksRUFBRVQsVUFSaUI7QUFTdkIyRSxRQUFBQSxrQkFBa0IsRUFBRSxLQVRHO0FBVXZCbkUsUUFBQUEsTUFBTSxFQUFFVixLQVZlO0FBV3ZCWSxRQUFBQSxXQUFXLEVBQUVYO0FBWFUsT0FBaEIsQ0FBWDtBQWFBa0IsTUFBQUEsSUFBSSxDQUFDYixNQUFMLENBQVl3RSxHQUFaLENBQWdCTixJQUFoQixFQUFzQjFCLGVBQXRCLENBQXNDMEIsSUFBdEM7QUFDSDs7QUFDRCxRQUFHekUsS0FBSyxLQUFLLFFBQWIsRUFBc0I7QUFDbEIsVUFBSWdGLE1BQU0sR0FBRyxJQUFJTixlQUFPTyxPQUFYLENBQW1CO0FBQzVCZixRQUFBQSxHQUFHLEVBQUUsS0FBS2pELEtBRGtCO0FBRTVCNkMsUUFBQUEsSUFBSSxFQUFFLEtBQUs5QyxLQUZpQjtBQUc1QnFELFFBQUFBLEVBQUUsRUFBRSxDQUh3QjtBQUk1QkMsUUFBQUEsRUFBRSxFQUFFLENBSndCO0FBSzVCUSxRQUFBQSxrQkFBa0IsRUFBRSxLQUxRO0FBTTVCN0IsUUFBQUEsVUFBVSxFQUFFLElBTmdCO0FBTzVCRCxRQUFBQSxXQUFXLEVBQUU7QUFQZSxPQUFuQixDQUFiO0FBU0E1QixNQUFBQSxJQUFJLENBQUNiLE1BQUwsQ0FBWXdFLEdBQVosQ0FBZ0JDLE1BQWhCLEVBQXdCakMsZUFBeEIsQ0FBd0NpQyxNQUF4QztBQUNIO0FBQ1IsR0F6REQ7O0FBMERBMUUsRUFBQUEsS0FBSyxDQUFDYSxTQUFOLENBQWdCb0IsUUFBaEIsR0FBMkIsWUFBWTtBQUNuQyxXQUFPLEtBQUt4QixTQUFaO0FBQ0gsR0FGRDs7QUFJQVQsRUFBQUEsS0FBSyxDQUFDYSxTQUFOLENBQWdCcUQsTUFBaEIsR0FBeUIsWUFBWTtBQUNqQyxTQUFLekQsU0FBTCxHQUFpQixJQUFqQjtBQUNILEdBRkQ7O0FBSUFULEVBQUFBLEtBQUssQ0FBQ2EsU0FBTixDQUFnQm1CLE9BQWhCLEdBQTBCLFlBQVk7QUFDbEMsU0FBS3ZCLFNBQUwsR0FBaUIsS0FBakI7QUFDSCxHQUZEOztBQUdBLFNBQU9ULEtBQVA7QUFDSCxDQXZOZSxFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtmYWJyaWN9IGZyb20gJ2ZhYnJpYyc7XHJcbmltcG9ydCBDYW52YXNIaXN0b3J5IGZyb20gXCIuL2NhbnZhc0hpc3RvcnlcIjtcclxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCBkcmFnO1xyXG4gICAgbGV0IHNoYXBlO1xyXG4gICAgbGV0IGNvbG9yO1xyXG4gICAgbGV0IGxpbmVXaWR0aCxmaWxsQ2lyY2xlLGFuZ2xlO1xyXG4gICAgbGV0IHByb3BlcnRpZXM7XHJcbiAgICBmdW5jdGlvbiBTaGFwZShjYW52YXMsZHJhZ2dhYmxlID0gZmFsc2UsdHlwZSxwYXJhbXMpIHsgICAgIFxyXG4gICAgICAgIGlmKCFkcmFnZ2FibGUpe1xyXG4gICAgICAgICAgICBkcmFnID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBTaGFwZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoY29sb3IgJiYgY29sb3IgIT09IHBhcmFtcy5zdHJva2Upe1xyXG4gICAgICAgICAgICBjb2xvciA9IHBhcmFtcy5zdHJva2U7XHJcbiAgICAgICAgICAgIHNoYXBlID0gdHlwZTtcclxuICAgICAgICAgICAgbmV3IFNoYXBlKGNhbnZhcyx0cnVlLHNoYXBlLHBhcmFtcylcclxuICAgICAgICAgICAgcmV0dXJuIFNoYXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZigoc2hhcGUgJiYgc2hhcGUgIT09IHR5cGUpKXtcclxuICAgICAgICAgICAgc2hhcGUgPSB0eXBlO1xyXG4gICAgICAgICAgICBkcmFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgbmV3IFNoYXBlKGNhbnZhcyx0cnVlLHNoYXBlLHBhcmFtcylcclxuICAgICAgICAgICAgcmV0dXJuIFNoYXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwcm9wZXJ0aWVzID0gcGFyYW1zO1xyXG4gICAgICAgIGlmKHByb3BlcnRpZXMpe1xyXG4gICAgICAgICAgICBmaWxsQ2lyY2xlID0gcHJvcGVydGllcy5maWxsO1xyXG4gICAgICAgICAgICBjb2xvciA9IHByb3BlcnRpZXMuc3Ryb2tlO1xyXG4gICAgICAgICAgICBsaW5lV2lkdGggPSBwcm9wZXJ0aWVzLnN0cm9rZVdpZHRoO1xyXG4gICAgICAgICAgICBhbmdsZSA9IHByb3BlcnRpZXMuYW5nbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FudmFzID0gY2FudmFzOyAgICAgIFxyXG4gICAgICAgIHRoaXMuY2xhc3NOYW1lID0gJ1NoYXBlJztcclxuICAgICAgICB0aGlzLmlzRHJhd2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub3JpZ1ggPSAwO1xyXG4gICAgICAgIHRoaXMub3JpZ1kgPSAwO1xyXG5cclxuICAgICAgICBkcmFnID0gZHJhZ2dhYmxlO1xyXG4gICAgICAgIHNoYXBlID0gdHlwZTtcclxuXHJcbiAgICAgICAgdGhpcy5iaW5kRXZlbnRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgU2hhcGUucHJvdG90eXBlLmJpbmRFdmVudHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IGluc3QgPSB0aGlzO1xyXG4gICAgICAgIGRvY3VtZW50Lm9ua2V5ZG93bj0oZSk9PntcclxuICAgICAgICAgICAgaWYoZS53aGljaCA9PT0gNDYgfHwgZS5rZXljb2RlID09PSA0Nil7XHJcbiAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3RzKCkuZm9yRWFjaCgob2JqKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdC5jYW52YXMucmVtb3ZlKG9iailcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluc3QuY2FudmFzLnJlbmRlckFsbCgpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpbnN0LnNlbGVjdGFibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaW5zdC5jYW52YXMub2ZmKCdtb3VzZTpkb3duJyk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLm9uKCdtb3VzZTpkb3duJywgZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0Lm9uTW91c2VEb3duKG8pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5vbignbW91c2U6bW92ZScsIGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdC5vbk1vdXNlTW92ZShvKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaW5zdC5jYW52YXMub24oJ21vdXNlOnVwJywgZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0Lm9uTW91c2VVcChvKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaW5zdC5jYW52YXMub24oJ29iamVjdDptb3ZpbmcnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdC5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIFxyXG5cclxuICAgIH07XHJcbiAgICBTaGFwZS5wcm90b3R5cGUub25Nb3VzZVVwID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICBsZXQgaW5zdCA9IHRoaXM7XHJcbiAgICAgICAgaWYgKCFpbnN0LmlzRW5hYmxlKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihkcmFnKXtcclxuICAgICAgICAgICAgaW5zdC5jYW52YXMuZ2V0T2JqZWN0cygpLmZvckVhY2goZnVuY3Rpb24ob2JqZWN0LGluZGV4LGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IChhcnJheS5sZW5ndGggLTEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkgJiYgaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkuX29iamVjdHMgJiYgaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkuX29iamVjdHMubGVuZ3RoID4gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLnNldEFjdGl2ZU9iamVjdChvYmplY3QpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZihpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKSl7XHJcbiAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKS5oYXNDb250cm9scyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkuaGFzQm9yZGVycyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkubG9ja01vdmVtZW50WCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKS5sb2NrTW92ZW1lbnRZID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpLmxvY2tVbmlTY2FsaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbnN0LmNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmV3IENhbnZhc0hpc3RvcnkoaW5zdC5jYW52YXMpXHJcbiAgICAgICAgaW5zdC5kaXNhYmxlKCk7XHJcblxyXG4gICAgfTtcclxuICAgIFNoYXBlLnByb3RvdHlwZS5vbk1vdXNlTW92ZSA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgbGV0IGluc3QgPSB0aGlzO1xyXG4gICAgICAgIGlmICghaW5zdC5pc0VuYWJsZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaW5zdC5jYW52YXMuc2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHBvaW50ZXIgPSBpbnN0LmNhbnZhcy5nZXRQb2ludGVyKG8uZSk7XHJcbiAgICAgICAgbGV0IGFjdGl2ZU9iajtcclxuICAgICAgICBpZihpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKSl7XHJcbiAgICAgICAgICAgIGFjdGl2ZU9iaiA9IGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpO1xyXG4gICAgICAgICAgICBhY3RpdmVPYmouc3Ryb2tlID0gY29sb3I7XHJcbiAgICAgICAgICAgIGFjdGl2ZU9iai5zdHJva2VXaWR0aCA9IGxpbmVXaWR0aDtcclxuICAgICAgICAgICAgYWN0aXZlT2JqLmZpbGwgPSBmaWxsQ2lyY2xlO1xyXG4gICAgICAgICAgICBhY3RpdmVPYmoubm9TY2FsZUNhY2hlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGFjdGl2ZU9iai5zdHJva2VVbmlmb3JtID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9yaWdYID4gcG9pbnRlci54KSB7XHJcbiAgICAgICAgICAgIGFjdGl2ZU9iai5zZXQoe1xyXG4gICAgICAgICAgICAgICAgbGVmdDogTWF0aC5hYnMocG9pbnRlci54KVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMub3JpZ1kgPiBwb2ludGVyLnkpIHtcclxuICAgICAgICAgICAgYWN0aXZlT2JqLnNldCh7XHJcbiAgICAgICAgICAgICAgICB0b3A6IE1hdGguYWJzKHBvaW50ZXIueSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHNoYXBlID09PSBcInJlY3RcIil7XHJcbiAgICAgICAgICAgIGFjdGl2ZU9iai5zZXQoe1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IE1hdGguYWJzKHRoaXMub3JpZ1ggLSBwb2ludGVyLngpXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBhY3RpdmVPYmouc2V0KHtcclxuICAgICAgICAgICAgICAgIGhlaWdodDogTWF0aC5hYnModGhpcy5vcmlnWSAtIHBvaW50ZXIueSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHNoYXBlID09PSBcImNpcmNsZVwiKXtcclxuICAgICAgICAgICAgYWN0aXZlT2JqLnNldCh7XHJcbiAgICAgICAgICAgICAgICByeDogTWF0aC5hYnModGhpcy5vcmlnWCAtIHBvaW50ZXIueCkgLyAyXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBhY3RpdmVPYmouc2V0KHtcclxuICAgICAgICAgICAgICAgIHJ5OiBNYXRoLmFicyh0aGlzLm9yaWdZIC0gcG9pbnRlci55KSAvIDJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFjdGl2ZU9iai5zZXRDb29yZHMoKTtcclxuICAgICAgICBpbnN0LmNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICAgIH07XHJcblxyXG4gICAgU2hhcGUucHJvdG90eXBlLm9uTW91c2VEb3duID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICBcclxuICAgICAgICBsZXQgaW5zdCA9IHRoaXM7ICAgXHJcbiAgICAgICAgaWYoIWRyYWcpe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoIGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpKXtcclxuICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpLmhhc0NvbnRyb2xzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpLmhhc0JvcmRlcnMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkubG9ja01vdmVtZW50WCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkubG9ja01vdmVtZW50WSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkubG9ja1VuaVNjYWxpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLnJlbmRlckFsbCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGluc3QuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgICBpbnN0LmVuYWJsZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkpe1xyXG4gICAgICAgICAgICAgICAgaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkuaGFzQ29udHJvbHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpLmhhc0JvcmRlcnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpLmxvY2tNb3ZlbWVudFggPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaW5zdC5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkubG9ja01vdmVtZW50WSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKS5sb2NrVW5pU2NhbGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcG9pbnRlciA9IGluc3QuY2FudmFzLmdldFBvaW50ZXIoby5lKTtcclxuICAgICAgICAgICAgdGhpcy5vcmlnWCA9IHBvaW50ZXIueDtcclxuICAgICAgICAgICAgdGhpcy5vcmlnWSA9IHBvaW50ZXIueTtcclxuICAgICAgICAgICAgaWYoc2hhcGUgPT09IFwicmVjdFwiKXtcclxuICAgICAgICAgICAgICAgIGxldCByZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLm9yaWdYLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogdGhpcy5vcmlnWSxcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiAnbGVmdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogJ3RvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHBvaW50ZXIueCAtIHRoaXMub3JpZ1gsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBwb2ludGVyLnkgLSB0aGlzLm9yaWdZLFxyXG4gICAgICAgICAgICAgICAgICAgIGFuZ2xlOiBhbmdsZSxcclxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBmaWxsQ2lyY2xlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW50Q29ybmVyczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBjb2xvcixcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogbGluZVdpZHRoXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGluc3QuY2FudmFzLmFkZChyZWN0KS5zZXRBY3RpdmVPYmplY3QocmVjdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoc2hhcGUgPT09IFwiY2lyY2xlXCIpe1xyXG4gICAgICAgICAgICAgICAgbGV0IGNpcmNsZSA9IG5ldyBmYWJyaWMuRWxsaXBzZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiB0aGlzLm9yaWdZLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMub3JpZ1gsXHJcbiAgICAgICAgICAgICAgICAgICAgcng6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgcnk6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnRDb3JuZXJzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNCb3JkZXJzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc0NvbnRyb2xzOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpbnN0LmNhbnZhcy5hZGQoY2lyY2xlKS5zZXRBY3RpdmVPYmplY3QoY2lyY2xlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIFNoYXBlLnByb3RvdHlwZS5pc0VuYWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0RyYXdpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgU2hhcGUucHJvdG90eXBlLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLmlzRHJhd2luZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgU2hhcGUucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5pc0RyYXdpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBTaGFwZTtcclxufSgpKTtcclxuIl19