--- a/annot-server/static/js/pianoroll.js Tue Jan 13 10:46:05 2015 +0100
+++ b/annot-server/static/js/pianoroll.js Tue Jan 13 14:03:31 2015 +0100
@@ -52,8 +52,8 @@
// Init containers
var containerList = [];
-containerList.push(new PianoRoll(uberContainer, 0, 0, prHeight1, true, pixelsPerSecond1, sceneWidth, noteColors, colorsReg, lineColor, lineInterval));
-containerList.push(new PianoRoll(uberContainer, 0, prHeight1, prHeight2, false, pixelsPerSecond2, sceneWidth, noteColors, colorsReg, lineColor, lineInterval));
+containerList.push(new PianoRoll(uberContainer, 0, 0, prHeight1, true, pixelsPerSecond1, sceneWidth, noteColors, colorsReg, lineColor, lineInterval, offsetMusic, prHeight1 / 128));
+containerList.push(new PianoRoll(uberContainer, 0, prHeight1, prHeight2, false, pixelsPerSecond2, sceneWidth, noteColors, colorsReg, lineColor, lineInterval, offsetMusic, prHeight2 / 128));
// Line between two containers
var graphics = new PIXI.Graphics();
@@ -211,7 +211,7 @@
var PIXI = require('pixi');
var randomColor = require('randomColor');
-function PianoRoll(parentContainer, xInit, yInit, height, linesDown, pixelsPerSecond, width, noteColors, colorsReg, lineColor, lineInterval){
+function PianoRoll(parentContainer, xInit, yInit, height, linesDown, pixelsPerSecond, width, noteColors, colorsReg, lineColor, lineInterval, offsetMusic, noteHeight){
var _this = this;
this.container = new PIXI.DisplayObjectContainer();
this.container.position.x = xInit;
@@ -226,11 +226,17 @@
this.colorsReg = colorsReg || {};
this.lineColor = lineColor;
this.lineInterval = lineInterval;
+ this.offsetMusic = offsetMusic || 0;
+ this.noteHeight = noteHeight;
this.addNote = function(note, startTime, duration, velocity, canal){
//console.log("coucou 1", note, timeFromZero, ts, velocity, pixelsPerSecond, container, prHeight);
- var beginX = (offsetMusic + startTime) * this.pixelsPerSecond / 1000;
+ var beginX = (this.offsetMusic + startTime) * this.pixelsPerSecond / 1000;
var width = duration * this.pixelsPerSecond / 1000;
+ if((beginX+width) < Math.abs(this.container.x) - this.width) {
+ // not visible. do nothing
+ return;
+ }
// We draw the rectangle
var graphics = new PIXI.Graphics();
//console.log("beginX = ", beginX, "canal = ", canal, "color = ", noteColor[canal], "width = ", width, "note = ", note, "velocity = ", velocity);
@@ -281,20 +287,25 @@
this.removePassedObjets = function(){
var nbChilds = _this.container.children.length;
- var i = 0, childIsNowDisplayed = false;
+ var i = 0, childIsNowDisplayed = false, childrenToRemove = [];
while(i<nbChilds && !childIsNowDisplayed){
- var child = _this.container.children[0];
+ var child = _this.container.children[i++];
//console.log("remove ? ", child.x, child.width, ((child.x + child.width) < (Math.abs(_this.container.x) - _this.width)));
+ if(typeof(child) == 'undefined') {
+ continue;
+ }
if((child.x + child.width) < (Math.abs(_this.container.x) - _this.width)){
- _this.container.removeChild(child);
+ childrenToRemove.push(child);
//console.log(" remove !!!");
}
- else{
+ else {
childIsNowDisplayed = true;
//console.log(" childIsNowDisplayed");
}
- i++;
}
+ childrenToRemove.forEach(function(child) {
+ _this.container.removeChild(child);
+ });
//console.log("before : ", nbChilds, ", after : ", _this.container.children.length);
};
@@ -308,4 +319,4 @@
},{"pixi":"pixi","randomColor":"randomColor"}]},{},[1])(1)
});
-//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuL2FwcC9qcy9tYWluLmpzIiwiL1VzZXJzL3ltaC9kZXYvcHJvamVjdHMvbW9ucy9kZXYvY2xpZW50L3BpYW5vcm9sbC9hcHAvanMvcGlhbm9yb2xsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pIiwiLyoqXG4gKiBzY3JpcHRzL21haW4uanNcbiAqXG4gKiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgeW91ciBhcHBsaWNhdGlvbi5cbiAqIFRha2UgYSBsb29rIGF0IGh0dHA6Ly9icm93c2VyaWZ5Lm9yZy8gZm9yIG1vcmUgaW5mb1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG52YXIgUElYSSA9IHJlcXVpcmUoJ3BpeGknKTtcblxuLy8gQ29uZmlnIHZhcnNcbnZhciBsb2dnZXIgPSBmYWxzZTtcbnZhciBzY2VuZVdpZHRoID0gMTkyMDtcbnZhciBwckhlaWdodDEgPSA0MzU7XG52YXIgcHJIZWlnaHQyID0gNjQ1O1xudmFyIHNjZW5lSGVpZ2h0ID0gcHJIZWlnaHQxICsgcHJIZWlnaHQyO1xudmFyIHNjZW5lQmdDb2xvciA9IDB4RkZGRkZGO1xudmFyIGxpbmVDb2xvciA9IDB4NDQ0NDQ0O1xudmFyIHBpeGVsc1BlclNlY29uZDEgPSBNYXRoLmZsb29yKHNjZW5lV2lkdGggLyAxMCk7IC8vIG5iIG9mIHBpeGVscyBwZXIgc2Vjb25kXG52YXIgbWFudWFsRnJhbWVyYXRlID0gcGl4ZWxzUGVyU2Vjb25kMSAvIDQ7XG52YXIgcGl4ZWxzUGVyU2Vjb25kMiA9IE1hdGguZmxvb3Ioc2NlbmVXaWR0aCAvIDYwKTsgLy8gbmIgb2YgcGl4ZWxzIHBlciBzZWNvbmRcbnZhciBsaW5lSW50ZXJ2YWwgPSA1MDAwOyAvLyBtZWFucyBsaW5lIGV2ZXJ5IDUgc2Vjb25kc1xudmFyIG5iTGluZXMgPSAtMTtcbnZhciBub3RlSGVpZ2h0ID0gMTEwO1xudmFyIG5vdGVDb2xvcnMgPSBbMHhCOTAwMDAsIDB4NEJERDcxLCAweEFGOTMxRSwgMHgxQzI4QkEsIDB4NTM2OTkxXTtcbnZhciBjb2xvcnNSZWcgPSB7fTtcbi8vIFZhcnNcbnZhciBub3RlRGljdCA9IFtdO1xuLy8gVGltZWNvZGUgbWV0aG9kXG52YXIgdGltZVBhZ2VMb2FkZWQgPSBEYXRlLm5vdygpO1xudmFyIG9mZnNldE11c2ljID0gZmFsc2U7XG5cblxuLy9jcmVhdGUgYW4gbmV3IGluc3RhbmNlIG9mIGEgcGl4aSBzdGFnZVxudmFyIHN0YWdlID0gbmV3IFBJWEkuU3RhZ2Uoc2NlbmVCZ0NvbG9yKTtcblxuLy9jcmVhdGUgYSByZW5kZXJlciBpbnN0YW5jZS5cbnZhciByZW5kZXJlciA9IFBJWEkuYXV0b0RldGVjdFJlbmRlcmVyKHNjZW5lV2lkdGgsIHNjZW5lSGVpZ2h0KTtcblxuLy9hZGQgdGhlIHJlbmRlcmVyIHZpZXcgZWxlbWVudCB0byB0aGUgRE9NXG5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FudmFzQ29udGFpbmVyJykuYXBwZW5kQ2hpbGQocmVuZGVyZXIudmlldyk7XG5cbnZhciB1YmVyQ29udGFpbmVyID0gbmV3IFBJWEkuRGlzcGxheU9iamVjdENvbnRhaW5lcigpO1xudWJlckNvbnRhaW5lci5wb3NpdGlvbi54ID0gTWF0aC5mbG9vcihzY2VuZVdpZHRoKjkvMTApO1xudWJlckNvbnRhaW5lci5wb3NpdGlvbi55ID0gMDtcbnN0YWdlLmFkZENoaWxkKHViZXJDb250YWluZXIpO1xuXG52YXIgUGlhbm9Sb2xsID0gcmVxdWlyZSgnLi9waWFub3JvbGwuanMnKVxuXG4vLyBJbml0IGNvbnRhaW5lcnNcbnZhciBjb250YWluZXJMaXN0ID0gW107XG5jb250YWluZXJMaXN0LnB1c2gobmV3IFBpYW5vUm9sbCh1YmVyQ29udGFpbmVyLCAwLCAwLCBwckhlaWdodDEsIHRydWUsIHBpeGVsc1BlclNlY29uZDEsIHNjZW5lV2lkdGgsIG5vdGVDb2xvcnMsIGNvbG9yc1JlZywgbGluZUNvbG9yLCBsaW5lSW50ZXJ2YWwpKTtcbmNvbnRhaW5lckxpc3QucHVzaChuZXcgUGlhbm9Sb2xsKHViZXJDb250YWluZXIsIDAsIHBySGVpZ2h0MSwgcHJIZWlnaHQyLCBmYWxzZSwgcGl4ZWxzUGVyU2Vjb25kMiwgc2NlbmVXaWR0aCwgbm90ZUNvbG9ycywgY29sb3JzUmVnLCBsaW5lQ29sb3IsIGxpbmVJbnRlcnZhbCkpO1xuXG4vLyBMaW5lIGJldHdlZW4gdHdvIGNvbnRhaW5lcnNcbnZhciBncmFwaGljcyA9IG5ldyBQSVhJLkdyYXBoaWNzKCk7XG5ncmFwaGljcy5iZWdpbkZpbGwoMHhGRkZGMDApO1xuZ3JhcGhpY3MubGluZVN0eWxlKDEsIGxpbmVDb2xvcik7XG5ncmFwaGljcy5tb3ZlVG8oMCwgcHJIZWlnaHQxKTtcbmdyYXBoaWNzLmxpbmVUbyhzY2VuZVdpZHRoLCBwckhlaWdodDEpO1xuZ3JhcGhpY3MuZW5kRmlsbCgpO1xuc3RhZ2UuYWRkQ2hpbGQoZ3JhcGhpY3MpO1xuXG5cbmZ1bmN0aW9uIHJlcGxhY2VDb250YWluZXJzKCl7XG4gICAgdmFyIGRpZmYgPSAoRGF0ZS5ub3coKSAtIHRpbWVQYWdlTG9hZGVkKS8xMDAwOy8vIG5iIG9mIHNlY29uZHMgc2luY2UgcGFnZSBsb2FkZWRcbiAgICAvL2NvbnNvbGUubG9nKFwicmVwbGFjZSAhIGRpZmYxID0gXCIsIGNvbnRhaW5lcjEueCAtIE1hdGguZmxvb3IoLWRpZmYqcGl4ZWxzUGVyU2Vjb25kMSksIFwiLCBkaWZmIDIgPSBcIiwgY29udGFpbmVyMi54IC0gTWF0aC5mbG9vcigtZGlmZipwaXhlbHNQZXJTZWNvbmQyKSk7XG4gICAgZm9yKHZhciBpPTA7aTxjb250YWluZXJMaXN0Lmxlbmd0aDtpKyspe1xuICAgICAgICBjb250YWluZXJMaXN0W2ldLm1vdmVUbygtZGlmZik7XG4gICAgfVxuICAgIHJlbmRlcmVyLnJlbmRlcihzdGFnZSk7XG59XG5cbmZ1bmN0aW9uIGFkZE5vdGVzKGRhdGEpe1xuICAgIGlmKCFvZmZzZXRNdXNpYyl7XG4gICAgICAgIC8vIGdldCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGN1cnJlbnQgbm90ZSB0aW1lY29kZSBhbmQgbXkgemVybyB0byBzZXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgY2FudmFzJ3MgemVybyBhbmQgdGhlIG11c2ljJ3MgemVyb1xuICAgICAgICAvLyBpbiBvcmRlciB0byBwbGFjZSBpbiByZWFsIHRpbWVcbiAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIHZhciB0aW1lQmV0d2Vlbk5vd0FuZFN0YXJ0ID0gbm93IC0gdGltZVBhZ2VMb2FkZWQ7XG4gICAgICAgIG9mZnNldE11c2ljID0gdGltZUJldHdlZW5Ob3dBbmRTdGFydCAtIGRhdGEuY29udGVudFsxXTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcInN0YXJ0OiBcIiwgdGltZVBhZ2VMb2FkZWQsIFwiLCBub3c6IFwiLCBub3csIFwiLCB0aW1lQmV0d2Vlbk5vd0FuZFN0YXJ0ID0gXCIsIHRpbWVCZXR3ZWVuTm93QW5kU3RhcnQsIFwiLCBvZmZzZXRNdXNpYyA9IFwiLCBvZmZzZXRNdXNpYyk7XG4gICAgfVxuICAgIHZhciBub3RlID0gZGF0YS5jb250ZW50WzNdO1xuICAgIHZhciB2ZWxvY2l0eSA9IGRhdGEuY29udGVudFs0XTtcbiAgICBpZih2ZWxvY2l0eT09PTApe1xuICAgICAgICBpZih0eXBlb2Ygbm90ZURpY3RbZGF0YS5jb250ZW50WzJdXVtub3RlXSE9PSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgIC8vIFdlIGNsb3NlIHRoZSBub3RlIGluIGNvbnRhaW5lciBvbmVcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJjb3Vjb3UgMlwiLCBkYXRhKTtcbiAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IGRhdGEuY29udGVudFsxXSAtIG5vdGVEaWN0W2RhdGEuY29udGVudFsyXV1bbm90ZV0udHM7XG4gICAgICAgICAgICBmb3IodmFyIGk9MDtpPGNvbnRhaW5lckxpc3QubGVuZ3RoO2krKyl7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBhZGROb3RlKG5vdGUsIHN0YXJ0VGltZSwgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uLCB2ZWxvY2l0eSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5hbClcbiAgICAgICAgICAgICAgICBjb250YWluZXJMaXN0W2ldLmFkZE5vdGUobm90ZSwgbm90ZURpY3RbZGF0YS5jb250ZW50WzJdXVtub3RlXS50cywgZHVyYXRpb24sIG5vdGVEaWN0W2RhdGEuY29udGVudFsyXV1bbm90ZV0udmVsb2NpdHksIGRhdGEuY29udGVudFsyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkZWxldGUgZW50cnlcbiAgICAgICAgICAgIGRlbGV0ZSBub3RlRGljdFtkYXRhLmNvbnRlbnRbMl1dW25vdGVdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICAgIGlmKHR5cGVvZiBub3RlRGljdFtkYXRhLmNvbnRlbnRbMl1dPT09J3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgbm90ZURpY3RbZGF0YS5jb250ZW50WzJdXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIG5vdGVEaWN0W2RhdGEuY29udGVudFsyXV1bbm90ZV0gPSB7dHM6IGRhdGEuY29udGVudFsxXSwgdmVsb2NpdHk6dmVsb2NpdHl9O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYWRkTGluZSgpe1xuICAgIG5iTGluZXMrKztcbiAgICBmb3IodmFyIGk9MDtpPGNvbnRhaW5lckxpc3QubGVuZ3RoO2krKyl7XG4gICAgICAgIGNvbnRhaW5lckxpc3RbaV0uYWRkTGluZShuYkxpbmVzKTtcbiAgICB9XG59XG5cblxuXG4vLyBTb2NrZXQgbWFuYWdlbWVudFxudmFyIHNvY2sgPSBudWxsO1xudmFyIGVsbG9nID0gbnVsbDtcbmZ1bmN0aW9uIGxvZyhtKSB7XG4gICAgaWYobG9nZ2VyKXtcbiAgICAgICAgZWxsb2cuaW5uZXJIVE1MICs9IG0gKyAnXFxuJztcbiAgICAgICAgZWxsb2cuc2Nyb2xsVG9wID0gZWxsb2cuc2Nyb2xsSGVpZ2h0O1xuICAgIH1cbn1cbndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpe1xuXG4gICAgaWYobG9nZ2VyKXtcbiAgICAgICAgZWxsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJyk7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZycpKTtcbiAgICB9XG5cbiAgICB2YXIgd3N1cmk7XG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gJ2ZpbGU6Jykge1xuICAgICAgICB3c3VyaSA9ICd3czovLzEyNy4wLjAuMTo4MDkwL2Jyb2FkY2FzdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgd3N1cmkgPSAnd3M6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICsgJzo4MDkwL2Jyb2FkY2FzdCc7XG4gICAgfVxuICAgIHdzdXJpID0gd3N1cmkgKyAnP2NoYW5uZWw9UElBTk9ST0xMJmV2ZW50X2NvZGU9JytldmVudENvZGU7XG5cbiAgICBpZiAoJ1dlYlNvY2tldCcgaW4gd2luZG93KSB7XG4gICAgICAgIHNvY2sgPSBuZXcgV2ViU29ja2V0KHdzdXJpKTtcbiAgICB9IGVsc2UgaWYgKCdNb3pXZWJTb2NrZXQnIGluIHdpbmRvdykge1xuICAgICAgICBzb2NrID0gbmV3IE1veldlYlNvY2tldCh3c3VyaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgV2ViU29ja2V0IScpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAnaHR0cDovL2F1dG9iYWhuLndzL3Vuc3VwcG9ydGVkYnJvd3Nlcic7XG4gICAgfVxuXG4gICAgaWYgKHNvY2spIHtcbiAgICAgICAgc29jay5vbm9wZW4gPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgaWYobG9nZ2VyKXtcbiAgICAgICAgICAgICAgICBsb2coJ0Nvbm5lY3RlZCB0byAnICsgd3N1cmkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNvY2sub25jbG9zZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmKGxvZ2dlcil7XG4gICAgICAgICAgICAgICAgbG9nKCdDb25uZWN0aW9uIGNsb3NlZCAod2FzQ2xlYW4gPSAnICsgZS53YXNDbGVhbiArICcsIGNvZGUgPSAnICsgZS5jb2RlICsgJywgcmVhc29uID0gXFwnJyArIGUucmVhc29uICsgJ1xcJyknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNvY2sgPSBudWxsO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvY2sub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYobG9nZ2VyKXtcbiAgICAgICAgICAgICAgICBsb2coJ0dvdCBtZXNzYWdlOiAnICsgZS5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZE5vdGVzKEpTT04ucGFyc2UoZS5kYXRhKSk7XG4gICAgICAgIH07XG4gICAgfVxufTtcblxuXG4vLyBJbml0IHBhZ2UgYW5kIGludGVydmFsc1xuYWRkTGluZSgpO1xudmFyIG1vdmVJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbChyZXBsYWNlQ29udGFpbmVycywgMTAwMC9tYW51YWxGcmFtZXJhdGUpO1xudmFyIHZlcnRpY2FsTGluZXNJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbChhZGRMaW5lLCBsaW5lSW50ZXJ2YWwpO1xuXG4vLyBMaXR0bGUgaW50ZXZhbCB0byBzaG93IHRpbWVcbnZhciBuYlNlYyA9IDA7XG52YXIgbXlTcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215c3BhbicpO1xuZnVuY3Rpb24gdXBkYXRlVGltZSgpe1xuICAgIG5iU2VjKys7XG4gICAgdmFyIGhvdXJzID0gcGFyc2VJbnQoIG5iU2VjIC8gMzYwMCApICUgMjQ7XG4gICAgdmFyIG1pbnV0ZXMgPSBwYXJzZUludCggbmJTZWMgLyA2MCApICUgNjA7XG4gICAgdmFyIHNlY29uZHMgPSBuYlNlYyAlIDYwO1xuICAgIHZhciB0aW1lU3RyID0gKGhvdXJzIDwgMTAgPyAnMCcgKyBob3VycyA6IGhvdXJzKSArICc6JyArIChtaW51dGVzIDwgMTAgPyAnMCcgKyBtaW51dGVzIDogbWludXRlcykgKyAnOicgKyAoc2Vjb25kcyAgPCAxMCA/ICcwJyArIHNlY29uZHMgOiBzZWNvbmRzKTtcbiAgICBteVNwYW4uaW5uZXJIVE1MID0gdGltZVN0cjtcbn1cbnZhciBzZWNvbmRJbnRlcnZhbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCh1cGRhdGVUaW1lLCAxMDAwKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgbW92ZUludGVydmFsOiBtb3ZlSW50ZXJ2YWwsXG4gICAgdmVydGljYWxMaW5lc0ludGVydmFsOiB2ZXJ0aWNhbExpbmVzSW50ZXJ2YWwsXG4gICAgc2Vjb25kSW50ZXJ2YWw6IHNlY29uZEludGVydmFsXG59O1xuIiwiLyoqXG4qIGpzL3BpYW5vcm9sbC5qc1xuKlxuKiBwaWFub3JvbGwgYmFzaWMgY29tcG9uZW50XG4qXG4qL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBQSVhJID0gcmVxdWlyZSgncGl4aScpO1xudmFyIHJhbmRvbUNvbG9yID0gcmVxdWlyZSgncmFuZG9tQ29sb3InKTtcblxuZnVuY3Rpb24gUGlhbm9Sb2xsKHBhcmVudENvbnRhaW5lciwgeEluaXQsIHlJbml0LCBoZWlnaHQsIGxpbmVzRG93biwgcGl4ZWxzUGVyU2Vjb25kLCB3aWR0aCwgbm90ZUNvbG9ycywgY29sb3JzUmVnLCBsaW5lQ29sb3IsIGxpbmVJbnRlcnZhbCl7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB0aGlzLmNvbnRhaW5lciA9IG5ldyBQSVhJLkRpc3BsYXlPYmplY3RDb250YWluZXIoKTtcbiAgICB0aGlzLmNvbnRhaW5lci5wb3NpdGlvbi54ID0geEluaXQ7XG4gICAgdGhpcy5jb250YWluZXIucG9zaXRpb24ueSA9IHlJbml0O1xuICAgIHBhcmVudENvbnRhaW5lci5hZGRDaGlsZCh0aGlzLmNvbnRhaW5lcik7XG5cbiAgICB0aGlzLmxpbmVzRG93biA9IGxpbmVzRG93bjtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICB0aGlzLnBpeGVsc1BlclNlY29uZCA9IHBpeGVsc1BlclNlY29uZDtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5ub3RlQ29sb3JzID0gbm90ZUNvbG9ycztcbiAgICB0aGlzLmNvbG9yc1JlZyA9IGNvbG9yc1JlZyB8fCB7fTtcbiAgICB0aGlzLmxpbmVDb2xvciA9IGxpbmVDb2xvcjtcbiAgICB0aGlzLmxpbmVJbnRlcnZhbCA9IGxpbmVJbnRlcnZhbDtcblxuICAgIHRoaXMuYWRkTm90ZSA9IGZ1bmN0aW9uKG5vdGUsIHN0YXJ0VGltZSwgZHVyYXRpb24sIHZlbG9jaXR5LCBjYW5hbCl7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJjb3Vjb3UgMVwiLCBub3RlLCB0aW1lRnJvbVplcm8sIHRzLCB2ZWxvY2l0eSwgcGl4ZWxzUGVyU2Vjb25kLCBjb250YWluZXIsIHBySGVpZ2h0KTtcbiAgICAgICAgdmFyIGJlZ2luWCA9IChvZmZzZXRNdXNpYyArIHN0YXJ0VGltZSkgKiB0aGlzLnBpeGVsc1BlclNlY29uZCAvIDEwMDA7XG4gICAgICAgIHZhciB3aWR0aCA9IGR1cmF0aW9uICogdGhpcy5waXhlbHNQZXJTZWNvbmQgLyAxMDAwO1xuICAgICAgICAvLyBXZSBkcmF3IHRoZSByZWN0YW5nbGVcbiAgICAgICAgdmFyIGdyYXBoaWNzID0gbmV3IFBJWEkuR3JhcGhpY3MoKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcImJlZ2luWCA9IFwiLCBiZWdpblgsIFwiY2FuYWwgPSBcIiwgY2FuYWwsIFwiY29sb3IgPSBcIiwgbm90ZUNvbG9yW2NhbmFsXSwgXCJ3aWR0aCA9IFwiLCB3aWR0aCwgXCJub3RlID0gXCIsIG5vdGUsIFwidmVsb2NpdHkgPSBcIiwgdmVsb2NpdHkpO1xuICAgICAgICB2YXIgY29sb3IgPSB0aGlzLmNvbG9yc1JlZ1tjYW5hbF07XG4gICAgICAgIGlmKHR5cGVvZihjb2xvcikgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB2YXIgY29sb3JzUmVnU2l6ZSA9IE9iamVjdC5rZXlzKHRoaXMuY29sb3JzUmVnKS5sZW5ndGg7XG4gICAgICAgICAgICBpZihjb2xvcnNSZWdTaXplIDwgdGhpcy5ub3RlQ29sb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5jb2xvcnNSZWdbY2FuYWxdID0gdGhpcy5ub3RlQ29sb3JzW2NvbG9yc1JlZ1NpemVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29sb3IgPSB0aGlzLmNvbG9yc1JlZ1tjYW5hbF0gPSBwYXJzZUludChyYW5kb21Db2xvcih7IGx1bWlub3NpdHk6ICdsaWdodCcsIGh1ZTogJ3JhbmRvbScsIGZvcm1hdDonaGV4J30pLnJlcGxhY2UoL14jLywgJycpLCAxNik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ3JhcGhpY3MuYmVnaW5GaWxsKGNvbG9yLCAodmVsb2NpdHkgLyAxMjgpKTtcbiAgICAgICAgdmFyIHkgPSAoMTI4LW5vdGUpICogdGhpcy5oZWlnaHQgLyAxMjg7IC8vICgxMjgtbm90ZSkgYmVjYXVzZSB5ID0gMCBpcyBmb3Igbm90ZSA9IDEyOCBhbmQgeSA9IDEyOCBmb3Igbm90ZSA9IDBcbiAgICAgICAgZ3JhcGhpY3MuZHJhd1JlY3QoMCwgTWF0aC5mbG9vcih5IC0gKG5vdGVIZWlnaHQvMikgKyAoKHRoaXMuaGVpZ2h0IC8gMTI4KS8yKSksIHdpZHRoLCBub3RlSGVpZ2h0KTtcbiAgICAgICAgZ3JhcGhpY3MuZW5kRmlsbCgpO1xuICAgICAgICBncmFwaGljcy54ID0gYmVnaW5YO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDaGlsZChncmFwaGljcyk7XG4gICAgfTtcblxuICAgIHRoaXMuYWRkTGluZSA9IGZ1bmN0aW9uKGxpbmVOYil7XG4gICAgICAgIHZhciBncmFwaGljcyA9IG5ldyBQSVhJLkdyYXBoaWNzKCk7XG4gICAgICAgIHZhciB4ID0gLXRoaXMuY29udGFpbmVyLng7XG4gICAgICAgIGdyYXBoaWNzLmJlZ2luRmlsbCgweEZGRkYwMCk7XG4gICAgICAgIGdyYXBoaWNzLmxpbmVTdHlsZSgxLCB0aGlzLmxpbmVDb2xvcik7XG4gICAgICAgIHZhciB5ID0gdGhpcy5saW5lc0Rvd24gPyB0aGlzLmhlaWdodCAtIDIwIDogMDtcbiAgICAgICAgZ3JhcGhpY3MubW92ZVRvKHgsIHkpO1xuICAgICAgICBncmFwaGljcy5saW5lVG8oeCwgeSArIDIwKTtcbiAgICAgICAgZ3JhcGhpY3MuZW5kRmlsbCgpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDaGlsZChncmFwaGljcyk7XG4gICAgICAgIC8vIEFkZCB0ZXh0XG4gICAgICAgIHZhciB0b3RhbFNlYyA9IGxpbmVOYiAqIHRoaXMubGluZUludGVydmFsIC8gMTAwMDtcbiAgICAgICAgdmFyIGhvdXJzID0gcGFyc2VJbnQoIHRvdGFsU2VjIC8gMzYwMCApICUgMjQ7XG4gICAgICAgIHZhciBtaW51dGVzID0gcGFyc2VJbnQoIHRvdGFsU2VjIC8gNjAgKSAlIDYwO1xuICAgICAgICB2YXIgc2Vjb25kcyA9IHRvdGFsU2VjICUgNjA7XG4gICAgICAgIHZhciB0aW1lU3RyID0gKGhvdXJzIDwgMTAgPyAnMCcgKyBob3VycyA6IGhvdXJzKSArICc6JyArIChtaW51dGVzIDwgMTAgPyAnMCcgKyBtaW51dGVzIDogbWludXRlcykgKyAnOicgKyAoc2Vjb25kcyAgPCAxMCA/ICcwJyArIHNlY29uZHMgOiBzZWNvbmRzKTtcbiAgICAgICAgdmFyIGZvbnRPYmogPSB7IGZvbnQ6ICcxMHB0IEFyaWFsJywgZmlsbDogJyM0NDQ0NDQnIH07XG4gICAgICAgIHZhciB0ID0gbmV3IFBJWEkuVGV4dCh0aW1lU3RyLCBmb250T2JqKTtcbiAgICAgICAgdC54ID0geCArIDI7XG4gICAgICAgIHQueSA9IHRoaXMubGluZXNEb3duID8gdGhpcy5oZWlnaHQgLSAxNSA6IDI7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENoaWxkKHQpO1xuICAgIH07XG5cbiAgICB0aGlzLm1vdmVUbyA9IGZ1bmN0aW9uKGRpZmZUaW1lKXtcbiAgICAgICAgdGhpcy5jb250YWluZXIueCA9IE1hdGguZmxvb3IoZGlmZlRpbWUqdGhpcy5waXhlbHNQZXJTZWNvbmQpO1xuICAgIH07XG5cbiAgICB0aGlzLnJlbW92ZVBhc3NlZE9iamV0cyA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBuYkNoaWxkcyA9IF90aGlzLmNvbnRhaW5lci5jaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgIHZhciBpID0gMCwgY2hpbGRJc05vd0Rpc3BsYXllZCA9IGZhbHNlO1xuICAgICAgICB3aGlsZShpPG5iQ2hpbGRzICYmICFjaGlsZElzTm93RGlzcGxheWVkKXtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IF90aGlzLmNvbnRhaW5lci5jaGlsZHJlblswXTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJyZW1vdmUgPyBcIiwgY2hpbGQueCwgY2hpbGQud2lkdGgsICgoY2hpbGQueCArIGNoaWxkLndpZHRoKSA8IChNYXRoLmFicyhfdGhpcy5jb250YWluZXIueCkgLSBfdGhpcy53aWR0aCkpKTtcbiAgICAgICAgICAgIGlmKChjaGlsZC54ICsgY2hpbGQud2lkdGgpIDwgKE1hdGguYWJzKF90aGlzLmNvbnRhaW5lci54KSAtIF90aGlzLndpZHRoKSl7XG4gICAgICAgICAgICAgICAgX3RoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiICAgIHJlbW92ZSAhISFcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIGNoaWxkSXNOb3dEaXNwbGF5ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCIgICAgY2hpbGRJc05vd0Rpc3BsYXllZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICAvL2NvbnNvbGUubG9nKFwiYmVmb3JlIDogXCIsIG5iQ2hpbGRzLCBcIiwgYWZ0ZXIgOiBcIiwgX3RoaXMuY29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgfTtcblxuICAgIC8vIHJlbW92ZSBub3RlcyBlYWNoIHNjZW5lIHdpZHRoXG4gICAgLy92YXIgcmVtb3ZlSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZW1vdmVQYXNzZWRPYmpldHMsIDEwMDAgKiBzY2VuZVdpZHRoIC8gdGhpcy5waXhlbHNQZXJTZWNvbmQgKTtcbiAgICB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZW1vdmVQYXNzZWRPYmpldHMsIDEwMDAgKiB0aGlzLndpZHRoIC8gdGhpcy5waXhlbHNQZXJTZWNvbmQgKTtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBpYW5vUm9sbDtcbiJdfQ==
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuL2FwcC9qcy9tYWluLmpzIiwiL1VzZXJzL3ltaC9kZXYvcHJvamVjdHMvbW9ucy9kZXYvY2xpZW50L3BpYW5vcm9sbC9hcHAvanMvcGlhbm9yb2xsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIi8qKlxuICogc2NyaXB0cy9tYWluLmpzXG4gKlxuICogVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHlvdXIgYXBwbGljYXRpb24uXG4gKiBUYWtlIGEgbG9vayBhdCBodHRwOi8vYnJvd3NlcmlmeS5vcmcvIGZvciBtb3JlIGluZm9cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxudmFyIFBJWEkgPSByZXF1aXJlKCdwaXhpJyk7XG5cbi8vIENvbmZpZyB2YXJzXG52YXIgbG9nZ2VyID0gZmFsc2U7XG52YXIgc2NlbmVXaWR0aCA9IDE5MjA7XG52YXIgcHJIZWlnaHQxID0gNDM1O1xudmFyIHBySGVpZ2h0MiA9IDY0NTtcbnZhciBzY2VuZUhlaWdodCA9IHBySGVpZ2h0MSArIHBySGVpZ2h0MjtcbnZhciBzY2VuZUJnQ29sb3IgPSAweEZGRkZGRjtcbnZhciBsaW5lQ29sb3IgPSAweDQ0NDQ0NDtcbnZhciBwaXhlbHNQZXJTZWNvbmQxID0gTWF0aC5mbG9vcihzY2VuZVdpZHRoIC8gMTApOyAvLyBuYiBvZiBwaXhlbHMgcGVyIHNlY29uZFxudmFyIG1hbnVhbEZyYW1lcmF0ZSA9IHBpeGVsc1BlclNlY29uZDEgLyA0O1xudmFyIHBpeGVsc1BlclNlY29uZDIgPSBNYXRoLmZsb29yKHNjZW5lV2lkdGggLyA2MCk7IC8vIG5iIG9mIHBpeGVscyBwZXIgc2Vjb25kXG52YXIgbGluZUludGVydmFsID0gNTAwMDsgLy8gbWVhbnMgbGluZSBldmVyeSA1IHNlY29uZHNcbnZhciBuYkxpbmVzID0gLTE7XG52YXIgbm90ZUhlaWdodCA9IDExMDtcbnZhciBub3RlQ29sb3JzID0gWzB4QjkwMDAwLCAweDRCREQ3MSwgMHhBRjkzMUUsIDB4MUMyOEJBLCAweDUzNjk5MV07XG52YXIgY29sb3JzUmVnID0ge307XG4vLyBWYXJzXG52YXIgbm90ZURpY3QgPSBbXTtcbi8vIFRpbWVjb2RlIG1ldGhvZFxudmFyIHRpbWVQYWdlTG9hZGVkID0gRGF0ZS5ub3coKTtcbnZhciBvZmZzZXRNdXNpYyA9IGZhbHNlO1xuXG5cbi8vY3JlYXRlIGFuIG5ldyBpbnN0YW5jZSBvZiBhIHBpeGkgc3RhZ2VcbnZhciBzdGFnZSA9IG5ldyBQSVhJLlN0YWdlKHNjZW5lQmdDb2xvcik7XG5cbi8vY3JlYXRlIGEgcmVuZGVyZXIgaW5zdGFuY2UuXG52YXIgcmVuZGVyZXIgPSBQSVhJLmF1dG9EZXRlY3RSZW5kZXJlcihzY2VuZVdpZHRoLCBzY2VuZUhlaWdodCk7XG5cbi8vYWRkIHRoZSByZW5kZXJlciB2aWV3IGVsZW1lbnQgdG8gdGhlIERPTVxuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbnZhc0NvbnRhaW5lcicpLmFwcGVuZENoaWxkKHJlbmRlcmVyLnZpZXcpO1xuXG52YXIgdWJlckNvbnRhaW5lciA9IG5ldyBQSVhJLkRpc3BsYXlPYmplY3RDb250YWluZXIoKTtcbnViZXJDb250YWluZXIucG9zaXRpb24ueCA9IE1hdGguZmxvb3Ioc2NlbmVXaWR0aCo5LzEwKTtcbnViZXJDb250YWluZXIucG9zaXRpb24ueSA9IDA7XG5zdGFnZS5hZGRDaGlsZCh1YmVyQ29udGFpbmVyKTtcblxudmFyIFBpYW5vUm9sbCA9IHJlcXVpcmUoJy4vcGlhbm9yb2xsLmpzJylcblxuLy8gSW5pdCBjb250YWluZXJzXG52YXIgY29udGFpbmVyTGlzdCA9IFtdO1xuY29udGFpbmVyTGlzdC5wdXNoKG5ldyBQaWFub1JvbGwodWJlckNvbnRhaW5lciwgMCwgMCwgcHJIZWlnaHQxLCB0cnVlLCBwaXhlbHNQZXJTZWNvbmQxLCBzY2VuZVdpZHRoLCBub3RlQ29sb3JzLCBjb2xvcnNSZWcsIGxpbmVDb2xvciwgbGluZUludGVydmFsLCBvZmZzZXRNdXNpYywgcHJIZWlnaHQxIC8gMTI4KSk7XG5jb250YWluZXJMaXN0LnB1c2gobmV3IFBpYW5vUm9sbCh1YmVyQ29udGFpbmVyLCAwLCBwckhlaWdodDEsIHBySGVpZ2h0MiwgZmFsc2UsIHBpeGVsc1BlclNlY29uZDIsIHNjZW5lV2lkdGgsIG5vdGVDb2xvcnMsIGNvbG9yc1JlZywgbGluZUNvbG9yLCBsaW5lSW50ZXJ2YWwsIG9mZnNldE11c2ljLCBwckhlaWdodDIgLyAxMjgpKTtcblxuLy8gTGluZSBiZXR3ZWVuIHR3byBjb250YWluZXJzXG52YXIgZ3JhcGhpY3MgPSBuZXcgUElYSS5HcmFwaGljcygpO1xuZ3JhcGhpY3MuYmVnaW5GaWxsKDB4RkZGRjAwKTtcbmdyYXBoaWNzLmxpbmVTdHlsZSgxLCBsaW5lQ29sb3IpO1xuZ3JhcGhpY3MubW92ZVRvKDAsIHBySGVpZ2h0MSk7XG5ncmFwaGljcy5saW5lVG8oc2NlbmVXaWR0aCwgcHJIZWlnaHQxKTtcbmdyYXBoaWNzLmVuZEZpbGwoKTtcbnN0YWdlLmFkZENoaWxkKGdyYXBoaWNzKTtcblxuXG5mdW5jdGlvbiByZXBsYWNlQ29udGFpbmVycygpe1xuICAgIHZhciBkaWZmID0gKERhdGUubm93KCkgLSB0aW1lUGFnZUxvYWRlZCkvMTAwMDsvLyBuYiBvZiBzZWNvbmRzIHNpbmNlIHBhZ2UgbG9hZGVkXG4gICAgLy9jb25zb2xlLmxvZyhcInJlcGxhY2UgISBkaWZmMSA9IFwiLCBjb250YWluZXIxLnggLSBNYXRoLmZsb29yKC1kaWZmKnBpeGVsc1BlclNlY29uZDEpLCBcIiwgZGlmZiAyID0gXCIsIGNvbnRhaW5lcjIueCAtIE1hdGguZmxvb3IoLWRpZmYqcGl4ZWxzUGVyU2Vjb25kMikpO1xuICAgIGZvcih2YXIgaT0wO2k8Y29udGFpbmVyTGlzdC5sZW5ndGg7aSsrKXtcbiAgICAgICAgY29udGFpbmVyTGlzdFtpXS5tb3ZlVG8oLWRpZmYpO1xuICAgIH1cbiAgICByZW5kZXJlci5yZW5kZXIoc3RhZ2UpO1xufVxuXG5mdW5jdGlvbiBhZGROb3RlcyhkYXRhKXtcbiAgICBpZighb2Zmc2V0TXVzaWMpe1xuICAgICAgICAvLyBnZXQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IG5vdGUgdGltZWNvZGUgYW5kIG15IHplcm8gdG8gc2V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGNhbnZhcydzIHplcm8gYW5kIHRoZSBtdXNpYydzIHplcm9cbiAgICAgICAgLy8gaW4gb3JkZXIgdG8gcGxhY2UgaW4gcmVhbCB0aW1lXG4gICAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICB2YXIgdGltZUJldHdlZW5Ob3dBbmRTdGFydCA9IG5vdyAtIHRpbWVQYWdlTG9hZGVkO1xuICAgICAgICBvZmZzZXRNdXNpYyA9IHRpbWVCZXR3ZWVuTm93QW5kU3RhcnQgLSBkYXRhLmNvbnRlbnRbMV07XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJzdGFydDogXCIsIHRpbWVQYWdlTG9hZGVkLCBcIiwgbm93OiBcIiwgbm93LCBcIiwgdGltZUJldHdlZW5Ob3dBbmRTdGFydCA9IFwiLCB0aW1lQmV0d2Vlbk5vd0FuZFN0YXJ0LCBcIiwgb2Zmc2V0TXVzaWMgPSBcIiwgb2Zmc2V0TXVzaWMpO1xuICAgIH1cbiAgICB2YXIgbm90ZSA9IGRhdGEuY29udGVudFszXTtcbiAgICB2YXIgdmVsb2NpdHkgPSBkYXRhLmNvbnRlbnRbNF07XG4gICAgaWYodmVsb2NpdHk9PT0wKXtcbiAgICAgICAgaWYodHlwZW9mIG5vdGVEaWN0W2RhdGEuY29udGVudFsyXV1bbm90ZV0hPT0ndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICAvLyBXZSBjbG9zZSB0aGUgbm90ZSBpbiBjb250YWluZXIgb25lXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiY291Y291IDJcIiwgZGF0YSk7XG4gICAgICAgICAgICB2YXIgZHVyYXRpb24gPSBkYXRhLmNvbnRlbnRbMV0gLSBub3RlRGljdFtkYXRhLmNvbnRlbnRbMl1dW25vdGVdLnRzO1xuICAgICAgICAgICAgZm9yKHZhciBpPTA7aTxjb250YWluZXJMaXN0Lmxlbmd0aDtpKyspe1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgYWRkTm90ZShub3RlLCBzdGFydFRpbWUsICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbiwgdmVsb2NpdHksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuYWwpXG4gICAgICAgICAgICAgICAgY29udGFpbmVyTGlzdFtpXS5hZGROb3RlKG5vdGUsIG5vdGVEaWN0W2RhdGEuY29udGVudFsyXV1bbm90ZV0udHMsIGR1cmF0aW9uLCBub3RlRGljdFtkYXRhLmNvbnRlbnRbMl1dW25vdGVdLnZlbG9jaXR5LCBkYXRhLmNvbnRlbnRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZGVsZXRlIGVudHJ5XG4gICAgICAgICAgICBkZWxldGUgbm90ZURpY3RbZGF0YS5jb250ZW50WzJdXVtub3RlXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNle1xuICAgICAgICBpZih0eXBlb2Ygbm90ZURpY3RbZGF0YS5jb250ZW50WzJdXT09PSd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgIG5vdGVEaWN0W2RhdGEuY29udGVudFsyXV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBub3RlRGljdFtkYXRhLmNvbnRlbnRbMl1dW25vdGVdID0ge3RzOiBkYXRhLmNvbnRlbnRbMV0sIHZlbG9jaXR5OnZlbG9jaXR5fTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZExpbmUoKXtcbiAgICBuYkxpbmVzKys7XG4gICAgZm9yKHZhciBpPTA7aTxjb250YWluZXJMaXN0Lmxlbmd0aDtpKyspe1xuICAgICAgICBjb250YWluZXJMaXN0W2ldLmFkZExpbmUobmJMaW5lcyk7XG4gICAgfVxufVxuXG5cblxuLy8gU29ja2V0IG1hbmFnZW1lbnRcbnZhciBzb2NrID0gbnVsbDtcbnZhciBlbGxvZyA9IG51bGw7XG5mdW5jdGlvbiBsb2cobSkge1xuICAgIGlmKGxvZ2dlcil7XG4gICAgICAgIGVsbG9nLmlubmVySFRNTCArPSBtICsgJ1xcbic7XG4gICAgICAgIGVsbG9nLnNjcm9sbFRvcCA9IGVsbG9nLnNjcm9sbEhlaWdodDtcbiAgICB9XG59XG53aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKXtcblxuICAgIGlmKGxvZ2dlcil7XG4gICAgICAgIGVsbG9nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvZycpO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2cnKSk7XG4gICAgfVxuXG4gICAgdmFyIHdzdXJpO1xuICAgIGlmICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09ICdmaWxlOicpIHtcbiAgICAgICAgd3N1cmkgPSAnd3M6Ly8xMjcuMC4wLjE6ODA5MC9icm9hZGNhc3QnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHdzdXJpID0gJ3dzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArICc6ODA5MC9icm9hZGNhc3QnO1xuICAgIH1cbiAgICB3c3VyaSA9IHdzdXJpICsgJz9jaGFubmVsPVBJQU5PUk9MTCZldmVudF9jb2RlPScrZXZlbnRDb2RlO1xuXG4gICAgaWYgKCdXZWJTb2NrZXQnIGluIHdpbmRvdykge1xuICAgICAgICBzb2NrID0gbmV3IFdlYlNvY2tldCh3c3VyaSk7XG4gICAgfSBlbHNlIGlmICgnTW96V2ViU29ja2V0JyBpbiB3aW5kb3cpIHtcbiAgICAgICAgc29jayA9IG5ldyBNb3pXZWJTb2NrZXQod3N1cmkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZygnQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFdlYlNvY2tldCEnKTtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uID0gJ2h0dHA6Ly9hdXRvYmFobi53cy91bnN1cHBvcnRlZGJyb3dzZXInO1xuICAgIH1cblxuICAgIGlmIChzb2NrKSB7XG4gICAgICAgIHNvY2sub25vcGVuID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKGxvZ2dlcil7XG4gICAgICAgICAgICAgICAgbG9nKCdDb25uZWN0ZWQgdG8gJyArIHdzdXJpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzb2NrLm9uY2xvc2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZihsb2dnZXIpe1xuICAgICAgICAgICAgICAgIGxvZygnQ29ubmVjdGlvbiBjbG9zZWQgKHdhc0NsZWFuID0gJyArIGUud2FzQ2xlYW4gKyAnLCBjb2RlID0gJyArIGUuY29kZSArICcsIHJlYXNvbiA9IFxcJycgKyBlLnJlYXNvbiArICdcXCcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzb2NrID0gbnVsbDtcbiAgICAgICAgfTtcblxuICAgICAgICBzb2NrLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGlmKGxvZ2dlcil7XG4gICAgICAgICAgICAgICAgbG9nKCdHb3QgbWVzc2FnZTogJyArIGUuZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZGROb3RlcyhKU09OLnBhcnNlKGUuZGF0YSkpO1xuICAgICAgICB9O1xuICAgIH1cbn07XG5cblxuLy8gSW5pdCBwYWdlIGFuZCBpbnRlcnZhbHNcbmFkZExpbmUoKTtcbnZhciBtb3ZlSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwocmVwbGFjZUNvbnRhaW5lcnMsIDEwMDAvbWFudWFsRnJhbWVyYXRlKTtcbnZhciB2ZXJ0aWNhbExpbmVzSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoYWRkTGluZSwgbGluZUludGVydmFsKTtcblxuLy8gTGl0dGxlIGludGV2YWwgdG8gc2hvdyB0aW1lXG52YXIgbmJTZWMgPSAwO1xudmFyIG15U3BhbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdteXNwYW4nKTtcbmZ1bmN0aW9uIHVwZGF0ZVRpbWUoKXtcbiAgICBuYlNlYysrO1xuICAgIHZhciBob3VycyA9IHBhcnNlSW50KCBuYlNlYyAvIDM2MDAgKSAlIDI0O1xuICAgIHZhciBtaW51dGVzID0gcGFyc2VJbnQoIG5iU2VjIC8gNjAgKSAlIDYwO1xuICAgIHZhciBzZWNvbmRzID0gbmJTZWMgJSA2MDtcbiAgICB2YXIgdGltZVN0ciA9IChob3VycyA8IDEwID8gJzAnICsgaG91cnMgOiBob3VycykgKyAnOicgKyAobWludXRlcyA8IDEwID8gJzAnICsgbWludXRlcyA6IG1pbnV0ZXMpICsgJzonICsgKHNlY29uZHMgIDwgMTAgPyAnMCcgKyBzZWNvbmRzIDogc2Vjb25kcyk7XG4gICAgbXlTcGFuLmlubmVySFRNTCA9IHRpbWVTdHI7XG59XG52YXIgc2Vjb25kSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodXBkYXRlVGltZSwgMTAwMCk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIG1vdmVJbnRlcnZhbDogbW92ZUludGVydmFsLFxuICAgIHZlcnRpY2FsTGluZXNJbnRlcnZhbDogdmVydGljYWxMaW5lc0ludGVydmFsLFxuICAgIHNlY29uZEludGVydmFsOiBzZWNvbmRJbnRlcnZhbFxufTtcbiIsIi8qKlxuKiBqcy9waWFub3JvbGwuanNcbipcbiogcGlhbm9yb2xsIGJhc2ljIGNvbXBvbmVudFxuKlxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUElYSSA9IHJlcXVpcmUoJ3BpeGknKTtcbnZhciByYW5kb21Db2xvciA9IHJlcXVpcmUoJ3JhbmRvbUNvbG9yJyk7XG5cbmZ1bmN0aW9uIFBpYW5vUm9sbChwYXJlbnRDb250YWluZXIsIHhJbml0LCB5SW5pdCwgaGVpZ2h0LCBsaW5lc0Rvd24sIHBpeGVsc1BlclNlY29uZCwgd2lkdGgsIG5vdGVDb2xvcnMsIGNvbG9yc1JlZywgbGluZUNvbG9yLCBsaW5lSW50ZXJ2YWwsIG9mZnNldE11c2ljLCBub3RlSGVpZ2h0KXtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHRoaXMuY29udGFpbmVyID0gbmV3IFBJWEkuRGlzcGxheU9iamVjdENvbnRhaW5lcigpO1xuICAgIHRoaXMuY29udGFpbmVyLnBvc2l0aW9uLnggPSB4SW5pdDtcbiAgICB0aGlzLmNvbnRhaW5lci5wb3NpdGlvbi55ID0geUluaXQ7XG4gICAgcGFyZW50Q29udGFpbmVyLmFkZENoaWxkKHRoaXMuY29udGFpbmVyKTtcblxuICAgIHRoaXMubGluZXNEb3duID0gbGluZXNEb3duO1xuICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIHRoaXMucGl4ZWxzUGVyU2Vjb25kID0gcGl4ZWxzUGVyU2Vjb25kO1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLm5vdGVDb2xvcnMgPSBub3RlQ29sb3JzO1xuICAgIHRoaXMuY29sb3JzUmVnID0gY29sb3JzUmVnIHx8IHt9O1xuICAgIHRoaXMubGluZUNvbG9yID0gbGluZUNvbG9yO1xuICAgIHRoaXMubGluZUludGVydmFsID0gbGluZUludGVydmFsO1xuICAgIHRoaXMub2Zmc2V0TXVzaWMgPSBvZmZzZXRNdXNpYyB8fCAwO1xuICAgIHRoaXMubm90ZUhlaWdodCA9IG5vdGVIZWlnaHQ7XG5cbiAgICB0aGlzLmFkZE5vdGUgPSBmdW5jdGlvbihub3RlLCBzdGFydFRpbWUsIGR1cmF0aW9uLCB2ZWxvY2l0eSwgY2FuYWwpe1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiY291Y291IDFcIiwgbm90ZSwgdGltZUZyb21aZXJvLCB0cywgdmVsb2NpdHksIHBpeGVsc1BlclNlY29uZCwgY29udGFpbmVyLCBwckhlaWdodCk7XG4gICAgICAgIHZhciBiZWdpblggPSAodGhpcy5vZmZzZXRNdXNpYyArIHN0YXJ0VGltZSkgKiB0aGlzLnBpeGVsc1BlclNlY29uZCAvIDEwMDA7XG4gICAgICAgIHZhciB3aWR0aCA9IGR1cmF0aW9uICogdGhpcy5waXhlbHNQZXJTZWNvbmQgLyAxMDAwO1xuICAgICAgICBpZigoYmVnaW5YK3dpZHRoKSA8ICBNYXRoLmFicyh0aGlzLmNvbnRhaW5lci54KSAtIHRoaXMud2lkdGgpIHtcbiAgICAgICAgICAgIC8vIG5vdCB2aXNpYmxlLiBkbyBub3RoaW5nXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgZHJhdyB0aGUgcmVjdGFuZ2xlXG4gICAgICAgIHZhciBncmFwaGljcyA9IG5ldyBQSVhJLkdyYXBoaWNzKCk7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJiZWdpblggPSBcIiwgYmVnaW5YLCBcImNhbmFsID0gXCIsIGNhbmFsLCBcImNvbG9yID0gXCIsIG5vdGVDb2xvcltjYW5hbF0sIFwid2lkdGggPSBcIiwgd2lkdGgsIFwibm90ZSA9IFwiLCBub3RlLCBcInZlbG9jaXR5ID0gXCIsIHZlbG9jaXR5KTtcbiAgICAgICAgdmFyIGNvbG9yID0gdGhpcy5jb2xvcnNSZWdbY2FuYWxdO1xuICAgICAgICBpZih0eXBlb2YoY29sb3IpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdmFyIGNvbG9yc1JlZ1NpemUgPSBPYmplY3Qua2V5cyh0aGlzLmNvbG9yc1JlZykubGVuZ3RoO1xuICAgICAgICAgICAgaWYoY29sb3JzUmVnU2l6ZSA8IHRoaXMubm90ZUNvbG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb2xvciA9IHRoaXMuY29sb3JzUmVnW2NhbmFsXSA9IHRoaXMubm90ZUNvbG9yc1tjb2xvcnNSZWdTaXplXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbG9yID0gdGhpcy5jb2xvcnNSZWdbY2FuYWxdID0gcGFyc2VJbnQocmFuZG9tQ29sb3IoeyBsdW1pbm9zaXR5OiAnbGlnaHQnLCBodWU6ICdyYW5kb20nLCBmb3JtYXQ6J2hleCd9KS5yZXBsYWNlKC9eIy8sICcnKSwgMTYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdyYXBoaWNzLmJlZ2luRmlsbChjb2xvciwgKHZlbG9jaXR5IC8gMTI4KSk7XG4gICAgICAgIHZhciB5ID0gKDEyOC1ub3RlKSAqIHRoaXMuaGVpZ2h0IC8gMTI4OyAvLyAoMTI4LW5vdGUpIGJlY2F1c2UgeSA9IDAgaXMgZm9yIG5vdGUgPSAxMjggYW5kIHkgPSAxMjggZm9yIG5vdGUgPSAwXG4gICAgICAgIGdyYXBoaWNzLmRyYXdSZWN0KDAsIE1hdGguZmxvb3IoeSAtIChub3RlSGVpZ2h0LzIpICsgKCh0aGlzLmhlaWdodCAvIDEyOCkvMikpLCB3aWR0aCwgbm90ZUhlaWdodCk7XG4gICAgICAgIGdyYXBoaWNzLmVuZEZpbGwoKTtcbiAgICAgICAgZ3JhcGhpY3MueCA9IGJlZ2luWDtcbiAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2hpbGQoZ3JhcGhpY3MpO1xuICAgIH07XG5cbiAgICB0aGlzLmFkZExpbmUgPSBmdW5jdGlvbihsaW5lTmIpe1xuICAgICAgICB2YXIgZ3JhcGhpY3MgPSBuZXcgUElYSS5HcmFwaGljcygpO1xuICAgICAgICB2YXIgeCA9IC10aGlzLmNvbnRhaW5lci54O1xuICAgICAgICBncmFwaGljcy5iZWdpbkZpbGwoMHhGRkZGMDApO1xuICAgICAgICBncmFwaGljcy5saW5lU3R5bGUoMSwgdGhpcy5saW5lQ29sb3IpO1xuICAgICAgICB2YXIgeSA9IHRoaXMubGluZXNEb3duID8gdGhpcy5oZWlnaHQgLSAyMCA6IDA7XG4gICAgICAgIGdyYXBoaWNzLm1vdmVUbyh4LCB5KTtcbiAgICAgICAgZ3JhcGhpY3MubGluZVRvKHgsIHkgKyAyMCk7XG4gICAgICAgIGdyYXBoaWNzLmVuZEZpbGwoKTtcbiAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2hpbGQoZ3JhcGhpY3MpO1xuICAgICAgICAvLyBBZGQgdGV4dFxuICAgICAgICB2YXIgdG90YWxTZWMgPSBsaW5lTmIgKiB0aGlzLmxpbmVJbnRlcnZhbCAvIDEwMDA7XG4gICAgICAgIHZhciBob3VycyA9IHBhcnNlSW50KCB0b3RhbFNlYyAvIDM2MDAgKSAlIDI0O1xuICAgICAgICB2YXIgbWludXRlcyA9IHBhcnNlSW50KCB0b3RhbFNlYyAvIDYwICkgJSA2MDtcbiAgICAgICAgdmFyIHNlY29uZHMgPSB0b3RhbFNlYyAlIDYwO1xuICAgICAgICB2YXIgdGltZVN0ciA9IChob3VycyA8IDEwID8gJzAnICsgaG91cnMgOiBob3VycykgKyAnOicgKyAobWludXRlcyA8IDEwID8gJzAnICsgbWludXRlcyA6IG1pbnV0ZXMpICsgJzonICsgKHNlY29uZHMgIDwgMTAgPyAnMCcgKyBzZWNvbmRzIDogc2Vjb25kcyk7XG4gICAgICAgIHZhciBmb250T2JqID0geyBmb250OiAnMTBwdCBBcmlhbCcsIGZpbGw6ICcjNDQ0NDQ0JyB9O1xuICAgICAgICB2YXIgdCA9IG5ldyBQSVhJLlRleHQodGltZVN0ciwgZm9udE9iaik7XG4gICAgICAgIHQueCA9IHggKyAyO1xuICAgICAgICB0LnkgPSB0aGlzLmxpbmVzRG93biA/IHRoaXMuaGVpZ2h0IC0gMTUgOiAyO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDaGlsZCh0KTtcbiAgICB9O1xuXG4gICAgdGhpcy5tb3ZlVG8gPSBmdW5jdGlvbihkaWZmVGltZSl7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLnggPSBNYXRoLmZsb29yKGRpZmZUaW1lKnRoaXMucGl4ZWxzUGVyU2Vjb25kKTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZW1vdmVQYXNzZWRPYmpldHMgPSBmdW5jdGlvbigpe1xuICAgICAgICB2YXIgbmJDaGlsZHMgPSBfdGhpcy5jb250YWluZXIuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICB2YXIgaSA9IDAsIGNoaWxkSXNOb3dEaXNwbGF5ZWQgPSBmYWxzZSwgY2hpbGRyZW5Ub1JlbW92ZSA9IFtdO1xuICAgICAgICB3aGlsZShpPG5iQ2hpbGRzICYmICFjaGlsZElzTm93RGlzcGxheWVkKXtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IF90aGlzLmNvbnRhaW5lci5jaGlsZHJlbltpKytdO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInJlbW92ZSA/IFwiLCBjaGlsZC54LCBjaGlsZC53aWR0aCwgKChjaGlsZC54ICsgY2hpbGQud2lkdGgpIDwgKE1hdGguYWJzKF90aGlzLmNvbnRhaW5lci54KSAtIF90aGlzLndpZHRoKSkpO1xuICAgICAgICAgICAgaWYodHlwZW9mKGNoaWxkKSA9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoKGNoaWxkLnggKyBjaGlsZC53aWR0aCkgPCAoTWF0aC5hYnMoX3RoaXMuY29udGFpbmVyLngpIC0gX3RoaXMud2lkdGgpKXtcbiAgICAgICAgICAgICAgICBjaGlsZHJlblRvUmVtb3ZlLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCIgICAgcmVtb3ZlICEhIVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoaWxkSXNOb3dEaXNwbGF5ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCIgICAgY2hpbGRJc05vd0Rpc3BsYXllZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjaGlsZHJlblRvUmVtb3ZlLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgICAgICAgIF90aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvL2NvbnNvbGUubG9nKFwiYmVmb3JlIDogXCIsIG5iQ2hpbGRzLCBcIiwgYWZ0ZXIgOiBcIiwgX3RoaXMuY29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgfTtcblxuICAgIC8vIHJlbW92ZSBub3RlcyBlYWNoIHNjZW5lIHdpZHRoXG4gICAgLy92YXIgcmVtb3ZlSW50ZXJ2YWwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZW1vdmVQYXNzZWRPYmpldHMsIDEwMDAgKiBzY2VuZVdpZHRoIC8gdGhpcy5waXhlbHNQZXJTZWNvbmQgKTtcbiAgICB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5yZW1vdmVQYXNzZWRPYmpldHMsIDEwMDAgKiB0aGlzLndpZHRoIC8gdGhpcy5waXhlbHNQZXJTZWNvbmQgKTtcblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBpYW5vUm9sbDtcbiJdfQ==
--- a/annot-server/static/js/pianoroll.min.js Tue Jan 13 10:46:05 2015 +0100
+++ b/annot-server/static/js/pianoroll.min.js Tue Jan 13 14:03:31 2015 +0100
@@ -1,1 +1,1 @@
-!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;"undefined"!=typeof window?n=window:"undefined"!=typeof global?n=global:"undefined"!=typeof self&&(n=self),n.pianoroll=e()}}(function(){return function e(n,t,o){function i(s,a){if(!t[s]){if(!n[s]){var l="function"==typeof require&&require;if(!a&&l)return l(s,!0);if(r)return r(s,!0);var d=new Error("Cannot find module '"+s+"'");throw d.code="MODULE_NOT_FOUND",d}var c=t[s]={exports:{}};n[s][0].call(c.exports,function(e){var t=n[s][1][e];return i(t?t:e)},c,c.exports,e,n,t,o)}return t[s].exports}for(var r="function"==typeof require&&require,s=0;s<o.length;s++)i(o[s]);return i}({1:[function(e,n){"use strict";function t(){for(var e=(Date.now()-I)/1e3,n=0;n<j.length;n++)j[n].moveTo(-e);D.render(M)}function o(e){if(!S){var n=Date.now(),t=n-I;S=t-e.content[1]}var o=e.content[3],i=e.content[4];if(0===i){if("undefined"!=typeof b[e.content[2]][o]){for(var r=e.content[1]-b[e.content[2]][o].ts,s=0;s<j.length;s++)j[s].addNote(o,b[e.content[2]][o].ts,r,b[e.content[2]][o].velocity,e.content[2]);delete b[e.content[2]][o]}}else"undefined"==typeof b[e.content[2]]&&(b[e.content[2]]={}),b[e.content[2]][o]={ts:e.content[1],velocity:i}}function i(){x++;for(var e=0;e<j.length;e++)j[e].addLine(x)}function r(e){l&&(F.innerHTML+=e+"\n",F.scrollTop=F.scrollHeight)}function s(){E++;var e=parseInt(E/3600)%24,n=parseInt(E/60)%60,t=E%60,o=(10>e?"0"+e:e)+":"+(10>n?"0"+n:n)+":"+(10>t?"0"+t:t);N.innerHTML=o}var a=e("pixi"),l=!1,d=1920,c=435,h=645,f=c+h,u=16777215,p=4473924,w=Math.floor(d/10),v=w/4,g=Math.floor(d/60),m=5e3,x=-1,y=[12124160,4971889,11506462,1845434,5466513],C={},b=[],I=Date.now(),S=!1,M=new a.Stage(u),D=a.autoDetectRenderer(d,f);document.getElementById("canvasContainer").appendChild(D.view);var O=new a.DisplayObjectContainer;O.position.x=Math.floor(9*d/10),O.position.y=0,M.addChild(O);var T=e("./pianoroll.js"),j=[];j.push(new T(O,0,0,c,!0,w,d,y,C,p,m)),j.push(new T(O,0,c,h,!1,g,d,y,C,p,m));var L=new a.Graphics;L.beginFill(16776960),L.lineStyle(1,p),L.moveTo(0,c),L.lineTo(d,c),L.endFill(),M.addChild(L);var P=null,F=null;window.onload=function(){l?F=document.getElementById("log"):document.body.removeChild(document.getElementById("log"));var e;e="file:"===window.location.protocol?"ws://127.0.0.1:8090/broadcast":"ws://"+window.location.hostname+":8090/broadcast",e=e+"?channel=PIANOROLL&event_code="+eventCode,"WebSocket"in window?P=new WebSocket(e):"MozWebSocket"in window?P=new MozWebSocket(e):(r("Browser does not support WebSocket!"),window.location="http://autobahn.ws/unsupportedbrowser"),P&&(P.onopen=function(){l&&r("Connected to "+e)},P.onclose=function(e){l&&r("Connection closed (wasClean = "+e.wasClean+", code = "+e.code+", reason = '"+e.reason+"')"),P=null},P.onmessage=function(e){l&&r("Got message: "+e.data),o(JSON.parse(e.data))})},i();var R=window.setInterval(t,1e3/v),k=window.setInterval(i,m),E=0,N=document.getElementById("myspan"),B=window.setInterval(s,1e3);n.exports={moveInterval:R,verticalLinesInterval:k,secondInterval:B}},{"./pianoroll.js":2,pixi:"pixi"}],2:[function(e,n){"use strict";function t(e,n,t,r,s,a,l,d,c,h,f){var u=this;this.container=new o.DisplayObjectContainer,this.container.position.x=n,this.container.position.y=t,e.addChild(this.container),this.linesDown=s,this.height=r,this.pixelsPerSecond=a,this.width=l,this.noteColors=d,this.colorsReg=c||{},this.lineColor=h,this.lineInterval=f,this.addNote=function(e,n,t,r,s){var a=(offsetMusic+n)*this.pixelsPerSecond/1e3,l=t*this.pixelsPerSecond/1e3,d=new o.Graphics,c=this.colorsReg[s];if("undefined"==typeof c){var h=Object.keys(this.colorsReg).length;c=this.colorsReg[s]=h<this.noteColors.length?this.noteColors[h]:parseInt(i({luminosity:"light",hue:"random",format:"hex"}).replace(/^#/,""),16)}d.beginFill(c,r/128);var f=(128-e)*this.height/128;d.drawRect(0,Math.floor(f-noteHeight/2+this.height/128/2),l,noteHeight),d.endFill(),d.x=a,this.container.addChild(d)},this.addLine=function(e){var n=new o.Graphics,t=-this.container.x;n.beginFill(16776960),n.lineStyle(1,this.lineColor);var i=this.linesDown?this.height-20:0;n.moveTo(t,i),n.lineTo(t,i+20),n.endFill(),this.container.addChild(n);var r=e*this.lineInterval/1e3,s=parseInt(r/3600)%24,a=parseInt(r/60)%60,l=r%60,d=(10>s?"0"+s:s)+":"+(10>a?"0"+a:a)+":"+(10>l?"0"+l:l),c={font:"10pt Arial",fill:"#444444"},h=new o.Text(d,c);h.x=t+2,h.y=this.linesDown?this.height-15:2,this.container.addChild(h)},this.moveTo=function(e){this.container.x=Math.floor(e*this.pixelsPerSecond)},this.removePassedObjets=function(){for(var e=u.container.children.length,n=0,t=!1;e>n&&!t;){var o=u.container.children[0];o.x+o.width<Math.abs(u.container.x)-u.width?u.container.removeChild(o):t=!0,n++}},window.setInterval(this.removePassedObjets,1e3*this.width/this.pixelsPerSecond)}var o=e("pixi"),i=e("randomColor");n.exports=t},{pixi:"pixi",randomColor:"randomColor"}]},{},[1])(1)});
\ No newline at end of file
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;"undefined"!=typeof window?n=window:"undefined"!=typeof global?n=global:"undefined"!=typeof self&&(n=self),n.pianoroll=e()}}(function(){return function e(n,t,o){function i(s,a){if(!t[s]){if(!n[s]){var l="function"==typeof require&&require;if(!a&&l)return l(s,!0);if(r)return r(s,!0);var d=new Error("Cannot find module '"+s+"'");throw d.code="MODULE_NOT_FOUND",d}var c=t[s]={exports:{}};n[s][0].call(c.exports,function(e){var t=n[s][1][e];return i(t?t:e)},c,c.exports,e,n,t,o)}return t[s].exports}for(var r="function"==typeof require&&require,s=0;s<o.length;s++)i(o[s]);return i}({1:[function(e,n){"use strict";function t(){for(var e=(Date.now()-I)/1e3,n=0;n<j.length;n++)j[n].moveTo(-e);D.render(S)}function o(e){if(!M){var n=Date.now(),t=n-I;M=t-e.content[1]}var o=e.content[3],i=e.content[4];if(0===i){if("undefined"!=typeof b[e.content[2]][o]){for(var r=e.content[1]-b[e.content[2]][o].ts,s=0;s<j.length;s++)j[s].addNote(o,b[e.content[2]][o].ts,r,b[e.content[2]][o].velocity,e.content[2]);delete b[e.content[2]][o]}}else"undefined"==typeof b[e.content[2]]&&(b[e.content[2]]={}),b[e.content[2]][o]={ts:e.content[1],velocity:i}}function i(){x++;for(var e=0;e<j.length;e++)j[e].addLine(x)}function r(e){l&&(E.innerHTML+=e+"\n",E.scrollTop=E.scrollHeight)}function s(){k++;var e=parseInt(k/3600)%24,n=parseInt(k/60)%60,t=k%60,o=(10>e?"0"+e:e)+":"+(10>n?"0"+n:n)+":"+(10>t?"0"+t:t);N.innerHTML=o}var a=e("pixi"),l=!1,d=1920,c=435,h=645,f=c+h,u=16777215,p=4473924,w=Math.floor(d/10),v=w/4,g=Math.floor(d/60),m=5e3,x=-1,y=[12124160,4971889,11506462,1845434,5466513],C={},b=[],I=Date.now(),M=!1,S=new a.Stage(u),D=a.autoDetectRenderer(d,f);document.getElementById("canvasContainer").appendChild(D.view);var O=new a.DisplayObjectContainer;O.position.x=Math.floor(9*d/10),O.position.y=0,S.addChild(O);var T=e("./pianoroll.js"),j=[];j.push(new T(O,0,0,c,!0,w,d,y,C,p,m,M,c/128)),j.push(new T(O,0,c,h,!1,g,d,y,C,p,m,M,h/128));var L=new a.Graphics;L.beginFill(16776960),L.lineStyle(1,p),L.moveTo(0,c),L.lineTo(d,c),L.endFill(),S.addChild(L);var P=null,E=null;window.onload=function(){l?E=document.getElementById("log"):document.body.removeChild(document.getElementById("log"));var e;e="file:"===window.location.protocol?"ws://127.0.0.1:8090/broadcast":"ws://"+window.location.hostname+":8090/broadcast",e=e+"?channel=PIANOROLL&event_code="+eventCode,"WebSocket"in window?P=new WebSocket(e):"MozWebSocket"in window?P=new MozWebSocket(e):(r("Browser does not support WebSocket!"),window.location="http://autobahn.ws/unsupportedbrowser"),P&&(P.onopen=function(){l&&r("Connected to "+e)},P.onclose=function(e){l&&r("Connection closed (wasClean = "+e.wasClean+", code = "+e.code+", reason = '"+e.reason+"')"),P=null},P.onmessage=function(e){l&&r("Got message: "+e.data),o(JSON.parse(e.data))})},i();var F=window.setInterval(t,1e3/v),R=window.setInterval(i,m),k=0,N=document.getElementById("myspan"),B=window.setInterval(s,1e3);n.exports={moveInterval:F,verticalLinesInterval:R,secondInterval:B}},{"./pianoroll.js":2,pixi:"pixi"}],2:[function(e,n){"use strict";function t(e,n,t,r,s,a,l,d,c,h,f,u,p){var w=this;this.container=new o.DisplayObjectContainer,this.container.position.x=n,this.container.position.y=t,e.addChild(this.container),this.linesDown=s,this.height=r,this.pixelsPerSecond=a,this.width=l,this.noteColors=d,this.colorsReg=c||{},this.lineColor=h,this.lineInterval=f,this.offsetMusic=u||0,this.noteHeight=p,this.addNote=function(e,n,t,r,s){var a=(this.offsetMusic+n)*this.pixelsPerSecond/1e3,l=t*this.pixelsPerSecond/1e3;if(!(a+l<Math.abs(this.container.x)-this.width)){var d=new o.Graphics,c=this.colorsReg[s];if("undefined"==typeof c){var h=Object.keys(this.colorsReg).length;c=this.colorsReg[s]=h<this.noteColors.length?this.noteColors[h]:parseInt(i({luminosity:"light",hue:"random",format:"hex"}).replace(/^#/,""),16)}d.beginFill(c,r/128);var f=(128-e)*this.height/128;d.drawRect(0,Math.floor(f-p/2+this.height/128/2),l,p),d.endFill(),d.x=a,this.container.addChild(d)}},this.addLine=function(e){var n=new o.Graphics,t=-this.container.x;n.beginFill(16776960),n.lineStyle(1,this.lineColor);var i=this.linesDown?this.height-20:0;n.moveTo(t,i),n.lineTo(t,i+20),n.endFill(),this.container.addChild(n);var r=e*this.lineInterval/1e3,s=parseInt(r/3600)%24,a=parseInt(r/60)%60,l=r%60,d=(10>s?"0"+s:s)+":"+(10>a?"0"+a:a)+":"+(10>l?"0"+l:l),c={font:"10pt Arial",fill:"#444444"},h=new o.Text(d,c);h.x=t+2,h.y=this.linesDown?this.height-15:2,this.container.addChild(h)},this.moveTo=function(e){this.container.x=Math.floor(e*this.pixelsPerSecond)},this.removePassedObjets=function(){for(var e=w.container.children.length,n=0,t=!1,o=[];e>n&&!t;){var i=w.container.children[n++];"undefined"!=typeof i&&(i.x+i.width<Math.abs(w.container.x)-w.width?o.push(i):t=!0)}o.forEach(function(e){w.container.removeChild(e)})},window.setInterval(this.removePassedObjets,1e3*this.width/this.pixelsPerSecond)}var o=e("pixi"),i=e("randomColor");n.exports=t},{pixi:"pixi",randomColor:"randomColor"}]},{},[1])(1)});
\ No newline at end of file