From 8d2671babf64c2b01b8ab1fac514fa03bfdb00c5 Mon Sep 17 00:00:00 2001 From: Ctank Date: Thu, 23 May 2019 21:45:27 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=BC=BA=E9=99=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/js/bpd-core.umd.js | 563 +++++++++++++++++++++++++++++++++++++++- src/draw/draw.js | 3 +- 2 files changed, 563 insertions(+), 3 deletions(-) diff --git a/dist/js/bpd-core.umd.js b/dist/js/bpd-core.umd.js index 76da672..ab30a76 100644 --- a/dist/js/bpd-core.umd.js +++ b/dist/js/bpd-core.umd.js @@ -1 +1,562 @@ -!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var i in n)("object"==typeof exports?exports:e)[i]=n[i]}}("undefined"!=typeof self?self:this,function(){return function(e){function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=9)}([function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(1),a=function(){function e(e,t){for(var n=0;n0?e.toLowerCase():null)},s=function(){function e(){i(this,e),this.fns=[],this.datas=[]}return a(e,[{key:"add",value:function(e,t){this.fns.push(e),this.datas.push(t)}},{key:"remove",value:function(e){var t=this.fns.indexOf(e);t>=0&&(this.fns.splice(t,1),this.datas.splice(t,1))}},{key:"invoke",value:function(e,t){var n=this,i=null;return this.fns.forEach(function(r,a){try{i=r(e,t,n.datas[a])}catch(e){console.error(e)}}),i}}]),e}(),l=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};i(this,e),this.handers=t}return a(e,[{key:"on",value:function(e,t,n){if(null==(e=o(e)))throw new Error("事件名无效");if(!Object(r.f)(n)){var i=n;n=t,t=i}if(!Object(r.f)(n))throw new Error("必须提供事件函数");var a=this.handers[e];null==a&&(a=new s,this.handers[e]=a),a.add(n,t)}},{key:"off",value:function(e,t){if(null!=(e=o(e))){var n=this.handers[e];null!=n&&(null==t?delete this.handers[e]:n.remove(t))}}},{key:"destroy",value:function(){this.handers={}}},{key:"trigger",value:function(e,t,n){if(null!=(e=o(e))){var i=this.handers[e];return null!=i?i.invoke(t,n):void 0}}}]),e}(),c=new l;t.a=c},function(e,t,n){"use strict";n.d(t,"g",function(){return r}),n.d(t,"f",function(){return a}),n.d(t,"d",function(){return o}),n.d(t,"c",function(){return s}),n.d(t,"h",function(){return l}),n.d(t,"l",function(){return c}),n.d(t,"i",function(){return u}),n.d(t,"e",function(){return p}),n.d(t,"a",function(){return h}),n.d(t,"b",function(){return f}),n.d(t,"j",function(){return d}),n.d(t,"k",function(){return y});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},n=document.createElement("span");n.innerHTML="",n.style.visibility="hidden",n.style.fontSize="500px",document.body.appendChild(n);var i=n.offsetWidth,r=n.offsetHeight;n.style.fontFamily=e;var a=setInterval(function(){n.offsetWidth===i&&n.offsetHeight===r||(clearInterval(a),document.body.removeChild(n),n=null,t())},50)},a=function(e){return"function"==typeof e},o=function(e,t){return"uppercase"===t?e.substring(0,1).toUpperCase()+e.substring(1):e.substring(0,1).toLowerCase()+e.substring(1)},s=function(e){return JSON.parse(JSON.stringify(e))},l=function(e,t){for(var n=[],i=e.concat(t),r=0;r1&&void 0!==arguments[1]?arguments[1]:1;if("object"===(void 0===t?"undefined":i(t))){var r={};for(var a in t)r[a]=t[a],"number"==typeof t[a]&&(r[a]=e(r[a],n));return r}return t*n},u=function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if("object"===(void 0===t?"undefined":i(t))){var r={};for(var a in t)r[a]=t[a],"number"==typeof t[a]&&(r[a]=e(r[a],n));return r}return t/n},p=function(e){return e.indexOf(":")>=0?e.substr(e.indexOf(":")+1):""},h={font:function(e,t){var n=t.fontStyle,i=t.fontVariant,r=t.fontWeight,a=t.fontSize,o=t.fontFamily,s=t.content,l=t.fontColor,c=t.textAlign,u=t.textBaseline,p=t.x,h=t.y;c&&(e.textAlign=c),u&&(e.textBaseline=u),l&&(e.fillStyle=l),e.font=n+" "+i+" "+r+" "+a+" "+o,e.fillText(s,p,h)},move:function(e,t){e.moveTo(t.x,t.y)},line:function(e,t){e.lineTo(t.x,t.y)},curve:function(e,t){e.bezierCurveTo(t.x1,t.y1,t.x2,t.y2,t.x,t.y)},quadraticCurve:function(e,t){e.quadraticCurveTo(t.x1,t.y1,t.x,t.y)},close:function(e){e.closePath()}},f=function(e,t,n){var i="";return e.forEach(function(n,r){t.indexOf(n)<0&&(i+=n+(r!==e.length?",":""))}),-1===i.indexOf(n)},d=function(e){var t={};if("bpmn:Process"===e.$type)t.id=e.id,t.extensions=y(e.extensionElements.values||[]);else{var n=e.data,i=e.shape;t.bpmnName=i.bpmnName,t.groupName=i.groupName;for(var r in n)switch(r){case"$type":break;case"extensionElements":t.extensions=y(n[r].values||[]);break;default:t[r]=n[r]}}return t},y=function(e){for(var t=[],n=0;n=t/4&&e=t/4*3&&e=t/4*5&&ee.y?n=Math.PI-n:t.x=e.x&&t.yt.x2)&&(t.x2=r.x+r.width),(null==t.y2||r.y+r.height>t.y2)&&(t.y2=r.y+r.height)}return{x:t.x1,y:t.y1,width:t.x2-t.x1,height:t.y2-t.y1}},l=function(e,t,n){for(var i=Math.PI/18,r=[],a=0;a<36;a+=1){var o=i*a,s={x:e-Math.cos(o)*n,y:t-Math.sin(o)*n,angle:o};r.push(s)}return r},c=function(e){for(var t=R(e),n=0,i=1;i1&&void 0!==arguments[1]?arguments[1]:60,n=e.split(","),i=parseInt(n[0]),r=parseInt(n[1]),a=parseInt(n[2]),o=Math.round(i+(255-i)/255*t);o>255&&(o=255);var s=Math.round(r+(255-r)/255*t);s>255&&(s=255);var l=Math.round(a+(255-a)/255*t);return l>255&&(l=255),o+","+s+","+l},p=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:13,n=e.split(","),i=parseInt(n[0]),r=parseInt(n[1]),a=parseInt(n[2]),o=Math.round(i-i/255*t);o<0&&(o=0);var s=Math.round(r-r/255*t);s<0&&(s=0);var l=Math.round(a-a/255*t);return l<0&&(l=0),o+","+s+","+l},h=function(e){return p(e,26)},f=function(e){var t=i.a.trigger("element.get"),n=[];for(var r in t){var a=t[r],o=a.plane.bounds;o="SequenceFlow"===a.shape.bpmnName?P(a):I(a),F(o.x,o.y,e)&&F(o.x+o.width,o.y,e)&&F(o.x+o.width,o.y+o.height,e)&&F(o.x,o.y+o.height,e)&&n.push(a.data.id)}return n},d=function(e,t,n){var i=30,r=[],a=n.plane.bounds,o=a.x,s=a.width,l={};return t.x>=o-i&&t.x<=o+s+i?(t.x=o-i&&t.y<=o+s+i?(l.x=e.x+i,t.y=o-i&&t.x<=o+s+i?(t.x=o-i&&t.y<=o+s+i?(l.x=e.x+i,t.y=s.x&&l.x<=u){var h=s.x+s.width/2;t.xp?u+a:p+a,l.ye.x)c.x=e.x+r/2,o.push({x:c.x,y:e.y}),o.push({x:c.x,y:t.y});else{var u=s.y+s.height,p=l.y+l.height;if(c.x=e.x+a,p>=s.y&&l.y<=u){var h=s.y+s.height/2;t.yp?u+a:p+a,l.x+l.width>e.x&&(c.x=l.x+l.width+a)}else t.ye.x&&t.y>e.y)a.push({x:t.x,y:e.y});else if(t.x>e.x&&s.x>e.x)s.x-e.x<60?l.x=e.x+(s.x-e.x)/2:l.x=e.x+r,l.y=t.y-r,a.push({x:l.x,y:e.y}),a.push({x:l.x,y:l.y}),a.push({x:t.x,y:l.y});else if(t.x<=e.x&&t.y>o.y+o.height){var c=o.y+o.height;l.x=e.x+r,t.y-c<60?l.y=c+(t.y-c)/2:l.y=t.y-r,a.push({x:l.x,y:e.y}),a.push({x:l.x,y:l.y}),a.push({x:t.x,y:l.y})}else{var u=s.x+s.width;u>e.x?l.x=u+r:l.x=e.x+r,t.ye.y)a.push({x:t.x,y:e.y});else if(t.x=e.x&&t.y>o.y+o.height){var u=o.y+o.height;l.x=e.x-r,t.y-u<60?l.y=u+(t.y-u)/2:l.y=t.y-r,a.push({x:l.x,y:e.y}),a.push({x:l.x,y:l.y}),a.push({x:t.x,y:l.y})}else s.xe.x&&t.ye.x&&s.x>e.x)s.x-e.x<60?l.x=e.x+(s.x-e.x)/2:l.x=e.x+r,l.y=t.y+r,a.push({x:l.x,y:e.y}),a.push({x:l.x,y:l.y}),a.push({x:t.x,y:l.y});else if(t.x<=e.x&&t.ye.x?l.x=c+r:l.x=e.x+r,t.y>o.y+o.height?l.y=t.y+r:l.y=o.y+o.height+r,a.push({x:l.x,y:e.y}),a.push({x:l.x,y:l.y}),a.push({x:t.x,y:l.y})}return a},S=function(e,t,n,i){var r=30,a=[],o=n.plane.bounds,s=i.plane.bounds,l={},c=s.x+s.width;return t.x=e.x&&t.yo.y+o.height?l.y=t.y+r:l.y=o.y+o.height+r,a.push({x:l.x,y:e.y}),a.push({x:l.x,y:l.y}),a.push({x:t.x,y:l.y})),a},C=function(e,t,n,i){if(null!=n)return{x:e.x-i*Math.cos(e.angle),y:e.y-i*Math.sin(e.angle)};var r=Math.abs(e.y-t.y),a=Math.abs(e.x-t.x),o=Math.atan(r/a),s={};return e.x<=t.x?s.x=e.x+i*Math.cos(o):s.x=e.x-i*Math.cos(o),e.y<=t.y?s.y=e.y+i*Math.sin(o):s.y=e.y-i*Math.sin(o),s},A=function(e,t){var n=e.data,i=n.sourceRef,r=n.targetRef,o=t[i],s=t[r],l=e.plane.waypoint,c=l[0],u=l[l.length-1],p=[];if("broken"===e.linkerType){var h=Math.abs(u.x-c.x),f=Math.abs(u.y-c.y),A=Math.PI,k=30,O=!1,R=void 0,P=void 0,T=void 0,M=void 0,j=void 0;if(null!=i&&null!=r){var N=a(c.angle),D=a(u.angle);1===N&&1===D?(c.yu.y?(R=c,P=u,T=o,M=s,O=!1):(R=u,P=c,T=s,M=o,O=!0),p=m(R,P,T)):2===N&&2===D?(c.y>u.y?(R=c,P=u,T=o,M=s,O=!1):(R=u,P=c,T=s,M=o,O=!0),p=y(R,P,T)):4===N&&4===D?(c.x=A/4&&j=f)p.push({x:R.x,y:P.y});else{var I=f/2;p.push({x:R.x,y:R.y-I}),p.push({x:P.x,y:R.y-I})}else if(p.push({x:R.x,y:R.y-k}),h>=f)if(P.x>=B.x-k&&P.x<=B.x+B.width+k){var L=B.x+B.width/2;P.x=B.x-k&&P.x<=B.x+B.width+k){var _=B.x+B.width/2;P.x<_?(p.push({x:B.x-k,y:R.y-k}),p.push({x:B.x-k,y:P.y-k}),p.push({x:P.x,y:P.y-k})):(p.push({x:B.x+B.width+k,y:R.y-k}),p.push({x:B.x+B.width+k,y:P.y-k}),p.push({x:P.x,y:P.y-k}))}else p.push({x:P.x,y:R.y-k});else if(j>=A/4*3&&jR.x)h>=f?(p.push({x:R.x+h/2,y:R.y}),p.push({x:R.x+h/2,y:P.y})):p.push({x:P.x,y:R.y});else if(p.push({x:R.x+k,y:R.y}),h>=f)if(P.y>=B.y-k&&P.y<=B.y+B.height+k){var F=B.y+B.height/2;P.y=B.y-k&&P.y<=B.y+B.height+k){var q=B.y+B.height/2;P.y=A/4*5&&jR.y)h>=f?p.push({x:R.x,y:P.y}):(p.push({x:R.x,y:R.y+f/2}),p.push({x:P.x,y:R.y+f/2}));else if(p.push({x:R.x,y:R.y+k}),h>=f)if(P.x>=B.x-k&&P.x<=B.x+B.width+k){var z=B.x+B.width/2;P.x=B.x-k&&P.x<=B.x+B.width+k){var W=B.x+B.width/2;P.x=f?(p.push({x:R.x-h/2,y:R.y}),p.push({x:R.x-h/2,y:P.y})):p.push({x:P.x,y:R.y});else if(p.push({x:R.x-k,y:R.y}),h>=f)if(P.y>=B.y-k&&P.y<=B.y+B.height+k){var G=B.y+B.height/2;P.y=B.y-k&&P.y<=B.y+B.height+k){var H=B.y+B.height/2;P.y=f){var V=(u.x-c.x)/2;p.push({x:c.x+V,y:c.y}),p.push({x:c.x+V,y:u.y})}else{var U=(u.y-c.y)/2;p.push({x:c.x,y:c.y+U}),p.push({x:u.x,y:c.y+U})}}else if("curve"===e.linkerType){var X=$(c,u),K=.4*X;p.push(C(c,u,i,K)),p.push(C(u,c,r,K))}return p},k=function(e){var t={},n=e.plane.waypoint,i=n[0],r=n[n.length-1];if("normal"===e.linkerType)t.x=.5*i.x+.5*r.x,t.y=.5*i.y+.5*r.y;else if("curve"===e.linkerType)t.x=.125*i.x+.375*e.points[0].x+.375*e.points[1].x+.125*r.x,t.y=.125*i.y+.375*e.points[0].y+.375*e.points[1].y+.125*r.y;else{var a=[];a.push(i),a=a.concat(e.points),a.push(r);for(var o=0,s=1;sl){var d=(l-c)/f;t.x=(1-d)*p.x+d*h.x,t.y=(1-d)*p.y+d*h.y;break}c=f}}return t},O=function(e,t){var n=e.data,i=(n.sourceRef,n.targetRef,e.plane.waypoint),r=i[0],a=i[i.length-1],s=void 0,l=void 0;if("normal"===e.linkerType)s="source"===t?a:r;else if("broken"===e.linkerType)s="source"===t?e.points[0]:e.points[e.points.length-1];else{var c=$(r,a),u=void 0;u="source"===t?12/c:1-12/c,s={x:(1-u)*(1-u)*(1-u)*r.x+3*(1-u)*(1-u)*u*e.points[0].x+3*(1-u)*u*u*e.points[1].x+u*u*u*a.x,y:(1-u)*(1-u)*(1-u)*r.y+3*(1-u)*(1-u)*u*e.points[0].y+3*(1-u)*u*u*e.points[1].y+u*u*u*a.y}}return l="source"===t?r:a,o(s,l)},R=function(e){var t=e.plane,n=e.shape,i=[];if("curve"!==n.linkerType)i.push(t.waypoint[0]),i=i.concat(n.points);else for(var r=0;r<=1;){var a={x:(1-r)*(1-r)*(1-r)*n.points[0].x+3*(1-r)*(1-r)*r*n.points[1].x+3*(1-r)*r*r*n.points[2].x+r*r*r*n.points[n.points.length-1].x,y:(1-r)*(1-r)*(1-r)*n.points[0].y+3*(1-r)*(1-r)*r*n.points[1].y+3*(1-r)*r*r*n.points[2].y+r*r*r*n.points[n.points.length-1].y};i.push(a),r+=.05}return i.push(t.waypoint[t.waypoint.length-1]),i},P=function(e){for(var t=R(e),n=t[0].x,i=t[0].y,r=t[0].x,a=t[0].y,o=0;or&&(r=s.x),s.ya&&(a=s.y)}return{x:n,y:i,width:r-n,height:a-i}},T=function(e){for(var t=[],n=[],r=i.a.trigger("shape.select.getIds"),a=0;a0)for(var l=0;l=0)&&n.indexOf(c)<0&&(t.push(i.a.trigger("element.get",c)),n.push(c))}}}return t},M=function(){for(var e=i.a.trigger("shape.select.get"),t=[],n=0;n=e.x&&t.y>=e.y?r=Math.PI-r:t.x<=e.x&&t.y>=e.y?r=Math.PI+r:t.x<=e.x&&t.y<=e.y&&(r=2*Math.PI-r),r%=2*Math.PI;var a=(r+n)%(2*Math.PI);return{x:e.x+Math.sin(a)*i,y:e.y-Math.cos(a)*i}},I=function(e){var t=e.plane,n=e.shape;return D(t.bounds,n.shapeStyle.angle)},L=function(e,t,n,a){var o=[],s=i.a.trigger("element.get");for(var l in s){var c=s[l],u=c.data,p=c.plane,h=c.shape,f=n.find('.shape-box[data-id="'+u.id+'"]'),d=f.position(),y=e-d.left,m=t-d.top,g=void 0,v=void 0,x={x:d.left,y:d.top,width:f.width(),height:f.height()},b=f.find(".shape-canvas"),w=b[0].getContext("2d"),E=F(e,t,x);if("SequenceFlow"===h.bpmnName){if(!E)continue;if(a)continue;g=Object(r.l)(10),v={x:e-g,y:t-g,width:2*g,height:2*g};var S=(p.waypoint[0].x,p.waypoint[0].y,{x:p.waypoint[p.waypoint.length-1].x,y:p.waypoint[p.waypoint.length-1].y});if(F(Object(r.l)(S.x),Object(r.l)(S.y),v)){var C={type:"sequence_point",point:"target",element:c};o.push(C);continue}if(F(Object(r.l)(S.x),Object(r.l)(S.y),v)){var A={type:"sequence_point",point:"source",element:c};o.push(A);continue}var k=f.find(".text-box"),O=k.position(),R={x:O.left,y:O.top,width:k.width(),height:k.height()};if(F(y,m,R)){var P={type:"sequence_text",element:c};o.push(P);continue}g=Object(r.l)(7);var T=q({x:Object(r.i)(e),y:Object(r.i)(t)},c,g);if(T>-1){o.push({type:"sequence",element:c,pointIndex:T});continue}}else{if(E&&h.locked&&!a){w.isPointInPath(y,m)&&o.push({type:"shape",element:c});continue}if(g=Object(r.l)(7),E){v={x:e-g,y:t-g,width:2*g,height:2*g},x={x:p.bounds.x+p.bounds.width/2,y:p.bounds.y+p.bounds.height/2};for(var M=h.getAnchors(),N=null,D=0;D1&&a)$=o[0];else if(o.length>1){if("bounds"===o[0].type&&"sequence_point"!==o[0].type&&"sequence"!==o[0].type)return o[0];for(var _=[],z=[],W=[],G=0;G0&&z.length>0)for(var V=0;V0&&(z.sort(function(e,t){return i.a.trigger("shape.select.check",e.element.data.id)&&!i.a.trigger("shape.select.check",t.element.data.id)?-1:!i.a.trigger("shape.select.check",e.element.data.id)&&i.a.trigger("shape.select.check",t.element.data.id)?1:t.element.shape.shapeStyle.zindex-e.element.shape.shapeStyle.zindex}),$=z[0]),null==$&&_.length>0&&(_.sort(function(e,t){return i.a.trigger("shape.select.check",e.element.data.id)&&!i.a.trigger("shape.select.check",t.element.data.id)?-1:!i.a.trigger("shape.select.check",e.element.data.id)&&i.a.trigger("shape.select.check",t.element.data.id)?1:t.element.shape.shapeStyle.zindex-e.element.shape.shapeStyle.zindex}),$=_[0]),null==$&&($=o[0])}return $},$=function(e,t){var n=t.y-e.y,i=t.x-e.x;return Math.sqrt(Math.pow(n,2)+Math.pow(i,2))},_=function(e,t){e.setLineDash||(e.setLineDash=function(){}),e.setLineDash(t),e.mozDash=t,e.webkitLineDash=t},F=function(e,t,n){return e>=n.x&&e<=n.x+n.width&&t>=n.y&&t<=n.y+n.height},q=function(e,t,n){for(var i=R(t),r={x:e.x-n,y:e.y},a={x:e.x+n,y:e.y},o={x:e.x,y:e.y-n},s={x:e.x,y:e.y+n},l=1;l=0&&o<=1&&s>=0&&s<=1&&(r=!0)}return r};t.a={getAngle:o,getAngleDir:a,getBounding:s,getConnectionLength:c,getConnectionMidpoint:k,getConnectionPoints:A,getEndpointAngle:O,getElementIdsByRange:f,getConnectionBox:P,getLighterColor:u,getDarkerColor:p,getDarkestColor:h,getOutConnections:T,getPointAngle:j,getRelativePos:N,getRotated:B,getRotatedBox:D,getSelectedConnectionIds:M,getShapeByPosition:L,getShapeBox:I,measureDistance:$,setLineDash:_}},function(e,t,n){"use strict";var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.a=function(){function e(e,t,n){t=t||V;var i,r=t.createElement("script");if(r.text=e,n)for(i in oe)n[i]&&(r[i]=n[i]);t.head.appendChild(r).parentNode.removeChild(r)}function t(e){return null==e?e+"":"object"===(void 0===e?"undefined":i(e))||"function"==typeof e?Q[Z.call(e)]||"object":void 0===e?"undefined":i(e)}function n(e){var n=!!e&&"length"in e&&e.length,i=t(e);return!re(e)&&!ae(e)&&("array"===i||0===n||"number"==typeof n&&n>0&&n-1 in e)}function r(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}function a(e,t,n){return re(t)?se.grep(e,function(e,i){return!!t.call(e,i,e)!==n}):t.nodeType?se.grep(e,function(e){return e===t!==n}):"string"!=typeof t?se.grep(e,function(e){return J.call(t,e)>-1!==n}):se.filter(t,e,n)}function o(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function s(e){var t={};return se.each(e.match(ve)||[],function(e,n){t[n]=!0}),t}function l(e){return e}function c(e){throw e}function u(e,t,n,i){var r;try{e&&re(r=e.promise)?r.call(e).done(t).fail(n):e&&re(r=e.then)?r.call(e,t,n):t.apply(void 0,[e].slice(i))}catch(e){n.apply(void 0,[e])}}function p(){V.removeEventListener("DOMContentLoaded",p),window.removeEventListener("load",p),se.ready()}function h(e,t){return t.toUpperCase()}function f(e){return e.replace(Ee,"ms-").replace(Se,h)}function d(){this.expando=se.expando+d.uid++}function y(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Oe.test(e)?JSON.parse(e):e)}function m(e,t,n){var i;if(void 0===n&&1===e.nodeType)if(i="data-"+t.replace(Re,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(i))){try{n=y(n)}catch(e){}ke.set(e,t,n)}else n=void 0;return n}function g(e,t,n,i){var r,a,o=20,s=i?function(){return i.cur()}:function(){return se.css(e,t,"")},l=s(),c=n&&n[3]||(se.cssNumber[t]?"":"px"),u=(se.cssNumber[t]||"px"!==c&&+l)&&Te.exec(se.css(e,t));if(u&&u[3]!==c){for(l/=2,c=c||u[3],u=+l||1;o--;)se.style(e,t,u+c),(1-a)*(1-(a=s()/l||.5))<=0&&(o=0),u/=a;u*=2,se.style(e,t,u+c),n=n||[]}return n&&(u=+u||+l||0,r=n[1]?u+(n[1]+1)*n[2]:+n[2],i&&(i.unit=c,i.start=u,i.end=r)),r}function v(e){var t,n=e.ownerDocument,i=e.nodeName,r=De[i];return r||(t=n.body.appendChild(n.createElement(i)),r=se.css(t,"display"),t.parentNode.removeChild(t),"none"===r&&(r="block"),De[i]=r,r)}function x(e,t){for(var n,i,r=[],a=0,o=e.length;a-1)a&&a.push(o);else if(u=se.contains(o.ownerDocument,o),s=b(h.appendChild(o),"script"),u&&w(s),i)for(p=0;o=s[p++];)Le.test(o.type||"")&&i.push(o);return h}function S(){return!0}function C(){return!1}function A(){try{return V.activeElement}catch(e){}}function k(e,t,n,r,a,o){var s,l;if("object"===(void 0===t?"undefined":i(t))){"string"!=typeof n&&(r=r||n,n=void 0);for(l in t)k(e,l,n,r,t[l],o);return e}if(null==r&&null==a?(a=n,r=n=void 0):null==a&&("string"==typeof n?(a=r,r=void 0):(a=r,r=n,n=void 0)),!1===a)a=C;else if(!a)return e;return 1===o&&(s=a,a=function(e){return se().off(e),s.apply(this,arguments)},a.guid=s.guid||(s.guid=se.guid++)),e.each(function(){se.event.add(this,t,a,r,n)})}function O(e,t){return r(e,"table")&&r(11!==t.nodeType?t:t.firstChild,"tr")?se(e).children("tbody")[0]||e:e}function R(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function P(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function T(e,t){var n,i,r,a,o,s,l,c;if(1===t.nodeType){if(Ae.hasData(e)&&(a=Ae.access(e),o=Ae.set(t,a),c=a.events)){delete o.handle,o.events={};for(r in c)for(n=0,i=c[r].length;n1&&"string"==typeof d&&!ie.checkClone&&Ve.test(d))return t.each(function(e){var a=t.eq(e);y&&(n[0]=d.call(this,e,a.html())),j(a,n,i,r)});if(h&&(a=E(n,t[0].ownerDocument,!1,t,r),o=a.firstChild,1===a.childNodes.length&&(a=o),o||r)){for(s=se.map(b(a,"script"),R),l=s.length;p=0&&(l+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-a-l-s-.5))),l}function F(e,t,n){var i=Ke(e),r=D(e,t,i),a="border-box"===se.css(e,"boxSizing",!1,i),o=a;if(Xe.test(r)){if(!n)return r;r="auto"}return o=o&&(ie.boxSizingReliable()||r===e.style[t]),("auto"===r||!parseFloat(r)&&"inline"===se.css(e,"display",!1,i))&&(r=e["offset"+t[0].toUpperCase()+t.slice(1)],o=!0),(r=parseFloat(r)||0)+_(e,t,n||(a?"border":"content"),o,i,r)+"px"}function q(e){return(e.match(ve)||[]).join(" ")}function z(e){return e.getAttribute&&e.getAttribute("class")||""}function W(e){return Array.isArray(e)?e:"string"==typeof e?e.match(ve)||[]:[]}function G(e,n,r,a){var o;if(Array.isArray(n))se.each(n,function(t,n){r||ut.test(e)?a(e,n):G(e+"["+("object"===(void 0===n?"undefined":i(n))&&null!=n?t:"")+"]",n,r,a)});else if(r||"object"!==t(n))a(e,n);else for(o in n)G(e+"["+o+"]",n[o],r,a)}var H=[],V=window.document,U=Object.getPrototypeOf,X=H.slice,K=H.concat,Y=H.push,J=H.indexOf,Q={},Z=Q.toString,ee=Q.hasOwnProperty,te=ee.toString,ne=te.call(Object),ie={},re=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},ae=function(e){return null!=e&&e===e.window},oe={type:!0,src:!0,noModule:!0},se=function e(t,n){return new e.fn.Init(t,n)},le=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;se.fn=se.prototype={slimJQ:"3.3.1",constructor:se,length:0,toArray:function(){return X.call(this)},get:function(e){return null==e?X.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=se.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return se.each(this,e)},map:function(e){return this.pushStack(se.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(X.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&nw.cacheLength&&delete e[t.shift()],e[n+" "]=i}var t=[];return e}function i(e){return e[$]=!0,e}function r(e){var t=M.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function a(e,t){for(var n=e.split("|"),i=n.length;i--;)w.attrHandle[n[i]]=t}function o(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&Ee(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function l(e){return i(function(t){return t=+t,i(function(n,i){for(var r,a=e([],n.length,t),o=a.length;o--;)n[r=a[o]]&&(n[r]=!(i[r]=n[r]))})})}function c(e){return e&&void 0!==e.getElementsByTagName&&e}function u(){}function p(e){for(var t=0,n=e.length,i="";t1?function(t,n,i){for(var r=e.length;r--;)if(!e[r](t,n,i))return!1;return!0}:e[0]}function d(e,n,i){for(var r=0,a=n.length;r-1&&(i[c]=!(o[c]=p))}}else x=y(x===o?x.splice(m,x.length):x),a?a(null,o,x,l):Y.apply(o,x)})}function g(e){for(var t,n,i,r=e.length,a=w.relative[e[0].type],o=a||w.relative[" "],s=a?1:0,l=h(function(e){return e===t},o,!0),c=h(function(e){return Q(t,e)>-1},o,!0),u=[function(e,n,i){var r=!a&&(i||n!==O)||((t=n).nodeType?l(e,n,i):c(e,n,i));return t=null,r}];s1&&f(u),s>1&&p(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(ae,"$1"),n,s0,a=e.length>0,o=function(i,o,s,l,c){var u,p,h,f=0,d="0",m=i&&[],g=[],v=O,x=i||a&&w.find.TAG("*",c),b=F+=null==v?1:Math.random()||.1,E=x.length;for(c&&(O=o===M||o||c);d!==E&&null!=(u=x[d]);d++){if(a&&u){for(p=0,o||u.ownerDocument===M||(T(u),s=!N);h=e[p++];)if(h(u,o||M,s)){l.push(u);break}c&&(F=b)}r&&((u=!h&&u)&&f--,i&&m.push(u))}if(f+=d,r&&d!==f){for(p=0;h=n[p++];)h(m,g,o,s);if(i){if(f>0)for(;d--;)m[d]||g[d]||(g[d]=X.call(l));g=y(g)}Y.apply(l,g),c&&!i&&g.length>0&&f+n.length>1&&t.uniqueSort(l)}return c&&(F=b,O=v),m};return r?i(o):o}var x,b,w,E,S,C,A,k,O,R,P,T,M,j,N,D,B,I,L,$="sizzle"+1*new Date,_=e.document,F=0,q=0,z=n(),W=n(),G=n(),H=function(e,t){return e===t&&(P=!0),0},V={}.hasOwnProperty,U=[],X=U.pop,K=U.push,Y=U.push,J=U.slice,Q=function(e,t){for(var n=0,i=e.length;n+~]|"+ee+")"+ee+"*"),le=new RegExp("="+ee+"*([^\\]'\"]*?)"+ee+"*\\]","g"),ce=new RegExp(ie),ue=new RegExp("^"+te+"$"),pe={ID:new RegExp("^#("+te+")"),CLASS:new RegExp("^\\.("+te+")"),TAG:new RegExp("^("+te+"|[*])"),ATTR:new RegExp("^"+ne),PSEUDO:new RegExp("^"+ie),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ee+"*(even|odd|(([+-]|)(\\d*)n|)"+ee+"*(?:([+-]|)"+ee+"*(\\d+)|))"+ee+"*\\)|)","i"),bool:new RegExp("^(?:"+Z+")$","i"),needsContext:new RegExp("^"+ee+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ee+"*((?:-\\d)?\\d*)"+ee+"*\\)|)(?=[^-]|$)","i")},he=/^(?:input|select|textarea|button)$/i,fe=/^h\d$/i,de=/^[^{]+\{\s*\[native \w/,ye=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,me=/[+~]/,ge=new RegExp("\\\\([\\da-f]{1,6}"+ee+"?|("+ee+")|.)","ig"),ve=function(e,t,n){var i="0x"+t-65536;return i!==i||n?t:i<0?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},xe=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,be=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},we=function(){T()},Ee=h(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{Y.apply(U=J.call(_.childNodes),_.childNodes),U[_.childNodes.length].nodeType}catch(e){Y={apply:U.length?function(e,t){K.apply(e,J.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}b=t.support={},S=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},T=t.setDocument=function(e){var t,n,i=e?e.ownerDocument||e:_;return i!==M&&9===i.nodeType&&i.documentElement?(M=i,j=M.documentElement,N=!S(M),_!==M&&(n=M.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",we,!1):n.attachEvent&&n.attachEvent("onunload",we)),b.attributes=r(function(e){return e.className="i",!e.getAttribute("className")}),b.getElementsByTagName=r(function(e){return e.appendChild(M.createComment("")),!e.getElementsByTagName("*").length}),b.getElementsByClassName=de.test(M.getElementsByClassName),b.getById=r(function(e){return j.appendChild(e).id=$,!M.getElementsByName||!M.getElementsByName($).length}),b.getById?(w.filter.ID=function(e){var t=e.replace(ge,ve);return function(e){return e.getAttribute("id")===t}},w.find.ID=function(e,t){if(void 0!==t.getElementById&&N){var n=t.getElementById(e);return n?[n]:[]}}):(w.filter.ID=function(e){var t=e.replace(ge,ve);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},w.find.ID=function(e,t){if(void 0!==t.getElementById&&N){var n,i,r,a=t.getElementById(e);if(a){if((n=a.getAttributeNode("id"))&&n.value===e)return[a];for(r=t.getElementsByName(e),i=0;a=r[i++];)if((n=a.getAttributeNode("id"))&&n.value===e)return[a]}return[]}}),w.find.TAG=b.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):b.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,a=t.getElementsByTagName(e);if("*"===e){for(;n=a[r++];)1===n.nodeType&&i.push(n);return i}return a},w.find.CLASS=b.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&N)return t.getElementsByClassName(e)},B=[],D=[],(b.qsa=de.test(M.querySelectorAll))&&(r(function(e){j.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&D.push("[*^$]="+ee+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||D.push("\\["+ee+"*(?:value|"+Z+")"),e.querySelectorAll("[id~="+$+"-]").length||D.push("~="),e.querySelectorAll(":checked").length||D.push(":checked"),e.querySelectorAll("a#"+$+"+*").length||D.push(".#.+[+~]")}),r(function(e){e.innerHTML="";var t=M.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&D.push("name"+ee+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&D.push(":enabled",":disabled"),j.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&D.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),D.push(",.*:")})),(b.matchesSelector=de.test(I=j.matches||j.webkitMatchesSelector||j.mozMatchesSelector||j.oMatchesSelector||j.msMatchesSelector))&&r(function(e){b.disconnectedMatch=I.call(e,"*"),I.call(e,"[s!='']:x"),B.push("!=",ie)}),D=D.length&&new RegExp(D.join("|")),B=B.length&&new RegExp(B.join("|")),t=de.test(j.compareDocumentPosition),L=t||de.test(j.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},H=t?function(e,t){if(e===t)return P=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!b.sortDetached&&t.compareDocumentPosition(e)===n?e===M||e.ownerDocument===_&&L(_,e)?-1:t===M||t.ownerDocument===_&&L(_,t)?1:R?Q(R,e)-Q(R,t):0:4&n?-1:1)}:function(e,t){if(e===t)return P=!0,0;var n,i=0,r=e.parentNode,a=t.parentNode,s=[e],l=[t];if(!r||!a)return e===M?-1:t===M?1:r?-1:a?1:R?Q(R,e)-Q(R,t):0;if(r===a)return o(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)l.unshift(n);for(;s[i]===l[i];)i++;return i?o(s[i],l[i]):s[i]===_?-1:l[i]===_?1:0},M):M},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==M&&T(e),n=n.replace(le,"='$1']"),b.matchesSelector&&N&&!G[n+" "]&&(!B||!B.test(n))&&(!D||!D.test(n)))try{var i=I.call(e,n);if(i||b.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){}return t(n,M,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==M&&T(e),L(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==M&&T(e);var n=w.attrHandle[t.toLowerCase()],i=n&&V.call(w.attrHandle,t.toLowerCase())?n(e,t,!N):void 0;return void 0!==i?i:b.attributes||!N?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},t.escape=function(e){return(e+"").replace(xe,be)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],i=0,r=0;if(P=!b.detectDuplicates,R=!b.sortStable&&e.slice(0),e.sort(H),P){for(;t=e[r++];)t===e[r]&&(i=n.push(r));for(;i--;)e.splice(n[i],1)}return R=null,e},E=t.getText=function(e){var t,n="",i=0,r=e.nodeType;if(r){if(1===r||9===r||11===r){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=E(e)}else if(3===r||4===r)return e.nodeValue}else for(;t=e[i++];)n+=E(t);return n},w=t.selectors={cacheLength:50,createPseudo:i,match:pe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(ge,ve),e[3]=(e[3]||e[4]||e[5]||"").replace(ge,ve),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return pe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&ce.test(n)&&(t=C(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(ge,ve).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=z[e+" "];return t||(t=new RegExp("(^|"+ee+")"+e+"("+ee+"|$)"))&&z(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,i){return function(r){var a=t.attr(r,e);return null==a?"!="===n:!n||(a+="","="===n?a===i:"!="===n?a!==i:"^="===n?i&&0===a.indexOf(i):"*="===n?i&&a.indexOf(i)>-1:"$="===n?i&&a.slice(-i.length)===i:"~="===n?(" "+a.replace(re," ")+" ").indexOf(i)>-1:"|="===n&&(a===i||a.slice(0,i.length+1)===i+"-"))}},CHILD:function(e,t,n,i,r){var a="nth"!==e.slice(0,3),o="last"!==e.slice(-4),s="of-type"===t;return 1===i&&0===r?function(e){return!!e.parentNode}:function(t,n,l){var c,u,p,h,f,d,y=a!==o?"nextSibling":"previousSibling",m=t.parentNode,g=s&&t.nodeName.toLowerCase(),v=!l&&!s,x=!1;if(m){if(a){for(;y;){for(h=t;h=h[y];)if(s?h.nodeName.toLowerCase()===g:1===h.nodeType)return!1;d=y="only"===e&&!d&&"nextSibling"}return!0}if(d=[o?m.firstChild:m.lastChild],o&&v){for(h=m,p=h[$]||(h[$]={}),u=p[h.uniqueID]||(p[h.uniqueID]={}),c=u[e]||[],f=c[0]===F&&c[1],x=f&&c[2],h=f&&m.childNodes[f];h=++f&&h&&h[y]||(x=f=0)||d.pop();)if(1===h.nodeType&&++x&&h===t){u[e]=[F,f,x];break}}else if(v&&(h=t,p=h[$]||(h[$]={}),u=p[h.uniqueID]||(p[h.uniqueID]={}),c=u[e]||[],f=c[0]===F&&c[1],x=f),!1===x)for(;(h=++f&&h&&h[y]||(x=f=0)||d.pop())&&((s?h.nodeName.toLowerCase()!==g:1!==h.nodeType)||!++x||(v&&(p=h[$]||(h[$]={}),u=p[h.uniqueID]||(p[h.uniqueID]={}),u[e]=[F,x]),h!==t)););return(x-=r)===i||x%i==0&&x/i>=0}}},PSEUDO:function(e,n){var r,a=w.pseudos[e]||w.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return a[$]?a(n):a.length>1?(r=[e,e,"",n],w.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,t){for(var i,r=a(e,n),o=r.length;o--;)i=Q(e,r[o]),e[i]=!(t[i]=r[o])}):function(e){return a(e,0,r)}):a}},pseudos:{not:i(function(e){var t=[],n=[],r=A(e.replace(ae,"$1"));return r[$]?i(function(e,t,n,i){for(var a,o=r(e,null,i,[]),s=e.length;s--;)(a=o[s])&&(e[s]=!(t[s]=a))}):function(e,i,a){return t[0]=e,r(t,null,a,n),t[0]=null,!n.pop()}}),has:i(function(e){return function(n){return t(e,n).length>0}}),contains:i(function(e){return e=e.replace(ge,ve),function(t){return(t.textContent||t.innerText||E(t)).indexOf(e)>-1}}),lang:i(function(e){return ue.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(ge,ve).toLowerCase(),function(t){var n;do{if(n=N?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===j},focus:function(e){return e===M.activeElement&&(!M.hasFocus||M.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:s(!1),disabled:s(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!w.pseudos.empty(e)},header:function(e){return fe.test(e.nodeName)},input:function(e){return he.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:l(function(){return[0]}),last:l(function(e,t){return[t-1]}),eq:l(function(e,t,n){return[n<0?n+t:n]}),even:l(function(e,t){for(var n=0;n=0;)e.push(i);return e}),gt:l(function(e,t,n){for(var i=n<0?n+t:n;++i2&&"ID"===(o=a[0]).type&&9===t.nodeType&&N&&w.relative[a[1].type]){if(!(t=(w.find.ID(o.matches[0].replace(ge,ve),t)||[])[0]))return n;u&&(t=t.parentNode),e=e.slice(a.shift().value.length)}for(r=pe.needsContext.test(e)?0:a.length;r--&&(o=a[r],!w.relative[s=o.type]);)if((l=w.find[s])&&(i=l(o.matches[0].replace(ge,ve),me.test(a[0].type)&&c(t.parentNode)||t))){if(a.splice(r,1),!(e=i.length&&p(a)))return Y.apply(n,i),n;break}}return(u||A(e,h))(i,t,!N,n,!t||me.test(e)&&c(t.parentNode)||t),n},b.sortStable=$.split("").sort(H).join("")===$,b.detectDuplicates=!!P,T(),b.sortDetached=r(function(e){return 1&e.compareDocumentPosition(M.createElement("fieldset"))}),r(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||a("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),b.attributes&&r(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||a("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),r(function(e){return null==e.getAttribute("disabled")})||a(Z,function(e,t,n){var i;if(!n)return!0===e[t]?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null}),t}(window);se.find=ce,se.expr=ce.selectors,se.expr[":"]=se.expr.pseudos,se.uniqueSort=se.unique=ce.uniqueSort,se.text=ce.getText,se.isXMLDoc=ce.isXML,se.contains=ce.contains,se.escapeSelector=ce.escape;var ue=function(e,t,n){for(var i=[],r=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(r&&se(e).is(n))break;i.push(e)}return i},pe=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},he=se.expr.match.needsContext,fe=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;se.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?se.find.matchesSelector(i,e)?[i]:[]:se.find.matches(e,se.grep(t,function(e){return 1===e.nodeType}))},se.fn.extend({find:function(e){var t,n,i=this.length,r=this;if("string"!=typeof e)return this.pushStack(se(e).filter(function(){for(t=0;t1?se.uniqueSort(n):n},filter:function(e){return this.pushStack(a(this,e||[],!1))},not:function(e){return this.pushStack(a(this,e||[],!0))},is:function(e){return!!a(this,"string"==typeof e&&he.test(e)?se(e):e||[],!1).length}});var de,ye=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(se.fn.Init=function(e,t,n){var i,r;if(!e)return this;if(n=n||de,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:ye.exec(e))||!i[1]&&t)return!t||t.slimJQ?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof se?t[0]:t,se.merge(this,se.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:V,!0)),fe.test(i[1])&&se.isPlainObject(t))for(i in t)re(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return r=V.getElementById(i[2]),r&&(this[0]=r,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):re(e)?void 0!==n.ready?n.ready(e):e(se):se.makeArray(e,this)}).prototype=se.fn,de=se(V);var me=/^(?:parents|prev(?:Until|All))/,ge={children:!0,contents:!0,next:!0,prev:!0};se.fn.extend({has:function(e){var t=se(e,this),n=t.length;return this.filter(function(){for(var e=0;e-1:1===n.nodeType&&se.find.matchesSelector(n,e))){a.push(n);break}return this.pushStack(a.length>1?se.uniqueSort(a):a)},index:function(e){return e?"string"==typeof e?J.call(se(e),this[0]):J.call(this,e.slimJQ?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(se.uniqueSort(se.merge(this.get(),se(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),se.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return ue(e,"parentNode")},parentsUntil:function(e,t,n){return ue(e,"parentNode",n)},next:function(e){return o(e,"nextSibling")},prev:function(e){return o(e,"previousSibling")},nextAll:function(e){return ue(e,"nextSibling")},prevAll:function(e){return ue(e,"previousSibling")},nextUntil:function(e,t,n){return ue(e,"nextSibling",n)},prevUntil:function(e,t,n){return ue(e,"previousSibling",n)},siblings:function(e){return pe((e.parentNode||{}).firstChild,e)},children:function(e){return pe(e.firstChild)},contents:function(e){return r(e,"iframe")?e.contentDocument:(r(e,"template")&&(e=e.content||e),se.merge([],e.childNodes))}},function(e,t){se.fn[e]=function(n,i){var r=se.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"==typeof i&&(r=se.filter(i,r)),this.length>1&&(ge[e]||se.uniqueSort(r),me.test(e)&&r.reverse()),this.pushStack(r)}});var ve=/[^\x20\t\r\n\f]+/g;se.Callbacks=function(e){e="string"==typeof e?s(e):se.extend({},e);var n,i,r,a,o=[],l=[],c=-1,u=function(){for(a=a||e.once,r=n=!0;l.length;c=-1)for(i=l.shift();++c-1;)o.splice(n,1),n<=c&&c--}),this},has:function(e){return e?se.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return a=l=[],o=i="",this},disabled:function(){return!o},lock:function(){return a=l=[],i||n||(o=i=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=t||[],t=[e,t.slice?t.slice():t],l.push(t),n||u()),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!r}};return p},se.extend({Deferred:function(e){var t=[["notify","progress",se.Callbacks("memory"),se.Callbacks("memory"),2],["resolve","done",se.Callbacks("once memory"),se.Callbacks("once memory"),0,"resolved"],["reject","fail",se.Callbacks("once memory"),se.Callbacks("once memory"),1,"rejected"]],n="pending",r={state:function(){return n},always:function(){return a.done(arguments).fail(arguments),this},catch:function(e){return r.then(null,e)},pipe:function(){var e=arguments;return se.Deferred(function(n){se.each(t,function(t,i){var r=re(e[i[4]])&&e[i[4]];a[i[1]](function(){var e=r&&r.apply(this,arguments);e&&re(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[i[0]+"With"](this,r?[e]:arguments)})}),e=null}).promise()},then:function(e,n,r){function a(e,t,n,r){return function(){var s=this,u=arguments,p=function(){var p,h;if(!(e=o&&(n!==c&&(s=void 0,u=[i]),t.rejectWith(s,u))}};e?h():(se.Deferred.getStackHook&&(h.stackTrace=se.Deferred.getStackHook()),window.setTimeout(h))}}var o=0;return se.Deferred(function(i){t[0][3].add(a(0,i,re(r)?r:l,i.notifyWith)),t[1][3].add(a(0,i,re(e)?e:l)),t[2][3].add(a(0,i,re(n)?n:c))}).promise()},promise:function(e){return null!=e?se.extend(e,r):r}},a={};return se.each(t,function(e,i){var o=i[2],s=i[5];r[i[1]]=o.add,s&&o.add(function(){n=s},t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),o.add(i[3].fire),a[i[0]]=function(){return a[i[0]+"With"](this===a?void 0:this,arguments),this},a[i[0]+"With"]=o.fireWith}),r.promise(a),e&&e.call(a,a),a},when:function(e){var t=arguments.length,n=t,i=Array(n),r=X.call(arguments),a=se.Deferred(),o=function(e){return function(n){i[e]=this,r[e]=arguments.length>1?X.call(arguments):n,--t||a.resolveWith(i,r)}};if(t<=1&&(u(e,a.done(o(n)).resolve,a.reject,!t),"pending"===a.state()||re(r[n]&&r[n].then)))return a.then();for(;n--;)u(r[n],o(n),a.reject);return a.promise()}});var xe=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;se.Deferred.exceptionHook=function(e,t){window.console&&window.console.warn&&e&&xe.test(e.name)&&window.console.warn("SlimJQ.Deferred exception: "+e.message,e.stack,t)},se.readyException=function(e){window.setTimeout(function(){throw e})};var be=se.Deferred();se.fn.ready=function(e){return be.then(e).catch(function(e){se.readyException(e)}),this},se.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--se.readyWait:se.isReady)||(se.isReady=!0,!0!==e&&--se.readyWait>0||be.resolveWith(V,[se]))}}),se.ready.then=be.then,"complete"===V.readyState||"loading"!==V.readyState&&!V.documentElement.doScroll?window.setTimeout(se.ready):(V.addEventListener("DOMContentLoaded",p),window.addEventListener("load",p));var we=function e(n,i,r,a,o,s,l){var c=0,u=n.length,p=null==r;if("object"===t(r)){o=!0;for(c in r)e(n,i,c,r[c],!0,s,l)}else if(void 0!==a&&(o=!0,re(a)||(l=!0),p&&(l?(i.call(n,a),i=null):(p=i,i=function(e,t,n){return p.call(se(e),n)})),i))for(;c1,null,!0)},removeData:function(e){return this.each(function(){ke.remove(this,e)})}}),se.extend({queue:function(e,t,n){var i;if(e)return t=(t||"fx")+"queue",i=Ae.get(e,t),n&&(!i||Array.isArray(n)?i=Ae.access(e,t,se.makeArray(n)):i.push(n)),i||[]},dequeue:function(e,t){t=t||"fx";var n=se.queue(e,t),i=n.length,r=n.shift(),a=se._queueHooks(e,t),o=function(){se.dequeue(e,t)};"inprogress"===r&&(r=n.shift(),i--),r&&("fx"===t&&n.unshift("inprogress"),delete a.stop,r.call(e,o,a)),!i&&a&&a.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Ae.get(e,n)||Ae.access(e,n,{empty:se.Callbacks("once memory").add(function(){Ae.remove(e,[t+"queue",n])})})}}),se.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]+)/i,Le=/^$|^module$|\/(?:java|ecma)script/i,$e={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};$e.optgroup=$e.option,$e.tbody=$e.tfoot=$e.colgroup=$e.caption=$e.thead,$e.th=$e.td;var _e=/<|&#?\w+;/;!function(){var e=V.createDocumentFragment(),t=e.appendChild(V.createElement("div")),n=V.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),ie.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="",ie.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Fe=V.documentElement,qe=/^key/,ze=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,We=/^([^.]*)(?:\.(.+)|)/;se.event={global:{},add:function(e,t,n,i,r){var a,o,s,l,c,u,p,h,f,d,y,m=Ae.get(e);if(m)for(n.handler&&(a=n,n=a.handler,r=a.selector),r&&se.find.matchesSelector(Fe,r),n.guid||(n.guid=se.guid++),(l=m.events)||(l=m.events={}),(o=m.handle)||(o=m.handle=function(t){return void 0!==se&&se.event.triggered!==t.type?se.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(ve)||[""],c=t.length;c--;)s=We.exec(t[c])||[],f=y=s[1],d=(s[2]||"").split(".").sort(),f&&(p=se.event.special[f]||{},f=(r?p.delegateType:p.bindType)||f,p=se.event.special[f]||{},u=se.extend({type:f,origType:y,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&se.expr.match.needsContext.test(r),namespace:d.join(".")},a),(h=l[f])||(h=l[f]=[],h.delegateCount=0,p.setup&&!1!==p.setup.call(e,i,d,o)||e.addEventListener&&e.addEventListener(f,o)),p.add&&(p.add.call(e,u),u.handler.guid||(u.handler.guid=n.guid)),r?h.splice(h.delegateCount++,0,u):h.push(u),se.event.global[f]=!0)},remove:function(e,t,n,i,r){var a,o,s,l,c,u,p,h,f,d,y,m=Ae.hasData(e)&&Ae.get(e);if(m&&(l=m.events)){for(t=(t||"").match(ve)||[""],c=t.length;c--;)if(s=We.exec(t[c])||[],f=y=s[1],d=(s[2]||"").split(".").sort(),f){for(p=se.event.special[f]||{},f=(i?p.delegateType:p.bindType)||f,h=l[f]||[],s=s[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),o=a=h.length;a--;)u=h[a],!r&&y!==u.origType||n&&n.guid!==u.guid||s&&!s.test(u.namespace)||i&&i!==u.selector&&("**"!==i||!u.selector)||(h.splice(a,1),u.selector&&h.delegateCount--,p.remove&&p.remove.call(e,u));o&&!h.length&&(p.teardown&&!1!==p.teardown.call(e,d,m.handle)||se.removeEvent(e,f,m.handle),delete l[f])}else for(f in l)se.event.remove(e,f+t[c],n,i,!0);se.isEmptyObject(l)&&Ae.remove(e,"handle events")}},dispatch:function(e){var t,n,i,r,a,o,s=se.event.fix(e),l=new Array(arguments.length),c=(Ae.get(this,"events")||{})[s.type]||[],u=se.event.special[s.type]||{};for(l[0]=s,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||!0!==c.disabled)){for(a=[],o={},n=0;n-1:se.find(r,this,null,[c]).length),o[r]&&a.push(i);a.length&&s.push({elem:c,handlers:a})}return c=this,l\x20\t\r\n\f]*)[^>]*)\/>/gi,He=/\s*$/g;se.extend({htmlPrefilter:function(e){return e.replace(Ge,"<$1>")},clone:function(e,t,n){var i,r,a,o,s=e.cloneNode(!0),l=se.contains(e.ownerDocument,e);if(!(ie.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||se.isXMLDoc(e)))for(o=b(s),a=b(e),i=0,r=a.length;i0&&w(o,!l&&b(e,"script")),s},cleanData:function(e){for(var t,n,i,r=se.event.special,a=0;void 0!==(n=e[a]);a++)if(Ce(n)){if(t=n[Ae.expando]){if(t.events)for(i in t.events)r[i]?se.event.remove(n,i):se.removeEvent(n,i,t.handle);n[Ae.expando]=void 0}n[ke.expando]&&(n[ke.expando]=void 0)}}}),se.fn.extend({detach:function(e){return N(this,e,!0)},remove:function(e){return N(this,e)},text:function(e){return we(this,function(e){return void 0===e?se.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return j(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){O(this,e).appendChild(e)}})},prepend:function(){return j(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=O(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return j(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return j(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(se.cleanData(b(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return se.clone(this,e,t)})},html:function(e){return we(this,function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!He.test(e)&&!$e[(Ie.exec(e)||["",""])[1].toLowerCase()]){e=se.htmlPrefilter(e);try{for(;n1)}}),se.fn.delay=function(e,t){return e=se.fx?se.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var i=window.setTimeout(t,e);n.stop=function(){window.clearTimeout(i)}})},function(){var e=V.createElement("input"),t=V.createElement("select"),n=t.appendChild(V.createElement("option"));e.type="checkbox",ie.checkOn=""!==e.value,ie.optSelected=n.selected,e=V.createElement("input"),e.value="t",e.type="radio",ie.radioValue="t"===e.value}();var it,rt=se.expr.attrHandle;se.fn.extend({attr:function(e,t){return we(this,se.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){se.removeAttr(this,e)})}}),se.extend({attr:function(e,t,n){var i,r,a=e.nodeType;if(3!==a&&8!==a&&2!==a)return void 0===e.getAttribute?se.prop(e,t,n):(1===a&&se.isXMLDoc(e)||(r=se.attrHooks[t.toLowerCase()]||(se.expr.match.bool.test(t)?it:void 0)),void 0!==n?null===n?void se.removeAttr(e,t):r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:(e.setAttribute(t,n+""),n):r&&"get"in r&&null!==(i=r.get(e,t))?i:(i=se.find.attr(e,t),null==i?void 0:i))},attrHooks:{type:{set:function(e,t){if(!ie.radioValue&&"radio"===t&&r(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,i=0,r=t&&t.match(ve);if(r&&1===e.nodeType)for(;n=r[i++];)e.removeAttribute(n)}}),it={set:function(e,t,n){return!1===t?se.removeAttr(e,n):e.setAttribute(n,n),n}},se.each(se.expr.match.bool.source.match(/\w+/g),function(e,t){var n=rt[t]||se.find.attr;rt[t]=function(e,t,i){var r,a,o=t.toLowerCase();return i||(a=rt[o],rt[o]=r,r=null!=n(e,t,i)?o:null,rt[o]=a),r}});var at=/^(?:input|select|textarea|button)$/i,ot=/^(?:a|area)$/i;se.fn.extend({prop:function(e,t){return we(this,se.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[se.propFix[e]||e]})}}),se.extend({prop:function(e,t,n){var i,r,a=e.nodeType;if(3!==a&&8!==a&&2!==a)return 1===a&&se.isXMLDoc(e)||(t=se.propFix[t]||t,r=se.propHooks[t]),void 0!==n?r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:e[t]=n:r&&"get"in r&&null!==(i=r.get(e,t))?i:e[t]},propHooks:{tabIndex:{get:function(e){var t=se.find.attr(e,"tabindex");return t?parseInt(t,10):at.test(e.nodeName)||ot.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),ie.optSelected||(se.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),se.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){se.propFix[this.toLowerCase()]=this}),se.fn.extend({addClass:function(e){var t,n,i,r,a,o,s,l=0;if(re(e))return this.each(function(t){se(this).addClass(e.call(this,t,z(this)))});if(t=W(e),t.length)for(;n=this[l++];)if(r=z(n),i=1===n.nodeType&&" "+q(r)+" "){for(o=0;a=t[o++];)i.indexOf(" "+a+" ")<0&&(i+=a+" ");s=q(i),r!==s&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,i,r,a,o,s,l=0;if(re(e))return this.each(function(t){se(this).removeClass(e.call(this,t,z(this)))});if(!arguments.length)return this.attr("class","");if(t=W(e),t.length)for(;n=this[l++];)if(r=z(n),i=1===n.nodeType&&" "+q(r)+" "){for(o=0;a=t[o++];)for(;i.indexOf(" "+a+" ")>-1;)i=i.replace(" "+a+" "," ");s=q(i),r!==s&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=void 0===e?"undefined":i(e),r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):re(e)?this.each(function(n){se(this).toggleClass(e.call(this,n,z(this),t),t)}):this.each(function(){var t,i,a,o;if(r)for(i=0,a=se(this),o=W(e);t=o[i++];)a.hasClass(t)?a.removeClass(t):a.addClass(t);else void 0!==e&&"boolean"!==n||(t=z(this),t&&Ae.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":Ae.get(this,"__className__")||""))})},hasClass:function(e){var t,n,i=0;for(t=" "+e+" ";n=this[i++];)if(1===n.nodeType&&(" "+q(z(n))+" ").indexOf(t)>-1)return!0;return!1}});var st=/\r/g;se.fn.extend({val:function(e){var t,n,i,r=this[0];return arguments.length?(i=re(e),this.each(function(n){var r;1===this.nodeType&&(r=i?e.call(this,n,se(this).val()):e,null==r?r="":"number"==typeof r?r+="":Array.isArray(r)&&(r=se.map(r,function(e){return null==e?"":e+""})),(t=se.valHooks[this.type]||se.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,r,"value")||(this.value=r))})):r?(t=se.valHooks[r.type]||se.valHooks[r.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(r,"value"))?n:(n=r.value,"string"==typeof n?n.replace(st,""):null==n?"":n):void 0}}),se.extend({valHooks:{option:{get:function(e){var t=se.find.attr(e,"value");return null!=t?t:q(se.text(e))}},select:{get:function(e){var t,n,i,a=e.options,o=e.selectedIndex,s="select-one"===e.type,l=s?null:[],c=s?o+1:a.length;for(i=o<0?c:s?o:0;i-1)&&(n=!0);return n||(e.selectedIndex=-1),a}}}}),se.each(["radio","checkbox"],function(){se.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=se.inArray(se(e).val(),t)>-1}},ie.checkOn||(se.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),ie.focusin="onfocusin"in window;var lt=/^(?:focusinfocus|focusoutblur)$/,ct=function(e){e.stopPropagation()};se.extend(se.event,{trigger:function(e,t,n,r){var a,o,s,l,c,u,p,h,f=[n||V],d=ee.call(e,"type")?e.type:e,y=ee.call(e,"namespace")?e.namespace.split("."):[];if(o=h=s=n=n||V,3!==n.nodeType&&8!==n.nodeType&&!lt.test(d+se.event.triggered)&&(d.indexOf(".")>-1&&(y=d.split("."),d=y.shift(),y.sort()),c=d.indexOf(":")<0&&"on"+d,e=e[se.expando]?e:new se.Event(d,"object"===(void 0===e?"undefined":i(e))&&e),e.isTrigger=r?2:3,e.namespace=y.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+y.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:se.makeArray(t,[e]),p=se.event.special[d]||{},r||!p.trigger||!1!==p.trigger.apply(n,t))){if(!r&&!p.noBubble&&!ae(n)){for(l=p.delegateType||d,lt.test(l+d)||(o=o.parentNode);o;o=o.parentNode)f.push(o),s=o;s===(n.ownerDocument||V)&&f.push(s.defaultView||s.parentWindow||window)}for(a=0;(o=f[a++])&&!e.isPropagationStopped();)h=o,e.type=a>1?l:p.bindType||d,u=(Ae.get(o,"events")||{})[e.type]&&Ae.get(o,"handle"),u&&u.apply(o,t),(u=c&&o[c])&&u.apply&&Ce(o)&&(e.result=u.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||p._default&&!1!==p._default.apply(f.pop(),t)||!Ce(n)||c&&re(n[d])&&!ae(n)&&(s=n[c],s&&(n[c]=null),se.event.triggered=d,e.isPropagationStopped()&&h.addEventListener(d,ct),n[d](),e.isPropagationStopped()&&h.removeEventListener(d,ct),se.event.triggered=void 0,s&&(n[c]=s)),e.result}},simulate:function(e,t,n){var i=se.extend(new se.Event,n,{type:e,isSimulated:!0});se.event.trigger(i,null,t)}}),se.fn.extend({trigger:function(e,t){return this.each(function(){se.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return se.event.trigger(e,t,n,!0)}}),ie.focusin||se.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){se.event.simulate(t,e.target,se.event.fix(e))};se.event.special[t]={setup:function(){var i=this.ownerDocument||this,r=Ae.access(i,t);r||i.addEventListener(e,n,!0),Ae.access(i,t,(r||0)+1)},teardown:function(){var i=this.ownerDocument||this,r=Ae.access(i,t)-1;r?Ae.access(i,t,r):(i.removeEventListener(e,n,!0),Ae.remove(i,t))}}});var ut=/\[\]$/,pt=/\r?\n/g,ht=/^(?:submit|button|image|reset|file)$/i,ft=/^(?:input|select|textarea|keygen)/i;return se.param=function(e,t){var n,i=[],r=function(e,t){var n=re(t)?t():t;i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.slimJQ&&!se.isPlainObject(e))se.each(e,function(){r(this.name,this.value)});else for(n in e)G(n,e[n],t,r);return i.join("&")},se.fn.extend({serialize:function(){return se.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=se.prop(this,"elements");return e?se.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!se(this).is(":disabled")&&ft.test(this.nodeName)&&!ht.test(e)&&(this.checked||!Be.test(e))}).map(function(e,t){var n=se(this).val();return null==n?null:Array.isArray(n)?se.map(n,function(e){return{name:t.name,value:e.replace(pt,"\r\n")}}):{name:t.name,value:n.replace(pt,"\r\n")}}).get()}}),se.fn.extend({wrapAll:function(e){var t;return this[0]&&(re(e)&&(e=e.call(this[0])),t=se(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return re(e)?this.each(function(t){se(this).wrapInner(e.call(this,t))}):this.each(function(){var t=se(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=re(e);return this.each(function(n){se(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){se(this).replaceWith(this.childNodes)}),this}}),se.expr.pseudos.hidden=function(e){return!se.expr.pseudos.visible(e)},se.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ie.createHTMLDocument=function(){var e=V.implementation.createHTMLDocument("").body;return e.innerHTML="
",2===e.childNodes.length}(),se.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var i,r,a;return t||(ie.createHTMLDocument?(t=V.implementation.createHTMLDocument(""),i=t.createElement("base"),i.href=V.location.href,t.head.appendChild(i)):t=V),r=fe.exec(e),a=!n&&[],r?[t.createElement(r[1])]:(r=E([e],t,a),a&&a.length&&se(a).remove(),se.merge([],r.childNodes))},se.offset={setOffset:function(e,t,n){var i,r,a,o,s,l,c,u=se.css(e,"position"),p=se(e),h={};"static"===u&&(e.style.position="relative"),s=p.offset(),a=se.css(e,"top"),l=se.css(e,"left"),c=("absolute"===u||"fixed"===u)&&(a+l).indexOf("auto")>-1,c?(i=p.position(),o=i.top,r=i.left):(o=parseFloat(a)||0,r=parseFloat(l)||0),re(t)&&(t=t.call(e,n,se.extend({},s))),null!=t.top&&(h.top=t.top-s.top+o),null!=t.left&&(h.left=t.left-s.left+r),"using"in t?t.using.call(e,h):p.css(h)}},se.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){se.offset.setOffset(this,e,t)});var t,n,i=this[0];return i?i.getClientRects().length?(t=i.getBoundingClientRect(),n=i.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,i=this[0],r={top:0,left:0};if("fixed"===se.css(i,"position"))t=i.getBoundingClientRect();else{for(t=this.offset(),n=i.ownerDocument,e=i.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===se.css(e,"position");)e=e.parentNode;e&&e!==i&&1===e.nodeType&&(r=se(e).offset(),r.top+=se.css(e,"borderTopWidth",!0),r.left+=se.css(e,"borderLeftWidth",!0))}return{top:t.top-r.top-se.css(i,"marginTop",!0),left:t.left-r.left-se.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===se.css(e,"position");)e=e.offsetParent;return e||Fe})}}),se.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;se.fn[e]=function(i){return we(this,function(e,i,r){var a;if(ae(e)?a=e:9===e.nodeType&&(a=e.defaultView),void 0===r)return a?a[t]:e[i];a?a.scrollTo(n?a.pageXOffset:r,n?r:a.pageYOffset):e[i]=r},e,i,arguments.length)}}),se.each(["top","left"],function(e,t){se.cssHooks[t]=B(ie.pixelPosition,function(e,n){if(n)return n=D(e,t),Xe.test(n)?se(e).position()[t]+"px":n})}),se.each({Height:"height",Width:"width"},function(e,t){se.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,i){se.fn[i]=function(r,a){var o=arguments.length&&(n||"boolean"!=typeof r),s=n||(!0===r||!0===a?"margin":"border");return we(this,function(t,n,r){var a;return ae(t)?0===i.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(a=t.documentElement,Math.max(t.body["scroll"+e],a["scroll"+e],t.body["offset"+e],a["offset"+e],a["client"+e])):void 0===r?se.css(t,n,s):se.style(t,n,r,s)},t,o?r:void 0,o)}})}),se.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){se.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),se.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),se.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,i){return this.on(t,e,n,i)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),se.proxy=function(e,t){var n,i,r;if("string"==typeof t&&(n=e[t],t=e,e=n),re(e))return i=X.call(arguments,2),r=function(){return e.apply(t||this,i.concat(X.call(arguments)))},r.guid=e.guid=e.guid||se.guid++,r},se.holdReady=function(e){e?se.readyWait++:se.ready(!0)},se.isArray=Array.isArray,se.parseJSON=JSON.parse,se.nodeName=r,se.isFunction=re,se.isWindow=ae,se.camelCase=f,se.type=t,se.now=Date.now,se.isNumeric=function(e){var t=se.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},se}()},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var o=n(6),s=function(e){function t(){i(this,t);var e=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return e.children=[],e.parent="",e.resizeDir=["tl","tr","br","bl"],e.attribute={container:!1,visible:!0,rotatable:!1,linkable:!0,editable:!0,markerOffset:5},e.lineStyle={lineWidth:2,lineColor:"50,50,50",lineStyle:"solid"},e.fillStyle={type:"solid",color:"255,255,255"},e.lightStyle={},e.actions=null,e}return a(t,e),t}(o.a);t.a=s},function(e,t,n){"use strict";n.d(t,"a",function(){return a}),n.d(t,"b",function(){return o}),n.d(t,"c",function(){return s}),n.d(t,"e",function(){return l}),n.d(t,"f",function(){return c}),n.d(t,"d",function(){return u}),n.d(t,"i",function(){return h}),n.d(t,"h",function(){return f}),n.d(t,"g",function(){return d});var i={String:!0,Boolean:!0,Integer:!0,Real:!0,Element:!0},r={String:function(e){return e},Boolean:function(e){return"true"===e},Integer:function(e){return parseInt(e,10)},Real:function(e){return parseFloat(e,10)}},a={xsi:"http://www.w3.org/2001/XMLSchema-instance"},o="xsi:type",s=function(e,t){var n=r[e];return n?n(t):t},l=function(e){return!!i[e]},c=function(e){return!!r[e]},u=function(e){return e.xml&&"lowerCase"===e.xml.tagAlias},p=function(e){return e.xml&&e.xml.serialize},h=function(e){return p(e)===o},f=function(e){return"property"===p(e)},d=function(e,t){var n,i,r=e.split(/:/);if(1===r.length)n=e,i=t;else{if(2!==r.length)throw new Error("expected or , got "+e);n=r[1],i=r[0]}return e=(i?i+":":"")+n,{name:e,prefix:i,localName:n}}},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;no&&(s={x:0,y:o/2},l={x:a,y:o/2},c=(h.angle+Math.PI/2)%(2*Math.PI)),0!==c){var u={x:a/2,y:o/2};s=i.a.getRotated(u,s,c),l=i.a.getRotated(u,l,c),s.x<0&&(s.x=0),s.x>a&&(s.x=a),s.y<0&&(s.y=0),s.y>o&&(s.y=o),l.x<0&&(l.x=0),l.x>a&&(l.x=a),l.y<0&&(l.y=0),l.y>o&&(l.y=o)}var p=e.createLinearGradient(s.x,s.y,l.x,l.y);return p.addColorStop(0,"rgb("+n.beginColor+")"),p.addColorStop(1,"rgb("+n.endColor+")"),p},createRadialGradient:function(e,t,n){var i=t.bpmnPlane.bounds,r=i.width,a=i.height,o=r");return new n(t)}},{key:"getType",value:function(e){var t=this.typeCache,n="string"==typeof e&&e.constructor===String?e:e.ns.name,i=t[n];return i||(e=this.registry.getEffectiveDescriptor(n),i=t[n]=this.factory.createType(e)),i}},{key:"createAny",value:function(e,t,n){var i=Object(l.g)(e),r={$type:e,$instanceOf:function(e){return e===this.$type}},o={name:e,isGeneric:!0,ns:{prefix:i.prefix,localName:i.localName,uri:t}};this.properties.defineDescriptor(r,o),this.properties.defineModel(r,this),this.properties.define(r,"$parent",{enumerable:!1,writable:!0});for(var s in n){var u=n[s];"object"===(void 0===u?"undefined":c(u))&&u.constructor===Object&&void 0!==u.value?r[u.name]=a.value:r[s]=u}return r}},{key:"getPackage",value:function(e){return this.registry.getPackage(e)}},{key:"getPackages",value:function(){return this.registry.getPackages()}},{key:"getElementDescriptor",value:function(e){return e.$descriptor}},{key:"hasType",value:function(e,t){return void 0===t&&(t=e,e=this),t in e.$model.getElementDescriptor(e).allTypesByName}},{key:"getPropertyDescriptor",value:function(e,t){return this.getElementDescriptor(e).propertiesByName[t]}},{key:"getTypeDescriptor",value:function(e){return this.registry.typeMap[e]}}]),e}();t.a=p},function(e,t,n){"use strict";function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t',extensions:{},filter:[],bpmns:["StartEvent","UserTask","ServiceTask","ReceiveTask","CallActivity","ExclusiveGateway","InclusiveGateway","ParallelGateway","ComplexGateway","EndEvent","TerminateEndEvent"]},C=!1,A=function(e){var t=Object(l.a)(e.container);if(!e.container||t.length<=0)throw new Error("Can not find container: "+e.container);var n=Object(l.a)('
');return n.css({width:e.width,height:e.height,position:e.position}),t.append(n),n},k=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r(this,e),this.version="0.1.4",this.options=Object.assign({},S,t),this.$container=A(this.options),this.features={HotKey:new b.a,I18n:new w.a(this.options.local),BpmnXML:new p.a(this.options.extensions),Background:new h.a(this.$container,this.options,this.options.config.background)},this.options.readonly||(this.features.Anchor=new d.a(this.$container,this.options.config.anchor),this.features.Snapline=new g.a(this.$container,this.options.config.snapline),this.features.Direction=new f.a(this.$container,this.options.config.direction),this.features.Select=new y.a(this.$container,this.options.config.select),this.features.Tooltip=new v.a(this.$container,this.options.config.tooltip),this.features.Drag=new m.a(this.options,this.$container),this.features.GroupPanel=new x.a(this.$container,this.options)),this.draw=Object(s.a)(this.options,this.$container),Object(u.g)("bpmn",function(){C=!0}),this.init()}return E(e,[{key:"init",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){};this.importBpmn(this.options.definition,e)}},{key:"createShape",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},n=Object(l.a)(e.target);if(!n.hasClass("readonly")&&!this.options.readonly){var i=n.attr("shapeName");if(!i||""===i)throw new Error("shapeName error");this.draw.createShape(i,t)}}},{key:"getAllElement",value:function(){var e=[],t=o.a.trigger("element.get");for(var n in t){var i=Object(u.j)(t[n]);e.push(i)}return e}},{key:"getRootElement",value:function(){var e=o.a.trigger("process.get");return e?Object(u.j)(e):null}},{key:"getFrontElementsByBpmn",value:function(e,t){return this.getFrontElements(o.a.trigger("element.get",e.id)).filter(function(e){return e.bpmnName===t})}},{key:"getFrontElement",value:function(e){if(!e)throw new Error("select element error");var t=null;return this.getFrontElements(o.a.trigger("element.get",e.id)).forEach(function(e){t||"SequenceFlow"===e.bpmnName||(t=e)}),t}},{key:"getFrontElements",value:function(e){if(!e)throw new Error("select element error");for(var t=function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=[];return i?n:(t.forEach(function(e){if("SequenceFlow"===e.shape.bpmnName){if(e.data.sourceRef&&""!==e.sourceRef){var t=o.a.trigger("element.get",e.data.sourceRef)||[],i=!1;n.forEach(function(e){e.data.id===t.data.id&&(i=!0)}),i||(r.push(t),n.push(t))}}else{(o.a.trigger("connections.get",e.data.id)||[]).forEach(function(t){var i=o.a.trigger("element.get",t);if(i.data.targetRef===e.data.id){var a=!1;n.forEach(function(e){e.data.id===i.data.id&&(a=!0)}),a||(r.push(i),n.push(i))}})}}),r.length<=0?e(r,n,!0):e(r,n))}([e]),n=0;n2&&void 0!==arguments[2]?arguments[2]:function(){};t.extensions.forEach(function(e){e.$type=e.name,delete e.name});var r=o.a.trigger("element.get",e);if(r){var a=Object.assign({},t.original);for(var s in a)r.data[s]=a[s];var l=r.data.extensionElements,c=[];l.values||(l.values=[]),l.values.forEach(function(e){var n=!1;t.extensions.forEach(function(t){t.$type===e.$type&&(n=!0)}),n||c.push(e)}),l.values=[].concat(c,i(t.extensions)),"SequenceFlow"===r.shape.bpmnName||o.a.trigger("shape.render",{type:r.shape.bpmnName,element:r}),n()}}},{key:"updateProcessProperties",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){};e.extensions.forEach(function(e){e.$type=e.name,delete e.name});var n=o.a.trigger("process.get");if(n){var r=Object.assign({},e.original);for(var a in r)n[a]=r[a];var s=[];n.extensionElements.values||(n.extensionElements.values=[]),n.extensionElements.values.forEach(function(t){var n=!1;e.extensions.forEach(function(e){e.$type===t.$type&&(n=!0)}),n||s.push(t)}),n.extensionElements.values=[].concat(s,i(e.extensions)),t()}}},{key:"updataLineStyle",value:function(e,t){this.draw.updataLineStyle(e,t)}},{key:"destroy",value:function(){this.$container.remove(),this.draw.cancel(),o.a.trigger("key.clear"),o.a.destroy()}},{key:"importBpmn",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},n=this,i=setInterval(function(){C&&(clearInterval(i),o.a.trigger("model.import",e,function(e,i){e?console.log(e):(n.draw.render(i),t())}))},1e3)}},{key:"exportBpmn",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},t=this.draw.designer.createDefinition();o.a.trigger("model.export",t,function(t,n){t&&console.log(t,n),e(n)})}}]),e}();t.default=k,window.BPDCore=k},function(e,t){},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var o=n(0),s=n(12),l=n(13),c=n(14),u=n(26),p=n(2),h=n(1),f=(n(3),function(){function e(e,t){for(var n=0;n0&&a.forEach(function(t,n){if(t.id===e.id+"_di"){var i=Object(h.c)(e);e.extensionElements&&(i.extensionElements.values=Object(h.k)(e.extensionElements.values||[]));"SequenceFlow"!==Object(h.e)(e.$type)?(i.incoming=e.incoming?e.incoming.id:"",i.outgoing=e.outgoing?e.outgoing.id:""):(i.sourceRef=e.sourceRef?e.sourceRef.id:"",i.targetRef=e.targetRef?e.targetRef.id:""),r[e.id]={data:i,plane:Object(h.c)(t)}}})})}):this.designer.setProcessModel(),this.renderPage();var a=0;for(var o in r){var s=r[o],l=Object(h.e)(s.data.$type);"SequenceFlow"!==l&&(this.renderShape({type:l,element:s}),this.designer.addData(s,!1)),a++}for(var c in r){var u=r[c];"SequenceFlow"===Object(h.e)(u.data.$type)&&(this.renderConnection({element:u}),this.designer.addData(u,!1))}0===a&&this.designer.build()}},{key:"renderPage",value:function(){var e=this.options.pageStyle,t=e.width,n=e.height,i=e.backgroundColor,r=p.a.getDarkerColor(i);p.a.getDarkestColor(i);this.$container.find(".bpd-designer").css({"background-color":"rgb("+r+")"}),this.$container.find(".bpd-layout").css({width:t,height:n})}},{key:"renderShape",value:function(e){var t=e.type,n=e.element;this.drawShape.render(t,n)}},{key:"renderShapePath",value:function(e){var t=e.shape2D,n=e.element,i=e.render;this.drawShape.renderShapePath(t,n,i)}},{key:"renderConnection",value:function(e){var t=e.element,n=e.rendered;this.drawConnection.render(t,n)}},{key:"moveConnection",value:function(e){var t=e.element,n=e.type,i=e.x,r=e.y;this.drawConnection.move(t,n,i,r)}},{key:"updataLineStyle",value:function(e,t){if(e){var n=o.a.trigger("element.get",e);"SequenceFlow"===n.shape.bpmnName||(n.shape.lightStyle={lineStyle:t},console.log(n),this.drawShape.renderShape(n))}else{var i=o.a.trigger("element.get");for(var r in i){var a=i[r];"SequenceFlow"===a.shape.bpmnName||(a.shape.lightStyle={},this.drawShape.renderShape(a))}}}},{key:"removeShape",value:function(e,t){var n=this;e||(e=o.a.trigger("shape.select.get")),void 0===t&&(t=!0),t&&(e=this.beforeRemove(e));var i=[],r=[],a=[];return 0!==e.length&&(e.forEach(function(e){"SequenceFlow"===e.shape.bpmnName?a.push(e.data.id):r.push(e.data.id)}),e.forEach(function(e){i.push(Object(h.c)(e));var t=e.data,s=e.shape;if(n.$container.find('.shape-box[data-id="'+t.id+'"]').remove(),delete n.designer.elements[t.id],"SequenceFlow"===s.bpmnName)t.sourceRef,t.targetRef;else{s.parent&&r.indexOf(s.parent);var l=n.designer.connections[t.id];if(l&&l.length>0)for(var c=0;c1&&void 0!==arguments[1]?arguments[1]:function(){},n=null;o.a.trigger("data.create",e,function(e){n=e,t(n)})}},{key:"beforeRemove",value:function(e){for(var t={},n=0;n1&&void 0!==arguments[1]?arguments[1]:function(){},i=null,l=null,c=this.$container.find(".bpd-layout"),u=c.find(".bpd-designer");c.on("mousemove.create",function(n){var o=a.a.getRelativePos(n.pageX,n.pageY,u),c=0,p=null;null==i?(i=r.a.trigger("element.create",{name:null,type:Object(s.d)(e,"uppercase"),prefix:"obj",pos:o}),p=i.plane.bounds,p.x=Object(s.i)(o.x)-p.width/2,p.y=Object(s.i)(o.y)-p.height/2,c=Object.keys(t.elements),r.a.trigger("shape.render",{type:e,element:i}),l=t.$container.find('.shape-box[data-id="'+i.data.id+'"]'),l.attr("class","shape-box-creating"),l.css({left:o.x-l.width()/2+"px",top:o.y-l.height()/2+"px","z-index":c.length})):(p=i.plane.bounds,p.x=Object(s.i)(o.x)-p.width/2,p.y=Object(s.i)(o.y)-p.height/2),l.css({left:Object(s.l)(p.x-10)+"px",top:Object(s.l)(p.y-10)+"px","z-index":c.length})});var p=!1;c.on("mouseup.create",function(){p=!0}),Object(o.a)(document).on("mouseup.create",function(){Object(o.a)(document).off("mouseup.create"),u.off("mousemove.creating"),c.off("mouseup.create").off("mousemove.create"),null!=i&&(!1===p?l.remove():(l.attr("class","shape-box"),t.addData(i),n(i)))})}},{key:"addData",value:function(e,t){this.addDatas([e],t)}},{key:"addDatas",value:function(e,t){void 0===t&&(t=!0);for(var n=[],i=0;i1&&void 0!==arguments[1]?arguments[1]:function(){};if(e.length>0){var n=[];e=e.concat(n),t(e)}}},{key:"getElement",value:function(e){return e?this.elements[e]:this.elements}},{key:"getProcess",value:function(){var e=null;return this.definitions&&(e=this.definitions.rootElements[0],delete e.flowElements),e}},{key:"setShapeGroups",value:function(e,t){this.groups[e]||(this.groups[e]=[]),this.groups[e].indexOf(t)<0&&this.groups[e].push(t)}},{key:"getShapeConnections",value:function(e){return this.connections[e]}},{key:"setShapeConnections",value:function(e,t){this.connections[e]||(this.connections[e]=[]),this.connections[e].indexOf(t)<0&&this.connections[e].push(t)}},{key:"update",value:function(e){this.updateMulti([e])}},{key:"updateMulti",value:function(e){for(var t=[],n=[],i=0;i0&&(o=this.orders[this.orders.length-1].zindex),this.maxZIndex=o}},{key:"createAttrs",value:function(e,t,n){var i=this,r={data:{},plane:{}},a=e.id||"obj_"+this.options.ids.next();if(e)for(var o in e)switch(o){case"$type":case"flowElements":case"sourceRef":case"targetRef":case"incoming":case"outgoing":break;case"extensionElements":r.data.extensionElements=this.createExtensionModel(e[o].values||[]);break;default:r.data[o]=e[o]}if(t)for(var s in t)switch(s){case"$type":break;case"id":r.plane[s]=a+"_di";break;case"waypoint":"SequenceFlow"===n.bpmnName&&function(){var e=t[s][0],a=t[s][t[s].length-1],o=[];o.push(i.createModel({descriptor:"dc:Point",attrs:{x:e.x,y:e.y}})),n.points.forEach(function(e){o.push(i.createModel({descriptor:"dc:Point",attrs:{x:e.x,y:e.y}}))}),o.push(i.createModel({descriptor:"dc:Point",attrs:{x:a.x,y:a.y}})),r.plane[s]=o}();break;case"bounds":if("SequenceFlow"!==n.bpmnName){var l=t[s],c=l.height,u=l.width,p=l.x,h=l.y;r.plane[s]=this.createModel({descriptor:"dc:Bounds",attrs:{height:c,width:u,x:p,y:h}})}break;default:r.plane[s]=t[s]}return r}},{key:"createElement",value:function(e){var t=e.type,n=e.prefix,i=e.name,a=e.pos,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},l=n+"_"+this.options.ids.next(),c=Object(s.c)(this.createModel({descriptor:"bpmn:"+t,attrs:{name:i,id:l,extensionElements:this.createExtensionModel()}})),u={};"SequenceFlow"===t?u=Object(s.c)(this.createModel({descriptor:"bpmndi:BPMNEdge",attrs:{id:l+"_di",waypoint:[]}})):(u=Object(s.c)(this.createModel({descriptor:"bpmndi:BPMNShape",attrs:{bounds:this.createModel({descriptor:"dc:Bounds",attrs:{x:0,y:0}}),bpmnElement:l,id:l+"_di"}})),a&&(u.bounds.x=Object(s.i)(a.x)-u.bounds.width,u.bounds.y=Object(s.i)(a.y)-u.bounds.height));var p={data:c,plane:u};return p=r.a.trigger("shape.create",{type:t,element:p}),this.maxZIndex=p.shape.shapeStyle.zindex=this.maxZIndex+1,o(p),p}},{key:"createDefinition",value:function(){var e=this;return this.definitions.rootElements.forEach(function(t,n){var i={},r=[],a=[];for(var o in e.elements){var s=e.elements[o],l=s.data,c=s.plane,u=s.shape;if("SequenceFlow"!==u.bpmnName){var p=e.createAttrs(l,c,u);p.data.incoming=[],p.data.outgoing=[];var h=e.createModel({descriptor:l.$type,attrs:p.data});p.plane.bpmnElement=h;var f=e.createModel({descriptor:c.$type,attrs:p.plane});i[h.id]=h,r.push(h),a.push(f)}}for(var d in e.elements){var y=e.elements[d],m=y.data,g=y.plane,v=y.shape;if("SequenceFlow"===v.bpmnName){var x=e.createAttrs(m,g,v);x.data.sourceRef=i[m.sourceRef],x.data.targetRef=i[m.targetRef];var b=e.createModel({descriptor:m.$type,attrs:x.data});m.sourceRef&&i[m.sourceRef].outgoing.push(b),m.targetRef&&i[m.targetRef].incoming.push(b),x.plane.bpmnElement=b;var w=e.createModel({descriptor:g.$type,attrs:x.plane});r.push(b),a.push(w)}}e.definitions.diagrams[n].plane.planeElement=a,e.definitions.rootElements[n]=e.createModel({descriptor:t.$type,attrs:{id:t.id||e.options.ids.next(),extensionElements:e.createExtensionModel(t.extensionElements.values||[])}}),e.definitions.rootElements[n].flowElements=r}),this.definitions}},{key:"setProcessModel",value:function(){var e="process_"+this.options.ids.next(),t=[this.createModel({descriptor:"bpmn:Process",attrs:{id:e,flowElements:[],extensionElements:this.createExtensionModel([])}})],n=[this.createModel({descriptor:"bpmndi:BPMNDiagram",attrs:{id:e+"_di",plane:this.createModel({descriptor:"bpmndi:BPMNPlane",attrs:{id:e+"_pl",planeElement:[]}})}})];this.definitions.rootElements=t,this.definitions.diagrams=n}},{key:"createModel",value:function(e){var t=null;return r.a.trigger("model.create",e,function(e){t=e}),t}},{key:"createExtensionModel",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=[];return t.forEach(function(t){var i=t.$type||t.name,r=Object(s.c)(t);delete r.$type,delete r.name;var a=e.createModel({descriptor:i,attrs:r});a&&n.push(a)}),this.createModel({descriptor:"bpmn:ExtensionElements",attrs:{values:n}})}}]),e}(),u=function(e,t,n){return new c(e,t,n)};t.a=u},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(0),a=n(2),o=function(){function e(e,t){for(var n=0;n1&&c<=l.shape.points.length||null==l.data.sourceRef&&null==l.data.targetRef&&(n.css("cursor","move"),r.a.trigger("shape.drag",s))}else if("sequence_point"===o.type)n.css("cursor","move"),r.a.trigger("shape.hover",s),r.a.trigger("connection.drag",s);else if("sequence_text"===o.type)n.css("cursor","text"),r.a.trigger("shape.hover",s);else if("shape"===o.type?o.element.shape.locked?(n.css("cursor","default"),r.a.trigger("shape.hover",s)):(n.css("cursor","move"),r.a.trigger("shape.hover",s),r.a.trigger("shape.edit",s),r.a.trigger("shape.drag",s)):(n.css("cursor","crosshair"),r.a.trigger("shape.hover",s),r.a.trigger("anchor.hover",s)),o.element.shape.parent){var u=r.a.on("element.get",o.element.shape.parent);r.a.trigger("anchor.show",u)}else r.a.trigger("anchor.show",o.element);else n.css("cursor","default"),r.a.trigger("canvas.hover",s)}}},{key:"changeState",value:function(e){this.state=e}},{key:"resetState",value:function(){this.state=null,this.$container.find(".bpd-designer").css("cursor","default")}}]),e}();t.a=s},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(3),a=n(15),o=n(1),s=n(7),l=n(2),c=function(){function e(e,t){for(var n=0;n").appendTo(this.$container.find(".bpd-designer")));var s=i.bounds,c=s.x,u=s.y,p=s.width,h=s.height,f=t.shapeStyle,d=f.angle,y=(f.zindex,l.a.getShapeBox(e)),m=y.width+20,g=y.height+20,v=a.find(".shape-canvas");v.attr({width:m,height:g}),a.css({left:Object(o.l)(y.x-10)+"px",top:Object(o.l)(y.y-10)+"px",width:m,height:g});var x=v[0].getContext("2d");x.clearRect(0,0,p+20,h+20),x.scale(this.options.scale,this.options.scale),x.translate(10,10),x.translate(c-y.x,u-y.y),x.translate(p/2,h/2),x.rotate(d),x.translate(-p/2,-h/2),x.globalAlpha=t.shapeStyle.alpha,x.lineJoin="round",this.renderShapePath(x,e),this.renderText(t,y)}},{key:"renderShapePath",value:function(e,t,n){var i=t.plane.bounds,r=i.width,a=i.height,s=void 0;s=n&&o.a.drawIcon?o.a.drawIcon(r,a):t.shape.actions,this.renderPath(e,t,s,n)}},{key:"renderPath",value:function(e,t,n,i){for(var r=t.data,a=(t.plane,t.shape),s=0;s").appendTo(u),p.on("focus",function(){Object(r.a)(this).blur()})),p.attr("readonly","readonly"),null==e.data.name||""===e.data.name.trim())return void p.css({height:"0px",width:"0px"}).hide();var h=e.fontStyle;p.css({"line-height":Math.round(1.25*h.size)+"px","font-size":h.size+"px","font-family":h.fontFamily,"font-weight":h.bold?"bold":"normal","font-style":h.italic?"italic":"normal","text-align":h.textAlign,color:"rgb("+h.color+")","text-decoration":h.underline?"underline":"none",opacity:e.shapeStyle.alpha}).show();var f=e.getTextBlock();if("horizontal"===e.fontStyle.orientation){var d={x:f.x+f.width/2,y:f.y+f.height/2};f.x=d.x-f.height/2,f.y=d.y-f.width/2,f.width=f.height,f.height=f.width}p.css({width:f.width}),p.height(0),p.val(e.data.name),p.scrollTop(99999);var y=p.scrollTop(),m=0;m="middle"===h.vAlign?f.y+f.height/2-y/2:"bottom"===e.fontStyle.vAlign?f.y+f.height-y:f.y;var g={x:f.x+f.width/2,y:m+y/2},v=e.shapeStyle.angle;0!==v&&(g=l.a.getRotated({x:s/2,y:c/2},g,v)),"horizontal"===h.orientation&&(v=(1.5*Math.PI+v)%(2*Math.PI));var x=Math.round(v/(2*Math.PI)*360),b="rotate("+x+"deg) scale("+this.options.scale+")",w=f.width,E=y;p.css({width:w,height:E,left:Object(o.l)(g.x+(i-t.x)+10)-w/2,top:Object(o.l)(g.y+(a-t.y)+10)-y/2,"-webkit-transform":b,"-ms-transform":b,"-o-transform":b,"-moz-transform":b,transform:b})}},{key:"fillShape",value:function(e,t,n){if(e.save(),"solid"===n.type)e.fillStyle="rgb("+n.color+")",e.fill();else if("gradient"===n.type){var i=void 0;i="linear"===n.gradientType?s.a.createLinearGradient(e,t,n):s.a.createRadialGradient(e,t,n),e.fillStyle=i,e.fill()}e.restore()}}]),e}();t.a=u},function(e,t,n){"use strict";n.d(t,"b",function(){return y});var i=n(16),r=n(17),a=n(18),o=n(19),s=n(20),l=n(21),c=n(22),u=n(23),p=n(24),h=n(25),f=n(0),d={StartEvent:["StartEvent"],Task:["UserTask","ServiceTask"],CallActivity:["CallActivity"],Gateway:["ExclusiveGateway","InclusiveGateway","ParallelGateway","ComplexGateway"],EndEvent:["EndEvent","TerminateEndEvent"]},y=function(){f.a.on("group.get",function(e){return e?d[e]:d})};t.a={EndEvent:i.a,StartEvent:r.a,UserTask:a.a,ServiceTask:o.a,TerminateEndEvent:s.a,ExclusiveGateway:l.a,InclusiveGateway:c.a,ParallelGateway:u.a,ComplexGateway:p.a,CallActivity:h.a}},function(e,t,n){"use strict";function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};r(this,t);var i=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.style=n,e.plane&&e.plane.bounds&&(e.plane.bounds.width=e.plane.bounds.width||40,e.plane.bounds.height=e.plane.bounds.height||40),e.data.name||(e.data.name=l.a.trigger("i18n","bpmn.EndEvent")),i.data=e.data,i.plane=e.plane,i.bpmnName="EndEvent",i.groupName="EndEvent",i.actions=i.getPath(),i}return o(t,e),c(t,[{key:"getPath",value:function(){var e=this.plane.bounds,t=e.height,n=e.width,r=[];return[{lineStyle:{lineStyle:"solid",lineWidth:this.lineStyle.lineWidth+2},actions:[{action:"move",x:0,y:t/2},{action:"curve",x1:0,y1:-t/6,x2:n,y2:-t/6,x:n,y:t/2},{action:"curve",x1:n,y1:t+t/6,x2:0,y2:t+t/6,x:0,y:t/2},{action:"close"}]}].concat(i(this.style.content||r),[{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:0,y:t/2},{action:"curve",x1:0,y1:-t/6,x2:n,y2:-t/6,x:n,y:t/2},{action:"curve",x1:n,y1:t+t/6,x2:0,y2:t+t/6,x:0,y:t/2},{action:"close"}]}])}},{key:"getTextBlock",value:function(){var e=this.plane.bounds,t=e.height;return{x:e.width/2-60,y:t,width:120,height:30}}}]),t}(s.a);t.a=u},function(e,t,n){"use strict";function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};r(this,t);var i=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.style=n,e.plane&&e.plane.bounds&&(e.plane.bounds.width=e.plane.bounds.width||40,e.plane.bounds.height=e.plane.bounds.height||40),e.data.name||(e.data.name=l.a.trigger("i18n","bpmn.StartEvent")),i.data=e.data,i.plane=e.plane,i.bpmnName="StartEvent",i.groupName="StartEvent",i.actions=i.getPath(),i}return o(t,e),c(t,[{key:"getPath",value:function(){var e=this.plane.bounds,t=e.height,n=e.width,r=[];return[{lineStyle:{lineStyle:"solid"},actions:[{action:"move",x:0,y:t/2},{action:"curve",x1:0,y1:-t/6,x2:n,y2:-t/6,x:n,y:t/2},{action:"curve",x1:n,y1:t+t/6,x2:0,y2:t+t/6,x:0,y:t/2},{action:"close"}]}].concat(i(this.style.content||r),[{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:0,y:t/2},{action:"curve",x1:0,y1:-t/6,x2:n,y2:-t/6,x:n,y:t/2},{action:"curve",x1:n,y1:t+t/6,x2:0,y2:t+t/6,x:0,y:t/2},{action:"close"}]}])}},{key:"getTextBlock",value:function(){var e=this.plane.bounds,t=e.height;return{x:e.width/2-60,y:t,width:120,height:30}}}]),t}(s.a);t.a=u},function(e,t,n){"use strict";function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};r(this,t);var i=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.style=n,e.plane&&e.plane.bounds&&(e.plane.bounds.width=e.plane.bounds.width||110,e.plane.bounds.height=e.plane.bounds.height||55),e.data.name||(e.data.name=l.a.trigger("i18n","bpmn.UserTask")),i.data=e.data,i.plane=e.plane,i.bpmnName="UserTask",i.groupName="Task",i.actions=i.getPath(),i}return o(t,e),c(t,[{key:"getPath",value:function(){var e=this.plane.bounds,t=e.height,n=e.width,r=[{action:"move",x:0,y:4},{action:"quadraticCurve",x1:0,y1:0,x:4,y:0},{action:"line",x:n-4,y:0},{action:"quadraticCurve",x1:n,y1:0,x:n,y:4},{action:"line",x:n,y:t-4},{action:"quadraticCurve",x1:n,y1:t,x:n-4,y:t},{action:"line",x:4,y:t},{action:"quadraticCurve",x1:0,y1:t,x:0,y:t-4},{action:"close"}],a=[{actions:[{action:"font",fontStyle:"normal",fontVariant:"normal",fontWeight:"normal",fontSize:"18px",fontFamily:"bpmn",content:"",x:4,y:16}]}];return[{lineStyle:{lineStyle:"solid"},actions:r}].concat(i(this.style.content||a),[{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:r}])}},{key:"getTextBlock",value:function(){var e=this.plane.bounds,t=e.height;return{x:10,y:0,width:e.width-20,height:t}}}]),t}(s.a);t.a=u},function(e,t,n){"use strict";function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};r(this,t);var i=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.style=n,e.plane&&e.plane.bounds&&(e.plane.bounds.width=e.plane.bounds.width||110,e.plane.bounds.height=e.plane.bounds.height||55),e.data.name||(e.data.name=l.a.trigger("i18n","bpmn.ServiceTask")),i.data=e.data,i.plane=e.plane,i.bpmnName="ServiceTask",i.groupName="Task",i.actions=i.getPath(),i}return o(t,e),c(t,[{key:"getPath",value:function(){var e=this.plane.bounds,t=e.height,n=e.width,r=[{actions:[{action:"font",fontStyle:"normal",fontVariant:"normal",fontWeight:"normal",fontSize:"18px",fontFamily:"bpmn",content:"",x:4,y:16}]}];return[{lineStyle:{lineStyle:"solid"},actions:[{action:"move",x:0,y:4},{action:"quadraticCurve",x1:0,y1:0,x:4,y:0},{action:"line",x:n-4,y:0},{action:"quadraticCurve",x1:n,y1:0,x:n,y:4},{action:"line",x:n,y:t-4},{action:"quadraticCurve",x1:n,y1:t,x:n-4,y:t},{action:"line",x:4,y:t},{action:"quadraticCurve",x1:0,y1:t,x:0,y:t-4},{action:"close"}]}].concat(i(this.style.content||r),[{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:0,y:4},{action:"quadraticCurve",x1:0,y1:0,x:4,y:0},{action:"line",x:n-4,y:0},{action:"quadraticCurve",x1:n,y1:0,x:n,y:4},{action:"line",x:n,y:t-4},{action:"quadraticCurve",x1:n,y1:t,x:n-4,y:t},{action:"line",x:4,y:t},{action:"quadraticCurve",x1:0,y1:t,x:0,y:t-4},{action:"close"}]}])}},{key:"getTextBlock",value:function(){var e=this.plane.bounds,t=e.height;return{x:10,y:0,width:e.width-20,height:t}}}]),t}(s.a);t.a=u},function(e,t,n){"use strict";function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};r(this,t);var i=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.style=n,e.plane&&e.plane.bounds&&(e.plane.bounds.width=e.plane.bounds.width||40,e.plane.bounds.height=e.plane.bounds.height||40),e.data.name||(e.data.name=l.a.trigger("i18n","bpmn.TerminateEndEvent")),i.data=e.data,i.plane=e.plane,i.bpmnName="TerminateEndEvent",i.groupName="EndEvent",i.actions=i.getPath(),i}return o(t,e),c(t,[{key:"getPath",value:function(){var e=this.plane.bounds,t=e.height,n=e.width,r=this.lineStyle.lineWidth,a=[{fillStyle:{type:"solid",color:"50,50,50"},lineStyle:{lineWidth:0,lineStyle:"solid"},actions:[{action:"move",x:.5*n-.25*n,y:.5*t},{action:"curve",x1:.5*n-.25*n,y1:.5*t-2*t/3*.5,x2:.5*n+.25*n,y2:.5*t-2*t/3*.5,x:.5*n+.25*n,y:.5*t},{action:"curve",x1:.5*n+.25*n,y1:.5*t+2*t/3*.5,x2:.5*n-.25*n,y2:.5*t+2*t/3*.5,x:.5*n-.25*n,y:.5*t},{action:"close"}]}];return[{lineStyle:{lineWidth:r+2,lineStyle:"solid"},actions:[{action:"move",x:0,y:t/2},{action:"curve",x1:0,y1:-t/6,x2:n,y2:-t/6,x:n,y:t/2},{action:"curve",x1:n,y1:t+t/6,x2:0,y2:t+t/6,x:0,y:t/2},{action:"close"}]}].concat(i(this.style.content||a),[{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:0,y:t/2},{action:"curve",x1:0,y1:-t/6,x2:n,y2:-t/6,x:n,y:t/2},{action:"curve",x1:n,y1:t+t/6,x2:0,y2:t+t/6,x:0,y:t/2},{action:"close"}]}])}},{key:"getTextBlock",value:function(){var e=this.plane.bounds,t=e.height;return{x:e.width/2-60,y:t,width:120,height:30}}}]),t}(s.a);t.a=u},function(e,t,n){"use strict";function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};r(this,t);var i=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.style=n,e.plane&&e.plane.bounds&&(e.plane.bounds.width=e.plane.bounds.width||50,e.plane.bounds.height=e.plane.bounds.height||50),e.data.name||(e.data.name=""),i.data=e.data,i.plane=e.plane,i.bpmnName="ExclusiveGateway",i.groupName="Gateway",i.actions=i.getPath(),i}return o(t,e),l(t,[{key:"getPath",value:function(){var e=this.plane.bounds,t=e.height,n=e.width,r=[{fillStyle:{type:"solid",color:"0, 0, 0"},lineStyle:{lineWidth:0,lineStyle:"solid"},actions:[{action:"move",x:.5*n+.5*n*.4-.02*n,y:.5*t-.5*t*.4-.02*t},{action:"line",x:.5*n-.5*n*.4-.02*n,y:.5*t+.5*t*.4-.02*t},{action:"line",x:.5*n-.5*n*.4+.02*n,y:.5*t+.5*t*.4+.02*t},{action:"line",x:.5*n+.5*n*.4+.02*n,y:.5*t-.5*t*.4+.02*t},{action:"line",x:.5*n+.5*n*.4-.02*n,y:.5*t-.5*t*.4-.02*t},{action:"close"}]},{fillStyle:{type:"solid",color:"0, 0, 0"},lineStyle:{lineWidth:0,lineStyle:"solid"},actions:[{action:"move",x:.5*n,y:.5*t},{action:"move",x:.5*n-.5*n*.4+.02*n,y:.5*t-.5*t*.4-.02*t},{action:"line",x:.5*n+.5*n*.4+.02*n,y:.5*t+.5*t*.4-.02*t},{action:"line",x:.5*n+.5*n*.4-.02*n,y:.5*t+.5*t*.4+.02*t},{action:"line",x:.5*n-.5*n*.4-.02*n,y:.5*t-.5*t*.4+.02*t},{action:"close"}]}];return[{lineStyle:{lineStyle:"solid"},actions:[{action:"move",x:0,y:.5*t},{action:"line",x:.5*n,y:0},{action:"line",x:n,y:.5*t},{action:"line",x:.5*n,y:t},{action:"line",x:0,y:.5*t},{action:"close"}]}].concat(i(this.style.content||r),[{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:0,y:.5*t},{action:"line",x:.5*n,y:0},{action:"line",x:n,y:.5*t},{action:"line",x:.5*n,y:t},{action:"line",x:0,y:.5*t},{action:"close"}]}])}},{key:"getTextBlock",value:function(){var e=this.plane.bounds,t=e.height;return{x:e.width/2-60,y:t,width:120,height:30}}}]),t}(s.a);t.a=c},function(e,t,n){"use strict";function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};r(this,t);var i=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.style=n,e.plane&&e.plane.bounds&&(e.plane.bounds.width=e.plane.bounds.width||50,e.plane.bounds.height=e.plane.bounds.height||50),e.data.name||(e.data.name=""),i.data=e.data,i.plane=e.plane,i.bpmnName="InclusiveGateway",i.groupName="Gateway",i.actions=i.getPath(),i}return o(t,e),l(t,[{key:"getPath",value:function(){var e=this.plane.bounds,t=e.height,n=e.width,r=[{lineStyle:{lineStyle:"solid",lineColor:"0, 0, 0"},actions:[{action:"move",x:.5*n-.25*n,y:.5*t},{action:"curve",x1:.5*n-.25*n,y1:.5*t-2*t/3*.5,x2:.5*n+.25*n,y2:.5*t-2*t/3*.5,x:.5*n+.25*n,y:.5*t},{action:"curve",x1:.5*n+.25*n,y1:.5*t+2*t/3*.5,x2:.5*n-.25*n,y2:.5*t+2*t/3*.5,x:.5*n-.25*n,y:.5*t},{action:"close"}]}];return[{lineStyle:{lineStyle:"solid"},actions:[{action:"move",x:0,y:.5*t},{action:"line",x:.5*n,y:0},{action:"line",x:n,y:.5*t},{action:"line",x:.5*n,y:t},{action:"line",x:0,y:.5*t},{action:"close"}]}].concat(i(this.style.content||r),[{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:0,y:.5*t},{action:"line",x:.5*n,y:0},{action:"line",x:n,y:.5*t},{action:"line",x:.5*n,y:t},{action:"line",x:0,y:.5*t},{action:"close"}]}])}},{key:"getTextBlock",value:function(){var e=this.plane.bounds,t=e.height;return{x:e.width/2-60,y:t,width:120,height:30}}}]),t}(s.a);t.a=c},function(e,t,n){"use strict";function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};r(this,t);var i=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.style=n,e.plane&&e.plane.bounds&&(e.plane.bounds.width=e.plane.bounds.width||50,e.plane.bounds.height=e.plane.bounds.height||50),e.data.name||(e.data.name=""),i.data=e.data,i.plane=e.plane,i.bpmnName="ParallelGateway",i.groupName="Gateway",i.actions=i.getPath(),i}return o(t,e),l(t,[{key:"getPath",value:function(){var e=this.plane.bounds,t=e.height,n=e.width,r=[{fillStyle:{type:"solid",color:"0, 0, 0"},lineStyle:{lineWidth:0,lineStyle:"solid"},actions:[{action:"move",x:.5*n-.04*Math.min(n,t),y:.5*t-.5*t*.5},{action:"line",x:.5*n-.04*Math.min(n,t),y:.5*t+.5*t*.5},{action:"line",x:.5*n+.04*Math.min(n,t),y:.5*t+.5*t*.5},{action:"line",x:.5*n+.04*Math.min(n,t),y:.5*t-.5*t*.5},{action:"line",x:.5*n-.04*Math.min(n,t),y:.5*t-.5*t*.5},{action:"close"},{action:"move",x:.5*n-.5*n*.5,y:.5*t-.04*Math.min(n,t)},{action:"line",x:.5*n-.5*n*.5,y:.5*t+.04*Math.min(n,t)},{action:"line",x:.5*n+.5*n*.5,y:.5*t+.04*Math.min(n,t)},{action:"line",x:.5*n+.5*n*.5,y:.5*t-.04*Math.min(n,t)},{action:"line",x:.5*n-.5*n*.5,y:.5*t-.04*Math.min(n,t)},{action:"close"}]}];return[{lineStyle:{lineStyle:"solid"},actions:[{action:"move",x:0,y:.5*t},{action:"line",x:.5*n,y:0},{action:"line",x:n,y:.5*t},{action:"line",x:.5*n,y:t},{action:"line",x:0,y:.5*t},{action:"close"}]}].concat(i(this.style.content||r),[{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:0,y:.5*t},{action:"line",x:.5*n,y:0},{action:"line",x:n,y:.5*t},{action:"line",x:.5*n,y:t},{action:"line",x:0,y:.5*t},{action:"close"}]}])}},{key:"getTextBlock",value:function(){var e=this.plane.bounds,t=e.height;return{x:e.width/2-60,y:t,width:120,height:30}}}]),t}(s.a);t.a=c},function(e,t,n){"use strict";function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};r(this,t);var i=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.style=n,e.plane&&e.plane.bounds&&(e.plane.bounds.width=e.plane.bounds.width||50,e.plane.bounds.height=e.plane.bounds.height||50),e.data.name||(e.data.name=""),i.data=e.data,i.plane=e.plane,i.bpmnName="ComplexGateway",i.groupName="Gateway",i.actions=i.getPath(),i}return o(t,e),l(t,[{key:"getPath",value:function(){var e=this.plane.bounds,t=e.height,n=e.width,r=[{fillStyle:{type:"solid",color:"0, 0, 0"},lineStyle:{lineWidth:0,lineStyle:"solid"},actions:[{action:"move",x:.5*n-.5*Math.min(n,t)*.3+.02*Math.min(n,t),y:.5*t-.5*Math.min(n,t)*.3-.02*Math.min(n,t)},{action:"line",x:.5*n+.5*Math.min(n,t)*.3+.02*Math.min(n,t),y:.5*t+.5*Math.min(n,t)*.3-.03*Math.min(n,t)},{action:"line",x:.5*n+.5*Math.min(n,t)*.3-.02*Math.min(n,t),y:.5*t+.5*Math.min(n,t)*.3+.02*Math.min(n,t)},{action:"line",x:.5*n-.5*Math.min(n,t)*.3-.02*Math.min(n,t),y:.5*t-.5*Math.min(n,t)*.3+.02*Math.min(n,t)},{action:"close"}]},{fillStyle:{type:"solid",color:"0, 0, 0"},lineStyle:{lineWidth:0,lineStyle:"solid"},actions:[{action:"move",x:.5*n+.5*Math.min(n,t)*.3-.02*Math.min(n,t),y:.5*t-.5*Math.min(n,t)*.3-.02*Math.min(n,t)},{action:"line",x:.5*n-.5*Math.min(n,t)*.3-.02*Math.min(n,t),y:.5*t+.5*Math.min(n,t)*.3-.02*Math.min(n,t)},{action:"line",x:.5*n-.5*Math.min(n,t)*.3+.02*Math.min(n,t),y:.5*t+.5*Math.min(n,t)*.3+.02*Math.min(n,t)},{action:"line",x:.5*n+.5*Math.min(n,t)*.3+.02*Math.min(n,t),y:.5*t-.5*Math.min(n,t)*.3+.02*Math.min(n,t)},{action:"line",x:.5*n+.5*Math.min(n,t)*.3-.02*Math.min(n,t),y:.5*t-.5*Math.min(n,t)*.3-.02*Math.min(n,t)},{action:"close"}]},{fillStyle:{type:"solid",color:"0, 0, 0"},lineStyle:{lineWidth:0,lineStyle:"solid"},actions:[{action:"move",x:.5*n-.027*Math.min(n,t),y:.5*t-.5*Math.min(n,t)*.4},{action:"line",x:.5*n-.027*Math.min(n,t),y:.5*t+.5*Math.min(n,t)*.4},{action:"line",x:.5*n+.027*Math.min(n,t),y:.5*t+.5*Math.min(n,t)*.4},{action:"line",x:.5*n+.027*Math.min(n,t),y:.5*t-.5*Math.min(n,t)*.4},{action:"line",x:.5*n-.027*Math.min(n,t),y:.5*t-.5*Math.min(n,t)*.4},{action:"close"}]},{fillStyle:{type:"solid",color:"0, 0, 0"},lineStyle:{lineWidth:0,lineStyle:"solid"},actions:[{action:"move",x:.5*n-.5*Math.min(n,t)*.4,y:.5*t-.027*Math.min(n,t)},{action:"line",x:.5*n-.5*Math.min(n,t)*.4,y:.5*t+.027*Math.min(n,t)},{action:"line",x:.5*n+.5*Math.min(n,t)*.4,y:.5*t+.027*Math.min(n,t)},{action:"line",x:.5*n+.5*Math.min(n,t)*.4,y:.5*t-.027*Math.min(n,t)},{action:"line",x:.5*n-.5*Math.min(n,t)*.4,y:.5*t-.027*Math.min(n,t)},{action:"close"}]}];return[{lineStyle:{lineStyle:"solid"},actions:[{action:"move",x:0,y:.5*t},{action:"line",x:.5*n,y:0},{action:"line",x:n,y:.5*t},{action:"line",x:.5*n,y:t},{action:"line",x:0,y:.5*t},{action:"close"}]}].concat(i(this.style.content||r),[{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:0,y:.5*t},{action:"line",x:.5*n,y:0},{action:"line",x:n,y:.5*t},{action:"line",x:.5*n,y:t},{action:"line",x:0,y:.5*t},{action:"close"}]}])}},{key:"getTextBlock",value:function(){var e=this.plane.bounds,t=e.height;return{x:e.width/2-60,y:t,width:120,height:30}}}]),t}(s.a);t.a=c},function(e,t,n){"use strict";function i(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};r(this,t);var i=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return i.style=n,e.plane&&e.plane.bounds&&(e.plane.bounds.width=e.plane.bounds.width||110,e.plane.bounds.height=e.plane.bounds.height||55),e.data.name||(e.data.name=l.a.trigger("i18n","bpmn.CallActivity")),i.data=e.data,i.plane=e.plane,i.bpmnName="CallActivity",i.groupName="CallActivity",i.actions=i.getPath(),i}return o(t,e),c(t,[{key:"getPath",value:function(){var e=this.plane.bounds,t=e.height,n=e.width,r=this.lineStyle.lineWidth,a=[];return[{lineStyle:{lineWidth:r+2,lineStyle:"solid"},actions:[{action:"move",x:0,y:4},{action:"quadraticCurve",x1:0,y1:0,x:4,y:0},{action:"line",x:n-4,y:0},{action:"quadraticCurve",x1:n,y1:0,x:n,y:4},{action:"line",x:n,y:t-4},{action:"quadraticCurve",x1:n,y1:t,x:n-4,y:t},{action:"line",x:4,y:t},{action:"quadraticCurve",x1:0,y1:t,x:0,y:t-4},{action:"close"}]}].concat(i(this.style.content||a),[{fillStyle:{type:"none"},lineStyle:{lineWidth:0},actions:[{action:"move",x:0,y:4},{action:"quadraticCurve",x1:0,y1:0,x:4,y:0},{action:"line",x:n-4,y:0},{action:"quadraticCurve",x1:n,y1:0,x:n,y:4},{action:"line",x:n,y:t-4},{action:"quadraticCurve",x1:n,y1:t,x:n-4,y:t},{action:"line",x:4,y:t},{action:"quadraticCurve",x1:0,y1:t,x:0,y:t-4},{action:"close"}]}])}},{key:"getTextBlock",value:function(){var e=this.plane.bounds,t=e.height;return{x:10,y:0,width:e.width-20,height:t}}}]),t}(s.a);t.a=u},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(0),a=n(2),o=n(27),s=n(1),l=(n(7),n(3)),c=function(){function e(e,t){for(var n=0;n2&&n.points.length<=0&&(n.points=p.filter(function(e,t){return 0!==t&&t!==p.length-1})),t&&(n.points=a.a.getConnectionPoints(n,y)),"curve"!==n.linkerType&&"broken"!==n.linkerType||n.points&&0!==n.points.length||(n.points=a.a.getConnectionPoints(n,y)),null==h.angle&&(h.angle=a.a.getAngle(p[1],p[0])),null==f.angle&&(f.angle=a.a.getAngle(p[p.length-2],p[p.length-1]));var m=f.x,g=f.y,v=h.x,x=h.y;f.x>=h.x&&(m=h.x,v=f.x),f.y>=h.y&&(g=h.y,x=f.y),n.points.forEach(function(e,t){e.xv&&(v=e.x),e.yx&&(x=e.y)});var b={x:m,y:g,width:v-m,height:x-g},w=this.$container.find('.shape-box[data-id="'+i.id+'"]');0===w.length&&(w=Object(l.a)("
").appendTo(this.$container.find(".bpd-designer")));var E=w.find(".shape-canvas"),S=Object(s.l)(b.width+20),C=Object(s.l)(b.height+20);E.attr({width:S,height:C}),w.css({left:Object(s.l)(b.x-10)+"px",top:Object(s.l)(b.y-10)+"px",width:S,height:C});var A=E[0].getContext("2d"),k=this.options.bpmnStyle[n.bpmnName]||{},O=Object.assign({},n.lineStyle,k.lineStyle);A.scale(this.options.scale,this.options.scale),A.translate(10,10),A.lineWidth=O.lineWidth,A.strokeStyle="rgb("+O.lineColor+")",A.fillStyle="rgb("+O.lineColor+")",A.save(),"dashed"===O.lineStyle?a.a.setLineDash(A,[8*O.lineWidth,4*O.lineWidth]):"dot"===O.lineStyle?a.a.setLineDash(A,[O.lineWidth,2*O.lineWidth]):"dashdot"===O.lineStyle&&a.a.setLineDash(A,[8*O.lineWidth,3*O.lineWidth,O.lineWidth,3*O.lineWidth]);var R={x:h.x-b.x,y:h.y-b.y},P={x:f.x-b.x,y:f.y-b.y};if(A.beginPath(),A.moveTo(R.x,R.y),"curve"===n.linkerType){var T=n.points[0],M=n.points[1];A.bezierCurveTo(T.x-b.x,T.y-b.y,M.x-b.x,M.y-b.y,P.x,P.y)}else n.points.forEach(function(e,t){A.lineTo(e.x-b.x,e.y-b.y)}),A.lineTo(P.x,P.y);d.indexOf(i.id)>=0&&(A.shadowBlur=4,A.shadowColor="#ec5343"),A.stroke(),A.restore();var j=a.a.getEndpointAngle(n,"sourceRef");this.renderArrow(R,j,c,O.beginArrowStyle,n,h.angle,A);var N=a.a.getEndpointAngle(n,"targetRef");this.renderArrow(P,N,u,O.endArrowStyle,n,f.angle,A),A.restore(),this.renderConnectionText(n)}},{key:"renderArrow",value:function(e,t,n,i,a,o,s){if("solidArrow"===i){var l=Math.PI/10,c=12/Math.cos(l),u={x:e.x-c*Math.cos(t-l),y:e.y-c*Math.sin(t-l)},p={x:e.x-c*Math.sin(Math.PI/2-t-l),y:e.y-c*Math.cos(Math.PI/2-t-l)};s.beginPath(),s.moveTo(e.x,e.y),s.lineTo(u.x,u.y),s.lineTo(p.x,p.y),s.lineTo(e.x,e.y),s.closePath(),s.fill(),s.stroke()}if(n&&"solidCircle"!==i&&"dashedCircle"!==i){var h=r.a.trigger("element.get",n);if(h){s.save(),s.translate(e.x,e.y),s.rotate(o),s.translate(-e.x,-e.y);for(var f=e.x-h.shape.lineStyle.lineWidth/2,d=e.y-1.2*a.lineStyle.lineWidth,y=2*a.lineStyle.lineWidth,m=1.8*a.lineStyle.lineWidth,g=f;g<=f+y;){for(var v=d;v<=d+m;)s.clearRect(g,v,1.5,1.5),v+=1;g+=1}s.restore()}}}},{key:"renderConnectionText",value:function(e){var t=this.$container.find('.shape-box[data-id="'+e.data.id+'"]'),n=t.find(".text-box[data-shape="+e.data.id+"]");0===n.length&&(n=Object(l.a)("
").appendTo(t));var i=e.fontStyle,r="scale("+this.options.scale+")",o={"line-height":Math.round(1.25*i.size)+"px","font-size":i.size+"px","font-family":i.fontFamily,"font-weight":i.bold?"bold":"normal","font-style":i.italic?"italic":"normal","text-align":i.textAlign,color:"rgb("+i.color+")","text-decoration":i.underline?"underline":"none","-webkit-transform":r,"-ms-transform":r,"-o-transform":r,"-moz-transform":r,transform:r};if(n.css(o),null==e.data.name||""===e.data.name.trim())return void n.hide();n.show();var c=e.data.name;c.length>12&&(c=c.substr(0,12)+"..."),n.html(c),n.attr("title",e.data.name);var u=a.a.getConnectionMidpoint(e),p=t.position();n.css({left:Object(s.l)(u.x)-p.left-n.width()/2,top:Object(s.l)(u.y)-p.top-n.height()/2})}},{key:"move",value:function(e,t,n,i){var o=e.data,l=e.plane,c=(e.shape,l.waypoint[0]),u=l.waypoint[l.waypoint.length-1],p=a.a.getShapeByPosition(n,i,this.$container,!0),h=null,f=null;if(r.a.trigger("anchor.point.hide"),null!=p){var d=p.element;if(f=d.data.id,"bounds"===p.type)h=p.anchor,r.a.trigger("anchor.point.show",Object(s.l)(h));else if("shape"===p.type){var y=void 0,m=void 0;if("source"===t?(y={x:u.x,y:u.y},m=o.targetRef):(y={x:c.x,y:c.y},m=o.sourceRef),d.data.id===m)r.a.trigger("anchor.point.hide"),h={x:Object(s.i)(n),y:Object(s.i)(i),angle:null},f=null;else{for(var g=d.shape.getAnchors(),v=d.plane.bounds,x={x:v.x+v.width/2,y:v.y+v.height/2},b=-1,w=void 0,E=0;E=u.x-6&&h.x<=u.x+6&&(c.x=u.x),h.y>=u.y-6&&h.y<=u.y+6&&(c.y=u.y))):(o.targetRef=f,u.x=h.x,u.y=h.y,u.angle=h.angle,null==f&&(h.x>=c.x-6&&h.x<=c.x+6&&(u.x=c.x),h.y>=c.y-6&&h.y<=c.y+6&&(u.y=c.y))),this.renderConnection(e,!0)}}]),e}();t.a=u},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var o=n(6),s=function(e){function t(e){i(this,t);var n=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return n.data=e.data,n.plane=e.plane,n.bpmnName="SequenceFlow",n.groupName="SequenceFlow",n.linkerType="broken",n.points=[],n.lineStyle={lineWidth:2,lineColor:"50,50,50",lineStyle:"solid",beginArrowStyle:"none",endArrowStyle:"solidArrow"},n}return a(t,e),t}(o.a);t.a=s},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:128,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:16;if(e<=0)return"0";for(var n=Math.log(Math.pow(2,e))/Math.log(t),i=2;n===1/0;i*=2)n=Math.log(Math.pow(2,e/i))/Math.log(t)*i;for(var r=n-Math.floor(n),a="",o=0;o=Math.pow(2,e)?this.createId(e,t):a}},{key:"rack",value:function(e,t,n){var i=function(i){var a=0,o=void 0;do{if(a++>10){if(!n)throw new Error("too many ID collisions, use more bits");e+=n}o=this.createId(e,t)}while(Object.hasOwnProperty.call(r,o));return r[o]=i,o},r=i.hats={};return i.get=function(e){return i.hats[e]},i.set=function(e,t){return i.hats[e]=t,i},i.bits=e||128,i.base=t||16,i}},{key:"next",value:function(e){return this._seed(e||!0)}},{key:"nextPrefixed",value:function(e,t){var n=void 0;do{n=e+this.next(!0)}while(this.assigned(n));return this.claim(n,t),n}},{key:"claim",value:function(e,t){this._seed.set(e,t||!0)}},{key:"assigned",value:function(e){return this._seed.get(e)||!1}},{key:"unclaim",value:function(e){delete this._seed.hats[e]}},{key:"clear",value:function(){var e=this._seed.hats;for(var t in e)this.unclaim(t)}}]),e}();t.a=a},function(e,t,n){"use strict";var i=n(30),r=n(42),a=n.n(r),o=n(43),s=n.n(o),l=n(44),c=n.n(l),u=n(45),p=n.n(u),h={bpmn:a.a,bpmndi:s.a,dc:c.a,di:p.a};t.a=function(e,t){var n=Object.assign({},h,e);return new i.a(n,t)}},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var o=n(8),s=n(0),l=n(36),c=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:function(){})(this.create(e.descriptor,e.attrs))}},{key:"fromXML",value:function(e,t,n,i){"string"==typeof t&&t.constructor===String||(i=n,n=t,t="bpmn:Definitions"),"function"==typeof n&&n.constructor===Function&&(i=n,n={});var r=new l.a(Object.assign({model:this,lax:!0},n)),a=r.handler(t);r.fromXML(e,a,i)}},{key:"toXML",value:function(e,t,n){"function"==typeof t&&t.constructor===Function&&(n=t,t={});var i,r,a=new l.b(t);try{i=a.toXML(e)}catch(e){r=e}return n(r,i)}},{key:"test",value:function(e){console.log("test",e,this.a)}}]),t}(o.a);t.a=u},function(e,t,n){"use strict";function i(e,t){this.model=e,this.properties=t}t.a=i;var r=n(32);i.prototype.createType=function(e){function t(e){i.define(this,"$type",{value:o,enumerable:!0}),i.define(this,"$attrs",{value:{}}),i.define(this,"$parent",{writable:!0});for(var t in e)this.set(t,e[t])}var n=this.model,i=this.properties,a=Object.create(r.a.prototype);e.properties.forEach(function(e){e.isMany||void 0===e.default||(a[e.name]=e.default)}),i.defineModel(a,n),i.defineDescriptor(a,e);var o=e.ns.name;return t.prototype=a,t.hasType=a.$instanceOf=this.model.hasType,i.defineModel(t,n),i.defineDescriptor(t,e),t}},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n already defined")}t.a=i;var a=n(34),o=n(5);i.prototype.getPackage=function(e){return this.packageMap[e]},i.prototype.getPackages=function(){return this.packages},i.prototype.registerPackage=function(e){var t=this;e=Object.assign({},e);var n=this.packageMap;r(n,e,"prefix"),r(n,e,"uri"),e.types.forEach(function(n){t.registerType(n,e)}),n[e.uri]=n[e.prefix]=e,this.packages.push(e)},i.prototype.registerType=function(e,t){var n=this;e=Object.assign({},e,{superClass:(e.superClass||[]).slice(),extends:(e.extends||[]).slice(),properties:(e.properties||[]).slice(),meta:Object.assign(e.meta||{})});var i=Object(o.g)(e.name,t.prefix),r=i.name,a={};e.properties.forEach(function(e){var t=Object(o.g)(e.name,i.prefix),n=t.name;Object(o.e)(e.type)||(e.type=Object(o.g)(e.type,t.prefix).name),Object.assign(e,{ns:t,name:n}),a[n]=e}),Object.assign(e,{ns:i,name:r,propertiesByName:a}),e.extends.forEach(function(e){var t=n.typeMap[e];t.traits=t.traits||[],t.traits.push(r)}),this.definePackage(e,t),this.typeMap[r]=e},i.prototype.mapTypes=function(e,t,n){function i(e){return r(e,!0)}function r(n,i){var r=Object(o.g)(n,Object(o.e)(n)?"":e.prefix);s.mapTypes(r,t,i)}var a=Object(o.e)(e.name)?{name:e.name}:this.typeMap[e.name],s=this;if(!a)throw new Error("unknown type <"+e.name+">");a.superClass&&a.superClass.forEach(function(e){n?i(e):r(e)}),t(a,!n),a.traits&&a.traits.length>0&&a.traits.forEach(function(e){i(e)})},i.prototype.getEffectiveDescriptor=function(e){var t=Object(o.g)(e),n=new a.a(t);this.mapTypes(t,function(e,t){n.addTrait(e,t)});var i=n.build();return this.definePackage(i,i.allTypes[i.allTypes.length-1].$pkg),i},i.prototype.definePackage=function(e,t){this.properties.define(e,"$pkg",{value:t})}},function(e,t,n){"use strict";function i(e,t){var n={},i=Object(e);return t.forEach(function(t){t in i&&(n[t]=e[t])}),n}function r(e){this.ns=e,this.name=e.name,this.allTypes=[],this.allTypesByName={},this.properties=[],this.propertiesByName={}}t.a=r;var a=n(5);r.prototype.build=function(){return i(this,["ns","name","allTypes","allTypesByName","properties","propertiesByName","bodyProperty","idProperty"])},r.prototype.addProperty=function(e,t,n){"boolean"==typeof t&&(n=t,t=void 0),this.addNamedProperty(e,!1!==n);var i=this.properties;void 0!==t?i.splice(t,0,e):i.push(e)},r.prototype.replaceProperty=function(e,t,n){var i=e.ns,r=this.properties,a=this.propertiesByName,o=e.name!==t.name;if(e.isId){if(!t.isId)throw new Error("property <"+t.ns.name+"> must be id property to refine <"+e.ns.name+">");this.setIdProperty(t,!1)}if(e.isBody){if(!t.isBody)throw new Error("property <"+t.ns.name+"> must be body property to refine <"+e.ns.name+">");this.setBodyProperty(t,!1)}var s=r.indexOf(e);if(-1===s)throw new Error("property <"+i.name+"> not found in property list");r.splice(s,1),this.addProperty(t,n?void 0:s,o),a[i.name]=a[i.localName]=t},r.prototype.redefineProperty=function(e,t,n){var i=e.ns.prefix,r=t.split("#"),o=Object(a.g)(r[0],i),s=Object(a.g)(r[1],o.prefix).name,l=this.propertiesByName[s];if(!l)throw new Error("refined property <"+s+"> not found");this.replaceProperty(l,e,n),delete e.redefines},r.prototype.addNamedProperty=function(e,t){var n=e.ns,i=this.propertiesByName;t&&(this.assertNotDefined(e,n.name),this.assertNotDefined(e,n.localName)),i[n.name]=i[n.localName]=e},r.prototype.removeNamedProperty=function(e){var t=e.ns,n=this.propertiesByName;delete n[t.name],delete n[t.localName]},r.prototype.setBodyProperty=function(e,t){if(t&&this.bodyProperty)throw new Error("body property defined multiple times (<"+this.bodyProperty.ns.name+">, <"+e.ns.name+">)");this.bodyProperty=e},r.prototype.setIdProperty=function(e,t){if(t&&this.idProperty)throw new Error("id property defined multiple times (<"+this.idProperty.ns.name+">, <"+e.ns.name+">)");this.idProperty=e},r.prototype.assertNotDefined=function(e,t){var n=e.name,i=this.propertiesByName[n];if(i)throw new Error("property <"+n+"> already defined; override of <"+i.definedBy.ns.name+"#"+i.ns.name+"> by <"+e.definedBy.ns.name+"#"+e.ns.name+"> not allowed without redefines")},r.prototype.hasProperty=function(e){return this.propertiesByName[e]},r.prototype.addTrait=function(e,t){var n=this,i=this.allTypesByName,r=this.allTypes,a=e.name;a in i||(e.properties&&e.properties.forEach(function(i){i=Object.assign({},i,{name:i.ns.localName,inherited:t}),Object.defineProperty(i,"definedBy",{value:e});var r=i.replaces,a=i.redefines;r||a?n.redefineProperty(i,r||a,r):(i.isBody&&n.setBodyProperty(i),i.isId&&n.setIdProperty(i),n.addProperty(i))}),r.push(e),i[a]=e)}},function(e,t,n){"use strict";function i(e){this.model=e}function r(e){return void 0===e}function a(e,t,n){Object.defineProperty(e,t.name,{enumerable:!t.isReference,writable:!0,value:n,configurable:!0})}t.a=i,i.prototype.set=function(e,t,n){var i=this.model.getPropertyDescriptor(e,t),o=i&&i.name;r(n)?i?delete e[o]:delete e.$attrs[t]:i?o in e?e[o]=n:a(e,i,n):e.$attrs[t]=n},i.prototype.get=function(e,t){var n=this.model.getPropertyDescriptor(e,t);if(!n)return e.$attrs[t];var i=n.name;return!e[i]&&n.isMany&&a(e,n,[]),e[i]},i.prototype.define=function(e,t,n){Object.defineProperty(e,t,n)},i.prototype.defineDescriptor=function(e,t){this.define(e,"$descriptor",{value:t})},i.prototype.defineModel=function(e,t){this.define(e,"$model",{value:t})}},function(e,t,n){"use strict";var i=n(37);n.d(t,"a",function(){return i.a});var r=n(41);n.d(t,"b",function(){return r.a})},function(e,t,n){"use strict";function i(e,t){t="function"==typeof t&&t.constructor===Function?t:function(e){return e===t};var n;return e.forEach(function(e,i){if(t(e,i))return n=e,!1}),n}function r(e){return e.charAt(0).toUpperCase()+e.slice(1)}function a(e,t){return Object(k.d)(t)?e.prefix+":"+r(e.localName):e.name}function o(e,t){var n=e.name,i=e.localName,r=t.xml&&t.xml.typePrefix;return r&&0===i.indexOf(r)?e.prefix+":"+i.slice(r.length):n}function s(e,t){var n=Object(k.g)(e);return o(n,t.getPackage(n.prefix))}function l(e){return new Error(e)}function c(e){return e.$descriptor}function u(e){setTimeout(e,0)}function p(e){Object.assign(this,e),this.elementsById={},this.references=[],this.warnings=[],this.addReference=function(e){this.references.push(e)},this.addElement=function(e){if(!e)throw l("expected element");var t,n=this.elementsById,i=c(e),r=i.idProperty;if(r&&(t=e.get(r.name))){if(n[t])throw l("duplicate ID <"+t+">");n[t]=e}},this.addWarning=function(e){this.warnings.push(e)}}function h(){}function f(){}function d(){}function y(e,t){this.property=e,this.context=t}function m(e,t){this.element=t,this.propertyDesc=e}function g(){}function v(e,t,n){this.model=e,this.type=e.getType(t),this.context=n}function x(e,t,n){v.call(this,e,t,n)}function b(e,t,n){this.model=e,this.context=n}function w(e){e instanceof A.a&&(e={model:e}),Object.assign(this,{lax:!1},e)}t.a=w;var E=n(38),S=n.n(E),C=n(40),A=n(8),k=n(5),O=C.a.Parser;h.prototype.handleEnd=function(){},h.prototype.handleText=function(){},h.prototype.handleNode=function(){},f.prototype=Object.create(h.prototype),f.prototype.handleNode=function(){return this},d.prototype=Object.create(h.prototype),d.prototype.handleText=function(e){this.body=(this.body||"")+e},y.prototype=Object.create(d.prototype),y.prototype.handleNode=function(e){if(this.element)throw l("expected no sub nodes");return this.element=this.createReference(e),this},y.prototype.handleEnd=function(){this.element.id=this.body},y.prototype.createReference=function(e){return{property:this.property.ns.name,id:""}},m.prototype=Object.create(d.prototype),m.prototype.handleEnd=function(){var e=this.body||"",t=this.element,n=this.propertyDesc;e=Object(k.c)(n.type,e),n.isMany?t.get(n.name).push(e):t.set(n.name,e)},g.prototype=Object.create(d.prototype),g.prototype.handleNode=function(e){var t=this,n=this.element;return n?t=this.handleChild(e):(n=this.element=this.createElement(e),this.context.addElement(n)),t},v.prototype=Object.create(g.prototype),v.prototype.addReference=function(e){this.context.addReference(e)},v.prototype.handleText=function(e){if(!c(this.element).bodyProperty)throw l("unexpected body text <"+e+">");d.prototype.handleText.call(this,e)},v.prototype.handleEnd=function(){var e=this.body,t=this.element,n=c(t),i=n.bodyProperty;i&&void 0!==e&&(e=Object(k.c)(i.type,e),t.set(i.name,e))},v.prototype.createElement=function(e){var t,n=e.attributes,i=this.type,r=c(i),a=this.context,o=new i({}),s=this.model;return Object.keys(n).forEach(function(e){var i,l=n[e],c=r.propertiesByName[e];c&&c.isReference?c.isMany?(i=l.split(" "),i.forEach(function(e){a.addReference({element:o,property:c.ns.name,id:e})})):a.addReference({element:o,property:c.ns.name,id:l}):(c?l=Object(k.c)(c.type,l):"xmlns"!==e&&(t=Object(k.g)(e,r.ns.prefix),s.getPackage(t.prefix)&&a.addWarning({message:"unknown attribute <"+e+">",element:o,property:e,value:l})),o.set(e,l))}),o},v.prototype.getPropertyForNode=function(e){var t,n,r=e.name,o=Object(k.g)(r),u=this.type,p=this.model,h=c(u),f=o.name,d=h.propertiesByName[f];if(d)return Object(k.i)(d)&&(t=e.attributes[k.b])?(t=s(t,p),n=p.getType(t),Object.assign({},d,{effectiveType:c(n).name})):d;var y=p.getPackage(o.prefix);if(y){if(t=a(o,y),n=p.getType(t),d=i(h.properties,function(e){return!e.isVirtual&&!e.isReference&&!e.isAttribute&&n.hasType(e.type)}))return Object.assign({},d,{effectiveType:c(n).name})}else if(d=i(h.properties,function(e){return!e.isReference&&!e.isAttribute&&"Element"===e.type}))return d;throw l("unrecognized element <"+o.name+">")},v.prototype.toString=function(){return"ElementDescriptor["+c(this.type).name+"]"},v.prototype.valueHandler=function(e,t){return new m(e,t)},v.prototype.referenceHandler=function(e){return new y(e,this.context)},v.prototype.handler=function(e){return"Element"===e?new b(this.model,e,this.context):new v(this.model,e,this.context)},v.prototype.handleChild=function(e){var t,n,i,r;if(t=this.getPropertyForNode(e),i=this.element,n=t.effectiveType||t.type,Object(k.f)(n))return this.valueHandler(t,i);r=t.isReference?this.referenceHandler(t).handleNode(e):this.handler(n).handleNode(e);var a=r.element;return void 0!==a&&(t.isMany?i.get(t.name).push(a):i.set(t.name,a),t.isReference?(Object.assign(a,{element:i}),this.context.addReference(a)):a.$parent=i),r},x.prototype=Object.create(v.prototype),x.prototype.createElement=function(e){var t=e.name,n=Object(k.g)(t),i=this.model,r=this.type,o=i.getPackage(n.prefix),s=o&&a(n,o)||t;if(!r.hasType(s))throw l("unexpected element <"+e.originalName+">");return v.prototype.createElement.call(this,e)},b.prototype=Object.create(g.prototype),b.prototype.createElement=function(e){var t=e.name,n=Object(k.g)(t),i=n.prefix,r=e.ns[i+"$uri"],a=e.attributes;return this.model.createAny(t,r,a)},b.prototype.handleChild=function(e){var t,n=new b(this.model,"Element",this.context).handleNode(e),i=this.element,r=n.element;return void 0!==r&&(t=i.$children=i.$children||[],t.push(r),r.$parent=i),n},b.prototype.handleEnd=function(){this.body&&(this.element.$body=this.body)},w.prototype.fromXML=function(e,t,n){function i(e,t,n){var i=t(),r=i.line,a=i.column,o=i.data;"<"===o.charAt(0)&&-1!==o.indexOf(" ")&&(o=o.slice(0,o.indexOf(" "))+">");var s="unparsable content "+(o?o+" ":"")+"detected\n\tline: "+r+"\n\tcolumn: "+a+"\n\tnested error: "+e.message;if(n)return b.addWarning({message:s,error:e}),console.warn("could not parse node"),console.warn(e),!0;throw console.error("could not parse document"),console.error(e),l(s)}function r(e,t){return i(e,t,!0)}function a(){var e,t,n=b.elementsById,i=b.references;for(e=0;t=i[e];e++){var r=t.element,a=n[t.id],o=c(r).propertiesByName[t.property];if(a||b.addWarning({message:"unresolved reference <"+t.id+">",element:t.element,property:t.property,value:t.id}),o.isMany){var s=r.get(o.name),l=s.indexOf(t);-1===l&&(l=s.length),a?s[l]=a:s.splice(l,1)}else r.set(o.name,a)}}function o(){E.pop().handleEnd()}function s(e){if(C.test(e)){var t=A.exec(e),n=t&&t[1];n&&!k.test(n)&&b.addWarning({message:"unsupported document encoding <"+n+">, falling back to UTF-8"})}}function h(e,t){var n=E.peek();try{E.push(n.handleNode(e))}catch(e){i(e,t,x)&&E.push(new f)}}function d(e,t){try{E.peek().handleText(e)}catch(e){r(e,t)}}function y(e,t){(e=e.trim())&&d(e,t)}var m=t.rootHandler;t instanceof v?(m=t,t={}):"string"==typeof t?(m=this.handler(t),t={}):"string"==typeof m&&(m=this.handler(m));var g=this.model,x=this.lax,b=new p(Object.assign({},t,{rootHandler:m})),w=new O({proxy:!0}),E=new S.a;m.context=b,E.push(m);var C=/^<\?xml /i,A=/ encoding="([^"]+)"/i,k=/^utf-8$/i,R=g.getPackages().reduce(function(e,t){return e[t.uri]=t.prefix,e},{});w.ns(R).on("openTag",function(e,t,n,i){var r=e.attrs||{},a=Object.keys(r).reduce(function(e,n){var i=t(r[n]);return e[n]=i,e},{});h({name:e.name,originalName:e.originalName,attributes:a,ns:e.ns},i)}).on("question",s).on("closeTag",o).on("cdata",d).on("text",function(e,t,n){y(t(e),n)}).on("error",i).on("warn",r),u(function(){var t;try{w.parse(e),a()}catch(e){t=e}var i=m.element;t||i||(t=l("failed to parse document as <"+m.type.$descriptor.name+">")),n(t,t?void 0:i,b)})},w.prototype.handler=function(e){return new x(this.model,e)}},function(e,t,n){"use strict";(function(t){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n0&&(e=this.data.pop(),this.top--),e}},{key:"push",value:function(e){return this.data[++this.top]=e,this}},{key:"search",value:function(e){var t=this.data.indexOf(e);return-1===t?-1:this.data.length-t}}]),e}();e.exports=r}("undefined"!=typeof window&&window)}).call(t,n(39))},function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(n=window)}e.exports=n},function(e,t,n){"use strict";function i(e,t,n,i){return i?m.call(v,i)?v[i]:"&"+i+";":y(t?t:parseInt(n,16))}function r(e){return e.length>3&&-1!==e.indexOf("&")?e.replace(g,i):e}function a(e){return new Error(e)}function o(e){return"missing namespace for prefix <"+e+">"}function s(e){return{get:e,enumerable:!0}}function l(e){var t,n={};for(t in e)n[t]=e[t];return n}function c(e){return e+"$uri"}function u(e){var t,n,i={};for(t in e)n=e[t],i[n]=n,i[c(n)]=t;return i}function p(){return{line:0,column:0}}function h(e){throw e}function f(e){function t(e){e instanceof Error||(e=a(e)),N=e,P(e,T)}function n(e){S&&(e instanceof Error||(e=a(e)),S(e,T))}function i(e){function i(){if(null!==B)return B;var e,t,i,a,s,u,p,h,f,d,y,m=j&&L.xmlns,g=j&&M?[]:null,v=H,x=G,b=x.length,E={},S={};e:for(;v8)){for((d<65||d>122||d>90&&d<97)&&95!==d&&58!==d&&(n("illegal first char attribute name"),f=!0),y=v+1;y96&&d<123||d>64&&d<91||d>47&&d<59||46===d||45===d||95===d)){if(32===d||d<14&&d>8){n("missing attribute value"),v=y;continue e}if(61===d)break;n("illegal attribute name char"),f=!0}if(h=x.substring(v,y),"xmlns:xmlns"===h&&(n("illegal declaration of xmlns"),f=!0),34===(d=x.charCodeAt(y+1)))-1===(y=x.indexOf('"',v=y+2))&&-1!==(y=x.indexOf("'",v))&&(n("attribute value quote missmatch"),f=!0);else if(39===d)-1===(y=x.indexOf("'",v=y+2))&&-1!==(y=x.indexOf('"',v))&&(n("attribute value quote missmatch"),f=!0);else for(n("missing attribute value quotes"),f=!0,y+=1;y8);y++);for(-1===y&&(n("missing closing quotes"),y=b,f=!0),f||(u=x.substring(v,y)),v=y;y+18);y++)v===y&&(n("illegal character after attribute end"),f=!0);if(v=y+1,!f)if(h in S)n("attribute <"+h+"> already defined");else if(S[h]=!0,j)if(M){if(null!==(s="xmlns"===h?"xmlns":120===h.charCodeAt(0)&&"xmlns:"===h.substr(0,6)?h.substr(6):null)){if(e=r(u),t=c(s),!(p=O[e])){if("xmlns"===s||t in L&&L[t]!==e)do{p="ns"+_++}while(void 0!==L[p]);else p=s;O[e]=p}L[s]!==p&&(a||(L=l(L),a=!0),L[s]=p,"xmlns"===s&&(L[c(p)]=e,m=p),L[t]=e),E[h]=u;continue}g.push(h,u)}else d=h.indexOf(":"),-1!==d?(i=L[h.substring(0,d)])?(h=m===i?h.substr(d+1):i+h.substr(d),h===w&&(d=u.indexOf(":"),-1!==d?(i=u.substring(0,d),i=L[i]||i,u=i+u.substring(d)):u=m+":"+u),E[h]=u):n(o(h.substring(0,d))):E[h]=u;else E[h]=u}if(M)for(v=0,b=g.length;v=o&&(t=i.exec(e))&&!((s=t[0].length+t.index)>z);)r+=1,o=s;return-1===z?(a=s,n=e.substring(W)):0===W?(console.log(z-o),n=e.substring(W,z)):(a=z-o,n=-1===W?e.substring(z):e.substring(z,W+1)),{data:n,line:r,column:a}}var p,h,f,d,x,b,S,P,N,B,I=j?[]:null,L=j?u(O):null,$=[],_=0,F=!1,q=!1,z=0,W=0,G="",H=0;for(T=a,R&&(N=Object.create({},{name:s(function(){return S}),originalName:s(function(){return P}),attrs:s(i),ns:s(function(){return L})}));-1!==W;){if(-1===(z=60===e.charCodeAt(W)?W:e.indexOf("<",W)))return $.length?t("unexpected end of file"):0===W?t("missing start tag"):void(W",z+1)))return t("unclosed tag");if(B={},47===x){if(F=!1,q=!0,!$.length)return t("missing open tag");if(h=S=$.pop(),d=z+2+h.length,e.substring(z+2,d)!==h)return t("closing tag mismatch");for(;d8&&x<14))return t("close tag")}else{if(47===e.charCodeAt(W-1)?(h=S=e.substring(z+1,W-1),F=!0,q=!0):(h=S=e.substring(z+1,W),F=!0,q=!1),!(x>96&&x<123||x>64&&x<91||95===x||58===x))return t("illegal first char nodeName");for(d=1,f=h.length;d96&&x<123||x>64&&x<91||x>47&&x<59||45===x||95===x||46===x)){if(32===x||x<14&&x>8){S=h.substring(0,d),B=null;break}return t("invalid nodeName")}q||$.push(S)}if(j){if(p=L,F&&(q||I.push(p),null===B&&(M=-1!==h.indexOf("xmlns",d))&&(H=d,G=h,i(),M=!1)),P=S,-1!==(x=S.indexOf(":"))){if(!(b=L[S.substring(0,x)]))return t("missing namespace on <"+P+">");S=S.substr(x+1)}else b=L.xmlns;b&&(S=b+":"+S)}if(F&&(H=d,G=h,m&&(R?m(N,r,q,T):m(S,i,r,q,T),D)))return;if(q){if(g&&(g(R?N:S,r,F,T),D))return;j&&(L=F?p:I.pop())}W+=1}else{if(-1===(W=e.indexOf("?>",z)))return t("unclosed question");if(A&&(A(e.substring(z,W+2),T),D))return;W+=2}else{if(91===(x=e.charCodeAt(z+2))&&"CDATA["===e.substr(z+3,6)){if(-1===(W=e.indexOf("]]>",z)))return t("unclosed cdata");if(v&&(v(e.substring(z+9,W),T),D))return;W+=3;continue}if(45===x&&45===e.charCodeAt(z+3)){if(-1===(W=e.indexOf("--\x3e",z)))return t("unclosed comment");if(C&&(C(e.substring(z+4,W),r,T),D))return;W+=3;continue}if(-1===(W=e.indexOf(">",z+1)))return t("unclosed tag");if(k&&(k(e.substring(z,W+1),r,T),D))return;W+=1}}}if(!this)return new f(e);var y,m,g,v,S,C,A,k,O,R=e&&e.proxy,P=h,T=p,M=!1,j=!1,N=null,D=!1;this.on=function(e,t){if("function"!=typeof t)throw a("required args ");switch(e){case"openTag":m=t;break;case"text":y=t;break;case"closeTag":g=t;break;case"error":P=t;break;case"warn":S=t;break;case"cdata":v=t;break;case"attention":k=t;break;case"question":A=t;break;case"comment":C=t;break;default:throw a("unsupported event: "+e)}return this},this.ns=function(e){if(void 0===e&&(e={}),"object"!==(void 0===e?"undefined":d(e)))throw a("required args ");var t,n={};for(t in e)n[t]=e[t];return n[x]=b,j=!0,O=n,this},this.parse=function(e){if("string"!=typeof e)throw a("required args ");return N=null,i(e),T=p,D=!1,N},this.stop=function(){D=!0}}var d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y=String.fromCharCode,m=Object.prototype.hasOwnProperty,g=/&#(\d+);|&#x([0-9a-f]+);|&(\w+);/gi,v={amp:"&",apos:"'",gt:">",lt:"<",quot:'"'};Object.keys(v).forEach(function(e){v[e.toUpperCase()]=v[e]});var x="http://www.w3.org/2001/XMLSchema-instance",b="xsi",w="xsi:type",E="non-whitespace outside of root node";t.a={Parser:f,decode:r}},function(e,t,n){"use strict";function i(e,t){var n=[];return e.forEach(function(e,i){t(e,i)&&n.push(e)}),n}function r(e){var t={},n={},i={},r=[],a=[];this.byUri=function(t){return n[t]||e&&e.byUri(t)},this.add=function(e,t){n[e.uri]=e,t?r.push(e):a.push(e),this.mapPrefix(e.prefix,e.uri)},this.uriByPrefix=function(e){return t[e||"xmlns"]},this.mapPrefix=function(e,n){t[e||"xmlns"]=n},this.logUsed=function(e){var t=e.uri;i[t]=this.byUri(t)},this.getUsed=function(e){function t(e){return i[e.uri]}return[].concat(r,a).filter(t)}}function a(e){return e.charAt(0).toLowerCase()+e.slice(1)}function o(e,t){return Object(k.d)(t)?a(e):e}function s(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}function l(e){return"string"==typeof e&&e.constructor===String?e:(e.prefix?e.prefix+":":"")+e.localName}function c(e){return e.getUsed().map(function(e){return{name:"xmlns"+(e.prefix?":"+e.prefix:""),value:e.uri}})}function u(e,t){return t.isGeneric?Object.assign({localName:t.ns.localName},e):Object.assign({localName:o(t.ns.localName,t.$pkg)},e)}function p(e,t){return Object.assign({localName:t.ns.localName},e)}function h(e){return i(e.$descriptor.properties,function(t){var n=t.name;if(t.isVirtual)return!1;if(!e.hasOwnProperty(n))return!1;var i=e[n];return i!==t.default&&null!==i&&(!t.isMany||i.length)})}function f(e,t,n){return e="string"==typeof e&&e.constructor===String?e:""+e,e.replace(t,function(e){return"&"+n[e]+";"})}function d(e){return f(e,R,T)}function y(e){return f(e,P,M)}function m(e){return i(e,function(e){return e.isAttr})}function g(e){return i(e,function(e){return!e.isAttr})}function v(e){this.tagName=e}function x(){}function b(e){this.tagName=e}function w(e,t){this.body=[],this.attrs=[],this.parent=e,this.propertyDescriptor=t}function E(e,t){w.call(this,e,t)}function S(){this.value="",this.write=function(e){this.value+=e}}function C(e,t){var n=[""];this.append=function(t){return e.write(t),this},this.appendNewLine=function(){return t&&e.write("\n"),this},this.appendIndent=function(){return t&&e.write(n.join(" ")),this},this.indent=function(){return n.push(""),this},this.unindent=function(){return n.pop(),this}}function A(e){function t(t,n){var i=n||new S,r=new C(i,e.format);if(e.preamble&&r.append(O),(new w).build(t).serializeTo(r),!n)return i.value}return e=Object.assign({format:!1,preamble:!0},e||{}),{toXML:t}}t.a=A;var k=n(5),O='\n',R=/<|>|'|"|&|\n\r|\n/g,P=/<|>|&/g,T={"\n":"#10","\n\r":"#10",'"':"#34","'":"#39","<":"#60",">":"#62","&":"#38"},M={"<":"lt",">":"gt","&":"amp"};v.prototype.build=function(e){return this.element=e,this},v.prototype.serializeTo=function(e){e.appendIndent().append("<"+this.tagName+">"+this.element.id+"").appendNewLine()},x.prototype.serializeValue=x.prototype.serializeTo=function(e){e.append(this.escape?y(this.value):this.value)},x.prototype.build=function(e,t){return this.value=t,"String"===e.type&&-1!==t.search(P)&&(this.escape=!0),this},s(b,x),b.prototype.serializeTo=function(e){e.appendIndent().append("<"+this.tagName+">"),this.serializeValue(e),e.append("").appendNewLine()},w.prototype.build=function(e){this.element=e;var t,n,i=e.$descriptor,r=this.propertyDescriptor,a=i.isGeneric;return t=a?this.parseGeneric(e):this.parseNsAttributes(e),this.ns=r?this.nsPropertyTagName(r):this.nsTagName(i),this.tagName=this.addTagName(this.ns),a||(n=h(e),this.parseAttributes(m(n)),this.parseContainments(g(n))),this.parseGenericAttributes(e,t),this},w.prototype.nsTagName=function(e){return u(this.logNamespaceUsed(e.ns),e)},w.prototype.nsPropertyTagName=function(e){return p(this.logNamespaceUsed(e.ns),e)},w.prototype.isLocalNs=function(e){return e.uri===this.ns.uri},w.prototype.nsAttributeName=function(e){var t;if(t="string"==typeof e&&e.constructor===String?Object(k.g)(e):e.ns,e.inherited)return{localName:t.localName};var n=this.logNamespaceUsed(t);return this.getNamespaces().logUsed(n),this.isLocalNs(n)?{localName:t.localName}:Object.assign({localName:t.localName},n)},w.prototype.parseGeneric=function(e){var t=this,n=this.body,i=[];for(var r in e){"$body"===r?n.push((new x).build({type:"String"},e[r])):"$children"===r?val.forEach(function(e){n.push(new w(t).build(e))}):0!==r.indexOf("$")&&t.parseNsAttribute(e,r,e[r])&&i.push({name:r,value:e[r]})}return i},w.prototype.parseNsAttribute=function(e,t,n){var i,r=e.$model,a=Object(k.g)(t);if("xmlns"===a.prefix&&(i={prefix:a.localName,uri:n}),a.prefix||"xmlns"!==a.localName||(i={uri:n}),!i)return{name:t,value:n};if(r&&r.getPackage(n))this.logNamespace(i,!0,!0);else{var o=this.logNamespaceUsed(i,!0);this.getNamespaces().logUsed(o)}},w.prototype.parseNsAttributes=function(e,t){var n=this,i=e.$attrs,r=[];for(var a in i){var o=n.parseNsAttribute(e,a,i[a]);o&&r.push(o)}return r},w.prototype.parseGenericAttributes=function(e,t){var n=this;t.forEach(function(t){if(t.name!==k.b)try{n.addAttribute(n.nsAttributeName(t.name),t.value)}catch(n){console.warn("missing namespace information for ",t.name,"=",t.value,"on",e,n)}})},w.prototype.parseContainments=function(e){var t=this,n=this.body,i=this.element;e.forEach(function(e){var r=i.get(e.name),a=e.isReference;if(e.isMany||(r=[r]),e.isBody)n.push((new x).build(e,r[0]));else if(Object(k.f)(e.type))r.forEach(function(i){n.push(new b(t.addTagName(t.nsPropertyTagName(e))).build(e,i))});else if(a)r.forEach(function(i){n.push(new v(t.addTagName(t.nsPropertyTagName(e))).build(i))});else{var o=Object(k.i)(e),s=Object(k.h)(e);r.forEach(function(i){var r;r=o?new E(t,e):s?new w(t,e):new w(t),n.push(r.build(i))})}})},w.prototype.getNamespaces=function(e){var t,n=this.namespaces,i=this.parent;return n||(t=i&&i.getNamespaces(),e||!t?this.namespaces=n=new r(t):n=t),n},w.prototype.logNamespace=function(e,t,n){var i=this.getNamespaces(n),r=e.uri,a=e.prefix;return i.byUri(r)||i.add(e,t),i.mapPrefix(a,r),e},w.prototype.logNamespaceUsed=function(e,t){var n,i,r,a=this.element,o=a.$model,s=this.getNamespaces(t),l=e.prefix,c=e.uri;if(!l&&!c)return{localName:e.localName};if(r=k.a[l]||o&&(o.getPackage(l)||{}).uri,!(c=c||r||s.uriByPrefix(l)))throw new Error("no namespace uri given for prefix <"+l+">");if(!(e=s.byUri(c))){for(n=l,i=1;s.uriByPrefix(n);)n=l+"_"+i++;e=this.logNamespace({prefix:n,uri:c},r===c)}return l&&s.mapPrefix(l,c),e},w.prototype.parseAttributes=function(e){var t=this,n=this.element;e.forEach(function(e){var i=n.get(e.name);if(e.isReference)if(e.isMany){var r=[];forEach(i,function(e){r.push(e.id)}),i=r.join(" ")}else i=i.id;t.addAttribute(t.nsAttributeName(e),i)})},w.prototype.addTagName=function(e){var t=this.logNamespaceUsed(e);return this.getNamespaces().logUsed(t),l(e)},w.prototype.addAttribute=function(e,t){var n=this.attrs;"string"==typeof t&&t.constructor===String&&(t=d(t)),n.push({name:e,value:t})},w.prototype.serializeAttributes=function(e){var t=this.attrs,n=this.namespaces;n&&(t=c(n).concat(t)),t.forEach(function(t){e.append(" ").append(l(t.name)).append('="').append(t.value).append('"')})},w.prototype.serializeTo=function(e){var t=this.body[0],n=t&&t.constructor!==x;e.appendIndent().append("<"+this.tagName),this.serializeAttributes(e),e.append(t?">":" />"),t&&(n&&e.appendNewLine().indent(),this.body.forEach(function(t){t.serializeTo(e)}),n&&e.unindent().appendIndent(),e.append("")),e.appendNewLine()},s(E,w),E.prototype.parseNsAttributes=function(e){var t=w.prototype.parseNsAttributes.call(this,e),n=e.$descriptor;if(n.name===this.propertyDescriptor.type)return t;var i=this.typeNs=this.nsTagName(n);this.getNamespaces().logUsed(this.typeNs);var r=e.$model.getPackage(i.uri),a=r.xml&&r.xml.typePrefix||"";return this.addAttribute(this.nsAttributeName(k.b),(i.prefix?i.prefix+":":"")+a+n.ns.localName),t},E.prototype.isLocalNs=function(e){return e.uri===(this.typeNs||this.ns).uri}},function(e,t){e.exports={name:"BPMN20",uri:"http://www.omg.org/spec/BPMN/20100524/MODEL",associations:[],types:[{name:"Interface",superClass:["RootElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"operations",type:"Operation",isMany:!0},{name:"implementationRef",type:"String",isAttr:!0}]},{name:"Operation",superClass:["BaseElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"inMessageRef",type:"Message",isReference:!0},{name:"outMessageRef",type:"Message",isReference:!0},{name:"errorRef",type:"Error",isMany:!0,isReference:!0},{name:"implementationRef",type:"String",isAttr:!0}]},{name:"EndPoint",superClass:["RootElement"]},{name:"Auditing",superClass:["BaseElement"]},{name:"GlobalTask",superClass:["CallableElement"],properties:[{name:"resources",type:"ResourceRole",isMany:!0}]},{name:"Monitoring",superClass:["BaseElement"]},{name:"Performer",superClass:["ResourceRole"]},{name:"Process",superClass:["FlowElementsContainer","CallableElement"],properties:[{name:"processType",type:"ProcessType",isAttr:!0},{name:"isClosed",isAttr:!0,type:"Boolean"},{name:"auditing",type:"Auditing"},{name:"monitoring",type:"Monitoring"},{name:"properties",type:"Property",isMany:!0},{name:"laneSets",type:"LaneSet",isMany:!0,replaces:"FlowElementsContainer#laneSets"},{name:"flowElements",type:"FlowElement",isMany:!0,replaces:"FlowElementsContainer#flowElements"},{name:"artifacts",type:"Artifact",isMany:!0},{name:"resources",type:"ResourceRole",isMany:!0},{name:"correlationSubscriptions",type:"CorrelationSubscription",isMany:!0},{name:"supports",type:"Process",isMany:!0,isReference:!0},{name:"definitionalCollaborationRef",type:"Collaboration",isAttr:!0,isReference:!0},{name:"isExecutable",isAttr:!0,type:"Boolean"}]},{name:"LaneSet",superClass:["BaseElement"],properties:[{name:"lanes",type:"Lane",isMany:!0},{name:"name",isAttr:!0,type:"String"}]},{name:"Lane",superClass:["BaseElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"partitionElementRef",type:"BaseElement",isAttr:!0,isReference:!0},{name:"partitionElement",type:"BaseElement"},{name:"flowNodeRef",type:"FlowNode",isMany:!0,isReference:!0},{name:"childLaneSet",type:"LaneSet",xml:{serialize:"xsi:type"}}]},{name:"GlobalManualTask",superClass:["GlobalTask"]},{name:"ManualTask",superClass:["Task"]},{name:"UserTask",superClass:["Task"],properties:[{name:"renderings",type:"Rendering",isMany:!0},{name:"implementation",isAttr:!0,type:"String"}]},{name:"Rendering",superClass:["BaseElement"]},{name:"HumanPerformer",superClass:["Performer"]},{name:"PotentialOwner",superClass:["HumanPerformer"]},{name:"GlobalUserTask",superClass:["GlobalTask"],properties:[{name:"implementation",isAttr:!0,type:"String"},{name:"renderings",type:"Rendering",isMany:!0}]},{name:"Gateway",isAbstract:!0,superClass:["FlowNode"],properties:[{name:"gatewayDirection",type:"GatewayDirection",default:"Unspecified",isAttr:!0}]},{name:"EventBasedGateway",superClass:["Gateway"],properties:[{name:"instantiate",default:!1,isAttr:!0,type:"Boolean"},{name:"eventGatewayType",type:"EventBasedGatewayType",isAttr:!0,default:"Exclusive"}]},{name:"ComplexGateway",superClass:["Gateway"],properties:[{name:"activationCondition",type:"Expression",xml:{serialize:"xsi:type"}},{name:"default",type:"SequenceFlow",isAttr:!0,isReference:!0}]},{name:"ExclusiveGateway",superClass:["Gateway"],properties:[{name:"default",type:"SequenceFlow",isAttr:!0,isReference:!0}]},{name:"InclusiveGateway",superClass:["Gateway"],properties:[{name:"default",type:"SequenceFlow",isAttr:!0,isReference:!0}]},{name:"ParallelGateway",superClass:["Gateway"]},{name:"RootElement",isAbstract:!0,superClass:["BaseElement"]},{name:"Relationship",superClass:["BaseElement"],properties:[{name:"type",isAttr:!0,type:"String"},{name:"direction",type:"RelationshipDirection",isAttr:!0},{name:"source",isMany:!0,isReference:!0,type:"Element"},{name:"target",isMany:!0,isReference:!0,type:"Element"}]},{name:"BaseElement",isAbstract:!0,properties:[{name:"id",isAttr:!0,type:"String",isId:!0},{name:"documentation",type:"Documentation",isMany:!0},{name:"extensionDefinitions",type:"ExtensionDefinition",isMany:!0,isReference:!0},{name:"extensionElements",type:"ExtensionElements"}]},{name:"Extension",properties:[{name:"mustUnderstand",default:!1,isAttr:!0,type:"Boolean"},{name:"definition",type:"ExtensionDefinition",isAttr:!0,isReference:!0}]},{name:"ExtensionDefinition",properties:[{name:"name",isAttr:!0,type:"String"},{name:"extensionAttributeDefinitions",type:"ExtensionAttributeDefinition",isMany:!0}]},{name:"ExtensionAttributeDefinition",properties:[{name:"name",isAttr:!0,type:"String"},{name:"type",isAttr:!0,type:"String"},{name:"isReference",default:!1,isAttr:!0,type:"Boolean"},{name:"extensionDefinition",type:"ExtensionDefinition",isAttr:!0,isReference:!0}]},{name:"ExtensionElements",properties:[{name:"valueRef",isAttr:!0,isReference:!0,type:"Element"},{name:"values",type:"Element",isMany:!0},{name:"extensionAttributeDefinition",type:"ExtensionAttributeDefinition",isAttr:!0,isReference:!0}]},{name:"Documentation",superClass:["BaseElement"],properties:[{name:"text",type:"String",isBody:!0},{name:"textFormat",default:"text/plain",isAttr:!0,type:"String"}]},{name:"Event",isAbstract:!0,superClass:["FlowNode","InteractionNode"],properties:[{name:"properties",type:"Property",isMany:!0}]},{name:"IntermediateCatchEvent",superClass:["CatchEvent"]},{name:"IntermediateThrowEvent",superClass:["ThrowEvent"]},{name:"EndEvent",superClass:["ThrowEvent"]},{name:"StartEvent",superClass:["CatchEvent"],properties:[{name:"isInterrupting",default:!0,isAttr:!0,type:"Boolean"}]},{name:"ThrowEvent",isAbstract:!0,superClass:["Event"],properties:[{name:"dataInputs",type:"DataInput",isMany:!0},{name:"dataInputAssociations",type:"DataInputAssociation",isMany:!0},{name:"inputSet",type:"InputSet"},{name:"eventDefinitions",type:"EventDefinition",isMany:!0},{name:"eventDefinitionRef",type:"EventDefinition",isMany:!0,isReference:!0}]},{name:"CatchEvent",isAbstract:!0,superClass:["Event"],properties:[{name:"parallelMultiple",isAttr:!0,type:"Boolean",default:!1},{name:"dataOutputs",type:"DataOutput",isMany:!0},{name:"dataOutputAssociations",type:"DataOutputAssociation",isMany:!0},{name:"outputSet",type:"OutputSet"},{name:"eventDefinitions",type:"EventDefinition",isMany:!0},{name:"eventDefinitionRef",type:"EventDefinition",isMany:!0,isReference:!0}]},{name:"BoundaryEvent",superClass:["CatchEvent"],properties:[{name:"cancelActivity",default:!0,isAttr:!0,type:"Boolean"},{name:"attachedToRef",type:"Activity",isAttr:!0,isReference:!0}]},{name:"EventDefinition",isAbstract:!0,superClass:["RootElement"]},{name:"CancelEventDefinition",superClass:["EventDefinition"]},{name:"ErrorEventDefinition",superClass:["EventDefinition"],properties:[{name:"errorRef",type:"Error",isAttr:!0,isReference:!0}]},{name:"TerminateEndEvent",superClass:["EventDefinition"]},{name:"EscalationEventDefinition",superClass:["EventDefinition"],properties:[{name:"escalationRef",type:"Escalation",isAttr:!0,isReference:!0}]},{name:"Escalation",properties:[{name:"structureRef",type:"ItemDefinition",isAttr:!0,isReference:!0},{name:"name",isAttr:!0,type:"String"},{name:"escalationCode",isAttr:!0,type:"String"}],superClass:["RootElement"]},{name:"CompensateEventDefinition",superClass:["EventDefinition"],properties:[{name:"waitForCompletion",isAttr:!0,type:"Boolean",default:!0},{name:"activityRef",type:"Activity",isAttr:!0,isReference:!0}]},{name:"TimerEventDefinition",superClass:["EventDefinition"],properties:[{name:"timeDate",type:"Expression",xml:{serialize:"xsi:type"}},{name:"timeCycle",type:"Expression",xml:{serialize:"xsi:type"}},{name:"timeDuration",type:"Expression",xml:{serialize:"xsi:type"}}]},{name:"LinkEventDefinition",superClass:["EventDefinition"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"target",type:"LinkEventDefinition",isAttr:!0,isReference:!0},{name:"source",type:"LinkEventDefinition",isMany:!0,isReference:!0}]},{name:"MessageEventDefinition",superClass:["EventDefinition"],properties:[{name:"messageRef",type:"Message",isAttr:!0,isReference:!0},{name:"operationRef",type:"Operation",isAttr:!0,isReference:!0}]},{name:"ConditionalEventDefinition",superClass:["EventDefinition"],properties:[{name:"condition",type:"Expression",xml:{serialize:"xsi:type"}}]},{name:"SignalEventDefinition",superClass:["EventDefinition"],properties:[{name:"signalRef",type:"Signal",isAttr:!0,isReference:!0}]},{name:"Signal",superClass:["RootElement"],properties:[{name:"structureRef",type:"ItemDefinition",isAttr:!0,isReference:!0},{name:"name",isAttr:!0,type:"String"}]},{name:"ImplicitThrowEvent",superClass:["ThrowEvent"]},{name:"DataState",superClass:["BaseElement"],properties:[{name:"name",isAttr:!0,type:"String"}]},{name:"ItemAwareElement",superClass:["BaseElement"],properties:[{name:"itemSubjectRef",type:"ItemDefinition",isAttr:!0,isReference:!0},{name:"dataState",type:"DataState"}]},{name:"DataAssociation",superClass:["BaseElement"],properties:[{name:"assignment",type:"Assignment",isMany:!0},{name:"sourceRef",type:"ItemAwareElement",isMany:!0,isReference:!0},{name:"targetRef",type:"ItemAwareElement",isReference:!0},{name:"transformation",type:"FormalExpression",xml:{serialize:"property"}}]},{name:"DataInput",superClass:["ItemAwareElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"isCollection",default:!1,isAttr:!0,type:"Boolean"},{name:"inputSetRef",type:"InputSet",isVirtual:!0,isMany:!0,isReference:!0},{name:"inputSetWithOptional",type:"InputSet",isVirtual:!0,isMany:!0,isReference:!0},{name:"inputSetWithWhileExecuting",type:"InputSet",isVirtual:!0,isMany:!0,isReference:!0}]},{name:"DataOutput",superClass:["ItemAwareElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"isCollection",default:!1,isAttr:!0,type:"Boolean"},{name:"outputSetRef",type:"OutputSet",isVirtual:!0,isMany:!0,isReference:!0},{name:"outputSetWithOptional",type:"OutputSet",isVirtual:!0,isMany:!0,isReference:!0},{name:"outputSetWithWhileExecuting",type:"OutputSet",isVirtual:!0,isMany:!0,isReference:!0}]},{name:"InputSet",superClass:["BaseElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"dataInputRefs",type:"DataInput",isMany:!0,isReference:!0},{name:"optionalInputRefs",type:"DataInput",isMany:!0,isReference:!0},{name:"whileExecutingInputRefs",type:"DataInput",isMany:!0,isReference:!0},{name:"outputSetRefs",type:"OutputSet",isMany:!0,isReference:!0}]},{name:"OutputSet",superClass:["BaseElement"],properties:[{name:"dataOutputRefs",type:"DataOutput",isMany:!0,isReference:!0},{name:"name",isAttr:!0,type:"String"},{name:"inputSetRefs",type:"InputSet",isMany:!0,isReference:!0},{name:"optionalOutputRefs",type:"DataOutput",isMany:!0,isReference:!0},{name:"whileExecutingOutputRefs",type:"DataOutput",isMany:!0,isReference:!0}]},{name:"Property",superClass:["ItemAwareElement"],properties:[{name:"name",isAttr:!0,type:"String"}]},{name:"DataInputAssociation",superClass:["DataAssociation"]},{name:"DataOutputAssociation",superClass:["DataAssociation"]},{name:"InputOutputSpecification",superClass:["BaseElement"],properties:[{name:"dataInputs",type:"DataInput",isMany:!0},{name:"dataOutputs",type:"DataOutput",isMany:!0},{name:"inputSets",type:"InputSet",isMany:!0},{name:"outputSets",type:"OutputSet",isMany:!0}]},{name:"DataObject",superClass:["FlowElement","ItemAwareElement"],properties:[{name:"isCollection",default:!1,isAttr:!0,type:"Boolean"}]},{name:"InputOutputBinding",properties:[{name:"inputDataRef",type:"InputSet",isAttr:!0,isReference:!0},{name:"outputDataRef",type:"OutputSet",isAttr:!0,isReference:!0},{name:"operationRef",type:"Operation",isAttr:!0,isReference:!0}]},{name:"Assignment",superClass:["BaseElement"],properties:[{name:"from",type:"Expression",xml:{serialize:"xsi:type"}},{name:"to",type:"Expression",xml:{serialize:"xsi:type"}}]},{name:"DataStore",superClass:["RootElement","ItemAwareElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"capacity",isAttr:!0,type:"Integer"},{name:"isUnlimited",default:!0,isAttr:!0,type:"Boolean"}]},{name:"DataStoreReference",superClass:["ItemAwareElement","FlowElement"],properties:[{name:"dataStoreRef",type:"DataStore",isAttr:!0,isReference:!0}]},{name:"DataObjectReference",superClass:["ItemAwareElement","FlowElement"],properties:[{name:"dataObjectRef",type:"DataObject",isAttr:!0,isReference:!0}]},{name:"ConversationLink",superClass:["BaseElement"],properties:[{name:"sourceRef",type:"InteractionNode",isAttr:!0,isReference:!0},{name:"targetRef",type:"InteractionNode",isAttr:!0,isReference:!0},{name:"name",isAttr:!0,type:"String"}]},{name:"ConversationAssociation",superClass:["BaseElement"],properties:[{name:"innerConversationNodeRef",type:"ConversationNode",isAttr:!0,isReference:!0},{name:"outerConversationNodeRef",type:"ConversationNode",isAttr:!0,isReference:!0}]},{name:"CallConversation",superClass:["ConversationNode"],properties:[{name:"calledCollaborationRef",type:"Collaboration",isAttr:!0,isReference:!0},{name:"participantAssociations",type:"ParticipantAssociation",isMany:!0}]},{name:"Conversation",superClass:["ConversationNode"]},{name:"SubConversation",superClass:["ConversationNode"],properties:[{name:"conversationNodes",type:"ConversationNode",isMany:!0}]},{name:"ConversationNode",isAbstract:!0,superClass:["InteractionNode","BaseElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"participantRefs",type:"Participant",isMany:!0,isReference:!0},{name:"messageFlowRefs",type:"MessageFlow",isMany:!0,isReference:!0},{name:"correlationKeys",type:"CorrelationKey",isMany:!0}]},{name:"GlobalConversation",superClass:["Collaboration"]},{name:"PartnerEntity",superClass:["RootElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"participantRef",type:"Participant",isMany:!0,isReference:!0}]},{name:"PartnerRole",superClass:["RootElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"participantRef",type:"Participant",isMany:!0,isReference:!0}]},{name:"CorrelationProperty",superClass:["RootElement"],properties:[{name:"correlationPropertyRetrievalExpression",type:"CorrelationPropertyRetrievalExpression",isMany:!0},{name:"name",isAttr:!0,type:"String"},{name:"type",type:"ItemDefinition",isAttr:!0,isReference:!0}]},{name:"Error",superClass:["RootElement"],properties:[{name:"structureRef",type:"ItemDefinition",isAttr:!0,isReference:!0},{name:"name",isAttr:!0,type:"String"},{name:"errorCode",isAttr:!0,type:"String"}]},{name:"CorrelationKey",superClass:["BaseElement"],properties:[{name:"correlationPropertyRef",type:"CorrelationProperty",isMany:!0,isReference:!0},{name:"name",isAttr:!0,type:"String"}]},{name:"Expression",superClass:["BaseElement"],isAbstract:!1,properties:[{name:"body",type:"String",isBody:!0}]},{name:"FormalExpression",superClass:["Expression"],properties:[{name:"language",isAttr:!0,type:"String"},{name:"evaluatesToTypeRef",type:"ItemDefinition",isAttr:!0,isReference:!0}]},{name:"Message",superClass:["RootElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"itemRef",type:"ItemDefinition",isAttr:!0,isReference:!0}]},{name:"ItemDefinition",superClass:["RootElement"],properties:[{name:"itemKind",type:"ItemKind",isAttr:!0},{name:"structureRef",type:"String",isAttr:!0},{name:"isCollection",default:!1,isAttr:!0,type:"Boolean"},{name:"import",type:"Import",isAttr:!0,isReference:!0}]},{name:"FlowElement",isAbstract:!0,superClass:["BaseElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"auditing",type:"Auditing"},{name:"monitoring",type:"Monitoring"},{name:"categoryValueRef",type:"CategoryValue",isMany:!0,isReference:!0}]},{name:"SequenceFlow",superClass:["FlowElement"],properties:[{name:"isImmediate",isAttr:!0,type:"Boolean"},{name:"conditionExpression",type:"Expression",xml:{serialize:"xsi:type"}},{name:"sourceRef",type:"FlowNode",isAttr:!0,isReference:!0},{name:"targetRef",type:"FlowNode",isAttr:!0,isReference:!0}]},{name:"FlowElementsContainer",isAbstract:!0,superClass:["BaseElement"],properties:[{name:"laneSets",type:"LaneSet",isMany:!0},{name:"flowElements",type:"FlowElement",isMany:!0}]},{name:"CallableElement",isAbstract:!0,superClass:["RootElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"ioSpecification",type:"InputOutputSpecification",xml:{serialize:"property"}},{name:"supportedInterfaceRef",type:"Interface",isMany:!0,isReference:!0},{name:"ioBinding",type:"InputOutputBinding",isMany:!0,xml:{serialize:"property"}}]},{name:"FlowNode",isAbstract:!0,superClass:["FlowElement"],properties:[{name:"incoming",type:"SequenceFlow",isMany:!0,isReference:!0},{name:"outgoing",type:"SequenceFlow",isMany:!0,isReference:!0},{name:"lanes",type:"Lane",isVirtual:!0,isMany:!0,isReference:!0}]},{name:"CorrelationPropertyRetrievalExpression",superClass:["BaseElement"],properties:[{name:"messagePath",type:"FormalExpression"},{name:"messageRef",type:"Message",isAttr:!0,isReference:!0}]},{name:"CorrelationPropertyBinding",superClass:["BaseElement"],properties:[{name:"dataPath",type:"FormalExpression"},{name:"correlationPropertyRef",type:"CorrelationProperty",isAttr:!0,isReference:!0}]},{name:"Resource",superClass:["RootElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"resourceParameters",type:"ResourceParameter",isMany:!0}]},{name:"ResourceParameter",superClass:["BaseElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"isRequired",isAttr:!0,type:"Boolean"},{name:"type",type:"ItemDefinition",isAttr:!0,isReference:!0}]},{name:"CorrelationSubscription",superClass:["BaseElement"],properties:[{name:"correlationKeyRef",type:"CorrelationKey",isAttr:!0,isReference:!0},{name:"correlationPropertyBinding",type:"CorrelationPropertyBinding",isMany:!0}]},{name:"MessageFlow",superClass:["BaseElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"sourceRef",type:"InteractionNode",isAttr:!0,isReference:!0},{name:"targetRef",type:"InteractionNode",isAttr:!0,isReference:!0},{name:"messageRef",type:"Message",isAttr:!0,isReference:!0}]},{name:"MessageFlowAssociation",superClass:["BaseElement"],properties:[{name:"innerMessageFlowRef",type:"MessageFlow",isAttr:!0,isReference:!0},{name:"outerMessageFlowRef",type:"MessageFlow",isAttr:!0,isReference:!0}]},{name:"InteractionNode",isAbstract:!0,properties:[{name:"incomingConversationLinks",type:"ConversationLink",isVirtual:!0,isMany:!0,isReference:!0},{name:"outgoingConversationLinks",type:"ConversationLink",isVirtual:!0,isMany:!0,isReference:!0}]},{name:"Participant",superClass:["InteractionNode","BaseElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"interfaceRef",type:"Interface",isMany:!0,isReference:!0},{name:"participantMultiplicity",type:"ParticipantMultiplicity"},{name:"endPointRefs",type:"EndPoint",isMany:!0,isReference:!0},{name:"processRef",type:"Process",isAttr:!0,isReference:!0}]},{name:"ParticipantAssociation",superClass:["BaseElement"],properties:[{name:"innerParticipantRef",type:"Participant",isAttr:!0,isReference:!0},{name:"outerParticipantRef",type:"Participant",isAttr:!0,isReference:!0}]},{name:"ParticipantMultiplicity",properties:[{name:"minimum",default:0,isAttr:!0,type:"Integer"},{name:"maximum",default:1,isAttr:!0,type:"Integer"}],superClass:["BaseElement"]},{name:"Collaboration",superClass:["RootElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"isClosed",isAttr:!0,type:"Boolean"},{name:"participants",type:"Participant",isMany:!0},{name:"messageFlows",type:"MessageFlow",isMany:!0},{name:"artifacts",type:"Artifact",isMany:!0},{name:"conversations",type:"ConversationNode",isMany:!0},{name:"conversationAssociations",type:"ConversationAssociation"},{name:"participantAssociations",type:"ParticipantAssociation",isMany:!0},{name:"messageFlowAssociations",type:"MessageFlowAssociation",isMany:!0},{name:"correlationKeys",type:"CorrelationKey",isMany:!0},{name:"choreographyRef",type:"Choreography",isMany:!0,isReference:!0},{name:"conversationLinks",type:"ConversationLink",isMany:!0}]},{name:"ChoreographyActivity",isAbstract:!0,superClass:["FlowNode"],properties:[{name:"participantRefs",type:"Participant",isMany:!0,isReference:!0},{name:"initiatingParticipantRef",type:"Participant",isAttr:!0,isReference:!0},{name:"correlationKeys",type:"CorrelationKey",isMany:!0},{name:"loopType",type:"ChoreographyLoopType",default:"None",isAttr:!0}]},{name:"CallChoreography",superClass:["ChoreographyActivity"],properties:[{name:"calledChoreographyRef",type:"Choreography",isAttr:!0,isReference:!0},{name:"participantAssociations",type:"ParticipantAssociation",isMany:!0}]},{name:"SubChoreography",superClass:["ChoreographyActivity","FlowElementsContainer"],properties:[{name:"artifacts",type:"Artifact",isMany:!0}]},{name:"ChoreographyTask",superClass:["ChoreographyActivity"],properties:[{name:"messageFlowRef",type:"MessageFlow",isMany:!0,isReference:!0}]},{name:"Choreography",superClass:["FlowElementsContainer","Collaboration"]},{name:"GlobalChoreographyTask",superClass:["Choreography"],properties:[{name:"initiatingParticipantRef",type:"Participant",isAttr:!0,isReference:!0}]},{name:"TextAnnotation",superClass:["Artifact"],properties:[{name:"text",type:"String"},{name:"textFormat",default:"text/plain",isAttr:!0,type:"String"}]},{name:"Group",superClass:["Artifact"],properties:[{name:"categoryValueRef",type:"CategoryValue",isAttr:!0,isReference:!0}]},{name:"Association",superClass:["Artifact"],properties:[{name:"associationDirection",type:"AssociationDirection",isAttr:!0},{name:"sourceRef",type:"BaseElement",isAttr:!0,isReference:!0},{name:"targetRef",type:"BaseElement",isAttr:!0,isReference:!0}]},{name:"Category",superClass:["RootElement"],properties:[{name:"categoryValue",type:"CategoryValue",isMany:!0},{name:"name",isAttr:!0,type:"String"}]},{name:"Artifact",isAbstract:!0,superClass:["BaseElement"]},{name:"CategoryValue",superClass:["BaseElement"],properties:[{name:"categorizedFlowElements",type:"FlowElement",isVirtual:!0,isMany:!0,isReference:!0},{name:"value",isAttr:!0,type:"String"}]},{name:"Activity",isAbstract:!0,superClass:["FlowNode"],properties:[{name:"isForCompensation",default:!1,isAttr:!0,type:"Boolean"},{name:"default",type:"SequenceFlow",isAttr:!0,isReference:!0},{name:"ioSpecification",type:"InputOutputSpecification",xml:{serialize:"property"}},{name:"boundaryEventRefs",type:"BoundaryEvent",isMany:!0,isReference:!0},{name:"properties",type:"Property",isMany:!0},{name:"dataInputAssociations",type:"DataInputAssociation",isMany:!0},{name:"dataOutputAssociations",type:"DataOutputAssociation",isMany:!0},{name:"startQuantity",default:1,isAttr:!0,type:"Integer"},{name:"resources",type:"ResourceRole",isMany:!0},{name:"completionQuantity",default:1,isAttr:!0,type:"Integer"},{name:"loopCharacteristics",type:"LoopCharacteristics"}]},{name:"ServiceTask",superClass:["Task"],properties:[{name:"implementation",isAttr:!0,type:"String"},{name:"operationRef",type:"Operation",isAttr:!0,isReference:!0}]},{name:"SubProcess",superClass:["Activity","FlowElementsContainer","InteractionNode"],properties:[{name:"triggeredByEvent",default:!1,isAttr:!0,type:"Boolean"},{name:"artifacts",type:"Artifact",isMany:!0}]},{name:"LoopCharacteristics",isAbstract:!0,superClass:["BaseElement"]},{name:"MultiInstanceLoopCharacteristics",superClass:["LoopCharacteristics"],properties:[{name:"isSequential",default:!1,isAttr:!0,type:"Boolean"},{name:"behavior",type:"MultiInstanceBehavior",default:"All",isAttr:!0},{name:"loopCardinality",type:"Expression",xml:{serialize:"xsi:type"}},{name:"loopDataInputRef",type:"ItemAwareElement",isReference:!0},{name:"loopDataOutputRef",type:"ItemAwareElement",isReference:!0},{name:"inputDataItem",type:"DataInput",xml:{serialize:"property"}},{name:"outputDataItem",type:"DataOutput",xml:{serialize:"property"}},{name:"complexBehaviorDefinition",type:"ComplexBehaviorDefinition",isMany:!0},{name:"completionCondition",type:"Expression",xml:{serialize:"xsi:type"}},{name:"oneBehaviorEventRef",type:"EventDefinition",isAttr:!0,isReference:!0},{name:"noneBehaviorEventRef",type:"EventDefinition",isAttr:!0,isReference:!0}]},{name:"StandardLoopCharacteristics",superClass:["LoopCharacteristics"],properties:[{name:"testBefore",default:!1,isAttr:!0,type:"Boolean"},{name:"loopCondition",type:"Expression",xml:{serialize:"xsi:type"}},{name:"loopMaximum",type:"Integer",isAttr:!0}]},{name:"CallActivity",superClass:["Activity"],properties:[{name:"calledElement",type:"String",isAttr:!0}]},{name:"Task",superClass:["Activity","InteractionNode"]},{name:"SendTask",superClass:["Task"],properties:[{name:"implementation",isAttr:!0,type:"String"},{name:"operationRef",type:"Operation",isAttr:!0,isReference:!0},{name:"messageRef",type:"Message",isAttr:!0,isReference:!0}]},{name:"ReceiveTask",superClass:["Task"],properties:[{name:"implementation",isAttr:!0,type:"String"},{name:"instantiate",default:!1,isAttr:!0,type:"Boolean"},{name:"operationRef",type:"Operation",isAttr:!0,isReference:!0},{name:"messageRef",type:"Message",isAttr:!0,isReference:!0}]},{name:"ScriptTask",superClass:["Task"],properties:[{name:"scriptFormat",isAttr:!0,type:"String"},{name:"script",type:"String"}]},{name:"BusinessRuleTask",superClass:["Task"],properties:[{name:"implementation",isAttr:!0,type:"String"}]},{name:"AdHocSubProcess",superClass:["SubProcess"],properties:[{name:"completionCondition",type:"Expression",xml:{serialize:"xsi:type"}},{name:"ordering",type:"AdHocOrdering",isAttr:!0},{name:"cancelRemainingInstances",default:!0,isAttr:!0,type:"Boolean"}]},{name:"Transaction",superClass:["SubProcess"],properties:[{name:"protocol",isAttr:!0,type:"String"},{name:"method",isAttr:!0,type:"String"}]},{name:"GlobalScriptTask",superClass:["GlobalTask"],properties:[{name:"scriptLanguage",isAttr:!0,type:"String"},{name:"script",isAttr:!0,type:"String"}]},{name:"GlobalBusinessRuleTask",superClass:["GlobalTask"],properties:[{name:"implementation",isAttr:!0,type:"String"}]},{name:"ComplexBehaviorDefinition",superClass:["BaseElement"],properties:[{name:"condition",type:"FormalExpression"},{name:"event",type:"ImplicitThrowEvent"}]},{name:"ResourceRole",superClass:["BaseElement"],properties:[{name:"resourceRef",type:"Resource",isReference:!0},{name:"resourceParameterBindings",type:"ResourceParameterBinding",isMany:!0},{name:"resourceAssignmentExpression",type:"ResourceAssignmentExpression"},{name:"name",isAttr:!0,type:"String"}]},{name:"ResourceParameterBinding",properties:[{name:"expression",type:"Expression",xml:{serialize:"xsi:type"}},{name:"parameterRef",type:"ResourceParameter",isAttr:!0,isReference:!0}],superClass:["BaseElement"]},{name:"ResourceAssignmentExpression",properties:[{name:"expression",type:"Expression",xml:{serialize:"xsi:type"}}],superClass:["BaseElement"]},{name:"Import",properties:[{name:"importType",isAttr:!0,type:"String"},{name:"location",isAttr:!0,type:"String"},{name:"namespace",isAttr:!0,type:"String"}]},{name:"Definitions",superClass:["BaseElement"],properties:[{name:"name",isAttr:!0,type:"String"},{name:"targetNamespace",isAttr:!0,type:"String"},{name:"expressionLanguage",default:"http://www.w3.org/1999/XPath",isAttr:!0,type:"String"},{name:"typeLanguage",default:"http://www.w3.org/2001/XMLSchema",isAttr:!0,type:"String"},{name:"imports",type:"Import",isMany:!0},{name:"extensions",type:"Extension",isMany:!0},{name:"rootElements",type:"RootElement",isMany:!0},{name:"diagrams",isMany:!0,type:"bpmndi:BPMNDiagram"},{name:"exporter",isAttr:!0,type:"String"},{name:"relationships",type:"Relationship",isMany:!0},{name:"exporterVersion",isAttr:!0,type:"String"}]}],enumerations:[{name:"ProcessType",literalValues:[{name:"None"},{name:"Public"},{name:"Private"}]},{name:"GatewayDirection",literalValues:[{name:"Unspecified"},{name:"Converging"},{name:"Diverging"},{name:"Mixed"}]},{name:"EventBasedGatewayType",literalValues:[{name:"Parallel"},{name:"Exclusive"}]},{name:"RelationshipDirection",literalValues:[{name:"None"},{name:"Forward"},{name:"Backward"},{name:"Both"}]},{name:"ItemKind",literalValues:[{name:"Physical"},{name:"Information"}]},{name:"ChoreographyLoopType",literalValues:[{name:"None"},{name:"Standard"},{name:"MultiInstanceSequential"},{name:"MultiInstanceParallel"}]},{name:"AssociationDirection",literalValues:[{name:"None"},{name:"One"},{name:"Both"}]},{name:"MultiInstanceBehavior",literalValues:[{name:"None"},{name:"One"},{name:"All"},{name:"Complex"}]},{name:"AdHocOrdering",literalValues:[{name:"Parallel"},{name:"Sequential"}]}],prefix:"bpmn",xml:{tagAlias:"lowerCase",typePrefix:"t"}}},function(e,t){e.exports={name:"BPMNDI",uri:"http://www.omg.org/spec/BPMN/20100524/DI",types:[{name:"BPMNDiagram",properties:[{name:"plane",type:"BPMNPlane",redefines:"di:Diagram#rootElement"},{name:"labelStyle",type:"BPMNLabelStyle",isMany:!0}],superClass:["di:Diagram"]},{name:"BPMNPlane",properties:[{name:"bpmnElement",isAttr:!0,isReference:!0,type:"bpmn:BaseElement",redefines:"di:DiagramElement#modelElement"}],superClass:["di:Plane"]},{name:"BPMNShape",properties:[{name:"bpmnElement",isAttr:!0,isReference:!0,type:"bpmn:BaseElement",redefines:"di:DiagramElement#modelElement"},{name:"isHorizontal",isAttr:!0,type:"Boolean"},{name:"isExpanded",isAttr:!0,type:"Boolean"},{name:"isMarkerVisible",isAttr:!0,type:"Boolean"},{name:"label",type:"BPMNLabel"},{name:"isMessageVisible",isAttr:!0,type:"Boolean"},{name:"participantBandKind",type:"ParticipantBandKind",isAttr:!0},{name:"choreographyActivityShape",type:"BPMNShape",isAttr:!0,isReference:!0}],superClass:["di:LabeledShape"]},{name:"BPMNEdge",properties:[{name:"label",type:"BPMNLabel"},{name:"bpmnElement",isAttr:!0,isReference:!0,type:"bpmn:BaseElement",redefines:"di:DiagramElement#modelElement"},{name:"sourceElement",isAttr:!0,isReference:!0,type:"di:DiagramElement",redefines:"di:Edge#source"},{name:"targetElement",isAttr:!0,isReference:!0,type:"di:DiagramElement",redefines:"di:Edge#target"},{name:"messageVisibleKind",type:"MessageVisibleKind",isAttr:!0,default:"initiating"}],superClass:["di:LabeledEdge"]},{name:"BPMNLabel",properties:[{name:"labelStyle",type:"BPMNLabelStyle",isAttr:!0,isReference:!0,redefines:"di:DiagramElement#style"}],superClass:["di:Label"]},{name:"BPMNLabelStyle",properties:[{name:"font",type:"dc:Font"}],superClass:["di:Style"]}],enumerations:[{name:"ParticipantBandKind",literalValues:[{name:"top_initiating"},{name:"middle_initiating"},{name:"bottom_initiating"},{name:"top_non_initiating"},{name:"middle_non_initiating"},{name:"bottom_non_initiating"}]},{name:"MessageVisibleKind",literalValues:[{name:"initiating"},{name:"non_initiating"}]}],associations:[],prefix:"bpmndi"}},function(e,t){e.exports={name:"DC",uri:"http://www.omg.org/spec/DD/20100524/DC",types:[{name:"Boolean"},{name:"Integer"},{name:"Real"},{name:"String"},{name:"Font",properties:[{name:"name",type:"String",isAttr:!0},{name:"size",type:"Real",isAttr:!0},{name:"isBold",type:"Boolean",isAttr:!0},{name:"isItalic",type:"Boolean",isAttr:!0},{name:"isUnderline",type:"Boolean",isAttr:!0},{name:"isStrikeThrough",type:"Boolean",isAttr:!0}]},{name:"Point",properties:[{name:"x",type:"Real",default:"0",isAttr:!0},{name:"y",type:"Real",default:"0",isAttr:!0}]},{name:"Bounds",properties:[{name:"x",type:"Real",default:"0",isAttr:!0},{name:"y",type:"Real",default:"0",isAttr:!0},{name:"width",type:"Real",isAttr:!0},{name:"height",type:"Real",isAttr:!0}]}],prefix:"dc",associations:[]}},function(e,t){e.exports={name:"DI",uri:"http://www.omg.org/spec/DD/20100524/DI",types:[{name:"DiagramElement",isAbstract:!0,properties:[{name:"id",type:"String",isAttr:!0,isId:!0},{name:"extension",type:"Extension"},{name:"owningDiagram",type:"Diagram",isReadOnly:!0,isVirtual:!0,isReference:!0},{name:"owningElement",type:"DiagramElement",isReadOnly:!0,isVirtual:!0,isReference:!0},{name:"modelElement",isReadOnly:!0,isVirtual:!0,isReference:!0,type:"Element"},{name:"style",type:"Style",isReadOnly:!0,isVirtual:!0,isReference:!0},{name:"ownedElement",type:"DiagramElement",isReadOnly:!0,isVirtual:!0,isMany:!0}]},{name:"Node",isAbstract:!0,superClass:["DiagramElement"]},{name:"Edge",isAbstract:!0,superClass:["DiagramElement"],properties:[{name:"source",type:"DiagramElement",isReadOnly:!0,isVirtual:!0,isReference:!0},{name:"target",type:"DiagramElement",isReadOnly:!0,isVirtual:!0,isReference:!0},{name:"waypoint",isUnique:!1,isMany:!0,type:"dc:Point",xml:{serialize:"xsi:type"}}]},{name:"Diagram",isAbstract:!0,properties:[{name:"id",type:"String",isAttr:!0,isId:!0},{name:"rootElement",type:"DiagramElement",isReadOnly:!0,isVirtual:!0},{name:"name",isAttr:!0,type:"String"},{name:"documentation",isAttr:!0,type:"String"},{name:"resolution",isAttr:!0,type:"Real"},{name:"ownedStyle",type:"Style",isReadOnly:!0,isVirtual:!0,isMany:!0}]},{name:"Shape",isAbstract:!0,superClass:["Node"],properties:[{name:"bounds",type:"dc:Bounds"}]},{name:"Plane",isAbstract:!0,superClass:["Node"],properties:[{name:"planeElement",type:"DiagramElement",subsettedProperty:"DiagramElement-ownedElement",isMany:!0}]},{name:"LabeledEdge",isAbstract:!0,superClass:["Edge"],properties:[{name:"ownedLabel",type:"Label",isReadOnly:!0,subsettedProperty:"DiagramElement-ownedElement",isVirtual:!0,isMany:!0}]},{name:"LabeledShape",isAbstract:!0,superClass:["Shape"],properties:[{name:"ownedLabel",type:"Label",isReadOnly:!0,subsettedProperty:"DiagramElement-ownedElement",isVirtual:!0,isMany:!0}]},{name:"Label",isAbstract:!0,superClass:["Node"],properties:[{name:"bounds",type:"dc:Bounds"}]},{name:"Style",isAbstract:!0,properties:[{name:"id",type:"String",isAttr:!0,isId:!0}]},{name:"Extension",properties:[{name:"values",type:"Element",isMany:!0}]}],associations:[],prefix:"di",xml:{tagAlias:"lowerCase"}}},function(e,t,n){"use strict";var i=n(47);t.a=i.a},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=(n(0),n(3)),a=n(2),o=n(1),s=function(){function e(e,t){for(var n=0;n').appendTo(p)),h.attr({width:i,height:s});var f=h[0].getContext("2d");f.clearRect(0,0,i,s);var d=i-0,y=s-0;f.fillStyle="rgb("+l+")",f.beginPath(),f.rect(0,0,d,y),f.fill();var m=Math.round(Object(o.l)(n.size));m<10&&(m=10),f.translate(0,0),f.lineWidth=1,f.save();for(var g=.5,v=0;g<=y;)f.restore(),f.strokeStyle=v%4==0?"rgb("+u+")":"rgb("+c+")",f.beginPath(),f.moveTo(0,g),f.lineTo(d,g),g+=m,v++,f.stroke();for(g=.5,v=0;g<=d;)f.restore(),f.strokeStyle=v%4==0?"rgb("+u+")":"rgb("+c+")",f.beginPath(),f.moveTo(g,0),f.lineTo(g,y),g+=m,v++,f.stroke()}}}]),e}();t.a=c},function(e,t,n){"use strict";var i=n(49);t.a=i.a},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(0),a=n(3),o=n(1),s=n(2),l=function(){function e(e,t){for(var n=0;n").appendTo(n),p=Object(o.l)(c.lineStyle.lineWidth+2);p<5&&(p=5);var h=p/2;r.half=h,r.dom=u,u.css({width:p,height:p,"-webkit-border-radius":h,"-moz-border-radius":h,"-ms-border-radius":h,"-o-border-radius":h,"border-radius":h,"z-index":Object(a.a)("#"+l.id).css("z-index")})}this.interval=setInterval(function(){for(var t=0;t=n.maxT&&(n.t=0,n.dom.show());var s=n.t;if("broken"===a.linkerType)for(var l=1;l=c.t&&s=1&&n.dom.hide()}},30)}},{key:"hideDirection",value:function(){this.interval&&clearInterval(this.interval),this.$container.find(".connection-direction").remove()}}]),e}();t.a=u},function(e,t,n){"use strict";var i=n(51);t.a=i.a},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(0),a=n(3),o=n(2),s=n(1),l=function(){function e(e,t){for(var n=0;n0)){f=Object(a.a)("
").appendTo(h),f.css({left:Object(s.l)(l.bounds.x),top:Object(s.l)(l.bounds.y),"z-index":u.length+1}),p.indexOf(i.id)>=0||f.addClass("shape-contour-hover");for(var d=t.size-2,y={"border-color":t.color,"border-radius":t.size/2,width:d,height:d},m=c.getAnchors(),g={x:l.bounds.width/2,y:l.bounds.height/2},v=0;v").appendTo(f),w=o.a.getRotated(g,x,c.shapeStyle.angle);y.left=Object(s.l)(w.x)-t.size/2,y.top=Object(s.l)(w.y)-t.size/2,b.css(y)}}}},{key:"moveAnchors",value:function(e){for(var t=e.elements,n=(e.pos,0);n20||Math.abs(t.y-d.y)>20?(r.a.trigger("element.add",f),null==f.data.targetRef&&null!=f.data.sourceRef&&r.a.trigger("group.connection.show",f)):l.find('.shape-box[data-id="'+f.data.id+'"]').remove(),Object(a.a)(document).off("mouseup.dropConnection")})}),Object(a.a)(document).on("mouseup.connection",function(){r.a.trigger("anchor.point.remove"),t.reset(),u.off("mousedown.connection"),u.off("mousemove.connection"),Object(a.a)(document).off("mouseup.connection")})})}},{key:"showAnchorPoint",value:function(e){var t=this.config,n=this.$container,i=r.a.trigger("orders.get"),o=n.find(".bpd-designer"),s=o.find(".anchor-point");if(0===s.length){s=Object(a.a)("").appendTo(o);var l=s[0].getContext("2d");l.translate(1,1),l.lineWidth=1,l.globalAlpha=.3,l.strokeStyle=t.color,l.fillStyle=t.color,l.beginPath(),l.moveTo(0,15),l.bezierCurveTo(0,-5,30,-5,30,15),l.bezierCurveTo(30,35,0,35,0,15),l.closePath(),l.fill(),l.stroke()}s.css({left:e.x-16,top:e.y-16,"z-index":i.length}).show()}},{key:"hideAnchorPoint",value:function(){this.$container.find(".anchor-point").remove()}},{key:"createConnection",value:function(e,t){var n=r.a.trigger("element.create",{name:"",type:"SequenceFlow",prefix:"obj"}),i=n.data,a=n.plane;return i.sourceRef=e.id,a.waypoint.length>1?a.waypoint[a.waypoint.length-1]={$type:"dc:Point",x:t.x,y:t.y,angle:null}:(a.waypoint[0]={$type:"dc:Point",x:e.x,y:e.y,angle:e.angle},a.waypoint[1]={$type:"dc:Point",x:t.x,y:t.y,angle:null}),r.a.trigger("connection.render",{element:n}),n}},{key:"destroy",value:function(){this.hideAnchors()}}]),e}();t.a=u},function(e,t,n){"use strict";var i=n(53);t.a=i.a},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(0),a=n(3),o=n(1),s=n(2),l=function(){function e(e,t){for(var n=0;n").appendTo(l));var t=s.a.getRelativePos(e.pageX,e.pageY,l),i={"z-index":c.length,left:t.x,top:t.y};t.x>r.x&&(i.left=r.x),t.y>r.y&&(i.top=r.y),i.width=Math.abs(t.x-r.x),i.height=Math.abs(t.y-r.y),n.css(i)}),Object(a.a)(document).off("mouseup.multiselect").on("mouseup.multiselect",function(e){if(null!=n){var r={x:Object(o.i)(n.position().left),y:Object(o.i)(n.position().top),width:Object(o.i)(n.width()),height:Object(o.i)(n.height())},l=s.a.getElementIdsByRange(r);if(e.ctrlKey){var c=u.getSelectedIds();Object(o.h)(l,c)}u.unselect(),u.selectShape({ids:l}),n.remove()}t.reset(),Object(a.a)(document).off("mouseup.multiselect"),i.off("mousemove.multiselect")}),i.off("mousedown.multiselect")})}},{key:"getSelectedIds",value:function(){return this.selectIds}},{key:"getSelected",value:function(){for(var e=[],t=0;t0&&!h&&this.renderSelectBox(p),this.config.onSelected&&(1===p.length?this.config.onSelected(Object(o.j)(this.getSelected()[0])):this.config.onSelected(null)),r.a.trigger("direction.show")}}},{key:"renderSelectBox",value:function(e){var t=this.$container,n=(t.find(".bpd-layout"),t.find(".bpd-designer")),i=r.a.trigger("orders.get"),l=n.find(".shape-select");0===l.length&&(l=Object(a.a)("
").appendTo(n)),l.show(),r.a.trigger("group.hide",l);var c=0,u={};if(1===e.length){var p=r.a.trigger("element.get",e[0]);u.angle=c=p.shape.shapeStyle.angle,u.zindex=p.shape.shapeStyle.zindex,u.height=p.plane.bounds.height,u.width=p.plane.bounds.width,u.x=p.plane.bounds.x,u.y=p.plane.bounds.y,p.shape.groupName&&"CallActivity"!==p.shape.groupName&&r.a.trigger("group.show",this.getSelected())}else u=this.getControlBox(e);var h=s.a.getRotatedBox(u,c);this.renderControlBound(l,u,h,c),l.css({left:Object(o.l)(h.x),top:Object(o.l)(h.y),width:Object(o.l)(h.width),height:Object(o.l)(h.height),"z-index":i.length,display:"block"})}},{key:"renderControlBound",value:function(e,t,n,i){var r=this.config,a=Object(o.l)(n.width),s=Object(o.l)(n.height),l=a+20,c=s+20,u=e.find(".shape-bound");u.attr({width:l,height:c});var p=u[0].getContext("2d");p.lineJoin="round",p.lineWidth=1,p.strokeStyle=r.color,p.globalAlpha=.5,p.save(),p.clearRect(0,0,l,c),p.translate(l/2,c/2),p.rotate(i),p.translate(-l/2,-c/2),p.translate(9.5,9.5);var h={x:Object(o.l)(Math.round(t.x-n.x)),y:Object(o.l)(Math.round(t.y-n.y)),width:Math.floor(Object(o.l)(t.width)+1),heigth:Math.floor(Object(o.l)(t.height)+1)};p.strokeRect(h.x,h.y,h.width,h.heigth),p.restore()}},{key:"getControlBox",value:function(e){for(var t={x1:null,y1:null,x2:null,y2:null},n=0;nt.x2)&&(t.x2=l.x+l.width),(null==t.y2||l.y+l.height>t.y2)&&(t.y2=l.y+l.height)}return{x:t.x1,y:t.y1,width:t.x2-t.x1,height:t.y2-t.y1}}},{key:"moveSelect",value:function(e){var t=e.elements,n=e.pos,i=s.a.getSelectedConnectionIds();if(1!==t.length||1!==i.length)if(i.length>0){var a=r.a.trigger("shape.select.getIds");this.renderSelectBox(a)}else{var o=this.$container.find(".shape-select");o.css({left:parseFloat(o.css("left"))+n.x,top:parseFloat(o.css("top"))+n.y})}}},{key:"unselect",value:function(){var e=this.selectIds;this.selectIds=[];for(var t=0;t=0}},{key:"destroy",value:function(){var e=this.$container.find(".bpd-layout");this.$container.find(".bpd-designer").off("mousedown.select"),e.off("mousedown.multiselect")}}]),e}();t.a=u},function(e,t,n){"use strict";var i=n(55);t.a=i.a},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(0),a=n(3),o=n(2),s=n(1),l=function(){function e(e,t){for(var n=0;n=0?(null!=p.sourceRef&&n.indexOf(p.sourceRef)>=0&&(h.waypoint[0].x+=l.x,h.waypoint[0].y+=l.y,d=!0),null!=p.targetRef&&n.indexOf(p.targetRef)>=0&&(h.waypoint[h.waypoint.length-1].x+=l.x,h.waypoint[h.waypoint.length-1].y+=l.y,y=!0)):((null==p.sourceRef||n.indexOf(p.sourceRef)>=0)&&(h.waypoint[0].x+=l.x,h.waypoint[0].y+=l.y,d=!0),(null==p.targetRef||n.indexOf(p.targetRef)>=0)&&(h.waypoint[h.waypoint.length-1].x+=l.x,h.waypoint[h.waypoint.length-1].y+=l.y,y=!0)),d&&y){for(var m=0;m=c.x-6&&p.x<=c.x+6&&(l.x=c.x),p.y>=c.y-6&&p.y<=c.y+6&&(l.y=c.y))):(e.data.targetRef=h,c.x=p.x,c.y=p.y,c.angle=p.angle,null==h&&(p.x>=l.x-6&&p.x<=l.x+6&&(c.x=l.x),p.y>=l.y-6&&p.y<=l.y+6&&(c.y=l.y))),r.a.trigger("connection.render",{element:e,rendered:!0})}},{key:"moveDom",value:function(e,t,n){var i=e.data,r=e.plane;e.shape;r.bounds.x+=t.x,r.bounds.y+=t.y;var a=this.$container.find('.shape-box[data-id="'+i.id+'"]');a.css({left:parseFloat(a.css("left"))+n.x,top:parseFloat(a.css("top"))+n.y})}},{key:"destroy",value:function(){this.$container.find(".bpd-designer").off("mousedown.drag").off("mousedown.dragconnection")}}]),e}();t.a=c},function(e,t,n){"use strict";var i=n(57);t.a=i.a},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(0),a=n(3),o=(n(2),n(1)),s=function(){function e(e,t){for(var n=0;n=0;g--){var v=l[g].id,x=r.a.trigger("element.get",v),b=(x.data,x.plane),w=x.shape;if(!("SequenceFlow"===w.bpmnName||t.indexOf(v)>=0||w.parent)){var E=b.bounds;if(null==m.h){var S=E.y,C=E.y+E.height/2,A=E.y+E.height;C>=y-2&&C<=y+2?(m.h={type:"middle",y:C},e.y=C-e.height/2):S>=u-2&&S<=u+2?(m.h={type:"top",y:S},e.y=S):A>=p-2&&A<=p+2?(m.h={type:"bottom",y:A},e.y=A-e.height):A>=u-2&&A<=u+2?(m.h={type:"top",y:A},e.y=A):S>=p-2&&S<=p+2&&(m.h={type:"bottom",y:S},e.y=S-e.height)}if(null==m.v){var k=E.x,O=E.x+E.width/2,R=E.x+E.width;O>=d-2&&O<=d+2?(m.v={type:"center",x:O},e.x=O-e.width/2):k>=h-2&&k<=h+2?(m.v={type:"left",x:k},e.x=k):R>=f-2&&R<=f+2?(m.v={type:"right",x:R},e.x=R-e.width):R>=h-2&&R<=h+2?(m.v={type:"left",x:R},e.x=R):k>=f-2&&k<=f+2&&(m.v={type:"right",x:k},e.x=k-e.width)}if(null!=m.h&&null!=m.v)break}}if(this.hideSnapLine(),null!=m.attach){var P=c.find(".snapline-attach");0===P.length&&(P=Object(a.a)("
").appendTo(c));var T=m.attach,M=T.lineStyle.lineWidth;P.css({width:Object(o.l)(T.props.w+M),height:Object(o.l)(T.props.h+M),left:Object(o.l)(T.props.x-M/2)-2,top:Object(o.l)(T.props.y-M/2)-2,"z-index":Object(a.a)("#"+T.id).css("z-index")}).show()}if(null!=m.h){var j=c.find(".snapline-attach-h");0===j.length&&(j=Object(a.a)("
").appendTo(c)),j.css({width:c.width(),left:0,top:Math.round(Object(o.l)(m.h.y)),"z-index":l.length+1}).show()}if(null!=m.v){var N=c.find(".snapline-attach-v");0===N.length&&(N=Object(a.a)("
").appendTo(c)),N.css({height:c.height(),top:0,left:Math.round(Object(o.l)(m.v.x)),"z-index":l.length+1}).show()}return m}},{key:"showSnapLine",value:function(e){var t=e.size,n=e.ids,i=e.render,r=e.element;this.renderSnapLine(t,n,i,r)}},{key:"hideSnapLine",value:function(){var e=this.$container,t=e.find(".bpd-designer");t.find(".snapline-attach-h").hide(),t.find(".snapline-attach-v").hide(),t.find(".snapline-attach").hide()}}]),e}();t.a=c},function(e,t,n){"use strict";var i=n(59);t.a=i.a},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(0),a=n(3),o=(n(2),n(1)),s=function(){function e(e,t){for(var n=0;n").appendTo(n)),e||(e="X: "+Math.round(Object(o.i)(s.left))+"  Y: "+Math.round(Object(o.i)(s.top))),c.html(e),c.css({top:s.top+i.height()+5,left:s.left+i.width()/2-c.outerWidth()/2,"z-index":l.length}).show()}},{key:"hideTooltip",value:function(){this.$container.find(".shape-tooltip").hide()}}]),e}();t.a=c},function(e,t,n){"use strict";var i=n(61);t.a=i.a},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(0),a=n(3),o=n(2),s=n(1),l=function(){function e(e,t){for(var n=0;n0){var h=l.find(".group-icon");h.length<=0&&(h=Object(a.a)("
").appendTo(l));for(var f=r.a.trigger("group.get",u.groupName)||[],d=[],y=0;y').appendTo(h);for(var y=r.a.trigger("group.get",e),m=0;m').appendTo(d);this.renderItem(x.children("canvas")[0],v)}}d.on("mousedown",function(e){e.stopPropagation()})}return d.css({left:t,top:n,"z-index":f.length+1}).show(),d.children(".group-item").off().on("click",function(){var e=Object(a.a)(this).attr("data-shape");i(e),d.hide(),Object(a.a)(document).off("mousedown.group-panel")}),Object(a.a)(document).on("mousedown.group-panel",function(){d.hide(),Object(a.a)(document).off("mousedown.group-panel")}),d}},{key:"hideGroup",value:function(e){(e||this.$container).find(".group-icon").hide()}},{key:"showConnectionGroup",value:function(e){var t=this.$container,n=(this.config,this.bpmns),i=this.filter,o=(e.data,e.plane),l=(e.shape,this),c=r.a.trigger("orders.get"),p=t.find(".bpd-designer");t.find(".connection-group-panel").hide();var h=t.find('.connection-group-panel[data-group="bpmn"]');if(0===h.length){h=Object(a.a)("
").appendTo(p);var f=r.a.trigger("group.get");for(var d in f){for(var y=[],m=0;m0){var g=f[d][0],v=r.a.trigger("shape.create",{type:g,element:Object(s.c)(u)});v.data.text=r.a.trigger("i18n","bpmn."+v.shape.bpmnName),this.renderConnectionItem(v,y,h)}}h.on("mousemove",function(e){e.stopPropagation()}).on("mousedown",function(e){e.stopPropagation()})}h.css({left:Object(s.l)(o.waypoint[o.waypoint.length-1].x),top:Object(s.l)(o.waypoint[o.waypoint.length-1].y),"z-index":c.length}).show(),h.find(".group-icon").off().on("mousedown",function(t){t.stopPropagation();var n=Object(a.a)(this).data("group"),i=Object(a.a)(this).parent().position(),r=h.position(),o=r.left+i.left+Object(a.a)(this).parent().outerWidth()-10,s=r.top+i.top+Object(a.a)(this).parent().outerHeight();l.groupPanel(n,o,s,function(t){l.renderShape(e,t),h.hide(),Object(a.a)(document).off("mousedown.dashboard")})}).on("click",function(e){e.stopPropagation()}),h.children(".group-item").off().on("click",function(){h.hide(),Object(a.a)(document).off("mousedown.dashboard"),l.renderShape(e,Object(a.a)(this).data("shape"))}),Object(a.a)(document).on("mousedown.dashboard",function(){h.hide(),Object(a.a)(document).off("mousedown.dashboard")})}},{key:"renderShape",value:function(e,t){var n=e.plane.waypoint,i=o.a.getEndpointAngle(e.shape,"targetRef"),a=o.a.getAngleDir(i),s=r.a.trigger("i18n","bpmn."+t),l=r.a.trigger("element.create",{name:s,type:t,prefix:"obj"}),c=l.shape.getAnchors(),u=void 0,p=null;switch(a){case 1:p=null;for(var h=0;hp)&&(p=y.x,u=y)}break;case 3:p=null;for(var m=0;mp)&&(p=g.y,u=g)}break;case 4:p=null;for(var v=0;v").appendTo(n);this.renderItem(s.children("canvas")[0],e),t.length>1&&s.append("
")}},{key:"renderItem",value:function(e,t){var n=this.config,i=(t.data,t.plane),a=t.shape,o=e.getContext("2d"),l={x:0,y:0,width:i.bounds.width,height:i.bounds.height};o.clearRect(0,0,n.width,n.height),(l.width>=n.width||l.height>=n.width)&&(i.bounds.width>=i.bounds.height?(l.width=n.width-2*a.lineStyle.lineWidth,l.height=parseInt(i.bounds.height/i.bounds.width*l.width),l.height<20&&(l.height=20)):(l.height=n.height-2*a.lineStyle.lineWidth,l.width=parseInt(i.bounds.width/i.bounds.height*l.height),l.width<20&&(l.width=20))),i.bounds=l;for(var c=Object(s.c)(a.getPath()),u={x:l.x+l.width/2,y:l.y+l.height/2},p=0;p0&&t.preventDefault()}),Object(a.a)(document).off("keydown.hotkey","input,textarea,select").on("keydown.hotkey","input,textarea,select",function(e){e.stopPropagation()})}},{key:"bindKey",value:function(e){var t=e.key,n=e.fun,i=t.split("+");if(1===i.length)if("Ctrl"===i[0]||"Alt"===i[0]||"Shift"===i[0])console.log("error: "+i[0]);else{var r=o.a[i[0]];this.funs[r]||(this.funs[r]=[]),this.funs[r].push(n)}else if(2===i.length)if("Ctrl"===i[0]||"Alt"===i[0]||"Shift"===i[0])if("Ctrl"!==i[1]&&"Alt"!==i[1]&&"Shift"!==i[1]){var a=this.funs[i[0]],s=o.a[i[1]];a[s]||(a[s]=[]),a[s].push(n)}else console.log("组合键2错误");else console.log("组合键1错误");else console.log("组合键数量错误")}},{key:"clearKey",value:function(){this.cancel(),this.funs={Ctrl:{},Alt:{},Shift:{}}}},{key:"cancel",value:function(){Object(a.a)(document).off("keydown.hotkey")}}]),e}();t.a=l},function(e,t,n){"use strict";t.a={0:48,1:49,2:50,3:51,4:52,5:53,6:54,7:55,8:56,9:57,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,Esc:27,BackSpace:8,Tab:9,Spacebar:32,Shift:16,Enter:13,Control:17,Alt:18,Left:37,Up:38,Right:39,Down:40,Insert:45,Delete:46,End:35,Home:36,PageUp:33,PageDown:34}},function(e,t,n){"use strict";var i=n(66);t.a=i.a},function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=n(0),a=n(67),o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"zh_CN";i(this,e),this.local=t,this.init()}return o(e,[{key:"init",value:function(){r.a.on("i18n",this.t.bind(this)),r.a.on("i18n.change",this.change.bind(this))}},{key:"t",value:function(e){for(var t=e.split("."),n=a.a[this.local],i=0;i0&&void 0!==arguments[0]?arguments[0]:"zh_CN";this.local=e}}]),e}();t.a=s},function(e,t,n){"use strict";var i=n(68),r=n(69);t.a={zh_CN:i.a,zh_TW:r.a}},function(e,t,n){"use strict";t.a={bpmn:{StartEvent:"开始事件",MessageStartEvent:"消息开始事件",TimerStartEvent:"时间开始事件",SignalStartEvent:"信号开始事件",UserTask:"人工任务",ServiceTask:"系统任务",ScriptTask:"脚本任务",ManualTask:"手工任务",BusinessRuleTask:"业务规则任务",SendTask:"发送任务",ReceiveTask:"接收任务",ParallelGateway:"并行网关",InclusiveGateway:"包容网关",ExclusiveGateway:"排他网关",EventBasedGateway:"事件网关",ComplexGateway:"复杂网关",IntermediateCatchEvent:"捕获中间事件",TimerIntermediateCatchEvent:"捕获时间事件",MessageIntermediateCatchEvent:"捕获消息事件",SignalIntermediateCatchEvent:"捕获信号事件",IntermediateThrowingEvent:"抛出中间事件",MessageIntermediateThrowingEvent:"抛出消息事件",SignalIntermediateThrowingEvent:"抛出信号事件",CompensateIntermediateThrowingEvent:"抛出补偿事件",BoundaryEvent:"边界事件",CancelBoundaryEvent:"边界取消事件",CompensateBoundaryEvent:"边界补偿事件",ErrorBoundaryEvent:"边界错误事件",MessageBoundaryEvent:"边界消息事件",SignalBoundaryEvent:"边界信号事件",TimerBoundaryEvent:"边界时间事件",CallActivity:"调用子流程",SubProcess:"子流程",Transaction:"事务",TextAnnotation:"注释",HorizontalPool:"泳池",HorizontalLane:"泳道",VerticalPool:"泳池",VerticalLane:"泳道",EndEvent:"结束事件",TerminateEndEvent:"终止事件",MessageEndEvent:"消息结束事件",SignalEndEvent:"信号结束事件",ErrorEndEvent:"错误结束事件",CancelEndEvent:"结束取消事件",CompensateEndEvent:"结束补偿事件"}}},function(e,t,n){"use strict";t.a={bpmn:{StartEvent:"開始事件",MessageStartEvent:"消息開始事件",TimerStartEvent:"時間開始事件",SignalStartEvent:"信號開始事件",UserTask:"人工任務",ServiceTask:"系統任務",ScriptTask:"腳本任務",ManualTask:"手工任務",BusinessRuleTask:"業務規則任務",SendTask:"發送任務",ReceiveTask:"接收任務",ParallelGateway:"並行網關",InclusiveGateway:"包容網關",ExclusiveGateway:"排他網關",EventBasedGateway:"事件網關",ComplexGateway:"復雜網關",IntermediateCatchEvent:"捕獲中間事件",TimerIntermediateCatchEvent:"捕獲時間事件",MessageIntermediateCatchEvent:"捕獲消息事件",SignalIntermediateCatchEvent:"捕獲信號事件",IntermediateThrowingEvent:"拋出中間事件",MessageIntermediateThrowingEvent:"拋出消息事件",SignalIntermediateThrowingEvent:"拋出信號事件",CompensateIntermediateThrowingEvent:"拋出補償事件",BoundaryEvent:"邊界事件",CancelBoundaryEvent:"邊界取消事件",CompensateBoundaryEvent:"邊界補償事件",ErrorBoundaryEvent:"邊界錯誤事件",MessageBoundaryEvent:"邊界消息事件",SignalBoundaryEvent:"邊界信號事件",TimerBoundaryEvent:"邊界時間事件",CallActivity:"調用子流程",SubProcess:"子流程",Transaction:"事務",TextAnnotation:"註釋",HorizontalPool:"泳池",HorizontalLane:"泳道",VerticalPool:"泳池",VerticalLane:"泳道",EndEvent:"結束事件",TerminateEndEvent:"終止事件",MessageEndEvent:"消息結束事件",SignalEndEvent:"信號結束事件",ErrorEndEvent:"錯誤結束事件",CancelEndEvent:"結束取消事件",CompensateEndEvent:"結束補償事件"}}}])}); \ No newline at end of file +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else { + var a = factory(); + for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; + } +})(typeof self !== 'undefined' ? self : this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 9); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_utils__ = __webpack_require__(1);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\nvar str = function str(s) {\n if (s == null) {\n return null;\n }\n s = s.replace(/^\\s+|\\s+$/g, '');\n return s.length > 0 ? s.toLowerCase() : null;\n};\n\n/**\r\n * 事件管理\r\n */\n\nvar Handler = function () {\n function Handler() {\n _classCallCheck(this, Handler);\n\n this.fns = [];\n this.datas = [];\n }\n /**\r\n * 添加事件\r\n * @param fn 事件\r\n * @param data 数据\r\n */\n\n\n _createClass(Handler, [{\n key: 'add',\n value: function add(fn, data) {\n this.fns.push(fn);\n this.datas.push(data);\n }\n /**\r\n * 移除事件\r\n * @param fn 事件\r\n */\n\n }, {\n key: 'remove',\n value: function remove(fn) {\n var i = this.fns.indexOf(fn);\n if (i >= 0) {\n this.fns.splice(i, 1);\n this.datas.splice(i, 1);\n }\n }\n /**\r\n * 执行事件\r\n * @param sender 触发对象\r\n * @param data 数据\r\n */\n\n }, {\n key: 'invoke',\n value: function invoke(sender, data) {\n var _this = this;\n\n var res = null;\n this.fns.forEach(function (fn, i) {\n try {\n res = fn(sender, data, _this.datas[i]);\n } catch (error) {\n console.error(error);\n }\n });\n return res;\n }\n }]);\n\n return Handler;\n}();\n\n/**\r\n * 事件总线\r\n */\n\n\nvar EventBus = function () {\n function EventBus() {\n var handers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, EventBus);\n\n this.handers = handers;\n }\n /**\r\n * 绑定事件\r\n * @param eventName 事件名称\r\n * @param fn 事件\r\n * @param data 数据\r\n */\n\n\n _createClass(EventBus, [{\n key: 'on',\n value: function on(eventName, fnOrData, fn) {\n eventName = str(eventName);\n if (eventName == null) {\n throw new Error('事件名无效');\n }\n if (!Object(__WEBPACK_IMPORTED_MODULE_0__utils_utils__[\"f\" /* isFunc */])(fn)) {\n var temp = fn;\n fn = fnOrData;\n fnOrData = temp;\n }\n if (!Object(__WEBPACK_IMPORTED_MODULE_0__utils_utils__[\"f\" /* isFunc */])(fn)) {\n throw new Error('必须提供事件函数');\n }\n\n var handle = this.handers[eventName];\n if (handle == null) {\n handle = new Handler();\n this.handers[eventName] = handle;\n }\n handle.add(fn, fnOrData);\n }\n /**\r\n * 解绑事件\r\n * @param eventName 事件名称\r\n * @param fn 事件\r\n */\n\n }, {\n key: 'off',\n value: function off(eventName, fn) {\n eventName = str(eventName);\n if (eventName == null) {\n return;\n }\n var handle = this.handers[eventName];\n if (handle != null) {\n if (fn == null) {\n delete this.handers[eventName];\n } else {\n handle.remove(fn);\n }\n }\n }\n /**\r\n * 销毁\r\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n this.handers = {};\n }\n /**\r\n * 触发事件\r\n * @param eventName 事件名称\r\n * @param sender 触发对象\r\n * @param data 数据\r\n */\n\n }, {\n key: 'trigger',\n value: function trigger(eventName, sender, data) {\n eventName = str(eventName);\n if (eventName == null) {\n return;\n }\n var handle = this.handers[eventName];\n if (handle != null) {\n return handle.invoke(sender, data);\n }\n }\n }]);\n\n return EventBus;\n}();\n\nvar instance = new EventBus();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (instance);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvY29yZS9ldmVudEJ1cy5qcz80NjE2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRnVuYyB9IGZyb20gJy4uL3V0aWxzL3V0aWxzJ1xyXG5cclxuY29uc3Qgc3RyID0gcyA9PiB7XHJcbiAgaWYgKHMgPT0gbnVsbCkge1xyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcbiAgcyA9IHMucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXHJcbiAgcmV0dXJuIHMubGVuZ3RoID4gMCA/IHMudG9Mb3dlckNhc2UoKSA6IG51bGxcclxufVxyXG5cclxuLyoqXHJcbiAqIOS6i+S7tueuoeeQhlxyXG4gKi9cclxuY2xhc3MgSGFuZGxlciB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmZucyA9IFtdXHJcbiAgICB0aGlzLmRhdGFzID0gW11cclxuICB9XHJcbiAgLyoqXHJcbiAgICog5re75Yqg5LqL5Lu2XHJcbiAgICogQHBhcmFtIGZuIOS6i+S7tlxyXG4gICAqIEBwYXJhbSBkYXRhIOaVsOaNrlxyXG4gICAqL1xyXG4gIGFkZChmbiwgZGF0YSkge1xyXG4gICAgdGhpcy5mbnMucHVzaChmbilcclxuICAgIHRoaXMuZGF0YXMucHVzaChkYXRhKVxyXG4gIH1cclxuICAvKipcclxuICAgKiDnp7vpmaTkuovku7ZcclxuICAgKiBAcGFyYW0gZm4g5LqL5Lu2XHJcbiAgICovXHJcbiAgcmVtb3ZlKGZuKSB7XHJcbiAgICBjb25zdCBpID0gdGhpcy5mbnMuaW5kZXhPZihmbilcclxuICAgIGlmIChpID49IDApIHtcclxuICAgICAgdGhpcy5mbnMuc3BsaWNlKGksIDEpXHJcbiAgICAgIHRoaXMuZGF0YXMuc3BsaWNlKGksIDEpXHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOaJp+ihjOS6i+S7tlxyXG4gICAqIEBwYXJhbSBzZW5kZXIg6Kem5Y+R5a+56LGhXHJcbiAgICogQHBhcmFtIGRhdGEg5pWw5o2uXHJcbiAgICovXHJcbiAgaW52b2tlKHNlbmRlciwgZGF0YSkge1xyXG4gICAgbGV0IHJlcyA9IG51bGxcclxuICAgIHRoaXMuZm5zLmZvckVhY2goKGZuLCBpKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgcmVzID0gZm4oc2VuZGVyLCBkYXRhLCB0aGlzLmRhdGFzW2ldKVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gcmVzXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICog5LqL5Lu25oC757q/XHJcbiAqL1xyXG5jbGFzcyBFdmVudEJ1cyB7XHJcbiAgY29uc3RydWN0b3IoaGFuZGVycyA9IHt9KSB7XHJcbiAgICB0aGlzLmhhbmRlcnMgPSBoYW5kZXJzXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOe7keWumuS6i+S7tlxyXG4gICAqIEBwYXJhbSBldmVudE5hbWUg5LqL5Lu25ZCN56ewXHJcbiAgICogQHBhcmFtIGZuIOS6i+S7tlxyXG4gICAqIEBwYXJhbSBkYXRhIOaVsOaNrlxyXG4gICAqL1xyXG4gIG9uKGV2ZW50TmFtZSwgZm5PckRhdGEsIGZuKSB7XHJcbiAgICBldmVudE5hbWUgPSBzdHIoZXZlbnROYW1lKVxyXG4gICAgaWYgKGV2ZW50TmFtZSA9PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcign5LqL5Lu25ZCN5peg5pWIJylcclxuICAgIH1cclxuICAgIGlmICghaXNGdW5jKGZuKSkge1xyXG4gICAgICB2YXIgdGVtcCA9IGZuXHJcbiAgICAgIGZuID0gZm5PckRhdGFcclxuICAgICAgZm5PckRhdGEgPSB0ZW1wXHJcbiAgICB9XHJcbiAgICBpZiAoIWlzRnVuYyhmbikpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCflv4Xpobvmj5Dkvpvkuovku7blh73mlbAnKVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBoYW5kbGUgPSB0aGlzLmhhbmRlcnNbZXZlbnROYW1lXVxyXG4gICAgaWYgKGhhbmRsZSA9PSBudWxsKSB7XHJcbiAgICAgIGhhbmRsZSA9IG5ldyBIYW5kbGVyKClcclxuICAgICAgdGhpcy5oYW5kZXJzW2V2ZW50TmFtZV0gPSBoYW5kbGVcclxuICAgIH1cclxuICAgIGhhbmRsZS5hZGQoZm4sIGZuT3JEYXRhKVxyXG4gIH1cclxuICAvKipcclxuICAgKiDop6Pnu5Hkuovku7ZcclxuICAgKiBAcGFyYW0gZXZlbnROYW1lIOS6i+S7tuWQjeensFxyXG4gICAqIEBwYXJhbSBmbiDkuovku7ZcclxuICAgKi9cclxuICBvZmYoZXZlbnROYW1lLCBmbikge1xyXG4gICAgZXZlbnROYW1lID0gc3RyKGV2ZW50TmFtZSlcclxuICAgIGlmIChldmVudE5hbWUgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnN0IGhhbmRsZSA9IHRoaXMuaGFuZGVyc1tldmVudE5hbWVdXHJcbiAgICBpZiAoaGFuZGxlICE9IG51bGwpIHtcclxuICAgICAgaWYgKGZuID09IG51bGwpIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5oYW5kZXJzW2V2ZW50TmFtZV1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBoYW5kbGUucmVtb3ZlKGZuKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOmUgOavgVxyXG4gICAqL1xyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmhhbmRlcnMgPSB7fVxyXG4gIH1cclxuICAvKipcclxuICAgKiDop6blj5Hkuovku7ZcclxuICAgKiBAcGFyYW0gZXZlbnROYW1lIOS6i+S7tuWQjeensFxyXG4gICAqIEBwYXJhbSBzZW5kZXIg6Kem5Y+R5a+56LGhXHJcbiAgICogQHBhcmFtIGRhdGEg5pWw5o2uXHJcbiAgICovXHJcbiAgdHJpZ2dlcihldmVudE5hbWUsIHNlbmRlciwgZGF0YSkge1xyXG4gICAgZXZlbnROYW1lID0gc3RyKGV2ZW50TmFtZSlcclxuICAgIGlmIChldmVudE5hbWUgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnN0IGhhbmRsZSA9IHRoaXMuaGFuZGVyc1tldmVudE5hbWVdXHJcbiAgICBpZiAoaGFuZGxlICE9IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGhhbmRsZS5pbnZva2Uoc2VuZGVyLCBkYXRhKVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaW5zdGFuY2UgPSBuZXcgRXZlbnRCdXMoKVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgaW5zdGFuY2VcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9jb3JlL2V2ZW50QnVzLmpzIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFHQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7Ozs7O0FBR0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQUdBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///0\n"); + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return loadFont; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return isFunc; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return convertFirstLetter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return cloneDeep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return mergeArray; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"k\", function() { return setScale; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return restoreScale; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return getBpmnNameByType; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return canvasActions; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return checkBpmnShape; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"j\", function() { return setExportData; });\n/* unused harmony export setExportExtensions */\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\r\n * 验证字体文件加载\r\n * @param font\r\n * @param callback\r\n */\nvar loadFont = function loadFont(font) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n\n var span = document.createElement('span');\n // 这几个字母和符号宽度比较容易变化\n span.innerHTML = '';\n // 设置为不可见,但可以测量宽度\n span.style.visibility = 'hidden';\n // 字体大小为 500px,如果宽度变化比较容易区分\n span.style.fontSize = '500px';\n // 添加到页面\n document.body.appendChild(span);\n // 获取宽度\n var widthNow = span.offsetWidth;\n // 获取高度\n var heightNow = span.offsetHeight;\n // 设置字体\n span.style.fontFamily = font;\n // 每 0.05 秒检查一次是否加载\n var intervalCheck = setInterval(function () {\n // 宽度变化,说明字体被加载\n if (span.offsetWidth !== widthNow || span.offsetHeight !== heightNow) {\n clearInterval(intervalCheck);\n // 设置字体为\n // ele.css('font-family', font)\n // 移除 span\n document.body.removeChild(span);\n span = null;\n callback();\n }\n }, 50);\n};\n\n/**\r\n * 判断是否function\r\n * @param {*} fn\r\n */\nvar isFunc = function isFunc(fn) {\n return typeof fn === 'function';\n};\n\n/**\r\n * 首字母大小写转换\r\n * @param {*} str\r\n * @param {*} type\r\n */\nvar convertFirstLetter = function convertFirstLetter(str, type) {\n if (type === 'uppercase') {\n return str.substring(0, 1).toUpperCase() + str.substring(1);\n } else {\n return str.substring(0, 1).toLowerCase() + str.substring(1);\n }\n};\n\n/**\r\n * 深拷贝\r\n * @param {Object|Array} obj 需要深拷贝的对象\r\n * @return {Object|Array} 深拷贝出来的对象\r\n */\nvar cloneDeep = function cloneDeep(obj) {\n return JSON.parse(JSON.stringify(obj));\n};\n\n/**\r\n * 数组合并去重\r\n * @param {*} arr1\r\n * @param {*} arr2\r\n */\nvar mergeArray = function mergeArray(array1, array2) {\n var array = [];\n var array3 = array1.concat(array2);\n\n for (var i = 0; i < array3.length; i++) {\n for (var j = i + 1; j < array3.length; j++) {\n if (array3[i] === array3[j]) {\n j = ++i;\n }\n }\n array.push(array3[i]);\n }\n return array;\n};\n\n/**\r\n * 设置比例\r\n * @param {*} number\r\n * @param {*} scale\r\n */\nvar setScale = function setScale(data) {\n var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') {\n var newData = {};\n for (var key in data) {\n newData[key] = data[key];\n if (typeof data[key] === 'number') {\n newData[key] = setScale(newData[key], scale);\n }\n }\n return newData;\n }\n return data * scale;\n};\n\n/**\r\n * 恢复比例\r\n * @param {*} number\r\n * @param {*} scale\r\n */\n\nvar restoreScale = function restoreScale(data) {\n var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') {\n var newData = {};\n for (var key in data) {\n newData[key] = data[key];\n if (typeof data[key] === 'number') {\n newData[key] = restoreScale(newData[key], scale);\n }\n }\n return newData;\n }\n return data / scale;\n};\n\n/**\r\n * 获取bpmn名称\r\n * @param {*} type\r\n */\nvar getBpmnNameByType = function getBpmnNameByType(type) {\n if (type.indexOf(':') >= 0) {\n return type.substr(type.indexOf(':') + 1);\n }\n return '';\n};\n\n/**\r\n * canvas操作\r\n */\nvar canvasActions = {\n font: function font(canvas, data) {\n var fontStyle = data.fontStyle,\n fontVariant = data.fontVariant,\n fontWeight = data.fontWeight,\n fontSize = data.fontSize,\n fontFamily = data.fontFamily,\n content = data.content,\n fontColor = data.fontColor,\n textAlign = data.textAlign,\n textBaseline = data.textBaseline,\n x = data.x,\n y = data.y;\n // 水平\n\n if (textAlign) {\n canvas.textAlign = textAlign;\n }\n // 垂直\n if (textBaseline) {\n canvas.textBaseline = textBaseline;\n }\n // 颜色\n if (fontColor) {\n canvas.fillStyle = fontColor;\n }\n canvas.font = fontStyle + ' ' + fontVariant + ' ' + fontWeight + ' ' + fontSize + ' ' + fontFamily;\n\n // 绘制内容\n canvas.fillText(content, x, y);\n },\n move: function move(canvas, position) {\n canvas.moveTo(position.x, position.y);\n },\n line: function line(canvas, position) {\n canvas.lineTo(position.x, position.y);\n },\n curve: function curve(canvas, position) {\n canvas.bezierCurveTo(position.x1, position.y1, position.x2, position.y2, position.x, position.y);\n },\n quadraticCurve: function quadraticCurve(canvas, position) {\n canvas.quadraticCurveTo(position.x1, position.y1, position.x, position.y);\n },\n close: function close(canvas) {\n canvas.closePath();\n }\n\n /**\r\n *\r\n * @param {*} bpmns\r\n * @param {*} filter\r\n * @param {*} type\r\n */\n};var checkBpmnShape = function checkBpmnShape(bpmns, filter, type) {\n var support = '';\n bpmns.forEach(function (bpmn, index) {\n if (filter.indexOf(bpmn) < 0) {\n support += bpmn + (index !== bpmns.length ? ',' : '');\n }\n });\n if (support.indexOf(type) === -1) {\n return true;\n }\n return false;\n};\n\n/**\r\n *\r\n * @param {*} bpmns\r\n * @param {*} filter\r\n * @param {*} type\r\n */\nvar setExportData = function setExportData(element) {\n var exportData = {};\n if (element.$type === 'bpmn:Process') {\n exportData.id = element.id;\n exportData.extensions = setExportExtensions(element.extensionElements.values || []);\n } else {\n var data = element.data,\n shape = element.shape;\n\n exportData.bpmnName = shape.bpmnName;\n exportData.groupName = shape.groupName;\n for (var key in data) {\n switch (key) {\n case '$type':\n break;\n case 'extensionElements':\n exportData.extensions = setExportExtensions(data[key].values || []);\n break;\n default:\n exportData[key] = data[key];\n break;\n }\n }\n }\n\n return exportData;\n};\n\n/**\r\n *\r\n * @param {*} values\r\n */\nvar setExportExtensions = function setExportExtensions(values) {\n var extensions = [];\n for (var i = 0; i < values.length; i += 1) {\n var item = Object.assign({}, cloneDeep(values[i]), values[i].$attrs);\n if (item.$type) {\n item.name = item.$type;\n delete item.$type;\n }\n extensions.push(item);\n }\n\n return extensions;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvdXRpbHMvdXRpbHMuanM/YmU3MyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICog6aqM6K+B5a2X5L2T5paH5Lu25Yqg6L29XHJcbiAqIEBwYXJhbSBmb250XHJcbiAqIEBwYXJhbSBjYWxsYmFja1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGxvYWRGb250ID0gKGZvbnQsIGNhbGxiYWNrID0gKCkgPT4ge30pID0+IHtcclxuICBsZXQgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKVxyXG4gIC8vIOi/meWHoOS4quWtl+avjeWSjOespuWPt+WuveW6puavlOi+g+WuueaYk+WPmOWMllxyXG4gIHNwYW4uaW5uZXJIVE1MID0gJyYjeGU4MTA7J1xyXG4gIC8vIOiuvue9ruS4uuS4jeWPr+inge+8jOS9huWPr+S7pea1i+mHj+WuveW6plxyXG4gIHNwYW4uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nXHJcbiAgLy8g5a2X5L2T5aSn5bCP5Li6IDUwMHB477yM5aaC5p6c5a695bqm5Y+Y5YyW5q+U6L6D5a655piT5Yy65YiGXHJcbiAgc3Bhbi5zdHlsZS5mb250U2l6ZSA9ICc1MDBweCdcclxuICAvLyDmt7vliqDliLDpobXpnaJcclxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNwYW4pXHJcbiAgLy8g6I635Y+W5a695bqmXHJcbiAgbGV0IHdpZHRoTm93ID0gc3Bhbi5vZmZzZXRXaWR0aFxyXG4gIC8vIOiOt+WPlumrmOW6plxyXG4gIGxldCBoZWlnaHROb3cgPSBzcGFuLm9mZnNldEhlaWdodFxyXG4gIC8vIOiuvue9ruWtl+S9k1xyXG4gIHNwYW4uc3R5bGUuZm9udEZhbWlseSA9IGZvbnRcclxuICAvLyDmr48gMC4wNSDnp5Lmo4Dmn6XkuIDmrKHmmK/lkKbliqDovb1cclxuICBsZXQgaW50ZXJ2YWxDaGVjayA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgIC8vIOWuveW6puWPmOWMlu+8jOivtOaYjuWtl+S9k+iiq+WKoOi9vVxyXG4gICAgaWYgKHNwYW4ub2Zmc2V0V2lkdGggIT09IHdpZHRoTm93IHx8IHNwYW4ub2Zmc2V0SGVpZ2h0ICE9PSBoZWlnaHROb3cpIHtcclxuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbENoZWNrKVxyXG4gICAgICAvLyDorr7nva7lrZfkvZPkuLpcclxuICAgICAgLy8gZWxlLmNzcygnZm9udC1mYW1pbHknLCBmb250KVxyXG4gICAgICAvLyDnp7vpmaQgc3BhblxyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHNwYW4pXHJcbiAgICAgIHNwYW4gPSBudWxsXHJcbiAgICAgIGNhbGxiYWNrKClcclxuICAgIH1cclxuICB9LCA1MClcclxufVxyXG5cclxuLyoqXHJcbiAqIOWIpOaWreaYr+WQpmZ1bmN0aW9uXHJcbiAqIEBwYXJhbSB7Kn0gZm5cclxuICovXHJcbmV4cG9ydCBjb25zdCBpc0Z1bmMgPSBmbiA9PiB7XHJcbiAgcmV0dXJuIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJ1xyXG59XHJcblxyXG4vKipcclxuICog6aaW5a2X5q+N5aSn5bCP5YaZ6L2s5o2iXHJcbiAqIEBwYXJhbSB7Kn0gc3RyXHJcbiAqIEBwYXJhbSB7Kn0gdHlwZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNvbnZlcnRGaXJzdExldHRlciA9IChzdHIsIHR5cGUpID0+IHtcclxuICBpZiAodHlwZSA9PT0gJ3VwcGVyY2FzZScpIHtcclxuICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIDEpLnRvTG93ZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICog5rex5ou36LSdXHJcbiAqIEBwYXJhbSAge09iamVjdHxBcnJheX0gb2JqIOmcgOimgea3seaLt+i0neeahOWvueixoVxyXG4gKiBAcmV0dXJuIHtPYmplY3R8QXJyYXl9ICAgICDmt7Hmi7fotJ3lh7rmnaXnmoTlr7nosaFcclxuICovXHJcbmV4cG9ydCBjb25zdCBjbG9uZURlZXAgPSBvYmogPT4ge1xyXG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDmlbDnu4TlkIjlubbljrvph41cclxuICogQHBhcmFtIHsqfSBhcnIxXHJcbiAqIEBwYXJhbSB7Kn0gYXJyMlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IG1lcmdlQXJyYXkgPSAoYXJyYXkxLCBhcnJheTIpID0+IHtcclxuICBjb25zdCBhcnJheSA9IFtdXHJcbiAgY29uc3QgYXJyYXkzID0gYXJyYXkxLmNvbmNhdChhcnJheTIpXHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBhcnJheTMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgaWYgKGFycmF5M1tpXSA9PT0gYXJyYXkzW2pdKSB7XHJcbiAgICAgICAgaiA9ICsraVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhcnJheS5wdXNoKGFycmF5M1tpXSlcclxuICB9XHJcbiAgcmV0dXJuIGFycmF5XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDorr7nva7mr5TkvotcclxuICogQHBhcmFtIHsqfSBudW1iZXJcclxuICogQHBhcmFtIHsqfSBzY2FsZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHNldFNjYWxlID0gKGRhdGEsIHNjYWxlID0gMSkgPT4ge1xyXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcclxuICAgIGNvbnN0IG5ld0RhdGEgPSB7fVxyXG4gICAgZm9yIChsZXQga2V5IGluIGRhdGEpIHtcclxuICAgICAgbmV3RGF0YVtrZXldID0gZGF0YVtrZXldXHJcbiAgICAgIGlmICh0eXBlb2YgZGF0YVtrZXldID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIG5ld0RhdGFba2V5XSA9IHNldFNjYWxlKG5ld0RhdGFba2V5XSwgc2NhbGUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBuZXdEYXRhXHJcbiAgfVxyXG4gIHJldHVybiBkYXRhICogc2NhbGVcclxufVxyXG5cclxuLyoqXHJcbiAqIOaBouWkjeavlOS+i1xyXG4gKiBAcGFyYW0geyp9IG51bWJlclxyXG4gKiBAcGFyYW0geyp9IHNjYWxlXHJcbiAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IHJlc3RvcmVTY2FsZSA9IChkYXRhLCBzY2FsZSA9IDEpID0+IHtcclxuICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XHJcbiAgICBjb25zdCBuZXdEYXRhID0ge31cclxuICAgIGZvciAobGV0IGtleSBpbiBkYXRhKSB7XHJcbiAgICAgIG5ld0RhdGFba2V5XSA9IGRhdGFba2V5XVxyXG4gICAgICBpZiAodHlwZW9mIGRhdGFba2V5XSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBuZXdEYXRhW2tleV0gPSByZXN0b3JlU2NhbGUobmV3RGF0YVtrZXldLCBzY2FsZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ld0RhdGFcclxuICB9XHJcbiAgcmV0dXJuIGRhdGEgLyBzY2FsZVxyXG59XHJcblxyXG4vKipcclxuICog6I635Y+WYnBtbuWQjeensFxyXG4gKiBAcGFyYW0geyp9IHR5cGVcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRCcG1uTmFtZUJ5VHlwZSA9IHR5cGUgPT4ge1xyXG4gIGlmICh0eXBlLmluZGV4T2YoJzonKSA+PSAwKSB7XHJcbiAgICByZXR1cm4gdHlwZS5zdWJzdHIodHlwZS5pbmRleE9mKCc6JykgKyAxKVxyXG4gIH1cclxuICByZXR1cm4gJydcclxufVxyXG5cclxuLyoqXHJcbiAqIGNhbnZhc+aTjeS9nFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNhbnZhc0FjdGlvbnMgPSB7XHJcbiAgZm9udDogZnVuY3Rpb24oY2FudmFzLCBkYXRhKSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGZvbnRTdHlsZSxcclxuICAgICAgZm9udFZhcmlhbnQsXHJcbiAgICAgIGZvbnRXZWlnaHQsXHJcbiAgICAgIGZvbnRTaXplLFxyXG4gICAgICBmb250RmFtaWx5LFxyXG4gICAgICBjb250ZW50LFxyXG4gICAgICBmb250Q29sb3IsXHJcbiAgICAgIHRleHRBbGlnbixcclxuICAgICAgdGV4dEJhc2VsaW5lLFxyXG4gICAgICB4LFxyXG4gICAgICB5XHJcbiAgICB9ID0gZGF0YVxyXG4gICAgLy8g5rC05bmzXHJcbiAgICBpZiAodGV4dEFsaWduKSB7XHJcbiAgICAgIGNhbnZhcy50ZXh0QWxpZ24gPSB0ZXh0QWxpZ25cclxuICAgIH1cclxuICAgIC8vIOWeguebtFxyXG4gICAgaWYgKHRleHRCYXNlbGluZSkge1xyXG4gICAgICBjYW52YXMudGV4dEJhc2VsaW5lID0gdGV4dEJhc2VsaW5lXHJcbiAgICB9XHJcbiAgICAvLyDpopzoibJcclxuICAgIGlmIChmb250Q29sb3IpIHtcclxuICAgICAgY2FudmFzLmZpbGxTdHlsZSA9IGZvbnRDb2xvclxyXG4gICAgfVxyXG4gICAgY2FudmFzLmZvbnQgPVxyXG4gICAgICBmb250U3R5bGUgK1xyXG4gICAgICAnICcgK1xyXG4gICAgICBmb250VmFyaWFudCArXHJcbiAgICAgICcgJyArXHJcbiAgICAgIGZvbnRXZWlnaHQgK1xyXG4gICAgICAnICcgK1xyXG4gICAgICBmb250U2l6ZSArXHJcbiAgICAgICcgJyArXHJcbiAgICAgIGZvbnRGYW1pbHlcclxuXHJcbiAgICAvLyAg57uY5Yi25YaF5a65XHJcbiAgICBjYW52YXMuZmlsbFRleHQoY29udGVudCwgeCwgeSlcclxuICB9LFxyXG4gIG1vdmU6IGZ1bmN0aW9uKGNhbnZhcywgcG9zaXRpb24pIHtcclxuICAgIGNhbnZhcy5tb3ZlVG8ocG9zaXRpb24ueCwgcG9zaXRpb24ueSlcclxuICB9LFxyXG4gIGxpbmU6IGZ1bmN0aW9uKGNhbnZhcywgcG9zaXRpb24pIHtcclxuICAgIGNhbnZhcy5saW5lVG8ocG9zaXRpb24ueCwgcG9zaXRpb24ueSlcclxuICB9LFxyXG4gIGN1cnZlOiBmdW5jdGlvbihjYW52YXMsIHBvc2l0aW9uKSB7XHJcbiAgICBjYW52YXMuYmV6aWVyQ3VydmVUbyhcclxuICAgICAgcG9zaXRpb24ueDEsXHJcbiAgICAgIHBvc2l0aW9uLnkxLFxyXG4gICAgICBwb3NpdGlvbi54MixcclxuICAgICAgcG9zaXRpb24ueTIsXHJcbiAgICAgIHBvc2l0aW9uLngsXHJcbiAgICAgIHBvc2l0aW9uLnlcclxuICAgIClcclxuICB9LFxyXG4gIHF1YWRyYXRpY0N1cnZlOiBmdW5jdGlvbihjYW52YXMsIHBvc2l0aW9uKSB7XHJcbiAgICBjYW52YXMucXVhZHJhdGljQ3VydmVUbyhwb3NpdGlvbi54MSwgcG9zaXRpb24ueTEsIHBvc2l0aW9uLngsIHBvc2l0aW9uLnkpXHJcbiAgfSxcclxuICBjbG9zZTogZnVuY3Rpb24oY2FudmFzKSB7XHJcbiAgICBjYW52YXMuY2xvc2VQYXRoKClcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAcGFyYW0geyp9IGJwbW5zXHJcbiAqIEBwYXJhbSB7Kn0gZmlsdGVyXHJcbiAqIEBwYXJhbSB7Kn0gdHlwZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNoZWNrQnBtblNoYXBlID0gKGJwbW5zLCBmaWx0ZXIsIHR5cGUpID0+IHtcclxuICBsZXQgc3VwcG9ydCA9ICcnXHJcbiAgYnBtbnMuZm9yRWFjaCgoYnBtbiwgaW5kZXgpID0+IHtcclxuICAgIGlmIChmaWx0ZXIuaW5kZXhPZihicG1uKSA8IDApIHtcclxuICAgICAgc3VwcG9ydCArPSBicG1uICsgKGluZGV4ICE9PSBicG1ucy5sZW5ndGggPyAnLCcgOiAnJylcclxuICAgIH1cclxuICB9KVxyXG4gIGlmIChzdXBwb3J0LmluZGV4T2YodHlwZSkgPT09IC0xKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICByZXR1cm4gZmFsc2VcclxufVxyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEBwYXJhbSB7Kn0gYnBtbnNcclxuICogQHBhcmFtIHsqfSBmaWx0ZXJcclxuICogQHBhcmFtIHsqfSB0eXBlXHJcbiAqL1xyXG5leHBvcnQgY29uc3Qgc2V0RXhwb3J0RGF0YSA9IGVsZW1lbnQgPT4ge1xyXG4gIGNvbnN0IGV4cG9ydERhdGEgPSB7fVxyXG4gIGlmIChlbGVtZW50LiR0eXBlID09PSAnYnBtbjpQcm9jZXNzJykge1xyXG4gICAgZXhwb3J0RGF0YS5pZCA9IGVsZW1lbnQuaWRcclxuICAgIGV4cG9ydERhdGEuZXh0ZW5zaW9ucyA9IHNldEV4cG9ydEV4dGVuc2lvbnMoXHJcbiAgICAgIGVsZW1lbnQuZXh0ZW5zaW9uRWxlbWVudHMudmFsdWVzIHx8IFtdXHJcbiAgICApXHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnN0IHsgZGF0YSwgc2hhcGUgfSA9IGVsZW1lbnRcclxuICAgIGV4cG9ydERhdGEuYnBtbk5hbWUgPSBzaGFwZS5icG1uTmFtZVxyXG4gICAgZXhwb3J0RGF0YS5ncm91cE5hbWUgPSBzaGFwZS5ncm91cE5hbWVcclxuICAgIGZvciAobGV0IGtleSBpbiBkYXRhKSB7XHJcbiAgICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgICAgY2FzZSAnJHR5cGUnOlxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlICdleHRlbnNpb25FbGVtZW50cyc6XHJcbiAgICAgICAgICBleHBvcnREYXRhLmV4dGVuc2lvbnMgPSBzZXRFeHBvcnRFeHRlbnNpb25zKGRhdGFba2V5XS52YWx1ZXMgfHwgW10pXHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBleHBvcnREYXRhW2tleV0gPSBkYXRhW2tleV1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBleHBvcnREYXRhXHJcbn1cclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAcGFyYW0geyp9IHZhbHVlc1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHNldEV4cG9ydEV4dGVuc2lvbnMgPSB2YWx1ZXMgPT4ge1xyXG4gIGNvbnN0IGV4dGVuc2lvbnMgPSBbXVxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICBjb25zdCBpdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgY2xvbmVEZWVwKHZhbHVlc1tpXSksIHZhbHVlc1tpXS4kYXR0cnMpXHJcbiAgICBpZiAoaXRlbS4kdHlwZSkge1xyXG4gICAgICBpdGVtLm5hbWUgPSBpdGVtLiR0eXBlXHJcbiAgICAgIGRlbGV0ZSBpdGVtLiR0eXBlXHJcbiAgICB9XHJcbiAgICBleHRlbnNpb25zLnB1c2goaXRlbSlcclxuICB9XHJcblxyXG4gIHJldHVybiBleHRlbnNpb25zXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy91dGlscy91dGlscy5qcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7QUFLQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBY0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7O0FBakVBO0FBd0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///1\n"); + +/***/ }), +/* 2 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_utils__ = __webpack_require__(1);\n\n\n\n/**\r\n * 获取象限\r\n * @param {*} angle\r\n */\nvar getAngleDir = function getAngleDir(angle) {\n var pi = Math.PI;\n if (angle >= pi / 4 && angle < pi / 4 * 3) {\n return 1;\n } else {\n if (angle >= pi / 4 * 3 && angle < pi / 4 * 5) {\n return 2;\n } else {\n if (angle >= pi / 4 * 5 && angle < pi / 4 * 7) {\n return 3;\n } else {\n return 4;\n }\n }\n }\n};\n\n/**\r\n * 根据两点获取角度\r\n * @param {*} point1\r\n * @param {*} point2\r\n */\nvar getAngle = function getAngle(point1, point2) {\n var angle = Math.atan(Math.abs(point1.y - point2.y) / Math.abs(point1.x - point2.x));\n if (point2.x <= point1.x && point2.y > point1.y) {\n angle = Math.PI - angle;\n } else {\n if (point2.x < point1.x && point2.y <= point1.y) {\n angle = Math.PI + angle;\n } else {\n if (point2.x >= point1.x && point2.y < point1.y) {\n angle = Math.PI * 2 - angle;\n }\n }\n }\n return angle;\n};\n\n/**\r\n *\r\n * @param {*} elements\r\n */\nvar getBounding = function getBounding(elements) {\n var pos = { x1: null, y1: null, x2: null, y2: null };\n for (var i = 0; i < elements.length; i += 1) {\n var element = elements[i];\n var size = void 0;\n if (element.shape.bpmnName === 'SequenceFlow') {\n size = getConnectionBox(element);\n } else {\n size = element.plane.bounds;\n }\n if (pos.x1 == null || size.x < pos.x1) {\n pos.x1 = size.x;\n }\n if (pos.y1 == null || size.y < pos.y1) {\n pos.y1 = size.y;\n }\n if (pos.x2 == null || size.x + size.width > pos.x2) {\n pos.x2 = size.x + size.width;\n }\n if (pos.y2 == null || size.y + size.height > pos.y2) {\n pos.y2 = size.y + size.height;\n }\n }\n var bound = {\n x: pos.x1,\n y: pos.y1,\n width: pos.x2 - pos.x1,\n height: pos.y2 - pos.y1\n };\n return bound;\n};\n\n/**\r\n * 获取圆行点集合\r\n * @param {*} x\r\n * @param {*} y\r\n * @param {*} padding\r\n */\nvar getCirclePoints = function getCirclePoints(x, y, padding) {\n var num = Math.PI / 18;\n var points = [];\n for (var i = 0; i < 36; i += 1) {\n var angle = num * i;\n var pos = {\n x: x - Math.cos(angle) * padding,\n y: y - Math.sin(angle) * padding,\n angle: angle\n };\n points.push(pos);\n }\n return points;\n};\n\n/**\r\n *\r\n * @param {*} element\r\n */\nvar getConnectionLength = function getConnectionLength(element) {\n var points = getConnectionLinePoints(element);\n var length = 0;\n for (var i = 1; i < points.length; i += 1) {\n var point1 = points[i - 1];\n var point2 = points[i];\n var distance = measureDistance(point1, point2);\n length += distance;\n }\n return length;\n};\n\n/**\r\n * 根据传入颜色获取浅色\r\n * @param {*} color\r\n */\nvar getLighterColor = function getLighterColor(color) {\n var lighter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 60;\n\n var colors = color.split(',');\n var r = parseInt(colors[0]);\n var g = parseInt(colors[1]);\n var b = parseInt(colors[2]);\n var r2 = Math.round(r + (255 - r) / 255 * lighter);\n if (r2 > 255) {\n r2 = 255;\n }\n var g2 = Math.round(g + (255 - g) / 255 * lighter);\n if (g2 > 255) {\n g2 = 255;\n }\n var b2 = Math.round(b + (255 - b) / 255 * lighter);\n if (b2 > 255) {\n b2 = 255;\n }\n return r2 + ',' + g2 + ',' + b2;\n};\n\n/**\r\n * 根据传入颜色获取浅灰色\r\n */\nvar getDarkerColor = function getDarkerColor(color) {\n var darker = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 13;\n\n var colors = color.split(',');\n var r = parseInt(colors[0]);\n var g = parseInt(colors[1]);\n var b = parseInt(colors[2]);\n // 灰度后RGB颜色\n var r2 = Math.round(r - r / 255 * darker);\n if (r2 < 0) {\n r2 = 0;\n }\n var g2 = Math.round(g - g / 255 * darker);\n if (g2 < 0) {\n g2 = 0;\n }\n var b2 = Math.round(b - b / 255 * darker);\n if (b2 < 0) {\n b2 = 0;\n }\n return r2 + ',' + g2 + ',' + b2;\n};\n\n/**\r\n * 根据传入颜色获取深灰色\r\n */\nvar getDarkestColor = function getDarkestColor(color) {\n return getDarkerColor(color, 26);\n};\n\n/**\r\n *\r\n * @param {*} range\r\n */\nvar getElementIdsByRange = function getElementIdsByRange(range) {\n var elements = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get');\n var items = [];\n for (var id in elements) {\n var element = elements[id];\n var bounds = element.plane.bounds;\n if (element.shape.bpmnName === 'SequenceFlow') {\n bounds = getConnectionBox(element);\n } else {\n bounds = getShapeBox(element);\n }\n if (pointInRect(bounds.x, bounds.y, range) && pointInRect(bounds.x + bounds.width, bounds.y, range) && pointInRect(bounds.x + bounds.width, bounds.y + bounds.height, range) && pointInRect(bounds.x, bounds.y + bounds.height, range)) {\n items.push(element.data.id);\n }\n }\n return items;\n};\n\n/**\r\n * 原点1象限,目标点1象限\r\n * @param {*} point1\r\n * @param {*} point2\r\n * @param {*} shape1\r\n */\nvar getPointsWithS1T1 = function getPointsWithS1T1(point1, point2, shape1) {\n var r = 30;\n var points = [];\n var _shape1$plane$bounds = shape1.plane.bounds,\n x = _shape1$plane$bounds.x,\n width = _shape1$plane$bounds.width;\n\n var point = {};\n if (point2.x >= x - r && point2.x <= x + width + r) {\n if (point2.x < x + width / 2) {\n point.x = x - r;\n } else {\n point.x = x + width + r;\n }\n point.y = point1.y - r;\n points.push({ x: point1.x, y: point.y });\n points.push({ x: point.x, y: point.y });\n point.y = point2.y - r;\n points.push({ x: point.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n } else {\n point.y = point1.y - r;\n points.push({ x: point1.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n }\n return points;\n};\n\n/**\r\n * 原点2象限,目标点2象限\r\n * @param {*} point1\r\n * @param {*} point2\r\n * @param {*} shape1\r\n */\nvar getPointsWithS2T2 = function getPointsWithS2T2(point1, point2, shape1) {\n var r = 30;\n var points = [];\n var _shape1$plane$bounds2 = shape1.plane.bounds,\n y = _shape1$plane$bounds2.y,\n height = _shape1$plane$bounds2.height;\n\n var point = {};\n if (point2.y >= y - r && point2.y <= y + height + r) {\n point.x = point1.x + r;\n if (point2.y < y + height / 2) {\n point.y = y - r;\n } else {\n point.y = y + height + r;\n }\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point.y });\n point.x = point2.x + r;\n points.push({ x: point.x, y: point.y });\n points.push({ x: point.x, y: point2.y });\n } else {\n point.x = point1.x + r;\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point2.y });\n }\n\n return points;\n};\n\n/**\r\n * 原点3象限,目标点3象限\r\n * @param {*} point1\r\n * @param {*} point2\r\n * @param {*} shape1\r\n */\nvar getPointsWithS3T3 = function getPointsWithS3T3(point1, point2, shape1) {\n var r = 30;\n var points = [];\n var _shape1$plane$bounds3 = shape1.plane.bounds,\n x = _shape1$plane$bounds3.x,\n width = _shape1$plane$bounds3.width;\n\n var point = {};\n if (point2.x >= x - r && point2.x <= x + width + r) {\n if (point2.x < x + width / 2) {\n point.x = x - r;\n } else {\n point.x = x + width + r;\n }\n point.y = point1.y + r;\n points.push({ x: point1.x, y: point.y });\n points.push({ x: point.x, y: point.y });\n point.y = point2.y + r;\n points.push({ x: point.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n } else {\n point.y = point1.y + r;\n points.push({ x: point1.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n }\n\n return points;\n};\n\n/**\r\n * 原点4象限,目标点4象限\r\n * @param {*} point1\r\n * @param {*} point2\r\n * @param {*} shape1\r\n */\nvar getPointsWithS4T4 = function getPointsWithS4T4(point1, point2, shape1) {\n var r = 30;\n var points = [];\n var _shape1$plane$bounds4 = shape1.plane.bounds,\n y = _shape1$plane$bounds4.y,\n height = _shape1$plane$bounds4.height;\n\n var point = {};\n if (point2.y >= y - r && point2.y <= y + height + r) {\n point.x = point1.x + r;\n if (point2.y < y + height / 2) {\n point.y = y - r;\n } else {\n point.y = y + height + r;\n }\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point.y });\n point.x = point2.x - r;\n points.push({ x: point.x, y: point.y });\n points.push({ x: point.x, y: point2.y });\n } else {\n point.x = point1.x - r;\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point2.y });\n }\n return points;\n};\n\n/**\r\n * 原点1象限,目标点3象限\r\n * @param {*} point1\r\n * @param {*} point2\r\n * @param {*} shape1\r\n */\nvar getPointsWithS1T3 = function getPointsWithS1T3(point1, point2, shape1, shape2, distanceY) {\n var r = 30;\n var points = [];\n var bounds1 = shape1.plane.bounds;\n var bounds2 = shape2.plane.bounds;\n var point = {};\n if (point2.y <= point1.y) {\n point.y = point1.y - distanceY / 2;\n points.push({ x: point1.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n } else {\n var shape1R = bounds1.x + bounds1.width;\n var shape2R = bounds2.x + bounds2.width;\n point.y = point1.y - r;\n if (shape2R >= bounds1.x && bounds2.x <= shape1R) {\n var centerX = bounds1.x + bounds1.width / 2;\n if (point2.x < centerX) {\n point.x = bounds1.x < bounds2.x ? bounds1.x - r : bounds2.x - r;\n } else {\n point.x = shape1R > shape2R ? shape1R + r : shape2R + r;\n }\n if (bounds2.y < point1.y) {\n point.y = bounds2.y - r;\n }\n } else {\n if (point2.x < point1.x) {\n point.x = shape2R + (bounds1.x - shape2R) / 2;\n } else {\n point.x = shape1R + (bounds2.x - shape1R) / 2;\n }\n }\n points.push({ x: point1.x, y: point.y });\n points.push({ x: point.x, y: point.y });\n point.y = point2.y + r;\n points.push({ x: point.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n }\n\n return points;\n};\n\n/**\r\n * 原点2象限,目标点4象限\r\n * @param {*} point1\r\n * @param {*} point2\r\n * @param {*} shape1\r\n */\nvar getPointsWithS2T4 = function getPointsWithS2T4(point1, point2, shape1, shape2, distanceX) {\n var r = 30;\n var points = [];\n var bounds1 = shape1.plane.bounds;\n var bounds2 = shape2.plane.bounds;\n var point = {};\n\n if (point2.x > point1.x) {\n point.x = point1.x + distanceX / 2;\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point2.y });\n } else {\n var shape1B = bounds1.y + bounds1.height;\n var shape2B = bounds2.y + bounds2.height;\n point.x = point1.x + r;\n if (shape2B >= bounds1.y && bounds2.y <= shape1B) {\n var centerY = bounds1.y + bounds1.height / 2;\n if (point2.y < centerY) {\n point.y = bounds1.y < bounds2.y ? bounds1.y - r : bounds2.y - r;\n } else {\n point.y = shape1B > shape2B ? shape1B + r : shape2B + r;\n }\n if (bounds2.x + bounds2.width > point1.x) {\n point.x = bounds2.x + bounds2.width + r;\n }\n } else {\n if (point2.y < point1.y) {\n point.y = shape2B + (bounds1.y - shape2B) / 2;\n } else {\n point.y = shape1B + (bounds2.y - shape1B) / 2;\n }\n }\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point.y });\n point.x = point2.x - r;\n points.push({ x: point.x, y: point.y });\n points.push({ x: point.x, y: point2.y });\n }\n return points;\n};\n\n/**\r\n * 原点1象限,目标点2象限\r\n * @param {*} point1\r\n * @param {*} point2\r\n * @param {*} shape1\r\n */\nvar getPointsWithS1T2 = function getPointsWithS1T2(point1, point2, shape1, shape2) {\n var r = 30;\n var points = [];\n var bounds1 = shape1.plane.bounds;\n var bounds2 = shape2.plane.bounds;\n var point = {};\n\n if (point2.x > point1.x && point2.y > point1.y) {\n points.push({ x: point2.x, y: point1.y });\n } else {\n if (point2.x > point1.x && bounds2.x > point1.x) {\n if (bounds2.x - point1.x < r * 2) {\n point.x = point1.x + (bounds2.x - point1.x) / 2;\n } else {\n point.x = point1.x + r;\n }\n point.y = point2.y - r;\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n } else {\n if (point2.x <= point1.x && point2.y > bounds1.y + bounds1.height) {\n var shape1B = bounds1.y + bounds1.height;\n point.x = point1.x + r;\n\n if (point2.y - shape1B < r * 2) {\n point.y = shape1B + (point2.y - shape1B) / 2;\n } else {\n point.y = point2.y - r;\n }\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n } else {\n var shape2R = bounds2.x + bounds2.width;\n if (shape2R > point1.x) {\n point.x = shape2R + r;\n } else {\n point.x = point1.x + r;\n }\n\n if (point2.y < bounds1.y) {\n point.y = point2.y - r;\n } else {\n point.y = bounds1.y - r;\n }\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n }\n }\n }\n\n return points;\n};\n\n/**\r\n * 原点1象限,目标点4象限\r\n * @param {*} point1\r\n * @param {*} point2\r\n * @param {*} shape1\r\n */\nvar getPointsWithS1T4 = function getPointsWithS1T4(point1, point2, shape1, shape2) {\n var r = 30;\n var points = [];\n var bounds1 = shape1.plane.bounds;\n var bounds2 = shape2.plane.bounds;\n var point = {};\n\n var shape2R = bounds2.x + bounds2.width;\n if (point2.x < point1.x && point2.y > point1.y) {\n points.push({ x: point2.x, y: point1.y });\n } else {\n if (point2.x < point1.x && shape2R < point1.x) {\n if (point1.x - shape2R < r * 2) {\n point.x = shape2R + (point1.x - shape2R) / 2;\n } else {\n point.x = point1.x - r;\n }\n point.y = point2.y - r;\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n } else {\n if (point2.x >= point1.x && point2.y > bounds1.y + bounds1.height) {\n var shape1B = bounds1.y + bounds1.height;\n point.x = point1.x - r;\n if (point2.y - shape1B < r * 2) {\n point.y = shape1B + (point2.y - shape1B) / 2;\n } else {\n point.y = point2.y - r;\n }\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n } else {\n if (bounds2.x < point1.x) {\n point.x = bounds2.x - r;\n } else {\n point.x = point1.x - r;\n }\n if (point2.y < bounds1.y) {\n point.y = point2.y - r;\n } else {\n point.y = bounds1.y - r;\n }\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n }\n }\n }\n\n return points;\n};\n\n/**\r\n * 原点1象限,目标点4象限\r\n * @param {*} point1\r\n * @param {*} point2\r\n * @param {*} shape1\r\n */\nvar getPointsWithS2T3 = function getPointsWithS2T3(point1, point2, shape1, shape2) {\n var r = 30;\n var points = [];\n var bounds1 = shape1.plane.bounds;\n var bounds2 = shape2.plane.bounds;\n var point = {};\n\n if (point2.x > point1.x && point2.y < point1.y) {\n points.push({ x: point2.x, y: point1.y });\n } else {\n if (point2.x > point1.x && bounds2.x > point1.x) {\n if (bounds2.x - point1.x < r * 2) {\n point.x = point1.x + (bounds2.x - point1.x) / 2;\n } else {\n point.x = point1.x + r;\n }\n point.y = point2.y + r;\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n } else {\n if (point2.x <= point1.x && point2.y < bounds1.y) {\n point.x = point1.x + r;\n\n if (bounds1.y - point2.y < r * 2) {\n point.y = point2.y + (bounds1.y - point2.y) / 2;\n } else {\n point.y = point2.y + r;\n }\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n } else {\n var shape2R = bounds2.x + bounds2.width;\n if (shape2R > point1.x) {\n point.x = shape2R + r;\n } else {\n point.x = point1.x + r;\n }\n if (point2.y > bounds1.y + bounds1.height) {\n point.y = point2.y + r;\n } else {\n point.y = bounds1.y + bounds1.height + r;\n }\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n }\n }\n }\n\n return points;\n};\n\n/**\r\n * 原点1象限,目标点4象限\r\n * @param {*} point1\r\n * @param {*} point2\r\n * @param {*} shape1\r\n */\nvar getPointsWithS3T4 = function getPointsWithS3T4(point1, point2, shape1, shape2) {\n var r = 30;\n var points = [];\n var bounds1 = shape1.plane.bounds;\n var bounds2 = shape2.plane.bounds;\n var point = {};\n\n var shape2R = bounds2.x + bounds2.width;\n if (point2.x < point1.x && point2.y < point1.y) {\n points.push({ x: point2.x, y: point1.y });\n } else {\n if (point2.x < point1.x && shape2R < point1.x) {\n if (point1.x - shape2R < r * 2) {\n point.x = shape2R + (point1.x - shape2R) / 2;\n } else {\n point.x = point1.x - r;\n }\n point.y = point2.y + r;\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n } else {\n if (point2.x >= point1.x && point2.y < bounds1.y) {\n point.x = point1.x - r;\n if (bounds1.y - point2.y < r * 2) {\n point.y = point2.y + (bounds1.y - point2.y) / 2;\n } else {\n point.y = point2.y + r;\n }\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n } else {\n if (bounds2.x < point1.x) {\n point.x = bounds2.x - r;\n } else {\n point.x = point1.x - r;\n }\n if (point2.y > bounds1.y + bounds1.height) {\n point.y = point2.y + r;\n } else {\n point.y = bounds1.y + bounds1.height + r;\n }\n points.push({ x: point.x, y: point1.y });\n points.push({ x: point.x, y: point.y });\n points.push({ x: point2.x, y: point.y });\n }\n }\n }\n\n return points;\n};\n\nvar getBezierCurce = function getBezierCurce(point1, point2, id, k) {\n if (id != null) {\n return {\n x: point1.x - k * Math.cos(point1.angle),\n y: point1.y - k * Math.sin(point1.angle)\n };\n } else {\n var absY = Math.abs(point1.y - point2.y);\n var absX = Math.abs(point1.x - point2.x);\n var atan = Math.atan(absY / absX);\n var point = {};\n if (point1.x <= point2.x) {\n point.x = point1.x + k * Math.cos(atan);\n } else {\n point.x = point1.x - k * Math.cos(atan);\n }\n if (point1.y <= point2.y) {\n point.y = point1.y + k * Math.sin(atan);\n } else {\n point.y = point1.y - k * Math.sin(atan);\n }\n return point;\n }\n};\n\n/**\r\n * 获取连线点集合\r\n * @param {*} connection\r\n */\nvar getConnectionPoints = function getConnectionPoints(connection, elements) {\n var _connection$data = connection.data,\n sourceRef = _connection$data.sourceRef,\n targetRef = _connection$data.targetRef;\n\n var sourceShape = elements[sourceRef];\n var targetShape = elements[targetRef];\n var waypoint = connection.plane.waypoint;\n\n var sourcePoint = waypoint[0];\n var targetPoint = waypoint[waypoint.length - 1];\n var points = [];\n\n // 折线\n if (connection.linkerType === 'broken') {\n var distanceX = Math.abs(targetPoint.x - sourcePoint.x);\n var distanceY = Math.abs(targetPoint.y - sourcePoint.y);\n\n var pi = Math.PI;\n\n var r = 30;\n\n var reverse = false;\n var point1 = void 0,\n point2 = void 0;\n var shape1 = void 0,\n shape2 = void 0;\n var angle = void 0;\n\n if (sourceRef != null && targetRef != null) {\n var sourceQuadrant = getAngleDir(sourcePoint.angle); // c\n var targetQuadrant = getAngleDir(targetPoint.angle); // b\n\n if (sourceQuadrant === 1 && targetQuadrant === 1) {\n if (sourcePoint.y < targetPoint.y) {\n point1 = sourcePoint;\n point2 = targetPoint;\n shape1 = sourceShape;\n shape2 = targetShape;\n reverse = false;\n } else {\n point1 = targetPoint;\n point2 = sourcePoint;\n shape1 = targetShape;\n shape2 = sourceShape;\n reverse = true;\n }\n points = getPointsWithS1T1(point1, point2, shape1);\n } else {\n if (sourceQuadrant === 3 && targetQuadrant === 3) {\n if (sourcePoint.y > targetPoint.y) {\n point1 = sourcePoint;\n point2 = targetPoint;\n shape1 = sourceShape;\n shape2 = targetShape;\n reverse = false;\n } else {\n point1 = targetPoint;\n point2 = sourcePoint;\n shape1 = targetShape;\n shape2 = sourceShape;\n reverse = true;\n }\n points = getPointsWithS3T3(point1, point2, shape1);\n } else {\n if (sourceQuadrant === 2 && targetQuadrant === 2) {\n if (sourcePoint.y > targetPoint.y) {\n point1 = sourcePoint;\n point2 = targetPoint;\n shape1 = sourceShape;\n shape2 = targetShape;\n reverse = false;\n } else {\n point1 = targetPoint;\n point2 = sourcePoint;\n shape1 = targetShape;\n shape2 = sourceShape;\n reverse = true;\n }\n points = getPointsWithS2T2(point1, point2, shape1);\n } else {\n if (sourceQuadrant === 4 && targetQuadrant === 4) {\n if (sourcePoint.x < targetPoint.x) {\n point1 = sourcePoint;\n point2 = targetPoint;\n shape1 = sourceShape;\n shape2 = targetShape;\n reverse = false;\n } else {\n point1 = targetPoint;\n point2 = sourcePoint;\n shape1 = targetShape;\n shape2 = sourceShape;\n reverse = true;\n }\n points = getPointsWithS4T4(point1, point2, shape1);\n } else {\n if (sourceQuadrant === 1 && targetQuadrant === 3 || sourceQuadrant === 3 && targetQuadrant === 1) {\n if (sourceQuadrant === 1) {\n point1 = sourcePoint;\n point2 = targetPoint;\n shape1 = sourceShape;\n shape2 = targetShape;\n reverse = false;\n } else {\n point1 = targetPoint;\n point2 = sourcePoint;\n shape1 = targetShape;\n shape2 = sourceShape;\n reverse = true;\n }\n points = getPointsWithS1T3(point1, point2, shape1, shape2, distanceY);\n } else {\n if (sourceQuadrant === 2 && targetQuadrant === 4 || sourceQuadrant === 4 && targetQuadrant === 2) {\n if (sourceQuadrant === 2) {\n point1 = sourcePoint;\n point2 = targetPoint;\n shape1 = sourceShape;\n shape2 = targetShape;\n reverse = false;\n } else {\n point1 = targetPoint;\n point2 = sourcePoint;\n shape1 = targetShape;\n shape2 = sourceShape;\n reverse = true;\n }\n points = getPointsWithS2T4(point1, point2, shape1, shape2, distanceX);\n } else {\n if (sourceQuadrant === 1 && targetQuadrant === 2 || sourceQuadrant === 2 && targetQuadrant === 1) {\n if (sourceQuadrant === 2) {\n point1 = sourcePoint;\n point2 = targetPoint;\n shape1 = sourceShape;\n shape2 = targetShape;\n reverse = false;\n } else {\n point1 = targetPoint;\n point2 = sourcePoint;\n shape1 = targetShape;\n shape2 = sourceShape;\n reverse = true;\n }\n points = getPointsWithS1T2(point1, point2, shape1, shape2);\n } else {\n if (sourceQuadrant === 1 && targetQuadrant === 4 || sourceQuadrant === 4 && targetQuadrant === 1) {\n if (sourceQuadrant === 4) {\n point1 = sourcePoint;\n point2 = targetPoint;\n shape1 = sourceShape;\n shape2 = targetShape;\n reverse = false;\n } else {\n point1 = targetPoint;\n point2 = sourcePoint;\n shape1 = targetShape;\n shape2 = sourceShape;\n reverse = true;\n }\n\n points = getPointsWithS1T4(point1, point2, shape1, shape2);\n } else {\n if (sourceQuadrant === 2 && targetQuadrant === 3 || sourceQuadrant === 3 && targetQuadrant === 2) {\n if (sourceQuadrant === 2) {\n point1 = sourcePoint;\n point2 = targetPoint;\n shape1 = sourceShape;\n shape2 = targetShape;\n reverse = false;\n } else {\n point1 = targetPoint;\n point2 = sourcePoint;\n shape1 = targetShape;\n shape2 = sourceShape;\n reverse = true;\n }\n\n points = getPointsWithS2T3(point1, point2, shape1, shape2);\n } else {\n if (sourceQuadrant === 3 && targetQuadrant === 4 || sourceQuadrant === 4 && targetQuadrant === 3) {\n if (sourceQuadrant === 4) {\n point1 = sourcePoint;\n point2 = targetPoint;\n shape1 = sourceShape;\n shape2 = targetShape;\n reverse = false;\n } else {\n point1 = targetPoint;\n point2 = sourcePoint;\n shape1 = targetShape;\n shape2 = sourceShape;\n reverse = true;\n }\n\n points = getPointsWithS3T4(point1, point2, shape1, shape2);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n if (reverse) {\n points.reverse();\n }\n } else {\n if (sourceRef != null || targetRef != null) {\n if (sourceRef != null) {\n point1 = sourcePoint;\n point2 = targetPoint;\n shape1 = sourceShape;\n shape2 = targetShape;\n reverse = false;\n angle = sourcePoint.angle;\n } else {\n point1 = targetPoint;\n point2 = sourcePoint;\n shape1 = targetShape;\n shape2 = sourceShape;\n reverse = true;\n angle = targetPoint.angle;\n }\n\n var bounds1 = shape1.plane.bounds;\n\n if (angle >= pi / 4 && angle < pi / 4 * 3) {\n if (point2.y < point1.y) {\n if (distanceX >= distanceY) {\n points.push({ x: point1.x, y: point2.y });\n } else {\n var z = distanceY / 2;\n points.push({ x: point1.x, y: point1.y - z });\n points.push({ x: point2.x, y: point1.y - z });\n }\n } else {\n points.push({ x: point1.x, y: point1.y - r });\n if (distanceX >= distanceY) {\n if (point2.x >= bounds1.x - r && point2.x <= bounds1.x + bounds1.width + r) {\n var q = bounds1.x + bounds1.width / 2;\n if (point2.x < q) {\n points.push({ x: bounds1.x - r, y: point1.y - r });\n points.push({ x: bounds1.x - r, y: point2.y });\n } else {\n points.push({\n x: bounds1.x + bounds1.width + r,\n y: point1.y - r\n });\n points.push({ x: bounds1.x + bounds1.width + r, y: point2.y });\n }\n } else {\n if (point2.x < bounds1.x) {\n points.push({ x: point2.x + r, y: point1.y - r });\n points.push({ x: point2.x + r, y: point2.y });\n } else {\n points.push({ x: point2.x - r, y: point1.y - r });\n points.push({ x: point2.x - r, y: point2.y });\n }\n }\n } else {\n if (point2.x >= bounds1.x - r && point2.x <= bounds1.x + bounds1.width + r) {\n var shape1X = bounds1.x + bounds1.width / 2;\n if (point2.x < shape1X) {\n points.push({ x: bounds1.x - r, y: point1.y - r });\n points.push({ x: bounds1.x - r, y: point2.y - r });\n points.push({ x: point2.x, y: point2.y - r });\n } else {\n points.push({\n x: bounds1.x + bounds1.width + r,\n y: point1.y - r\n });\n points.push({\n x: bounds1.x + bounds1.width + r,\n y: point2.y - r\n });\n points.push({ x: point2.x, y: point2.y - r });\n }\n } else {\n points.push({ x: point2.x, y: point1.y - r });\n }\n }\n }\n } else {\n if (angle >= pi / 4 * 3 && angle < pi / 4 * 5) {\n if (point2.x > point1.x) {\n if (distanceX >= distanceY) {\n points.push({ x: point1.x + distanceX / 2, y: point1.y });\n points.push({ x: point1.x + distanceX / 2, y: point2.y });\n } else {\n points.push({ x: point2.x, y: point1.y });\n }\n } else {\n points.push({ x: point1.x + r, y: point1.y });\n if (distanceX >= distanceY) {\n if (point2.y >= bounds1.y - r && point2.y <= bounds1.y + bounds1.height + r) {\n var shape1Y = bounds1.y + bounds1.height / 2;\n if (point2.y < shape1Y) {\n points.push({ x: point1.x + r, y: bounds1.y - r });\n points.push({ x: point2.x + r, y: bounds1.y - r });\n points.push({ x: point2.x + r, y: point2.y });\n } else {\n points.push({\n x: point1.x + r,\n y: bounds1.y + bounds1.height + r\n });\n points.push({\n x: point2.x + r,\n y: bounds1.y + bounds1.height + r\n });\n points.push({ x: point2.x + r, y: point2.y });\n }\n } else {\n points.push({ x: point1.x + r, y: point2.y });\n }\n } else {\n if (point2.y >= bounds1.y - r && point2.y <= bounds1.y + bounds1.height + r) {\n var _shape1Y = bounds1.y + bounds1.height / 2;\n if (point2.y < _shape1Y) {\n points.push({ x: point1.x + r, y: bounds1.y - r });\n points.push({ x: point2.x, y: bounds1.y - r });\n } else {\n points.push({\n x: point1.x + r,\n y: bounds1.y + bounds1.height + r\n });\n points.push({\n x: point2.x,\n y: bounds1.y + bounds1.height + r\n });\n }\n } else {\n if (point2.y < point1.y) {\n points.push({ x: point1.x + r, y: point2.y + r });\n points.push({ x: point2.x, y: point2.y + r });\n } else {\n points.push({ x: point1.x + r, y: point2.y - r });\n points.push({ x: point2.x, y: point2.y - r });\n }\n }\n }\n }\n } else {\n if (angle >= pi / 4 * 5 && angle < pi / 4 * 7) {\n if (point2.y > point1.y) {\n if (distanceX >= distanceY) {\n points.push({ x: point1.x, y: point2.y });\n } else {\n points.push({ x: point1.x, y: point1.y + distanceY / 2 });\n points.push({ x: point2.x, y: point1.y + distanceY / 2 });\n }\n } else {\n points.push({ x: point1.x, y: point1.y + r });\n if (distanceX >= distanceY) {\n if (point2.x >= bounds1.x - r && point2.x <= bounds1.x + bounds1.width + r) {\n var _shape1X = bounds1.x + bounds1.width / 2;\n if (point2.x < _shape1X) {\n points.push({ x: bounds1.x - r, y: point1.y + r });\n points.push({ x: bounds1.x - r, y: point2.y });\n } else {\n points.push({\n x: bounds1.x + bounds1.width + r,\n y: point1.y + r\n });\n points.push({\n x: bounds1.x + bounds1.width + r,\n y: point2.y\n });\n }\n } else {\n if (point2.x < bounds1.x) {\n points.push({ x: point2.x + r, y: point1.y + r });\n points.push({ x: point2.x + r, y: point2.y });\n } else {\n points.push({ x: point2.x - r, y: point1.y + r });\n points.push({ x: point2.x - r, y: point2.y });\n }\n }\n } else {\n if (point2.x >= bounds1.x - r && point2.x <= bounds1.x + bounds1.width + r) {\n var _shape1X2 = bounds1.x + bounds1.width / 2;\n if (point2.x < _shape1X2) {\n points.push({ x: bounds1.x - r, y: point1.y + r });\n points.push({ x: bounds1.x - r, y: point2.y + r });\n points.push({ x: point2.x, y: point2.y + r });\n } else {\n points.push({\n x: bounds1.x + bounds1.width + r,\n y: point1.y + r\n });\n points.push({\n x: bounds1.x + bounds1.width + r,\n y: point2.y + r\n });\n points.push({ x: point2.x, y: point2.y + r });\n }\n } else {\n points.push({ x: point2.x, y: point1.y + r });\n }\n }\n }\n } else {\n if (point2.x < point1.x) {\n if (distanceX >= distanceY) {\n points.push({ x: point1.x - distanceX / 2, y: point1.y });\n points.push({ x: point1.x - distanceX / 2, y: point2.y });\n } else {\n points.push({ x: point2.x, y: point1.y });\n }\n } else {\n points.push({ x: point1.x - r, y: point1.y });\n if (distanceX >= distanceY) {\n if (point2.y >= bounds1.y - r && point2.y <= bounds1.y + bounds1.height + r) {\n var _shape1Y2 = bounds1.y + bounds1.height / 2;\n if (point2.y < _shape1Y2) {\n points.push({ x: point1.x - r, y: bounds1.y - r });\n points.push({ x: point2.x - r, y: bounds1.y - r });\n points.push({ x: point2.x - r, y: point2.y });\n } else {\n points.push({\n x: point1.x - r,\n y: bounds1.y + bounds1.height + r\n });\n points.push({\n x: point2.x - r,\n y: bounds1.y + bounds1.height + r\n });\n points.push({ x: point2.x - r, y: point2.y });\n }\n } else {\n points.push({ x: point1.x - r, y: point2.y });\n }\n } else {\n if (point2.y >= bounds1.y - r && point2.y <= bounds1.y + bounds1.height + r) {\n var _shape1Y3 = bounds1.y + bounds1.height / 2;\n if (point2.y < _shape1Y3) {\n points.push({ x: point1.x - r, y: bounds1.y - r });\n points.push({ x: point2.x, y: bounds1.y - r });\n } else {\n points.push({\n x: point1.x - r,\n y: bounds1.y + bounds1.height + r\n });\n points.push({\n x: point2.x,\n y: bounds1.y + bounds1.height + r\n });\n }\n } else {\n if (point2.y < point1.y) {\n points.push({ x: point1.x - r, y: point2.y + r });\n points.push({ x: point2.x, y: point2.y + r });\n } else {\n points.push({ x: point1.x - r, y: point2.y - r });\n points.push({ x: point2.x, y: point2.y - r });\n }\n }\n }\n }\n }\n }\n }\n if (reverse) {\n points.reverse();\n }\n } else {\n if (distanceX >= distanceY) {\n var x = (targetPoint.x - sourcePoint.x) / 2;\n points.push({ x: sourcePoint.x + x, y: sourcePoint.y });\n points.push({ x: sourcePoint.x + x, y: targetPoint.y });\n } else {\n var y = (targetPoint.y - sourcePoint.y) / 2;\n points.push({ x: sourcePoint.x, y: sourcePoint.y + y });\n points.push({ x: targetPoint.x, y: sourcePoint.y + y });\n }\n }\n }\n } else {\n // 弧线\n if (connection.linkerType === 'curve') {\n var distance = measureDistance(sourcePoint, targetPoint);\n var k = distance * 0.4;\n points.push(getBezierCurce(sourcePoint, targetPoint, sourceRef, k));\n points.push(getBezierCurce(targetPoint, sourcePoint, targetRef, k));\n }\n }\n return points;\n};\n\n/**\r\n * 获取连线中间点\r\n * @param {*} c\r\n */\nvar getConnectionMidpoint = function getConnectionMidpoint(shape) {\n var midpoint = {};\n\n var waypoint = shape.plane.waypoint;\n\n var sourcePoint = waypoint[0];\n var targetPoint = waypoint[waypoint.length - 1];\n\n if (shape.linkerType === 'normal') {\n midpoint.x = 0.5 * sourcePoint.x + 0.5 * targetPoint.x;\n midpoint.y = 0.5 * sourcePoint.y + 0.5 * targetPoint.y;\n } else {\n if (shape.linkerType === 'curve') {\n midpoint.x = sourcePoint.x * 0.125 + shape.points[0].x * 0.375 + shape.points[1].x * 0.375 + targetPoint.x * 0.125;\n midpoint.y = sourcePoint.y * 0.125 + shape.points[0].y * 0.375 + shape.points[1].y * 0.375 + targetPoint.y * 0.125;\n } else {\n var points = [];\n points.push(sourcePoint);\n points = points.concat(shape.points);\n points.push(targetPoint);\n var distanceTotal = 0;\n for (var i = 1; i < points.length; i += 1) {\n distanceTotal += measureDistance(points[i - 1], points[i]);\n }\n var distanceHalf = distanceTotal / 2;\n var distanceItem = 0;\n for (var _i = 1; _i < points.length; _i += 1) {\n var point1 = points[_i - 1];\n var point2 = points[_i];\n var distance = distanceItem + measureDistance(point1, point2);\n if (distance > distanceHalf) {\n var midDistance = (distanceHalf - distanceItem) / distance;\n midpoint.x = (1 - midDistance) * point1.x + midDistance * point2.x;\n midpoint.y = (1 - midDistance) * point1.y + midDistance * point2.y;\n break;\n }\n distanceItem = distance;\n }\n }\n }\n return midpoint;\n};\n\n/**\r\n *\r\n * @param {*} shape\r\n * @param {*} type\r\n */\nvar getEndpointAngle = function getEndpointAngle(shape, type) {\n var _shape$data = shape.data,\n sourceRef = _shape$data.sourceRef,\n targetRef = _shape$data.targetRef;\n var waypoint = shape.plane.waypoint;\n\n var sourcePoint = waypoint[0];\n var targetPoint = waypoint[waypoint.length - 1];\n\n var point1 = void 0,\n point2 = void 0;\n\n if (shape.linkerType === 'normal') {\n if (type === 'source') {\n point1 = targetPoint;\n } else {\n point1 = sourcePoint;\n }\n } else {\n if (shape.linkerType === 'broken') {\n if (type === 'source') {\n point1 = shape.points[0];\n } else {\n point1 = shape.points[shape.points.length - 1];\n }\n } else {\n var aWidth = 12;\n var distance = measureDistance(sourcePoint, targetPoint);\n var proportion = void 0;\n if (type === 'source') {\n proportion = aWidth / distance;\n } else {\n proportion = 1 - aWidth / distance;\n }\n point1 = {\n x: (1 - proportion) * (1 - proportion) * (1 - proportion) * sourcePoint.x + 3 * (1 - proportion) * (1 - proportion) * proportion * shape.points[0].x + 3 * (1 - proportion) * proportion * proportion * shape.points[1].x + proportion * proportion * proportion * targetPoint.x,\n y: (1 - proportion) * (1 - proportion) * (1 - proportion) * sourcePoint.y + 3 * (1 - proportion) * (1 - proportion) * proportion * shape.points[0].y + 3 * (1 - proportion) * proportion * proportion * shape.points[1].y + proportion * proportion * proportion * targetPoint.y\n };\n }\n }\n\n if (type === 'source') {\n point2 = sourcePoint;\n } else {\n point2 = targetPoint;\n }\n return getAngle(point1, point2);\n};\n\n/**\r\n *\r\n * @param {*} element\r\n */\nvar getConnectionLinePoints = function getConnectionLinePoints(element) {\n var plane = element.plane,\n shape = element.shape;\n\n var points = [];\n if (shape.linkerType !== 'curve') {\n points.push(plane.waypoint[0]);\n points = points.concat(shape.points);\n } else {\n var step = 0.05;\n var num = 0;\n while (num <= 1) {\n var point = {\n x: (1 - num) * (1 - num) * (1 - num) * shape.points[0].x + 3 * (1 - num) * (1 - num) * num * shape.points[1].x + 3 * (1 - num) * num * num * shape.points[2].x + num * num * num * shape.points[shape.points.length - 1].x,\n y: (1 - num) * (1 - num) * (1 - num) * shape.points[0].y + 3 * (1 - num) * (1 - num) * num * shape.points[1].y + 3 * (1 - num) * num * num * shape.points[2].y + num * num * num * shape.points[shape.points.length - 1].y\n };\n points.push(point);\n num += step;\n }\n }\n points.push(plane.waypoint[plane.waypoint.length - 1]);\n return points;\n};\n\nvar getConnectionBox = function getConnectionBox(element) {\n var points = getConnectionLinePoints(element);\n var sourceX = points[0].x;\n var sourceY = points[0].y;\n var targetX = points[0].x;\n var targetY = points[0].y;\n for (var i = 0; i < points.length; i += 1) {\n var point = points[i];\n if (point.x < sourceX) {\n sourceX = point.x;\n } else {\n if (point.x > targetX) {\n targetX = point.x;\n }\n }\n if (point.y < sourceY) {\n sourceY = point.y;\n } else {\n if (point.y > targetY) {\n targetY = point.y;\n }\n }\n }\n var box = {\n x: sourceX,\n y: sourceY,\n width: targetX - sourceX,\n height: targetY - sourceY\n };\n return box;\n};\n\n/**\r\n *\r\n * @param {*} elements\r\n */\nvar getOutConnections = function getOutConnections(elements) {\n var connections = [];\n var ids = [];\n var selectIds = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.getIds');\n for (var i = 0; i < elements.length; i += 1) {\n var element = elements[i];\n if (element.shape.bpmnName !== 'SequenceFlow') {\n var connectionIds = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('connections.get', element.data.id);\n if (connectionIds && connectionIds.length > 0) {\n for (var j = 0; j < connectionIds.length; j += 1) {\n var connectionId = connectionIds[j];\n if (!(selectIds.indexOf(connectionId) >= 0) && ids.indexOf(connectionId) < 0) {\n connections.push(__WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get', connectionId));\n ids.push(connectionId);\n }\n }\n }\n }\n }\n return connections;\n};\n\nvar getSelectedConnectionIds = function getSelectedConnectionIds() {\n var selects = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.get');\n\n var ids = [];\n for (var i = 0; i < selects.length; i += 1) {\n var element = selects[i];\n if (element.shape.bpmnName === 'SequenceFlow') {\n ids.push(element.data.id);\n }\n }\n return ids;\n};\n\n/**\r\n *\r\n * @param {*} $container\r\n * @param {*} id\r\n * @param {*} x\r\n * @param {*} y\r\n * @param {*} padding\r\n */\nvar getPointAngle = function getPointAngle($container, id, x, y, padding) {\n var $shape = $container.find('.shape-box[data-id=\"' + id + '\"]');\n var shapePos = $shape.position();\n var $shapeCanvas = $shape.find('.shape-canvas');\n var shape2D = $shapeCanvas[0].getContext('2d');\n\n x = Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"k\" /* setScale */])(x) - shapePos.left;\n y = Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"k\" /* setScale */])(y) - shapePos.top;\n\n var points = getCirclePoints(x, y, padding);\n var length = points.length;\n var inPath = false;\n for (var i = 0; i < length; i += 1) {\n var point = points[i];\n if (shape2D.isPointInPath(point.x, point.y)) {\n point.inPath = true;\n inPath = true;\n } else {\n point.inPath = false;\n }\n }\n if (inPath === false) {\n return null;\n }\n\n var forward = null;\n var next = null;\n for (var _i2 = 0; _i2 < length; _i2 += 1) {\n var _point = points[_i2];\n if (!_point.inPath) {\n if (forward == null) {\n if (points[(_i2 - 1 + length) % length].inPath) {\n forward = _point.angle;\n }\n }\n if (next == null) {\n if (points[(_i2 + 1 + length) % length].inPath) {\n next = _point.angle;\n }\n }\n if (forward != null && next != null) {\n break;\n }\n }\n }\n var angle = (forward + (Math.PI * 2 + next - forward) % (Math.PI * 2) / 2) % (Math.PI * 2);\n return angle;\n};\n\n/**\r\n * 获取相对坐标\r\n * @param {*} x\r\n * @param {*} y\r\n * @param {*} elm\r\n */\nvar getRelativePos = function getRelativePos(x, y, $elm) {\n var offset = $elm.offset();\n if (offset == null) {\n offset.left = 0;\n offset.top = 0;\n }\n return {\n x: x - offset.left + $elm.scrollLeft(),\n y: y - offset.top + $elm.scrollTop()\n };\n};\n\n/**\r\n * 获取旋转后图形盒子位置数据\r\n * @param {*} data\r\n * @param {*} angle\r\n * @param {*} center\r\n */\nvar getRotatedBox = function getRotatedBox(data, angle, center) {\n if (angle === 0) {\n return data;\n } else {\n if (!center) {\n center = { x: data.x + data.width / 2, y: data.y + data.height / 2 };\n }\n var lt = getRotated(center, { x: data.x, y: data.y }, angle);\n var rt = getRotated(center, { x: data.x + data.width, y: data.y }, angle);\n var rb = getRotated(center, { x: data.x + data.width, y: data.y + data.height }, angle);\n var lb = getRotated(center, { x: data.x, y: data.y + data.height }, angle);\n\n var x = Math.min(lt.x, rt.x, rb.x, lb.x);\n var y = Math.min(lt.y, rt.y, rb.y, lb.y);\n var width = Math.max(lt.x, rt.x, rb.x, lb.x) - x;\n var height = Math.max(lt.y, rt.y, rb.y, lb.y) - y;\n\n return { x: x, y: y, width: width, height: height };\n }\n};\n\n/**\r\n * 获取旋转后点位置\r\n * @param {*} center\r\n * @param {*} position\r\n * @param {*} angle\r\n */\nvar getRotated = function getRotated(center, position, angle) {\n var distance = measureDistance(center, position);\n if (distance === 0 || angle === 0) {\n return position;\n }\n var atan = Math.atan(Math.abs(position.x - center.x) / Math.abs(center.y - position.y));\n if (position.x >= center.x && position.y >= center.y) {\n atan = Math.PI - atan;\n } else {\n if (position.x <= center.x && position.y >= center.y) {\n atan = Math.PI + atan;\n } else {\n if (position.x <= center.x && position.y <= center.y) {\n atan = Math.PI * 2 - atan;\n }\n }\n }\n atan = atan % (Math.PI * 2);\n // TODO:\n var xx = (atan + angle) % (Math.PI * 2);\n return {\n x: center.x + Math.sin(xx) * distance,\n y: center.y - Math.cos(xx) * distance\n };\n};\n\n/**\r\n * 获取图形盒子位置数据\r\n * @param {*} element\r\n */\nvar getShapeBox = function getShapeBox(element) {\n var plane = element.plane,\n shape = element.shape;\n\n return getRotatedBox(plane.bounds, shape.shapeStyle.angle);\n};\n\n/**\r\n * 根据位置获取图形\r\n * @param {*} data\r\n */\nvar getShapeByPosition = function getShapeByPosition(mouseX, mouseY, $container, xx) {\n var items = [];\n var elements = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get');\n for (var id in elements) {\n var element = elements[id];\n var data = element.data,\n plane = element.plane,\n shape = element.shape;\n\n var $shape = $container.find('.shape-box[data-id=\"' + data.id + '\"]');\n var position = $shape.position();\n var x = mouseX - position.left;\n var y = mouseY - position.top;\n var padding = void 0,\n mouseSize = void 0;\n var shapePos = {\n x: position.left,\n y: position.top,\n width: $shape.width(),\n height: $shape.height()\n };\n\n var $shapeCanvas = $shape.find('.shape-canvas');\n var shape2D = $shapeCanvas[0].getContext('2d');\n\n var inRect = pointInRect(mouseX, mouseY, shapePos);\n\n if (shape.bpmnName === 'SequenceFlow') {\n if (!inRect) {\n continue;\n }\n // TODO:\n if (xx) {\n continue;\n }\n\n padding = Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"k\" /* setScale */])(10);\n mouseSize = {\n x: mouseX - padding,\n y: mouseY - padding,\n width: padding * 2,\n height: padding * 2\n };\n var sourcePoint = {\n x: plane.waypoint[0].x,\n y: plane.waypoint[0].y\n };\n var targetPoint = {\n x: plane.waypoint[plane.waypoint.length - 1].x,\n y: plane.waypoint[plane.waypoint.length - 1].y\n };\n\n if (pointInRect(Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"k\" /* setScale */])(targetPoint.x), Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"k\" /* setScale */])(targetPoint.y), mouseSize)) {\n var targetData = { type: 'sequence_point', point: 'target', element: element };\n items.push(targetData);\n continue;\n } else {\n if (pointInRect(Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"k\" /* setScale */])(targetPoint.x), Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"k\" /* setScale */])(targetPoint.y), mouseSize)) {\n var sourceData = {\n type: 'sequence_point',\n point: 'source',\n element: element\n };\n items.push(sourceData);\n continue;\n } else {\n var $text = $shape.find('.text-box');\n var textPos = $text.position();\n var textSize = {\n x: textPos.left,\n y: textPos.top,\n width: $text.width(),\n height: $text.height()\n };\n if (pointInRect(x, y, textSize)) {\n var textData = { type: 'sequence_text', element: element };\n items.push(textData);\n continue;\n }\n\n padding = Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"k\" /* setScale */])(7);\n var inSequence = pointInSequence({ x: Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"i\" /* restoreScale */])(mouseX), y: Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"i\" /* restoreScale */])(mouseY) }, element, padding);\n if (inSequence > -1) {\n items.push({\n type: 'sequence',\n element: element,\n pointIndex: inSequence\n });\n continue;\n }\n }\n }\n } else {\n if (inRect && shape.locked && !xx) {\n if (shape2D.isPointInPath(x, y)) {\n items.push({ type: 'shape', element: element });\n }\n continue;\n }\n\n padding = Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"k\" /* setScale */])(7);\n\n if (inRect) {\n mouseSize = {\n x: mouseX - padding,\n y: mouseY - padding,\n width: padding * 2,\n height: padding * 2\n };\n shapePos = {\n x: plane.bounds.x + plane.bounds.width / 2,\n y: plane.bounds.y + plane.bounds.height / 2\n };\n var anchors = shape.getAnchors();\n var boundData = null;\n for (var _i3 = 0; _i3 < anchors.length; _i3 += 1) {\n var anchor = getRotated(shapePos, {\n x: plane.bounds.x + anchors[_i3].x,\n y: plane.bounds.y + anchors[_i3].y\n }, shape.shapeStyle.angle);\n if (pointInRect(Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"k\" /* setScale */])(anchor.x), Object(__WEBPACK_IMPORTED_MODULE_1__utils_utils__[\"k\" /* setScale */])(anchor.y), mouseSize)) {\n anchor.angle = getPointAngle($container, data.id, anchor.x, anchor.y, padding);\n boundData = { type: 'bounds', element: element, anchor: anchor };\n if (shape2D.isPointInPath(x, y)) {\n boundData.inPath = true;\n }\n break;\n }\n }\n if (boundData != null) {\n items.push(boundData);\n continue;\n }\n }\n if (!inRect) {\n continue;\n }\n\n if (shape2D.isPointInPath(x, y)) {\n if (xx) {\n var _anchors = shape.getAnchors();\n if (_anchors && _anchors.length) {\n items.push({ type: 'shape', element: element });\n continue;\n } else {\n continue;\n }\n } else {\n items.push({ type: 'shape', element: element });\n continue;\n }\n }\n }\n }\n\n var item = null;\n if (items.length === 1) {\n item = items[0];\n }\n if (items.length > 1 && xx) {\n item = items[0];\n } else {\n if (items.length > 1) {\n if (items[0].type === 'bounds' && items[0].type !== 'sequence_point' && items[0].type !== 'sequence') {\n return items[0];\n }\n var sequences = [];\n var sequencePoints = [];\n var bounds = [];\n for (var _i4 = 0; _i4 < items.length; _i4 += 1) {\n var item2 = items[_i4];\n if (item2.type === 'bounds') {\n bounds.push(item2);\n } else {\n if (item2.type === 'sequence') {\n sequences.push(item2);\n } else {\n if (item2.type === 'sequence_point') {\n sequencePoints.push(item2);\n }\n }\n }\n }\n if (bounds.length > 0 && sequencePoints.length > 0) {\n for (var i = 0; i < bounds.length; i += 1) {\n if (bounds[i].inPath) {\n item = bounds[i];\n break;\n }\n }\n }\n if (item == null && sequencePoints.length > 0) {\n sequencePoints.sort(function (item1, item2) {\n if (__WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.check', item1.element.data.id) && !__WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.check', item2.element.data.id)) {\n return -1;\n } else {\n if (!__WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.check', item1.element.data.id) && __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.check', item2.element.data.id)) {\n return 1;\n } else {\n return item2.element.shape.shapeStyle.zindex - item1.element.shape.shapeStyle.zindex;\n }\n }\n });\n item = sequencePoints[0];\n }\n if (item == null && sequences.length > 0) {\n sequences.sort(function (item1, item2) {\n if (__WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.check', item1.element.data.id) && !__WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.check', item2.element.data.id)) {\n return -1;\n } else {\n if (!__WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.check', item1.element.data.id) && __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.check', item2.element.data.id)) {\n return 1;\n } else {\n return item2.element.shape.shapeStyle.zindex - item1.element.shape.shapeStyle.zindex;\n }\n }\n });\n item = sequences[0];\n }\n if (item == null) {\n item = items[0];\n }\n }\n }\n return item;\n};\n\n/**\r\n * 测量距离\r\n * @param {*} point1\r\n * @param {*} point2\r\n */\nvar measureDistance = function measureDistance(point1, point2) {\n var distanceY = point2.y - point1.y;\n var distanceX = point2.x - point1.x;\n return Math.sqrt(Math.pow(distanceY, 2) + Math.pow(distanceX, 2));\n};\n\n/**\r\n * 设置虚线\r\n */\nvar setLineDash = function setLineDash(shape2D, segments) {\n if (!shape2D.setLineDash) {\n shape2D.setLineDash = function () {};\n }\n shape2D.setLineDash(segments);\n shape2D.mozDash = segments;\n shape2D.webkitLineDash = segments;\n};\n\n/**\r\n * 判断点是否在矩形上\r\n */\nvar pointInRect = function pointInRect(x, y, pos) {\n if (x >= pos.x && x <= pos.x + pos.width && y >= pos.y && y <= pos.y + pos.height) {\n return true;\n }\n return false;\n};\n\n/**\r\n *\r\n * @param {*} pos\r\n * @param {*} element\r\n * @param {*} padding\r\n */\nvar pointInSequence = function pointInSequence(pos, element, padding) {\n var points = getConnectionLinePoints(element);\n var left = { x: pos.x - padding, y: pos.y };\n var right = { x: pos.x + padding, y: pos.y };\n var bottom = { x: pos.x, y: pos.y - padding };\n var top = { x: pos.x, y: pos.y + padding };\n for (var i = 1; i < points.length; i += 1) {\n var forwardPoint = points[i - 1];\n var point = points[i];\n var isCross = checkCross(left, right, forwardPoint, point);\n if (isCross) {\n return i;\n }\n isCross = checkCross(bottom, top, forwardPoint, point);\n if (isCross) {\n return i;\n }\n }\n return -1;\n};\n\n/**\r\n *\r\n * @param {*} pos1\r\n * @param {*} pos2\r\n * @param {*} point1\r\n * @param {*} point2\r\n */\nvar checkCross = function checkCross(pos1, pos2, point1, point2) {\n var inCross = false;\n // TODO:\n var xx = (pos2.x - pos1.x) * (point2.y - point1.y) - (pos2.y - pos1.y) * (point2.x - point1.x);\n if (xx !== 0) {\n var c = ((pos1.y - point1.y) * (point2.x - point1.x) - (pos1.x - point1.x) * (point2.y - point1.y)) / xx;\n var b = ((pos1.y - point1.y) * (pos2.x - pos1.x) - (pos1.x - point1.x) * (pos2.y - pos1.y)) / xx;\n if (c >= 0 && c <= 1 && b >= 0 && b <= 1) {\n inCross = true;\n }\n }\n return inCross;\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n getAngle: getAngle,\n getAngleDir: getAngleDir,\n getBounding: getBounding,\n getConnectionLength: getConnectionLength,\n getConnectionMidpoint: getConnectionMidpoint,\n getConnectionPoints: getConnectionPoints,\n getEndpointAngle: getEndpointAngle,\n getElementIdsByRange: getElementIdsByRange,\n getConnectionBox: getConnectionBox,\n getLighterColor: getLighterColor,\n getDarkerColor: getDarkerColor,\n getDarkestColor: getDarkestColor,\n getOutConnections: getOutConnections,\n getPointAngle: getPointAngle,\n getRelativePos: getRelativePos,\n getRotated: getRotated,\n getRotatedBox: getRotatedBox,\n getSelectedConnectionIds: getSelectedConnectionIds,\n getShapeByPosition: getShapeByPosition,\n getShapeBox: getShapeBox,\n measureDistance: measureDistance,\n setLineDash: setLineDash\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvZHJhdy9kcmF3VXRpbHMuanM/MmZlNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRCdXMgZnJvbSAnLi4vY29yZS9ldmVudEJ1cydcclxuaW1wb3J0IHsgc2V0U2NhbGUsIHJlc3RvcmVTY2FsZSB9IGZyb20gJy4uL3V0aWxzL3V0aWxzJ1xyXG5cclxuLyoqXHJcbiAqIOiOt+WPluixoemZkFxyXG4gKiBAcGFyYW0geyp9IGFuZ2xlXHJcbiAqL1xyXG5jb25zdCBnZXRBbmdsZURpciA9IGFuZ2xlID0+IHtcclxuICBjb25zdCBwaSA9IE1hdGguUElcclxuICBpZiAoYW5nbGUgPj0gcGkgLyA0ICYmIGFuZ2xlIDwgKHBpIC8gNCkgKiAzKSB7XHJcbiAgICByZXR1cm4gMVxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAoYW5nbGUgPj0gKHBpIC8gNCkgKiAzICYmIGFuZ2xlIDwgKHBpIC8gNCkgKiA1KSB7XHJcbiAgICAgIHJldHVybiAyXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoYW5nbGUgPj0gKHBpIC8gNCkgKiA1ICYmIGFuZ2xlIDwgKHBpIC8gNCkgKiA3KSB7XHJcbiAgICAgICAgcmV0dXJuIDNcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gNFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICog5qC55o2u5Lik54K56I635Y+W6KeS5bqmXHJcbiAqIEBwYXJhbSB7Kn0gcG9pbnQxXHJcbiAqIEBwYXJhbSB7Kn0gcG9pbnQyXHJcbiAqL1xyXG5jb25zdCBnZXRBbmdsZSA9IChwb2ludDEsIHBvaW50MikgPT4ge1xyXG4gIGxldCBhbmdsZSA9IE1hdGguYXRhbihcclxuICAgIE1hdGguYWJzKHBvaW50MS55IC0gcG9pbnQyLnkpIC8gTWF0aC5hYnMocG9pbnQxLnggLSBwb2ludDIueClcclxuICApXHJcbiAgaWYgKHBvaW50Mi54IDw9IHBvaW50MS54ICYmIHBvaW50Mi55ID4gcG9pbnQxLnkpIHtcclxuICAgIGFuZ2xlID0gTWF0aC5QSSAtIGFuZ2xlXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChwb2ludDIueCA8IHBvaW50MS54ICYmIHBvaW50Mi55IDw9IHBvaW50MS55KSB7XHJcbiAgICAgIGFuZ2xlID0gTWF0aC5QSSArIGFuZ2xlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocG9pbnQyLnggPj0gcG9pbnQxLnggJiYgcG9pbnQyLnkgPCBwb2ludDEueSkge1xyXG4gICAgICAgIGFuZ2xlID0gTWF0aC5QSSAqIDIgLSBhbmdsZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBhbmdsZVxyXG59XHJcblxyXG4vKipcclxuICpcclxuICogQHBhcmFtIHsqfSBlbGVtZW50c1xyXG4gKi9cclxuY29uc3QgZ2V0Qm91bmRpbmcgPSBlbGVtZW50cyA9PiB7XHJcbiAgY29uc3QgcG9zID0geyB4MTogbnVsbCwgeTE6IG51bGwsIHgyOiBudWxsLCB5MjogbnVsbCB9XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2ldXHJcbiAgICBsZXQgc2l6ZVxyXG4gICAgaWYgKGVsZW1lbnQuc2hhcGUuYnBtbk5hbWUgPT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgIHNpemUgPSBnZXRDb25uZWN0aW9uQm94KGVsZW1lbnQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzaXplID0gZWxlbWVudC5wbGFuZS5ib3VuZHNcclxuICAgIH1cclxuICAgIGlmIChwb3MueDEgPT0gbnVsbCB8fCBzaXplLnggPCBwb3MueDEpIHtcclxuICAgICAgcG9zLngxID0gc2l6ZS54XHJcbiAgICB9XHJcbiAgICBpZiAocG9zLnkxID09IG51bGwgfHwgc2l6ZS55IDwgcG9zLnkxKSB7XHJcbiAgICAgIHBvcy55MSA9IHNpemUueVxyXG4gICAgfVxyXG4gICAgaWYgKHBvcy54MiA9PSBudWxsIHx8IHNpemUueCArIHNpemUud2lkdGggPiBwb3MueDIpIHtcclxuICAgICAgcG9zLngyID0gc2l6ZS54ICsgc2l6ZS53aWR0aFxyXG4gICAgfVxyXG4gICAgaWYgKHBvcy55MiA9PSBudWxsIHx8IHNpemUueSArIHNpemUuaGVpZ2h0ID4gcG9zLnkyKSB7XHJcbiAgICAgIHBvcy55MiA9IHNpemUueSArIHNpemUuaGVpZ2h0XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvbnN0IGJvdW5kID0ge1xyXG4gICAgeDogcG9zLngxLFxyXG4gICAgeTogcG9zLnkxLFxyXG4gICAgd2lkdGg6IHBvcy54MiAtIHBvcy54MSxcclxuICAgIGhlaWdodDogcG9zLnkyIC0gcG9zLnkxXHJcbiAgfVxyXG4gIHJldHVybiBib3VuZFxyXG59XHJcblxyXG4vKipcclxuICog6I635Y+W5ZyG6KGM54K56ZuG5ZCIXHJcbiAqIEBwYXJhbSB7Kn0geFxyXG4gKiBAcGFyYW0geyp9IHlcclxuICogQHBhcmFtIHsqfSBwYWRkaW5nXHJcbiAqL1xyXG5jb25zdCBnZXRDaXJjbGVQb2ludHMgPSAoeCwgeSwgcGFkZGluZykgPT4ge1xyXG4gIGNvbnN0IG51bSA9IE1hdGguUEkgLyAxOFxyXG4gIGNvbnN0IHBvaW50cyA9IFtdXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAzNjsgaSArPSAxKSB7XHJcbiAgICBjb25zdCBhbmdsZSA9IG51bSAqIGlcclxuICAgIGNvbnN0IHBvcyA9IHtcclxuICAgICAgeDogeCAtIE1hdGguY29zKGFuZ2xlKSAqIHBhZGRpbmcsXHJcbiAgICAgIHk6IHkgLSBNYXRoLnNpbihhbmdsZSkgKiBwYWRkaW5nLFxyXG4gICAgICBhbmdsZVxyXG4gICAgfVxyXG4gICAgcG9pbnRzLnB1c2gocG9zKVxyXG4gIH1cclxuICByZXR1cm4gcG9pbnRzXHJcbn1cclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAcGFyYW0geyp9IGVsZW1lbnRcclxuICovXHJcbmNvbnN0IGdldENvbm5lY3Rpb25MZW5ndGggPSBlbGVtZW50ID0+IHtcclxuICBjb25zdCBwb2ludHMgPSBnZXRDb25uZWN0aW9uTGluZVBvaW50cyhlbGVtZW50KVxyXG4gIGxldCBsZW5ndGggPSAwXHJcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBwb2ludHMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgIGNvbnN0IHBvaW50MSA9IHBvaW50c1tpIC0gMV1cclxuICAgIGNvbnN0IHBvaW50MiA9IHBvaW50c1tpXVxyXG4gICAgY29uc3QgZGlzdGFuY2UgPSBtZWFzdXJlRGlzdGFuY2UocG9pbnQxLCBwb2ludDIpXHJcbiAgICBsZW5ndGggKz0gZGlzdGFuY2VcclxuICB9XHJcbiAgcmV0dXJuIGxlbmd0aFxyXG59XHJcblxyXG4vKipcclxuICog5qC55o2u5Lyg5YWl6aKc6Imy6I635Y+W5rWF6ImyXHJcbiAqIEBwYXJhbSB7Kn0gY29sb3JcclxuICovXHJcbmNvbnN0IGdldExpZ2h0ZXJDb2xvciA9IChjb2xvciwgbGlnaHRlciA9IDYwKSA9PiB7XHJcbiAgY29uc3QgY29sb3JzID0gY29sb3Iuc3BsaXQoJywnKVxyXG4gIGNvbnN0IHIgPSBwYXJzZUludChjb2xvcnNbMF0pXHJcbiAgY29uc3QgZyA9IHBhcnNlSW50KGNvbG9yc1sxXSlcclxuICBjb25zdCBiID0gcGFyc2VJbnQoY29sb3JzWzJdKVxyXG4gIGxldCByMiA9IE1hdGgucm91bmQociArICgoMjU1IC0gcikgLyAyNTUpICogbGlnaHRlcilcclxuICBpZiAocjIgPiAyNTUpIHtcclxuICAgIHIyID0gMjU1XHJcbiAgfVxyXG4gIGxldCBnMiA9IE1hdGgucm91bmQoZyArICgoMjU1IC0gZykgLyAyNTUpICogbGlnaHRlcilcclxuICBpZiAoZzIgPiAyNTUpIHtcclxuICAgIGcyID0gMjU1XHJcbiAgfVxyXG4gIGxldCBiMiA9IE1hdGgucm91bmQoYiArICgoMjU1IC0gYikgLyAyNTUpICogbGlnaHRlcilcclxuICBpZiAoYjIgPiAyNTUpIHtcclxuICAgIGIyID0gMjU1XHJcbiAgfVxyXG4gIHJldHVybiByMiArICcsJyArIGcyICsgJywnICsgYjJcclxufVxyXG5cclxuLyoqXHJcbiAqIOagueaNruS8oOWFpeminOiJsuiOt+WPlua1heeBsOiJslxyXG4gKi9cclxuY29uc3QgZ2V0RGFya2VyQ29sb3IgPSAoY29sb3IsIGRhcmtlciA9IDEzKSA9PiB7XHJcbiAgY29uc3QgY29sb3JzID0gY29sb3Iuc3BsaXQoJywnKVxyXG4gIGNvbnN0IHIgPSBwYXJzZUludChjb2xvcnNbMF0pXHJcbiAgY29uc3QgZyA9IHBhcnNlSW50KGNvbG9yc1sxXSlcclxuICBjb25zdCBiID0gcGFyc2VJbnQoY29sb3JzWzJdKVxyXG4gIC8vIOeBsOW6puWQjlJHQuminOiJslxyXG4gIGxldCByMiA9IE1hdGgucm91bmQociAtIChyIC8gMjU1KSAqIGRhcmtlcilcclxuICBpZiAocjIgPCAwKSB7XHJcbiAgICByMiA9IDBcclxuICB9XHJcbiAgbGV0IGcyID0gTWF0aC5yb3VuZChnIC0gKGcgLyAyNTUpICogZGFya2VyKVxyXG4gIGlmIChnMiA8IDApIHtcclxuICAgIGcyID0gMFxyXG4gIH1cclxuICBsZXQgYjIgPSBNYXRoLnJvdW5kKGIgLSAoYiAvIDI1NSkgKiBkYXJrZXIpXHJcbiAgaWYgKGIyIDwgMCkge1xyXG4gICAgYjIgPSAwXHJcbiAgfVxyXG4gIHJldHVybiByMiArICcsJyArIGcyICsgJywnICsgYjJcclxufVxyXG5cclxuLyoqXHJcbiAqIOagueaNruS8oOWFpeminOiJsuiOt+WPlua3seeBsOiJslxyXG4gKi9cclxuY29uc3QgZ2V0RGFya2VzdENvbG9yID0gY29sb3IgPT4ge1xyXG4gIHJldHVybiBnZXREYXJrZXJDb2xvcihjb2xvciwgMjYpXHJcbn1cclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAcGFyYW0geyp9IHJhbmdlXHJcbiAqL1xyXG5jb25zdCBnZXRFbGVtZW50SWRzQnlSYW5nZSA9IHJhbmdlID0+IHtcclxuICBjb25zdCBlbGVtZW50cyA9IGV2ZW50QnVzLnRyaWdnZXIoJ2VsZW1lbnQuZ2V0JylcclxuICBjb25zdCBpdGVtcyA9IFtdXHJcbiAgZm9yIChsZXQgaWQgaW4gZWxlbWVudHMpIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tpZF1cclxuICAgIGxldCBib3VuZHMgPSBlbGVtZW50LnBsYW5lLmJvdW5kc1xyXG4gICAgaWYgKGVsZW1lbnQuc2hhcGUuYnBtbk5hbWUgPT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgIGJvdW5kcyA9IGdldENvbm5lY3Rpb25Cb3goZWxlbWVudClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJvdW5kcyA9IGdldFNoYXBlQm94KGVsZW1lbnQpXHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHBvaW50SW5SZWN0KGJvdW5kcy54LCBib3VuZHMueSwgcmFuZ2UpICYmXHJcbiAgICAgIHBvaW50SW5SZWN0KGJvdW5kcy54ICsgYm91bmRzLndpZHRoLCBib3VuZHMueSwgcmFuZ2UpICYmXHJcbiAgICAgIHBvaW50SW5SZWN0KGJvdW5kcy54ICsgYm91bmRzLndpZHRoLCBib3VuZHMueSArIGJvdW5kcy5oZWlnaHQsIHJhbmdlKSAmJlxyXG4gICAgICBwb2ludEluUmVjdChib3VuZHMueCwgYm91bmRzLnkgKyBib3VuZHMuaGVpZ2h0LCByYW5nZSlcclxuICAgICkge1xyXG4gICAgICBpdGVtcy5wdXNoKGVsZW1lbnQuZGF0YS5pZClcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGl0ZW1zXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDljp/ngrkx6LGh6ZmQLOebruagh+eCuTHosaHpmZBcclxuICogQHBhcmFtIHsqfSBwb2ludDFcclxuICogQHBhcmFtIHsqfSBwb2ludDJcclxuICogQHBhcmFtIHsqfSBzaGFwZTFcclxuICovXHJcbmNvbnN0IGdldFBvaW50c1dpdGhTMVQxID0gKHBvaW50MSwgcG9pbnQyLCBzaGFwZTEpID0+IHtcclxuICBjb25zdCByID0gMzBcclxuICBjb25zdCBwb2ludHMgPSBbXVxyXG4gIGNvbnN0IHsgeCwgd2lkdGggfSA9IHNoYXBlMS5wbGFuZS5ib3VuZHNcclxuICBjb25zdCBwb2ludCA9IHt9XHJcbiAgaWYgKHBvaW50Mi54ID49IHggLSByICYmIHBvaW50Mi54IDw9IHggKyB3aWR0aCArIHIpIHtcclxuICAgIGlmIChwb2ludDIueCA8IHggKyB3aWR0aCAvIDIpIHtcclxuICAgICAgcG9pbnQueCA9IHggLSByXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwb2ludC54ID0geCArIHdpZHRoICsgclxyXG4gICAgfVxyXG4gICAgcG9pbnQueSA9IHBvaW50MS55IC0gclxyXG4gICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDEueCwgeTogcG9pbnQueSB9KVxyXG4gICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludC54LCB5OiBwb2ludC55IH0pXHJcbiAgICBwb2ludC55ID0gcG9pbnQyLnkgLSByXHJcbiAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50LnkgfSlcclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50LnkgfSlcclxuICB9IGVsc2Uge1xyXG4gICAgcG9pbnQueSA9IHBvaW50MS55IC0gclxyXG4gICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDEueCwgeTogcG9pbnQueSB9KVxyXG4gICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDIueCwgeTogcG9pbnQueSB9KVxyXG4gIH1cclxuICByZXR1cm4gcG9pbnRzXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDljp/ngrky6LGh6ZmQLOebruagh+eCuTLosaHpmZBcclxuICogQHBhcmFtIHsqfSBwb2ludDFcclxuICogQHBhcmFtIHsqfSBwb2ludDJcclxuICogQHBhcmFtIHsqfSBzaGFwZTFcclxuICovXHJcbmNvbnN0IGdldFBvaW50c1dpdGhTMlQyID0gKHBvaW50MSwgcG9pbnQyLCBzaGFwZTEpID0+IHtcclxuICBjb25zdCByID0gMzBcclxuICBjb25zdCBwb2ludHMgPSBbXVxyXG4gIGNvbnN0IHsgeSwgaGVpZ2h0IH0gPSBzaGFwZTEucGxhbmUuYm91bmRzXHJcbiAgY29uc3QgcG9pbnQgPSB7fVxyXG4gIGlmIChwb2ludDIueSA+PSB5IC0gciAmJiBwb2ludDIueSA8PSB5ICsgaGVpZ2h0ICsgcikge1xyXG4gICAgcG9pbnQueCA9IHBvaW50MS54ICsgclxyXG4gICAgaWYgKHBvaW50Mi55IDwgeSArIGhlaWdodCAvIDIpIHtcclxuICAgICAgcG9pbnQueSA9IHkgLSByXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwb2ludC55ID0geSArIGhlaWdodCArIHJcclxuICAgIH1cclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQxLnkgfSlcclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQueSB9KVxyXG4gICAgcG9pbnQueCA9IHBvaW50Mi54ICsgclxyXG4gICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludC54LCB5OiBwb2ludC55IH0pXHJcbiAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50Mi55IH0pXHJcbiAgfSBlbHNlIHtcclxuICAgIHBvaW50LnggPSBwb2ludDEueCArIHJcclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQxLnkgfSlcclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQyLnkgfSlcclxuICB9XHJcblxyXG4gIHJldHVybiBwb2ludHNcclxufVxyXG5cclxuLyoqXHJcbiAqIOWOn+eCuTPosaHpmZAs55uu5qCH54K5M+ixoemZkFxyXG4gKiBAcGFyYW0geyp9IHBvaW50MVxyXG4gKiBAcGFyYW0geyp9IHBvaW50MlxyXG4gKiBAcGFyYW0geyp9IHNoYXBlMVxyXG4gKi9cclxuY29uc3QgZ2V0UG9pbnRzV2l0aFMzVDMgPSAocG9pbnQxLCBwb2ludDIsIHNoYXBlMSkgPT4ge1xyXG4gIGNvbnN0IHIgPSAzMFxyXG4gIGNvbnN0IHBvaW50cyA9IFtdXHJcbiAgY29uc3QgeyB4LCB3aWR0aCB9ID0gc2hhcGUxLnBsYW5lLmJvdW5kc1xyXG4gIGNvbnN0IHBvaW50ID0ge31cclxuICBpZiAocG9pbnQyLnggPj0geCAtIHIgJiYgcG9pbnQyLnggPD0geCArIHdpZHRoICsgcikge1xyXG4gICAgaWYgKHBvaW50Mi54IDwgeCArIHdpZHRoIC8gMikge1xyXG4gICAgICBwb2ludC54ID0geCAtIHJcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBvaW50LnggPSB4ICsgd2lkdGggKyByXHJcbiAgICB9XHJcbiAgICBwb2ludC55ID0gcG9pbnQxLnkgKyByXHJcbiAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50MS54LCB5OiBwb2ludC55IH0pXHJcbiAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50LnkgfSlcclxuICAgIHBvaW50LnkgPSBwb2ludDIueSArIHJcclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQueSB9KVxyXG4gICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDIueCwgeTogcG9pbnQueSB9KVxyXG4gIH0gZWxzZSB7XHJcbiAgICBwb2ludC55ID0gcG9pbnQxLnkgKyByXHJcbiAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50MS54LCB5OiBwb2ludC55IH0pXHJcbiAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50Mi54LCB5OiBwb2ludC55IH0pXHJcbiAgfVxyXG5cclxuICByZXR1cm4gcG9pbnRzXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDljp/ngrk06LGh6ZmQLOebruagh+eCuTTosaHpmZBcclxuICogQHBhcmFtIHsqfSBwb2ludDFcclxuICogQHBhcmFtIHsqfSBwb2ludDJcclxuICogQHBhcmFtIHsqfSBzaGFwZTFcclxuICovXHJcbmNvbnN0IGdldFBvaW50c1dpdGhTNFQ0ID0gKHBvaW50MSwgcG9pbnQyLCBzaGFwZTEpID0+IHtcclxuICBjb25zdCByID0gMzBcclxuICBjb25zdCBwb2ludHMgPSBbXVxyXG4gIGNvbnN0IHsgeSwgaGVpZ2h0IH0gPSBzaGFwZTEucGxhbmUuYm91bmRzXHJcbiAgY29uc3QgcG9pbnQgPSB7fVxyXG4gIGlmIChwb2ludDIueSA+PSB5IC0gciAmJiBwb2ludDIueSA8PSB5ICsgaGVpZ2h0ICsgcikge1xyXG4gICAgcG9pbnQueCA9IHBvaW50MS54ICsgclxyXG4gICAgaWYgKHBvaW50Mi55IDwgeSArIGhlaWdodCAvIDIpIHtcclxuICAgICAgcG9pbnQueSA9IHkgLSByXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwb2ludC55ID0geSArIGhlaWdodCArIHJcclxuICAgIH1cclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQxLnkgfSlcclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQueSB9KVxyXG4gICAgcG9pbnQueCA9IHBvaW50Mi54IC0gclxyXG4gICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludC54LCB5OiBwb2ludC55IH0pXHJcbiAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50Mi55IH0pXHJcbiAgfSBlbHNlIHtcclxuICAgIHBvaW50LnggPSBwb2ludDEueCAtIHJcclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQxLnkgfSlcclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQyLnkgfSlcclxuICB9XHJcbiAgcmV0dXJuIHBvaW50c1xyXG59XHJcblxyXG4vKipcclxuICog5Y6f54K5MeixoemZkCznm67moIfngrkz6LGh6ZmQXHJcbiAqIEBwYXJhbSB7Kn0gcG9pbnQxXHJcbiAqIEBwYXJhbSB7Kn0gcG9pbnQyXHJcbiAqIEBwYXJhbSB7Kn0gc2hhcGUxXHJcbiAqL1xyXG5jb25zdCBnZXRQb2ludHNXaXRoUzFUMyA9IChwb2ludDEsIHBvaW50Miwgc2hhcGUxLCBzaGFwZTIsIGRpc3RhbmNlWSkgPT4ge1xyXG4gIGNvbnN0IHIgPSAzMFxyXG4gIGNvbnN0IHBvaW50cyA9IFtdXHJcbiAgY29uc3QgYm91bmRzMSA9IHNoYXBlMS5wbGFuZS5ib3VuZHNcclxuICBjb25zdCBib3VuZHMyID0gc2hhcGUyLnBsYW5lLmJvdW5kc1xyXG4gIGNvbnN0IHBvaW50ID0ge31cclxuICBpZiAocG9pbnQyLnkgPD0gcG9pbnQxLnkpIHtcclxuICAgIHBvaW50LnkgPSBwb2ludDEueSAtIGRpc3RhbmNlWSAvIDJcclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQxLngsIHk6IHBvaW50LnkgfSlcclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50LnkgfSlcclxuICB9IGVsc2Uge1xyXG4gICAgbGV0IHNoYXBlMVIgPSBib3VuZHMxLnggKyBib3VuZHMxLndpZHRoXHJcbiAgICBsZXQgc2hhcGUyUiA9IGJvdW5kczIueCArIGJvdW5kczIud2lkdGhcclxuICAgIHBvaW50LnkgPSBwb2ludDEueSAtIHJcclxuICAgIGlmIChzaGFwZTJSID49IGJvdW5kczEueCAmJiBib3VuZHMyLnggPD0gc2hhcGUxUikge1xyXG4gICAgICBsZXQgY2VudGVyWCA9IGJvdW5kczEueCArIGJvdW5kczEud2lkdGggLyAyXHJcbiAgICAgIGlmIChwb2ludDIueCA8IGNlbnRlclgpIHtcclxuICAgICAgICBwb2ludC54ID0gYm91bmRzMS54IDwgYm91bmRzMi54ID8gYm91bmRzMS54IC0gciA6IGJvdW5kczIueCAtIHJcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwb2ludC54ID0gc2hhcGUxUiA+IHNoYXBlMlIgPyBzaGFwZTFSICsgciA6IHNoYXBlMlIgKyByXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGJvdW5kczIueSA8IHBvaW50MS55KSB7XHJcbiAgICAgICAgcG9pbnQueSA9IGJvdW5kczIueSAtIHJcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBvaW50Mi54IDwgcG9pbnQxLngpIHtcclxuICAgICAgICBwb2ludC54ID0gc2hhcGUyUiArIChib3VuZHMxLnggLSBzaGFwZTJSKSAvIDJcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwb2ludC54ID0gc2hhcGUxUiArIChib3VuZHMyLnggLSBzaGFwZTFSKSAvIDJcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDEueCwgeTogcG9pbnQueSB9KVxyXG4gICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludC54LCB5OiBwb2ludC55IH0pXHJcbiAgICBwb2ludC55ID0gcG9pbnQyLnkgKyByXHJcbiAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50LnkgfSlcclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50LnkgfSlcclxuICB9XHJcblxyXG4gIHJldHVybiBwb2ludHNcclxufVxyXG5cclxuLyoqXHJcbiAqIOWOn+eCuTLosaHpmZAs55uu5qCH54K5NOixoemZkFxyXG4gKiBAcGFyYW0geyp9IHBvaW50MVxyXG4gKiBAcGFyYW0geyp9IHBvaW50MlxyXG4gKiBAcGFyYW0geyp9IHNoYXBlMVxyXG4gKi9cclxuY29uc3QgZ2V0UG9pbnRzV2l0aFMyVDQgPSAocG9pbnQxLCBwb2ludDIsIHNoYXBlMSwgc2hhcGUyLCBkaXN0YW5jZVgpID0+IHtcclxuICBjb25zdCByID0gMzBcclxuICBjb25zdCBwb2ludHMgPSBbXVxyXG4gIGNvbnN0IGJvdW5kczEgPSBzaGFwZTEucGxhbmUuYm91bmRzXHJcbiAgY29uc3QgYm91bmRzMiA9IHNoYXBlMi5wbGFuZS5ib3VuZHNcclxuICBjb25zdCBwb2ludCA9IHt9XHJcblxyXG4gIGlmIChwb2ludDIueCA+IHBvaW50MS54KSB7XHJcbiAgICBwb2ludC54ID0gcG9pbnQxLnggKyBkaXN0YW5jZVggLyAyXHJcbiAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50MS55IH0pXHJcbiAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50Mi55IH0pXHJcbiAgfSBlbHNlIHtcclxuICAgIGxldCBzaGFwZTFCID0gYm91bmRzMS55ICsgYm91bmRzMS5oZWlnaHRcclxuICAgIGxldCBzaGFwZTJCID0gYm91bmRzMi55ICsgYm91bmRzMi5oZWlnaHRcclxuICAgIHBvaW50LnggPSBwb2ludDEueCArIHJcclxuICAgIGlmIChzaGFwZTJCID49IGJvdW5kczEueSAmJiBib3VuZHMyLnkgPD0gc2hhcGUxQikge1xyXG4gICAgICBsZXQgY2VudGVyWSA9IGJvdW5kczEueSArIGJvdW5kczEuaGVpZ2h0IC8gMlxyXG4gICAgICBpZiAocG9pbnQyLnkgPCBjZW50ZXJZKSB7XHJcbiAgICAgICAgcG9pbnQueSA9IGJvdW5kczEueSA8IGJvdW5kczIueSA/IGJvdW5kczEueSAtIHIgOiBib3VuZHMyLnkgLSByXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcG9pbnQueSA9IHNoYXBlMUIgPiBzaGFwZTJCID8gc2hhcGUxQiArIHIgOiBzaGFwZTJCICsgclxyXG4gICAgICB9XHJcbiAgICAgIGlmIChib3VuZHMyLnggKyBib3VuZHMyLndpZHRoID4gcG9pbnQxLngpIHtcclxuICAgICAgICBwb2ludC54ID0gYm91bmRzMi54ICsgYm91bmRzMi53aWR0aCArIHJcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBvaW50Mi55IDwgcG9pbnQxLnkpIHtcclxuICAgICAgICBwb2ludC55ID0gc2hhcGUyQiArIChib3VuZHMxLnkgLSBzaGFwZTJCKSAvIDJcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwb2ludC55ID0gc2hhcGUxQiArIChib3VuZHMyLnkgLSBzaGFwZTFCKSAvIDJcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludC54LCB5OiBwb2ludDEueSB9KVxyXG4gICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludC54LCB5OiBwb2ludC55IH0pXHJcbiAgICBwb2ludC54ID0gcG9pbnQyLnggLSByXHJcbiAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50LnkgfSlcclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQyLnkgfSlcclxuICB9XHJcbiAgcmV0dXJuIHBvaW50c1xyXG59XHJcblxyXG4vKipcclxuICog5Y6f54K5MeixoemZkCznm67moIfngrky6LGh6ZmQXHJcbiAqIEBwYXJhbSB7Kn0gcG9pbnQxXHJcbiAqIEBwYXJhbSB7Kn0gcG9pbnQyXHJcbiAqIEBwYXJhbSB7Kn0gc2hhcGUxXHJcbiAqL1xyXG5jb25zdCBnZXRQb2ludHNXaXRoUzFUMiA9IChwb2ludDEsIHBvaW50Miwgc2hhcGUxLCBzaGFwZTIpID0+IHtcclxuICBjb25zdCByID0gMzBcclxuICBjb25zdCBwb2ludHMgPSBbXVxyXG4gIGNvbnN0IGJvdW5kczEgPSBzaGFwZTEucGxhbmUuYm91bmRzXHJcbiAgY29uc3QgYm91bmRzMiA9IHNoYXBlMi5wbGFuZS5ib3VuZHNcclxuICBjb25zdCBwb2ludCA9IHt9XHJcblxyXG4gIGlmIChwb2ludDIueCA+IHBvaW50MS54ICYmIHBvaW50Mi55ID4gcG9pbnQxLnkpIHtcclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50MS55IH0pXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChwb2ludDIueCA+IHBvaW50MS54ICYmIGJvdW5kczIueCA+IHBvaW50MS54KSB7XHJcbiAgICAgIGlmIChib3VuZHMyLnggLSBwb2ludDEueCA8IHIgKiAyKSB7XHJcbiAgICAgICAgcG9pbnQueCA9IHBvaW50MS54ICsgKGJvdW5kczIueCAtIHBvaW50MS54KSAvIDJcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwb2ludC54ID0gcG9pbnQxLnggKyByXHJcbiAgICAgIH1cclxuICAgICAgcG9pbnQueSA9IHBvaW50Mi55IC0gclxyXG4gICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50MS55IH0pXHJcbiAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQueSB9KVxyXG4gICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50Mi54LCB5OiBwb2ludC55IH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocG9pbnQyLnggPD0gcG9pbnQxLnggJiYgcG9pbnQyLnkgPiBib3VuZHMxLnkgKyBib3VuZHMxLmhlaWdodCkge1xyXG4gICAgICAgIGxldCBzaGFwZTFCID0gYm91bmRzMS55ICsgYm91bmRzMS5oZWlnaHRcclxuICAgICAgICBwb2ludC54ID0gcG9pbnQxLnggKyByXHJcblxyXG4gICAgICAgIGlmIChwb2ludDIueSAtIHNoYXBlMUIgPCByICogMikge1xyXG4gICAgICAgICAgcG9pbnQueSA9IHNoYXBlMUIgKyAocG9pbnQyLnkgLSBzaGFwZTFCKSAvIDJcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcG9pbnQueSA9IHBvaW50Mi55IC0gclxyXG4gICAgICAgIH1cclxuICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50MS55IH0pXHJcbiAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludC54LCB5OiBwb2ludC55IH0pXHJcbiAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDIueCwgeTogcG9pbnQueSB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBzaGFwZTJSID0gYm91bmRzMi54ICsgYm91bmRzMi53aWR0aFxyXG4gICAgICAgIGlmIChzaGFwZTJSID4gcG9pbnQxLngpIHtcclxuICAgICAgICAgIHBvaW50LnggPSBzaGFwZTJSICsgclxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwb2ludC54ID0gcG9pbnQxLnggKyByXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocG9pbnQyLnkgPCBib3VuZHMxLnkpIHtcclxuICAgICAgICAgIHBvaW50LnkgPSBwb2ludDIueSAtIHJcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcG9pbnQueSA9IGJvdW5kczEueSAtIHJcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludC54LCB5OiBwb2ludDEueSB9KVxyXG4gICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQueSB9KVxyXG4gICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50LnkgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBvaW50c1xyXG59XHJcblxyXG4vKipcclxuICog5Y6f54K5MeixoemZkCznm67moIfngrk06LGh6ZmQXHJcbiAqIEBwYXJhbSB7Kn0gcG9pbnQxXHJcbiAqIEBwYXJhbSB7Kn0gcG9pbnQyXHJcbiAqIEBwYXJhbSB7Kn0gc2hhcGUxXHJcbiAqL1xyXG5jb25zdCBnZXRQb2ludHNXaXRoUzFUNCA9IChwb2ludDEsIHBvaW50Miwgc2hhcGUxLCBzaGFwZTIpID0+IHtcclxuICBjb25zdCByID0gMzBcclxuICBjb25zdCBwb2ludHMgPSBbXVxyXG4gIGNvbnN0IGJvdW5kczEgPSBzaGFwZTEucGxhbmUuYm91bmRzXHJcbiAgY29uc3QgYm91bmRzMiA9IHNoYXBlMi5wbGFuZS5ib3VuZHNcclxuICBjb25zdCBwb2ludCA9IHt9XHJcblxyXG4gIGxldCBzaGFwZTJSID0gYm91bmRzMi54ICsgYm91bmRzMi53aWR0aFxyXG4gIGlmIChwb2ludDIueCA8IHBvaW50MS54ICYmIHBvaW50Mi55ID4gcG9pbnQxLnkpIHtcclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50MS55IH0pXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChwb2ludDIueCA8IHBvaW50MS54ICYmIHNoYXBlMlIgPCBwb2ludDEueCkge1xyXG4gICAgICBpZiAocG9pbnQxLnggLSBzaGFwZTJSIDwgciAqIDIpIHtcclxuICAgICAgICBwb2ludC54ID0gc2hhcGUyUiArIChwb2ludDEueCAtIHNoYXBlMlIpIC8gMlxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBvaW50LnggPSBwb2ludDEueCAtIHJcclxuICAgICAgfVxyXG4gICAgICBwb2ludC55ID0gcG9pbnQyLnkgLSByXHJcbiAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQxLnkgfSlcclxuICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludC54LCB5OiBwb2ludC55IH0pXHJcbiAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50LnkgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwb2ludDIueCA+PSBwb2ludDEueCAmJiBwb2ludDIueSA+IGJvdW5kczEueSArIGJvdW5kczEuaGVpZ2h0KSB7XHJcbiAgICAgICAgbGV0IHNoYXBlMUIgPSBib3VuZHMxLnkgKyBib3VuZHMxLmhlaWdodFxyXG4gICAgICAgIHBvaW50LnggPSBwb2ludDEueCAtIHJcclxuICAgICAgICBpZiAocG9pbnQyLnkgLSBzaGFwZTFCIDwgciAqIDIpIHtcclxuICAgICAgICAgIHBvaW50LnkgPSBzaGFwZTFCICsgKHBvaW50Mi55IC0gc2hhcGUxQikgLyAyXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBvaW50LnkgPSBwb2ludDIueSAtIHJcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludC54LCB5OiBwb2ludDEueSB9KVxyXG4gICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQueSB9KVxyXG4gICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50LnkgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoYm91bmRzMi54IDwgcG9pbnQxLngpIHtcclxuICAgICAgICAgIHBvaW50LnggPSBib3VuZHMyLnggLSByXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBvaW50LnggPSBwb2ludDEueCAtIHJcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBvaW50Mi55IDwgYm91bmRzMS55KSB7XHJcbiAgICAgICAgICBwb2ludC55ID0gcG9pbnQyLnkgLSByXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBvaW50LnkgPSBib3VuZHMxLnkgLSByXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQxLnkgfSlcclxuICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50LnkgfSlcclxuICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50Mi54LCB5OiBwb2ludC55IH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBwb2ludHNcclxufVxyXG5cclxuLyoqXHJcbiAqIOWOn+eCuTHosaHpmZAs55uu5qCH54K5NOixoemZkFxyXG4gKiBAcGFyYW0geyp9IHBvaW50MVxyXG4gKiBAcGFyYW0geyp9IHBvaW50MlxyXG4gKiBAcGFyYW0geyp9IHNoYXBlMVxyXG4gKi9cclxuY29uc3QgZ2V0UG9pbnRzV2l0aFMyVDMgPSAocG9pbnQxLCBwb2ludDIsIHNoYXBlMSwgc2hhcGUyKSA9PiB7XHJcbiAgY29uc3QgciA9IDMwXHJcbiAgY29uc3QgcG9pbnRzID0gW11cclxuICBjb25zdCBib3VuZHMxID0gc2hhcGUxLnBsYW5lLmJvdW5kc1xyXG4gIGNvbnN0IGJvdW5kczIgPSBzaGFwZTIucGxhbmUuYm91bmRzXHJcbiAgY29uc3QgcG9pbnQgPSB7fVxyXG5cclxuICBpZiAocG9pbnQyLnggPiBwb2ludDEueCAmJiBwb2ludDIueSA8IHBvaW50MS55KSB7XHJcbiAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50Mi54LCB5OiBwb2ludDEueSB9KVxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAocG9pbnQyLnggPiBwb2ludDEueCAmJiBib3VuZHMyLnggPiBwb2ludDEueCkge1xyXG4gICAgICBpZiAoYm91bmRzMi54IC0gcG9pbnQxLnggPCByICogMikge1xyXG4gICAgICAgIHBvaW50LnggPSBwb2ludDEueCArIChib3VuZHMyLnggLSBwb2ludDEueCkgLyAyXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcG9pbnQueCA9IHBvaW50MS54ICsgclxyXG4gICAgICB9XHJcbiAgICAgIHBvaW50LnkgPSBwb2ludDIueSArIHJcclxuICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludC54LCB5OiBwb2ludDEueSB9KVxyXG4gICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50LnkgfSlcclxuICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDIueCwgeTogcG9pbnQueSB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBvaW50Mi54IDw9IHBvaW50MS54ICYmIHBvaW50Mi55IDwgYm91bmRzMS55KSB7XHJcbiAgICAgICAgcG9pbnQueCA9IHBvaW50MS54ICsgclxyXG5cclxuICAgICAgICBpZiAoYm91bmRzMS55IC0gcG9pbnQyLnkgPCByICogMikge1xyXG4gICAgICAgICAgcG9pbnQueSA9IHBvaW50Mi55ICsgKGJvdW5kczEueSAtIHBvaW50Mi55KSAvIDJcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcG9pbnQueSA9IHBvaW50Mi55ICsgclxyXG4gICAgICAgIH1cclxuICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50MS55IH0pXHJcbiAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludC54LCB5OiBwb2ludC55IH0pXHJcbiAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDIueCwgeTogcG9pbnQueSB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBzaGFwZTJSID0gYm91bmRzMi54ICsgYm91bmRzMi53aWR0aFxyXG4gICAgICAgIGlmIChzaGFwZTJSID4gcG9pbnQxLngpIHtcclxuICAgICAgICAgIHBvaW50LnggPSBzaGFwZTJSICsgclxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwb2ludC54ID0gcG9pbnQxLnggKyByXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwb2ludDIueSA+IGJvdW5kczEueSArIGJvdW5kczEuaGVpZ2h0KSB7XHJcbiAgICAgICAgICBwb2ludC55ID0gcG9pbnQyLnkgKyByXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBvaW50LnkgPSBib3VuZHMxLnkgKyBib3VuZHMxLmhlaWdodCArIHJcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludC54LCB5OiBwb2ludDEueSB9KVxyXG4gICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQueSB9KVxyXG4gICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50LnkgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBvaW50c1xyXG59XHJcblxyXG4vKipcclxuICog5Y6f54K5MeixoemZkCznm67moIfngrk06LGh6ZmQXHJcbiAqIEBwYXJhbSB7Kn0gcG9pbnQxXHJcbiAqIEBwYXJhbSB7Kn0gcG9pbnQyXHJcbiAqIEBwYXJhbSB7Kn0gc2hhcGUxXHJcbiAqL1xyXG5jb25zdCBnZXRQb2ludHNXaXRoUzNUNCA9IChwb2ludDEsIHBvaW50Miwgc2hhcGUxLCBzaGFwZTIpID0+IHtcclxuICBjb25zdCByID0gMzBcclxuICBjb25zdCBwb2ludHMgPSBbXVxyXG4gIGNvbnN0IGJvdW5kczEgPSBzaGFwZTEucGxhbmUuYm91bmRzXHJcbiAgY29uc3QgYm91bmRzMiA9IHNoYXBlMi5wbGFuZS5ib3VuZHNcclxuICBjb25zdCBwb2ludCA9IHt9XHJcblxyXG4gIGxldCBzaGFwZTJSID0gYm91bmRzMi54ICsgYm91bmRzMi53aWR0aFxyXG4gIGlmIChwb2ludDIueCA8IHBvaW50MS54ICYmIHBvaW50Mi55IDwgcG9pbnQxLnkpIHtcclxuICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50MS55IH0pXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChwb2ludDIueCA8IHBvaW50MS54ICYmIHNoYXBlMlIgPCBwb2ludDEueCkge1xyXG4gICAgICBpZiAocG9pbnQxLnggLSBzaGFwZTJSIDwgciAqIDIpIHtcclxuICAgICAgICBwb2ludC54ID0gc2hhcGUyUiArIChwb2ludDEueCAtIHNoYXBlMlIpIC8gMlxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBvaW50LnggPSBwb2ludDEueCAtIHJcclxuICAgICAgfVxyXG4gICAgICBwb2ludC55ID0gcG9pbnQyLnkgKyByXHJcbiAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQxLnkgfSlcclxuICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludC54LCB5OiBwb2ludC55IH0pXHJcbiAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50LnkgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwb2ludDIueCA+PSBwb2ludDEueCAmJiBwb2ludDIueSA8IGJvdW5kczEueSkge1xyXG4gICAgICAgIHBvaW50LnggPSBwb2ludDEueCAtIHJcclxuICAgICAgICBpZiAoYm91bmRzMS55IC0gcG9pbnQyLnkgPCByICogMikge1xyXG4gICAgICAgICAgcG9pbnQueSA9IHBvaW50Mi55ICsgKGJvdW5kczEueSAtIHBvaW50Mi55KSAvIDJcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcG9pbnQueSA9IHBvaW50Mi55ICsgclxyXG4gICAgICAgIH1cclxuICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50MS55IH0pXHJcbiAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludC54LCB5OiBwb2ludC55IH0pXHJcbiAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDIueCwgeTogcG9pbnQueSB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChib3VuZHMyLnggPCBwb2ludDEueCkge1xyXG4gICAgICAgICAgcG9pbnQueCA9IGJvdW5kczIueCAtIHJcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcG9pbnQueCA9IHBvaW50MS54IC0gclxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9pbnQyLnkgPiBib3VuZHMxLnkgKyBib3VuZHMxLmhlaWdodCkge1xyXG4gICAgICAgICAgcG9pbnQueSA9IHBvaW50Mi55ICsgclxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwb2ludC55ID0gYm91bmRzMS55ICsgYm91bmRzMS5oZWlnaHQgKyByXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQueCwgeTogcG9pbnQxLnkgfSlcclxuICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50LngsIHk6IHBvaW50LnkgfSlcclxuICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50Mi54LCB5OiBwb2ludC55IH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBwb2ludHNcclxufVxyXG5cclxuY29uc3QgZ2V0QmV6aWVyQ3VyY2UgPSAocG9pbnQxLCBwb2ludDIsIGlkLCBrKSA9PiB7XHJcbiAgaWYgKGlkICE9IG51bGwpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHg6IHBvaW50MS54IC0gayAqIE1hdGguY29zKHBvaW50MS5hbmdsZSksXHJcbiAgICAgIHk6IHBvaW50MS55IC0gayAqIE1hdGguc2luKHBvaW50MS5hbmdsZSlcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgYWJzWSA9IE1hdGguYWJzKHBvaW50MS55IC0gcG9pbnQyLnkpXHJcbiAgICBjb25zdCBhYnNYID0gTWF0aC5hYnMocG9pbnQxLnggLSBwb2ludDIueClcclxuICAgIGNvbnN0IGF0YW4gPSBNYXRoLmF0YW4oYWJzWSAvIGFic1gpXHJcbiAgICBjb25zdCBwb2ludCA9IHt9XHJcbiAgICBpZiAocG9pbnQxLnggPD0gcG9pbnQyLngpIHtcclxuICAgICAgcG9pbnQueCA9IHBvaW50MS54ICsgayAqIE1hdGguY29zKGF0YW4pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwb2ludC54ID0gcG9pbnQxLnggLSBrICogTWF0aC5jb3MoYXRhbilcclxuICAgIH1cclxuICAgIGlmIChwb2ludDEueSA8PSBwb2ludDIueSkge1xyXG4gICAgICBwb2ludC55ID0gcG9pbnQxLnkgKyBrICogTWF0aC5zaW4oYXRhbilcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBvaW50LnkgPSBwb2ludDEueSAtIGsgKiBNYXRoLnNpbihhdGFuKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBvaW50XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICog6I635Y+W6L+e57q/54K56ZuG5ZCIXHJcbiAqIEBwYXJhbSB7Kn0gY29ubmVjdGlvblxyXG4gKi9cclxuY29uc3QgZ2V0Q29ubmVjdGlvblBvaW50cyA9IChjb25uZWN0aW9uLCBlbGVtZW50cykgPT4ge1xyXG4gIGNvbnN0IHsgc291cmNlUmVmLCB0YXJnZXRSZWYgfSA9IGNvbm5lY3Rpb24uZGF0YVxyXG4gIGNvbnN0IHNvdXJjZVNoYXBlID0gZWxlbWVudHNbc291cmNlUmVmXVxyXG4gIGNvbnN0IHRhcmdldFNoYXBlID0gZWxlbWVudHNbdGFyZ2V0UmVmXVxyXG4gIGNvbnN0IHsgd2F5cG9pbnQgfSA9IGNvbm5lY3Rpb24ucGxhbmVcclxuICBjb25zdCBzb3VyY2VQb2ludCA9IHdheXBvaW50WzBdXHJcbiAgY29uc3QgdGFyZ2V0UG9pbnQgPSB3YXlwb2ludFt3YXlwb2ludC5sZW5ndGggLSAxXVxyXG4gIGxldCBwb2ludHMgPSBbXVxyXG5cclxuICAvLyDmipjnur9cclxuICBpZiAoY29ubmVjdGlvbi5saW5rZXJUeXBlID09PSAnYnJva2VuJykge1xyXG4gICAgY29uc3QgZGlzdGFuY2VYID0gTWF0aC5hYnModGFyZ2V0UG9pbnQueCAtIHNvdXJjZVBvaW50LngpXHJcbiAgICBjb25zdCBkaXN0YW5jZVkgPSBNYXRoLmFicyh0YXJnZXRQb2ludC55IC0gc291cmNlUG9pbnQueSlcclxuXHJcbiAgICBjb25zdCBwaSA9IE1hdGguUElcclxuXHJcbiAgICB2YXIgciA9IDMwXHJcblxyXG4gICAgbGV0IHJldmVyc2UgPSBmYWxzZVxyXG4gICAgbGV0IHBvaW50MSwgcG9pbnQyXHJcbiAgICBsZXQgc2hhcGUxLCBzaGFwZTJcclxuICAgIGxldCBhbmdsZVxyXG5cclxuICAgIGlmIChzb3VyY2VSZWYgIT0gbnVsbCAmJiB0YXJnZXRSZWYgIT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBzb3VyY2VRdWFkcmFudCA9IGdldEFuZ2xlRGlyKHNvdXJjZVBvaW50LmFuZ2xlKSAvLyBjXHJcbiAgICAgIGNvbnN0IHRhcmdldFF1YWRyYW50ID0gZ2V0QW5nbGVEaXIodGFyZ2V0UG9pbnQuYW5nbGUpIC8vIGJcclxuXHJcbiAgICAgIGlmIChzb3VyY2VRdWFkcmFudCA9PT0gMSAmJiB0YXJnZXRRdWFkcmFudCA9PT0gMSkge1xyXG4gICAgICAgIGlmIChzb3VyY2VQb2ludC55IDwgdGFyZ2V0UG9pbnQueSkge1xyXG4gICAgICAgICAgcG9pbnQxID0gc291cmNlUG9pbnRcclxuICAgICAgICAgIHBvaW50MiA9IHRhcmdldFBvaW50XHJcbiAgICAgICAgICBzaGFwZTEgPSBzb3VyY2VTaGFwZVxyXG4gICAgICAgICAgc2hhcGUyID0gdGFyZ2V0U2hhcGVcclxuICAgICAgICAgIHJldmVyc2UgPSBmYWxzZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwb2ludDEgPSB0YXJnZXRQb2ludFxyXG4gICAgICAgICAgcG9pbnQyID0gc291cmNlUG9pbnRcclxuICAgICAgICAgIHNoYXBlMSA9IHRhcmdldFNoYXBlXHJcbiAgICAgICAgICBzaGFwZTIgPSBzb3VyY2VTaGFwZVxyXG4gICAgICAgICAgcmV2ZXJzZSA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgICAgcG9pbnRzID0gZ2V0UG9pbnRzV2l0aFMxVDEocG9pbnQxLCBwb2ludDIsIHNoYXBlMSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoc291cmNlUXVhZHJhbnQgPT09IDMgJiYgdGFyZ2V0UXVhZHJhbnQgPT09IDMpIHtcclxuICAgICAgICAgIGlmIChzb3VyY2VQb2ludC55ID4gdGFyZ2V0UG9pbnQueSkge1xyXG4gICAgICAgICAgICBwb2ludDEgPSBzb3VyY2VQb2ludFxyXG4gICAgICAgICAgICBwb2ludDIgPSB0YXJnZXRQb2ludFxyXG4gICAgICAgICAgICBzaGFwZTEgPSBzb3VyY2VTaGFwZVxyXG4gICAgICAgICAgICBzaGFwZTIgPSB0YXJnZXRTaGFwZVxyXG4gICAgICAgICAgICByZXZlcnNlID0gZmFsc2VcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBvaW50MSA9IHRhcmdldFBvaW50XHJcbiAgICAgICAgICAgIHBvaW50MiA9IHNvdXJjZVBvaW50XHJcbiAgICAgICAgICAgIHNoYXBlMSA9IHRhcmdldFNoYXBlXHJcbiAgICAgICAgICAgIHNoYXBlMiA9IHNvdXJjZVNoYXBlXHJcbiAgICAgICAgICAgIHJldmVyc2UgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBwb2ludHMgPSBnZXRQb2ludHNXaXRoUzNUMyhwb2ludDEsIHBvaW50Miwgc2hhcGUxKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoc291cmNlUXVhZHJhbnQgPT09IDIgJiYgdGFyZ2V0UXVhZHJhbnQgPT09IDIpIHtcclxuICAgICAgICAgICAgaWYgKHNvdXJjZVBvaW50LnkgPiB0YXJnZXRQb2ludC55KSB7XHJcbiAgICAgICAgICAgICAgcG9pbnQxID0gc291cmNlUG9pbnRcclxuICAgICAgICAgICAgICBwb2ludDIgPSB0YXJnZXRQb2ludFxyXG4gICAgICAgICAgICAgIHNoYXBlMSA9IHNvdXJjZVNoYXBlXHJcbiAgICAgICAgICAgICAgc2hhcGUyID0gdGFyZ2V0U2hhcGVcclxuICAgICAgICAgICAgICByZXZlcnNlID0gZmFsc2VcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBwb2ludDEgPSB0YXJnZXRQb2ludFxyXG4gICAgICAgICAgICAgIHBvaW50MiA9IHNvdXJjZVBvaW50XHJcbiAgICAgICAgICAgICAgc2hhcGUxID0gdGFyZ2V0U2hhcGVcclxuICAgICAgICAgICAgICBzaGFwZTIgPSBzb3VyY2VTaGFwZVxyXG4gICAgICAgICAgICAgIHJldmVyc2UgPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcG9pbnRzID0gZ2V0UG9pbnRzV2l0aFMyVDIocG9pbnQxLCBwb2ludDIsIHNoYXBlMSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChzb3VyY2VRdWFkcmFudCA9PT0gNCAmJiB0YXJnZXRRdWFkcmFudCA9PT0gNCkge1xyXG4gICAgICAgICAgICAgIGlmIChzb3VyY2VQb2ludC54IDwgdGFyZ2V0UG9pbnQueCkge1xyXG4gICAgICAgICAgICAgICAgcG9pbnQxID0gc291cmNlUG9pbnRcclxuICAgICAgICAgICAgICAgIHBvaW50MiA9IHRhcmdldFBvaW50XHJcbiAgICAgICAgICAgICAgICBzaGFwZTEgPSBzb3VyY2VTaGFwZVxyXG4gICAgICAgICAgICAgICAgc2hhcGUyID0gdGFyZ2V0U2hhcGVcclxuICAgICAgICAgICAgICAgIHJldmVyc2UgPSBmYWxzZVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwb2ludDEgPSB0YXJnZXRQb2ludFxyXG4gICAgICAgICAgICAgICAgcG9pbnQyID0gc291cmNlUG9pbnRcclxuICAgICAgICAgICAgICAgIHNoYXBlMSA9IHRhcmdldFNoYXBlXHJcbiAgICAgICAgICAgICAgICBzaGFwZTIgPSBzb3VyY2VTaGFwZVxyXG4gICAgICAgICAgICAgICAgcmV2ZXJzZSA9IHRydWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcG9pbnRzID0gZ2V0UG9pbnRzV2l0aFM0VDQocG9pbnQxLCBwb2ludDIsIHNoYXBlMSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAoc291cmNlUXVhZHJhbnQgPT09IDEgJiYgdGFyZ2V0UXVhZHJhbnQgPT09IDMpIHx8XHJcbiAgICAgICAgICAgICAgICAoc291cmNlUXVhZHJhbnQgPT09IDMgJiYgdGFyZ2V0UXVhZHJhbnQgPT09IDEpXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc291cmNlUXVhZHJhbnQgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgcG9pbnQxID0gc291cmNlUG9pbnRcclxuICAgICAgICAgICAgICAgICAgcG9pbnQyID0gdGFyZ2V0UG9pbnRcclxuICAgICAgICAgICAgICAgICAgc2hhcGUxID0gc291cmNlU2hhcGVcclxuICAgICAgICAgICAgICAgICAgc2hhcGUyID0gdGFyZ2V0U2hhcGVcclxuICAgICAgICAgICAgICAgICAgcmV2ZXJzZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBwb2ludDEgPSB0YXJnZXRQb2ludFxyXG4gICAgICAgICAgICAgICAgICBwb2ludDIgPSBzb3VyY2VQb2ludFxyXG4gICAgICAgICAgICAgICAgICBzaGFwZTEgPSB0YXJnZXRTaGFwZVxyXG4gICAgICAgICAgICAgICAgICBzaGFwZTIgPSBzb3VyY2VTaGFwZVxyXG4gICAgICAgICAgICAgICAgICByZXZlcnNlID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcG9pbnRzID0gZ2V0UG9pbnRzV2l0aFMxVDMoXHJcbiAgICAgICAgICAgICAgICAgIHBvaW50MSxcclxuICAgICAgICAgICAgICAgICAgcG9pbnQyLFxyXG4gICAgICAgICAgICAgICAgICBzaGFwZTEsXHJcbiAgICAgICAgICAgICAgICAgIHNoYXBlMixcclxuICAgICAgICAgICAgICAgICAgZGlzdGFuY2VZXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgKHNvdXJjZVF1YWRyYW50ID09PSAyICYmIHRhcmdldFF1YWRyYW50ID09PSA0KSB8fFxyXG4gICAgICAgICAgICAgICAgICAoc291cmNlUXVhZHJhbnQgPT09IDQgJiYgdGFyZ2V0UXVhZHJhbnQgPT09IDIpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVF1YWRyYW50ID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQxID0gc291cmNlUG9pbnRcclxuICAgICAgICAgICAgICAgICAgICBwb2ludDIgPSB0YXJnZXRQb2ludFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlMSA9IHNvdXJjZVNoYXBlXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcGUyID0gdGFyZ2V0U2hhcGVcclxuICAgICAgICAgICAgICAgICAgICByZXZlcnNlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwb2ludDEgPSB0YXJnZXRQb2ludFxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50MiA9IHNvdXJjZVBvaW50XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcGUxID0gdGFyZ2V0U2hhcGVcclxuICAgICAgICAgICAgICAgICAgICBzaGFwZTIgPSBzb3VyY2VTaGFwZVxyXG4gICAgICAgICAgICAgICAgICAgIHJldmVyc2UgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcG9pbnRzID0gZ2V0UG9pbnRzV2l0aFMyVDQoXHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQxLFxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50MixcclxuICAgICAgICAgICAgICAgICAgICBzaGFwZTEsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcGUyLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlWFxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgKHNvdXJjZVF1YWRyYW50ID09PSAxICYmIHRhcmdldFF1YWRyYW50ID09PSAyKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChzb3VyY2VRdWFkcmFudCA9PT0gMiAmJiB0YXJnZXRRdWFkcmFudCA9PT0gMSlcclxuICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVF1YWRyYW50ID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludDEgPSBzb3VyY2VQb2ludFxyXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnQyID0gdGFyZ2V0UG9pbnRcclxuICAgICAgICAgICAgICAgICAgICAgIHNoYXBlMSA9IHNvdXJjZVNoYXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICBzaGFwZTIgPSB0YXJnZXRTaGFwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50MSA9IHRhcmdldFBvaW50XHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludDIgPSBzb3VyY2VQb2ludFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2hhcGUxID0gdGFyZ2V0U2hhcGVcclxuICAgICAgICAgICAgICAgICAgICAgIHNoYXBlMiA9IHNvdXJjZVNoYXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBnZXRQb2ludHNXaXRoUzFUMihwb2ludDEsIHBvaW50Miwgc2hhcGUxLCBzaGFwZTIpXHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZVF1YWRyYW50ID09PSAxICYmIHRhcmdldFF1YWRyYW50ID09PSA0KSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZVF1YWRyYW50ID09PSA0ICYmIHRhcmdldFF1YWRyYW50ID09PSAxKVxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVF1YWRyYW50ID09PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50MSA9IHNvdXJjZVBvaW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50MiA9IHRhcmdldFBvaW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlMSA9IHNvdXJjZVNoYXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlMiA9IHRhcmdldFNoYXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2UgPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQxID0gdGFyZ2V0UG9pbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQyID0gc291cmNlUG9pbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUxID0gdGFyZ2V0U2hhcGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUyID0gc291cmNlU2hhcGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZSA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBnZXRQb2ludHNXaXRoUzFUNChwb2ludDEsIHBvaW50Miwgc2hhcGUxLCBzaGFwZTIpXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZVF1YWRyYW50ID09PSAyICYmIHRhcmdldFF1YWRyYW50ID09PSAzKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoc291cmNlUXVhZHJhbnQgPT09IDMgJiYgdGFyZ2V0UXVhZHJhbnQgPT09IDIpXHJcbiAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVF1YWRyYW50ID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQxID0gc291cmNlUG9pbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludDIgPSB0YXJnZXRQb2ludFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlMSA9IHNvdXJjZVNoYXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUyID0gdGFyZ2V0U2hhcGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlID0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludDEgPSB0YXJnZXRQb2ludFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50MiA9IHNvdXJjZVBvaW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUxID0gdGFyZ2V0U2hhcGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZTIgPSBzb3VyY2VTaGFwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2UgPSB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IGdldFBvaW50c1dpdGhTMlQzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50MSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvdXJjZVF1YWRyYW50ID09PSAzICYmIHRhcmdldFF1YWRyYW50ID09PSA0KSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2VRdWFkcmFudCA9PT0gNCAmJiB0YXJnZXRRdWFkcmFudCA9PT0gMylcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZVF1YWRyYW50ID09PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludDEgPSBzb3VyY2VQb2ludFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQyID0gdGFyZ2V0UG9pbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlMSA9IHNvdXJjZVNoYXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZTIgPSB0YXJnZXRTaGFwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZSA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50MSA9IHRhcmdldFBvaW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludDIgPSBzb3VyY2VQb2ludFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUxID0gdGFyZ2V0U2hhcGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlMiA9IHNvdXJjZVNoYXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gZ2V0UG9pbnRzV2l0aFMzVDQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZTEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZTJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJldmVyc2UpIHtcclxuICAgICAgICBwb2ludHMucmV2ZXJzZSgpXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChzb3VyY2VSZWYgIT0gbnVsbCB8fCB0YXJnZXRSZWYgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChzb3VyY2VSZWYgIT0gbnVsbCkge1xyXG4gICAgICAgICAgcG9pbnQxID0gc291cmNlUG9pbnRcclxuICAgICAgICAgIHBvaW50MiA9IHRhcmdldFBvaW50XHJcbiAgICAgICAgICBzaGFwZTEgPSBzb3VyY2VTaGFwZVxyXG4gICAgICAgICAgc2hhcGUyID0gdGFyZ2V0U2hhcGVcclxuICAgICAgICAgIHJldmVyc2UgPSBmYWxzZVxyXG4gICAgICAgICAgYW5nbGUgPSBzb3VyY2VQb2ludC5hbmdsZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwb2ludDEgPSB0YXJnZXRQb2ludFxyXG4gICAgICAgICAgcG9pbnQyID0gc291cmNlUG9pbnRcclxuICAgICAgICAgIHNoYXBlMSA9IHRhcmdldFNoYXBlXHJcbiAgICAgICAgICBzaGFwZTIgPSBzb3VyY2VTaGFwZVxyXG4gICAgICAgICAgcmV2ZXJzZSA9IHRydWVcclxuICAgICAgICAgIGFuZ2xlID0gdGFyZ2V0UG9pbnQuYW5nbGVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJvdW5kczEgPSBzaGFwZTEucGxhbmUuYm91bmRzXHJcblxyXG4gICAgICAgIGlmIChhbmdsZSA+PSBwaSAvIDQgJiYgYW5nbGUgPCAocGkgLyA0KSAqIDMpIHtcclxuICAgICAgICAgIGlmIChwb2ludDIueSA8IHBvaW50MS55KSB7XHJcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZVggPj0gZGlzdGFuY2VZKSB7XHJcbiAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDEueCwgeTogcG9pbnQyLnkgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB2YXIgeiA9IGRpc3RhbmNlWSAvIDJcclxuICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50MS54LCB5OiBwb2ludDEueSAtIHogfSlcclxuICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50Mi54LCB5OiBwb2ludDEueSAtIHogfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDEueCwgeTogcG9pbnQxLnkgLSByIH0pXHJcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZVggPj0gZGlzdGFuY2VZKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgcG9pbnQyLnggPj0gYm91bmRzMS54IC0gciAmJlxyXG4gICAgICAgICAgICAgICAgcG9pbnQyLnggPD0gYm91bmRzMS54ICsgYm91bmRzMS53aWR0aCArIHJcclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHZhciBxID0gYm91bmRzMS54ICsgYm91bmRzMS53aWR0aCAvIDJcclxuICAgICAgICAgICAgICAgIGlmIChwb2ludDIueCA8IHEpIHtcclxuICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBib3VuZHMxLnggLSByLCB5OiBwb2ludDEueSAtIHIgfSlcclxuICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBib3VuZHMxLnggLSByLCB5OiBwb2ludDIueSB9KVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHg6IGJvdW5kczEueCArIGJvdW5kczEud2lkdGggKyByLFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IHBvaW50MS55IC0gclxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IGJvdW5kczEueCArIGJvdW5kczEud2lkdGggKyByLCB5OiBwb2ludDIueSB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQyLnggPCBib3VuZHMxLngpIHtcclxuICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDIueCArIHIsIHk6IHBvaW50MS55IC0gciB9KVxyXG4gICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50Mi54ICsgciwgeTogcG9pbnQyLnkgfSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLnggLSByLCB5OiBwb2ludDEueSAtIHIgfSlcclxuICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDIueCAtIHIsIHk6IHBvaW50Mi55IH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHBvaW50Mi54ID49IGJvdW5kczEueCAtIHIgJiZcclxuICAgICAgICAgICAgICAgIHBvaW50Mi54IDw9IGJvdW5kczEueCArIGJvdW5kczEud2lkdGggKyByXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2hhcGUxWCA9IGJvdW5kczEueCArIGJvdW5kczEud2lkdGggLyAyXHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQyLnggPCBzaGFwZTFYKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogYm91bmRzMS54IC0gciwgeTogcG9pbnQxLnkgLSByIH0pXHJcbiAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogYm91bmRzMS54IC0gciwgeTogcG9pbnQyLnkgLSByIH0pXHJcbiAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50Mi55IC0gciB9KVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHg6IGJvdW5kczEueCArIGJvdW5kczEud2lkdGggKyByLFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IHBvaW50MS55IC0gclxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogYm91bmRzMS54ICsgYm91bmRzMS53aWR0aCArIHIsXHJcbiAgICAgICAgICAgICAgICAgICAgeTogcG9pbnQyLnkgLSByXHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50Mi55IC0gciB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50Mi54LCB5OiBwb2ludDEueSAtIHIgfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGFuZ2xlID49IChwaSAvIDQpICogMyAmJiBhbmdsZSA8IChwaSAvIDQpICogNSkge1xyXG4gICAgICAgICAgICBpZiAocG9pbnQyLnggPiBwb2ludDEueCkge1xyXG4gICAgICAgICAgICAgIGlmIChkaXN0YW5jZVggPj0gZGlzdGFuY2VZKSB7XHJcbiAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50MS54ICsgZGlzdGFuY2VYIC8gMiwgeTogcG9pbnQxLnkgfSlcclxuICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQxLnggKyBkaXN0YW5jZVggLyAyLCB5OiBwb2ludDIueSB9KVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50Mi54LCB5OiBwb2ludDEueSB9KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50MS54ICsgciwgeTogcG9pbnQxLnkgfSlcclxuICAgICAgICAgICAgICBpZiAoZGlzdGFuY2VYID49IGRpc3RhbmNlWSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICBwb2ludDIueSA+PSBib3VuZHMxLnkgLSByICYmXHJcbiAgICAgICAgICAgICAgICAgIHBvaW50Mi55IDw9IGJvdW5kczEueSArIGJvdW5kczEuaGVpZ2h0ICsgclxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBzaGFwZTFZID0gYm91bmRzMS55ICsgYm91bmRzMS5oZWlnaHQgLyAyXHJcbiAgICAgICAgICAgICAgICAgIGlmIChwb2ludDIueSA8IHNoYXBlMVkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50MS54ICsgciwgeTogYm91bmRzMS55IC0gciB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLnggKyByLCB5OiBib3VuZHMxLnkgLSByIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDIueCArIHIsIHk6IHBvaW50Mi55IH0pXHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgeDogcG9pbnQxLnggKyByLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeTogYm91bmRzMS55ICsgYm91bmRzMS5oZWlnaHQgKyByXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICB4OiBwb2ludDIueCArIHIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB5OiBib3VuZHMxLnkgKyBib3VuZHMxLmhlaWdodCArIHJcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLnggKyByLCB5OiBwb2ludDIueSB9KVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50MS54ICsgciwgeTogcG9pbnQyLnkgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICBwb2ludDIueSA+PSBib3VuZHMxLnkgLSByICYmXHJcbiAgICAgICAgICAgICAgICAgIHBvaW50Mi55IDw9IGJvdW5kczEueSArIGJvdW5kczEuaGVpZ2h0ICsgclxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBzaGFwZTFZID0gYm91bmRzMS55ICsgYm91bmRzMS5oZWlnaHQgLyAyXHJcbiAgICAgICAgICAgICAgICAgIGlmIChwb2ludDIueSA8IHNoYXBlMVkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50MS54ICsgciwgeTogYm91bmRzMS55IC0gciB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IGJvdW5kczEueSAtIHIgfSlcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICB4OiBwb2ludDEueCArIHIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB5OiBib3VuZHMxLnkgKyBib3VuZHMxLmhlaWdodCArIHJcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIHg6IHBvaW50Mi54LFxyXG4gICAgICAgICAgICAgICAgICAgICAgeTogYm91bmRzMS55ICsgYm91bmRzMS5oZWlnaHQgKyByXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHBvaW50Mi55IDwgcG9pbnQxLnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50MS54ICsgciwgeTogcG9pbnQyLnkgKyByIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDIueCwgeTogcG9pbnQyLnkgKyByIH0pXHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDEueCArIHIsIHk6IHBvaW50Mi55IC0gciB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50Mi55IC0gciB9KVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoYW5nbGUgPj0gKHBpIC8gNCkgKiA1ICYmIGFuZ2xlIDwgKHBpIC8gNCkgKiA3KSB7XHJcbiAgICAgICAgICAgICAgaWYgKHBvaW50Mi55ID4gcG9pbnQxLnkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZVggPj0gZGlzdGFuY2VZKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQxLngsIHk6IHBvaW50Mi55IH0pXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50MS54LCB5OiBwb2ludDEueSArIGRpc3RhbmNlWSAvIDIgfSlcclxuICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDIueCwgeTogcG9pbnQxLnkgKyBkaXN0YW5jZVkgLyAyIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQxLngsIHk6IHBvaW50MS55ICsgciB9KVxyXG4gICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlWCA+PSBkaXN0YW5jZVkpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50Mi54ID49IGJvdW5kczEueCAtIHIgJiZcclxuICAgICAgICAgICAgICAgICAgICBwb2ludDIueCA8PSBib3VuZHMxLnggKyBib3VuZHMxLndpZHRoICsgclxyXG4gICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2hhcGUxWCA9IGJvdW5kczEueCArIGJvdW5kczEud2lkdGggLyAyXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvaW50Mi54IDwgc2hhcGUxWCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBib3VuZHMxLnggLSByLCB5OiBwb2ludDEueSArIHIgfSlcclxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogYm91bmRzMS54IC0gciwgeTogcG9pbnQyLnkgfSlcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBib3VuZHMxLnggKyBib3VuZHMxLndpZHRoICsgcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTogcG9pbnQxLnkgKyByXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBib3VuZHMxLnggKyBib3VuZHMxLndpZHRoICsgcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTogcG9pbnQyLnlcclxuICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb2ludDIueCA8IGJvdW5kczEueCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDIueCArIHIsIHk6IHBvaW50MS55ICsgciB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDIueCArIHIsIHk6IHBvaW50Mi55IH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLnggLSByLCB5OiBwb2ludDEueSArIHIgfSlcclxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLnggLSByLCB5OiBwb2ludDIueSB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50Mi54ID49IGJvdW5kczEueCAtIHIgJiZcclxuICAgICAgICAgICAgICAgICAgICBwb2ludDIueCA8PSBib3VuZHMxLnggKyBib3VuZHMxLndpZHRoICsgclxyXG4gICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2hhcGUxWCA9IGJvdW5kczEueCArIGJvdW5kczEud2lkdGggLyAyXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvaW50Mi54IDwgc2hhcGUxWCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBib3VuZHMxLnggLSByLCB5OiBwb2ludDEueSArIHIgfSlcclxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogYm91bmRzMS54IC0gciwgeTogcG9pbnQyLnkgKyByIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50Mi54LCB5OiBwb2ludDIueSArIHIgfSlcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBib3VuZHMxLnggKyBib3VuZHMxLndpZHRoICsgcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTogcG9pbnQxLnkgKyByXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBib3VuZHMxLnggKyBib3VuZHMxLndpZHRoICsgcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTogcG9pbnQyLnkgKyByXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDIueCwgeTogcG9pbnQyLnkgKyByIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50MS55ICsgciB9KVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChwb2ludDIueCA8IHBvaW50MS54KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2VYID49IGRpc3RhbmNlWSkge1xyXG4gICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50MS54IC0gZGlzdGFuY2VYIC8gMiwgeTogcG9pbnQxLnkgfSlcclxuICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDEueCAtIGRpc3RhbmNlWCAvIDIsIHk6IHBvaW50Mi55IH0pXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50Mi54LCB5OiBwb2ludDEueSB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50MS54IC0gciwgeTogcG9pbnQxLnkgfSlcclxuICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZVggPj0gZGlzdGFuY2VZKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBwb2ludDIueSA+PSBib3VuZHMxLnkgLSByICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQyLnkgPD0gYm91bmRzMS55ICsgYm91bmRzMS5oZWlnaHQgKyByXHJcbiAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzaGFwZTFZID0gYm91bmRzMS55ICsgYm91bmRzMS5oZWlnaHQgLyAyXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvaW50Mi55IDwgc2hhcGUxWSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDEueCAtIHIsIHk6IGJvdW5kczEueSAtIHIgfSlcclxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLnggLSByLCB5OiBib3VuZHMxLnkgLSByIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50Mi54IC0gciwgeTogcG9pbnQyLnkgfSlcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBwb2ludDEueCAtIHIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGJvdW5kczEueSArIGJvdW5kczEuaGVpZ2h0ICsgclxyXG4gICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDogcG9pbnQyLnggLSByLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBib3VuZHMxLnkgKyBib3VuZHMxLmhlaWdodCArIHJcclxuICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50Mi54IC0gciwgeTogcG9pbnQyLnkgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDEueCAtIHIsIHk6IHBvaW50Mi55IH0pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBwb2ludDIueSA+PSBib3VuZHMxLnkgLSByICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcG9pbnQyLnkgPD0gYm91bmRzMS55ICsgYm91bmRzMS5oZWlnaHQgKyByXHJcbiAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzaGFwZTFZID0gYm91bmRzMS55ICsgYm91bmRzMS5oZWlnaHQgLyAyXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvaW50Mi55IDwgc2hhcGUxWSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBwb2ludDEueCAtIHIsIHk6IGJvdW5kczEueSAtIHIgfSlcclxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IGJvdW5kczEueSAtIHIgfSlcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBwb2ludDEueCAtIHIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGJvdW5kczEueSArIGJvdW5kczEuaGVpZ2h0ICsgclxyXG4gICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeDogcG9pbnQyLngsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGJvdW5kczEueSArIGJvdW5kczEuaGVpZ2h0ICsgclxyXG4gICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvaW50Mi55IDwgcG9pbnQxLnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQxLnggLSByLCB5OiBwb2ludDIueSArIHIgfSlcclxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogcG9pbnQyLngsIHk6IHBvaW50Mi55ICsgciB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50MS54IC0gciwgeTogcG9pbnQyLnkgLSByIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHBvaW50Mi54LCB5OiBwb2ludDIueSAtIHIgfSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJldmVyc2UpIHtcclxuICAgICAgICAgIHBvaW50cy5yZXZlcnNlKClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGRpc3RhbmNlWCA+PSBkaXN0YW5jZVkpIHtcclxuICAgICAgICAgIGxldCB4ID0gKHRhcmdldFBvaW50LnggLSBzb3VyY2VQb2ludC54KSAvIDJcclxuICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogc291cmNlUG9pbnQueCArIHgsIHk6IHNvdXJjZVBvaW50LnkgfSlcclxuICAgICAgICAgIHBvaW50cy5wdXNoKHsgeDogc291cmNlUG9pbnQueCArIHgsIHk6IHRhcmdldFBvaW50LnkgfSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHkgPSAodGFyZ2V0UG9pbnQueSAtIHNvdXJjZVBvaW50LnkpIC8gMlxyXG4gICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiBzb3VyY2VQb2ludC54LCB5OiBzb3VyY2VQb2ludC55ICsgeSB9KVxyXG4gICAgICAgICAgcG9pbnRzLnB1c2goeyB4OiB0YXJnZXRQb2ludC54LCB5OiBzb3VyY2VQb2ludC55ICsgeSB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyDlvKfnur9cclxuICAgIGlmIChjb25uZWN0aW9uLmxpbmtlclR5cGUgPT09ICdjdXJ2ZScpIHtcclxuICAgICAgY29uc3QgZGlzdGFuY2UgPSBtZWFzdXJlRGlzdGFuY2Uoc291cmNlUG9pbnQsIHRhcmdldFBvaW50KVxyXG4gICAgICB2YXIgayA9IGRpc3RhbmNlICogMC40XHJcbiAgICAgIHBvaW50cy5wdXNoKGdldEJlemllckN1cmNlKHNvdXJjZVBvaW50LCB0YXJnZXRQb2ludCwgc291cmNlUmVmLCBrKSlcclxuICAgICAgcG9pbnRzLnB1c2goZ2V0QmV6aWVyQ3VyY2UodGFyZ2V0UG9pbnQsIHNvdXJjZVBvaW50LCB0YXJnZXRSZWYsIGspKVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcG9pbnRzXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDojrflj5bov57nur/kuK3pl7TngrlcclxuICogQHBhcmFtIHsqfSBjXHJcbiAqL1xyXG5jb25zdCBnZXRDb25uZWN0aW9uTWlkcG9pbnQgPSBzaGFwZSA9PiB7XHJcbiAgY29uc3QgbWlkcG9pbnQgPSB7fVxyXG5cclxuICBjb25zdCB7IHdheXBvaW50IH0gPSBzaGFwZS5wbGFuZVxyXG4gIGNvbnN0IHNvdXJjZVBvaW50ID0gd2F5cG9pbnRbMF1cclxuICBjb25zdCB0YXJnZXRQb2ludCA9IHdheXBvaW50W3dheXBvaW50Lmxlbmd0aCAtIDFdXHJcblxyXG4gIGlmIChzaGFwZS5saW5rZXJUeXBlID09PSAnbm9ybWFsJykge1xyXG4gICAgbWlkcG9pbnQueCA9IDAuNSAqIHNvdXJjZVBvaW50LnggKyAwLjUgKiB0YXJnZXRQb2ludC54XHJcbiAgICBtaWRwb2ludC55ID0gMC41ICogc291cmNlUG9pbnQueSArIDAuNSAqIHRhcmdldFBvaW50LnlcclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKHNoYXBlLmxpbmtlclR5cGUgPT09ICdjdXJ2ZScpIHtcclxuICAgICAgbWlkcG9pbnQueCA9XHJcbiAgICAgICAgc291cmNlUG9pbnQueCAqIDAuMTI1ICtcclxuICAgICAgICBzaGFwZS5wb2ludHNbMF0ueCAqIDAuMzc1ICtcclxuICAgICAgICBzaGFwZS5wb2ludHNbMV0ueCAqIDAuMzc1ICtcclxuICAgICAgICB0YXJnZXRQb2ludC54ICogMC4xMjVcclxuICAgICAgbWlkcG9pbnQueSA9XHJcbiAgICAgICAgc291cmNlUG9pbnQueSAqIDAuMTI1ICtcclxuICAgICAgICBzaGFwZS5wb2ludHNbMF0ueSAqIDAuMzc1ICtcclxuICAgICAgICBzaGFwZS5wb2ludHNbMV0ueSAqIDAuMzc1ICtcclxuICAgICAgICB0YXJnZXRQb2ludC55ICogMC4xMjVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBwb2ludHMgPSBbXVxyXG4gICAgICBwb2ludHMucHVzaChzb3VyY2VQb2ludClcclxuICAgICAgcG9pbnRzID0gcG9pbnRzLmNvbmNhdChzaGFwZS5wb2ludHMpXHJcbiAgICAgIHBvaW50cy5wdXNoKHRhcmdldFBvaW50KVxyXG4gICAgICBsZXQgZGlzdGFuY2VUb3RhbCA9IDBcclxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwb2ludHMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICBkaXN0YW5jZVRvdGFsICs9IG1lYXN1cmVEaXN0YW5jZShwb2ludHNbaSAtIDFdLCBwb2ludHNbaV0pXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZGlzdGFuY2VIYWxmID0gZGlzdGFuY2VUb3RhbCAvIDJcclxuICAgICAgbGV0IGRpc3RhbmNlSXRlbSA9IDBcclxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwb2ludHMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICBjb25zdCBwb2ludDEgPSBwb2ludHNbaSAtIDFdXHJcbiAgICAgICAgY29uc3QgcG9pbnQyID0gcG9pbnRzW2ldXHJcbiAgICAgICAgbGV0IGRpc3RhbmNlID0gZGlzdGFuY2VJdGVtICsgbWVhc3VyZURpc3RhbmNlKHBvaW50MSwgcG9pbnQyKVxyXG4gICAgICAgIGlmIChkaXN0YW5jZSA+IGRpc3RhbmNlSGFsZikge1xyXG4gICAgICAgICAgY29uc3QgbWlkRGlzdGFuY2UgPSAoZGlzdGFuY2VIYWxmIC0gZGlzdGFuY2VJdGVtKSAvIGRpc3RhbmNlXHJcbiAgICAgICAgICBtaWRwb2ludC54ID0gKDEgLSBtaWREaXN0YW5jZSkgKiBwb2ludDEueCArIG1pZERpc3RhbmNlICogcG9pbnQyLnhcclxuICAgICAgICAgIG1pZHBvaW50LnkgPSAoMSAtIG1pZERpc3RhbmNlKSAqIHBvaW50MS55ICsgbWlkRGlzdGFuY2UgKiBwb2ludDIueVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGlzdGFuY2VJdGVtID0gZGlzdGFuY2VcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gbWlkcG9pbnRcclxufVxyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEBwYXJhbSB7Kn0gc2hhcGVcclxuICogQHBhcmFtIHsqfSB0eXBlXHJcbiAqL1xyXG5jb25zdCBnZXRFbmRwb2ludEFuZ2xlID0gKHNoYXBlLCB0eXBlKSA9PiB7XHJcbiAgY29uc3QgeyBzb3VyY2VSZWYsIHRhcmdldFJlZiB9ID0gc2hhcGUuZGF0YVxyXG4gIGNvbnN0IHsgd2F5cG9pbnQgfSA9IHNoYXBlLnBsYW5lXHJcbiAgY29uc3Qgc291cmNlUG9pbnQgPSB3YXlwb2ludFswXVxyXG4gIGNvbnN0IHRhcmdldFBvaW50ID0gd2F5cG9pbnRbd2F5cG9pbnQubGVuZ3RoIC0gMV1cclxuXHJcbiAgbGV0IHBvaW50MSwgcG9pbnQyXHJcblxyXG4gIGlmIChzaGFwZS5saW5rZXJUeXBlID09PSAnbm9ybWFsJykge1xyXG4gICAgaWYgKHR5cGUgPT09ICdzb3VyY2UnKSB7XHJcbiAgICAgIHBvaW50MSA9IHRhcmdldFBvaW50XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwb2ludDEgPSBzb3VyY2VQb2ludFxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAoc2hhcGUubGlua2VyVHlwZSA9PT0gJ2Jyb2tlbicpIHtcclxuICAgICAgaWYgKHR5cGUgPT09ICdzb3VyY2UnKSB7XHJcbiAgICAgICAgcG9pbnQxID0gc2hhcGUucG9pbnRzWzBdXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcG9pbnQxID0gc2hhcGUucG9pbnRzW3NoYXBlLnBvaW50cy5sZW5ndGggLSAxXVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBhV2lkdGggPSAxMlxyXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IG1lYXN1cmVEaXN0YW5jZShzb3VyY2VQb2ludCwgdGFyZ2V0UG9pbnQpXHJcbiAgICAgIGxldCBwcm9wb3J0aW9uXHJcbiAgICAgIGlmICh0eXBlID09PSAnc291cmNlJykge1xyXG4gICAgICAgIHByb3BvcnRpb24gPSBhV2lkdGggLyBkaXN0YW5jZVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHByb3BvcnRpb24gPSAxIC0gYVdpZHRoIC8gZGlzdGFuY2VcclxuICAgICAgfVxyXG4gICAgICBwb2ludDEgPSB7XHJcbiAgICAgICAgeDpcclxuICAgICAgICAgICgxIC0gcHJvcG9ydGlvbikgKlxyXG4gICAgICAgICAgICAoMSAtIHByb3BvcnRpb24pICpcclxuICAgICAgICAgICAgKDEgLSBwcm9wb3J0aW9uKSAqXHJcbiAgICAgICAgICAgIHNvdXJjZVBvaW50LnggK1xyXG4gICAgICAgICAgMyAqXHJcbiAgICAgICAgICAgICgxIC0gcHJvcG9ydGlvbikgKlxyXG4gICAgICAgICAgICAoMSAtIHByb3BvcnRpb24pICpcclxuICAgICAgICAgICAgcHJvcG9ydGlvbiAqXHJcbiAgICAgICAgICAgIHNoYXBlLnBvaW50c1swXS54ICtcclxuICAgICAgICAgIDMgKiAoMSAtIHByb3BvcnRpb24pICogcHJvcG9ydGlvbiAqIHByb3BvcnRpb24gKiBzaGFwZS5wb2ludHNbMV0ueCArXHJcbiAgICAgICAgICBwcm9wb3J0aW9uICogcHJvcG9ydGlvbiAqIHByb3BvcnRpb24gKiB0YXJnZXRQb2ludC54LFxyXG4gICAgICAgIHk6XHJcbiAgICAgICAgICAoMSAtIHByb3BvcnRpb24pICpcclxuICAgICAgICAgICAgKDEgLSBwcm9wb3J0aW9uKSAqXHJcbiAgICAgICAgICAgICgxIC0gcHJvcG9ydGlvbikgKlxyXG4gICAgICAgICAgICBzb3VyY2VQb2ludC55ICtcclxuICAgICAgICAgIDMgKlxyXG4gICAgICAgICAgICAoMSAtIHByb3BvcnRpb24pICpcclxuICAgICAgICAgICAgKDEgLSBwcm9wb3J0aW9uKSAqXHJcbiAgICAgICAgICAgIHByb3BvcnRpb24gKlxyXG4gICAgICAgICAgICBzaGFwZS5wb2ludHNbMF0ueSArXHJcbiAgICAgICAgICAzICogKDEgLSBwcm9wb3J0aW9uKSAqIHByb3BvcnRpb24gKiBwcm9wb3J0aW9uICogc2hhcGUucG9pbnRzWzFdLnkgK1xyXG4gICAgICAgICAgcHJvcG9ydGlvbiAqIHByb3BvcnRpb24gKiBwcm9wb3J0aW9uICogdGFyZ2V0UG9pbnQueVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpZiAodHlwZSA9PT0gJ3NvdXJjZScpIHtcclxuICAgIHBvaW50MiA9IHNvdXJjZVBvaW50XHJcbiAgfSBlbHNlIHtcclxuICAgIHBvaW50MiA9IHRhcmdldFBvaW50XHJcbiAgfVxyXG4gIHJldHVybiBnZXRBbmdsZShwb2ludDEsIHBvaW50MilcclxufVxyXG5cclxuLyoqXHJcbiAqXHJcbiAqIEBwYXJhbSB7Kn0gZWxlbWVudFxyXG4gKi9cclxuY29uc3QgZ2V0Q29ubmVjdGlvbkxpbmVQb2ludHMgPSBlbGVtZW50ID0+IHtcclxuICBjb25zdCB7IHBsYW5lLCBzaGFwZSB9ID0gZWxlbWVudFxyXG4gIGxldCBwb2ludHMgPSBbXVxyXG4gIGlmIChzaGFwZS5saW5rZXJUeXBlICE9PSAnY3VydmUnKSB7XHJcbiAgICBwb2ludHMucHVzaChwbGFuZS53YXlwb2ludFswXSlcclxuICAgIHBvaW50cyA9IHBvaW50cy5jb25jYXQoc2hhcGUucG9pbnRzKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBsZXQgc3RlcCA9IDAuMDVcclxuICAgIGxldCBudW0gPSAwXHJcbiAgICB3aGlsZSAobnVtIDw9IDEpIHtcclxuICAgICAgY29uc3QgcG9pbnQgPSB7XHJcbiAgICAgICAgeDpcclxuICAgICAgICAgICgxIC0gbnVtKSAqICgxIC0gbnVtKSAqICgxIC0gbnVtKSAqIHNoYXBlLnBvaW50c1swXS54ICtcclxuICAgICAgICAgIDMgKiAoMSAtIG51bSkgKiAoMSAtIG51bSkgKiBudW0gKiBzaGFwZS5wb2ludHNbMV0ueCArXHJcbiAgICAgICAgICAzICogKDEgLSBudW0pICogbnVtICogbnVtICogc2hhcGUucG9pbnRzWzJdLnggK1xyXG4gICAgICAgICAgbnVtICogbnVtICogbnVtICogc2hhcGUucG9pbnRzW3NoYXBlLnBvaW50cy5sZW5ndGggLSAxXS54LFxyXG4gICAgICAgIHk6XHJcbiAgICAgICAgICAoMSAtIG51bSkgKiAoMSAtIG51bSkgKiAoMSAtIG51bSkgKiBzaGFwZS5wb2ludHNbMF0ueSArXHJcbiAgICAgICAgICAzICogKDEgLSBudW0pICogKDEgLSBudW0pICogbnVtICogc2hhcGUucG9pbnRzWzFdLnkgK1xyXG4gICAgICAgICAgMyAqICgxIC0gbnVtKSAqIG51bSAqIG51bSAqIHNoYXBlLnBvaW50c1syXS55ICtcclxuICAgICAgICAgIG51bSAqIG51bSAqIG51bSAqIHNoYXBlLnBvaW50c1tzaGFwZS5wb2ludHMubGVuZ3RoIC0gMV0ueVxyXG4gICAgICB9XHJcbiAgICAgIHBvaW50cy5wdXNoKHBvaW50KVxyXG4gICAgICBudW0gKz0gc3RlcFxyXG4gICAgfVxyXG4gIH1cclxuICBwb2ludHMucHVzaChwbGFuZS53YXlwb2ludFtwbGFuZS53YXlwb2ludC5sZW5ndGggLSAxXSlcclxuICByZXR1cm4gcG9pbnRzXHJcbn1cclxuXHJcbmNvbnN0IGdldENvbm5lY3Rpb25Cb3ggPSBlbGVtZW50ID0+IHtcclxuICBjb25zdCBwb2ludHMgPSBnZXRDb25uZWN0aW9uTGluZVBvaW50cyhlbGVtZW50KVxyXG4gIGxldCBzb3VyY2VYID0gcG9pbnRzWzBdLnhcclxuICBsZXQgc291cmNlWSA9IHBvaW50c1swXS55XHJcbiAgbGV0IHRhcmdldFggPSBwb2ludHNbMF0ueFxyXG4gIGxldCB0YXJnZXRZID0gcG9pbnRzWzBdLnlcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgY29uc3QgcG9pbnQgPSBwb2ludHNbaV1cclxuICAgIGlmIChwb2ludC54IDwgc291cmNlWCkge1xyXG4gICAgICBzb3VyY2VYID0gcG9pbnQueFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHBvaW50LnggPiB0YXJnZXRYKSB7XHJcbiAgICAgICAgdGFyZ2V0WCA9IHBvaW50LnhcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHBvaW50LnkgPCBzb3VyY2VZKSB7XHJcbiAgICAgIHNvdXJjZVkgPSBwb2ludC55XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocG9pbnQueSA+IHRhcmdldFkpIHtcclxuICAgICAgICB0YXJnZXRZID0gcG9pbnQueVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvbnN0IGJveCA9IHtcclxuICAgIHg6IHNvdXJjZVgsXHJcbiAgICB5OiBzb3VyY2VZLFxyXG4gICAgd2lkdGg6IHRhcmdldFggLSBzb3VyY2VYLFxyXG4gICAgaGVpZ2h0OiB0YXJnZXRZIC0gc291cmNlWVxyXG4gIH1cclxuICByZXR1cm4gYm94XHJcbn1cclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAcGFyYW0geyp9IGVsZW1lbnRzXHJcbiAqL1xyXG5jb25zdCBnZXRPdXRDb25uZWN0aW9ucyA9IGVsZW1lbnRzID0+IHtcclxuICBjb25zdCBjb25uZWN0aW9ucyA9IFtdXHJcbiAgY29uc3QgaWRzID0gW11cclxuICBjb25zdCBzZWxlY3RJZHMgPSBldmVudEJ1cy50cmlnZ2VyKCdzaGFwZS5zZWxlY3QuZ2V0SWRzJylcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbaV1cclxuICAgIGlmIChlbGVtZW50LnNoYXBlLmJwbW5OYW1lICE9PSAnU2VxdWVuY2VGbG93Jykge1xyXG4gICAgICBjb25zdCBjb25uZWN0aW9uSWRzID0gZXZlbnRCdXMudHJpZ2dlcignY29ubmVjdGlvbnMuZ2V0JywgZWxlbWVudC5kYXRhLmlkKVxyXG4gICAgICBpZiAoY29ubmVjdGlvbklkcyAmJiBjb25uZWN0aW9uSWRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbm5lY3Rpb25JZHMubGVuZ3RoOyBqICs9IDEpIHtcclxuICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb25JZCA9IGNvbm5lY3Rpb25JZHNbal1cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIShzZWxlY3RJZHMuaW5kZXhPZihjb25uZWN0aW9uSWQpID49IDApICYmXHJcbiAgICAgICAgICAgIGlkcy5pbmRleE9mKGNvbm5lY3Rpb25JZCkgPCAwXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29ubmVjdGlvbnMucHVzaChldmVudEJ1cy50cmlnZ2VyKCdlbGVtZW50LmdldCcsIGNvbm5lY3Rpb25JZCkpXHJcbiAgICAgICAgICAgIGlkcy5wdXNoKGNvbm5lY3Rpb25JZClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGNvbm5lY3Rpb25zXHJcbn1cclxuXHJcbmNvbnN0IGdldFNlbGVjdGVkQ29ubmVjdGlvbklkcyA9ICgpID0+IHtcclxuICBjb25zdCBzZWxlY3RzID0gZXZlbnRCdXMudHJpZ2dlcignc2hhcGUuc2VsZWN0LmdldCcpXHJcblxyXG4gIGNvbnN0IGlkcyA9IFtdXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gc2VsZWN0c1tpXVxyXG4gICAgaWYgKGVsZW1lbnQuc2hhcGUuYnBtbk5hbWUgPT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgIGlkcy5wdXNoKGVsZW1lbnQuZGF0YS5pZClcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGlkc1xyXG59XHJcblxyXG4vKipcclxuICpcclxuICogQHBhcmFtIHsqfSAkY29udGFpbmVyXHJcbiAqIEBwYXJhbSB7Kn0gaWRcclxuICogQHBhcmFtIHsqfSB4XHJcbiAqIEBwYXJhbSB7Kn0geVxyXG4gKiBAcGFyYW0geyp9IHBhZGRpbmdcclxuICovXHJcbmNvbnN0IGdldFBvaW50QW5nbGUgPSAoJGNvbnRhaW5lciwgaWQsIHgsIHksIHBhZGRpbmcpID0+IHtcclxuICBjb25zdCAkc2hhcGUgPSAkY29udGFpbmVyLmZpbmQoJy5zaGFwZS1ib3hbZGF0YS1pZD1cIicgKyBpZCArICdcIl0nKVxyXG4gIGNvbnN0IHNoYXBlUG9zID0gJHNoYXBlLnBvc2l0aW9uKClcclxuICBjb25zdCAkc2hhcGVDYW52YXMgPSAkc2hhcGUuZmluZCgnLnNoYXBlLWNhbnZhcycpXHJcbiAgY29uc3Qgc2hhcGUyRCA9ICRzaGFwZUNhbnZhc1swXS5nZXRDb250ZXh0KCcyZCcpXHJcblxyXG4gIHggPSBzZXRTY2FsZSh4KSAtIHNoYXBlUG9zLmxlZnRcclxuICB5ID0gc2V0U2NhbGUoeSkgLSBzaGFwZVBvcy50b3BcclxuXHJcbiAgY29uc3QgcG9pbnRzID0gZ2V0Q2lyY2xlUG9pbnRzKHgsIHksIHBhZGRpbmcpXHJcbiAgY29uc3QgbGVuZ3RoID0gcG9pbnRzLmxlbmd0aFxyXG4gIGxldCBpblBhdGggPSBmYWxzZVxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcclxuICAgIGNvbnN0IHBvaW50ID0gcG9pbnRzW2ldXHJcbiAgICBpZiAoc2hhcGUyRC5pc1BvaW50SW5QYXRoKHBvaW50LngsIHBvaW50LnkpKSB7XHJcbiAgICAgIHBvaW50LmluUGF0aCA9IHRydWVcclxuICAgICAgaW5QYXRoID0gdHJ1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcG9pbnQuaW5QYXRoID0gZmFsc2VcclxuICAgIH1cclxuICB9XHJcbiAgaWYgKGluUGF0aCA9PT0gZmFsc2UpIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICBsZXQgZm9yd2FyZCA9IG51bGxcclxuICBsZXQgbmV4dCA9IG51bGxcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICBjb25zdCBwb2ludCA9IHBvaW50c1tpXVxyXG4gICAgaWYgKCFwb2ludC5pblBhdGgpIHtcclxuICAgICAgaWYgKGZvcndhcmQgPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChwb2ludHNbKGkgLSAxICsgbGVuZ3RoKSAlIGxlbmd0aF0uaW5QYXRoKSB7XHJcbiAgICAgICAgICBmb3J3YXJkID0gcG9pbnQuYW5nbGVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5leHQgPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChwb2ludHNbKGkgKyAxICsgbGVuZ3RoKSAlIGxlbmd0aF0uaW5QYXRoKSB7XHJcbiAgICAgICAgICBuZXh0ID0gcG9pbnQuYW5nbGVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGZvcndhcmQgIT0gbnVsbCAmJiBuZXh0ICE9IG51bGwpIHtcclxuICAgICAgICBicmVha1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNvbnN0IGFuZ2xlID1cclxuICAgIChmb3J3YXJkICsgKChNYXRoLlBJICogMiArIG5leHQgLSBmb3J3YXJkKSAlIChNYXRoLlBJICogMikpIC8gMikgJVxyXG4gICAgKE1hdGguUEkgKiAyKVxyXG4gIHJldHVybiBhbmdsZVxyXG59XHJcblxyXG4vKipcclxuICog6I635Y+W55u45a+55Z2Q5qCHXHJcbiAqIEBwYXJhbSB7Kn0geFxyXG4gKiBAcGFyYW0geyp9IHlcclxuICogQHBhcmFtIHsqfSBlbG1cclxuICovXHJcbmNvbnN0IGdldFJlbGF0aXZlUG9zID0gKHgsIHksICRlbG0pID0+IHtcclxuICBjb25zdCBvZmZzZXQgPSAkZWxtLm9mZnNldCgpXHJcbiAgaWYgKG9mZnNldCA9PSBudWxsKSB7XHJcbiAgICBvZmZzZXQubGVmdCA9IDBcclxuICAgIG9mZnNldC50b3AgPSAwXHJcbiAgfVxyXG4gIHJldHVybiB7XHJcbiAgICB4OiB4IC0gb2Zmc2V0LmxlZnQgKyAkZWxtLnNjcm9sbExlZnQoKSxcclxuICAgIHk6IHkgLSBvZmZzZXQudG9wICsgJGVsbS5zY3JvbGxUb3AoKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOiOt+WPluaXi+i9rOWQjuWbvuW9ouebkuWtkOS9jee9ruaVsOaNrlxyXG4gKiBAcGFyYW0geyp9IGRhdGFcclxuICogQHBhcmFtIHsqfSBhbmdsZVxyXG4gKiBAcGFyYW0geyp9IGNlbnRlclxyXG4gKi9cclxuY29uc3QgZ2V0Um90YXRlZEJveCA9IChkYXRhLCBhbmdsZSwgY2VudGVyKSA9PiB7XHJcbiAgaWYgKGFuZ2xlID09PSAwKSB7XHJcbiAgICByZXR1cm4gZGF0YVxyXG4gIH0gZWxzZSB7XHJcbiAgICBpZiAoIWNlbnRlcikge1xyXG4gICAgICBjZW50ZXIgPSB7IHg6IGRhdGEueCArIGRhdGEud2lkdGggLyAyLCB5OiBkYXRhLnkgKyBkYXRhLmhlaWdodCAvIDIgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgbHQgPSBnZXRSb3RhdGVkKGNlbnRlciwgeyB4OiBkYXRhLngsIHk6IGRhdGEueSB9LCBhbmdsZSlcclxuICAgIGNvbnN0IHJ0ID0gZ2V0Um90YXRlZChjZW50ZXIsIHsgeDogZGF0YS54ICsgZGF0YS53aWR0aCwgeTogZGF0YS55IH0sIGFuZ2xlKVxyXG4gICAgY29uc3QgcmIgPSBnZXRSb3RhdGVkKFxyXG4gICAgICBjZW50ZXIsXHJcbiAgICAgIHsgeDogZGF0YS54ICsgZGF0YS53aWR0aCwgeTogZGF0YS55ICsgZGF0YS5oZWlnaHQgfSxcclxuICAgICAgYW5nbGVcclxuICAgIClcclxuICAgIGNvbnN0IGxiID0gZ2V0Um90YXRlZChjZW50ZXIsIHsgeDogZGF0YS54LCB5OiBkYXRhLnkgKyBkYXRhLmhlaWdodCB9LCBhbmdsZSlcclxuXHJcbiAgICBjb25zdCB4ID0gTWF0aC5taW4obHQueCwgcnQueCwgcmIueCwgbGIueClcclxuICAgIGNvbnN0IHkgPSBNYXRoLm1pbihsdC55LCBydC55LCByYi55LCBsYi55KVxyXG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heChsdC54LCBydC54LCByYi54LCBsYi54KSAtIHhcclxuICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KGx0LnksIHJ0LnksIHJiLnksIGxiLnkpIC0geVxyXG5cclxuICAgIHJldHVybiB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOiOt+WPluaXi+i9rOWQjueCueS9jee9rlxyXG4gKiBAcGFyYW0geyp9IGNlbnRlclxyXG4gKiBAcGFyYW0geyp9IHBvc2l0aW9uXHJcbiAqIEBwYXJhbSB7Kn0gYW5nbGVcclxuICovXHJcbmNvbnN0IGdldFJvdGF0ZWQgPSAoY2VudGVyLCBwb3NpdGlvbiwgYW5nbGUpID0+IHtcclxuICBjb25zdCBkaXN0YW5jZSA9IG1lYXN1cmVEaXN0YW5jZShjZW50ZXIsIHBvc2l0aW9uKVxyXG4gIGlmIChkaXN0YW5jZSA9PT0gMCB8fCBhbmdsZSA9PT0gMCkge1xyXG4gICAgcmV0dXJuIHBvc2l0aW9uXHJcbiAgfVxyXG4gIGxldCBhdGFuID0gTWF0aC5hdGFuKFxyXG4gICAgTWF0aC5hYnMocG9zaXRpb24ueCAtIGNlbnRlci54KSAvIE1hdGguYWJzKGNlbnRlci55IC0gcG9zaXRpb24ueSlcclxuICApXHJcbiAgaWYgKHBvc2l0aW9uLnggPj0gY2VudGVyLnggJiYgcG9zaXRpb24ueSA+PSBjZW50ZXIueSkge1xyXG4gICAgYXRhbiA9IE1hdGguUEkgLSBhdGFuXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmIChwb3NpdGlvbi54IDw9IGNlbnRlci54ICYmIHBvc2l0aW9uLnkgPj0gY2VudGVyLnkpIHtcclxuICAgICAgYXRhbiA9IE1hdGguUEkgKyBhdGFuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocG9zaXRpb24ueCA8PSBjZW50ZXIueCAmJiBwb3NpdGlvbi55IDw9IGNlbnRlci55KSB7XHJcbiAgICAgICAgYXRhbiA9IE1hdGguUEkgKiAyIC0gYXRhblxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGF0YW4gPSBhdGFuICUgKE1hdGguUEkgKiAyKVxyXG4gIC8vIFRPRE86XHJcbiAgY29uc3QgeHggPSAoYXRhbiArIGFuZ2xlKSAlIChNYXRoLlBJICogMilcclxuICByZXR1cm4ge1xyXG4gICAgeDogY2VudGVyLnggKyBNYXRoLnNpbih4eCkgKiBkaXN0YW5jZSxcclxuICAgIHk6IGNlbnRlci55IC0gTWF0aC5jb3MoeHgpICogZGlzdGFuY2VcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDojrflj5blm77lvaLnm5LlrZDkvY3nva7mlbDmja5cclxuICogQHBhcmFtIHsqfSBlbGVtZW50XHJcbiAqL1xyXG5jb25zdCBnZXRTaGFwZUJveCA9IGVsZW1lbnQgPT4ge1xyXG4gIGNvbnN0IHsgcGxhbmUsIHNoYXBlIH0gPSBlbGVtZW50XHJcbiAgcmV0dXJuIGdldFJvdGF0ZWRCb3gocGxhbmUuYm91bmRzLCBzaGFwZS5zaGFwZVN0eWxlLmFuZ2xlKVxyXG59XHJcblxyXG4vKipcclxuICog5qC55o2u5L2N572u6I635Y+W5Zu+5b2iXHJcbiAqIEBwYXJhbSB7Kn0gZGF0YVxyXG4gKi9cclxuY29uc3QgZ2V0U2hhcGVCeVBvc2l0aW9uID0gKG1vdXNlWCwgbW91c2VZLCAkY29udGFpbmVyLCB4eCkgPT4ge1xyXG4gIGNvbnN0IGl0ZW1zID0gW11cclxuICBjb25zdCBlbGVtZW50cyA9IGV2ZW50QnVzLnRyaWdnZXIoJ2VsZW1lbnQuZ2V0JylcclxuICBmb3IgKGxldCBpZCBpbiBlbGVtZW50cykge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2lkXVxyXG4gICAgY29uc3QgeyBkYXRhLCBwbGFuZSwgc2hhcGUgfSA9IGVsZW1lbnRcclxuICAgIGNvbnN0ICRzaGFwZSA9ICRjb250YWluZXIuZmluZCgnLnNoYXBlLWJveFtkYXRhLWlkPVwiJyArIGRhdGEuaWQgKyAnXCJdJylcclxuICAgIGNvbnN0IHBvc2l0aW9uID0gJHNoYXBlLnBvc2l0aW9uKClcclxuICAgIGNvbnN0IHggPSBtb3VzZVggLSBwb3NpdGlvbi5sZWZ0XHJcbiAgICBjb25zdCB5ID0gbW91c2VZIC0gcG9zaXRpb24udG9wXHJcbiAgICBsZXQgcGFkZGluZywgbW91c2VTaXplXHJcbiAgICBsZXQgc2hhcGVQb3MgPSB7XHJcbiAgICAgIHg6IHBvc2l0aW9uLmxlZnQsXHJcbiAgICAgIHk6IHBvc2l0aW9uLnRvcCxcclxuICAgICAgd2lkdGg6ICRzaGFwZS53aWR0aCgpLFxyXG4gICAgICBoZWlnaHQ6ICRzaGFwZS5oZWlnaHQoKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0ICRzaGFwZUNhbnZhcyA9ICRzaGFwZS5maW5kKCcuc2hhcGUtY2FudmFzJylcclxuICAgIGNvbnN0IHNoYXBlMkQgPSAkc2hhcGVDYW52YXNbMF0uZ2V0Q29udGV4dCgnMmQnKVxyXG5cclxuICAgIGNvbnN0IGluUmVjdCA9IHBvaW50SW5SZWN0KG1vdXNlWCwgbW91c2VZLCBzaGFwZVBvcylcclxuXHJcbiAgICBpZiAoc2hhcGUuYnBtbk5hbWUgPT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgIGlmICghaW5SZWN0KSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG4gICAgICAvLyBUT0RPOlxyXG4gICAgICBpZiAoeHgpIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBwYWRkaW5nID0gc2V0U2NhbGUoMTApXHJcbiAgICAgIG1vdXNlU2l6ZSA9IHtcclxuICAgICAgICB4OiBtb3VzZVggLSBwYWRkaW5nLFxyXG4gICAgICAgIHk6IG1vdXNlWSAtIHBhZGRpbmcsXHJcbiAgICAgICAgd2lkdGg6IHBhZGRpbmcgKiAyLFxyXG4gICAgICAgIGhlaWdodDogcGFkZGluZyAqIDJcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHtcclxuICAgICAgICB4OiBwbGFuZS53YXlwb2ludFswXS54LFxyXG4gICAgICAgIHk6IHBsYW5lLndheXBvaW50WzBdLnlcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB0YXJnZXRQb2ludCA9IHtcclxuICAgICAgICB4OiBwbGFuZS53YXlwb2ludFtwbGFuZS53YXlwb2ludC5sZW5ndGggLSAxXS54LFxyXG4gICAgICAgIHk6IHBsYW5lLndheXBvaW50W3BsYW5lLndheXBvaW50Lmxlbmd0aCAtIDFdLnlcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHBvaW50SW5SZWN0KHNldFNjYWxlKHRhcmdldFBvaW50LngpLCBzZXRTY2FsZSh0YXJnZXRQb2ludC55KSwgbW91c2VTaXplKVxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCB0YXJnZXREYXRhID0geyB0eXBlOiAnc2VxdWVuY2VfcG9pbnQnLCBwb2ludDogJ3RhcmdldCcsIGVsZW1lbnQgfVxyXG4gICAgICAgIGl0ZW1zLnB1c2godGFyZ2V0RGF0YSlcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHBvaW50SW5SZWN0KFxyXG4gICAgICAgICAgICBzZXRTY2FsZSh0YXJnZXRQb2ludC54KSxcclxuICAgICAgICAgICAgc2V0U2NhbGUodGFyZ2V0UG9pbnQueSksXHJcbiAgICAgICAgICAgIG1vdXNlU2l6ZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3Qgc291cmNlRGF0YSA9IHtcclxuICAgICAgICAgICAgdHlwZTogJ3NlcXVlbmNlX3BvaW50JyxcclxuICAgICAgICAgICAgcG9pbnQ6ICdzb3VyY2UnLFxyXG4gICAgICAgICAgICBlbGVtZW50XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpdGVtcy5wdXNoKHNvdXJjZURhdGEpXHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCAkdGV4dCA9ICRzaGFwZS5maW5kKCcudGV4dC1ib3gnKVxyXG4gICAgICAgICAgY29uc3QgdGV4dFBvcyA9ICR0ZXh0LnBvc2l0aW9uKClcclxuICAgICAgICAgIGNvbnN0IHRleHRTaXplID0ge1xyXG4gICAgICAgICAgICB4OiB0ZXh0UG9zLmxlZnQsXHJcbiAgICAgICAgICAgIHk6IHRleHRQb3MudG9wLFxyXG4gICAgICAgICAgICB3aWR0aDogJHRleHQud2lkdGgoKSxcclxuICAgICAgICAgICAgaGVpZ2h0OiAkdGV4dC5oZWlnaHQoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHBvaW50SW5SZWN0KHgsIHksIHRleHRTaXplKSkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0RGF0YSA9IHsgdHlwZTogJ3NlcXVlbmNlX3RleHQnLCBlbGVtZW50IH1cclxuICAgICAgICAgICAgaXRlbXMucHVzaCh0ZXh0RGF0YSlcclxuICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBwYWRkaW5nID0gc2V0U2NhbGUoNylcclxuICAgICAgICAgIGNvbnN0IGluU2VxdWVuY2UgPSBwb2ludEluU2VxdWVuY2UoXHJcbiAgICAgICAgICAgIHsgeDogcmVzdG9yZVNjYWxlKG1vdXNlWCksIHk6IHJlc3RvcmVTY2FsZShtb3VzZVkpIH0sXHJcbiAgICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICAgIHBhZGRpbmdcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGlmIChpblNlcXVlbmNlID4gLTEpIHtcclxuICAgICAgICAgICAgaXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgdHlwZTogJ3NlcXVlbmNlJyxcclxuICAgICAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICAgICAgIHBvaW50SW5kZXg6IGluU2VxdWVuY2VcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChpblJlY3QgJiYgc2hhcGUubG9ja2VkICYmICF4eCkge1xyXG4gICAgICAgIGlmIChzaGFwZTJELmlzUG9pbnRJblBhdGgoeCwgeSkpIHtcclxuICAgICAgICAgIGl0ZW1zLnB1c2goeyB0eXBlOiAnc2hhcGUnLCBlbGVtZW50IH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHBhZGRpbmcgPSBzZXRTY2FsZSg3KVxyXG5cclxuICAgICAgaWYgKGluUmVjdCkge1xyXG4gICAgICAgIG1vdXNlU2l6ZSA9IHtcclxuICAgICAgICAgIHg6IG1vdXNlWCAtIHBhZGRpbmcsXHJcbiAgICAgICAgICB5OiBtb3VzZVkgLSBwYWRkaW5nLFxyXG4gICAgICAgICAgd2lkdGg6IHBhZGRpbmcgKiAyLFxyXG4gICAgICAgICAgaGVpZ2h0OiBwYWRkaW5nICogMlxyXG4gICAgICAgIH1cclxuICAgICAgICBzaGFwZVBvcyA9IHtcclxuICAgICAgICAgIHg6IHBsYW5lLmJvdW5kcy54ICsgcGxhbmUuYm91bmRzLndpZHRoIC8gMixcclxuICAgICAgICAgIHk6IHBsYW5lLmJvdW5kcy55ICsgcGxhbmUuYm91bmRzLmhlaWdodCAvIDJcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYW5jaG9ycyA9IHNoYXBlLmdldEFuY2hvcnMoKVxyXG4gICAgICAgIGxldCBib3VuZERhdGEgPSBudWxsXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbmNob3JzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICBjb25zdCBhbmNob3IgPSBnZXRSb3RhdGVkKFxyXG4gICAgICAgICAgICBzaGFwZVBvcyxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHg6IHBsYW5lLmJvdW5kcy54ICsgYW5jaG9yc1tpXS54LFxyXG4gICAgICAgICAgICAgIHk6IHBsYW5lLmJvdW5kcy55ICsgYW5jaG9yc1tpXS55XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNoYXBlLnNoYXBlU3R5bGUuYW5nbGVcclxuICAgICAgICAgIClcclxuICAgICAgICAgIGlmIChwb2ludEluUmVjdChzZXRTY2FsZShhbmNob3IueCksIHNldFNjYWxlKGFuY2hvci55KSwgbW91c2VTaXplKSkge1xyXG4gICAgICAgICAgICBhbmNob3IuYW5nbGUgPSBnZXRQb2ludEFuZ2xlKFxyXG4gICAgICAgICAgICAgICRjb250YWluZXIsXHJcbiAgICAgICAgICAgICAgZGF0YS5pZCxcclxuICAgICAgICAgICAgICBhbmNob3IueCxcclxuICAgICAgICAgICAgICBhbmNob3IueSxcclxuICAgICAgICAgICAgICBwYWRkaW5nXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgYm91bmREYXRhID0geyB0eXBlOiAnYm91bmRzJywgZWxlbWVudCwgYW5jaG9yIH1cclxuICAgICAgICAgICAgaWYgKHNoYXBlMkQuaXNQb2ludEluUGF0aCh4LCB5KSkge1xyXG4gICAgICAgICAgICAgIGJvdW5kRGF0YS5pblBhdGggPSB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJvdW5kRGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICBpdGVtcy5wdXNoKGJvdW5kRGF0YSlcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghaW5SZWN0KSB7XHJcbiAgICAgICAgY29udGludWVcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHNoYXBlMkQuaXNQb2ludEluUGF0aCh4LCB5KSkge1xyXG4gICAgICAgIGlmICh4eCkge1xyXG4gICAgICAgICAgY29uc3QgYW5jaG9ycyA9IHNoYXBlLmdldEFuY2hvcnMoKVxyXG4gICAgICAgICAgaWYgKGFuY2hvcnMgJiYgYW5jaG9ycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaXRlbXMucHVzaCh7IHR5cGU6ICdzaGFwZScsIGVsZW1lbnQgfSlcclxuICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGl0ZW1zLnB1c2goeyB0eXBlOiAnc2hhcGUnLCBlbGVtZW50IH0pXHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbGV0IGl0ZW0gPSBudWxsXHJcbiAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgaXRlbSA9IGl0ZW1zWzBdXHJcbiAgfVxyXG4gIGlmIChpdGVtcy5sZW5ndGggPiAxICYmIHh4KSB7XHJcbiAgICBpdGVtID0gaXRlbXNbMF1cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDEpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGl0ZW1zWzBdLnR5cGUgPT09ICdib3VuZHMnICYmXHJcbiAgICAgICAgaXRlbXNbMF0udHlwZSAhPT0gJ3NlcXVlbmNlX3BvaW50JyAmJlxyXG4gICAgICAgIGl0ZW1zWzBdLnR5cGUgIT09ICdzZXF1ZW5jZSdcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zWzBdXHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc2VxdWVuY2VzID0gW11cclxuICAgICAgY29uc3Qgc2VxdWVuY2VQb2ludHMgPSBbXVxyXG4gICAgICBjb25zdCBib3VuZHMgPSBbXVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgdmFyIGl0ZW0yID0gaXRlbXNbaV1cclxuICAgICAgICBpZiAoaXRlbTIudHlwZSA9PT0gJ2JvdW5kcycpIHtcclxuICAgICAgICAgIGJvdW5kcy5wdXNoKGl0ZW0yKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoaXRlbTIudHlwZSA9PT0gJ3NlcXVlbmNlJykge1xyXG4gICAgICAgICAgICBzZXF1ZW5jZXMucHVzaChpdGVtMilcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtMi50eXBlID09PSAnc2VxdWVuY2VfcG9pbnQnKSB7XHJcbiAgICAgICAgICAgICAgc2VxdWVuY2VQb2ludHMucHVzaChpdGVtMilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoYm91bmRzLmxlbmd0aCA+IDAgJiYgc2VxdWVuY2VQb2ludHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICBpZiAoYm91bmRzW2ldLmluUGF0aCkge1xyXG4gICAgICAgICAgICBpdGVtID0gYm91bmRzW2ldXHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtID09IG51bGwgJiYgc2VxdWVuY2VQb2ludHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHNlcXVlbmNlUG9pbnRzLnNvcnQoKGl0ZW0xLCBpdGVtMikgPT4ge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCdzaGFwZS5zZWxlY3QuY2hlY2snLCBpdGVtMS5lbGVtZW50LmRhdGEuaWQpICYmXHJcbiAgICAgICAgICAgICFldmVudEJ1cy50cmlnZ2VyKCdzaGFwZS5zZWxlY3QuY2hlY2snLCBpdGVtMi5lbGVtZW50LmRhdGEuaWQpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIWV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLnNlbGVjdC5jaGVjaycsIGl0ZW0xLmVsZW1lbnQuZGF0YS5pZCkgJiZcclxuICAgICAgICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCdzaGFwZS5zZWxlY3QuY2hlY2snLCBpdGVtMi5lbGVtZW50LmRhdGEuaWQpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAxXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIGl0ZW0yLmVsZW1lbnQuc2hhcGUuc2hhcGVTdHlsZS56aW5kZXggLVxyXG4gICAgICAgICAgICAgICAgaXRlbTEuZWxlbWVudC5zaGFwZS5zaGFwZVN0eWxlLnppbmRleFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaXRlbSA9IHNlcXVlbmNlUG9pbnRzWzBdXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGl0ZW0gPT0gbnVsbCAmJiBzZXF1ZW5jZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHNlcXVlbmNlcy5zb3J0KChpdGVtMSwgaXRlbTIpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgZXZlbnRCdXMudHJpZ2dlcignc2hhcGUuc2VsZWN0LmNoZWNrJywgaXRlbTEuZWxlbWVudC5kYXRhLmlkKSAmJlxyXG4gICAgICAgICAgICAhZXZlbnRCdXMudHJpZ2dlcignc2hhcGUuc2VsZWN0LmNoZWNrJywgaXRlbTIuZWxlbWVudC5kYXRhLmlkKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICFldmVudEJ1cy50cmlnZ2VyKCdzaGFwZS5zZWxlY3QuY2hlY2snLCBpdGVtMS5lbGVtZW50LmRhdGEuaWQpICYmXHJcbiAgICAgICAgICAgICAgZXZlbnRCdXMudHJpZ2dlcignc2hhcGUuc2VsZWN0LmNoZWNrJywgaXRlbTIuZWxlbWVudC5kYXRhLmlkKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBpdGVtMi5lbGVtZW50LnNoYXBlLnNoYXBlU3R5bGUuemluZGV4IC1cclxuICAgICAgICAgICAgICAgIGl0ZW0xLmVsZW1lbnQuc2hhcGUuc2hhcGVTdHlsZS56aW5kZXhcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGl0ZW0gPSBzZXF1ZW5jZXNbMF1cclxuICAgICAgfVxyXG4gICAgICBpZiAoaXRlbSA9PSBudWxsKSB7XHJcbiAgICAgICAgaXRlbSA9IGl0ZW1zWzBdXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGl0ZW1cclxufVxyXG5cclxuLyoqXHJcbiAqIOa1i+mHj+i3neemu1xyXG4gKiBAcGFyYW0geyp9IHBvaW50MVxyXG4gKiBAcGFyYW0geyp9IHBvaW50MlxyXG4gKi9cclxuY29uc3QgbWVhc3VyZURpc3RhbmNlID0gKHBvaW50MSwgcG9pbnQyKSA9PiB7XHJcbiAgY29uc3QgZGlzdGFuY2VZID0gcG9pbnQyLnkgLSBwb2ludDEueVxyXG4gIGNvbnN0IGRpc3RhbmNlWCA9IHBvaW50Mi54IC0gcG9pbnQxLnhcclxuICByZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KGRpc3RhbmNlWSwgMikgKyBNYXRoLnBvdyhkaXN0YW5jZVgsIDIpKVxyXG59XHJcblxyXG4vKipcclxuICog6K6+572u6Jma57q/XHJcbiAqL1xyXG5jb25zdCBzZXRMaW5lRGFzaCA9IChzaGFwZTJELCBzZWdtZW50cykgPT4ge1xyXG4gIGlmICghc2hhcGUyRC5zZXRMaW5lRGFzaCkge1xyXG4gICAgc2hhcGUyRC5zZXRMaW5lRGFzaCA9IGZ1bmN0aW9uKCkge31cclxuICB9XHJcbiAgc2hhcGUyRC5zZXRMaW5lRGFzaChzZWdtZW50cylcclxuICBzaGFwZTJELm1vekRhc2ggPSBzZWdtZW50c1xyXG4gIHNoYXBlMkQud2Via2l0TGluZURhc2ggPSBzZWdtZW50c1xyXG59XHJcblxyXG4vKipcclxuICog5Yik5pat54K55piv5ZCm5Zyo55+p5b2i5LiKXHJcbiAqL1xyXG5jb25zdCBwb2ludEluUmVjdCA9ICh4LCB5LCBwb3MpID0+IHtcclxuICBpZiAoXHJcbiAgICB4ID49IHBvcy54ICYmXHJcbiAgICB4IDw9IHBvcy54ICsgcG9zLndpZHRoICYmXHJcbiAgICB5ID49IHBvcy55ICYmXHJcbiAgICB5IDw9IHBvcy55ICsgcG9zLmhlaWdodFxyXG4gICkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAcGFyYW0geyp9IHBvc1xyXG4gKiBAcGFyYW0geyp9IGVsZW1lbnRcclxuICogQHBhcmFtIHsqfSBwYWRkaW5nXHJcbiAqL1xyXG5jb25zdCBwb2ludEluU2VxdWVuY2UgPSAocG9zLCBlbGVtZW50LCBwYWRkaW5nKSA9PiB7XHJcbiAgY29uc3QgcG9pbnRzID0gZ2V0Q29ubmVjdGlvbkxpbmVQb2ludHMoZWxlbWVudClcclxuICBjb25zdCBsZWZ0ID0geyB4OiBwb3MueCAtIHBhZGRpbmcsIHk6IHBvcy55IH1cclxuICBjb25zdCByaWdodCA9IHsgeDogcG9zLnggKyBwYWRkaW5nLCB5OiBwb3MueSB9XHJcbiAgY29uc3QgYm90dG9tID0geyB4OiBwb3MueCwgeTogcG9zLnkgLSBwYWRkaW5nIH1cclxuICBjb25zdCB0b3AgPSB7IHg6IHBvcy54LCB5OiBwb3MueSArIHBhZGRpbmcgfVxyXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICBjb25zdCBmb3J3YXJkUG9pbnQgPSBwb2ludHNbaSAtIDFdXHJcbiAgICBjb25zdCBwb2ludCA9IHBvaW50c1tpXVxyXG4gICAgbGV0IGlzQ3Jvc3MgPSBjaGVja0Nyb3NzKGxlZnQsIHJpZ2h0LCBmb3J3YXJkUG9pbnQsIHBvaW50KVxyXG4gICAgaWYgKGlzQ3Jvc3MpIHtcclxuICAgICAgcmV0dXJuIGlcclxuICAgIH1cclxuICAgIGlzQ3Jvc3MgPSBjaGVja0Nyb3NzKGJvdHRvbSwgdG9wLCBmb3J3YXJkUG9pbnQsIHBvaW50KVxyXG4gICAgaWYgKGlzQ3Jvc3MpIHtcclxuICAgICAgcmV0dXJuIGlcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIC0xXHJcbn1cclxuXHJcbi8qKlxyXG4gKlxyXG4gKiBAcGFyYW0geyp9IHBvczFcclxuICogQHBhcmFtIHsqfSBwb3MyXHJcbiAqIEBwYXJhbSB7Kn0gcG9pbnQxXHJcbiAqIEBwYXJhbSB7Kn0gcG9pbnQyXHJcbiAqL1xyXG5jb25zdCBjaGVja0Nyb3NzID0gKHBvczEsIHBvczIsIHBvaW50MSwgcG9pbnQyKSA9PiB7XHJcbiAgbGV0IGluQ3Jvc3MgPSBmYWxzZVxyXG4gIC8vIFRPRE86XHJcbiAgdmFyIHh4ID1cclxuICAgIChwb3MyLnggLSBwb3MxLngpICogKHBvaW50Mi55IC0gcG9pbnQxLnkpIC1cclxuICAgIChwb3MyLnkgLSBwb3MxLnkpICogKHBvaW50Mi54IC0gcG9pbnQxLngpXHJcbiAgaWYgKHh4ICE9PSAwKSB7XHJcbiAgICB2YXIgYyA9XHJcbiAgICAgICgocG9zMS55IC0gcG9pbnQxLnkpICogKHBvaW50Mi54IC0gcG9pbnQxLngpIC1cclxuICAgICAgICAocG9zMS54IC0gcG9pbnQxLngpICogKHBvaW50Mi55IC0gcG9pbnQxLnkpKSAvXHJcbiAgICAgIHh4XHJcbiAgICB2YXIgYiA9XHJcbiAgICAgICgocG9zMS55IC0gcG9pbnQxLnkpICogKHBvczIueCAtIHBvczEueCkgLVxyXG4gICAgICAgIChwb3MxLnggLSBwb2ludDEueCkgKiAocG9zMi55IC0gcG9zMS55KSkgL1xyXG4gICAgICB4eFxyXG4gICAgaWYgKGMgPj0gMCAmJiBjIDw9IDEgJiYgYiA+PSAwICYmIGIgPD0gMSkge1xyXG4gICAgICBpbkNyb3NzID0gdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gaW5Dcm9zc1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgZ2V0QW5nbGUsXHJcbiAgZ2V0QW5nbGVEaXIsXHJcbiAgZ2V0Qm91bmRpbmcsXHJcbiAgZ2V0Q29ubmVjdGlvbkxlbmd0aCxcclxuICBnZXRDb25uZWN0aW9uTWlkcG9pbnQsXHJcbiAgZ2V0Q29ubmVjdGlvblBvaW50cyxcclxuICBnZXRFbmRwb2ludEFuZ2xlLFxyXG4gIGdldEVsZW1lbnRJZHNCeVJhbmdlLFxyXG4gIGdldENvbm5lY3Rpb25Cb3gsXHJcbiAgZ2V0TGlnaHRlckNvbG9yLFxyXG4gIGdldERhcmtlckNvbG9yLFxyXG4gIGdldERhcmtlc3RDb2xvcixcclxuICBnZXRPdXRDb25uZWN0aW9ucyxcclxuICBnZXRQb2ludEFuZ2xlLFxyXG4gIGdldFJlbGF0aXZlUG9zLFxyXG4gIGdldFJvdGF0ZWQsXHJcbiAgZ2V0Um90YXRlZEJveCxcclxuICBnZXRTZWxlY3RlZENvbm5lY3Rpb25JZHMsXHJcbiAgZ2V0U2hhcGVCeVBvc2l0aW9uLFxyXG4gIGdldFNoYXBlQm94LFxyXG4gIG1lYXN1cmVEaXN0YW5jZSxcclxuICBzZXRMaW5lRGFzaFxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZHJhdy9kcmF3VXRpbHMuanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFGQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBWUE7QUFiQTtBQTBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFOQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUZBO0FBTUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFJQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRCQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///2\n"); + +/***/ }), +/* 3 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar SlimJQ = function SlimJQ() {\n var arr = [];\n\n var document = window.document;\n\n var getProto = Object.getPrototypeOf;\n\n var _slice = arr.slice;\n\n var concat = arr.concat;\n\n var push = arr.push;\n\n var indexOf = arr.indexOf;\n\n var class2type = {};\n\n var toString = class2type.toString;\n\n var hasOwn = class2type.hasOwnProperty;\n\n var fnToString = hasOwn.toString;\n\n var ObjectFunctionString = fnToString.call(Object);\n\n var support = {};\n\n var isFunction = function isFunction(obj) {\n return typeof obj === 'function' && typeof obj.nodeType !== 'number';\n };\n\n var isWindow = function isWindow(obj) {\n return obj != null && obj === obj.window;\n };\n\n var preservedScriptAttributes = {\n type: true,\n src: true,\n noModule: true\n };\n\n function DOMEval(code, doc, node) {\n doc = doc || document;\n\n var i;\n\n var script = doc.createElement('script');\n\n script.text = code;\n if (node) {\n for (i in preservedScriptAttributes) {\n if (node[i]) {\n script[i] = node[i];\n }\n }\n }\n doc.head.appendChild(script).parentNode.removeChild(script);\n }\n\n function toType(obj) {\n if (obj == null) {\n return obj + '';\n }\n\n return (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' || typeof obj === 'function' ? class2type[toString.call(obj)] || 'object' : typeof obj === 'undefined' ? 'undefined' : _typeof(obj);\n }\n var version = '3.3.1';\n\n var SlimJQ = function SlimJQ(selector, context) {\n return new SlimJQ.fn.Init(selector, context);\n };\n\n var rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n SlimJQ.fn = SlimJQ.prototype = {\n slimJQ: version,\n constructor: SlimJQ,\n length: 0,\n\n toArray: function toArray() {\n return _slice.call(this);\n },\n\n get: function get(num) {\n if (num == null) {\n return _slice.call(this);\n }\n return num < 0 ? this[num + this.length] : this[num];\n },\n\n pushStack: function pushStack(elems) {\n var ret = SlimJQ.merge(this.constructor(), elems);\n\n ret.prevObject = this;\n\n return ret;\n },\n\n each: function each(callback) {\n return SlimJQ.each(this, callback);\n },\n\n map: function map(callback) {\n return this.pushStack(SlimJQ.map(this, function (elem, i) {\n return callback.call(elem, i, elem);\n }));\n },\n\n slice: function slice() {\n return this.pushStack(_slice.apply(this, arguments));\n },\n\n first: function first() {\n return this.eq(0);\n },\n\n last: function last() {\n return this.eq(-1);\n },\n\n eq: function eq(i) {\n var len = this.length;\n\n var j = +i + (i < 0 ? len : 0);\n return this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n },\n\n end: function end() {\n return this.prevObject || this.constructor();\n },\n\n push: push,\n sort: arr.sort,\n splice: arr.splice\n };\n\n SlimJQ.extend = SlimJQ.fn.extend = function () {\n var options;\n\n var name;\n\n var src;\n\n var copy;\n\n var copyIsArray;\n\n var clone;\n\n var target = arguments[0] || {};\n\n var i = 1;\n\n var length = arguments.length;\n\n var deep = false;\n\n if (typeof target === 'boolean') {\n deep = target;\n\n target = arguments[i] || {};\n i++;\n }\n\n if ((typeof target === 'undefined' ? 'undefined' : _typeof(target)) !== 'object' && !isFunction(target)) {\n target = {};\n }\n\n if (i === length) {\n target = this;\n i--;\n }\n\n for (; i < length; i++) {\n if ((options = arguments[i]) != null) {\n for (name in options) {\n src = target[name];\n copy = options[name];\n\n if (target === copy) {\n continue;\n }\n\n if (deep && copy && (SlimJQ.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {\n if (copyIsArray) {\n copyIsArray = false;\n clone = src && Array.isArray(src) ? src : [];\n } else {\n clone = src && SlimJQ.isPlainObject(src) ? src : {};\n }\n\n target[name] = SlimJQ.extend(deep, clone, copy);\n } else if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n\n return target;\n };\n\n SlimJQ.extend({\n expando: 'SlimJQ' + (version + Math.random()).replace(/\\D/g, ''),\n\n isReady: true,\n\n error: function error(msg) {\n throw new Error(msg);\n },\n\n noop: function noop() {},\n\n isPlainObject: function isPlainObject(obj) {\n var proto, Ctor;\n\n if (!obj || toString.call(obj) !== '[object Object]') {\n return false;\n }\n\n proto = getProto(obj);\n\n if (!proto) {\n return true;\n }\n\n Ctor = hasOwn.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor === 'function' && fnToString.call(Ctor) === ObjectFunctionString;\n },\n\n isEmptyObject: function isEmptyObject(obj) {\n var name;\n\n for (name in obj) {\n return false;\n }\n return true;\n },\n\n globalEval: function globalEval(code) {\n DOMEval(code);\n },\n\n each: function each(obj, callback) {\n var length;\n\n var i = 0;\n\n if (isArrayLike(obj)) {\n length = obj.length;\n for (; i < length; i++) {\n if (callback.call(obj[i], i, obj[i]) === false) {\n break;\n }\n }\n } else {\n for (i in obj) {\n if (callback.call(obj[i], i, obj[i]) === false) {\n break;\n }\n }\n }\n\n return obj;\n },\n\n trim: function trim(text) {\n return text == null ? '' : (text + '').replace(rtrim, '');\n },\n\n makeArray: function makeArray(arr, results) {\n var ret = results || [];\n\n if (arr != null) {\n if (isArrayLike(Object(arr))) {\n SlimJQ.merge(ret, typeof arr === 'string' ? [arr] : arr);\n } else {\n push.call(ret, arr);\n }\n }\n\n return ret;\n },\n\n inArray: function inArray(elem, arr, i) {\n return arr == null ? -1 : indexOf.call(arr, elem, i);\n },\n\n merge: function merge(first, second) {\n var len = +second.length;\n\n var j = 0;\n\n var i = first.length;\n\n for (; j < len; j++) {\n first[i++] = second[j];\n }\n\n first.length = i;\n\n return first;\n },\n\n grep: function grep(elems, callback, invert) {\n var callbackInverse;\n\n var matches = [];\n\n var i = 0;\n\n var length = elems.length;\n\n var callbackExpect = !invert;\n\n for (; i < length; i++) {\n callbackInverse = !callback(elems[i], i);\n if (callbackInverse !== callbackExpect) {\n matches.push(elems[i]);\n }\n }\n\n return matches;\n },\n\n map: function map(elems, callback, arg) {\n var length;\n\n var value;\n\n var i = 0;\n\n var ret = [];\n\n if (isArrayLike(elems)) {\n length = elems.length;\n for (; i < length; i++) {\n value = callback(elems[i], i, arg);\n\n if (value != null) {\n ret.push(value);\n }\n }\n } else {\n for (i in elems) {\n value = callback(elems[i], i, arg);\n\n if (value != null) {\n ret.push(value);\n }\n }\n }\n\n return concat.apply([], ret);\n },\n\n guid: 1,\n\n support: support\n });\n\n if (typeof Symbol === 'function') {\n SlimJQ.fn[Symbol.iterator] = arr[Symbol.iterator];\n }\n\n SlimJQ.each('Boolean Number String Function Array Date RegExp Object Error Symbol'.split(' '), function (i, name) {\n class2type['[object ' + name + ']'] = name.toLowerCase();\n });\n\n function isArrayLike(obj) {\n var length = !!obj && 'length' in obj && obj.length;\n\n var type = toType(obj);\n\n if (isFunction(obj) || isWindow(obj)) {\n return false;\n }\n\n return type === 'array' || length === 0 || typeof length === 'number' && length > 0 && length - 1 in obj;\n }\n var Sizzle = function (window) {\n var i;\n\n var support;\n\n var Expr;\n\n var getText;\n\n var isXML;\n\n var tokenize;\n\n var compile;\n\n var select;\n\n var outermostContext;\n\n var sortInput;\n\n var hasDuplicate;\n\n var setDocument;\n\n var document;\n\n var docElem;\n\n var documentIsHTML;\n\n var rbuggyQSA;\n\n var rbuggyMatches;\n\n var matches;\n\n var contains;\n\n var expando = 'sizzle' + 1 * new Date();\n\n var preferredDoc = window.document;\n\n var dirruns = 0;\n\n var done = 0;\n\n var classCache = createCache();\n\n var tokenCache = createCache();\n\n var compilerCache = createCache();\n\n var sortOrder = function sortOrder(a, b) {\n if (a === b) {\n hasDuplicate = true;\n }\n return 0;\n };\n\n var hasOwn = {}.hasOwnProperty;\n\n var arr = [];\n\n var pop = arr.pop;\n\n var pushNative = arr.push;\n\n var push = arr.push;\n\n var slice = arr.slice;\n\n var indexOf = function indexOf(list, elem) {\n var i = 0;\n\n var len = list.length;\n for (; i < len; i++) {\n if (list[i] === elem) {\n return i;\n }\n }\n return -1;\n };\n\n var booleans = 'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped';\n\n var whitespace = '[\\\\x20\\\\t\\\\r\\\\n\\\\f]';\n\n var identifier = '(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+';\n\n var attributes = '\\\\[' + whitespace + '*(' + identifier + ')(?:' + whitespace + '*([*^$|!~]?=)' + whitespace + '*(?:\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\"|(' + identifier + '))|)' + whitespace + '*\\\\]';\n\n var pseudos = ':(' + identifier + ')(?:\\\\((' + '(\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\")|' + '((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|' + attributes + ')*)|' + '.*' + ')\\\\)|)';\n\n var rwhitespace = new RegExp(whitespace + '+', 'g');\n\n var rtrim = new RegExp('^' + whitespace + '+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)' + whitespace + '+$', 'g');\n\n var rcomma = new RegExp('^' + whitespace + '*,' + whitespace + '*');\n\n var rcombinators = new RegExp('^' + whitespace + '*([>+~]|' + whitespace + ')' + whitespace + '*');\n\n var rattributeQuotes = new RegExp('=' + whitespace + '*([^\\\\]\\'\"]*?)' + whitespace + '*\\\\]', 'g');\n\n var rpseudo = new RegExp(pseudos);\n\n var ridentifier = new RegExp('^' + identifier + '$');\n\n var matchExpr = {\n ID: new RegExp('^#(' + identifier + ')'),\n CLASS: new RegExp('^\\\\.(' + identifier + ')'),\n TAG: new RegExp('^(' + identifier + '|[*])'),\n ATTR: new RegExp('^' + attributes),\n PSEUDO: new RegExp('^' + pseudos),\n CHILD: new RegExp('^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(' + whitespace + '*(even|odd|(([+-]|)(\\\\d*)n|)' + whitespace + '*(?:([+-]|)' + whitespace + '*(\\\\d+)|))' + whitespace + '*\\\\)|)', 'i'),\n bool: new RegExp('^(?:' + booleans + ')$', 'i'),\n needsContext: new RegExp('^' + whitespace + '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(' + whitespace + '*((?:-\\\\d)?\\\\d*)' + whitespace + '*\\\\)|)(?=[^-]|$)', 'i')\n };\n\n var rinputs = /^(?:input|select|textarea|button)$/i;\n\n var rheader = /^h\\d$/i;\n\n var rnative = /^[^{]+\\{\\s*\\[native \\w/;\n\n var rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/;\n\n var rsibling = /[+~]/;\n\n var runescape = new RegExp('\\\\\\\\([\\\\da-f]{1,6}' + whitespace + '?|(' + whitespace + ')|.)', 'ig');\n\n var funescape = function funescape(_, escaped, escapedWhitespace) {\n var high = '0x' + escaped - 0x10000;\n return high !== high || escapedWhitespace ? escaped : high < 0 ? String.fromCharCode(high + 0x10000) : String.fromCharCode(high >> 10 | 0xd800, high & 0x3ff | 0xdc00);\n };\n\n var rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g;\n\n var fcssescape = function fcssescape(ch, asCodePoint) {\n if (asCodePoint) {\n if (ch === '\\0') {\n return '\\uFFFD';\n }\n\n return ch.slice(0, -1) + '\\\\' + ch.charCodeAt(ch.length - 1).toString(16) + ' ';\n }\n\n return '\\\\' + ch;\n };\n\n var unloadHandler = function unloadHandler() {\n setDocument();\n };\n\n var disabledAncestor = addCombinator(function (elem) {\n return elem.disabled === true && ('form' in elem || 'label' in elem);\n }, { dir: 'parentNode', next: 'legend' });\n\n try {\n push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes);\n arr[preferredDoc.childNodes.length].nodeType;\n } catch (e) {\n push = {\n apply: arr.length ? function (target, els) {\n pushNative.apply(target, slice.call(els));\n } : function (target, els) {\n var j = target.length;\n\n var i = 0;\n while (target[j++] = els[i++]) {}\n target.length = j - 1;\n }\n };\n }\n\n function Sizzle(selector, context, results, seed) {\n var m;\n\n var i;\n\n var elem;\n\n var nid;\n\n var match;\n\n var groups;\n\n var newSelector;\n\n var newContext = context && context.ownerDocument;\n\n var nodeType = context ? context.nodeType : 9;\n\n results = results || [];\n\n if (typeof selector !== 'string' || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n return results;\n }\n\n if (!seed) {\n if ((context ? context.ownerDocument || context : preferredDoc) !== document) {\n setDocument(context);\n }\n context = context || document;\n\n if (documentIsHTML) {\n if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n if (m = match[1]) {\n if (nodeType === 9) {\n if (elem = context.getElementById(m)) {\n if (elem.id === m) {\n results.push(elem);\n return results;\n }\n } else {\n return results;\n }\n } else {\n if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {\n results.push(elem);\n return results;\n }\n }\n } else if (match[2]) {\n push.apply(results, context.getElementsByTagName(selector));\n return results;\n } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {\n push.apply(results, context.getElementsByClassName(m));\n return results;\n }\n }\n\n if (support.qsa && !compilerCache[selector + ' '] && (!rbuggyQSA || !rbuggyQSA.test(selector))) {\n if (nodeType !== 1) {\n newContext = context;\n newSelector = selector;\n } else if (context.nodeName.toLowerCase() !== 'object') {\n if (nid = context.getAttribute('id')) {\n nid = nid.replace(rcssescape, fcssescape);\n } else {\n context.setAttribute('id', nid = expando);\n }\n\n groups = tokenize(selector);\n i = groups.length;\n while (i--) {\n groups[i] = '#' + nid + ' ' + toSelector(groups[i]);\n }\n newSelector = groups.join(',');\n\n newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\n }\n\n if (newSelector) {\n try {\n push.apply(results, newContext.querySelectorAll(newSelector));\n return results;\n } catch (qsaError) {} finally {\n if (nid === expando) {\n context.removeAttribute('id');\n }\n }\n }\n }\n }\n }\n\n return select(selector.replace(rtrim, '$1'), context, results, seed);\n }\n\n function createCache() {\n var keys = [];\n\n function cache(key, value) {\n if (keys.push(key + ' ') > Expr.cacheLength) {\n delete cache[keys.shift()];\n }\n return cache[key + ' '] = value;\n }\n return cache;\n }\n\n /**\r\n * Mark a function for special use by Sizzle\r\n * @param {Function} fn The function to mark\r\n */\n function markFunction(fn) {\n fn[expando] = true;\n return fn;\n }\n\n /**\r\n * Support testing using an element\r\n * @param {Function} fn Passed the created element and returns a boolean result\r\n */\n function assert(fn) {\n var el = document.createElement('fieldset');\n\n try {\n return !!fn(el);\n } catch (e) {\n return false;\n } finally {\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n el = null;\n }\n }\n\n /**\r\n * Adds the same handler for all of the specified attrs\r\n * @param {String} attrs Pipe-separated list of attributes\r\n * @param {Function} handler The method that will be applied\r\n */\n function addHandle(attrs, handler) {\n var arr = attrs.split('|');\n\n var i = arr.length;\n\n while (i--) {\n Expr.attrHandle[arr[i]] = handler;\n }\n }\n\n /**\r\n * Checks document order of two siblings\r\n * @param {Element} a\r\n * @param {Element} b\r\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\r\n */\n function siblingCheck(a, b) {\n var cur = b && a;\n\n var diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex;\n\n if (diff) {\n return diff;\n }\n\n if (cur) {\n while (cur = cur.nextSibling) {\n if (cur === b) {\n return -1;\n }\n }\n }\n\n return a ? 1 : -1;\n }\n\n /**\r\n * Returns a function to use in pseudos for input types\r\n * @param {String} type\r\n */\n function createInputPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return name === 'input' && elem.type === type;\n };\n }\n\n /**\r\n * Returns a function to use in pseudos for buttons\r\n * @param {String} type\r\n */\n function createButtonPseudo(type) {\n return function (elem) {\n var name = elem.nodeName.toLowerCase();\n return (name === 'input' || name === 'button') && elem.type === type;\n };\n }\n\n /**\r\n * Returns a function to use in pseudos for :enabled/:disabled\r\n * @param {Boolean} disabled true for :disabled; false for :enabled\r\n */\n function createDisabledPseudo(disabled) {\n return function (elem) {\n if ('form' in elem) {\n if (elem.parentNode && elem.disabled === false) {\n if ('label' in elem) {\n if ('label' in elem.parentNode) {\n return elem.parentNode.disabled === disabled;\n } else {\n return elem.disabled === disabled;\n }\n }\n\n return elem.isDisabled === disabled || elem.isDisabled !== !disabled && disabledAncestor(elem) === disabled;\n }\n\n return elem.disabled === disabled;\n } else if ('label' in elem) {\n return elem.disabled === disabled;\n }\n\n return false;\n };\n }\n\n /**\r\n * Returns a function to use in pseudos for positionals\r\n * @param {Function} fn\r\n */\n function createPositionalPseudo(fn) {\n return markFunction(function (argument) {\n argument = +argument;\n return markFunction(function (seed, matches) {\n var j;\n\n var matchIndexes = fn([], seed.length, argument);\n\n var i = matchIndexes.length;\n\n while (i--) {\n if (seed[j = matchIndexes[i]]) {\n seed[j] = !(matches[j] = seed[j]);\n }\n }\n });\n });\n }\n\n /**\r\n * Checks a node for validity as a Sizzle context\r\n * @param {Element|Object=} context\r\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\r\n */\n function testContext(context) {\n return context && typeof context.getElementsByTagName !== 'undefined' && context;\n }\n\n support = Sizzle.support = {};\n\n /**\r\n * Detects XML nodes\r\n * @param {Element|Object} elem An element or a document\r\n * @returns {Boolean} True iff elem is a non-HTML XML node\r\n */\n isXML = Sizzle.isXML = function (elem) {\n var documentElement = elem && (elem.ownerDocument || elem).documentElement;\n return documentElement ? documentElement.nodeName !== 'HTML' : false;\n };\n\n /**\r\n * Sets document-related variables once based on the current document\r\n * @param {Element|Object} [doc] An element or document object to use to set the document\r\n * @returns {Object} Returns the current document\r\n */\n setDocument = Sizzle.setDocument = function (node) {\n var hasCompare;\n\n var subWindow;\n\n var doc = node ? node.ownerDocument || node : preferredDoc;\n\n if (doc === document || doc.nodeType !== 9 || !doc.documentElement) {\n return document;\n }\n\n document = doc;\n docElem = document.documentElement;\n documentIsHTML = !isXML(document);\n\n if (preferredDoc !== document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {\n if (subWindow.addEventListener) {\n subWindow.addEventListener('unload', unloadHandler, false);\n } else if (subWindow.attachEvent) {\n subWindow.attachEvent('onunload', unloadHandler);\n }\n }\n\n /* Attributes\r\n ---------------------------------------------------------------------- */\n\n support.attributes = assert(function (el) {\n el.className = 'i';\n return !el.getAttribute('className');\n });\n\n /* getElement(s)By*\r\n ---------------------------------------------------------------------- */\n\n support.getElementsByTagName = assert(function (el) {\n el.appendChild(document.createComment(''));\n return !el.getElementsByTagName('*').length;\n });\n\n support.getElementsByClassName = rnative.test(document.getElementsByClassName);\n\n support.getById = assert(function (el) {\n docElem.appendChild(el).id = expando;\n return !document.getElementsByName || !document.getElementsByName(expando).length;\n });\n\n if (support.getById) {\n Expr.filter['ID'] = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n return elem.getAttribute('id') === attrId;\n };\n };\n Expr.find['ID'] = function (id, context) {\n if (typeof context.getElementById !== 'undefined' && documentIsHTML) {\n var elem = context.getElementById(id);\n return elem ? [elem] : [];\n }\n };\n } else {\n Expr.filter['ID'] = function (id) {\n var attrId = id.replace(runescape, funescape);\n return function (elem) {\n var node = typeof elem.getAttributeNode !== 'undefined' && elem.getAttributeNode('id');\n return node && node.value === attrId;\n };\n };\n\n Expr.find['ID'] = function (id, context) {\n if (typeof context.getElementById !== 'undefined' && documentIsHTML) {\n var node;\n\n var i;\n\n var elems;\n\n var elem = context.getElementById(id);\n\n if (elem) {\n node = elem.getAttributeNode('id');\n if (node && node.value === id) {\n return [elem];\n }\n\n elems = context.getElementsByName(id);\n i = 0;\n while (elem = elems[i++]) {\n node = elem.getAttributeNode('id');\n if (node && node.value === id) {\n return [elem];\n }\n }\n }\n\n return [];\n }\n };\n }\n\n Expr.find['TAG'] = support.getElementsByTagName ? function (tag, context) {\n if (typeof context.getElementsByTagName !== 'undefined') {\n return context.getElementsByTagName(tag);\n } else if (support.qsa) {\n return context.querySelectorAll(tag);\n }\n } : function (tag, context) {\n var elem;\n\n var tmp = [];\n\n var i = 0;\n\n var results = context.getElementsByTagName(tag);\n\n if (tag === '*') {\n while (elem = results[i++]) {\n if (elem.nodeType === 1) {\n tmp.push(elem);\n }\n }\n\n return tmp;\n }\n return results;\n };\n\n Expr.find['CLASS'] = support.getElementsByClassName && function (className, context) {\n if (typeof context.getElementsByClassName !== 'undefined' && documentIsHTML) {\n return context.getElementsByClassName(className);\n }\n };\n\n /* QSA/matchesSelector\r\n ---------------------------------------------------------------------- */\n\n rbuggyMatches = [];\n\n rbuggyQSA = [];\n\n if (support.qsa = rnative.test(document.querySelectorAll)) {\n assert(function (el) {\n docElem.appendChild(el).innerHTML = \"\" + \"\";\n\n if (el.querySelectorAll(\"[msallowcapture^='']\").length) {\n rbuggyQSA.push('[*^$]=' + whitespace + '*(?:\\'\\'|\"\")');\n }\n\n if (!el.querySelectorAll('[selected]').length) {\n rbuggyQSA.push('\\\\[' + whitespace + '*(?:value|' + booleans + ')');\n }\n\n if (!el.querySelectorAll('[id~=' + expando + '-]').length) {\n rbuggyQSA.push('~=');\n }\n\n if (!el.querySelectorAll(':checked').length) {\n rbuggyQSA.push(':checked');\n }\n\n if (!el.querySelectorAll('a#' + expando + '+*').length) {\n rbuggyQSA.push('.#.+[+~]');\n }\n });\n\n assert(function (el) {\n el.innerHTML = \"\" + \"\";\n\n var input = document.createElement('input');\n input.setAttribute('type', 'hidden');\n el.appendChild(input).setAttribute('name', 'D');\n\n if (el.querySelectorAll('[name=d]').length) {\n rbuggyQSA.push('name' + whitespace + '*[*^$|!~]?=');\n }\n\n if (el.querySelectorAll(':enabled').length !== 2) {\n rbuggyQSA.push(':enabled', ':disabled');\n }\n\n docElem.appendChild(el).disabled = true;\n if (el.querySelectorAll(':disabled').length !== 2) {\n rbuggyQSA.push(':enabled', ':disabled');\n }\n\n el.querySelectorAll('*,:x');\n rbuggyQSA.push(',.*:');\n });\n }\n\n if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {\n assert(function (el) {\n support.disconnectedMatch = matches.call(el, '*');\n\n matches.call(el, \"[s!='']:x\");\n rbuggyMatches.push('!=', pseudos);\n });\n }\n\n rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join('|'));\n rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join('|'));\n\n /* Contains\r\n ---------------------------------------------------------------------- */\n hasCompare = rnative.test(docElem.compareDocumentPosition);\n\n contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n var adown = a.nodeType === 9 ? a.documentElement : a;\n\n var bup = b && b.parentNode;\n return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n } : function (a, b) {\n if (b) {\n while (b = b.parentNode) {\n if (b === a) {\n return true;\n }\n }\n }\n return false;\n };\n\n /* Sorting\r\n ---------------------------------------------------------------------- */\n\n sortOrder = hasCompare ? function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n\n var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n if (compare) {\n return compare;\n }\n\n compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1;\n\n if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n if (a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a)) {\n return -1;\n }\n if (b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b)) {\n return 1;\n }\n\n return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;\n }\n\n return compare & 4 ? -1 : 1;\n } : function (a, b) {\n if (a === b) {\n hasDuplicate = true;\n return 0;\n }\n\n var cur;\n\n var i = 0;\n\n var aup = a.parentNode;\n\n var bup = b.parentNode;\n\n var ap = [a];\n\n var bp = [b];\n\n if (!aup || !bup) {\n return a === document ? -1 : b === document ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;\n } else if (aup === bup) {\n return siblingCheck(a, b);\n }\n\n cur = a;\n while (cur = cur.parentNode) {\n ap.unshift(cur);\n }\n cur = b;\n while (cur = cur.parentNode) {\n bp.unshift(cur);\n }\n\n while (ap[i] === bp[i]) {\n i++;\n }\n\n return i ? siblingCheck(ap[i], bp[i]) : ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0;\n };\n\n return document;\n };\n\n Sizzle.matches = function (expr, elements) {\n return Sizzle(expr, null, null, elements);\n };\n\n Sizzle.matchesSelector = function (elem, expr) {\n if ((elem.ownerDocument || elem) !== document) {\n setDocument(elem);\n }\n\n expr = expr.replace(rattributeQuotes, \"='$1']\");\n\n if (support.matchesSelector && documentIsHTML && !compilerCache[expr + ' '] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n try {\n var ret = matches.call(elem, expr);\n\n if (ret || support.disconnectedMatch || elem.document && elem.document.nodeType !== 11) {\n return ret;\n }\n } catch (e) {}\n }\n\n return Sizzle(expr, document, null, [elem]).length > 0;\n };\n\n Sizzle.contains = function (context, elem) {\n if ((context.ownerDocument || context) !== document) {\n setDocument(context);\n }\n return contains(context, elem);\n };\n\n Sizzle.attr = function (elem, name) {\n if ((elem.ownerDocument || elem) !== document) {\n setDocument(elem);\n }\n\n var fn = Expr.attrHandle[name.toLowerCase()];\n\n var val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n\n return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n };\n\n Sizzle.escape = function (sel) {\n return (sel + '').replace(rcssescape, fcssescape);\n };\n\n Sizzle.error = function (msg) {\n throw new Error('Syntax error, unrecognized expression: ' + msg);\n };\n\n /**\r\n * Document sorting and removing duplicates\r\n * @param {ArrayLike} results\r\n */\n Sizzle.uniqueSort = function (results) {\n var elem;\n\n var duplicates = [];\n\n var j = 0;\n\n var i = 0;\n\n hasDuplicate = !support.detectDuplicates;\n sortInput = !support.sortStable && results.slice(0);\n results.sort(sortOrder);\n\n if (hasDuplicate) {\n while (elem = results[i++]) {\n if (elem === results[i]) {\n j = duplicates.push(i);\n }\n }\n while (j--) {\n results.splice(duplicates[j], 1);\n }\n }\n\n sortInput = null;\n\n return results;\n };\n\n /**\r\n * Utility function for retrieving the text value of an array of DOM nodes\r\n * @param {Array|Element} elem\r\n */\n getText = Sizzle.getText = function (elem) {\n var node;\n\n var ret = '';\n\n var i = 0;\n\n var nodeType = elem.nodeType;\n\n if (!nodeType) {\n while (node = elem[i++]) {\n ret += getText(node);\n }\n } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n if (typeof elem.textContent === 'string') {\n return elem.textContent;\n } else {\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n ret += getText(elem);\n }\n }\n } else if (nodeType === 3 || nodeType === 4) {\n return elem.nodeValue;\n }\n\n return ret;\n };\n\n Expr = Sizzle.selectors = {\n cacheLength: 50,\n\n createPseudo: markFunction,\n\n match: matchExpr,\n\n attrHandle: {},\n\n find: {},\n\n relative: {\n '>': { dir: 'parentNode', first: true },\n ' ': { dir: 'parentNode' },\n '+': { dir: 'previousSibling', first: true },\n '~': { dir: 'previousSibling' }\n },\n\n preFilter: {\n ATTR: function ATTR(match) {\n match[1] = match[1].replace(runescape, funescape);\n\n match[3] = (match[3] || match[4] || match[5] || '').replace(runescape, funescape);\n\n if (match[2] === '~=') {\n match[3] = ' ' + match[3] + ' ';\n }\n\n return match.slice(0, 4);\n },\n\n CHILD: function CHILD(match) {\n match[1] = match[1].toLowerCase();\n\n if (match[1].slice(0, 3) === 'nth') {\n if (!match[3]) {\n Sizzle.error(match[0]);\n }\n\n match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === 'even' || match[3] === 'odd'));\n match[5] = +(match[7] + match[8] || match[3] === 'odd');\n } else if (match[3]) {\n Sizzle.error(match[0]);\n }\n\n return match;\n },\n\n PSEUDO: function PSEUDO(match) {\n var excess;\n\n var unquoted = !match[6] && match[2];\n\n if (matchExpr['CHILD'].test(match[0])) {\n return null;\n }\n\n if (match[3]) {\n match[2] = match[4] || match[5] || '';\n } else if (unquoted && rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(')', unquoted.length - excess) - unquoted.length)) {\n match[0] = match[0].slice(0, excess);\n match[2] = unquoted.slice(0, excess);\n }\n\n return match.slice(0, 3);\n }\n },\n\n filter: {\n TAG: function TAG(nodeNameSelector) {\n var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n return nodeNameSelector === '*' ? function () {\n return true;\n } : function (elem) {\n return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n };\n },\n\n CLASS: function CLASS(className) {\n var pattern = classCache[className + ' '];\n\n return pattern || (pattern = new RegExp('(^|' + whitespace + ')' + className + '(' + whitespace + '|$)')) && classCache(className, function (elem) {\n return pattern.test(typeof elem.className === 'string' && elem.className || typeof elem.getAttribute !== 'undefined' && elem.getAttribute('class') || '');\n });\n },\n\n ATTR: function ATTR(name, operator, check) {\n return function (elem) {\n var result = Sizzle.attr(elem, name);\n\n if (result == null) {\n return operator === '!=';\n }\n if (!operator) {\n return true;\n }\n\n result += '';\n\n return operator === '=' ? result === check : operator === '!=' ? result !== check : operator === '^=' ? check && result.indexOf(check) === 0 : operator === '*=' ? check && result.indexOf(check) > -1 : operator === '$=' ? check && result.slice(-check.length) === check : operator === '~=' ? (' ' + result.replace(rwhitespace, ' ') + ' ').indexOf(check) > -1 : operator === '|=' ? result === check || result.slice(0, check.length + 1) === check + '-' : false;\n };\n },\n\n CHILD: function CHILD(type, what, argument, first, last) {\n var simple = type.slice(0, 3) !== 'nth';\n\n var forward = type.slice(-4) !== 'last';\n\n var ofType = what === 'of-type';\n\n return first === 1 && last === 0 ? function (elem) {\n return !!elem.parentNode;\n } : function (elem, context, xml) {\n var cache;\n\n var uniqueCache;\n\n var outerCache;\n\n var node;\n\n var nodeIndex;\n\n var start;\n\n var dir = simple !== forward ? 'nextSibling' : 'previousSibling';\n\n var parent = elem.parentNode;\n\n var name = ofType && elem.nodeName.toLowerCase();\n\n var useCache = !xml && !ofType;\n\n var diff = false;\n\n if (parent) {\n if (simple) {\n while (dir) {\n node = elem;\n while (node = node[dir]) {\n if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n return false;\n }\n }\n start = dir = type === 'only' && !start && 'nextSibling';\n }\n return true;\n }\n\n start = [forward ? parent.firstChild : parent.lastChild];\n\n if (forward && useCache) {\n node = parent;\n outerCache = node[expando] || (node[expando] = {});\n\n uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n\n cache = uniqueCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = nodeIndex && cache[2];\n node = nodeIndex && parent.childNodes[nodeIndex];\n\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if (node.nodeType === 1 && ++diff && node === elem) {\n uniqueCache[type] = [dirruns, nodeIndex, diff];\n break;\n }\n }\n } else {\n if (useCache) {\n node = elem;\n outerCache = node[expando] || (node[expando] = {});\n\n uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n\n cache = uniqueCache[type] || [];\n nodeIndex = cache[0] === dirruns && cache[1];\n diff = nodeIndex;\n }\n\n if (diff === false) {\n while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n if (useCache) {\n outerCache = node[expando] || (node[expando] = {});\n\n uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n\n uniqueCache[type] = [dirruns, diff];\n }\n\n if (node === elem) {\n break;\n }\n }\n }\n }\n }\n\n diff -= last;\n return diff === first || diff % first === 0 && diff / first >= 0;\n }\n };\n },\n\n PSEUDO: function PSEUDO(pseudo, argument) {\n var args;\n\n var fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error('unsupported pseudo: ' + pseudo);\n\n if (fn[expando]) {\n return fn(argument);\n }\n\n if (fn.length > 1) {\n args = [pseudo, pseudo, '', argument];\n return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n var idx;\n\n var matched = fn(seed, argument);\n\n var i = matched.length;\n while (i--) {\n idx = indexOf(seed, matched[i]);\n seed[idx] = !(matches[idx] = matched[i]);\n }\n }) : function (elem) {\n return fn(elem, 0, args);\n };\n }\n\n return fn;\n }\n },\n\n pseudos: {\n not: markFunction(function (selector) {\n var input = [];\n\n var results = [];\n\n var matcher = compile(selector.replace(rtrim, '$1'));\n\n return matcher[expando] ? markFunction(function (seed, matches, context, xml) {\n var elem;\n\n var unmatched = matcher(seed, null, xml, []);\n\n var i = seed.length;\n\n while (i--) {\n if (elem = unmatched[i]) {\n seed[i] = !(matches[i] = elem);\n }\n }\n }) : function (elem, context, xml) {\n input[0] = elem;\n matcher(input, null, xml, results);\n input[0] = null;\n return !results.pop();\n };\n }),\n\n has: markFunction(function (selector) {\n return function (elem) {\n return Sizzle(selector, elem).length > 0;\n };\n }),\n\n contains: markFunction(function (text) {\n text = text.replace(runescape, funescape);\n return function (elem) {\n return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1;\n };\n }),\n\n lang: markFunction(function (lang) {\n if (!ridentifier.test(lang || '')) {\n Sizzle.error('unsupported lang: ' + lang);\n }\n lang = lang.replace(runescape, funescape).toLowerCase();\n return function (elem) {\n var elemLang;\n do {\n if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute('xml:lang') || elem.getAttribute('lang')) {\n elemLang = elemLang.toLowerCase();\n return elemLang === lang || elemLang.indexOf(lang + '-') === 0;\n }\n } while ((elem = elem.parentNode) && elem.nodeType === 1);\n return false;\n };\n }),\n\n target: function target(elem) {\n var hash = window.location && window.location.hash;\n return hash && hash.slice(1) === elem.id;\n },\n\n root: function root(elem) {\n return elem === docElem;\n },\n\n focus: function focus(elem) {\n return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n },\n\n enabled: createDisabledPseudo(false),\n disabled: createDisabledPseudo(true),\n\n checked: function checked(elem) {\n var nodeName = elem.nodeName.toLowerCase();\n return nodeName === 'input' && !!elem.checked || nodeName === 'option' && !!elem.selected;\n },\n\n selected: function selected(elem) {\n if (elem.parentNode) {\n elem.parentNode.selectedIndex;\n }\n\n return elem.selected === true;\n },\n\n empty: function empty(elem) {\n for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n if (elem.nodeType < 6) {\n return false;\n }\n }\n return true;\n },\n\n parent: function parent(elem) {\n return !Expr.pseudos['empty'](elem);\n },\n\n header: function header(elem) {\n return rheader.test(elem.nodeName);\n },\n\n input: function input(elem) {\n return rinputs.test(elem.nodeName);\n },\n\n button: function button(elem) {\n var name = elem.nodeName.toLowerCase();\n return name === 'input' && elem.type === 'button' || name === 'button';\n },\n\n text: function text(elem) {\n var attr;\n return elem.nodeName.toLowerCase() === 'input' && elem.type === 'text' && ((attr = elem.getAttribute('type')) == null || attr.toLowerCase() === 'text');\n },\n\n first: createPositionalPseudo(function () {\n return [0];\n }),\n\n last: createPositionalPseudo(function (matchIndexes, length) {\n return [length - 1];\n }),\n\n eq: createPositionalPseudo(function (matchIndexes, length, argument) {\n return [argument < 0 ? argument + length : argument];\n }),\n\n even: createPositionalPseudo(function (matchIndexes, length) {\n var i = 0;\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n\n odd: createPositionalPseudo(function (matchIndexes, length) {\n var i = 1;\n for (; i < length; i += 2) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n\n lt: createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n for (; --i >= 0;) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n }),\n\n gt: createPositionalPseudo(function (matchIndexes, length, argument) {\n var i = argument < 0 ? argument + length : argument;\n for (; ++i < length;) {\n matchIndexes.push(i);\n }\n return matchIndexes;\n })\n }\n };\n\n Expr.pseudos['nth'] = Expr.pseudos['eq'];\n\n for (i in {\n radio: true,\n checkbox: true,\n file: true,\n password: true,\n image: true\n }) {\n Expr.pseudos[i] = createInputPseudo(i);\n }\n for (i in { submit: true, reset: true }) {\n Expr.pseudos[i] = createButtonPseudo(i);\n }\n\n function setFilters() {}\n setFilters.prototype = Expr.filters = Expr.pseudos;\n Expr.setFilters = new setFilters();\n\n tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n var matched;\n\n var match;\n\n var tokens;\n\n var type;\n\n var soFar;\n\n var groups;\n\n var preFilters;\n\n var cached = tokenCache[selector + ' '];\n\n if (cached) {\n return parseOnly ? 0 : cached.slice(0);\n }\n\n soFar = selector;\n groups = [];\n preFilters = Expr.preFilter;\n\n while (soFar) {\n if (!matched || (match = rcomma.exec(soFar))) {\n if (match) {\n soFar = soFar.slice(match[0].length) || soFar;\n }\n groups.push(tokens = []);\n }\n\n matched = false;\n\n if (match = rcombinators.exec(soFar)) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: match[0].replace(rtrim, ' ')\n });\n soFar = soFar.slice(matched.length);\n }\n\n for (type in Expr.filter) {\n if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n matched = match.shift();\n tokens.push({\n value: matched,\n type: type,\n matches: match\n });\n soFar = soFar.slice(matched.length);\n }\n }\n\n if (!matched) {\n break;\n }\n }\n\n return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : tokenCache(selector, groups).slice(0);\n };\n\n function toSelector(tokens) {\n var i = 0;\n\n var len = tokens.length;\n\n var selector = '';\n for (; i < len; i++) {\n selector += tokens[i].value;\n }\n return selector;\n }\n\n function addCombinator(matcher, combinator, base) {\n var dir = combinator.dir;\n\n var skip = combinator.next;\n\n var key = skip || dir;\n\n var checkNonElements = base && key === 'parentNode';\n\n var doneName = done++;\n\n return combinator.first ? function (elem, context, xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n return matcher(elem, context, xml);\n }\n }\n return false;\n } : function (elem, context, xml) {\n var oldCache;\n\n var uniqueCache;\n\n var outerCache;\n\n var newCache = [dirruns, doneName];\n\n if (xml) {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n if (matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n } else {\n while (elem = elem[dir]) {\n if (elem.nodeType === 1 || checkNonElements) {\n outerCache = elem[expando] || (elem[expando] = {});\n\n uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});\n\n if (skip && skip === elem.nodeName.toLowerCase()) {\n elem = elem[dir] || elem;\n } else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n return newCache[2] = oldCache[2];\n } else {\n uniqueCache[key] = newCache;\n\n if (newCache[2] = matcher(elem, context, xml)) {\n return true;\n }\n }\n }\n }\n }\n return false;\n };\n }\n\n function elementMatcher(matchers) {\n return matchers.length > 1 ? function (elem, context, xml) {\n var i = matchers.length;\n while (i--) {\n if (!matchers[i](elem, context, xml)) {\n return false;\n }\n }\n return true;\n } : matchers[0];\n }\n\n function multipleContexts(selector, contexts, results) {\n var i = 0;\n\n var len = contexts.length;\n for (; i < len; i++) {\n Sizzle(selector, contexts[i], results);\n }\n return results;\n }\n\n function condense(unmatched, map, filter, context, xml) {\n var elem;\n\n var newUnmatched = [];\n\n var i = 0;\n\n var len = unmatched.length;\n\n var mapped = map != null;\n\n for (; i < len; i++) {\n if (elem = unmatched[i]) {\n if (!filter || filter(elem, context, xml)) {\n newUnmatched.push(elem);\n if (mapped) {\n map.push(i);\n }\n }\n }\n }\n\n return newUnmatched;\n }\n\n function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n if (postFilter && !postFilter[expando]) {\n postFilter = setMatcher(postFilter);\n }\n if (postFinder && !postFinder[expando]) {\n postFinder = setMatcher(postFinder, postSelector);\n }\n return markFunction(function (seed, results, context, xml) {\n var temp;\n\n var i;\n\n var elem;\n\n var preMap = [];\n\n var postMap = [];\n\n var preexisting = results.length;\n\n var elems = seed || multipleContexts(selector || '*', context.nodeType ? [context] : context, []);\n\n var matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems;\n\n var matcherOut = matcher ? postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results : matcherIn;\n\n if (matcher) {\n matcher(matcherIn, matcherOut, context, xml);\n }\n\n if (postFilter) {\n temp = condense(matcherOut, postMap);\n postFilter(temp, [], context, xml);\n\n i = temp.length;\n while (i--) {\n if (elem = temp[i]) {\n matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n }\n }\n }\n\n if (seed) {\n if (postFinder || preFilter) {\n if (postFinder) {\n temp = [];\n i = matcherOut.length;\n while (i--) {\n if (elem = matcherOut[i]) {\n temp.push(matcherIn[i] = elem);\n }\n }\n postFinder(null, matcherOut = [], temp, xml);\n }\n\n i = matcherOut.length;\n while (i--) {\n if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {\n seed[temp] = !(results[temp] = elem);\n }\n }\n }\n } else {\n matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n if (postFinder) {\n postFinder(null, results, matcherOut, xml);\n } else {\n push.apply(results, matcherOut);\n }\n }\n });\n }\n\n function matcherFromTokens(tokens) {\n var checkContext;\n\n var matcher;\n\n var j;\n\n var len = tokens.length;\n\n var leadingRelative = Expr.relative[tokens[0].type];\n\n var implicitRelative = leadingRelative || Expr.relative[' '];\n\n var i = leadingRelative ? 1 : 0;\n\n var matchContext = addCombinator(function (elem) {\n return elem === checkContext;\n }, implicitRelative, true);\n\n var matchAnyContext = addCombinator(function (elem) {\n return indexOf(checkContext, elem) > -1;\n }, implicitRelative, true);\n\n var matchers = [function (elem, context, xml) {\n var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));\n checkContext = null;\n return ret;\n }];\n\n for (; i < len; i++) {\n if (matcher = Expr.relative[tokens[i].type]) {\n matchers = [addCombinator(elementMatcher(matchers), matcher)];\n } else {\n matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);\n\n if (matcher[expando]) {\n j = ++i;\n for (; j < len; j++) {\n if (Expr.relative[tokens[j].type]) {\n break;\n }\n }\n return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector(tokens.slice(0, i - 1).concat({ value: tokens[i - 2].type === ' ' ? '*' : '' })).replace(rtrim, '$1'), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n }\n matchers.push(matcher);\n }\n }\n\n return elementMatcher(matchers);\n }\n\n function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n var bySet = setMatchers.length > 0;\n\n var byElement = elementMatchers.length > 0;\n\n var superMatcher = function superMatcher(seed, context, xml, results, outermost) {\n var elem;\n\n var j;\n\n var matcher;\n\n var matchedCount = 0;\n\n var i = '0';\n\n var unmatched = seed && [];\n\n var setMatched = [];\n\n var contextBackup = outermostContext;\n\n var elems = seed || byElement && Expr.find['TAG']('*', outermost);\n\n var dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1;\n\n var len = elems.length;\n\n if (outermost) {\n outermostContext = context === document || context || outermost;\n }\n\n for (; i !== len && (elem = elems[i]) != null; i++) {\n if (byElement && elem) {\n j = 0;\n if (!context && elem.ownerDocument !== document) {\n setDocument(elem);\n xml = !documentIsHTML;\n }\n while (matcher = elementMatchers[j++]) {\n if (matcher(elem, context || document, xml)) {\n results.push(elem);\n break;\n }\n }\n if (outermost) {\n dirruns = dirrunsUnique;\n }\n }\n\n if (bySet) {\n if (elem = !matcher && elem) {\n matchedCount--;\n }\n\n if (seed) {\n unmatched.push(elem);\n }\n }\n }\n\n matchedCount += i;\n\n if (bySet && i !== matchedCount) {\n j = 0;\n while (matcher = setMatchers[j++]) {\n matcher(unmatched, setMatched, context, xml);\n }\n\n if (seed) {\n if (matchedCount > 0) {\n while (i--) {\n if (!(unmatched[i] || setMatched[i])) {\n setMatched[i] = pop.call(results);\n }\n }\n }\n\n setMatched = condense(setMatched);\n }\n\n push.apply(results, setMatched);\n\n if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n Sizzle.uniqueSort(results);\n }\n }\n\n if (outermost) {\n dirruns = dirrunsUnique;\n outermostContext = contextBackup;\n }\n\n return unmatched;\n };\n\n return bySet ? markFunction(superMatcher) : superMatcher;\n }\n\n compile = Sizzle.compile = function (selector, match) {\n var i;\n\n var setMatchers = [];\n\n var elementMatchers = [];\n\n var cached = compilerCache[selector + ' '];\n\n if (!cached) {\n if (!match) {\n match = tokenize(selector);\n }\n i = match.length;\n while (i--) {\n cached = matcherFromTokens(match[i]);\n if (cached[expando]) {\n setMatchers.push(cached);\n } else {\n elementMatchers.push(cached);\n }\n }\n\n cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));\n\n cached.selector = selector;\n }\n return cached;\n };\n\n /**\r\n * A low-level selection function that works with Sizzle's compiled\r\n * selector functions\r\n * @param {String|Function} selector A selector or a pre-compiled\r\n * selector function built with Sizzle.compile\r\n * @param {Element} context\r\n * @param {Array} [results]\r\n * @param {Array} [seed] A set of elements to match against\r\n */\n select = Sizzle.select = function (selector, context, results, seed) {\n var i;\n\n var tokens;\n\n var token;\n\n var type;\n\n var find;\n\n var compiled = typeof selector === 'function' && selector;\n\n var match = !seed && tokenize(selector = compiled.selector || selector);\n\n results = results || [];\n\n if (match.length === 1) {\n tokens = match[0] = match[0].slice(0);\n if (tokens.length > 2 && (token = tokens[0]).type === 'ID' && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n context = (Expr.find['ID'](token.matches[0].replace(runescape, funescape), context) || [])[0];\n if (!context) {\n return results;\n } else if (compiled) {\n context = context.parentNode;\n }\n\n selector = selector.slice(tokens.shift().value.length);\n }\n\n i = matchExpr['needsContext'].test(selector) ? 0 : tokens.length;\n while (i--) {\n token = tokens[i];\n\n if (Expr.relative[type = token.type]) {\n break;\n }\n if (find = Expr.find[type]) {\n if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n tokens.splice(i, 1);\n selector = seed.length && toSelector(tokens);\n if (!selector) {\n push.apply(results, seed);\n return results;\n }\n\n break;\n }\n }\n }\n }\n\n ;(compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);\n return results;\n };\n\n support.sortStable = expando.split('').sort(sortOrder).join('') === expando;\n\n support.detectDuplicates = !!hasDuplicate;\n\n setDocument();\n\n support.sortDetached = assert(function (el) {\n return el.compareDocumentPosition(document.createElement('fieldset')) & 1;\n });\n\n if (!assert(function (el) {\n el.innerHTML = \"\";\n return el.firstChild.getAttribute('href') === '#';\n })) {\n addHandle('type|href|height|width', function (elem, name, isXML) {\n if (!isXML) {\n return elem.getAttribute(name, name.toLowerCase() === 'type' ? 1 : 2);\n }\n });\n }\n\n if (!support.attributes || !assert(function (el) {\n el.innerHTML = '';\n el.firstChild.setAttribute('value', '');\n return el.firstChild.getAttribute('value') === '';\n })) {\n addHandle('value', function (elem, name, isXML) {\n if (!isXML && elem.nodeName.toLowerCase() === 'input') {\n return elem.defaultValue;\n }\n });\n }\n\n if (!assert(function (el) {\n return el.getAttribute('disabled') == null;\n })) {\n addHandle(booleans, function (elem, name, isXML) {\n var val;\n if (!isXML) {\n return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n }\n });\n }\n\n return Sizzle;\n }(window);\n\n SlimJQ.find = Sizzle;\n SlimJQ.expr = Sizzle.selectors;\n\n SlimJQ.expr[':'] = SlimJQ.expr.pseudos;\n SlimJQ.uniqueSort = SlimJQ.unique = Sizzle.uniqueSort;\n SlimJQ.text = Sizzle.getText;\n SlimJQ.isXMLDoc = Sizzle.isXML;\n SlimJQ.contains = Sizzle.contains;\n SlimJQ.escapeSelector = Sizzle.escape;\n\n var dir = function dir(elem, _dir, until) {\n var matched = [];\n\n var truncate = until !== undefined;\n\n while ((elem = elem[_dir]) && elem.nodeType !== 9) {\n if (elem.nodeType === 1) {\n if (truncate && SlimJQ(elem).is(until)) {\n break;\n }\n matched.push(elem);\n }\n }\n return matched;\n };\n\n var _siblings = function _siblings(n, elem) {\n var matched = [];\n\n for (; n; n = n.nextSibling) {\n if (n.nodeType === 1 && n !== elem) {\n matched.push(n);\n }\n }\n\n return matched;\n };\n\n var rneedsContext = SlimJQ.expr.match.needsContext;\n\n function nodeName(elem, name) {\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n }\n var rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n\n function winnow(elements, qualifier, not) {\n if (isFunction(qualifier)) {\n return SlimJQ.grep(elements, function (elem, i) {\n return !!qualifier.call(elem, i, elem) !== not;\n });\n }\n\n if (qualifier.nodeType) {\n return SlimJQ.grep(elements, function (elem) {\n return elem === qualifier !== not;\n });\n }\n\n if (typeof qualifier !== 'string') {\n return SlimJQ.grep(elements, function (elem) {\n return indexOf.call(qualifier, elem) > -1 !== not;\n });\n }\n\n return SlimJQ.filter(qualifier, elements, not);\n }\n\n SlimJQ.filter = function (expr, elems, not) {\n var elem = elems[0];\n\n if (not) {\n expr = ':not(' + expr + ')';\n }\n\n if (elems.length === 1 && elem.nodeType === 1) {\n return SlimJQ.find.matchesSelector(elem, expr) ? [elem] : [];\n }\n\n return SlimJQ.find.matches(expr, SlimJQ.grep(elems, function (elem) {\n return elem.nodeType === 1;\n }));\n };\n\n SlimJQ.fn.extend({\n find: function find(selector) {\n var i;\n\n var ret;\n\n var len = this.length;\n\n var self = this;\n\n if (typeof selector !== 'string') {\n return this.pushStack(SlimJQ(selector).filter(function () {\n for (i = 0; i < len; i++) {\n if (SlimJQ.contains(self[i], this)) {\n return true;\n }\n }\n }));\n }\n\n ret = this.pushStack([]);\n\n for (i = 0; i < len; i++) {\n SlimJQ.find(selector, self[i], ret);\n }\n\n return len > 1 ? SlimJQ.uniqueSort(ret) : ret;\n },\n filter: function filter(selector) {\n return this.pushStack(winnow(this, selector || [], false));\n },\n not: function not(selector) {\n return this.pushStack(winnow(this, selector || [], true));\n },\n is: function is(selector) {\n return !!winnow(this, typeof selector === 'string' && rneedsContext.test(selector) ? SlimJQ(selector) : selector || [], false).length;\n }\n });\n\n var rootSlimJQ;\n\n var rquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;\n\n var init = SlimJQ.fn.Init = function (selector, context, root) {\n var match, elem;\n\n if (!selector) {\n return this;\n }\n\n root = root || rootSlimJQ;\n\n if (typeof selector === 'string') {\n if (selector[0] === '<' && selector[selector.length - 1] === '>' && selector.length >= 3) {\n match = [null, selector, null];\n } else {\n match = rquickExpr.exec(selector);\n }\n\n if (match && (match[1] || !context)) {\n if (match[1]) {\n context = context instanceof SlimJQ ? context[0] : context;\n\n SlimJQ.merge(this, SlimJQ.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true));\n\n if (rsingleTag.test(match[1]) && SlimJQ.isPlainObject(context)) {\n for (match in context) {\n if (isFunction(this[match])) {\n this[match](context[match]);\n } else {\n this.attr(match, context[match]);\n }\n }\n }\n\n return this;\n } else {\n elem = document.getElementById(match[2]);\n\n if (elem) {\n this[0] = elem;\n this.length = 1;\n }\n return this;\n }\n } else if (!context || context.slimJQ) {\n return (context || root).find(selector);\n } else {\n return this.constructor(context).find(selector);\n }\n } else if (selector.nodeType) {\n this[0] = selector;\n this.length = 1;\n return this;\n } else if (isFunction(selector)) {\n return root.ready !== undefined ? root.ready(selector) : selector(SlimJQ);\n }\n\n return SlimJQ.makeArray(selector, this);\n };\n\n init.prototype = SlimJQ.fn;\n\n rootSlimJQ = SlimJQ(document);\n\n var rparentsprev = /^(?:parents|prev(?:Until|All))/;\n\n var guaranteedUnique = {\n children: true,\n contents: true,\n next: true,\n prev: true\n };\n\n SlimJQ.fn.extend({\n has: function has(target) {\n var targets = SlimJQ(target, this);\n\n var l = targets.length;\n\n return this.filter(function () {\n var i = 0;\n for (; i < l; i++) {\n if (SlimJQ.contains(this, targets[i])) {\n return true;\n }\n }\n });\n },\n\n closest: function closest(selectors, context) {\n var cur;\n\n var i = 0;\n\n var l = this.length;\n\n var matched = [];\n\n var targets = typeof selectors !== 'string' && SlimJQ(selectors);\n\n if (!rneedsContext.test(selectors)) {\n for (; i < l; i++) {\n for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : cur.nodeType === 1 && SlimJQ.find.matchesSelector(cur, selectors))) {\n matched.push(cur);\n break;\n }\n }\n }\n }\n\n return this.pushStack(matched.length > 1 ? SlimJQ.uniqueSort(matched) : matched);\n },\n\n index: function index(elem) {\n if (!elem) {\n return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;\n }\n\n if (typeof elem === 'string') {\n return indexOf.call(SlimJQ(elem), this[0]);\n }\n\n return indexOf.call(this, elem.slimJQ ? elem[0] : elem);\n },\n\n add: function add(selector, context) {\n return this.pushStack(SlimJQ.uniqueSort(SlimJQ.merge(this.get(), SlimJQ(selector, context))));\n },\n\n addBack: function addBack(selector) {\n return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));\n }\n });\n\n function sibling(cur, dir) {\n while ((cur = cur[dir]) && cur.nodeType !== 1) {}\n return cur;\n }\n\n SlimJQ.each({\n parent: function parent(elem) {\n var parent = elem.parentNode;\n return parent && parent.nodeType !== 11 ? parent : null;\n },\n parents: function parents(elem) {\n return dir(elem, 'parentNode');\n },\n parentsUntil: function parentsUntil(elem, i, until) {\n return dir(elem, 'parentNode', until);\n },\n next: function next(elem) {\n return sibling(elem, 'nextSibling');\n },\n prev: function prev(elem) {\n return sibling(elem, 'previousSibling');\n },\n nextAll: function nextAll(elem) {\n return dir(elem, 'nextSibling');\n },\n prevAll: function prevAll(elem) {\n return dir(elem, 'previousSibling');\n },\n nextUntil: function nextUntil(elem, i, until) {\n return dir(elem, 'nextSibling', until);\n },\n prevUntil: function prevUntil(elem, i, until) {\n return dir(elem, 'previousSibling', until);\n },\n siblings: function siblings(elem) {\n return _siblings((elem.parentNode || {}).firstChild, elem);\n },\n children: function children(elem) {\n return _siblings(elem.firstChild);\n },\n contents: function contents(elem) {\n if (nodeName(elem, 'iframe')) {\n return elem.contentDocument;\n }\n\n if (nodeName(elem, 'template')) {\n elem = elem.content || elem;\n }\n\n return SlimJQ.merge([], elem.childNodes);\n }\n }, function (name, fn) {\n SlimJQ.fn[name] = function (until, selector) {\n var matched = SlimJQ.map(this, fn, until);\n\n if (name.slice(-5) !== 'Until') {\n selector = until;\n }\n\n if (selector && typeof selector === 'string') {\n matched = SlimJQ.filter(selector, matched);\n }\n\n if (this.length > 1) {\n if (!guaranteedUnique[name]) {\n SlimJQ.uniqueSort(matched);\n }\n\n if (rparentsprev.test(name)) {\n matched.reverse();\n }\n }\n\n return this.pushStack(matched);\n };\n });\n var rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g;\n\n function createOptions(options) {\n var object = {};\n SlimJQ.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n object[flag] = true;\n });\n return object;\n }\n\n /*\r\n * Create a callback list using the following parameters:\r\n *\r\n *\toptions: an optional list of space-separated options that will change how\r\n *\t\t\tthe callback list behaves or a more traditional option object\r\n *\r\n * By default a callback list will act like an event callback list and can be\r\n * \"fired\" multiple times.\r\n *\r\n * Possible options:\r\n *\r\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\r\n *\r\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\r\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\r\n *\t\t\t\t\tvalues (like a Deferred)\r\n *\r\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\r\n *\r\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\r\n *\r\n */\n SlimJQ.Callbacks = function (options) {\n options = typeof options === 'string' ? createOptions(options) : SlimJQ.extend({}, options);\n\n var firing;\n\n var memory;\n\n var _fired;\n\n var _locked;\n\n var list = [];\n\n var queue = [];\n\n var firingIndex = -1;\n\n var fire = function fire() {\n _locked = _locked || options.once;\n\n _fired = firing = true;\n for (; queue.length; firingIndex = -1) {\n memory = queue.shift();\n while (++firingIndex < list.length) {\n if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {\n firingIndex = list.length;\n memory = false;\n }\n }\n }\n\n if (!options.memory) {\n memory = false;\n }\n\n firing = false;\n\n if (_locked) {\n if (memory) {\n list = [];\n } else {\n list = '';\n }\n }\n };\n\n var self = {\n add: function add() {\n if (list) {\n if (memory && !firing) {\n firingIndex = list.length - 1;\n queue.push(memory);\n }\n\n ;(function add(args) {\n SlimJQ.each(args, function (_, arg) {\n if (isFunction(arg)) {\n if (!options.unique || !self.has(arg)) {\n list.push(arg);\n }\n } else if (arg && arg.length && toType(arg) !== 'string') {\n add(arg);\n }\n });\n })(arguments);\n\n if (memory && !firing) {\n fire();\n }\n }\n return this;\n },\n\n remove: function remove() {\n SlimJQ.each(arguments, function (_, arg) {\n var index;\n while ((index = SlimJQ.inArray(arg, list, index)) > -1) {\n list.splice(index, 1);\n\n if (index <= firingIndex) {\n firingIndex--;\n }\n }\n });\n return this;\n },\n\n has: function has(fn) {\n return fn ? SlimJQ.inArray(fn, list) > -1 : list.length > 0;\n },\n\n empty: function empty() {\n if (list) {\n list = [];\n }\n return this;\n },\n\n disable: function disable() {\n _locked = queue = [];\n list = memory = '';\n return this;\n },\n disabled: function disabled() {\n return !list;\n },\n\n lock: function lock() {\n _locked = queue = [];\n if (!memory && !firing) {\n list = memory = '';\n }\n return this;\n },\n locked: function locked() {\n return !!_locked;\n },\n\n fireWith: function fireWith(context, args) {\n if (!_locked) {\n args = args || [];\n args = [context, args.slice ? args.slice() : args];\n queue.push(args);\n if (!firing) {\n fire();\n }\n }\n return this;\n },\n\n fire: function fire() {\n self.fireWith(this, arguments);\n return this;\n },\n\n fired: function fired() {\n return !!_fired;\n }\n };\n\n return self;\n };\n\n function Identity(v) {\n return v;\n }\n function Thrower(ex) {\n throw ex;\n }\n\n function adoptValue(value, resolve, reject, noValue) {\n var method;\n\n try {\n if (value && isFunction(method = value.promise)) {\n method.call(value).done(resolve).fail(reject);\n } else if (value && isFunction(method = value.then)) {\n method.call(value, resolve, reject);\n } else {\n resolve.apply(undefined, [value].slice(noValue));\n }\n } catch (value) {\n reject.apply(undefined, [value]);\n }\n }\n\n SlimJQ.extend({\n Deferred: function Deferred(func) {\n var tuples = [['notify', 'progress', SlimJQ.Callbacks('memory'), SlimJQ.Callbacks('memory'), 2], ['resolve', 'done', SlimJQ.Callbacks('once memory'), SlimJQ.Callbacks('once memory'), 0, 'resolved'], ['reject', 'fail', SlimJQ.Callbacks('once memory'), SlimJQ.Callbacks('once memory'), 1, 'rejected']];\n\n var _state = 'pending';\n\n var _promise = {\n state: function state() {\n return _state;\n },\n always: function always() {\n deferred.done(arguments).fail(arguments);\n return this;\n },\n catch: function _catch(fn) {\n return _promise.then(null, fn);\n },\n\n pipe: function pipe() {\n var fns = arguments;\n\n return SlimJQ.Deferred(function (newDefer) {\n SlimJQ.each(tuples, function (i, tuple) {\n var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]];\n\n deferred[tuple[1]](function () {\n var returned = fn && fn.apply(this, arguments);\n if (returned && isFunction(returned.promise)) {\n returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);\n } else {\n newDefer[tuple[0] + 'With'](this, fn ? [returned] : arguments);\n }\n });\n });\n fns = null;\n }).promise();\n },\n then: function then(onFulfilled, onRejected, onProgress) {\n var maxDepth = 0;\n function resolve(depth, deferred, handler, special) {\n return function () {\n var that = this;\n\n var args = arguments;\n\n var mightThrow = function mightThrow() {\n var returned, then;\n\n if (depth < maxDepth) {\n return;\n }\n\n returned = handler.apply(that, args);\n\n if (returned === deferred.promise()) {\n throw new TypeError('Thenable self-resolution');\n }\n\n then = returned && ((typeof returned === 'undefined' ? 'undefined' : _typeof(returned)) === 'object' || typeof returned === 'function') && returned.then;\n\n if (isFunction(then)) {\n if (special) {\n then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special));\n } else {\n maxDepth++;\n\n then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));\n }\n } else {\n if (handler !== Identity) {\n that = undefined;\n args = [returned];\n }\n\n ;(special || deferred.resolveWith)(that, args);\n }\n };\n\n var process = special ? mightThrow : function () {\n try {\n mightThrow();\n } catch (e) {\n if (SlimJQ.Deferred.exceptionHook) {\n SlimJQ.Deferred.exceptionHook(e, process.stackTrace);\n }\n\n if (depth + 1 >= maxDepth) {\n if (handler !== Thrower) {\n that = undefined;\n args = [e];\n }\n\n deferred.rejectWith(that, args);\n }\n }\n };\n\n if (depth) {\n process();\n } else {\n if (SlimJQ.Deferred.getStackHook) {\n process.stackTrace = SlimJQ.Deferred.getStackHook();\n }\n window.setTimeout(process);\n }\n };\n }\n\n return SlimJQ.Deferred(function (newDefer) {\n tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith));\n\n tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity));\n\n tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));\n }).promise();\n },\n\n promise: function promise(obj) {\n return obj != null ? SlimJQ.extend(obj, _promise) : _promise;\n }\n };\n\n var deferred = {};\n\n SlimJQ.each(tuples, function (i, tuple) {\n var list = tuple[2];\n\n var stateString = tuple[5];\n\n _promise[tuple[1]] = list.add;\n\n if (stateString) {\n list.add(function () {\n _state = stateString;\n }, tuples[3 - i][2].disable, tuples[3 - i][3].disable, tuples[0][2].lock, tuples[0][3].lock);\n }\n\n list.add(tuple[3].fire);\n\n deferred[tuple[0]] = function () {\n deferred[tuple[0] + 'With'](this === deferred ? undefined : this, arguments);\n return this;\n };\n\n deferred[tuple[0] + 'With'] = list.fireWith;\n });\n\n _promise.promise(deferred);\n\n if (func) {\n func.call(deferred, deferred);\n }\n\n return deferred;\n },\n\n when: function when(singleValue) {\n var remaining = arguments.length;\n\n var i = remaining;\n\n var resolveContexts = Array(i);\n\n var resolveValues = _slice.call(arguments);\n\n var master = SlimJQ.Deferred();\n\n var updateFunc = function updateFunc(i) {\n return function (value) {\n resolveContexts[i] = this;\n resolveValues[i] = arguments.length > 1 ? _slice.call(arguments) : value;\n if (! --remaining) {\n master.resolveWith(resolveContexts, resolveValues);\n }\n };\n };\n\n if (remaining <= 1) {\n adoptValue(singleValue, master.done(updateFunc(i)).resolve, master.reject, !remaining);\n\n if (master.state() === 'pending' || isFunction(resolveValues[i] && resolveValues[i].then)) {\n return master.then();\n }\n }\n\n while (i--) {\n adoptValue(resolveValues[i], updateFunc(i), master.reject);\n }\n\n return master.promise();\n }\n });\n\n var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n SlimJQ.Deferred.exceptionHook = function (error, stack) {\n if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n window.console.warn('SlimJQ.Deferred exception: ' + error.message, error.stack, stack);\n }\n };\n\n SlimJQ.readyException = function (error) {\n window.setTimeout(function () {\n throw error;\n });\n };\n\n var readyList = SlimJQ.Deferred();\n\n SlimJQ.fn.ready = function (fn) {\n readyList.then(fn).catch(function (error) {\n SlimJQ.readyException(error);\n });\n\n return this;\n };\n\n SlimJQ.extend({\n isReady: false,\n\n readyWait: 1,\n\n ready: function ready(wait) {\n if (wait === true ? --SlimJQ.readyWait : SlimJQ.isReady) {\n return;\n }\n\n SlimJQ.isReady = true;\n\n if (wait !== true && --SlimJQ.readyWait > 0) {\n return;\n }\n\n readyList.resolveWith(document, [SlimJQ]);\n }\n });\n\n SlimJQ.ready.then = readyList.then;\n\n function completed() {\n document.removeEventListener('DOMContentLoaded', completed);\n window.removeEventListener('load', completed);\n SlimJQ.ready();\n }\n\n if (document.readyState === 'complete' || document.readyState !== 'loading' && !document.documentElement.doScroll) {\n window.setTimeout(SlimJQ.ready);\n } else {\n document.addEventListener('DOMContentLoaded', completed);\n\n window.addEventListener('load', completed);\n }\n\n var access = function access(elems, fn, key, value, chainable, emptyGet, raw) {\n var i = 0;\n\n var len = elems.length;\n\n var bulk = key == null;\n\n if (toType(key) === 'object') {\n chainable = true;\n for (i in key) {\n access(elems, fn, i, key[i], true, emptyGet, raw);\n }\n } else if (value !== undefined) {\n chainable = true;\n\n if (!isFunction(value)) {\n raw = true;\n }\n\n if (bulk) {\n if (raw) {\n fn.call(elems, value);\n fn = null;\n } else {\n bulk = fn;\n fn = function fn(elem, key, value) {\n return bulk.call(SlimJQ(elem), value);\n };\n }\n }\n\n if (fn) {\n for (; i < len; i++) {\n fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));\n }\n }\n }\n\n if (chainable) {\n return elems;\n }\n\n if (bulk) {\n return fn.call(elems);\n }\n\n return len ? fn(elems[0], key) : emptyGet;\n };\n\n var rmsPrefix = /^-ms-/;\n\n var rdashAlpha = /-([a-z])/g;\n\n function fcamelCase(all, letter) {\n return letter.toUpperCase();\n }\n\n function camelCase(string) {\n return string.replace(rmsPrefix, 'ms-').replace(rdashAlpha, fcamelCase);\n }\n var acceptData = function acceptData(owner) {\n return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;\n };\n\n function Data() {\n this.expando = SlimJQ.expando + Data.uid++;\n }\n\n Data.uid = 1;\n\n Data.prototype = {\n cache: function cache(owner) {\n var value = owner[this.expando];\n\n if (!value) {\n value = {};\n\n if (acceptData(owner)) {\n if (owner.nodeType) {\n owner[this.expando] = value;\n } else {\n Object.defineProperty(owner, this.expando, {\n value: value,\n configurable: true\n });\n }\n }\n }\n\n return value;\n },\n set: function set(owner, data, value) {\n var prop;\n\n var cache = this.cache(owner);\n\n if (typeof data === 'string') {\n cache[camelCase(data)] = value;\n } else {\n for (prop in data) {\n cache[camelCase(prop)] = data[prop];\n }\n }\n return cache;\n },\n get: function get(owner, key) {\n return key === undefined ? this.cache(owner) : owner[this.expando] && owner[this.expando][camelCase(key)];\n },\n access: function access(owner, key, value) {\n if (key === undefined || key && typeof key === 'string' && value === undefined) {\n return this.get(owner, key);\n }\n\n this.set(owner, key, value);\n\n return value !== undefined ? value : key;\n },\n remove: function remove(owner, key) {\n var i;\n\n var cache = owner[this.expando];\n\n if (cache === undefined) {\n return;\n }\n\n if (key !== undefined) {\n if (Array.isArray(key)) {\n key = key.map(camelCase);\n } else {\n key = camelCase(key);\n\n key = key in cache ? [key] : key.match(rnothtmlwhite) || [];\n }\n\n i = key.length;\n\n while (i--) {\n delete cache[key[i]];\n }\n }\n\n if (key === undefined || SlimJQ.isEmptyObject(cache)) {\n if (owner.nodeType) {\n owner[this.expando] = undefined;\n } else {\n delete owner[this.expando];\n }\n }\n },\n hasData: function hasData(owner) {\n var cache = owner[this.expando];\n return cache !== undefined && !SlimJQ.isEmptyObject(cache);\n }\n };\n var dataPriv = new Data();\n\n var dataUser = new Data();\n\n var rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/;\n\n var rmultiDash = /[A-Z]/g;\n\n function getData(data) {\n if (data === 'true') {\n return true;\n }\n\n if (data === 'false') {\n return false;\n }\n\n if (data === 'null') {\n return null;\n }\n\n if (data === +data + '') {\n return +data;\n }\n\n if (rbrace.test(data)) {\n return JSON.parse(data);\n }\n\n return data;\n }\n\n function dataAttr(elem, key, data) {\n var name;\n\n if (data === undefined && elem.nodeType === 1) {\n name = 'data-' + key.replace(rmultiDash, '-$&').toLowerCase();\n data = elem.getAttribute(name);\n\n if (typeof data === 'string') {\n try {\n data = getData(data);\n } catch (e) {}\n\n dataUser.set(elem, key, data);\n } else {\n data = undefined;\n }\n }\n return data;\n }\n\n SlimJQ.extend({\n hasData: function hasData(elem) {\n return dataUser.hasData(elem) || dataPriv.hasData(elem);\n },\n\n data: function data(elem, name, _data) {\n return dataUser.access(elem, name, _data);\n },\n\n removeData: function removeData(elem, name) {\n dataUser.remove(elem, name);\n },\n\n _data: function _data(elem, name, data) {\n return dataPriv.access(elem, name, data);\n },\n\n _removeData: function _removeData(elem, name) {\n dataPriv.remove(elem, name);\n }\n });\n\n SlimJQ.fn.extend({\n data: function data(key, value) {\n var i;\n\n var name;\n\n var data;\n\n var elem = this[0];\n\n var attrs = elem && elem.attributes;\n\n if (key === undefined) {\n if (this.length) {\n data = dataUser.get(elem);\n\n if (elem.nodeType === 1 && !dataPriv.get(elem, 'hasDataAttrs')) {\n i = attrs.length;\n while (i--) {\n if (attrs[i]) {\n name = attrs[i].name;\n if (name.indexOf('data-') === 0) {\n name = camelCase(name.slice(5));\n dataAttr(elem, name, data[name]);\n }\n }\n }\n dataPriv.set(elem, 'hasDataAttrs', true);\n }\n }\n\n return data;\n }\n\n if ((typeof key === 'undefined' ? 'undefined' : _typeof(key)) === 'object') {\n return this.each(function () {\n dataUser.set(this, key);\n });\n }\n\n return access(this, function (value) {\n var data;\n\n if (elem && value === undefined) {\n data = dataUser.get(elem, key);\n if (data !== undefined) {\n return data;\n }\n\n data = dataAttr(elem, key);\n if (data !== undefined) {\n return data;\n }\n\n return;\n }\n\n this.each(function () {\n dataUser.set(this, key, value);\n });\n }, null, value, arguments.length > 1, null, true);\n },\n\n removeData: function removeData(key) {\n return this.each(function () {\n dataUser.remove(this, key);\n });\n }\n });\n\n SlimJQ.extend({\n queue: function queue(elem, type, data) {\n var queue;\n\n if (elem) {\n type = (type || 'fx') + 'queue';\n queue = dataPriv.get(elem, type);\n\n if (data) {\n if (!queue || Array.isArray(data)) {\n queue = dataPriv.access(elem, type, SlimJQ.makeArray(data));\n } else {\n queue.push(data);\n }\n }\n return queue || [];\n }\n },\n\n dequeue: function dequeue(elem, type) {\n type = type || 'fx';\n\n var queue = SlimJQ.queue(elem, type);\n\n var startLength = queue.length;\n\n var fn = queue.shift();\n\n var hooks = SlimJQ._queueHooks(elem, type);\n\n var next = function next() {\n SlimJQ.dequeue(elem, type);\n };\n\n if (fn === 'inprogress') {\n fn = queue.shift();\n startLength--;\n }\n\n if (fn) {\n if (type === 'fx') {\n queue.unshift('inprogress');\n }\n\n delete hooks.stop;\n fn.call(elem, next, hooks);\n }\n\n if (!startLength && hooks) {\n hooks.empty.fire();\n }\n },\n\n _queueHooks: function _queueHooks(elem, type) {\n var key = type + 'queueHooks';\n return dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n empty: SlimJQ.Callbacks('once memory').add(function () {\n dataPriv.remove(elem, [type + 'queue', key]);\n })\n });\n }\n });\n\n SlimJQ.fn.extend({\n queue: function queue(type, data) {\n var setter = 2;\n\n if (typeof type !== 'string') {\n data = type;\n type = 'fx';\n setter--;\n }\n\n if (arguments.length < setter) {\n return SlimJQ.queue(this[0], type);\n }\n\n return data === undefined ? this : this.each(function () {\n var queue = SlimJQ.queue(this, type, data);\n\n SlimJQ._queueHooks(this, type);\n\n if (type === 'fx' && queue[0] !== 'inprogress') {\n SlimJQ.dequeue(this, type);\n }\n });\n },\n dequeue: function dequeue(type) {\n return this.each(function () {\n SlimJQ.dequeue(this, type);\n });\n },\n clearQueue: function clearQueue(type) {\n return this.queue(type || 'fx', []);\n },\n\n promise: function promise(type, obj) {\n var tmp;\n\n var count = 1;\n\n var defer = SlimJQ.Deferred();\n\n var elements = this;\n\n var i = this.length;\n\n var resolve = function resolve() {\n if (! --count) {\n defer.resolveWith(elements, [elements]);\n }\n };\n\n if (typeof type !== 'string') {\n obj = type;\n type = undefined;\n }\n type = type || 'fx';\n\n while (i--) {\n tmp = dataPriv.get(elements[i], type + 'queueHooks');\n if (tmp && tmp.empty) {\n count++;\n tmp.empty.add(resolve);\n }\n }\n resolve();\n return defer.promise(obj);\n }\n });\n var pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n\n var rcssNum = new RegExp('^(?:([+-])=|)(' + pnum + ')([a-z%]*)$', 'i');\n\n var cssExpand = ['Top', 'Right', 'Bottom', 'Left'];\n\n var isHiddenWithinTree = function isHiddenWithinTree(elem, el) {\n elem = el || elem;\n\n return elem.style.display === 'none' || elem.style.display === '' && SlimJQ.contains(elem.ownerDocument, elem) && SlimJQ.css(elem, 'display') === 'none';\n };\n\n var swap = function swap(elem, options, callback, args) {\n var ret;\n\n var name;\n\n var old = {};\n\n for (name in options) {\n old[name] = elem.style[name];\n elem.style[name] = options[name];\n }\n\n ret = callback.apply(elem, args || []);\n\n for (name in options) {\n elem.style[name] = old[name];\n }\n\n return ret;\n };\n\n function adjustCSS(elem, prop, valueParts, tween) {\n var adjusted;\n\n var scale;\n\n var maxIterations = 20;\n\n var currentValue = tween ? function () {\n return tween.cur();\n } : function () {\n return SlimJQ.css(elem, prop, '');\n };\n\n var initial = currentValue();\n\n var unit = valueParts && valueParts[3] || (SlimJQ.cssNumber[prop] ? '' : 'px');\n\n var initialInUnit = (SlimJQ.cssNumber[prop] || unit !== 'px' && +initial) && rcssNum.exec(SlimJQ.css(elem, prop));\n\n if (initialInUnit && initialInUnit[3] !== unit) {\n initial = initial / 2;\n\n unit = unit || initialInUnit[3];\n\n initialInUnit = +initial || 1;\n\n while (maxIterations--) {\n SlimJQ.style(elem, prop, initialInUnit + unit);\n if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n maxIterations = 0;\n }\n initialInUnit = initialInUnit / scale;\n }\n\n initialInUnit = initialInUnit * 2;\n SlimJQ.style(elem, prop, initialInUnit + unit);\n\n valueParts = valueParts || [];\n }\n\n if (valueParts) {\n initialInUnit = +initialInUnit || +initial || 0;\n\n adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];\n if (tween) {\n tween.unit = unit;\n tween.start = initialInUnit;\n tween.end = adjusted;\n }\n }\n return adjusted;\n }\n\n var defaultDisplayMap = {};\n\n function getDefaultDisplay(elem) {\n var temp;\n\n var doc = elem.ownerDocument;\n\n var nodeName = elem.nodeName;\n\n var display = defaultDisplayMap[nodeName];\n\n if (display) {\n return display;\n }\n\n temp = doc.body.appendChild(doc.createElement(nodeName));\n display = SlimJQ.css(temp, 'display');\n\n temp.parentNode.removeChild(temp);\n\n if (display === 'none') {\n display = 'block';\n }\n defaultDisplayMap[nodeName] = display;\n\n return display;\n }\n\n function showHide(elements, show) {\n var display;\n\n var elem;\n\n var values = [];\n\n var index = 0;\n\n var length = elements.length;\n\n for (; index < length; index++) {\n elem = elements[index];\n if (!elem.style) {\n continue;\n }\n\n display = elem.style.display;\n if (show) {\n if (display === 'none') {\n values[index] = dataPriv.get(elem, 'display') || null;\n if (!values[index]) {\n elem.style.display = '';\n }\n }\n if (elem.style.display === '' && isHiddenWithinTree(elem)) {\n values[index] = getDefaultDisplay(elem);\n }\n } else {\n if (display !== 'none') {\n values[index] = 'none';\n\n dataPriv.set(elem, 'display', display);\n }\n }\n }\n\n for (index = 0; index < length; index++) {\n if (values[index] != null) {\n elements[index].style.display = values[index];\n }\n }\n\n return elements;\n }\n\n SlimJQ.fn.extend({\n show: function show() {\n return showHide(this, true);\n },\n hide: function hide() {\n return showHide(this);\n },\n toggle: function toggle(state) {\n if (typeof state === 'boolean') {\n return state ? this.show() : this.hide();\n }\n\n return this.each(function () {\n if (isHiddenWithinTree(this)) {\n SlimJQ(this).show();\n } else {\n SlimJQ(this).hide();\n }\n });\n }\n });\n var rcheckableType = /^(?:checkbox|radio)$/i;\n\n var rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i;\n\n var rscriptType = /^$|^module$|\\/(?:java|ecma)script/i;\n\n var wrapMap = {\n option: [1, \"'],\n\n thead: [1, '', '
'],\n col: [2, '', '
'],\n tr: [2, '', '
'],\n td: [3, '', '
'],\n\n _default: [0, '', '']\n };\n\n wrapMap.optgroup = wrapMap.option;\n\n wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n wrapMap.th = wrapMap.td;\n\n function getAll(context, tag) {\n var ret;\n\n if (typeof context.getElementsByTagName !== 'undefined') {\n ret = context.getElementsByTagName(tag || '*');\n } else if (typeof context.querySelectorAll !== 'undefined') {\n ret = context.querySelectorAll(tag || '*');\n } else {\n ret = [];\n }\n\n if (tag === undefined || tag && nodeName(context, tag)) {\n return SlimJQ.merge([context], ret);\n }\n\n return ret;\n }\n\n function setGlobalEval(elems, refElements) {\n var i = 0;\n\n var l = elems.length;\n\n for (; i < l; i++) {\n dataPriv.set(elems[i], 'globalEval', !refElements || dataPriv.get(refElements[i], 'globalEval'));\n }\n }\n\n var rhtml = /<|&#?\\w+;/;\n\n function buildFragment(elems, context, scripts, selection, ignored) {\n var elem;\n\n var tmp;\n\n var tag;\n\n var wrap;\n\n var contains;\n\n var j;\n\n var fragment = context.createDocumentFragment();\n\n var nodes = [];\n\n var i = 0;\n\n var l = elems.length;\n\n for (; i < l; i++) {\n elem = elems[i];\n\n if (elem || elem === 0) {\n if (toType(elem) === 'object') {\n SlimJQ.merge(nodes, elem.nodeType ? [elem] : elem);\n } else if (!rhtml.test(elem)) {\n nodes.push(context.createTextNode(elem));\n } else {\n tmp = tmp || fragment.appendChild(context.createElement('div'));\n\n tag = (rtagName.exec(elem) || ['', ''])[1].toLowerCase();\n wrap = wrapMap[tag] || wrapMap._default;\n tmp.innerHTML = wrap[1] + SlimJQ.htmlPrefilter(elem) + wrap[2];\n\n j = wrap[0];\n while (j--) {\n tmp = tmp.lastChild;\n }\n\n SlimJQ.merge(nodes, tmp.childNodes);\n\n tmp = fragment.firstChild;\n\n tmp.textContent = '';\n }\n }\n }\n\n fragment.textContent = '';\n\n i = 0;\n while (elem = nodes[i++]) {\n if (selection && SlimJQ.inArray(elem, selection) > -1) {\n if (ignored) {\n ignored.push(elem);\n }\n continue;\n }\n\n contains = SlimJQ.contains(elem.ownerDocument, elem);\n\n tmp = getAll(fragment.appendChild(elem), 'script');\n\n if (contains) {\n setGlobalEval(tmp);\n }\n\n if (scripts) {\n j = 0;\n while (elem = tmp[j++]) {\n if (rscriptType.test(elem.type || '')) {\n scripts.push(elem);\n }\n }\n }\n }\n\n return fragment;\n }\n\n ;(function () {\n var fragment = document.createDocumentFragment();\n\n var div = fragment.appendChild(document.createElement('div'));\n\n var input = document.createElement('input');\n\n input.setAttribute('type', 'radio');\n input.setAttribute('checked', 'checked');\n input.setAttribute('name', 't');\n\n div.appendChild(input);\n\n support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;\n\n div.innerHTML = '';\n support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n })();\n var documentElement = document.documentElement;\n\n var rkeyEvent = /^key/;\n\n var rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/;\n\n var rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n function returnTrue() {\n return true;\n }\n\n function returnFalse() {\n return false;\n }\n\n function safeActiveElement() {\n try {\n return document.activeElement;\n } catch (err) {}\n }\n\n function _on(elem, types, selector, data, fn, one) {\n var origFn, type;\n\n if ((typeof types === 'undefined' ? 'undefined' : _typeof(types)) === 'object') {\n if (typeof selector !== 'string') {\n data = data || selector;\n selector = undefined;\n }\n for (type in types) {\n _on(elem, type, selector, data, types[type], one);\n }\n return elem;\n }\n\n if (data == null && fn == null) {\n fn = selector;\n data = selector = undefined;\n } else if (fn == null) {\n if (typeof selector === 'string') {\n fn = data;\n data = undefined;\n } else {\n fn = data;\n data = selector;\n selector = undefined;\n }\n }\n if (fn === false) {\n fn = returnFalse;\n } else if (!fn) {\n return elem;\n }\n\n if (one === 1) {\n origFn = fn;\n fn = function fn(event) {\n SlimJQ().off(event);\n return origFn.apply(this, arguments);\n };\n\n fn.guid = origFn.guid || (origFn.guid = SlimJQ.guid++);\n }\n return elem.each(function () {\n SlimJQ.event.add(this, types, fn, data, selector);\n });\n }\n\n /*\r\n * Helper functions for managing events -- not part of the public interface.\r\n * Props to Dean Edwards' addEvent library for many of the ideas.\r\n */\n SlimJQ.event = {\n global: {},\n\n add: function add(elem, types, handler, data, selector) {\n var handleObjIn;\n\n var eventHandle;\n\n var tmp;\n\n var events;\n\n var t;\n\n var handleObj;\n\n var special;\n\n var handlers;\n\n var type;\n\n var namespaces;\n\n var origType;\n\n var elemData = dataPriv.get(elem);\n\n if (!elemData) {\n return;\n }\n\n if (handler.handler) {\n handleObjIn = handler;\n handler = handleObjIn.handler;\n selector = handleObjIn.selector;\n }\n\n if (selector) {\n SlimJQ.find.matchesSelector(documentElement, selector);\n }\n\n if (!handler.guid) {\n handler.guid = SlimJQ.guid++;\n }\n\n if (!(events = elemData.events)) {\n events = elemData.events = {};\n }\n if (!(eventHandle = elemData.handle)) {\n eventHandle = elemData.handle = function (e) {\n return typeof SlimJQ !== 'undefined' && SlimJQ.event.triggered !== e.type ? SlimJQ.event.dispatch.apply(elem, arguments) : undefined;\n };\n }\n\n types = (types || '').match(rnothtmlwhite) || [''];\n t = types.length;\n while (t--) {\n tmp = rtypenamespace.exec(types[t]) || [];\n type = origType = tmp[1];\n namespaces = (tmp[2] || '').split('.').sort();\n\n if (!type) {\n continue;\n }\n\n special = SlimJQ.event.special[type] || {};\n\n type = (selector ? special.delegateType : special.bindType) || type;\n\n special = SlimJQ.event.special[type] || {};\n\n handleObj = SlimJQ.extend({\n type: type,\n origType: origType,\n data: data,\n handler: handler,\n guid: handler.guid,\n selector: selector,\n needsContext: selector && SlimJQ.expr.match.needsContext.test(selector),\n namespace: namespaces.join('.')\n }, handleObjIn);\n\n if (!(handlers = events[type])) {\n handlers = events[type] = [];\n handlers.delegateCount = 0;\n\n if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {\n if (elem.addEventListener) {\n elem.addEventListener(type, eventHandle);\n }\n }\n }\n\n if (special.add) {\n special.add.call(elem, handleObj);\n\n if (!handleObj.handler.guid) {\n handleObj.handler.guid = handler.guid;\n }\n }\n\n if (selector) {\n handlers.splice(handlers.delegateCount++, 0, handleObj);\n } else {\n handlers.push(handleObj);\n }\n\n SlimJQ.event.global[type] = true;\n }\n },\n\n remove: function remove(elem, types, handler, selector, mappedTypes) {\n var j;\n\n var origCount;\n\n var tmp;\n\n var events;\n\n var t;\n\n var handleObj;\n\n var special;\n\n var handlers;\n\n var type;\n\n var namespaces;\n\n var origType;\n\n var elemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n if (!elemData || !(events = elemData.events)) {\n return;\n }\n\n types = (types || '').match(rnothtmlwhite) || [''];\n t = types.length;\n while (t--) {\n tmp = rtypenamespace.exec(types[t]) || [];\n type = origType = tmp[1];\n namespaces = (tmp[2] || '').split('.').sort();\n\n if (!type) {\n for (type in events) {\n SlimJQ.event.remove(elem, type + types[t], handler, selector, true);\n }\n continue;\n }\n\n special = SlimJQ.event.special[type] || {};\n type = (selector ? special.delegateType : special.bindType) || type;\n handlers = events[type] || [];\n tmp = tmp[2] && new RegExp('(^|\\\\.)' + namespaces.join('\\\\.(?:.*\\\\.|)') + '(\\\\.|$)');\n\n origCount = j = handlers.length;\n while (j--) {\n handleObj = handlers[j];\n\n if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === '**' && handleObj.selector)) {\n handlers.splice(j, 1);\n\n if (handleObj.selector) {\n handlers.delegateCount--;\n }\n if (special.remove) {\n special.remove.call(elem, handleObj);\n }\n }\n }\n\n if (origCount && !handlers.length) {\n if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {\n SlimJQ.removeEvent(elem, type, elemData.handle);\n }\n\n delete events[type];\n }\n }\n\n if (SlimJQ.isEmptyObject(events)) {\n dataPriv.remove(elem, 'handle events');\n }\n },\n\n dispatch: function dispatch(nativeEvent) {\n var event = SlimJQ.event.fix(nativeEvent);\n\n var i;\n\n var j;\n\n var ret;\n\n var matched;\n\n var handleObj;\n\n var handlerQueue;\n\n var args = new Array(arguments.length);\n\n var handlers = (dataPriv.get(this, 'events') || {})[event.type] || [];\n\n var special = SlimJQ.event.special[event.type] || {};\n\n args[0] = event;\n\n for (i = 1; i < arguments.length; i++) {\n args[i] = arguments[i];\n }\n\n event.delegateTarget = this;\n\n if (special.preDispatch && special.preDispatch.call(this, event) === false) {\n return;\n }\n\n handlerQueue = SlimJQ.event.handlers.call(this, event, handlers);\n\n i = 0;\n while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n event.currentTarget = matched.elem;\n\n j = 0;\n while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {\n if (!event.rnamespace || event.rnamespace.test(handleObj.namespace)) {\n event.handleObj = handleObj;\n event.data = handleObj.data;\n\n ret = ((SlimJQ.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);\n\n if (ret !== undefined) {\n if ((event.result = ret) === false) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n }\n }\n\n if (special.postDispatch) {\n special.postDispatch.call(this, event);\n }\n\n return event.result;\n },\n\n handlers: function handlers(event, _handlers) {\n var i;\n\n var handleObj;\n\n var sel;\n\n var matchedHandlers;\n\n var matchedSelectors;\n\n var handlerQueue = [];\n\n var delegateCount = _handlers.delegateCount;\n\n var cur = event.target;\n\n if (delegateCount && cur.nodeType && !(event.type === 'click' && event.button >= 1)) {\n for (; cur !== this; cur = cur.parentNode || this) {\n if (cur.nodeType === 1 && !(event.type === 'click' && cur.disabled === true)) {\n matchedHandlers = [];\n matchedSelectors = {};\n for (i = 0; i < delegateCount; i++) {\n handleObj = _handlers[i];\n\n sel = handleObj.selector + ' ';\n\n if (matchedSelectors[sel] === undefined) {\n matchedSelectors[sel] = handleObj.needsContext ? SlimJQ(sel, this).index(cur) > -1 : SlimJQ.find(sel, this, null, [cur]).length;\n }\n if (matchedSelectors[sel]) {\n matchedHandlers.push(handleObj);\n }\n }\n if (matchedHandlers.length) {\n handlerQueue.push({ elem: cur, handlers: matchedHandlers });\n }\n }\n }\n }\n\n cur = this;\n if (delegateCount < _handlers.length) {\n handlerQueue.push({\n elem: cur,\n handlers: _handlers.slice(delegateCount)\n });\n }\n\n return handlerQueue;\n },\n\n addProp: function addProp(name, hook) {\n Object.defineProperty(SlimJQ.Event.prototype, name, {\n enumerable: true,\n configurable: true,\n\n get: isFunction(hook) ? function () {\n if (this.originalEvent) {\n return hook(this.originalEvent);\n }\n } : function () {\n if (this.originalEvent) {\n return this.originalEvent[name];\n }\n },\n\n set: function set(value) {\n Object.defineProperty(this, name, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: value\n });\n }\n });\n },\n\n fix: function fix(originalEvent) {\n return originalEvent[SlimJQ.expando] ? originalEvent : new SlimJQ.Event(originalEvent);\n },\n\n special: {\n load: {\n noBubble: true\n },\n focus: {\n trigger: function trigger() {\n if (this !== safeActiveElement() && this.focus) {\n this.focus();\n return false;\n }\n },\n delegateType: 'focusin'\n },\n blur: {\n trigger: function trigger() {\n if (this === safeActiveElement() && this.blur) {\n this.blur();\n return false;\n }\n },\n delegateType: 'focusout'\n },\n click: {\n trigger: function trigger() {\n if (this.type === 'checkbox' && this.click && nodeName(this, 'input')) {\n this.click();\n return false;\n }\n },\n\n _default: function _default(event) {\n return nodeName(event.target, 'a');\n }\n },\n\n beforeunload: {\n postDispatch: function postDispatch(event) {\n if (event.result !== undefined && event.originalEvent) {\n event.originalEvent.returnValue = event.result;\n }\n }\n }\n }\n };\n\n SlimJQ.removeEvent = function (elem, type, handle) {\n if (elem.removeEventListener) {\n elem.removeEventListener(type, handle);\n }\n };\n\n SlimJQ.Event = function (src, props) {\n if (!(this instanceof SlimJQ.Event)) {\n return new SlimJQ.Event(src, props);\n }\n\n if (src && src.type) {\n this.originalEvent = src;\n this.type = src.type;\n\n this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && src.returnValue === false ? returnTrue : returnFalse;\n\n this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;\n\n this.currentTarget = src.currentTarget;\n this.relatedTarget = src.relatedTarget;\n } else {\n this.type = src;\n }\n\n if (props) {\n SlimJQ.extend(this, props);\n }\n\n this.timeStamp = src && src.timeStamp || Date.now();\n\n this[SlimJQ.expando] = true;\n };\n\n SlimJQ.Event.prototype = {\n constructor: SlimJQ.Event,\n isDefaultPrevented: returnFalse,\n isPropagationStopped: returnFalse,\n isImmediatePropagationStopped: returnFalse,\n isSimulated: false,\n\n preventDefault: function preventDefault() {\n var e = this.originalEvent;\n\n this.isDefaultPrevented = returnTrue;\n\n if (e && !this.isSimulated) {\n e.preventDefault();\n }\n },\n stopPropagation: function stopPropagation() {\n var e = this.originalEvent;\n\n this.isPropagationStopped = returnTrue;\n\n if (e && !this.isSimulated) {\n e.stopPropagation();\n }\n },\n stopImmediatePropagation: function stopImmediatePropagation() {\n var e = this.originalEvent;\n\n this.isImmediatePropagationStopped = returnTrue;\n\n if (e && !this.isSimulated) {\n e.stopImmediatePropagation();\n }\n\n this.stopPropagation();\n }\n };\n\n SlimJQ.each({\n altKey: true,\n bubbles: true,\n cancelable: true,\n changedTouches: true,\n ctrlKey: true,\n detail: true,\n eventPhase: true,\n metaKey: true,\n pageX: true,\n pageY: true,\n shiftKey: true,\n view: true,\n char: true,\n charCode: true,\n key: true,\n keyCode: true,\n button: true,\n buttons: true,\n clientX: true,\n clientY: true,\n offsetX: true,\n offsetY: true,\n pointerId: true,\n pointerType: true,\n screenX: true,\n screenY: true,\n targetTouches: true,\n toElement: true,\n touches: true,\n\n which: function which(event) {\n var button = event.button;\n\n if (event.which == null && rkeyEvent.test(event.type)) {\n return event.charCode != null ? event.charCode : event.keyCode;\n }\n\n if (!event.which && button !== undefined && rmouseEvent.test(event.type)) {\n if (button & 1) {\n return 1;\n }\n\n if (button & 2) {\n return 3;\n }\n\n if (button & 4) {\n return 2;\n }\n\n return 0;\n }\n\n return event.which;\n }\n }, SlimJQ.event.addProp);\n\n SlimJQ.each({\n mouseenter: 'mouseover',\n mouseleave: 'mouseout',\n pointerenter: 'pointerover',\n pointerleave: 'pointerout'\n }, function (orig, fix) {\n SlimJQ.event.special[orig] = {\n delegateType: fix,\n bindType: fix,\n\n handle: function handle(event) {\n var ret;\n\n var target = this;\n\n var related = event.relatedTarget;\n\n var handleObj = event.handleObj;\n\n if (!related || related !== target && !SlimJQ.contains(target, related)) {\n event.type = handleObj.origType;\n ret = handleObj.handler.apply(this, arguments);\n event.type = fix;\n }\n return ret;\n }\n };\n });\n\n SlimJQ.fn.extend({\n on: function on(types, selector, data, fn) {\n return _on(this, types, selector, data, fn);\n },\n one: function one(types, selector, data, fn) {\n return _on(this, types, selector, data, fn, 1);\n },\n off: function off(types, selector, fn) {\n var handleObj, type;\n if (types && types.preventDefault && types.handleObj) {\n handleObj = types.handleObj;\n SlimJQ(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + '.' + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);\n return this;\n }\n if ((typeof types === 'undefined' ? 'undefined' : _typeof(types)) === 'object') {\n for (type in types) {\n this.off(type, selector, types[type]);\n }\n return this;\n }\n if (selector === false || typeof selector === 'function') {\n fn = selector;\n selector = undefined;\n }\n if (fn === false) {\n fn = returnFalse;\n }\n return this.each(function () {\n SlimJQ.event.remove(this, types, fn, selector);\n });\n }\n });\n\n var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi;\n\n var rnoInnerhtml = /\\s*$/g;\n\n function manipulationTarget(elem, content) {\n if (nodeName(elem, 'table') && nodeName(content.nodeType !== 11 ? content : content.firstChild, 'tr')) {\n return SlimJQ(elem).children('tbody')[0] || elem;\n }\n\n return elem;\n }\n\n function disableScript(elem) {\n elem.type = (elem.getAttribute('type') !== null) + '/' + elem.type;\n return elem;\n }\n function restoreScript(elem) {\n if ((elem.type || '').slice(0, 5) === 'true/') {\n elem.type = elem.type.slice(5);\n } else {\n elem.removeAttribute('type');\n }\n\n return elem;\n }\n\n function cloneCopyEvent(src, dest) {\n var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n if (dest.nodeType !== 1) {\n return;\n }\n\n if (dataPriv.hasData(src)) {\n pdataOld = dataPriv.access(src);\n pdataCur = dataPriv.set(dest, pdataOld);\n events = pdataOld.events;\n\n if (events) {\n delete pdataCur.handle;\n pdataCur.events = {};\n\n for (type in events) {\n for (i = 0, l = events[type].length; i < l; i++) {\n SlimJQ.event.add(dest, type, events[type][i]);\n }\n }\n }\n }\n\n if (dataUser.hasData(src)) {\n udataOld = dataUser.access(src);\n udataCur = SlimJQ.extend({}, udataOld);\n\n dataUser.set(dest, udataCur);\n }\n }\n\n function fixInput(src, dest) {\n var nodeName = dest.nodeName.toLowerCase();\n\n if (nodeName === 'input' && rcheckableType.test(src.type)) {\n dest.checked = src.checked;\n } else if (nodeName === 'input' || nodeName === 'textarea') {\n dest.defaultValue = src.defaultValue;\n }\n }\n\n function domManip(collection, args, callback, ignored) {\n args = concat.apply([], args);\n\n var fragment;\n\n var first;\n\n var scripts;\n\n var hasScripts;\n\n var node;\n\n var doc;\n\n var i = 0;\n\n var l = collection.length;\n\n var iNoClone = l - 1;\n\n var value = args[0];\n\n var valueIsFunction = isFunction(value);\n\n if (valueIsFunction || l > 1 && typeof value === 'string' && !support.checkClone && rchecked.test(value)) {\n return collection.each(function (index) {\n var self = collection.eq(index);\n if (valueIsFunction) {\n args[0] = value.call(this, index, self.html());\n }\n domManip(self, args, callback, ignored);\n });\n }\n\n if (l) {\n fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n first = fragment.firstChild;\n\n if (fragment.childNodes.length === 1) {\n fragment = first;\n }\n\n if (first || ignored) {\n scripts = SlimJQ.map(getAll(fragment, 'script'), disableScript);\n hasScripts = scripts.length;\n\n for (; i < l; i++) {\n node = fragment;\n\n if (i !== iNoClone) {\n node = SlimJQ.clone(node, true, true);\n\n if (hasScripts) {\n SlimJQ.merge(scripts, getAll(node, 'script'));\n }\n }\n\n callback.call(collection[i], node, i);\n }\n\n if (hasScripts) {\n doc = scripts[scripts.length - 1].ownerDocument;\n\n SlimJQ.map(scripts, restoreScript);\n\n for (i = 0; i < hasScripts; i++) {\n node = scripts[i];\n if (rscriptType.test(node.type || '') && !dataPriv.access(node, 'globalEval') && SlimJQ.contains(doc, node)) {\n if (node.src && (node.type || '').toLowerCase() !== 'module') {\n if (SlimJQ._evalUrl) {\n SlimJQ._evalUrl(node.src);\n }\n } else {\n DOMEval(node.textContent.replace(rcleanScript, ''), doc, node);\n }\n }\n }\n }\n }\n }\n\n return collection;\n }\n\n function _remove(elem, selector, keepData) {\n var node;\n\n var nodes = selector ? SlimJQ.filter(selector, elem) : elem;\n\n var i = 0;\n\n for (; (node = nodes[i]) != null; i++) {\n if (!keepData && node.nodeType === 1) {\n SlimJQ.cleanData(getAll(node));\n }\n\n if (node.parentNode) {\n if (keepData && SlimJQ.contains(node.ownerDocument, node)) {\n setGlobalEval(getAll(node, 'script'));\n }\n node.parentNode.removeChild(node);\n }\n }\n\n return elem;\n }\n\n SlimJQ.extend({\n htmlPrefilter: function htmlPrefilter(html) {\n return html.replace(rxhtmlTag, '<$1>');\n },\n\n clone: function clone(elem, dataAndEvents, deepDataAndEvents) {\n var i;\n\n var l;\n\n var srcElements;\n\n var destElements;\n\n var clone = elem.cloneNode(true);\n\n var inPage = SlimJQ.contains(elem.ownerDocument, elem);\n\n if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !SlimJQ.isXMLDoc(elem)) {\n destElements = getAll(clone);\n srcElements = getAll(elem);\n\n for (i = 0, l = srcElements.length; i < l; i++) {\n fixInput(srcElements[i], destElements[i]);\n }\n }\n\n if (dataAndEvents) {\n if (deepDataAndEvents) {\n srcElements = srcElements || getAll(elem);\n destElements = destElements || getAll(clone);\n\n for (i = 0, l = srcElements.length; i < l; i++) {\n cloneCopyEvent(srcElements[i], destElements[i]);\n }\n } else {\n cloneCopyEvent(elem, clone);\n }\n }\n\n destElements = getAll(clone, 'script');\n if (destElements.length > 0) {\n setGlobalEval(destElements, !inPage && getAll(elem, 'script'));\n }\n\n return clone;\n },\n\n cleanData: function cleanData(elems) {\n var data;\n\n var elem;\n\n var type;\n\n var special = SlimJQ.event.special;\n\n var i = 0;\n\n for (; (elem = elems[i]) !== undefined; i++) {\n if (acceptData(elem)) {\n if (data = elem[dataPriv.expando]) {\n if (data.events) {\n for (type in data.events) {\n if (special[type]) {\n SlimJQ.event.remove(elem, type);\n } else {\n SlimJQ.removeEvent(elem, type, data.handle);\n }\n }\n }\n\n elem[dataPriv.expando] = undefined;\n }\n if (elem[dataUser.expando]) {\n elem[dataUser.expando] = undefined;\n }\n }\n }\n }\n });\n\n SlimJQ.fn.extend({\n detach: function detach(selector) {\n return _remove(this, selector, true);\n },\n\n remove: function remove(selector) {\n return _remove(this, selector);\n },\n\n text: function text(value) {\n return access(this, function (value) {\n return value === undefined ? SlimJQ.text(this) : this.empty().each(function () {\n if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n this.textContent = value;\n }\n });\n }, null, value, arguments.length);\n },\n\n append: function append() {\n return domManip(this, arguments, function (elem) {\n if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n var target = manipulationTarget(this, elem);\n target.appendChild(elem);\n }\n });\n },\n\n prepend: function prepend() {\n return domManip(this, arguments, function (elem) {\n if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n var target = manipulationTarget(this, elem);\n target.insertBefore(elem, target.firstChild);\n }\n });\n },\n\n before: function before() {\n return domManip(this, arguments, function (elem) {\n if (this.parentNode) {\n this.parentNode.insertBefore(elem, this);\n }\n });\n },\n\n after: function after() {\n return domManip(this, arguments, function (elem) {\n if (this.parentNode) {\n this.parentNode.insertBefore(elem, this.nextSibling);\n }\n });\n },\n\n empty: function empty() {\n var elem;\n\n var i = 0;\n\n for (; (elem = this[i]) != null; i++) {\n if (elem.nodeType === 1) {\n SlimJQ.cleanData(getAll(elem, false));\n\n elem.textContent = '';\n }\n }\n\n return this;\n },\n\n clone: function clone(dataAndEvents, deepDataAndEvents) {\n dataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n return this.map(function () {\n return SlimJQ.clone(this, dataAndEvents, deepDataAndEvents);\n });\n },\n\n html: function html(value) {\n return access(this, function (value) {\n var elem = this[0] || {};\n\n var i = 0;\n\n var l = this.length;\n\n if (value === undefined && elem.nodeType === 1) {\n return elem.innerHTML;\n }\n\n if (typeof value === 'string' && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || ['', ''])[1].toLowerCase()]) {\n value = SlimJQ.htmlPrefilter(value);\n\n try {\n for (; i < l; i++) {\n elem = this[i] || {};\n\n if (elem.nodeType === 1) {\n SlimJQ.cleanData(getAll(elem, false));\n elem.innerHTML = value;\n }\n }\n\n elem = 0;\n } catch (e) {}\n }\n\n if (elem) {\n this.empty().append(value);\n }\n }, null, value, arguments.length);\n },\n\n replaceWith: function replaceWith() {\n var ignored = [];\n\n return domManip(this, arguments, function (elem) {\n var parent = this.parentNode;\n\n if (SlimJQ.inArray(this, ignored) < 0) {\n SlimJQ.cleanData(getAll(this));\n if (parent) {\n parent.replaceChild(elem, this);\n }\n }\n }, ignored);\n }\n });\n\n SlimJQ.each({\n appendTo: 'append',\n prependTo: 'prepend',\n insertBefore: 'before',\n insertAfter: 'after',\n replaceAll: 'replaceWith'\n }, function (name, original) {\n SlimJQ.fn[name] = function (selector) {\n var elems;\n\n var ret = [];\n\n var insert = SlimJQ(selector);\n\n var last = insert.length - 1;\n\n var i = 0;\n\n for (; i <= last; i++) {\n elems = i === last ? this : this.clone(true);\n SlimJQ(insert[i])[original](elems);\n\n push.apply(ret, elems.get());\n }\n\n return this.pushStack(ret);\n };\n });\n var rnumnonpx = new RegExp('^(' + pnum + ')(?!px)[a-z%]+$', 'i');\n\n var getStyles = function getStyles(elem) {\n var view = elem.ownerDocument.defaultView;\n\n if (!view || !view.opener) {\n view = window;\n }\n\n return view.getComputedStyle(elem);\n };\n\n var rboxStyle = new RegExp(cssExpand.join('|'), 'i');(function () {\n function computeStyleTests() {\n if (!div) {\n return;\n }\n\n container.style.cssText = 'position:absolute;left:-11111px;width:60px;' + 'margin-top:1px;padding:0;border:0';\n div.style.cssText = 'position:relative;display:block;box-sizing:border-box;overflow:scroll;' + 'margin:auto;border:1px;padding:1px;' + 'width:60%;top:1%';\n documentElement.appendChild(container).appendChild(div);\n\n var divStyle = window.getComputedStyle(div);\n pixelPositionVal = divStyle.top !== '1%';\n\n reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12;\n\n div.style.right = '60%';\n pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36;\n\n boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36;\n\n div.style.position = 'absolute';\n scrollboxSizeVal = div.offsetWidth === 36 || 'absolute';\n\n documentElement.removeChild(container);\n\n div = null;\n }\n\n function roundPixelMeasures(measure) {\n return Math.round(parseFloat(measure));\n }\n\n var pixelPositionVal;\n\n var boxSizingReliableVal;\n\n var scrollboxSizeVal;\n\n var pixelBoxStylesVal;\n\n var reliableMarginLeftVal;\n\n var container = document.createElement('div');\n\n var div = document.createElement('div');\n\n if (!div.style) {\n return;\n }\n\n div.style.backgroundClip = 'content-box';\n div.cloneNode(true).style.backgroundClip = '';\n support.clearCloneStyle = div.style.backgroundClip === 'content-box';\n\n SlimJQ.extend(support, {\n boxSizingReliable: function boxSizingReliable() {\n computeStyleTests();\n return boxSizingReliableVal;\n },\n pixelBoxStyles: function pixelBoxStyles() {\n computeStyleTests();\n return pixelBoxStylesVal;\n },\n pixelPosition: function pixelPosition() {\n computeStyleTests();\n return pixelPositionVal;\n },\n reliableMarginLeft: function reliableMarginLeft() {\n computeStyleTests();\n return reliableMarginLeftVal;\n },\n scrollboxSize: function scrollboxSize() {\n computeStyleTests();\n return scrollboxSizeVal;\n }\n });\n })();\n\n function curCSS(elem, name, computed) {\n var width;\n\n var minWidth;\n\n var maxWidth;\n\n var ret;\n\n var style = elem.style;\n\n computed = computed || getStyles(elem);\n\n if (computed) {\n ret = computed.getPropertyValue(name) || computed[name];\n\n if (ret === '' && !SlimJQ.contains(elem.ownerDocument, elem)) {\n ret = SlimJQ.style(elem, name);\n }\n\n if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n width = style.width;\n minWidth = style.minWidth;\n maxWidth = style.maxWidth;\n\n style.minWidth = style.maxWidth = style.width = ret;\n ret = computed.width;\n\n style.width = width;\n style.minWidth = minWidth;\n style.maxWidth = maxWidth;\n }\n }\n\n return ret !== undefined ? ret + '' : ret;\n }\n\n function addGetHookIf(conditionFn, hookFn) {\n return {\n get: function get() {\n if (conditionFn()) {\n delete this.get;\n return;\n }\n\n return (this.get = hookFn).apply(this, arguments);\n }\n };\n }\n\n var rdisplayswap = /^(none|table(?!-c[ea]).+)/;\n\n var rcustomProp = /^--/;\n\n var cssShow = { position: 'absolute', visibility: 'hidden', display: 'block' };\n\n var cssNormalTransform = {\n letterSpacing: '0',\n fontWeight: '400'\n };\n\n var cssPrefixes = ['Webkit', 'Moz', 'ms'];\n\n var emptyStyle = document.createElement('div').style;\n\n function vendorPropName(name) {\n if (name in emptyStyle) {\n return name;\n }\n\n var capName = name[0].toUpperCase() + name.slice(1);\n\n var i = cssPrefixes.length;\n\n while (i--) {\n name = cssPrefixes[i] + capName;\n if (name in emptyStyle) {\n return name;\n }\n }\n }\n\n function finalPropName(name) {\n var ret = SlimJQ.cssProps[name];\n if (!ret) {\n ret = SlimJQ.cssProps[name] = vendorPropName(name) || name;\n }\n return ret;\n }\n\n function setPositiveNumber(elem, value, subtract) {\n var matches = rcssNum.exec(value);\n return matches ? Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || 'px') : value;\n }\n\n function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n var i = dimension === 'width' ? 1 : 0;\n\n var extra = 0;\n\n var delta = 0;\n\n if (box === (isBorderBox ? 'border' : 'content')) {\n return 0;\n }\n\n for (; i < 4; i += 2) {\n if (box === 'margin') {\n delta += SlimJQ.css(elem, box + cssExpand[i], true, styles);\n }\n\n if (!isBorderBox) {\n delta += SlimJQ.css(elem, 'padding' + cssExpand[i], true, styles);\n\n if (box !== 'padding') {\n delta += SlimJQ.css(elem, 'border' + cssExpand[i] + 'Width', true, styles);\n } else {\n extra += SlimJQ.css(elem, 'border' + cssExpand[i] + 'Width', true, styles);\n }\n } else {\n if (box === 'content') {\n delta -= SlimJQ.css(elem, 'padding' + cssExpand[i], true, styles);\n }\n\n if (box !== 'margin') {\n delta -= SlimJQ.css(elem, 'border' + cssExpand[i] + 'Width', true, styles);\n }\n }\n }\n\n if (!isBorderBox && computedVal >= 0) {\n delta += Math.max(0, Math.ceil(elem['offset' + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5));\n }\n\n return delta;\n }\n\n function getWidthOrHeight(elem, dimension, extra) {\n var styles = getStyles(elem);\n\n var val = curCSS(elem, dimension, styles);\n\n var isBorderBox = SlimJQ.css(elem, 'boxSizing', false, styles) === 'border-box';\n\n var valueIsBorderBox = isBorderBox;\n\n if (rnumnonpx.test(val)) {\n if (!extra) {\n return val;\n }\n val = 'auto';\n }\n\n valueIsBorderBox = valueIsBorderBox && (support.boxSizingReliable() || val === elem.style[dimension]);\n\n if (val === 'auto' || !parseFloat(val) && SlimJQ.css(elem, 'display', false, styles) === 'inline') {\n val = elem['offset' + dimension[0].toUpperCase() + dimension.slice(1)];\n\n valueIsBorderBox = true;\n }\n\n val = parseFloat(val) || 0;\n\n return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? 'border' : 'content'), valueIsBorderBox, styles, val) + 'px';\n }\n\n SlimJQ.extend({\n cssHooks: {\n opacity: {\n get: function get(elem, computed) {\n if (computed) {\n var ret = curCSS(elem, 'opacity');\n return ret === '' ? '1' : ret;\n }\n }\n }\n },\n\n cssNumber: {\n animationIterationCount: true,\n columnCount: true,\n fillOpacity: true,\n flexGrow: true,\n flexShrink: true,\n fontWeight: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n widows: true,\n zIndex: true,\n zoom: true\n },\n\n cssProps: {},\n\n style: function style(elem, name, value, extra) {\n if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n return;\n }\n\n var ret;\n\n var type;\n\n var hooks;\n\n var origName = camelCase(name);\n\n var isCustomProp = rcustomProp.test(name);\n\n var style = elem.style;\n\n if (!isCustomProp) {\n name = finalPropName(origName);\n }\n\n hooks = SlimJQ.cssHooks[name] || SlimJQ.cssHooks[origName];\n\n if (value !== undefined) {\n type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\n if (type === 'string' && (ret = rcssNum.exec(value)) && ret[1]) {\n value = adjustCSS(elem, name, ret);\n\n type = 'number';\n }\n\n if (value == null || value !== value) {\n return;\n }\n\n if (type === 'number') {\n value += ret && ret[3] || (SlimJQ.cssNumber[origName] ? '' : 'px');\n }\n\n if (!support.clearCloneStyle && value === '' && name.indexOf('background') === 0) {\n style[name] = 'inherit';\n }\n\n if (!hooks || !('set' in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {\n if (isCustomProp) {\n style.setProperty(name, value);\n } else {\n style[name] = value;\n }\n }\n } else {\n if (hooks && 'get' in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {\n return ret;\n }\n\n return style[name];\n }\n },\n\n css: function css(elem, name, extra, styles) {\n var val;\n\n var num;\n\n var hooks;\n\n var origName = camelCase(name);\n\n var isCustomProp = rcustomProp.test(name);\n\n if (!isCustomProp) {\n name = finalPropName(origName);\n }\n\n hooks = SlimJQ.cssHooks[name] || SlimJQ.cssHooks[origName];\n\n if (hooks && 'get' in hooks) {\n val = hooks.get(elem, true, extra);\n }\n\n if (val === undefined) {\n val = curCSS(elem, name, styles);\n }\n\n if (val === 'normal' && name in cssNormalTransform) {\n val = cssNormalTransform[name];\n }\n\n if (extra === '' || extra) {\n num = parseFloat(val);\n return extra === true || isFinite(num) ? num || 0 : val;\n }\n\n return val;\n }\n });\n\n SlimJQ.each(['height', 'width'], function (i, dimension) {\n SlimJQ.cssHooks[dimension] = {\n get: function get(elem, computed, extra) {\n if (computed) {\n return rdisplayswap.test(SlimJQ.css(elem, 'display')) && (!elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function () {\n return getWidthOrHeight(elem, dimension, extra);\n }) : getWidthOrHeight(elem, dimension, extra);\n }\n },\n\n set: function set(elem, value, extra) {\n var matches;\n\n var styles = getStyles(elem);\n\n var isBorderBox = SlimJQ.css(elem, 'boxSizing', false, styles) === 'border-box';\n\n var subtract = extra && boxModelAdjustment(elem, dimension, extra, isBorderBox, styles);\n\n if (isBorderBox && support.scrollboxSize() === styles.position) {\n subtract -= Math.ceil(elem['offset' + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, 'border', false, styles) - 0.5);\n }\n\n if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || 'px') !== 'px') {\n elem.style[dimension] = value;\n value = SlimJQ.css(elem, dimension);\n }\n\n return setPositiveNumber(elem, value, subtract);\n }\n };\n });\n\n SlimJQ.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) {\n if (computed) {\n return (parseFloat(curCSS(elem, 'marginLeft')) || elem.getBoundingClientRect().left - swap(elem, { marginLeft: 0 }, function () {\n return elem.getBoundingClientRect().left;\n })) + 'px';\n }\n });\n\n SlimJQ.each({\n margin: '',\n padding: '',\n border: 'Width'\n }, function (prefix, suffix) {\n SlimJQ.cssHooks[prefix + suffix] = {\n expand: function expand(value) {\n var i = 0;\n\n var expanded = {};\n\n var parts = typeof value === 'string' ? value.split(' ') : [value];\n\n for (; i < 4; i++) {\n expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];\n }\n\n return expanded;\n }\n };\n\n if (prefix !== 'margin') {\n SlimJQ.cssHooks[prefix + suffix].set = setPositiveNumber;\n }\n });\n\n SlimJQ.fn.extend({\n css: function css(name, value) {\n return access(this, function (elem, name, value) {\n var styles;\n\n var len;\n\n var map = {};\n\n var i = 0;\n\n if (Array.isArray(name)) {\n styles = getStyles(elem);\n len = name.length;\n\n for (; i < len; i++) {\n map[name[i]] = SlimJQ.css(elem, name[i], false, styles);\n }\n\n return map;\n }\n\n return value !== undefined ? SlimJQ.style(elem, name, value) : SlimJQ.css(elem, name);\n }, name, value, arguments.length > 1);\n }\n });\n\n SlimJQ.fn.delay = function (time, type) {\n time = SlimJQ.fx ? SlimJQ.fx.speeds[time] || time : time;\n type = type || 'fx';\n\n return this.queue(type, function (next, hooks) {\n var timeout = window.setTimeout(next, time);\n hooks.stop = function () {\n window.clearTimeout(timeout);\n };\n });\n };(function () {\n var input = document.createElement('input');\n\n var select = document.createElement('select');\n\n var opt = select.appendChild(document.createElement('option'));\n\n input.type = 'checkbox';\n\n support.checkOn = input.value !== '';\n\n support.optSelected = opt.selected;\n\n input = document.createElement('input');\n input.value = 't';\n input.type = 'radio';\n support.radioValue = input.value === 't';\n })();\n\n var boolHook;\n\n var attrHandle = SlimJQ.expr.attrHandle;\n\n SlimJQ.fn.extend({\n attr: function attr(name, value) {\n return access(this, SlimJQ.attr, name, value, arguments.length > 1);\n },\n\n removeAttr: function removeAttr(name) {\n return this.each(function () {\n SlimJQ.removeAttr(this, name);\n });\n }\n });\n\n SlimJQ.extend({\n attr: function attr(elem, name, value) {\n var ret;\n\n var hooks;\n\n var nType = elem.nodeType;\n\n if (nType === 3 || nType === 8 || nType === 2) {\n return;\n }\n\n if (typeof elem.getAttribute === 'undefined') {\n return SlimJQ.prop(elem, name, value);\n }\n\n if (nType !== 1 || !SlimJQ.isXMLDoc(elem)) {\n hooks = SlimJQ.attrHooks[name.toLowerCase()] || (SlimJQ.expr.match.bool.test(name) ? boolHook : undefined);\n }\n\n if (value !== undefined) {\n if (value === null) {\n SlimJQ.removeAttr(elem, name);\n return;\n }\n\n if (hooks && 'set' in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n return ret;\n }\n\n elem.setAttribute(name, value + '');\n return value;\n }\n\n if (hooks && 'get' in hooks && (ret = hooks.get(elem, name)) !== null) {\n return ret;\n }\n\n ret = SlimJQ.find.attr(elem, name);\n\n return ret == null ? undefined : ret;\n },\n\n attrHooks: {\n type: {\n set: function set(elem, value) {\n if (!support.radioValue && value === 'radio' && nodeName(elem, 'input')) {\n var val = elem.value;\n elem.setAttribute('type', value);\n if (val) {\n elem.value = val;\n }\n return value;\n }\n }\n }\n },\n\n removeAttr: function removeAttr(elem, value) {\n var name;\n\n var i = 0;\n\n var attrNames = value && value.match(rnothtmlwhite);\n\n if (attrNames && elem.nodeType === 1) {\n while (name = attrNames[i++]) {\n elem.removeAttribute(name);\n }\n }\n }\n });\n\n boolHook = {\n set: function set(elem, value, name) {\n if (value === false) {\n SlimJQ.removeAttr(elem, name);\n } else {\n elem.setAttribute(name, name);\n }\n return name;\n }\n };\n\n SlimJQ.each(SlimJQ.expr.match.bool.source.match(/\\w+/g), function (i, name) {\n var getter = attrHandle[name] || SlimJQ.find.attr;\n\n attrHandle[name] = function (elem, name, isXML) {\n var ret;\n\n var handle;\n\n var lowercaseName = name.toLowerCase();\n\n if (!isXML) {\n handle = attrHandle[lowercaseName];\n attrHandle[lowercaseName] = ret;\n ret = getter(elem, name, isXML) != null ? lowercaseName : null;\n attrHandle[lowercaseName] = handle;\n }\n return ret;\n };\n });\n\n var rfocusable = /^(?:input|select|textarea|button)$/i;\n\n var rclickable = /^(?:a|area)$/i;\n\n SlimJQ.fn.extend({\n prop: function prop(name, value) {\n return access(this, SlimJQ.prop, name, value, arguments.length > 1);\n },\n\n removeProp: function removeProp(name) {\n return this.each(function () {\n delete this[SlimJQ.propFix[name] || name];\n });\n }\n });\n\n SlimJQ.extend({\n prop: function prop(elem, name, value) {\n var ret;\n\n var hooks;\n\n var nType = elem.nodeType;\n\n if (nType === 3 || nType === 8 || nType === 2) {\n return;\n }\n\n if (nType !== 1 || !SlimJQ.isXMLDoc(elem)) {\n name = SlimJQ.propFix[name] || name;\n hooks = SlimJQ.propHooks[name];\n }\n\n if (value !== undefined) {\n if (hooks && 'set' in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n return ret;\n }\n\n return elem[name] = value;\n }\n\n if (hooks && 'get' in hooks && (ret = hooks.get(elem, name)) !== null) {\n return ret;\n }\n\n return elem[name];\n },\n\n propHooks: {\n tabIndex: {\n get: function get(elem) {\n var tabindex = SlimJQ.find.attr(elem, 'tabindex');\n\n if (tabindex) {\n return parseInt(tabindex, 10);\n }\n\n if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {\n return 0;\n }\n\n return -1;\n }\n }\n },\n\n propFix: {\n for: 'htmlFor',\n class: 'className'\n }\n });\n\n if (!support.optSelected) {\n SlimJQ.propHooks.selected = {\n get: function get(elem) {\n var parent = elem.parentNode;\n if (parent && parent.parentNode) {\n parent.parentNode.selectedIndex;\n }\n return null;\n },\n set: function set(elem) {\n var parent = elem.parentNode;\n if (parent) {\n parent.selectedIndex;\n\n if (parent.parentNode) {\n parent.parentNode.selectedIndex;\n }\n }\n }\n };\n }\n\n SlimJQ.each(['tabIndex', 'readOnly', 'maxLength', 'cellSpacing', 'cellPadding', 'rowSpan', 'colSpan', 'useMap', 'frameBorder', 'contentEditable'], function () {\n SlimJQ.propFix[this.toLowerCase()] = this;\n });\n\n function stripAndCollapse(value) {\n var tokens = value.match(rnothtmlwhite) || [];\n return tokens.join(' ');\n }\n\n function getClass(elem) {\n return elem.getAttribute && elem.getAttribute('class') || '';\n }\n\n function classesToArray(value) {\n if (Array.isArray(value)) {\n return value;\n }\n if (typeof value === 'string') {\n return value.match(rnothtmlwhite) || [];\n }\n return [];\n }\n\n SlimJQ.fn.extend({\n addClass: function addClass(value) {\n var classes;\n\n var elem;\n\n var cur;\n\n var curValue;\n\n var clazz;\n\n var j;\n\n var finalValue;\n\n var i = 0;\n\n if (isFunction(value)) {\n return this.each(function (j) {\n SlimJQ(this).addClass(value.call(this, j, getClass(this)));\n });\n }\n\n classes = classesToArray(value);\n\n if (classes.length) {\n while (elem = this[i++]) {\n curValue = getClass(elem);\n cur = elem.nodeType === 1 && ' ' + stripAndCollapse(curValue) + ' ';\n\n if (cur) {\n j = 0;\n while (clazz = classes[j++]) {\n if (cur.indexOf(' ' + clazz + ' ') < 0) {\n cur += clazz + ' ';\n }\n }\n\n finalValue = stripAndCollapse(cur);\n if (curValue !== finalValue) {\n elem.setAttribute('class', finalValue);\n }\n }\n }\n }\n\n return this;\n },\n\n removeClass: function removeClass(value) {\n var classes;\n\n var elem;\n\n var cur;\n\n var curValue;\n\n var clazz;\n\n var j;\n\n var finalValue;\n\n var i = 0;\n\n if (isFunction(value)) {\n return this.each(function (j) {\n SlimJQ(this).removeClass(value.call(this, j, getClass(this)));\n });\n }\n\n if (!arguments.length) {\n return this.attr('class', '');\n }\n\n classes = classesToArray(value);\n\n if (classes.length) {\n while (elem = this[i++]) {\n curValue = getClass(elem);\n\n cur = elem.nodeType === 1 && ' ' + stripAndCollapse(curValue) + ' ';\n\n if (cur) {\n j = 0;\n while (clazz = classes[j++]) {\n while (cur.indexOf(' ' + clazz + ' ') > -1) {\n cur = cur.replace(' ' + clazz + ' ', ' ');\n }\n }\n\n finalValue = stripAndCollapse(cur);\n if (curValue !== finalValue) {\n elem.setAttribute('class', finalValue);\n }\n }\n }\n }\n\n return this;\n },\n\n toggleClass: function toggleClass(value, stateVal) {\n var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\n var isValidValue = type === 'string' || Array.isArray(value);\n\n if (typeof stateVal === 'boolean' && isValidValue) {\n return stateVal ? this.addClass(value) : this.removeClass(value);\n }\n\n if (isFunction(value)) {\n return this.each(function (i) {\n SlimJQ(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);\n });\n }\n\n return this.each(function () {\n var className, i, self, classNames;\n\n if (isValidValue) {\n i = 0;\n self = SlimJQ(this);\n classNames = classesToArray(value);\n\n while (className = classNames[i++]) {\n if (self.hasClass(className)) {\n self.removeClass(className);\n } else {\n self.addClass(className);\n }\n }\n } else if (value === undefined || type === 'boolean') {\n className = getClass(this);\n if (className) {\n dataPriv.set(this, '__className__', className);\n }\n\n if (this.setAttribute) {\n this.setAttribute('class', className || value === false ? '' : dataPriv.get(this, '__className__') || '');\n }\n }\n });\n },\n\n hasClass: function hasClass(selector) {\n var className;\n\n var elem;\n\n var i = 0;\n\n className = ' ' + selector + ' ';\n while (elem = this[i++]) {\n if (elem.nodeType === 1 && (' ' + stripAndCollapse(getClass(elem)) + ' ').indexOf(className) > -1) {\n return true;\n }\n }\n\n return false;\n }\n });\n\n var rreturn = /\\r/g;\n\n SlimJQ.fn.extend({\n val: function val(value) {\n var hooks;\n\n var ret;\n\n var valueIsFunction;\n\n var elem = this[0];\n\n if (!arguments.length) {\n if (elem) {\n hooks = SlimJQ.valHooks[elem.type] || SlimJQ.valHooks[elem.nodeName.toLowerCase()];\n\n if (hooks && 'get' in hooks && (ret = hooks.get(elem, 'value')) !== undefined) {\n return ret;\n }\n\n ret = elem.value;\n\n if (typeof ret === 'string') {\n return ret.replace(rreturn, '');\n }\n\n return ret == null ? '' : ret;\n }\n\n return;\n }\n\n valueIsFunction = isFunction(value);\n\n return this.each(function (i) {\n var val;\n\n if (this.nodeType !== 1) {\n return;\n }\n\n if (valueIsFunction) {\n val = value.call(this, i, SlimJQ(this).val());\n } else {\n val = value;\n }\n\n if (val == null) {\n val = '';\n } else if (typeof val === 'number') {\n val += '';\n } else if (Array.isArray(val)) {\n val = SlimJQ.map(val, function (value) {\n return value == null ? '' : value + '';\n });\n }\n\n hooks = SlimJQ.valHooks[this.type] || SlimJQ.valHooks[this.nodeName.toLowerCase()];\n\n if (!hooks || !('set' in hooks) || hooks.set(this, val, 'value') === undefined) {\n this.value = val;\n }\n });\n }\n });\n\n SlimJQ.extend({\n valHooks: {\n option: {\n get: function get(elem) {\n var val = SlimJQ.find.attr(elem, 'value');\n return val != null ? val : stripAndCollapse(SlimJQ.text(elem));\n }\n },\n select: {\n get: function get(elem) {\n var value;\n\n var option;\n\n var i;\n\n var options = elem.options;\n\n var index = elem.selectedIndex;\n\n var one = elem.type === 'select-one';\n\n var values = one ? null : [];\n\n var max = one ? index + 1 : options.length;\n\n if (index < 0) {\n i = max;\n } else {\n i = one ? index : 0;\n }\n\n for (; i < max; i++) {\n option = options[i];\n\n if ((option.selected || i === index) && !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, 'optgroup'))) {\n value = SlimJQ(option).val();\n\n if (one) {\n return value;\n }\n\n values.push(value);\n }\n }\n\n return values;\n },\n\n set: function set(elem, value) {\n var optionSet;\n\n var option;\n\n var options = elem.options;\n\n var values = SlimJQ.makeArray(value);\n\n var i = options.length;\n\n while (i--) {\n option = options[i];\n\n if (option.selected = SlimJQ.inArray(SlimJQ.valHooks.option.get(option), values) > -1) {\n optionSet = true;\n }\n }\n\n if (!optionSet) {\n elem.selectedIndex = -1;\n }\n return values;\n }\n }\n }\n });\n\n SlimJQ.each(['radio', 'checkbox'], function () {\n SlimJQ.valHooks[this] = {\n set: function set(elem, value) {\n if (Array.isArray(value)) {\n return elem.checked = SlimJQ.inArray(SlimJQ(elem).val(), value) > -1;\n }\n }\n };\n if (!support.checkOn) {\n SlimJQ.valHooks[this].get = function (elem) {\n return elem.getAttribute('value') === null ? 'on' : elem.value;\n };\n }\n });\n\n support.focusin = 'onfocusin' in window;\n\n var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\n var stopPropagationCallback = function stopPropagationCallback(e) {\n e.stopPropagation();\n };\n\n SlimJQ.extend(SlimJQ.event, {\n trigger: function trigger(event, data, elem, onlyHandlers) {\n var i;\n\n var cur;\n\n var tmp;\n\n var bubbleType;\n\n var ontype;\n\n var handle;\n\n var special;\n\n var lastElement;\n\n var eventPath = [elem || document];\n\n var type = hasOwn.call(event, 'type') ? event.type : event;\n\n var namespaces = hasOwn.call(event, 'namespace') ? event.namespace.split('.') : [];\n\n cur = lastElement = tmp = elem = elem || document;\n\n if (elem.nodeType === 3 || elem.nodeType === 8) {\n return;\n }\n\n if (rfocusMorph.test(type + SlimJQ.event.triggered)) {\n return;\n }\n\n if (type.indexOf('.') > -1) {\n namespaces = type.split('.');\n type = namespaces.shift();\n namespaces.sort();\n }\n ontype = type.indexOf(':') < 0 && 'on' + type;\n\n event = event[SlimJQ.expando] ? event : new SlimJQ.Event(type, (typeof event === 'undefined' ? 'undefined' : _typeof(event)) === 'object' && event);\n\n event.isTrigger = onlyHandlers ? 2 : 3;\n event.namespace = namespaces.join('.');\n event.rnamespace = event.namespace ? new RegExp('(^|\\\\.)' + namespaces.join('\\\\.(?:.*\\\\.|)') + '(\\\\.|$)') : null;\n\n event.result = undefined;\n if (!event.target) {\n event.target = elem;\n }\n\n data = data == null ? [event] : SlimJQ.makeArray(data, [event]);\n\n special = SlimJQ.event.special[type] || {};\n if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n return;\n }\n\n if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n bubbleType = special.delegateType || type;\n if (!rfocusMorph.test(bubbleType + type)) {\n cur = cur.parentNode;\n }\n for (; cur; cur = cur.parentNode) {\n eventPath.push(cur);\n tmp = cur;\n }\n\n if (tmp === (elem.ownerDocument || document)) {\n eventPath.push(tmp.defaultView || tmp.parentWindow || window);\n }\n }\n\n i = 0;\n while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n lastElement = cur;\n event.type = i > 1 ? bubbleType : special.bindType || type;\n\n handle = (dataPriv.get(cur, 'events') || {})[event.type] && dataPriv.get(cur, 'handle');\n if (handle) {\n handle.apply(cur, data);\n }\n\n handle = ontype && cur[ontype];\n if (handle && handle.apply && acceptData(cur)) {\n event.result = handle.apply(cur, data);\n if (event.result === false) {\n event.preventDefault();\n }\n }\n }\n event.type = type;\n\n if (!onlyHandlers && !event.isDefaultPrevented()) {\n if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {\n if (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n tmp = elem[ontype];\n\n if (tmp) {\n elem[ontype] = null;\n }\n\n SlimJQ.event.triggered = type;\n\n if (event.isPropagationStopped()) {\n lastElement.addEventListener(type, stopPropagationCallback);\n }\n\n elem[type]();\n\n if (event.isPropagationStopped()) {\n lastElement.removeEventListener(type, stopPropagationCallback);\n }\n\n SlimJQ.event.triggered = undefined;\n\n if (tmp) {\n elem[ontype] = tmp;\n }\n }\n }\n }\n\n return event.result;\n },\n\n simulate: function simulate(type, elem, event) {\n var e = SlimJQ.extend(new SlimJQ.Event(), event, {\n type: type,\n isSimulated: true\n });\n\n SlimJQ.event.trigger(e, null, elem);\n }\n });\n\n SlimJQ.fn.extend({\n trigger: function trigger(type, data) {\n return this.each(function () {\n SlimJQ.event.trigger(type, data, this);\n });\n },\n triggerHandler: function triggerHandler(type, data) {\n var elem = this[0];\n if (elem) {\n return SlimJQ.event.trigger(type, data, elem, true);\n }\n }\n });\n\n if (!support.focusin) {\n SlimJQ.each({ focus: 'focusin', blur: 'focusout' }, function (orig, fix) {\n var handler = function handler(event) {\n SlimJQ.event.simulate(fix, event.target, SlimJQ.event.fix(event));\n };\n\n SlimJQ.event.special[fix] = {\n setup: function setup() {\n var doc = this.ownerDocument || this;\n\n var attaches = dataPriv.access(doc, fix);\n\n if (!attaches) {\n doc.addEventListener(orig, handler, true);\n }\n dataPriv.access(doc, fix, (attaches || 0) + 1);\n },\n teardown: function teardown() {\n var doc = this.ownerDocument || this;\n\n var attaches = dataPriv.access(doc, fix) - 1;\n\n if (!attaches) {\n doc.removeEventListener(orig, handler, true);\n dataPriv.remove(doc, fix);\n } else {\n dataPriv.access(doc, fix, attaches);\n }\n }\n };\n });\n }\n\n var rbracket = /\\[\\]$/;\n\n var rCRLF = /\\r?\\n/g;\n\n var rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i;\n\n var rsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n function buildParams(prefix, obj, traditional, add) {\n var name;\n\n if (Array.isArray(obj)) {\n SlimJQ.each(obj, function (i, v) {\n if (traditional || rbracket.test(prefix)) {\n add(prefix, v);\n } else {\n buildParams(prefix + '[' + ((typeof v === 'undefined' ? 'undefined' : _typeof(v)) === 'object' && v != null ? i : '') + ']', v, traditional, add);\n }\n });\n } else if (!traditional && toType(obj) === 'object') {\n for (name in obj) {\n buildParams(prefix + '[' + name + ']', obj[name], traditional, add);\n }\n } else {\n add(prefix, obj);\n }\n }\n\n SlimJQ.param = function (a, traditional) {\n var prefix;\n\n var s = [];\n\n var add = function add(key, valueOrFunction) {\n var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;\n\n s[s.length] = encodeURIComponent(key) + '=' + encodeURIComponent(value == null ? '' : value);\n };\n\n if (Array.isArray(a) || a.slimJQ && !SlimJQ.isPlainObject(a)) {\n SlimJQ.each(a, function () {\n add(this.name, this.value);\n });\n } else {\n for (prefix in a) {\n buildParams(prefix, a[prefix], traditional, add);\n }\n }\n\n return s.join('&');\n };\n\n SlimJQ.fn.extend({\n serialize: function serialize() {\n return SlimJQ.param(this.serializeArray());\n },\n serializeArray: function serializeArray() {\n return this.map(function () {\n var elements = SlimJQ.prop(this, 'elements');\n return elements ? SlimJQ.makeArray(elements) : this;\n }).filter(function () {\n var type = this.type;\n\n return this.name && !SlimJQ(this).is(':disabled') && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));\n }).map(function (i, elem) {\n var val = SlimJQ(this).val();\n\n if (val == null) {\n return null;\n }\n\n if (Array.isArray(val)) {\n return SlimJQ.map(val, function (val) {\n return { name: elem.name, value: val.replace(rCRLF, '\\r\\n') };\n });\n }\n\n return { name: elem.name, value: val.replace(rCRLF, '\\r\\n') };\n }).get();\n }\n });\n\n SlimJQ.fn.extend({\n wrapAll: function wrapAll(html) {\n var wrap;\n\n if (this[0]) {\n if (isFunction(html)) {\n html = html.call(this[0]);\n }\n\n wrap = SlimJQ(html, this[0].ownerDocument).eq(0).clone(true);\n\n if (this[0].parentNode) {\n wrap.insertBefore(this[0]);\n }\n\n wrap.map(function () {\n var elem = this;\n\n while (elem.firstElementChild) {\n elem = elem.firstElementChild;\n }\n\n return elem;\n }).append(this);\n }\n\n return this;\n },\n\n wrapInner: function wrapInner(html) {\n if (isFunction(html)) {\n return this.each(function (i) {\n SlimJQ(this).wrapInner(html.call(this, i));\n });\n }\n\n return this.each(function () {\n var self = SlimJQ(this);\n\n var contents = self.contents();\n\n if (contents.length) {\n contents.wrapAll(html);\n } else {\n self.append(html);\n }\n });\n },\n\n wrap: function wrap(html) {\n var htmlIsFunction = isFunction(html);\n\n return this.each(function (i) {\n SlimJQ(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n });\n },\n\n unwrap: function unwrap(selector) {\n this.parent(selector).not('body').each(function () {\n SlimJQ(this).replaceWith(this.childNodes);\n });\n return this;\n }\n });\n\n SlimJQ.expr.pseudos.hidden = function (elem) {\n return !SlimJQ.expr.pseudos.visible(elem);\n };\n SlimJQ.expr.pseudos.visible = function (elem) {\n return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n };\n\n support.createHTMLDocument = function () {\n var body = document.implementation.createHTMLDocument('').body;\n body.innerHTML = '
';\n return body.childNodes.length === 2;\n }();\n\n SlimJQ.parseHTML = function (data, context, keepScripts) {\n if (typeof data !== 'string') {\n return [];\n }\n if (typeof context === 'boolean') {\n keepScripts = context;\n context = false;\n }\n\n var base, parsed, scripts;\n\n if (!context) {\n if (support.createHTMLDocument) {\n context = document.implementation.createHTMLDocument('');\n\n base = context.createElement('base');\n base.href = document.location.href;\n context.head.appendChild(base);\n } else {\n context = document;\n }\n }\n\n parsed = rsingleTag.exec(data);\n scripts = !keepScripts && [];\n\n if (parsed) {\n return [context.createElement(parsed[1])];\n }\n\n parsed = buildFragment([data], context, scripts);\n\n if (scripts && scripts.length) {\n SlimJQ(scripts).remove();\n }\n\n return SlimJQ.merge([], parsed.childNodes);\n };\n\n SlimJQ.offset = {\n setOffset: function setOffset(elem, options, i) {\n var curPosition;\n\n var curLeft;\n\n var curCSSTop;\n\n var curTop;\n\n var curOffset;\n\n var curCSSLeft;\n\n var calculatePosition;\n\n var position = SlimJQ.css(elem, 'position');\n\n var curElem = SlimJQ(elem);\n\n var props = {};\n\n if (position === 'static') {\n elem.style.position = 'relative';\n }\n\n curOffset = curElem.offset();\n curCSSTop = SlimJQ.css(elem, 'top');\n curCSSLeft = SlimJQ.css(elem, 'left');\n calculatePosition = (position === 'absolute' || position === 'fixed') && (curCSSTop + curCSSLeft).indexOf('auto') > -1;\n if (calculatePosition) {\n curPosition = curElem.position();\n curTop = curPosition.top;\n curLeft = curPosition.left;\n } else {\n curTop = parseFloat(curCSSTop) || 0;\n curLeft = parseFloat(curCSSLeft) || 0;\n }\n\n if (isFunction(options)) {\n options = options.call(elem, i, SlimJQ.extend({}, curOffset));\n }\n\n if (options.top != null) {\n props.top = options.top - curOffset.top + curTop;\n }\n if (options.left != null) {\n props.left = options.left - curOffset.left + curLeft;\n }\n\n if ('using' in options) {\n options.using.call(elem, props);\n } else {\n curElem.css(props);\n }\n }\n };\n\n SlimJQ.fn.extend({\n offset: function offset(options) {\n if (arguments.length) {\n return options === undefined ? this : this.each(function (i) {\n SlimJQ.offset.setOffset(this, options, i);\n });\n }\n\n var rect;\n\n var win;\n\n var elem = this[0];\n\n if (!elem) {\n return;\n }\n\n if (!elem.getClientRects().length) {\n return { top: 0, left: 0 };\n }\n\n rect = elem.getBoundingClientRect();\n win = elem.ownerDocument.defaultView;\n return {\n top: rect.top + win.pageYOffset,\n left: rect.left + win.pageXOffset\n };\n },\n\n position: function position() {\n if (!this[0]) {\n return;\n }\n\n var offsetParent;\n\n var offset;\n\n var doc;\n\n var elem = this[0];\n\n var parentOffset = { top: 0, left: 0 };\n\n if (SlimJQ.css(elem, 'position') === 'fixed') {\n offset = elem.getBoundingClientRect();\n } else {\n offset = this.offset();\n doc = elem.ownerDocument;\n offsetParent = elem.offsetParent || doc.documentElement;\n while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && SlimJQ.css(offsetParent, 'position') === 'static') {\n offsetParent = offsetParent.parentNode;\n }\n if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n parentOffset = SlimJQ(offsetParent).offset();\n parentOffset.top += SlimJQ.css(offsetParent, 'borderTopWidth', true);\n parentOffset.left += SlimJQ.css(offsetParent, 'borderLeftWidth', true);\n }\n }\n\n return {\n top: offset.top - parentOffset.top - SlimJQ.css(elem, 'marginTop', true),\n left: offset.left - parentOffset.left - SlimJQ.css(elem, 'marginLeft', true)\n };\n },\n\n offsetParent: function offsetParent() {\n return this.map(function () {\n var offsetParent = this.offsetParent;\n\n while (offsetParent && SlimJQ.css(offsetParent, 'position') === 'static') {\n offsetParent = offsetParent.offsetParent;\n }\n\n return offsetParent || documentElement;\n });\n }\n });\n\n SlimJQ.each({ scrollLeft: 'pageXOffset', scrollTop: 'pageYOffset' }, function (method, prop) {\n var top = prop === 'pageYOffset';\n\n SlimJQ.fn[method] = function (val) {\n return access(this, function (elem, method, val) {\n var win;\n if (isWindow(elem)) {\n win = elem;\n } else if (elem.nodeType === 9) {\n win = elem.defaultView;\n }\n\n if (val === undefined) {\n return win ? win[prop] : elem[method];\n }\n\n if (win) {\n win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset);\n } else {\n elem[method] = val;\n }\n }, method, val, arguments.length);\n };\n });\n\n SlimJQ.each(['top', 'left'], function (i, prop) {\n SlimJQ.cssHooks[prop] = addGetHookIf(support.pixelPosition, function (elem, computed) {\n if (computed) {\n computed = curCSS(elem, prop);\n return rnumnonpx.test(computed) ? SlimJQ(elem).position()[prop] + 'px' : computed;\n }\n });\n });\n\n SlimJQ.each({ Height: 'height', Width: 'width' }, function (name, type) {\n SlimJQ.each({ padding: 'inner' + name, content: type, '': 'outer' + name }, function (defaultExtra, funcName) {\n SlimJQ.fn[funcName] = function (margin, value) {\n var chainable = arguments.length && (defaultExtra || typeof margin !== 'boolean');\n\n var extra = defaultExtra || (margin === true || value === true ? 'margin' : 'border');\n\n return access(this, function (elem, type, value) {\n var doc;\n\n if (isWindow(elem)) {\n return funcName.indexOf('outer') === 0 ? elem['inner' + name] : elem.document.documentElement['client' + name];\n }\n\n if (elem.nodeType === 9) {\n doc = elem.documentElement;\n return Math.max(elem.body['scroll' + name], doc['scroll' + name], elem.body['offset' + name], doc['offset' + name], doc['client' + name]);\n }\n\n return value === undefined ? SlimJQ.css(elem, type, extra) : SlimJQ.style(elem, type, value, extra);\n }, type, chainable ? margin : undefined, chainable);\n };\n });\n });\n\n SlimJQ.each(('blur focus focusin focusout resize scroll click dblclick ' + 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave ' + 'change select submit keydown keypress keyup contextmenu').split(' '), function (i, name) {\n SlimJQ.fn[name] = function (data, fn) {\n return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);\n };\n });\n\n SlimJQ.fn.extend({\n hover: function hover(fnOver, fnOut) {\n return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n }\n });\n\n SlimJQ.fn.extend({\n bind: function bind(types, data, fn) {\n return this.on(types, null, data, fn);\n },\n unbind: function unbind(types, fn) {\n return this.off(types, null, fn);\n },\n\n delegate: function delegate(selector, types, data, fn) {\n return this.on(types, selector, data, fn);\n },\n undelegate: function undelegate(selector, types, fn) {\n return arguments.length === 1 ? this.off(selector, '**') : this.off(types, selector || '**', fn);\n }\n });\n\n SlimJQ.proxy = function (fn, context) {\n var tmp, args, proxy;\n\n if (typeof context === 'string') {\n tmp = fn[context];\n context = fn;\n fn = tmp;\n }\n\n if (!isFunction(fn)) {\n return undefined;\n }\n\n args = _slice.call(arguments, 2);\n proxy = function proxy() {\n return fn.apply(context || this, args.concat(_slice.call(arguments)));\n };\n\n proxy.guid = fn.guid = fn.guid || SlimJQ.guid++;\n\n return proxy;\n };\n\n SlimJQ.holdReady = function (hold) {\n if (hold) {\n SlimJQ.readyWait++;\n } else {\n SlimJQ.ready(true);\n }\n };\n SlimJQ.isArray = Array.isArray;\n SlimJQ.parseJSON = JSON.parse;\n SlimJQ.nodeName = nodeName;\n SlimJQ.isFunction = isFunction;\n SlimJQ.isWindow = isWindow;\n SlimJQ.camelCase = camelCase;\n SlimJQ.type = toType;\n\n SlimJQ.now = Date.now;\n\n SlimJQ.isNumeric = function (obj) {\n var type = SlimJQ.type(obj);\n return (type === 'number' || type === 'string') && !isNaN(obj - parseFloat(obj));\n };\n\n return SlimJQ;\n};\n\n// SlimJQ.fn.button = function(e) {\n// if (typeof e === 'string') {\n// if (e === 'disable') {\n// SlimJQ(this).addClass('disabled')\n// SlimJQ(this)\n// .find('input')\n// .attr('disabled', true)\n// } else {\n// if (e === 'enable') {\n// SlimJQ(this).removeClass('disabled')\n// SlimJQ(this)\n// .find('input')\n// .attr('disabled', false)\n// } else {\n// if (e === 'isDisabled') {\n// return SlimJQ(this).hasClass('disabled')\n// } else {\n// if (e === 'isSelected') {\n// return SlimJQ(this).hasClass('selected')\n// } else {\n// if (e === 'unselect') {\n// SlimJQ(this).removeClass('selected')\n// } else {\n// if (e === 'select') {\n// SlimJQ(this).addClass('selected')\n// } else {\n// if (e === 'setText') {\n// SlimJQ(this)\n// .children('.text_content')\n// .html(arguments[1])\n// } else {\n// if (e === 'setColor') {\n// SlimJQ(this)\n// .children('.btn_color')\n// .css('background-color', 'rgb(' + arguments[1] + ')')\n// } else {\n// if (e === 'getColor') {\n// var d = SlimJQ(this)\n// .children('.btn_color')\n// .css('background-color')\n// .replace(/\\s/g, '')\n// return d.substring(4, d.length - 1)\n// }\n// }\n// }\n// }\n// }\n// }\n// }\n// }\n// }\n// return SlimJQ(this)\n// }\n// var f = SlimJQ(this)\n// f.unbind('click')\n// f.unbind('mousedown')\n// if (e.onClick) {\n// f.bind('click', function() {\n// if (f.button('isDisabled')) {\n// return\n// }\n// e.onClick()\n// })\n// }\n// if (e.onMousedown) {\n// f.bind('mousedown', function(g) {\n// if (f.button('isDisabled')) {\n// return\n// }\n// e.onMousedown()\n// g.stopPropagation()\n// })\n// }\n// }\n\n// var b = null\n\n// SlimJQ.fn.dropdown = function(e) {\n// var i = SlimJQ(this)\n// if (typeof e === 'string') {\n// if (e === 'close') {\n// i.hide()\n// b.target.removeClass('selected')\n// SlimJQ(document).unbind('mousedown.ui_dropdown')\n// b = null\n// } else {\n// if (e === 'select') {\n// arguments[1].prepend(\"
\")\n// }\n// }\n// return\n// }\n// i.find('.ico_selected').remove()\n// if (b != null) {\n// b.menu.dropdown('close')\n// }\n// var i = SlimJQ(this)\n// var d = e.target\n// b = { target: d, menu: i }\n// var h = d.offset()\n// d.addClass('selected')\n// i.show()\n// var g\n// if (e.position === 'center') {\n// g = h.left + d.outerWidth() / 2 - i.outerWidth() / 2\n// } else {\n// if (e.position === 'right') {\n// g = h.left + d.outerWidth() - i.outerWidth()\n// } else {\n// g = h.left\n// }\n// }\n// var f = h.top + d.outerHeight()\n// if (f + i.outerHeight() > SlimJQ(window).height()) {\n// f = SlimJQ(window).height() - i.outerHeight()\n// }\n// i.css({ top: f, left: g })\n// if (typeof e.zindex !== 'undefined') {\n// i.css('z-index', e.zindex)\n// }\n// i.unbind('mousedown').bind('mousedown', function(j) {\n// j.stopPropagation()\n// })\n// if (typeof e.bind === 'undefined' || e.bind === true) {\n// i.find('li:not(.devider,.menu_text)')\n// .unbind()\n// .bind('click', function() {\n// var j = SlimJQ(this)\n// if (\n// !j.menuitem('isDisabled') &&\n// j.children('.extend_menu').length === 0\n// ) {\n// if (e.onSelect) {\n// e.onSelect(j)\n// }\n// i.dropdown('close')\n// }\n// })\n// }\n// SlimJQ(document).bind('mousedown.ui_dropdown', function() {\n// i.dropdown('close')\n// })\n// }\n// SlimJQ.colorpicker = function(e) {\n// var d = SlimJQ('#color_picker')\n// d.find('.selected').removeClass('selected')\n// if (!d.attr('init')) {\n// d.find('div').each(function() {\n// var g = SlimJQ(this).css('background-color')\n// g = g.replace(/\\s/g, '')\n// g = g.substring(4, g.length - 1)\n// SlimJQ(this).attr('col', g)\n// })\n// d.attr('init', true)\n// }\n// var f = SlimJQ.extend({}, e, { bind: false })\n// d.dropdown(f)\n// d.children('.color_items')\n// .children('div')\n// .unbind()\n// .bind('click', function() {\n// if (e.onSelect) {\n// var g = SlimJQ(this).css('background-color')\n// g = g.replace(/\\s/g, '')\n// g = g.substring(4, g.length - 1)\n// e.onSelect(g)\n// }\n// SlimJQ('#color_picker').dropdown('close')\n// })\n// if (e.color) {\n// d.find(\"div[col='\" + e.color + \"']\").addClass('selected')\n// }\n// SlimJQ('#color_picker')\n// .children('.color_extend')\n// .remove()\n// if (e.extend) {\n// SlimJQ('#color_picker').append(\n// \"
\" + e.extend + '
'\n// )\n// }\n// }\n// SlimJQ.fn.colorButton = function(e) {\n// var d = SlimJQ(this)\n// if (typeof e === 'string') {\n// if (e === 'setColor') {\n// d.children('.picker_btn_holder').css(\n// 'background-color',\n// 'rgb(' + arguments[1] + ')'\n// )\n// }\n// return\n// }\n// d.html(\n// \"
\"\n// )\n// d.bind('mousedown', function(h) {\n// if (d.button('isDisabled')) {\n// return\n// }\n// h.stopPropagation()\n// var g = SlimJQ.extend({}, e)\n// g.target = d\n// g.onSelect = function(i) {\n// d.colorButton('setColor', i)\n// if (e.onSelect) {\n// e.onSelect(i)\n// }\n// }\n// var f = SlimJQ(this)\n// .children('.picker_btn_holder')\n// .css('background-color')\n// f = f.replace(/\\s/g, '')\n// f = f.substring(4, f.length - 1)\n// g.color = f\n// SlimJQ.colorpicker(g)\n// })\n// }\n// SlimJQ.fn.spinner = function(g) {\n// var i = SlimJQ(this)\n// if (typeof g === 'string') {\n// if (g === 'getValue') {\n// var d = i.find('input').val()\n// d = parseFloat(d)\n// return d\n// } else {\n// if (g === 'setValue') {\n// i.find('input').val(arguments[1])\n// i.attr('old', arguments[1])\n// }\n// }\n// return\n// }\n// i.html(\n// \"
\"\n// )\n// var h = { min: 0, max: Number.MAX_VALUE, step: 1, unit: '' }\n// g = SlimJQ.extend(h, g)\n// var e = i.children('.spinner_input')\n// var f = e.find('input')\n// i.spinner('setValue', g.min + g.unit)\n// i.find('.spinner_up').bind('click', function() {\n// if (i.button('isDisabled')) {\n// return\n// }\n// var k = i.spinner('getValue')\n// var j = k + g.step\n// a(i, j, g)\n// })\n// i.find('.spinner_down').bind('click', function() {\n// if (i.button('isDisabled')) {\n// return\n// }\n// var k = i.spinner('getValue')\n// var j = k - g.step\n// a(i, j, g)\n// })\n// f.bind('keydown', function(k) {\n// if (k.keyCode === 13) {\n// var j = parseInt(SlimJQ(this).val())\n// if (isNaN(j)) {\n// j = g.min\n// }\n// a(i, j, g)\n// }\n// })\n// .bind('focus', function(k) {\n// SlimJQ(this).select()\n// SlimJQ(this).bind('mouseup', function(l) {\n// l.preventDefault()\n// SlimJQ(this).unbind('mouseup')\n// })\n// var j = SlimJQ(this)\n// .parent()\n// .parent()\n// if (!j.hasClass('active')) {\n// j.addClass('active inset')\n// }\n// })\n// .bind('blur', function(k) {\n// var j = SlimJQ(this)\n// .parent()\n// .parent()\n// if (j.hasClass('inset')) {\n// j.removeClass('active inset')\n// }\n// })\n// }\n\n// function a(h, f, e) {\n// if (f > e.max) {\n// f = e.max\n// }\n// if (f < e.min) {\n// f = e.min\n// }\n// var d = h.attr('old')\n// var g = f + e.unit\n// if (d !== g) {\n// if (e.onChange) {\n// e.onChange(f)\n// }\n// }\n// h.spinner('setValue', f + e.unit)\n// }\n\n// SlimJQ.fn.menuitem = function(d) {\n// var e = SlimJQ(this)\n// if (typeof d === 'string') {\n// if (d === 'disable') {\n// e.addClass('disabled')\n// } else {\n// if (d === 'enable') {\n// e.removeClass('disabled')\n// } else {\n// if (d === 'isDisabled') {\n// return e.hasClass('disabled')\n// } else {\n// if (d === 'isSelected') {\n// return e.children('.ico_selected').length > 0\n// } else {\n// if (d === 'unselect') {\n// return e.children('.ico_selected').remove()\n// } else {\n// if (d === 'select') {\n// return e.prepend(\"
\")\n// }\n// }\n// }\n// }\n// }\n// }\n// }\n// }\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (SlimJQ());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvdXRpbHMvc2xpbUpRLmpzPzE3MTQiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgU2xpbUpRID0gZnVuY3Rpb24oKSB7XHJcbiAgdmFyIGFyciA9IFtdXHJcblxyXG4gIHZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudFxyXG5cclxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2ZcclxuXHJcbiAgdmFyIHNsaWNlID0gYXJyLnNsaWNlXHJcblxyXG4gIHZhciBjb25jYXQgPSBhcnIuY29uY2F0XHJcblxyXG4gIHZhciBwdXNoID0gYXJyLnB1c2hcclxuXHJcbiAgdmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZlxyXG5cclxuICB2YXIgY2xhc3MydHlwZSA9IHt9XHJcblxyXG4gIHZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmdcclxuXHJcbiAgdmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHlcclxuXHJcbiAgdmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmdcclxuXHJcbiAgdmFyIE9iamVjdEZ1bmN0aW9uU3RyaW5nID0gZm5Ub1N0cmluZy5jYWxsKE9iamVjdClcclxuXHJcbiAgdmFyIHN1cHBvcnQgPSB7fVxyXG5cclxuICB2YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24ob2JqKSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSAnbnVtYmVyJ1xyXG4gIH1cclxuXHJcbiAgdmFyIGlzV2luZG93ID0gZnVuY3Rpb24gaXNXaW5kb3cob2JqKSB7XHJcbiAgICByZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93XHJcbiAgfVxyXG5cclxuICB2YXIgcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyA9IHtcclxuICAgIHR5cGU6IHRydWUsXHJcbiAgICBzcmM6IHRydWUsXHJcbiAgICBub01vZHVsZTogdHJ1ZVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gRE9NRXZhbChjb2RlLCBkb2MsIG5vZGUpIHtcclxuICAgIGRvYyA9IGRvYyB8fCBkb2N1bWVudFxyXG5cclxuICAgIHZhciBpXHJcblxyXG4gICAgdmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKVxyXG5cclxuICAgIHNjcmlwdC50ZXh0ID0gY29kZVxyXG4gICAgaWYgKG5vZGUpIHtcclxuICAgICAgZm9yIChpIGluIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMpIHtcclxuICAgICAgICBpZiAobm9kZVtpXSkge1xyXG4gICAgICAgICAgc2NyaXB0W2ldID0gbm9kZVtpXVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZG9jLmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdClcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHRvVHlwZShvYmopIHtcclxuICAgIGlmIChvYmogPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gb2JqICsgJydcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJ1xyXG4gICAgICA/IGNsYXNzMnR5cGVbdG9TdHJpbmcuY2FsbChvYmopXSB8fCAnb2JqZWN0J1xyXG4gICAgICA6IHR5cGVvZiBvYmpcclxuICB9XHJcbiAgdmFyIHZlcnNpb24gPSAnMy4zLjEnXHJcblxyXG4gIHZhciBTbGltSlEgPSBmdW5jdGlvbihzZWxlY3RvciwgY29udGV4dCkge1xyXG4gICAgcmV0dXJuIG5ldyBTbGltSlEuZm4uSW5pdChzZWxlY3RvciwgY29udGV4dClcclxuICB9XHJcblxyXG4gIHZhciBydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZ1xyXG5cclxuICBTbGltSlEuZm4gPSBTbGltSlEucHJvdG90eXBlID0ge1xyXG4gICAgc2xpbUpROiB2ZXJzaW9uLFxyXG4gICAgY29uc3RydWN0b3I6IFNsaW1KUSxcclxuICAgIGxlbmd0aDogMCxcclxuXHJcbiAgICB0b0FycmF5OiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHNsaWNlLmNhbGwodGhpcylcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0OiBmdW5jdGlvbihudW0pIHtcclxuICAgICAgaWYgKG51bSA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHNsaWNlLmNhbGwodGhpcylcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVtIDwgMCA/IHRoaXNbbnVtICsgdGhpcy5sZW5ndGhdIDogdGhpc1tudW1dXHJcbiAgICB9LFxyXG5cclxuICAgIHB1c2hTdGFjazogZnVuY3Rpb24oZWxlbXMpIHtcclxuICAgICAgdmFyIHJldCA9IFNsaW1KUS5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zKVxyXG5cclxuICAgICAgcmV0LnByZXZPYmplY3QgPSB0aGlzXHJcblxyXG4gICAgICByZXR1cm4gcmV0XHJcbiAgICB9LFxyXG5cclxuICAgIGVhY2g6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XHJcbiAgICAgIHJldHVybiBTbGltSlEuZWFjaCh0aGlzLCBjYWxsYmFjaylcclxuICAgIH0sXHJcblxyXG4gICAgbWFwOiBmdW5jdGlvbihjYWxsYmFjaykge1xyXG4gICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soXHJcbiAgICAgICAgU2xpbUpRLm1hcCh0aGlzLCBmdW5jdGlvbihlbGVtLCBpKSB7XHJcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2suY2FsbChlbGVtLCBpLCBlbGVtKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH0sXHJcblxyXG4gICAgc2xpY2U6IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soc2xpY2UuYXBwbHkodGhpcywgYXJndW1lbnRzKSlcclxuICAgIH0sXHJcblxyXG4gICAgZmlyc3Q6IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5lcSgwKVxyXG4gICAgfSxcclxuXHJcbiAgICBsYXN0OiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXEoLTEpXHJcbiAgICB9LFxyXG5cclxuICAgIGVxOiBmdW5jdGlvbihpKSB7XHJcbiAgICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgdmFyIGogPSAraSArIChpIDwgMCA/IGxlbiA6IDApXHJcbiAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayhqID49IDAgJiYgaiA8IGxlbiA/IFt0aGlzW2pdXSA6IFtdKVxyXG4gICAgfSxcclxuXHJcbiAgICBlbmQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKVxyXG4gICAgfSxcclxuXHJcbiAgICBwdXNoOiBwdXNoLFxyXG4gICAgc29ydDogYXJyLnNvcnQsXHJcbiAgICBzcGxpY2U6IGFyci5zcGxpY2VcclxuICB9XHJcblxyXG4gIFNsaW1KUS5leHRlbmQgPSBTbGltSlEuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgb3B0aW9uc1xyXG5cclxuICAgIHZhciBuYW1lXHJcblxyXG4gICAgdmFyIHNyY1xyXG5cclxuICAgIHZhciBjb3B5XHJcblxyXG4gICAgdmFyIGNvcHlJc0FycmF5XHJcblxyXG4gICAgdmFyIGNsb25lXHJcblxyXG4gICAgdmFyIHRhcmdldCA9IGFyZ3VtZW50c1swXSB8fCB7fVxyXG5cclxuICAgIHZhciBpID0gMVxyXG5cclxuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoXHJcblxyXG4gICAgdmFyIGRlZXAgPSBmYWxzZVxyXG5cclxuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgZGVlcCA9IHRhcmdldFxyXG5cclxuICAgICAgdGFyZ2V0ID0gYXJndW1lbnRzW2ldIHx8IHt9XHJcbiAgICAgIGkrK1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgdGFyZ2V0ICE9PSAnb2JqZWN0JyAmJiAhaXNGdW5jdGlvbih0YXJnZXQpKSB7XHJcbiAgICAgIHRhcmdldCA9IHt9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGkgPT09IGxlbmd0aCkge1xyXG4gICAgICB0YXJnZXQgPSB0aGlzXHJcbiAgICAgIGktLVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKChvcHRpb25zID0gYXJndW1lbnRzW2ldKSAhPSBudWxsKSB7XHJcbiAgICAgICAgZm9yIChuYW1lIGluIG9wdGlvbnMpIHtcclxuICAgICAgICAgIHNyYyA9IHRhcmdldFtuYW1lXVxyXG4gICAgICAgICAgY29weSA9IG9wdGlvbnNbbmFtZV1cclxuXHJcbiAgICAgICAgICBpZiAodGFyZ2V0ID09PSBjb3B5KSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBkZWVwICYmXHJcbiAgICAgICAgICAgIGNvcHkgJiZcclxuICAgICAgICAgICAgKFNsaW1KUS5pc1BsYWluT2JqZWN0KGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoY29weSkpKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmIChjb3B5SXNBcnJheSkge1xyXG4gICAgICAgICAgICAgIGNvcHlJc0FycmF5ID0gZmFsc2VcclxuICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBBcnJheS5pc0FycmF5KHNyYykgPyBzcmMgOiBbXVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNsb25lID0gc3JjICYmIFNsaW1KUS5pc1BsYWluT2JqZWN0KHNyYykgPyBzcmMgOiB7fVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0YXJnZXRbbmFtZV0gPSBTbGltSlEuZXh0ZW5kKGRlZXAsIGNsb25lLCBjb3B5KVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChjb3B5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gY29weVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0YXJnZXRcclxuICB9XHJcblxyXG4gIFNsaW1KUS5leHRlbmQoe1xyXG4gICAgZXhwYW5kbzogJ1NsaW1KUScgKyAodmVyc2lvbiArIE1hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xcRC9nLCAnJyksXHJcblxyXG4gICAgaXNSZWFkeTogdHJ1ZSxcclxuXHJcbiAgICBlcnJvcjogZnVuY3Rpb24obXNnKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpXHJcbiAgICB9LFxyXG5cclxuICAgIG5vb3A6IGZ1bmN0aW9uKCkge30sXHJcblxyXG4gICAgaXNQbGFpbk9iamVjdDogZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgIHZhciBwcm90bywgQ3RvclxyXG5cclxuICAgICAgaWYgKCFvYmogfHwgdG9TdHJpbmcuY2FsbChvYmopICE9PSAnW29iamVjdCBPYmplY3RdJykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBwcm90byA9IGdldFByb3RvKG9iailcclxuXHJcbiAgICAgIGlmICghcHJvdG8pIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBDdG9yID0gaGFzT3duLmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yXHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgdHlwZW9mIEN0b3IgPT09ICdmdW5jdGlvbicgJiZcclxuICAgICAgICBmblRvU3RyaW5nLmNhbGwoQ3RvcikgPT09IE9iamVjdEZ1bmN0aW9uU3RyaW5nXHJcbiAgICAgIClcclxuICAgIH0sXHJcblxyXG4gICAgaXNFbXB0eU9iamVjdDogZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgIHZhciBuYW1lXHJcblxyXG4gICAgICBmb3IgKG5hbWUgaW4gb2JqKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0sXHJcblxyXG4gICAgZ2xvYmFsRXZhbDogZnVuY3Rpb24oY29kZSkge1xyXG4gICAgICBET01FdmFsKGNvZGUpXHJcbiAgICB9LFxyXG5cclxuICAgIGVhY2g6IGZ1bmN0aW9uKG9iaiwgY2FsbGJhY2spIHtcclxuICAgICAgdmFyIGxlbmd0aFxyXG5cclxuICAgICAgdmFyIGkgPSAwXHJcblxyXG4gICAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xyXG4gICAgICAgIGxlbmd0aCA9IG9iai5sZW5ndGhcclxuICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoY2FsbGJhY2suY2FsbChvYmpbaV0sIGksIG9ialtpXSkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAoaSBpbiBvYmopIHtcclxuICAgICAgICAgIGlmIChjYWxsYmFjay5jYWxsKG9ialtpXSwgaSwgb2JqW2ldKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBvYmpcclxuICAgIH0sXHJcblxyXG4gICAgdHJpbTogZnVuY3Rpb24odGV4dCkge1xyXG4gICAgICByZXR1cm4gdGV4dCA9PSBudWxsID8gJycgOiAodGV4dCArICcnKS5yZXBsYWNlKHJ0cmltLCAnJylcclxuICAgIH0sXHJcblxyXG4gICAgbWFrZUFycmF5OiBmdW5jdGlvbihhcnIsIHJlc3VsdHMpIHtcclxuICAgICAgdmFyIHJldCA9IHJlc3VsdHMgfHwgW11cclxuXHJcbiAgICAgIGlmIChhcnIgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChpc0FycmF5TGlrZShPYmplY3QoYXJyKSkpIHtcclxuICAgICAgICAgIFNsaW1KUS5tZXJnZShyZXQsIHR5cGVvZiBhcnIgPT09ICdzdHJpbmcnID8gW2Fycl0gOiBhcnIpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHB1c2guY2FsbChyZXQsIGFycilcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByZXRcclxuICAgIH0sXHJcblxyXG4gICAgaW5BcnJheTogZnVuY3Rpb24oZWxlbSwgYXJyLCBpKSB7XHJcbiAgICAgIHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKGFyciwgZWxlbSwgaSlcclxuICAgIH0sXHJcblxyXG4gICAgbWVyZ2U6IGZ1bmN0aW9uKGZpcnN0LCBzZWNvbmQpIHtcclxuICAgICAgdmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoXHJcblxyXG4gICAgICB2YXIgaiA9IDBcclxuXHJcbiAgICAgIHZhciBpID0gZmlyc3QubGVuZ3RoXHJcblxyXG4gICAgICBmb3IgKDsgaiA8IGxlbjsgaisrKSB7XHJcbiAgICAgICAgZmlyc3RbaSsrXSA9IHNlY29uZFtqXVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmaXJzdC5sZW5ndGggPSBpXHJcblxyXG4gICAgICByZXR1cm4gZmlyc3RcclxuICAgIH0sXHJcblxyXG4gICAgZ3JlcDogZnVuY3Rpb24oZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQpIHtcclxuICAgICAgdmFyIGNhbGxiYWNrSW52ZXJzZVxyXG5cclxuICAgICAgdmFyIG1hdGNoZXMgPSBbXVxyXG5cclxuICAgICAgdmFyIGkgPSAwXHJcblxyXG4gICAgICB2YXIgbGVuZ3RoID0gZWxlbXMubGVuZ3RoXHJcblxyXG4gICAgICB2YXIgY2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0XHJcblxyXG4gICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKGVsZW1zW2ldLCBpKVxyXG4gICAgICAgIGlmIChjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0KSB7XHJcbiAgICAgICAgICBtYXRjaGVzLnB1c2goZWxlbXNbaV0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gbWF0Y2hlc1xyXG4gICAgfSxcclxuXHJcbiAgICBtYXA6IGZ1bmN0aW9uKGVsZW1zLCBjYWxsYmFjaywgYXJnKSB7XHJcbiAgICAgIHZhciBsZW5ndGhcclxuXHJcbiAgICAgIHZhciB2YWx1ZVxyXG5cclxuICAgICAgdmFyIGkgPSAwXHJcblxyXG4gICAgICB2YXIgcmV0ID0gW11cclxuXHJcbiAgICAgIGlmIChpc0FycmF5TGlrZShlbGVtcykpIHtcclxuICAgICAgICBsZW5ndGggPSBlbGVtcy5sZW5ndGhcclxuICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IGNhbGxiYWNrKGVsZW1zW2ldLCBpLCBhcmcpXHJcblxyXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0LnB1c2godmFsdWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAoaSBpbiBlbGVtcykge1xyXG4gICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayhlbGVtc1tpXSwgaSwgYXJnKVxyXG5cclxuICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldC5wdXNoKHZhbHVlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGNvbmNhdC5hcHBseShbXSwgcmV0KVxyXG4gICAgfSxcclxuXHJcbiAgICBndWlkOiAxLFxyXG5cclxuICAgIHN1cHBvcnQ6IHN1cHBvcnRcclxuICB9KVxyXG5cclxuICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgU2xpbUpRLmZuW1N5bWJvbC5pdGVyYXRvcl0gPSBhcnJbU3ltYm9sLml0ZXJhdG9yXVxyXG4gIH1cclxuXHJcbiAgU2xpbUpRLmVhY2goXHJcbiAgICAnQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wnLnNwbGl0KFxyXG4gICAgICAnICdcclxuICAgICksXHJcbiAgICBmdW5jdGlvbihpLCBuYW1lKSB7XHJcbiAgICAgIGNsYXNzMnR5cGVbJ1tvYmplY3QgJyArIG5hbWUgKyAnXSddID0gbmFtZS50b0xvd2VyQ2FzZSgpXHJcbiAgICB9XHJcbiAgKVxyXG5cclxuICBmdW5jdGlvbiBpc0FycmF5TGlrZShvYmopIHtcclxuICAgIHZhciBsZW5ndGggPSAhIW9iaiAmJiAnbGVuZ3RoJyBpbiBvYmogJiYgb2JqLmxlbmd0aFxyXG5cclxuICAgIHZhciB0eXBlID0gdG9UeXBlKG9iailcclxuXHJcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopIHx8IGlzV2luZG93KG9iaikpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgdHlwZSA9PT0gJ2FycmF5JyB8fFxyXG4gICAgICBsZW5ndGggPT09IDAgfHxcclxuICAgICAgKHR5cGVvZiBsZW5ndGggPT09ICdudW1iZXInICYmIGxlbmd0aCA+IDAgJiYgbGVuZ3RoIC0gMSBpbiBvYmopXHJcbiAgICApXHJcbiAgfVxyXG4gIHZhciBTaXp6bGUgPSAoZnVuY3Rpb24od2luZG93KSB7XHJcbiAgICB2YXIgaVxyXG5cclxuICAgIHZhciBzdXBwb3J0XHJcblxyXG4gICAgdmFyIEV4cHJcclxuXHJcbiAgICB2YXIgZ2V0VGV4dFxyXG5cclxuICAgIHZhciBpc1hNTFxyXG5cclxuICAgIHZhciB0b2tlbml6ZVxyXG5cclxuICAgIHZhciBjb21waWxlXHJcblxyXG4gICAgdmFyIHNlbGVjdFxyXG5cclxuICAgIHZhciBvdXRlcm1vc3RDb250ZXh0XHJcblxyXG4gICAgdmFyIHNvcnRJbnB1dFxyXG5cclxuICAgIHZhciBoYXNEdXBsaWNhdGVcclxuXHJcbiAgICB2YXIgc2V0RG9jdW1lbnRcclxuXHJcbiAgICB2YXIgZG9jdW1lbnRcclxuXHJcbiAgICB2YXIgZG9jRWxlbVxyXG5cclxuICAgIHZhciBkb2N1bWVudElzSFRNTFxyXG5cclxuICAgIHZhciByYnVnZ3lRU0FcclxuXHJcbiAgICB2YXIgcmJ1Z2d5TWF0Y2hlc1xyXG5cclxuICAgIHZhciBtYXRjaGVzXHJcblxyXG4gICAgdmFyIGNvbnRhaW5zXHJcblxyXG4gICAgdmFyIGV4cGFuZG8gPSAnc2l6emxlJyArIDEgKiBuZXcgRGF0ZSgpXHJcblxyXG4gICAgdmFyIHByZWZlcnJlZERvYyA9IHdpbmRvdy5kb2N1bWVudFxyXG5cclxuICAgIHZhciBkaXJydW5zID0gMFxyXG5cclxuICAgIHZhciBkb25lID0gMFxyXG5cclxuICAgIHZhciBjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKVxyXG5cclxuICAgIHZhciB0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKVxyXG5cclxuICAgIHZhciBjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKVxyXG5cclxuICAgIHZhciBzb3J0T3JkZXIgPSBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICAgIGlmIChhID09PSBiKSB7XHJcbiAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAwXHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5XHJcblxyXG4gICAgdmFyIGFyciA9IFtdXHJcblxyXG4gICAgdmFyIHBvcCA9IGFyci5wb3BcclxuXHJcbiAgICB2YXIgcHVzaE5hdGl2ZSA9IGFyci5wdXNoXHJcblxyXG4gICAgdmFyIHB1c2ggPSBhcnIucHVzaFxyXG5cclxuICAgIHZhciBzbGljZSA9IGFyci5zbGljZVxyXG5cclxuICAgIHZhciBpbmRleE9mID0gZnVuY3Rpb24obGlzdCwgZWxlbSkge1xyXG4gICAgICB2YXIgaSA9IDBcclxuXHJcbiAgICAgIHZhciBsZW4gPSBsaXN0Lmxlbmd0aFxyXG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGxpc3RbaV0gPT09IGVsZW0pIHtcclxuICAgICAgICAgIHJldHVybiBpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAtMVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBib29sZWFucyA9XHJcbiAgICAgICdjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCdcclxuXHJcbiAgICB2YXIgd2hpdGVzcGFjZSA9ICdbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXSdcclxuXHJcbiAgICB2YXIgaWRlbnRpZmllciA9ICcoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXDAtXFxcXHhhMF0pKydcclxuXHJcbiAgICB2YXIgYXR0cmlidXRlcyA9XHJcbiAgICAgICdcXFxcWycgK1xyXG4gICAgICB3aGl0ZXNwYWNlICtcclxuICAgICAgJyooJyArXHJcbiAgICAgIGlkZW50aWZpZXIgK1xyXG4gICAgICAnKSg/OicgK1xyXG4gICAgICB3aGl0ZXNwYWNlICtcclxuICAgICAgJyooWypeJHwhfl0/PSknICtcclxuICAgICAgd2hpdGVzcGFjZSArXHJcbiAgICAgICcqKD86XFwnKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFwnXSkqKVxcJ3xcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFwiXSkqKVwifCgnICtcclxuICAgICAgaWRlbnRpZmllciArXHJcbiAgICAgICcpKXwpJyArXHJcbiAgICAgIHdoaXRlc3BhY2UgK1xyXG4gICAgICAnKlxcXFxdJ1xyXG5cclxuICAgIHZhciBwc2V1ZG9zID1cclxuICAgICAgJzooJyArXHJcbiAgICAgIGlkZW50aWZpZXIgK1xyXG4gICAgICAnKSg/OlxcXFwoKCcgK1xyXG4gICAgICAnKFxcJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcJ10pKilcXCd8XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcIl0pKilcIil8JyArXHJcbiAgICAgICcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18JyArXHJcbiAgICAgIGF0dHJpYnV0ZXMgK1xyXG4gICAgICAnKSopfCcgK1xyXG4gICAgICAnLionICtcclxuICAgICAgJylcXFxcKXwpJ1xyXG5cclxuICAgIHZhciByd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAod2hpdGVzcGFjZSArICcrJywgJ2cnKVxyXG5cclxuICAgIHZhciBydHJpbSA9IG5ldyBSZWdFeHAoXHJcbiAgICAgICdeJyArIHdoaXRlc3BhY2UgKyAnK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKiknICsgd2hpdGVzcGFjZSArICcrJCcsXHJcbiAgICAgICdnJ1xyXG4gICAgKVxyXG5cclxuICAgIHZhciByY29tbWEgPSBuZXcgUmVnRXhwKCdeJyArIHdoaXRlc3BhY2UgKyAnKiwnICsgd2hpdGVzcGFjZSArICcqJylcclxuXHJcbiAgICB2YXIgcmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cChcclxuICAgICAgJ14nICsgd2hpdGVzcGFjZSArICcqKFs+K35dfCcgKyB3aGl0ZXNwYWNlICsgJyknICsgd2hpdGVzcGFjZSArICcqJ1xyXG4gICAgKVxyXG5cclxuICAgIHZhciByYXR0cmlidXRlUXVvdGVzID0gbmV3IFJlZ0V4cChcclxuICAgICAgJz0nICsgd2hpdGVzcGFjZSArICcqKFteXFxcXF1cXCdcIl0qPyknICsgd2hpdGVzcGFjZSArICcqXFxcXF0nLFxyXG4gICAgICAnZydcclxuICAgIClcclxuXHJcbiAgICB2YXIgcnBzZXVkbyA9IG5ldyBSZWdFeHAocHNldWRvcylcclxuXHJcbiAgICB2YXIgcmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCdeJyArIGlkZW50aWZpZXIgKyAnJCcpXHJcblxyXG4gICAgdmFyIG1hdGNoRXhwciA9IHtcclxuICAgICAgSUQ6IG5ldyBSZWdFeHAoJ14jKCcgKyBpZGVudGlmaWVyICsgJyknKSxcclxuICAgICAgQ0xBU1M6IG5ldyBSZWdFeHAoJ15cXFxcLignICsgaWRlbnRpZmllciArICcpJyksXHJcbiAgICAgIFRBRzogbmV3IFJlZ0V4cCgnXignICsgaWRlbnRpZmllciArICd8WypdKScpLFxyXG4gICAgICBBVFRSOiBuZXcgUmVnRXhwKCdeJyArIGF0dHJpYnV0ZXMpLFxyXG4gICAgICBQU0VVRE86IG5ldyBSZWdFeHAoJ14nICsgcHNldWRvcyksXHJcbiAgICAgIENISUxEOiBuZXcgUmVnRXhwKFxyXG4gICAgICAgICdeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKCcgK1xyXG4gICAgICAgICAgd2hpdGVzcGFjZSArXHJcbiAgICAgICAgICAnKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpJyArXHJcbiAgICAgICAgICB3aGl0ZXNwYWNlICtcclxuICAgICAgICAgICcqKD86KFsrLV18KScgK1xyXG4gICAgICAgICAgd2hpdGVzcGFjZSArXHJcbiAgICAgICAgICAnKihcXFxcZCspfCkpJyArXHJcbiAgICAgICAgICB3aGl0ZXNwYWNlICtcclxuICAgICAgICAgICcqXFxcXCl8KScsXHJcbiAgICAgICAgJ2knXHJcbiAgICAgICksXHJcbiAgICAgIGJvb2w6IG5ldyBSZWdFeHAoJ14oPzonICsgYm9vbGVhbnMgKyAnKSQnLCAnaScpLFxyXG4gICAgICBuZWVkc0NvbnRleHQ6IG5ldyBSZWdFeHAoXHJcbiAgICAgICAgJ14nICtcclxuICAgICAgICAgIHdoaXRlc3BhY2UgK1xyXG4gICAgICAgICAgJypbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoJyArXHJcbiAgICAgICAgICB3aGl0ZXNwYWNlICtcclxuICAgICAgICAgICcqKCg/Oi1cXFxcZCk/XFxcXGQqKScgK1xyXG4gICAgICAgICAgd2hpdGVzcGFjZSArXHJcbiAgICAgICAgICAnKlxcXFwpfCkoPz1bXi1dfCQpJyxcclxuICAgICAgICAnaSdcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHZhciByaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaVxyXG5cclxuICAgIHZhciByaGVhZGVyID0gL15oXFxkJC9pXHJcblxyXG4gICAgdmFyIHJuYXRpdmUgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvXHJcblxyXG4gICAgdmFyIHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkL1xyXG5cclxuICAgIHZhciByc2libGluZyA9IC9bK35dL1xyXG5cclxuICAgIHZhciBydW5lc2NhcGUgPSBuZXcgUmVnRXhwKFxyXG4gICAgICAnXFxcXFxcXFwoW1xcXFxkYS1mXXsxLDZ9JyArIHdoaXRlc3BhY2UgKyAnP3woJyArIHdoaXRlc3BhY2UgKyAnKXwuKScsXHJcbiAgICAgICdpZydcclxuICAgIClcclxuXHJcbiAgICB2YXIgZnVuZXNjYXBlID0gZnVuY3Rpb24oXywgZXNjYXBlZCwgZXNjYXBlZFdoaXRlc3BhY2UpIHtcclxuICAgICAgdmFyIGhpZ2ggPSAnMHgnICsgZXNjYXBlZCAtIDB4MTAwMDBcclxuICAgICAgcmV0dXJuIGhpZ2ggIT09IGhpZ2ggfHwgZXNjYXBlZFdoaXRlc3BhY2VcclxuICAgICAgICA/IGVzY2FwZWRcclxuICAgICAgICA6IGhpZ2ggPCAwXHJcbiAgICAgICAgICA/IFN0cmluZy5mcm9tQ2hhckNvZGUoaGlnaCArIDB4MTAwMDApXHJcbiAgICAgICAgICA6IFN0cmluZy5mcm9tQ2hhckNvZGUoKGhpZ2ggPj4gMTApIHwgMHhkODAwLCAoaGlnaCAmIDB4M2ZmKSB8IDB4ZGMwMClcclxuICAgIH1cclxuXHJcbiAgICB2YXIgcmNzc2VzY2FwZSA9IC8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxcMC1cXHgxZlxceDdmLVxcdUZGRkZcXHctXS9nXHJcblxyXG4gICAgdmFyIGZjc3Nlc2NhcGUgPSBmdW5jdGlvbihjaCwgYXNDb2RlUG9pbnQpIHtcclxuICAgICAgaWYgKGFzQ29kZVBvaW50KSB7XHJcbiAgICAgICAgaWYgKGNoID09PSAnXFwwJykge1xyXG4gICAgICAgICAgcmV0dXJuICdcXHVGRkZEJ1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIGNoLnNsaWNlKDAsIC0xKSArXHJcbiAgICAgICAgICAnXFxcXCcgK1xyXG4gICAgICAgICAgY2guY2hhckNvZGVBdChjaC5sZW5ndGggLSAxKS50b1N0cmluZygxNikgK1xyXG4gICAgICAgICAgJyAnXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gJ1xcXFwnICsgY2hcclxuICAgIH1cclxuXHJcbiAgICB2YXIgdW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICBzZXREb2N1bWVudCgpXHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGRpc2FibGVkQW5jZXN0b3IgPSBhZGRDb21iaW5hdG9yKFxyXG4gICAgICBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWUgJiYgKCdmb3JtJyBpbiBlbGVtIHx8ICdsYWJlbCcgaW4gZWxlbSlcclxuICAgICAgfSxcclxuICAgICAgeyBkaXI6ICdwYXJlbnROb2RlJywgbmV4dDogJ2xlZ2VuZCcgfVxyXG4gICAgKVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHB1c2guYXBwbHkoXHJcbiAgICAgICAgKGFyciA9IHNsaWNlLmNhbGwocHJlZmVycmVkRG9jLmNoaWxkTm9kZXMpKSxcclxuICAgICAgICBwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xyXG4gICAgICApXHJcbiAgICAgIGFycltwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHB1c2ggPSB7XHJcbiAgICAgICAgYXBwbHk6IGFyci5sZW5ndGhcclxuICAgICAgICAgID8gZnVuY3Rpb24odGFyZ2V0LCBlbHMpIHtcclxuICAgICAgICAgICAgcHVzaE5hdGl2ZS5hcHBseSh0YXJnZXQsIHNsaWNlLmNhbGwoZWxzKSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDogZnVuY3Rpb24odGFyZ2V0LCBlbHMpIHtcclxuICAgICAgICAgICAgdmFyIGogPSB0YXJnZXQubGVuZ3RoXHJcblxyXG4gICAgICAgICAgICB2YXIgaSA9IDBcclxuICAgICAgICAgICAgd2hpbGUgKCh0YXJnZXRbaisrXSA9IGVsc1tpKytdKSkge31cclxuICAgICAgICAgICAgdGFyZ2V0Lmxlbmd0aCA9IGogLSAxXHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBTaXp6bGUoc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQpIHtcclxuICAgICAgdmFyIG1cclxuXHJcbiAgICAgIHZhciBpXHJcblxyXG4gICAgICB2YXIgZWxlbVxyXG5cclxuICAgICAgdmFyIG5pZFxyXG5cclxuICAgICAgdmFyIG1hdGNoXHJcblxyXG4gICAgICB2YXIgZ3JvdXBzXHJcblxyXG4gICAgICB2YXIgbmV3U2VsZWN0b3JcclxuXHJcbiAgICAgIHZhciBuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnRcclxuXHJcbiAgICAgIHZhciBub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOVxyXG5cclxuICAgICAgcmVzdWx0cyA9IHJlc3VsdHMgfHwgW11cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2Ygc2VsZWN0b3IgIT09ICdzdHJpbmcnIHx8XHJcbiAgICAgICAgIXNlbGVjdG9yIHx8XHJcbiAgICAgICAgKG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHNcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFzZWVkKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKGNvbnRleHQgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IHByZWZlcnJlZERvYykgIT09XHJcbiAgICAgICAgICBkb2N1bWVudFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgc2V0RG9jdW1lbnQoY29udGV4dClcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnRcclxuXHJcbiAgICAgICAgaWYgKGRvY3VtZW50SXNIVE1MKSB7XHJcbiAgICAgICAgICBpZiAobm9kZVR5cGUgIT09IDExICYmIChtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyhzZWxlY3RvcikpKSB7XHJcbiAgICAgICAgICAgIGlmICgobSA9IG1hdGNoWzFdKSkge1xyXG4gICAgICAgICAgICAgIGlmIChub2RlVHlwZSA9PT0gOSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKChlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZChtKSkpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGVsZW0uaWQgPT09IG0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZWxlbSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIG5ld0NvbnRleHQgJiZcclxuICAgICAgICAgICAgICAgICAgKGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKG0pKSAmJlxyXG4gICAgICAgICAgICAgICAgICBjb250YWlucyhjb250ZXh0LCBlbGVtKSAmJlxyXG4gICAgICAgICAgICAgICAgICBlbGVtLmlkID09PSBtXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVsZW0pXHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoWzJdKSB7XHJcbiAgICAgICAgICAgICAgcHVzaC5hcHBseShyZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKHNlbGVjdG9yKSlcclxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgIChtID0gbWF0Y2hbM10pICYmXHJcbiAgICAgICAgICAgICAgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmXHJcbiAgICAgICAgICAgICAgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHB1c2guYXBwbHkocmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG0pKVxyXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHN1cHBvcnQucXNhICYmXHJcbiAgICAgICAgICAgICFjb21waWxlckNhY2hlW3NlbGVjdG9yICsgJyAnXSAmJlxyXG4gICAgICAgICAgICAoIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3Qoc2VsZWN0b3IpKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmIChub2RlVHlwZSAhPT0gMSkge1xyXG4gICAgICAgICAgICAgIG5ld0NvbnRleHQgPSBjb250ZXh0XHJcbiAgICAgICAgICAgICAgbmV3U2VsZWN0b3IgPSBzZWxlY3RvclxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgICBpZiAoKG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCdpZCcpKSkge1xyXG4gICAgICAgICAgICAgICAgbmlkID0gbmlkLnJlcGxhY2UocmNzc2VzY2FwZSwgZmNzc2VzY2FwZSlcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC5zZXRBdHRyaWJ1dGUoJ2lkJywgKG5pZCA9IGV4cGFuZG8pKVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgZ3JvdXBzID0gdG9rZW5pemUoc2VsZWN0b3IpXHJcbiAgICAgICAgICAgICAgaSA9IGdyb3Vwcy5sZW5ndGhcclxuICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBncm91cHNbaV0gPSAnIycgKyBuaWQgKyAnICcgKyB0b1NlbGVjdG9yKGdyb3Vwc1tpXSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbmV3U2VsZWN0b3IgPSBncm91cHMuam9pbignLCcpXHJcblxyXG4gICAgICAgICAgICAgIG5ld0NvbnRleHQgPVxyXG4gICAgICAgICAgICAgICAgKHJzaWJsaW5nLnRlc3Qoc2VsZWN0b3IpICYmIHRlc3RDb250ZXh0KGNvbnRleHQucGFyZW50Tm9kZSkpIHx8XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChuZXdTZWxlY3Rvcikge1xyXG4gICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBwdXNoLmFwcGx5KHJlc3VsdHMsIG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbChuZXdTZWxlY3RvcikpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xyXG4gICAgICAgICAgICAgIH0gY2F0Y2ggKHFzYUVycm9yKSB7XHJcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgIGlmIChuaWQgPT09IGV4cGFuZG8pIHtcclxuICAgICAgICAgICAgICAgICAgY29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoJ2lkJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBzZWxlY3Qoc2VsZWN0b3IucmVwbGFjZShydHJpbSwgJyQxJyksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQpXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XHJcbiAgICAgIHZhciBrZXlzID0gW11cclxuXHJcbiAgICAgIGZ1bmN0aW9uIGNhY2hlKGtleSwgdmFsdWUpIHtcclxuICAgICAgICBpZiAoa2V5cy5wdXNoKGtleSArICcgJykgPiBFeHByLmNhY2hlTGVuZ3RoKSB7XHJcbiAgICAgICAgICBkZWxldGUgY2FjaGVba2V5cy5zaGlmdCgpXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKGNhY2hlW2tleSArICcgJ10gPSB2YWx1ZSlcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY2FjaGVcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFya1xyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBtYXJrRnVuY3Rpb24oZm4pIHtcclxuICAgICAgZm5bZXhwYW5kb10gPSB0cnVlXHJcbiAgICAgIHJldHVybiBmblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnRcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBlbGVtZW50IGFuZCByZXR1cm5zIGEgYm9vbGVhbiByZXN1bHRcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gYXNzZXJ0KGZuKSB7XHJcbiAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ZpZWxkc2V0JylcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgcmV0dXJuICEhZm4oZWwpXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICBpZiAoZWwucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbClcclxuICAgICAgICB9XHJcbiAgICAgICAgZWwgPSBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnNcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXNcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZFxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBhZGRIYW5kbGUoYXR0cnMsIGhhbmRsZXIpIHtcclxuICAgICAgdmFyIGFyciA9IGF0dHJzLnNwbGl0KCd8JylcclxuXHJcbiAgICAgIHZhciBpID0gYXJyLmxlbmd0aFxyXG5cclxuICAgICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgIEV4cHIuYXR0ckhhbmRsZVthcnJbaV1dID0gaGFuZGxlclxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGFcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gYlxyXG4gICAgICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHNpYmxpbmdDaGVjayhhLCBiKSB7XHJcbiAgICAgIHZhciBjdXIgPSBiICYmIGFcclxuXHJcbiAgICAgIHZhciBkaWZmID1cclxuICAgICAgICBjdXIgJiZcclxuICAgICAgICBhLm5vZGVUeXBlID09PSAxICYmXHJcbiAgICAgICAgYi5ub2RlVHlwZSA9PT0gMSAmJlxyXG4gICAgICAgIGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4XHJcblxyXG4gICAgICBpZiAoZGlmZikge1xyXG4gICAgICAgIHJldHVybiBkaWZmXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjdXIpIHtcclxuICAgICAgICB3aGlsZSAoKGN1ciA9IGN1ci5uZXh0U2libGluZykpIHtcclxuICAgICAgICAgIGlmIChjdXIgPT09IGIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gYSA/IDEgOiAtMVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8odHlwZSkge1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgcmV0dXJuIG5hbWUgPT09ICdpbnB1dCcgJiYgZWxlbS50eXBlID09PSB0eXBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9uc1xyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKHR5cGUpIHtcclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICB2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgIHJldHVybiAobmFtZSA9PT0gJ2lucHV0JyB8fCBuYW1lID09PSAnYnV0dG9uJykgJiYgZWxlbS50eXBlID09PSB0eXBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKGRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgaWYgKCdmb3JtJyBpbiBlbGVtKSB7XHJcbiAgICAgICAgICBpZiAoZWxlbS5wYXJlbnROb2RlICYmIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGlmICgnbGFiZWwnIGluIGVsZW0pIHtcclxuICAgICAgICAgICAgICBpZiAoJ2xhYmVsJyBpbiBlbGVtLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XHJcbiAgICAgICAgICAgICAgKGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZEFuY2VzdG9yKGVsZW0pID09PSBkaXNhYmxlZClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZFxyXG4gICAgICAgIH0gZWxzZSBpZiAoJ2xhYmVsJyBpbiBlbGVtKSB7XHJcbiAgICAgICAgICByZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWRcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZuKSB7XHJcbiAgICAgIHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oYXJndW1lbnQpIHtcclxuICAgICAgICBhcmd1bWVudCA9ICthcmd1bWVudFxyXG4gICAgICAgIHJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oc2VlZCwgbWF0Y2hlcykge1xyXG4gICAgICAgICAgdmFyIGpcclxuXHJcbiAgICAgICAgICB2YXIgbWF0Y2hJbmRleGVzID0gZm4oW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudClcclxuXHJcbiAgICAgICAgICB2YXIgaSA9IG1hdGNoSW5kZXhlcy5sZW5ndGhcclxuXHJcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWVkWyhqID0gbWF0Y2hJbmRleGVzW2ldKV0pIHtcclxuICAgICAgICAgICAgICBzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgYSBub2RlIGZvciB2YWxpZGl0eSBhcyBhIFNpenpsZSBjb250ZXh0XHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dFxyXG4gICAgICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlXHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIHRlc3RDb250ZXh0KGNvbnRleHQpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBjb250ZXh0ICYmXHJcbiAgICAgICAgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09ICd1bmRlZmluZWQnICYmXHJcbiAgICAgICAgY29udGV4dFxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgc3VwcG9ydCA9IFNpenpsZS5zdXBwb3J0ID0ge31cclxuXHJcbiAgICAvKipcclxuICAgICAqIERldGVjdHMgWE1MIG5vZGVzXHJcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxyXG4gICAgICovXHJcbiAgICBpc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgdmFyIGRvY3VtZW50RWxlbWVudCA9IGVsZW0gJiYgKGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtKS5kb2N1bWVudEVsZW1lbnRcclxuICAgICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPT0gJ0hUTUwnIDogZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgZG9jdW1lbnQtcmVsYXRlZCB2YXJpYWJsZXMgb25jZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkb2N1bWVudFxyXG4gICAgICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW2RvY10gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnRcclxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnRcclxuICAgICAqL1xyXG4gICAgc2V0RG9jdW1lbnQgPSBTaXp6bGUuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XHJcbiAgICAgIHZhciBoYXNDb21wYXJlXHJcblxyXG4gICAgICB2YXIgc3ViV2luZG93XHJcblxyXG4gICAgICB2YXIgZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jXHJcblxyXG4gICAgICBpZiAoZG9jID09PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQpIHtcclxuICAgICAgICByZXR1cm4gZG9jdW1lbnRcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9jdW1lbnQgPSBkb2NcclxuICAgICAgZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxyXG4gICAgICBkb2N1bWVudElzSFRNTCA9ICFpc1hNTChkb2N1bWVudClcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBwcmVmZXJyZWREb2MgIT09IGRvY3VtZW50ICYmXHJcbiAgICAgICAgKHN1YldpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3KSAmJlxyXG4gICAgICAgIHN1YldpbmRvdy50b3AgIT09IHN1YldpbmRvd1xyXG4gICAgICApIHtcclxuICAgICAgICBpZiAoc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHtcclxuICAgICAgICAgIHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCB1bmxvYWRIYW5kbGVyLCBmYWxzZSlcclxuICAgICAgICB9IGVsc2UgaWYgKHN1YldpbmRvdy5hdHRhY2hFdmVudCkge1xyXG4gICAgICAgICAgc3ViV2luZG93LmF0dGFjaEV2ZW50KCdvbnVubG9hZCcsIHVubG9hZEhhbmRsZXIpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiBBdHRyaWJ1dGVzXHJcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgc3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KGZ1bmN0aW9uKGVsKSB7XHJcbiAgICAgICAgZWwuY2xhc3NOYW1lID0gJ2knXHJcbiAgICAgICAgcmV0dXJuICFlbC5nZXRBdHRyaWJ1dGUoJ2NsYXNzTmFtZScpXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICAvKiBnZXRFbGVtZW50KHMpQnkqXHJcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGFzc2VydChmdW5jdGlvbihlbCkge1xyXG4gICAgICAgIGVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJycpKVxyXG4gICAgICAgIHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKS5sZW5ndGhcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdChcclxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydChmdW5jdGlvbihlbCkge1xyXG4gICAgICAgIGRvY0VsZW0uYXBwZW5kQ2hpbGQoZWwpLmlkID0gZXhwYW5kb1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHxcclxuICAgICAgICAgICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShleHBhbmRvKS5sZW5ndGhcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBpZiAoc3VwcG9ydC5nZXRCeUlkKSB7XHJcbiAgICAgICAgRXhwci5maWx0ZXJbJ0lEJ10gPSBmdW5jdGlvbihpZCkge1xyXG4gICAgICAgICAgdmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UocnVuZXNjYXBlLCBmdW5lc2NhcGUpXHJcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoJ2lkJykgPT09IGF0dHJJZFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBFeHByLmZpbmRbJ0lEJ10gPSBmdW5jdGlvbihpZCwgY29udGV4dCkge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudElzSFRNTCkge1xyXG4gICAgICAgICAgICB2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoaWQpXHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtID8gW2VsZW1dIDogW11cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgRXhwci5maWx0ZXJbJ0lEJ10gPSBmdW5jdGlvbihpZCkge1xyXG4gICAgICAgICAgdmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UocnVuZXNjYXBlLCBmdW5lc2NhcGUpXHJcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICAgICAgICB2YXIgbm9kZSA9XHJcbiAgICAgICAgICAgICAgdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gJ3VuZGVmaW5lZCcgJiZcclxuICAgICAgICAgICAgICBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoJ2lkJylcclxuICAgICAgICAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBFeHByLmZpbmRbJ0lEJ10gPSBmdW5jdGlvbihpZCwgY29udGV4dCkge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudElzSFRNTCkge1xyXG4gICAgICAgICAgICB2YXIgbm9kZVxyXG5cclxuICAgICAgICAgICAgdmFyIGlcclxuXHJcbiAgICAgICAgICAgIHZhciBlbGVtc1xyXG5cclxuICAgICAgICAgICAgdmFyIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKGlkKVxyXG5cclxuICAgICAgICAgICAgaWYgKGVsZW0pIHtcclxuICAgICAgICAgICAgICBub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpXHJcbiAgICAgICAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBbZWxlbV1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZShpZClcclxuICAgICAgICAgICAgICBpID0gMFxyXG4gICAgICAgICAgICAgIHdoaWxlICgoZWxlbSA9IGVsZW1zW2krK10pKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCdpZCcpXHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gW2VsZW1dXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gW11cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIEV4cHIuZmluZFsnVEFHJ10gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lXHJcbiAgICAgICAgPyBmdW5jdGlvbih0YWcsIGNvbnRleHQpIHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LnFzYSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKHRhZylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgOiBmdW5jdGlvbih0YWcsIGNvbnRleHQpIHtcclxuICAgICAgICAgIHZhciBlbGVtXHJcblxyXG4gICAgICAgICAgdmFyIHRtcCA9IFtdXHJcblxyXG4gICAgICAgICAgdmFyIGkgPSAwXHJcblxyXG4gICAgICAgICAgdmFyIHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZylcclxuXHJcbiAgICAgICAgICBpZiAodGFnID09PSAnKicpIHtcclxuICAgICAgICAgICAgd2hpbGUgKChlbGVtID0gcmVzdWx0c1tpKytdKSkge1xyXG4gICAgICAgICAgICAgIGlmIChlbGVtLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0bXAucHVzaChlbGVtKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRtcFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHNcclxuICAgICAgICB9XHJcblxyXG4gICAgICBFeHByLmZpbmRbJ0NMQVNTJ10gPVxyXG4gICAgICAgIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJlxyXG4gICAgICAgIGZ1bmN0aW9uKGNsYXNzTmFtZSwgY29udGV4dCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgICAgICAgICBkb2N1bWVudElzSFRNTFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIC8qIFFTQS9tYXRjaGVzU2VsZWN0b3JcclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICByYnVnZ3lNYXRjaGVzID0gW11cclxuXHJcbiAgICAgIHJidWdneVFTQSA9IFtdXHJcblxyXG4gICAgICBpZiAoKHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwpKSkge1xyXG4gICAgICAgIGFzc2VydChmdW5jdGlvbihlbCkge1xyXG4gICAgICAgICAgZG9jRWxlbS5hcHBlbmRDaGlsZChlbCkuaW5uZXJIVE1MID1cclxuICAgICAgICAgICAgXCI8YSBpZD0nXCIgK1xyXG4gICAgICAgICAgICBleHBhbmRvICtcclxuICAgICAgICAgICAgXCInPjwvYT5cIiArXHJcbiAgICAgICAgICAgIFwiPHNlbGVjdCBpZD0nXCIgK1xyXG4gICAgICAgICAgICBleHBhbmRvICtcclxuICAgICAgICAgICAgXCItXFxyXFxcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+XCIgK1xyXG4gICAgICAgICAgICBcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCJcclxuXHJcbiAgICAgICAgICBpZiAoZWwucXVlcnlTZWxlY3RvckFsbChcIlttc2FsbG93Y2FwdHVyZV49JyddXCIpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgnWypeJF09JyArIHdoaXRlc3BhY2UgKyAnKig/OlxcJ1xcJ3xcIlwiKScpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCFlbC5xdWVyeVNlbGVjdG9yQWxsKCdbc2VsZWN0ZWRdJykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCdcXFxcWycgKyB3aGl0ZXNwYWNlICsgJyooPzp2YWx1ZXwnICsgYm9vbGVhbnMgKyAnKScpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCFlbC5xdWVyeVNlbGVjdG9yQWxsKCdbaWR+PScgKyBleHBhbmRvICsgJy1dJykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCd+PScpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCFlbC5xdWVyeVNlbGVjdG9yQWxsKCc6Y2hlY2tlZCcpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgnOmNoZWNrZWQnKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghZWwucXVlcnlTZWxlY3RvckFsbCgnYSMnICsgZXhwYW5kbyArICcrKicpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgnLiMuK1srfl0nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGFzc2VydChmdW5jdGlvbihlbCkge1xyXG4gICAgICAgICAgZWwuaW5uZXJIVE1MID1cclxuICAgICAgICAgICAgXCI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcclxuICAgICAgICAgICAgXCI8c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCJcclxuXHJcbiAgICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXHJcbiAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnaGlkZGVuJylcclxuICAgICAgICAgIGVsLmFwcGVuZENoaWxkKGlucHV0KS5zZXRBdHRyaWJ1dGUoJ25hbWUnLCAnRCcpXHJcblxyXG4gICAgICAgICAgaWYgKGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tuYW1lPWRdJykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJidWdneVFTQS5wdXNoKCduYW1lJyArIHdoaXRlc3BhY2UgKyAnKlsqXiR8IX5dPz0nKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChlbC5xdWVyeVNlbGVjdG9yQWxsKCc6ZW5hYmxlZCcpLmxlbmd0aCAhPT0gMikge1xyXG4gICAgICAgICAgICByYnVnZ3lRU0EucHVzaCgnOmVuYWJsZWQnLCAnOmRpc2FibGVkJylcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBkb2NFbGVtLmFwcGVuZENoaWxkKGVsKS5kaXNhYmxlZCA9IHRydWVcclxuICAgICAgICAgIGlmIChlbC5xdWVyeVNlbGVjdG9yQWxsKCc6ZGlzYWJsZWQnKS5sZW5ndGggIT09IDIpIHtcclxuICAgICAgICAgICAgcmJ1Z2d5UVNBLnB1c2goJzplbmFibGVkJywgJzpkaXNhYmxlZCcpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZWwucXVlcnlTZWxlY3RvckFsbCgnKiw6eCcpXHJcbiAgICAgICAgICByYnVnZ3lRU0EucHVzaCgnLC4qOicpXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIChzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdChcclxuICAgICAgICAgIChtYXRjaGVzID1cclxuICAgICAgICAgICAgZG9jRWxlbS5tYXRjaGVzIHx8XHJcbiAgICAgICAgICAgIGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XHJcbiAgICAgICAgICAgIGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XHJcbiAgICAgICAgICAgIGRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fFxyXG4gICAgICAgICAgICBkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yKVxyXG4gICAgICAgICkpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGFzc2VydChmdW5jdGlvbihlbCkge1xyXG4gICAgICAgICAgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbChlbCwgJyonKVxyXG5cclxuICAgICAgICAgIG1hdGNoZXMuY2FsbChlbCwgXCJbcyE9JyddOnhcIilcclxuICAgICAgICAgIHJidWdneU1hdGNoZXMucHVzaCgnIT0nLCBwc2V1ZG9zKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cChyYnVnZ3lRU0Euam9pbignfCcpKVxyXG4gICAgICByYnVnZ3lNYXRjaGVzID1cclxuICAgICAgICByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKHJidWdneU1hdGNoZXMuam9pbignfCcpKVxyXG5cclxuICAgICAgLyogQ29udGFpbnNcclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcbiAgICAgIGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbilcclxuXHJcbiAgICAgIGNvbnRhaW5zID1cclxuICAgICAgICBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdChkb2NFbGVtLmNvbnRhaW5zKVxyXG4gICAgICAgICAgPyBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICAgICAgICAgIHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGFcclxuXHJcbiAgICAgICAgICAgIHZhciBidXAgPSBiICYmIGIucGFyZW50Tm9kZVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIGEgPT09IGJ1cCB8fFxyXG4gICAgICAgICAgICAgICAgISEoXHJcbiAgICAgICAgICAgICAgICAgIGJ1cCAmJlxyXG4gICAgICAgICAgICAgICAgICBidXAubm9kZVR5cGUgPT09IDEgJiZcclxuICAgICAgICAgICAgICAgICAgKGFkb3duLmNvbnRhaW5zXHJcbiAgICAgICAgICAgICAgICAgICAgPyBhZG93bi5jb250YWlucyhidXApXHJcbiAgICAgICAgICAgICAgICAgICAgOiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGJ1cCkgJiAxNilcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgOiBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICAgICAgICAgIGlmIChiKSB7XHJcbiAgICAgICAgICAgICAgd2hpbGUgKChiID0gYi5wYXJlbnROb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGIgPT09IGEpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAvKiBTb3J0aW5nXHJcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgc29ydE9yZGVyID0gaGFzQ29tcGFyZVxyXG4gICAgICAgID8gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgICAgICAgaWYgKGEgPT09IGIpIHtcclxuICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1ZVxyXG4gICAgICAgICAgICByZXR1cm4gMFxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHZhciBjb21wYXJlID1cclxuICAgICAgICAgICAgICAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXHJcbiAgICAgICAgICBpZiAoY29tcGFyZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29tcGFyZVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbXBhcmUgPVxyXG4gICAgICAgICAgICAgIChhLm93bmVyRG9jdW1lbnQgfHwgYSkgPT09IChiLm93bmVyRG9jdW1lbnQgfHwgYilcclxuICAgICAgICAgICAgICAgID8gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKVxyXG4gICAgICAgICAgICAgICAgOiAxXHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBjb21wYXJlICYgMSB8fFxyXG4gICAgICAgICAgICAgICghc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiZcclxuICAgICAgICAgICAgICAgIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkgPT09IGNvbXBhcmUpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIGEgPT09IGRvY3VtZW50IHx8XHJcbiAgICAgICAgICAgICAgICAoYS5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBhKSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIC0xXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIGIgPT09IGRvY3VtZW50IHx8XHJcbiAgICAgICAgICAgICAgICAoYi5vd25lckRvY3VtZW50ID09PSBwcmVmZXJyZWREb2MgJiYgY29udGFpbnMocHJlZmVycmVkRG9jLCBiKSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIDFcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHNvcnRJbnB1dFxyXG4gICAgICAgICAgICAgID8gaW5kZXhPZihzb3J0SW5wdXQsIGEpIC0gaW5kZXhPZihzb3J0SW5wdXQsIGIpXHJcbiAgICAgICAgICAgICAgOiAwXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxXHJcbiAgICAgICAgfVxyXG4gICAgICAgIDogZnVuY3Rpb24oYSwgYikge1xyXG4gICAgICAgICAgaWYgKGEgPT09IGIpIHtcclxuICAgICAgICAgICAgaGFzRHVwbGljYXRlID0gdHJ1ZVxyXG4gICAgICAgICAgICByZXR1cm4gMFxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHZhciBjdXJcclxuXHJcbiAgICAgICAgICB2YXIgaSA9IDBcclxuXHJcbiAgICAgICAgICB2YXIgYXVwID0gYS5wYXJlbnROb2RlXHJcblxyXG4gICAgICAgICAgdmFyIGJ1cCA9IGIucGFyZW50Tm9kZVxyXG5cclxuICAgICAgICAgIHZhciBhcCA9IFthXVxyXG5cclxuICAgICAgICAgIHZhciBicCA9IFtiXVxyXG5cclxuICAgICAgICAgIGlmICghYXVwIHx8ICFidXApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGEgPT09IGRvY3VtZW50XHJcbiAgICAgICAgICAgICAgPyAtMVxyXG4gICAgICAgICAgICAgIDogYiA9PT0gZG9jdW1lbnRcclxuICAgICAgICAgICAgICAgID8gMVxyXG4gICAgICAgICAgICAgICAgOiBhdXBcclxuICAgICAgICAgICAgICAgICAgPyAtMVxyXG4gICAgICAgICAgICAgICAgICA6IGJ1cFxyXG4gICAgICAgICAgICAgICAgICAgID8gMVxyXG4gICAgICAgICAgICAgICAgICAgIDogc29ydElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICA/IGluZGV4T2Yoc29ydElucHV0LCBhKSAtIGluZGV4T2Yoc29ydElucHV0LCBiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgOiAwXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGF1cCA9PT0gYnVwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzaWJsaW5nQ2hlY2soYSwgYilcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjdXIgPSBhXHJcbiAgICAgICAgICB3aGlsZSAoKGN1ciA9IGN1ci5wYXJlbnROb2RlKSkge1xyXG4gICAgICAgICAgICBhcC51bnNoaWZ0KGN1cilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGN1ciA9IGJcclxuICAgICAgICAgIHdoaWxlICgoY3VyID0gY3VyLnBhcmVudE5vZGUpKSB7XHJcbiAgICAgICAgICAgIGJwLnVuc2hpZnQoY3VyKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHdoaWxlIChhcFtpXSA9PT0gYnBbaV0pIHtcclxuICAgICAgICAgICAgaSsrXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGlcclxuICAgICAgICAgICAgPyBzaWJsaW5nQ2hlY2soYXBbaV0sIGJwW2ldKVxyXG4gICAgICAgICAgICA6IGFwW2ldID09PSBwcmVmZXJyZWREb2NcclxuICAgICAgICAgICAgICA/IC0xXHJcbiAgICAgICAgICAgICAgOiBicFtpXSA9PT0gcHJlZmVycmVkRG9jXHJcbiAgICAgICAgICAgICAgICA/IDFcclxuICAgICAgICAgICAgICAgIDogMFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBkb2N1bWVudFxyXG4gICAgfVxyXG5cclxuICAgIFNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oZXhwciwgZWxlbWVudHMpIHtcclxuICAgICAgcmV0dXJuIFNpenpsZShleHByLCBudWxsLCBudWxsLCBlbGVtZW50cylcclxuICAgIH1cclxuXHJcbiAgICBTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oZWxlbSwgZXhwcikge1xyXG4gICAgICBpZiAoKGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtKSAhPT0gZG9jdW1lbnQpIHtcclxuICAgICAgICBzZXREb2N1bWVudChlbGVtKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBleHByID0gZXhwci5yZXBsYWNlKHJhdHRyaWJ1dGVRdW90ZXMsIFwiPSckMSddXCIpXHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgJiZcclxuICAgICAgICBkb2N1bWVudElzSFRNTCAmJlxyXG4gICAgICAgICFjb21waWxlckNhY2hlW2V4cHIgKyAnICddICYmXHJcbiAgICAgICAgKCFyYnVnZ3lNYXRjaGVzIHx8ICFyYnVnZ3lNYXRjaGVzLnRlc3QoZXhwcikpICYmXHJcbiAgICAgICAgKCFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KGV4cHIpKVxyXG4gICAgICApIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdmFyIHJldCA9IG1hdGNoZXMuY2FsbChlbGVtLCBleHByKVxyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgcmV0IHx8XHJcbiAgICAgICAgICAgIHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcclxuICAgICAgICAgICAgKGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBTaXp6bGUoZXhwciwgZG9jdW1lbnQsIG51bGwsIFtlbGVtXSkubGVuZ3RoID4gMFxyXG4gICAgfVxyXG5cclxuICAgIFNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKGNvbnRleHQsIGVsZW0pIHtcclxuICAgICAgaWYgKChjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCkgIT09IGRvY3VtZW50KSB7XHJcbiAgICAgICAgc2V0RG9jdW1lbnQoY29udGV4dClcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29udGFpbnMoY29udGV4dCwgZWxlbSlcclxuICAgIH1cclxuXHJcbiAgICBTaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKGVsZW0sIG5hbWUpIHtcclxuICAgICAgaWYgKChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkgIT09IGRvY3VtZW50KSB7XHJcbiAgICAgICAgc2V0RG9jdW1lbnQoZWxlbSlcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGZuID0gRXhwci5hdHRySGFuZGxlW25hbWUudG9Mb3dlckNhc2UoKV1cclxuXHJcbiAgICAgIHZhciB2YWwgPVxyXG4gICAgICAgIGZuICYmIGhhc093bi5jYWxsKEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgPyBmbihlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwpXHJcbiAgICAgICAgICA6IHVuZGVmaW5lZFxyXG5cclxuICAgICAgcmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgPyB2YWxcclxuICAgICAgICA6IHN1cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9jdW1lbnRJc0hUTUxcclxuICAgICAgICAgID8gZWxlbS5nZXRBdHRyaWJ1dGUobmFtZSlcclxuICAgICAgICAgIDogKHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShuYW1lKSkgJiYgdmFsLnNwZWNpZmllZFxyXG4gICAgICAgICAgICA/IHZhbC52YWx1ZVxyXG4gICAgICAgICAgICA6IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBTaXp6bGUuZXNjYXBlID0gZnVuY3Rpb24oc2VsKSB7XHJcbiAgICAgIHJldHVybiAoc2VsICsgJycpLnJlcGxhY2UocmNzc2VzY2FwZSwgZmNzc2VzY2FwZSlcclxuICAgIH1cclxuXHJcbiAgICBTaXp6bGUuZXJyb3IgPSBmdW5jdGlvbihtc2cpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAnICsgbXNnKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlc1xyXG4gICAgICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHNcclxuICAgICAqL1xyXG4gICAgU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbihyZXN1bHRzKSB7XHJcbiAgICAgIHZhciBlbGVtXHJcblxyXG4gICAgICB2YXIgZHVwbGljYXRlcyA9IFtdXHJcblxyXG4gICAgICB2YXIgaiA9IDBcclxuXHJcbiAgICAgIHZhciBpID0gMFxyXG5cclxuICAgICAgaGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlc1xyXG4gICAgICBzb3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoMClcclxuICAgICAgcmVzdWx0cy5zb3J0KHNvcnRPcmRlcilcclxuXHJcbiAgICAgIGlmIChoYXNEdXBsaWNhdGUpIHtcclxuICAgICAgICB3aGlsZSAoKGVsZW0gPSByZXN1bHRzW2krK10pKSB7XHJcbiAgICAgICAgICBpZiAoZWxlbSA9PT0gcmVzdWx0c1tpXSkge1xyXG4gICAgICAgICAgICBqID0gZHVwbGljYXRlcy5wdXNoKGkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChqLS0pIHtcclxuICAgICAgICAgIHJlc3VsdHMuc3BsaWNlKGR1cGxpY2F0ZXNbal0sIDEpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzb3J0SW5wdXQgPSBudWxsXHJcblxyXG4gICAgICByZXR1cm4gcmVzdWx0c1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXNcclxuICAgICAqIEBwYXJhbSB7QXJyYXl8RWxlbWVudH0gZWxlbVxyXG4gICAgICovXHJcbiAgICBnZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgIHZhciBub2RlXHJcblxyXG4gICAgICB2YXIgcmV0ID0gJydcclxuXHJcbiAgICAgIHZhciBpID0gMFxyXG5cclxuICAgICAgdmFyIG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZVxyXG5cclxuICAgICAgaWYgKCFub2RlVHlwZSkge1xyXG4gICAgICAgIHdoaWxlICgobm9kZSA9IGVsZW1baSsrXSkpIHtcclxuICAgICAgICAgIHJldCArPSBnZXRUZXh0KG5vZGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIHJldHVybiBlbGVtLnRleHRDb250ZW50XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGZvciAoZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcpIHtcclxuICAgICAgICAgICAgcmV0ICs9IGdldFRleHQoZWxlbSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAobm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQpIHtcclxuICAgICAgICByZXR1cm4gZWxlbS5ub2RlVmFsdWVcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHJldFxyXG4gICAgfVxyXG5cclxuICAgIEV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xyXG4gICAgICBjYWNoZUxlbmd0aDogNTAsXHJcblxyXG4gICAgICBjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbixcclxuXHJcbiAgICAgIG1hdGNoOiBtYXRjaEV4cHIsXHJcblxyXG4gICAgICBhdHRySGFuZGxlOiB7fSxcclxuXHJcbiAgICAgIGZpbmQ6IHt9LFxyXG5cclxuICAgICAgcmVsYXRpdmU6IHtcclxuICAgICAgICAnPic6IHsgZGlyOiAncGFyZW50Tm9kZScsIGZpcnN0OiB0cnVlIH0sXHJcbiAgICAgICAgJyAnOiB7IGRpcjogJ3BhcmVudE5vZGUnIH0sXHJcbiAgICAgICAgJysnOiB7IGRpcjogJ3ByZXZpb3VzU2libGluZycsIGZpcnN0OiB0cnVlIH0sXHJcbiAgICAgICAgJ34nOiB7IGRpcjogJ3ByZXZpb3VzU2libGluZycgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgcHJlRmlsdGVyOiB7XHJcbiAgICAgICAgQVRUUjogZnVuY3Rpb24obWF0Y2gpIHtcclxuICAgICAgICAgIG1hdGNoWzFdID0gbWF0Y2hbMV0ucmVwbGFjZShydW5lc2NhcGUsIGZ1bmVzY2FwZSlcclxuXHJcbiAgICAgICAgICBtYXRjaFszXSA9IChtYXRjaFszXSB8fCBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCAnJykucmVwbGFjZShcclxuICAgICAgICAgICAgcnVuZXNjYXBlLFxyXG4gICAgICAgICAgICBmdW5lc2NhcGVcclxuICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICBpZiAobWF0Y2hbMl0gPT09ICd+PScpIHtcclxuICAgICAgICAgICAgbWF0Y2hbM10gPSAnICcgKyBtYXRjaFszXSArICcgJ1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiBtYXRjaC5zbGljZSgwLCA0KVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIENISUxEOiBmdW5jdGlvbihtYXRjaCkge1xyXG4gICAgICAgICAgbWF0Y2hbMV0gPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpXHJcblxyXG4gICAgICAgICAgaWYgKG1hdGNoWzFdLnNsaWNlKDAsIDMpID09PSAnbnRoJykge1xyXG4gICAgICAgICAgICBpZiAoIW1hdGNoWzNdKSB7XHJcbiAgICAgICAgICAgICAgU2l6emxlLmVycm9yKG1hdGNoWzBdKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBtYXRjaFs0XSA9ICsobWF0Y2hbNF1cclxuICAgICAgICAgICAgICA/IG1hdGNoWzVdICsgKG1hdGNoWzZdIHx8IDEpXHJcbiAgICAgICAgICAgICAgOiAyICogKG1hdGNoWzNdID09PSAnZXZlbicgfHwgbWF0Y2hbM10gPT09ICdvZGQnKSlcclxuICAgICAgICAgICAgbWF0Y2hbNV0gPSArKG1hdGNoWzddICsgbWF0Y2hbOF0gfHwgbWF0Y2hbM10gPT09ICdvZGQnKVxyXG4gICAgICAgICAgfSBlbHNlIGlmIChtYXRjaFszXSkge1xyXG4gICAgICAgICAgICBTaXp6bGUuZXJyb3IobWF0Y2hbMF0pXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIG1hdGNoXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgUFNFVURPOiBmdW5jdGlvbihtYXRjaCkge1xyXG4gICAgICAgICAgdmFyIGV4Y2Vzc1xyXG5cclxuICAgICAgICAgIHZhciB1bnF1b3RlZCA9ICFtYXRjaFs2XSAmJiBtYXRjaFsyXVxyXG5cclxuICAgICAgICAgIGlmIChtYXRjaEV4cHJbJ0NISUxEJ10udGVzdChtYXRjaFswXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobWF0Y2hbM10pIHtcclxuICAgICAgICAgICAgbWF0Y2hbMl0gPSBtYXRjaFs0XSB8fCBtYXRjaFs1XSB8fCAnJ1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgdW5xdW90ZWQgJiZcclxuICAgICAgICAgICAgcnBzZXVkby50ZXN0KHVucXVvdGVkKSAmJlxyXG4gICAgICAgICAgICAoZXhjZXNzID0gdG9rZW5pemUodW5xdW90ZWQsIHRydWUpKSAmJlxyXG4gICAgICAgICAgICAoZXhjZXNzID1cclxuICAgICAgICAgICAgICB1bnF1b3RlZC5pbmRleE9mKCcpJywgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzKSAtIHVucXVvdGVkLmxlbmd0aClcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKDAsIGV4Y2VzcylcclxuICAgICAgICAgICAgbWF0Y2hbMl0gPSB1bnF1b3RlZC5zbGljZSgwLCBleGNlc3MpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIG1hdGNoLnNsaWNlKDAsIDMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgZmlsdGVyOiB7XHJcbiAgICAgICAgVEFHOiBmdW5jdGlvbihub2RlTmFtZVNlbGVjdG9yKSB7XHJcbiAgICAgICAgICB2YXIgbm9kZU5hbWUgPSBub2RlTmFtZVNlbGVjdG9yXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKVxyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgcmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09ICcqJ1xyXG4gICAgICAgICAgICA/IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgOiBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgQ0xBU1M6IGZ1bmN0aW9uKGNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgdmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlW2NsYXNzTmFtZSArICcgJ11cclxuXHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBwYXR0ZXJuIHx8XHJcbiAgICAgICAgICAgICgocGF0dGVybiA9IG5ldyBSZWdFeHAoXHJcbiAgICAgICAgICAgICAgJyhefCcgKyB3aGl0ZXNwYWNlICsgJyknICsgY2xhc3NOYW1lICsgJygnICsgd2hpdGVzcGFjZSArICd8JCknXHJcbiAgICAgICAgICAgICkpICYmXHJcbiAgICAgICAgICAgICAgY2xhc3NDYWNoZShjbGFzc05hbWUsIGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QoXHJcbiAgICAgICAgICAgICAgICAgICh0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIGVsZW0uY2xhc3NOYW1lKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09ICd1bmRlZmluZWQnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAnJ1xyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIEFUVFI6IGZ1bmN0aW9uKG5hbWUsIG9wZXJhdG9yLCBjaGVjaykge1xyXG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKGVsZW0sIG5hbWUpXHJcblxyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0b3IgPT09ICchPSdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIW9wZXJhdG9yKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzdWx0ICs9ICcnXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gb3BlcmF0b3IgPT09ICc9J1xyXG4gICAgICAgICAgICAgID8gcmVzdWx0ID09PSBjaGVja1xyXG4gICAgICAgICAgICAgIDogb3BlcmF0b3IgPT09ICchPSdcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0ICE9PSBjaGVja1xyXG4gICAgICAgICAgICAgICAgOiBvcGVyYXRvciA9PT0gJ149J1xyXG4gICAgICAgICAgICAgICAgICA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKGNoZWNrKSA9PT0gMFxyXG4gICAgICAgICAgICAgICAgICA6IG9wZXJhdG9yID09PSAnKj0nXHJcbiAgICAgICAgICAgICAgICAgICAgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZihjaGVjaykgPiAtMVxyXG4gICAgICAgICAgICAgICAgICAgIDogb3BlcmF0b3IgPT09ICckPSdcclxuICAgICAgICAgICAgICAgICAgICAgID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKC1jaGVjay5sZW5ndGgpID09PSBjaGVja1xyXG4gICAgICAgICAgICAgICAgICAgICAgOiBvcGVyYXRvciA9PT0gJ349J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnICcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlcGxhY2UocndoaXRlc3BhY2UsICcgJykgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuaW5kZXhPZihjaGVjaykgPiAtMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG9wZXJhdG9yID09PSAnfD0nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyByZXN1bHQgPT09IGNoZWNrIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2xpY2UoMCwgY2hlY2subGVuZ3RoICsgMSkgPT09IGNoZWNrICsgJy0nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIENISUxEOiBmdW5jdGlvbih0eXBlLCB3aGF0LCBhcmd1bWVudCwgZmlyc3QsIGxhc3QpIHtcclxuICAgICAgICAgIHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKDAsIDMpICE9PSAnbnRoJ1xyXG5cclxuICAgICAgICAgIHZhciBmb3J3YXJkID0gdHlwZS5zbGljZSgtNCkgIT09ICdsYXN0J1xyXG5cclxuICAgICAgICAgIHZhciBvZlR5cGUgPSB3aGF0ID09PSAnb2YtdHlwZSdcclxuXHJcbiAgICAgICAgICByZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMFxyXG4gICAgICAgICAgICA/IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gISFlbGVtLnBhcmVudE5vZGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA6IGZ1bmN0aW9uKGVsZW0sIGNvbnRleHQsIHhtbCkge1xyXG4gICAgICAgICAgICAgIHZhciBjYWNoZVxyXG5cclxuICAgICAgICAgICAgICB2YXIgdW5pcXVlQ2FjaGVcclxuXHJcbiAgICAgICAgICAgICAgdmFyIG91dGVyQ2FjaGVcclxuXHJcbiAgICAgICAgICAgICAgdmFyIG5vZGVcclxuXHJcbiAgICAgICAgICAgICAgdmFyIG5vZGVJbmRleFxyXG5cclxuICAgICAgICAgICAgICB2YXIgc3RhcnRcclxuXHJcbiAgICAgICAgICAgICAgdmFyIGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/ICduZXh0U2libGluZycgOiAncHJldmlvdXNTaWJsaW5nJ1xyXG5cclxuICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlXHJcblxyXG4gICAgICAgICAgICAgIHZhciBuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKVxyXG5cclxuICAgICAgICAgICAgICB2YXIgdXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGVcclxuXHJcbiAgICAgICAgICAgICAgdmFyIGRpZmYgPSBmYWxzZVxyXG5cclxuICAgICAgICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2ltcGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHdoaWxlIChkaXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxlbVxyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgobm9kZSA9IG5vZGVbZGlyXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2ZUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5vZGUubm9kZVR5cGUgPT09IDFcclxuICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBkaXIgPSB0eXBlID09PSAnb25seScgJiYgIXN0YXJ0ICYmICduZXh0U2libGluZydcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gW2ZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGRdXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZvcndhcmQgJiYgdXNlQ2FjaGUpIHtcclxuICAgICAgICAgICAgICAgICAgbm9kZSA9IHBhcmVudFxyXG4gICAgICAgICAgICAgICAgICBvdXRlckNhY2hlID0gbm9kZVtleHBhbmRvXSB8fCAobm9kZVtleHBhbmRvXSA9IHt9KVxyXG5cclxuICAgICAgICAgICAgICAgICAgdW5pcXVlQ2FjaGUgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgb3V0ZXJDYWNoZVtub2RlLnVuaXF1ZUlEXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgKG91dGVyQ2FjaGVbbm9kZS51bmlxdWVJRF0gPSB7fSlcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNhY2hlID0gdW5pcXVlQ2FjaGVbdHlwZV0gfHwgW11cclxuICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gY2FjaGVbMF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbMV1cclxuICAgICAgICAgICAgICAgICAgZGlmZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsyXVxyXG4gICAgICAgICAgICAgICAgICBub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzW25vZGVJbmRleF1cclxuXHJcbiAgICAgICAgICAgICAgICAgIHdoaWxlIChcclxuICAgICAgICAgICAgICAgICAgICAobm9kZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICgrK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbZGlyXSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydC5wb3AoKSlcclxuICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUNhY2hlW3R5cGVdID0gW2RpcnJ1bnMsIG5vZGVJbmRleCwgZGlmZl1cclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodXNlQ2FjaGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBub2RlID0gZWxlbVxyXG4gICAgICAgICAgICAgICAgICAgIG91dGVyQ2FjaGUgPSBub2RlW2V4cGFuZG9dIHx8IChub2RlW2V4cGFuZG9dID0ge30pXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHVuaXF1ZUNhY2hlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJDYWNoZVtub2RlLnVuaXF1ZUlEXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAob3V0ZXJDYWNoZVtub2RlLnVuaXF1ZUlEXSA9IHt9KVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IHVuaXF1ZUNhY2hlW3R5cGVdIHx8IFtdXHJcbiAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gY2FjaGVbMF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbMV1cclxuICAgICAgICAgICAgICAgICAgICBkaWZmID0gbm9kZUluZGV4XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmIChkaWZmID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChcclxuICAgICAgICAgICAgICAgICAgICAgIChub2RlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlW2Rpcl0pIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpZmYgPSBub2RlSW5kZXggPSAwKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LnBvcCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAob2ZUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5vZGUubm9kZVR5cGUgPT09IDEpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKytkaWZmXHJcbiAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZUNhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJDYWNoZSA9IG5vZGVbZXhwYW5kb10gfHwgKG5vZGVbZXhwYW5kb10gPSB7fSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlQ2FjaGUgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlckNhY2hlW25vZGUudW5pcXVlSURdIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvdXRlckNhY2hlW25vZGUudW5pcXVlSURdID0ge30pXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZUNhY2hlW3R5cGVdID0gW2RpcnJ1bnMsIGRpZmZdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlID09PSBlbGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGRpZmYgLT0gbGFzdFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgZGlmZiA9PT0gZmlyc3QgfHwgKGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMClcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBQU0VVRE86IGZ1bmN0aW9uKHBzZXVkbywgYXJndW1lbnQpIHtcclxuICAgICAgICAgIHZhciBhcmdzXHJcblxyXG4gICAgICAgICAgdmFyIGZuID1cclxuICAgICAgICAgICAgRXhwci5wc2V1ZG9zW3BzZXVkb10gfHxcclxuICAgICAgICAgICAgRXhwci5zZXRGaWx0ZXJzW3BzZXVkby50b0xvd2VyQ2FzZSgpXSB8fFxyXG4gICAgICAgICAgICBTaXp6bGUuZXJyb3IoJ3Vuc3VwcG9ydGVkIHBzZXVkbzogJyArIHBzZXVkbylcclxuXHJcbiAgICAgICAgICBpZiAoZm5bZXhwYW5kb10pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZuKGFyZ3VtZW50KVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChmbi5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIGFyZ3MgPSBbcHNldWRvLCBwc2V1ZG8sICcnLCBhcmd1bWVudF1cclxuICAgICAgICAgICAgcmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShwc2V1ZG8udG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgICAgICA/IG1hcmtGdW5jdGlvbihmdW5jdGlvbihzZWVkLCBtYXRjaGVzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaWR4XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIG1hdGNoZWQgPSBmbihzZWVkLCBhcmd1bWVudClcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgaSA9IG1hdGNoZWQubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlkeCA9IGluZGV4T2Yoc2VlZCwgbWF0Y2hlZFtpXSlcclxuICAgICAgICAgICAgICAgICAgc2VlZFtpZHhdID0gIShtYXRjaGVzW2lkeF0gPSBtYXRjaGVkW2ldKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgOiBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4oZWxlbSwgMCwgYXJncylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGZuXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgcHNldWRvczoge1xyXG4gICAgICAgIG5vdDogbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKHNlbGVjdG9yKSB7XHJcbiAgICAgICAgICB2YXIgaW5wdXQgPSBbXVxyXG5cclxuICAgICAgICAgIHZhciByZXN1bHRzID0gW11cclxuXHJcbiAgICAgICAgICB2YXIgbWF0Y2hlciA9IGNvbXBpbGUoc2VsZWN0b3IucmVwbGFjZShydHJpbSwgJyQxJykpXHJcblxyXG4gICAgICAgICAgcmV0dXJuIG1hdGNoZXJbZXhwYW5kb11cclxuICAgICAgICAgICAgPyBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oc2VlZCwgbWF0Y2hlcywgY29udGV4dCwgeG1sKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGVsZW1cclxuXHJcbiAgICAgICAgICAgICAgdmFyIHVubWF0Y2hlZCA9IG1hdGNoZXIoc2VlZCwgbnVsbCwgeG1sLCBbXSlcclxuXHJcbiAgICAgICAgICAgICAgdmFyIGkgPSBzZWVkLmxlbmd0aFxyXG5cclxuICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGVsZW0gPSB1bm1hdGNoZWRbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNlZWRbaV0gPSAhKG1hdGNoZXNbaV0gPSBlbGVtKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgOiBmdW5jdGlvbihlbGVtLCBjb250ZXh0LCB4bWwpIHtcclxuICAgICAgICAgICAgICBpbnB1dFswXSA9IGVsZW1cclxuICAgICAgICAgICAgICBtYXRjaGVyKGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMpXHJcbiAgICAgICAgICAgICAgaW5wdXRbMF0gPSBudWxsXHJcbiAgICAgICAgICAgICAgcmV0dXJuICFyZXN1bHRzLnBvcCgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgaGFzOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oc2VsZWN0b3IpIHtcclxuICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBTaXp6bGUoc2VsZWN0b3IsIGVsZW0pLmxlbmd0aCA+IDBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgY29udGFpbnM6IG1hcmtGdW5jdGlvbihmdW5jdGlvbih0ZXh0KSB7XHJcbiAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHJ1bmVzY2FwZSwgZnVuZXNjYXBlKVxyXG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAoZWxlbS50ZXh0Q29udGVudCB8fCBlbGVtLmlubmVyVGV4dCB8fCBnZXRUZXh0KGVsZW0pKS5pbmRleE9mKFxyXG4gICAgICAgICAgICAgICAgdGV4dFxyXG4gICAgICAgICAgICAgICkgPiAtMVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIGxhbmc6IG1hcmtGdW5jdGlvbihmdW5jdGlvbihsYW5nKSB7XHJcbiAgICAgICAgICBpZiAoIXJpZGVudGlmaWVyLnRlc3QobGFuZyB8fCAnJykpIHtcclxuICAgICAgICAgICAgU2l6emxlLmVycm9yKCd1bnN1cHBvcnRlZCBsYW5nOiAnICsgbGFuZylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxhbmcgPSBsYW5nLnJlcGxhY2UocnVuZXNjYXBlLCBmdW5lc2NhcGUpLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgIHJldHVybiBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgICAgIHZhciBlbGVtTGFuZ1xyXG4gICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgKGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUxcclxuICAgICAgICAgICAgICAgICAgPyBlbGVtLmxhbmdcclxuICAgICAgICAgICAgICAgICAgOiBlbGVtLmdldEF0dHJpYnV0ZSgneG1sOmxhbmcnKSB8fCBlbGVtLmdldEF0dHJpYnV0ZSgnbGFuZycpKVxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZihsYW5nICsgJy0nKSA9PT0gMFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSB3aGlsZSAoKGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpICYmIGVsZW0ubm9kZVR5cGUgPT09IDEpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgICB0YXJnZXQ6IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICAgIHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoXHJcbiAgICAgICAgICByZXR1cm4gaGFzaCAmJiBoYXNoLnNsaWNlKDEpID09PSBlbGVtLmlkXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgcm9vdDogZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGRvY0VsZW1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBmb2N1czogZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJlxyXG4gICAgICAgICAgICAoIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkpICYmXHJcbiAgICAgICAgICAgICEhKGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXgpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgZW5hYmxlZDogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oZmFsc2UpLFxyXG4gICAgICAgIGRpc2FibGVkOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyh0cnVlKSxcclxuXHJcbiAgICAgICAgY2hlY2tlZDogZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICAgICAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAobm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgISFlbGVtLmNoZWNrZWQpIHx8XHJcbiAgICAgICAgICAgIChub2RlTmFtZSA9PT0gJ29wdGlvbicgJiYgISFlbGVtLnNlbGVjdGVkKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNlbGVjdGVkOiBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgICBpZiAoZWxlbS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgIGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWVcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBlbXB0eTogZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICAgICAgZm9yIChlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZykge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5ub2RlVHlwZSA8IDYpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBwYXJlbnQ6IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICAgIHJldHVybiAhRXhwci5wc2V1ZG9zWydlbXB0eSddKGVsZW0pXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgaGVhZGVyOiBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgICByZXR1cm4gcmhlYWRlci50ZXN0KGVsZW0ubm9kZU5hbWUpXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICAgIHJldHVybiByaW5wdXRzLnRlc3QoZWxlbS5ub2RlTmFtZSlcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBidXR0b246IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICAgIHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAobmFtZSA9PT0gJ2lucHV0JyAmJiBlbGVtLnR5cGUgPT09ICdidXR0b24nKSB8fCBuYW1lID09PSAnYnV0dG9uJ1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHRleHQ6IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICAgIHZhciBhdHRyXHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgJiZcclxuICAgICAgICAgICAgZWxlbS50eXBlID09PSAndGV4dCcgJiZcclxuICAgICAgICAgICAgKChhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSkgPT0gbnVsbCB8fFxyXG4gICAgICAgICAgICAgIGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gJ3RleHQnKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGZpcnN0OiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgcmV0dXJuIFswXVxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgICBsYXN0OiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKG1hdGNoSW5kZXhlcywgbGVuZ3RoKSB7XHJcbiAgICAgICAgICByZXR1cm4gW2xlbmd0aCAtIDFdXHJcbiAgICAgICAgfSksXHJcblxyXG4gICAgICAgIGVxOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCkge1xyXG4gICAgICAgICAgcmV0dXJuIFthcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50XVxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgICBldmVuOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKG1hdGNoSW5kZXhlcywgbGVuZ3RoKSB7XHJcbiAgICAgICAgICB2YXIgaSA9IDBcclxuICAgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goaSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXNcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgb2RkOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKG1hdGNoSW5kZXhlcywgbGVuZ3RoKSB7XHJcbiAgICAgICAgICB2YXIgaSA9IDFcclxuICAgICAgICAgIGZvciAoOyBpIDwgbGVuZ3RoOyBpICs9IDIpIHtcclxuICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goaSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXNcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgbHQ6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24obWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50KSB7XHJcbiAgICAgICAgICB2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnRcclxuICAgICAgICAgIGZvciAoOyAtLWkgPj0gMDspIHtcclxuICAgICAgICAgICAgbWF0Y2hJbmRleGVzLnB1c2goaSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBtYXRjaEluZGV4ZXNcclxuICAgICAgICB9KSxcclxuXHJcbiAgICAgICAgZ3Q6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24obWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50KSB7XHJcbiAgICAgICAgICB2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnRcclxuICAgICAgICAgIGZvciAoOyArK2kgPCBsZW5ndGg7KSB7XHJcbiAgICAgICAgICAgIG1hdGNoSW5kZXhlcy5wdXNoKGkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbWF0Y2hJbmRleGVzXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEV4cHIucHNldWRvc1snbnRoJ10gPSBFeHByLnBzZXVkb3NbJ2VxJ11cclxuXHJcbiAgICBmb3IgKGkgaW4ge1xyXG4gICAgICByYWRpbzogdHJ1ZSxcclxuICAgICAgY2hlY2tib3g6IHRydWUsXHJcbiAgICAgIGZpbGU6IHRydWUsXHJcbiAgICAgIHBhc3N3b3JkOiB0cnVlLFxyXG4gICAgICBpbWFnZTogdHJ1ZVxyXG4gICAgfSkge1xyXG4gICAgICBFeHByLnBzZXVkb3NbaV0gPSBjcmVhdGVJbnB1dFBzZXVkbyhpKVxyXG4gICAgfVxyXG4gICAgZm9yIChpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9KSB7XHJcbiAgICAgIEV4cHIucHNldWRvc1tpXSA9IGNyZWF0ZUJ1dHRvblBzZXVkbyhpKVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fVxyXG4gICAgc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZpbHRlcnMgPSBFeHByLnBzZXVkb3NcclxuICAgIEV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKClcclxuXHJcbiAgICB0b2tlbml6ZSA9IFNpenpsZS50b2tlbml6ZSA9IGZ1bmN0aW9uKHNlbGVjdG9yLCBwYXJzZU9ubHkpIHtcclxuICAgICAgdmFyIG1hdGNoZWRcclxuXHJcbiAgICAgIHZhciBtYXRjaFxyXG5cclxuICAgICAgdmFyIHRva2Vuc1xyXG5cclxuICAgICAgdmFyIHR5cGVcclxuXHJcbiAgICAgIHZhciBzb0ZhclxyXG5cclxuICAgICAgdmFyIGdyb3Vwc1xyXG5cclxuICAgICAgdmFyIHByZUZpbHRlcnNcclxuXHJcbiAgICAgIHZhciBjYWNoZWQgPSB0b2tlbkNhY2hlW3NlbGVjdG9yICsgJyAnXVxyXG5cclxuICAgICAgaWYgKGNhY2hlZCkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKDApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNvRmFyID0gc2VsZWN0b3JcclxuICAgICAgZ3JvdXBzID0gW11cclxuICAgICAgcHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyXHJcblxyXG4gICAgICB3aGlsZSAoc29GYXIpIHtcclxuICAgICAgICBpZiAoIW1hdGNoZWQgfHwgKG1hdGNoID0gcmNvbW1hLmV4ZWMoc29GYXIpKSkge1xyXG4gICAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIHNvRmFyID0gc29GYXIuc2xpY2UobWF0Y2hbMF0ubGVuZ3RoKSB8fCBzb0ZhclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZ3JvdXBzLnB1c2goKHRva2VucyA9IFtdKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1hdGNoZWQgPSBmYWxzZVxyXG5cclxuICAgICAgICBpZiAoKG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoc29GYXIpKSkge1xyXG4gICAgICAgICAgbWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KClcclxuICAgICAgICAgIHRva2Vucy5wdXNoKHtcclxuICAgICAgICAgICAgdmFsdWU6IG1hdGNoZWQsXHJcbiAgICAgICAgICAgIHR5cGU6IG1hdGNoWzBdLnJlcGxhY2UocnRyaW0sICcgJylcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKG1hdGNoZWQubGVuZ3RoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh0eXBlIGluIEV4cHIuZmlsdGVyKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChtYXRjaCA9IG1hdGNoRXhwclt0eXBlXS5leGVjKHNvRmFyKSkgJiZcclxuICAgICAgICAgICAgKCFwcmVGaWx0ZXJzW3R5cGVdIHx8IChtYXRjaCA9IHByZUZpbHRlcnNbdHlwZV0obWF0Y2gpKSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBtYXRjaGVkID0gbWF0Y2guc2hpZnQoKVxyXG4gICAgICAgICAgICB0b2tlbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgdmFsdWU6IG1hdGNoZWQsXHJcbiAgICAgICAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICAgICAgICBtYXRjaGVzOiBtYXRjaFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBzb0ZhciA9IHNvRmFyLnNsaWNlKG1hdGNoZWQubGVuZ3RoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFtYXRjaGVkKSB7XHJcbiAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHBhcnNlT25seVxyXG4gICAgICAgID8gc29GYXIubGVuZ3RoXHJcbiAgICAgICAgOiBzb0ZhclxyXG4gICAgICAgICAgPyBTaXp6bGUuZXJyb3Ioc2VsZWN0b3IpXHJcbiAgICAgICAgICA6IHRva2VuQ2FjaGUoc2VsZWN0b3IsIGdyb3Vwcykuc2xpY2UoMClcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB0b1NlbGVjdG9yKHRva2Vucykge1xyXG4gICAgICB2YXIgaSA9IDBcclxuXHJcbiAgICAgIHZhciBsZW4gPSB0b2tlbnMubGVuZ3RoXHJcblxyXG4gICAgICB2YXIgc2VsZWN0b3IgPSAnJ1xyXG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgc2VsZWN0b3IgKz0gdG9rZW5zW2ldLnZhbHVlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHNlbGVjdG9yXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gYWRkQ29tYmluYXRvcihtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlKSB7XHJcbiAgICAgIHZhciBkaXIgPSBjb21iaW5hdG9yLmRpclxyXG5cclxuICAgICAgdmFyIHNraXAgPSBjb21iaW5hdG9yLm5leHRcclxuXHJcbiAgICAgIHZhciBrZXkgPSBza2lwIHx8IGRpclxyXG5cclxuICAgICAgdmFyIGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gJ3BhcmVudE5vZGUnXHJcblxyXG4gICAgICB2YXIgZG9uZU5hbWUgPSBkb25lKytcclxuXHJcbiAgICAgIHJldHVybiBjb21iaW5hdG9yLmZpcnN0XHJcbiAgICAgICAgPyBmdW5jdGlvbihlbGVtLCBjb250ZXh0LCB4bWwpIHtcclxuICAgICAgICAgIHdoaWxlICgoZWxlbSA9IGVsZW1bZGlyXSkpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cykge1xyXG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGVsZW0sIGNvbnRleHQsIHhtbClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIDogZnVuY3Rpb24oZWxlbSwgY29udGV4dCwgeG1sKSB7XHJcbiAgICAgICAgICB2YXIgb2xkQ2FjaGVcclxuXHJcbiAgICAgICAgICB2YXIgdW5pcXVlQ2FjaGVcclxuXHJcbiAgICAgICAgICB2YXIgb3V0ZXJDYWNoZVxyXG5cclxuICAgICAgICAgIHZhciBuZXdDYWNoZSA9IFtkaXJydW5zLCBkb25lTmFtZV1cclxuXHJcbiAgICAgICAgICBpZiAoeG1sKSB7XHJcbiAgICAgICAgICAgIHdoaWxlICgoZWxlbSA9IGVsZW1bZGlyXSkpIHtcclxuICAgICAgICAgICAgICBpZiAoZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcihlbGVtLCBjb250ZXh0LCB4bWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB3aGlsZSAoKGVsZW0gPSBlbGVtW2Rpcl0pKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cykge1xyXG4gICAgICAgICAgICAgICAgb3V0ZXJDYWNoZSA9IGVsZW1bZXhwYW5kb10gfHwgKGVsZW1bZXhwYW5kb10gPSB7fSlcclxuXHJcbiAgICAgICAgICAgICAgICB1bmlxdWVDYWNoZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0ZXJDYWNoZVtlbGVtLnVuaXF1ZUlEXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChvdXRlckNhY2hlW2VsZW0udW5pcXVlSURdID0ge30pXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNraXAgJiYgc2tpcCA9PT0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGVsZW0gPSBlbGVtW2Rpcl0gfHwgZWxlbVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgKG9sZENhY2hlID0gdW5pcXVlQ2FjaGVba2V5XSkgJiZcclxuICAgICAgICAgICAgICAgICAgICBvbGRDYWNoZVswXSA9PT0gZGlycnVucyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIG9sZENhY2hlWzFdID09PSBkb25lTmFtZVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiAobmV3Q2FjaGVbMl0gPSBvbGRDYWNoZVsyXSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHVuaXF1ZUNhY2hlW2tleV0gPSBuZXdDYWNoZVxyXG5cclxuICAgICAgICAgICAgICAgICAgaWYgKChuZXdDYWNoZVsyXSA9IG1hdGNoZXIoZWxlbSwgY29udGV4dCwgeG1sKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIobWF0Y2hlcnMpIHtcclxuICAgICAgcmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDFcclxuICAgICAgICA/IGZ1bmN0aW9uKGVsZW0sIGNvbnRleHQsIHhtbCkge1xyXG4gICAgICAgICAgdmFyIGkgPSBtYXRjaGVycy5sZW5ndGhcclxuICAgICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgICAgaWYgKCFtYXRjaGVyc1tpXShlbGVtLCBjb250ZXh0LCB4bWwpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIDogbWF0Y2hlcnNbMF1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cykge1xyXG4gICAgICB2YXIgaSA9IDBcclxuXHJcbiAgICAgIHZhciBsZW4gPSBjb250ZXh0cy5sZW5ndGhcclxuICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIFNpenpsZShzZWxlY3RvciwgY29udGV4dHNbaV0sIHJlc3VsdHMpXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdHNcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjb25kZW5zZSh1bm1hdGNoZWQsIG1hcCwgZmlsdGVyLCBjb250ZXh0LCB4bWwpIHtcclxuICAgICAgdmFyIGVsZW1cclxuXHJcbiAgICAgIHZhciBuZXdVbm1hdGNoZWQgPSBbXVxyXG5cclxuICAgICAgdmFyIGkgPSAwXHJcblxyXG4gICAgICB2YXIgbGVuID0gdW5tYXRjaGVkLmxlbmd0aFxyXG5cclxuICAgICAgdmFyIG1hcHBlZCA9IG1hcCAhPSBudWxsXHJcblxyXG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgaWYgKChlbGVtID0gdW5tYXRjaGVkW2ldKSkge1xyXG4gICAgICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKGVsZW0sIGNvbnRleHQsIHhtbCkpIHtcclxuICAgICAgICAgICAgbmV3VW5tYXRjaGVkLnB1c2goZWxlbSlcclxuICAgICAgICAgICAgaWYgKG1hcHBlZCkge1xyXG4gICAgICAgICAgICAgIG1hcC5wdXNoKGkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBuZXdVbm1hdGNoZWRcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzZXRNYXRjaGVyKFxyXG4gICAgICBwcmVGaWx0ZXIsXHJcbiAgICAgIHNlbGVjdG9yLFxyXG4gICAgICBtYXRjaGVyLFxyXG4gICAgICBwb3N0RmlsdGVyLFxyXG4gICAgICBwb3N0RmluZGVyLFxyXG4gICAgICBwb3N0U2VsZWN0b3JcclxuICAgICkge1xyXG4gICAgICBpZiAocG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlcltleHBhbmRvXSkge1xyXG4gICAgICAgIHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKHBvc3RGaWx0ZXIpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbZXhwYW5kb10pIHtcclxuICAgICAgICBwb3N0RmluZGVyID0gc2V0TWF0Y2hlcihwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IpXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbihzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwpIHtcclxuICAgICAgICB2YXIgdGVtcFxyXG5cclxuICAgICAgICB2YXIgaVxyXG5cclxuICAgICAgICB2YXIgZWxlbVxyXG5cclxuICAgICAgICB2YXIgcHJlTWFwID0gW11cclxuXHJcbiAgICAgICAgdmFyIHBvc3RNYXAgPSBbXVxyXG5cclxuICAgICAgICB2YXIgcHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aFxyXG5cclxuICAgICAgICB2YXIgZWxlbXMgPVxyXG4gICAgICAgICAgc2VlZCB8fFxyXG4gICAgICAgICAgbXVsdGlwbGVDb250ZXh0cyhcclxuICAgICAgICAgICAgc2VsZWN0b3IgfHwgJyonLFxyXG4gICAgICAgICAgICBjb250ZXh0Lm5vZGVUeXBlID8gW2NvbnRleHRdIDogY29udGV4dCxcclxuICAgICAgICAgICAgW11cclxuICAgICAgICAgIClcclxuXHJcbiAgICAgICAgdmFyIG1hdGNoZXJJbiA9XHJcbiAgICAgICAgICBwcmVGaWx0ZXIgJiYgKHNlZWQgfHwgIXNlbGVjdG9yKVxyXG4gICAgICAgICAgICA/IGNvbmRlbnNlKGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sKVxyXG4gICAgICAgICAgICA6IGVsZW1zXHJcblxyXG4gICAgICAgIHZhciBtYXRjaGVyT3V0ID0gbWF0Y2hlclxyXG4gICAgICAgICAgPyBwb3N0RmluZGVyIHx8IChzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlcilcclxuICAgICAgICAgICAgPyBbXVxyXG4gICAgICAgICAgICA6IHJlc3VsdHNcclxuICAgICAgICAgIDogbWF0Y2hlckluXHJcblxyXG4gICAgICAgIGlmIChtYXRjaGVyKSB7XHJcbiAgICAgICAgICBtYXRjaGVyKG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHBvc3RGaWx0ZXIpIHtcclxuICAgICAgICAgIHRlbXAgPSBjb25kZW5zZShtYXRjaGVyT3V0LCBwb3N0TWFwKVxyXG4gICAgICAgICAgcG9zdEZpbHRlcih0ZW1wLCBbXSwgY29udGV4dCwgeG1sKVxyXG5cclxuICAgICAgICAgIGkgPSB0ZW1wLmxlbmd0aFxyXG4gICAgICAgICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgICAgICBpZiAoKGVsZW0gPSB0ZW1wW2ldKSkge1xyXG4gICAgICAgICAgICAgIG1hdGNoZXJPdXRbcG9zdE1hcFtpXV0gPSAhKG1hdGNoZXJJbltwb3N0TWFwW2ldXSA9IGVsZW0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZWVkKSB7XHJcbiAgICAgICAgICBpZiAocG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIpIHtcclxuICAgICAgICAgICAgaWYgKHBvc3RGaW5kZXIpIHtcclxuICAgICAgICAgICAgICB0ZW1wID0gW11cclxuICAgICAgICAgICAgICBpID0gbWF0Y2hlck91dC5sZW5ndGhcclxuICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSkge1xyXG4gICAgICAgICAgICAgICAgICB0ZW1wLnB1c2goKG1hdGNoZXJJbltpXSA9IGVsZW0pKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBwb3N0RmluZGVyKG51bGwsIChtYXRjaGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGkgPSBtYXRjaGVyT3V0Lmxlbmd0aFxyXG4gICAgICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgKGVsZW0gPSBtYXRjaGVyT3V0W2ldKSAmJlxyXG4gICAgICAgICAgICAgICAgKHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZihzZWVkLCBlbGVtKSA6IHByZU1hcFtpXSkgPiAtMVxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgc2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG1hdGNoZXJPdXQgPSBjb25kZW5zZShcclxuICAgICAgICAgICAgbWF0Y2hlck91dCA9PT0gcmVzdWx0c1xyXG4gICAgICAgICAgICAgID8gbWF0Y2hlck91dC5zcGxpY2UocHJlZXhpc3RpbmcsIG1hdGNoZXJPdXQubGVuZ3RoKVxyXG4gICAgICAgICAgICAgIDogbWF0Y2hlck91dFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgaWYgKHBvc3RGaW5kZXIpIHtcclxuICAgICAgICAgICAgcG9zdEZpbmRlcihudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwdXNoLmFwcGx5KHJlc3VsdHMsIG1hdGNoZXJPdXQpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKHRva2Vucykge1xyXG4gICAgICB2YXIgY2hlY2tDb250ZXh0XHJcblxyXG4gICAgICB2YXIgbWF0Y2hlclxyXG5cclxuICAgICAgdmFyIGpcclxuXHJcbiAgICAgIHZhciBsZW4gPSB0b2tlbnMubGVuZ3RoXHJcblxyXG4gICAgICB2YXIgbGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVt0b2tlbnNbMF0udHlwZV1cclxuXHJcbiAgICAgIHZhciBpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbJyAnXVxyXG5cclxuICAgICAgdmFyIGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMFxyXG5cclxuICAgICAgdmFyIG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoXHJcbiAgICAgICAgZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICAgICAgcmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW1wbGljaXRSZWxhdGl2ZSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHZhciBtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKFxyXG4gICAgICAgIGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICAgIHJldHVybiBpbmRleE9mKGNoZWNrQ29udGV4dCwgZWxlbSkgPiAtMVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW1wbGljaXRSZWxhdGl2ZSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHZhciBtYXRjaGVycyA9IFtcclxuICAgICAgICBmdW5jdGlvbihlbGVtLCBjb250ZXh0LCB4bWwpIHtcclxuICAgICAgICAgIHZhciByZXQgPVxyXG4gICAgICAgICAgICAoIWxlYWRpbmdSZWxhdGl2ZSAmJiAoeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQpKSB8fFxyXG4gICAgICAgICAgICAoKGNoZWNrQ29udGV4dCA9IGNvbnRleHQpLm5vZGVUeXBlXHJcbiAgICAgICAgICAgICAgPyBtYXRjaENvbnRleHQoZWxlbSwgY29udGV4dCwgeG1sKVxyXG4gICAgICAgICAgICAgIDogbWF0Y2hBbnlDb250ZXh0KGVsZW0sIGNvbnRleHQsIHhtbCkpXHJcbiAgICAgICAgICBjaGVja0NvbnRleHQgPSBudWxsXHJcbiAgICAgICAgICByZXR1cm4gcmV0XHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcblxyXG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgaWYgKChtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVt0b2tlbnNbaV0udHlwZV0pKSB7XHJcbiAgICAgICAgICBtYXRjaGVycyA9IFthZGRDb21iaW5hdG9yKGVsZW1lbnRNYXRjaGVyKG1hdGNoZXJzKSwgbWF0Y2hlcildXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG1hdGNoZXIgPSBFeHByLmZpbHRlclt0b2tlbnNbaV0udHlwZV0uYXBwbHkobnVsbCwgdG9rZW5zW2ldLm1hdGNoZXMpXHJcblxyXG4gICAgICAgICAgaWYgKG1hdGNoZXJbZXhwYW5kb10pIHtcclxuICAgICAgICAgICAgaiA9ICsraVxyXG4gICAgICAgICAgICBmb3IgKDsgaiA8IGxlbjsgaisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKEV4cHIucmVsYXRpdmVbdG9rZW5zW2pdLnR5cGVdKSB7XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc2V0TWF0Y2hlcihcclxuICAgICAgICAgICAgICBpID4gMSAmJiBlbGVtZW50TWF0Y2hlcihtYXRjaGVycyksXHJcbiAgICAgICAgICAgICAgaSA+IDEgJiZcclxuICAgICAgICAgICAgICAgIHRvU2VsZWN0b3IoXHJcbiAgICAgICAgICAgICAgICAgIHRva2Vuc1xyXG4gICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCBpIC0gMSlcclxuICAgICAgICAgICAgICAgICAgICAuY29uY2F0KHsgdmFsdWU6IHRva2Vuc1tpIC0gMl0udHlwZSA9PT0gJyAnID8gJyonIDogJycgfSlcclxuICAgICAgICAgICAgICAgICkucmVwbGFjZShydHJpbSwgJyQxJyksXHJcbiAgICAgICAgICAgICAgbWF0Y2hlcixcclxuICAgICAgICAgICAgICBpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2Vucyh0b2tlbnMuc2xpY2UoaSwgaikpLFxyXG4gICAgICAgICAgICAgIGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoKHRva2VucyA9IHRva2Vucy5zbGljZShqKSkpLFxyXG4gICAgICAgICAgICAgIGogPCBsZW4gJiYgdG9TZWxlY3Rvcih0b2tlbnMpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG1hdGNoZXJzLnB1c2gobWF0Y2hlcilcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBlbGVtZW50TWF0Y2hlcihtYXRjaGVycylcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycykge1xyXG4gICAgICB2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwXHJcblxyXG4gICAgICB2YXIgYnlFbGVtZW50ID0gZWxlbWVudE1hdGNoZXJzLmxlbmd0aCA+IDBcclxuXHJcbiAgICAgIHZhciBzdXBlck1hdGNoZXIgPSBmdW5jdGlvbihzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCkge1xyXG4gICAgICAgIHZhciBlbGVtXHJcblxyXG4gICAgICAgIHZhciBqXHJcblxyXG4gICAgICAgIHZhciBtYXRjaGVyXHJcblxyXG4gICAgICAgIHZhciBtYXRjaGVkQ291bnQgPSAwXHJcblxyXG4gICAgICAgIHZhciBpID0gJzAnXHJcblxyXG4gICAgICAgIHZhciB1bm1hdGNoZWQgPSBzZWVkICYmIFtdXHJcblxyXG4gICAgICAgIHZhciBzZXRNYXRjaGVkID0gW11cclxuXHJcbiAgICAgICAgdmFyIGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0XHJcblxyXG4gICAgICAgIHZhciBlbGVtcyA9IHNlZWQgfHwgKGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbJ1RBRyddKCcqJywgb3V0ZXJtb3N0KSlcclxuXHJcbiAgICAgICAgdmFyIGRpcnJ1bnNVbmlxdWUgPSAoZGlycnVucyArPVxyXG4gICAgICAgICAgY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xKVxyXG5cclxuICAgICAgICB2YXIgbGVuID0gZWxlbXMubGVuZ3RoXHJcblxyXG4gICAgICAgIGlmIChvdXRlcm1vc3QpIHtcclxuICAgICAgICAgIG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICg7IGkgIT09IGxlbiAmJiAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKyspIHtcclxuICAgICAgICAgIGlmIChieUVsZW1lbnQgJiYgZWxlbSkge1xyXG4gICAgICAgICAgICBqID0gMFxyXG4gICAgICAgICAgICBpZiAoIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9PSBkb2N1bWVudCkge1xyXG4gICAgICAgICAgICAgIHNldERvY3VtZW50KGVsZW0pXHJcbiAgICAgICAgICAgICAgeG1sID0gIWRvY3VtZW50SXNIVE1MXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hpbGUgKChtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzW2orK10pKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG1hdGNoZXIoZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sKSkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVsZW0pXHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob3V0ZXJtb3N0KSB7XHJcbiAgICAgICAgICAgICAgZGlycnVucyA9IGRpcnJ1bnNVbmlxdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChieVNldCkge1xyXG4gICAgICAgICAgICBpZiAoKGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtKSkge1xyXG4gICAgICAgICAgICAgIG1hdGNoZWRDb3VudC0tXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWVkKSB7XHJcbiAgICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goZWxlbSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWF0Y2hlZENvdW50ICs9IGlcclxuXHJcbiAgICAgICAgaWYgKGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCkge1xyXG4gICAgICAgICAgaiA9IDBcclxuICAgICAgICAgIHdoaWxlICgobWF0Y2hlciA9IHNldE1hdGNoZXJzW2orK10pKSB7XHJcbiAgICAgICAgICAgIG1hdGNoZXIodW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHNlZWQpIHtcclxuICAgICAgICAgICAgaWYgKG1hdGNoZWRDb3VudCA+IDApIHtcclxuICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoISh1bm1hdGNoZWRbaV0gfHwgc2V0TWF0Y2hlZFtpXSkpIHtcclxuICAgICAgICAgICAgICAgICAgc2V0TWF0Y2hlZFtpXSA9IHBvcC5jYWxsKHJlc3VsdHMpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBzZXRNYXRjaGVkID0gY29uZGVuc2Uoc2V0TWF0Y2hlZClcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBwdXNoLmFwcGx5KHJlc3VsdHMsIHNldE1hdGNoZWQpXHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBvdXRlcm1vc3QgJiZcclxuICAgICAgICAgICAgIXNlZWQgJiZcclxuICAgICAgICAgICAgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCA+IDFcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBTaXp6bGUudW5pcXVlU29ydChyZXN1bHRzKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG91dGVybW9zdCkge1xyXG4gICAgICAgICAgZGlycnVucyA9IGRpcnJ1bnNVbmlxdWVcclxuICAgICAgICAgIG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdW5tYXRjaGVkXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBieVNldCA/IG1hcmtGdW5jdGlvbihzdXBlck1hdGNoZXIpIDogc3VwZXJNYXRjaGVyXHJcbiAgICB9XHJcblxyXG4gICAgY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rpb24oc2VsZWN0b3IsIG1hdGNoKSB7XHJcbiAgICAgIHZhciBpXHJcblxyXG4gICAgICB2YXIgc2V0TWF0Y2hlcnMgPSBbXVxyXG5cclxuICAgICAgdmFyIGVsZW1lbnRNYXRjaGVycyA9IFtdXHJcblxyXG4gICAgICB2YXIgY2FjaGVkID0gY29tcGlsZXJDYWNoZVtzZWxlY3RvciArICcgJ11cclxuXHJcbiAgICAgIGlmICghY2FjaGVkKSB7XHJcbiAgICAgICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICAgICAgbWF0Y2ggPSB0b2tlbml6ZShzZWxlY3RvcilcclxuICAgICAgICB9XHJcbiAgICAgICAgaSA9IG1hdGNoLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgIGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKG1hdGNoW2ldKVxyXG4gICAgICAgICAgaWYgKGNhY2hlZFtleHBhbmRvXSkge1xyXG4gICAgICAgICAgICBzZXRNYXRjaGVycy5wdXNoKGNhY2hlZClcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRNYXRjaGVycy5wdXNoKGNhY2hlZClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoXHJcbiAgICAgICAgICBzZWxlY3RvcixcclxuICAgICAgICAgIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyhlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzKVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgY2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3JcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY2FjaGVkXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIFNpenpsZSdzIGNvbXBpbGVkXHJcbiAgICAgKiAgc2VsZWN0b3IgZnVuY3Rpb25zXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZFxyXG4gICAgICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggU2l6emxlLmNvbXBpbGVcclxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dFxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdXHJcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxyXG4gICAgICovXHJcbiAgICBzZWxlY3QgPSBTaXp6bGUuc2VsZWN0ID0gZnVuY3Rpb24oc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQpIHtcclxuICAgICAgdmFyIGlcclxuXHJcbiAgICAgIHZhciB0b2tlbnNcclxuXHJcbiAgICAgIHZhciB0b2tlblxyXG5cclxuICAgICAgdmFyIHR5cGVcclxuXHJcbiAgICAgIHZhciBmaW5kXHJcblxyXG4gICAgICB2YXIgY29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09ICdmdW5jdGlvbicgJiYgc2VsZWN0b3JcclxuXHJcbiAgICAgIHZhciBtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKChzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yKSlcclxuXHJcbiAgICAgIHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdXHJcblxyXG4gICAgICBpZiAobWF0Y2gubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgdG9rZW5zID0gbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZSgwKVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRva2Vucy5sZW5ndGggPiAyICYmXHJcbiAgICAgICAgICAodG9rZW4gPSB0b2tlbnNbMF0pLnR5cGUgPT09ICdJRCcgJiZcclxuICAgICAgICAgIGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiZcclxuICAgICAgICAgIGRvY3VtZW50SXNIVE1MICYmXHJcbiAgICAgICAgICBFeHByLnJlbGF0aXZlW3Rva2Vuc1sxXS50eXBlXVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29udGV4dCA9IChFeHByLmZpbmRbJ0lEJ10oXHJcbiAgICAgICAgICAgIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZShydW5lc2NhcGUsIGZ1bmVzY2FwZSksXHJcbiAgICAgICAgICAgIGNvbnRleHRcclxuICAgICAgICAgICkgfHwgW10pWzBdXHJcbiAgICAgICAgICBpZiAoIWNvbnRleHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY29tcGlsZWQpIHtcclxuICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UodG9rZW5zLnNoaWZ0KCkudmFsdWUubGVuZ3RoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaSA9IG1hdGNoRXhwclsnbmVlZHNDb250ZXh0J10udGVzdChzZWxlY3RvcikgPyAwIDogdG9rZW5zLmxlbmd0aFxyXG4gICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldXHJcblxyXG4gICAgICAgICAgaWYgKEV4cHIucmVsYXRpdmVbKHR5cGUgPSB0b2tlbi50eXBlKV0pIHtcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICgoZmluZCA9IEV4cHIuZmluZFt0eXBlXSkpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIChzZWVkID0gZmluZChcclxuICAgICAgICAgICAgICAgIHRva2VuLm1hdGNoZXNbMF0ucmVwbGFjZShydW5lc2NhcGUsIGZ1bmVzY2FwZSksXHJcbiAgICAgICAgICAgICAgICAocnNpYmxpbmcudGVzdCh0b2tlbnNbMF0udHlwZSkgJiZcclxuICAgICAgICAgICAgICAgICAgdGVzdENvbnRleHQoY29udGV4dC5wYXJlbnROb2RlKSkgfHxcclxuICAgICAgICAgICAgICAgICAgY29udGV4dFxyXG4gICAgICAgICAgICAgICkpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIHRva2Vucy5zcGxpY2UoaSwgMSlcclxuICAgICAgICAgICAgICBzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IodG9rZW5zKVxyXG4gICAgICAgICAgICAgIGlmICghc2VsZWN0b3IpIHtcclxuICAgICAgICAgICAgICAgIHB1c2guYXBwbHkocmVzdWx0cywgc2VlZClcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICA7KGNvbXBpbGVkIHx8IGNvbXBpbGUoc2VsZWN0b3IsIG1hdGNoKSkoXHJcbiAgICAgICAgc2VlZCxcclxuICAgICAgICBjb250ZXh0LFxyXG4gICAgICAgICFkb2N1bWVudElzSFRNTCxcclxuICAgICAgICByZXN1bHRzLFxyXG4gICAgICAgICFjb250ZXh0IHx8XHJcbiAgICAgICAgICAocnNpYmxpbmcudGVzdChzZWxlY3RvcikgJiYgdGVzdENvbnRleHQoY29udGV4dC5wYXJlbnROb2RlKSkgfHxcclxuICAgICAgICAgIGNvbnRleHRcclxuICAgICAgKVxyXG4gICAgICByZXR1cm4gcmVzdWx0c1xyXG4gICAgfVxyXG5cclxuICAgIHN1cHBvcnQuc29ydFN0YWJsZSA9XHJcbiAgICAgIGV4cGFuZG9cclxuICAgICAgICAuc3BsaXQoJycpXHJcbiAgICAgICAgLnNvcnQoc29ydE9yZGVyKVxyXG4gICAgICAgIC5qb2luKCcnKSA9PT0gZXhwYW5kb1xyXG5cclxuICAgIHN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9ICEhaGFzRHVwbGljYXRlXHJcblxyXG4gICAgc2V0RG9jdW1lbnQoKVxyXG5cclxuICAgIHN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KGZ1bmN0aW9uKGVsKSB7XHJcbiAgICAgIHJldHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmaWVsZHNldCcpKSAmIDFcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAhYXNzZXJ0KGZ1bmN0aW9uKGVsKSB7XHJcbiAgICAgICAgZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCJcclxuICAgICAgICByZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSA9PT0gJyMnXHJcbiAgICAgIH0pXHJcbiAgICApIHtcclxuICAgICAgYWRkSGFuZGxlKCd0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoJywgZnVuY3Rpb24oZWxlbSwgbmFtZSwgaXNYTUwpIHtcclxuICAgICAgICBpZiAoIWlzWE1MKSB7XHJcbiAgICAgICAgICByZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUobmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSAndHlwZScgPyAxIDogMilcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8XHJcbiAgICAgICFhc3NlcnQoZnVuY3Rpb24oZWwpIHtcclxuICAgICAgICBlbC5pbm5lckhUTUwgPSAnPGlucHV0Lz4nXHJcbiAgICAgICAgZWwuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJycpXHJcbiAgICAgICAgcmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCd2YWx1ZScpID09PSAnJ1xyXG4gICAgICB9KVxyXG4gICAgKSB7XHJcbiAgICAgIGFkZEhhbmRsZSgndmFsdWUnLCBmdW5jdGlvbihlbGVtLCBuYW1lLCBpc1hNTCkge1xyXG4gICAgICAgIGlmICghaXNYTUwgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnKSB7XHJcbiAgICAgICAgICByZXR1cm4gZWxlbS5kZWZhdWx0VmFsdWVcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAhYXNzZXJ0KGZ1bmN0aW9uKGVsKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSA9PSBudWxsXHJcbiAgICAgIH0pXHJcbiAgICApIHtcclxuICAgICAgYWRkSGFuZGxlKGJvb2xlYW5zLCBmdW5jdGlvbihlbGVtLCBuYW1lLCBpc1hNTCkge1xyXG4gICAgICAgIHZhciB2YWxcclxuICAgICAgICBpZiAoIWlzWE1MKSB7XHJcbiAgICAgICAgICByZXR1cm4gZWxlbVtuYW1lXSA9PT0gdHJ1ZVxyXG4gICAgICAgICAgICA/IG5hbWUudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICA6ICh2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkpICYmIHZhbC5zcGVjaWZpZWRcclxuICAgICAgICAgICAgICA/IHZhbC52YWx1ZVxyXG4gICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gU2l6emxlXHJcbiAgfSkod2luZG93KVxyXG5cclxuICBTbGltSlEuZmluZCA9IFNpenpsZVxyXG4gIFNsaW1KUS5leHByID0gU2l6emxlLnNlbGVjdG9yc1xyXG5cclxuICBTbGltSlEuZXhwclsnOiddID0gU2xpbUpRLmV4cHIucHNldWRvc1xyXG4gIFNsaW1KUS51bmlxdWVTb3J0ID0gU2xpbUpRLnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0XHJcbiAgU2xpbUpRLnRleHQgPSBTaXp6bGUuZ2V0VGV4dFxyXG4gIFNsaW1KUS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTFxyXG4gIFNsaW1KUS5jb250YWlucyA9IFNpenpsZS5jb250YWluc1xyXG4gIFNsaW1KUS5lc2NhcGVTZWxlY3RvciA9IFNpenpsZS5lc2NhcGVcclxuXHJcbiAgdmFyIGRpciA9IGZ1bmN0aW9uKGVsZW0sIGRpciwgdW50aWwpIHtcclxuICAgIHZhciBtYXRjaGVkID0gW11cclxuXHJcbiAgICB2YXIgdHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkXHJcblxyXG4gICAgd2hpbGUgKChlbGVtID0gZWxlbVtkaXJdKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5KSB7XHJcbiAgICAgIGlmIChlbGVtLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgaWYgKHRydW5jYXRlICYmIFNsaW1KUShlbGVtKS5pcyh1bnRpbCkpIHtcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1hdGNoZWQucHVzaChlbGVtKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWF0Y2hlZFxyXG4gIH1cclxuXHJcbiAgdmFyIHNpYmxpbmdzID0gZnVuY3Rpb24obiwgZWxlbSkge1xyXG4gICAgdmFyIG1hdGNoZWQgPSBbXVxyXG5cclxuICAgIGZvciAoOyBuOyBuID0gbi5uZXh0U2libGluZykge1xyXG4gICAgICBpZiAobi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtKSB7XHJcbiAgICAgICAgbWF0Y2hlZC5wdXNoKG4pXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWF0Y2hlZFxyXG4gIH1cclxuXHJcbiAgdmFyIHJuZWVkc0NvbnRleHQgPSBTbGltSlEuZXhwci5tYXRjaC5uZWVkc0NvbnRleHRcclxuXHJcbiAgZnVuY3Rpb24gbm9kZU5hbWUoZWxlbSwgbmFtZSkge1xyXG4gICAgcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKClcclxuICB9XHJcbiAgdmFyIHJzaW5nbGVUYWcgPSAvXjwoW2Etel1bXlxcL1xcMD46XFx4MjBcXHRcXHJcXG5cXGZdKilbXFx4MjBcXHRcXHJcXG5cXGZdKlxcLz8+KD86PFxcL1xcMT58KSQvaVxyXG5cclxuICBmdW5jdGlvbiB3aW5ub3coZWxlbWVudHMsIHF1YWxpZmllciwgbm90KSB7XHJcbiAgICBpZiAoaXNGdW5jdGlvbihxdWFsaWZpZXIpKSB7XHJcbiAgICAgIHJldHVybiBTbGltSlEuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oZWxlbSwgaSkge1xyXG4gICAgICAgIHJldHVybiAhIXF1YWxpZmllci5jYWxsKGVsZW0sIGksIGVsZW0pICE9PSBub3RcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBpZiAocXVhbGlmaWVyLm5vZGVUeXBlKSB7XHJcbiAgICAgIHJldHVybiBTbGltSlEuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICAgIHJldHVybiAoZWxlbSA9PT0gcXVhbGlmaWVyKSAhPT0gbm90XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBxdWFsaWZpZXIgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiBTbGltSlEuZ3JlcChlbGVtZW50cywgZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICAgIHJldHVybiBpbmRleE9mLmNhbGwocXVhbGlmaWVyLCBlbGVtKSA+IC0xICE9PSBub3RcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gU2xpbUpRLmZpbHRlcihxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QpXHJcbiAgfVxyXG5cclxuICBTbGltSlEuZmlsdGVyID0gZnVuY3Rpb24oZXhwciwgZWxlbXMsIG5vdCkge1xyXG4gICAgdmFyIGVsZW0gPSBlbGVtc1swXVxyXG5cclxuICAgIGlmIChub3QpIHtcclxuICAgICAgZXhwciA9ICc6bm90KCcgKyBleHByICsgJyknXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgIHJldHVybiBTbGltSlEuZmluZC5tYXRjaGVzU2VsZWN0b3IoZWxlbSwgZXhwcikgPyBbZWxlbV0gOiBbXVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBTbGltSlEuZmluZC5tYXRjaGVzKFxyXG4gICAgICBleHByLFxyXG4gICAgICBTbGltSlEuZ3JlcChlbGVtcywgZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICAgIHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBTbGltSlEuZm4uZXh0ZW5kKHtcclxuICAgIGZpbmQ6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XHJcbiAgICAgIHZhciBpXHJcblxyXG4gICAgICB2YXIgcmV0XHJcblxyXG4gICAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgIHZhciBzZWxmID0gdGhpc1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBzZWxlY3RvciAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soXHJcbiAgICAgICAgICBTbGltSlEoc2VsZWN0b3IpLmZpbHRlcihmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFNsaW1KUS5jb250YWlucyhzZWxmW2ldLCB0aGlzKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXQgPSB0aGlzLnB1c2hTdGFjayhbXSlcclxuXHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIFNsaW1KUS5maW5kKHNlbGVjdG9yLCBzZWxmW2ldLCByZXQpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBsZW4gPiAxID8gU2xpbUpRLnVuaXF1ZVNvcnQocmV0KSA6IHJldFxyXG4gICAgfSxcclxuICAgIGZpbHRlcjogZnVuY3Rpb24oc2VsZWN0b3IpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKHdpbm5vdyh0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UpKVxyXG4gICAgfSxcclxuICAgIG5vdDogZnVuY3Rpb24oc2VsZWN0b3IpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKHdpbm5vdyh0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSkpXHJcbiAgICB9LFxyXG4gICAgaXM6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XHJcbiAgICAgIHJldHVybiAhIXdpbm5vdyhcclxuICAgICAgICB0aGlzLFxyXG5cclxuICAgICAgICB0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnICYmIHJuZWVkc0NvbnRleHQudGVzdChzZWxlY3RvcilcclxuICAgICAgICAgID8gU2xpbUpRKHNlbGVjdG9yKVxyXG4gICAgICAgICAgOiBzZWxlY3RvciB8fCBbXSxcclxuICAgICAgICBmYWxzZVxyXG4gICAgICApLmxlbmd0aFxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIHZhciByb290U2xpbUpRXHJcblxyXG4gIHZhciBycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC9cclxuXHJcbiAgdmFyIGluaXQgPSAoU2xpbUpRLmZuLkluaXQgPSBmdW5jdGlvbihzZWxlY3RvciwgY29udGV4dCwgcm9vdCkge1xyXG4gICAgdmFyIG1hdGNoLCBlbGVtXHJcblxyXG4gICAgaWYgKCFzZWxlY3Rvcikge1xyXG4gICAgICByZXR1cm4gdGhpc1xyXG4gICAgfVxyXG5cclxuICAgIHJvb3QgPSByb290IHx8IHJvb3RTbGltSlFcclxuXHJcbiAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgc2VsZWN0b3JbMF0gPT09ICc8JyAmJlxyXG4gICAgICAgIHNlbGVjdG9yW3NlbGVjdG9yLmxlbmd0aCAtIDFdID09PSAnPicgJiZcclxuICAgICAgICBzZWxlY3Rvci5sZW5ndGggPj0gM1xyXG4gICAgICApIHtcclxuICAgICAgICBtYXRjaCA9IFtudWxsLCBzZWxlY3RvciwgbnVsbF1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyhzZWxlY3RvcilcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG1hdGNoICYmIChtYXRjaFsxXSB8fCAhY29udGV4dCkpIHtcclxuICAgICAgICBpZiAobWF0Y2hbMV0pIHtcclxuICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgU2xpbUpRID8gY29udGV4dFswXSA6IGNvbnRleHRcclxuXHJcbiAgICAgICAgICBTbGltSlEubWVyZ2UoXHJcbiAgICAgICAgICAgIHRoaXMsXHJcbiAgICAgICAgICAgIFNsaW1KUS5wYXJzZUhUTUwoXHJcbiAgICAgICAgICAgICAgbWF0Y2hbMV0sXHJcbiAgICAgICAgICAgICAgY29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlXHJcbiAgICAgICAgICAgICAgICA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0XHJcbiAgICAgICAgICAgICAgICA6IGRvY3VtZW50LFxyXG4gICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKVxyXG5cclxuICAgICAgICAgIGlmIChyc2luZ2xlVGFnLnRlc3QobWF0Y2hbMV0pICYmIFNsaW1KUS5pc1BsYWluT2JqZWN0KGNvbnRleHQpKSB7XHJcbiAgICAgICAgICAgIGZvciAobWF0Y2ggaW4gY29udGV4dCkge1xyXG4gICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbbWF0Y2hdKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpc1ttYXRjaF0oY29udGV4dFttYXRjaF0pXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR0cihtYXRjaCwgY29udGV4dFttYXRjaF0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG1hdGNoWzJdKVxyXG5cclxuICAgICAgICAgIGlmIChlbGVtKSB7XHJcbiAgICAgICAgICAgIHRoaXNbMF0gPSBlbGVtXHJcbiAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoIWNvbnRleHQgfHwgY29udGV4dC5zbGltSlEpIHtcclxuICAgICAgICByZXR1cm4gKGNvbnRleHQgfHwgcm9vdCkuZmluZChzZWxlY3RvcilcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvcihjb250ZXh0KS5maW5kKHNlbGVjdG9yKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLm5vZGVUeXBlKSB7XHJcbiAgICAgIHRoaXNbMF0gPSBzZWxlY3RvclxyXG4gICAgICB0aGlzLmxlbmd0aCA9IDFcclxuICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihzZWxlY3RvcikpIHtcclxuICAgICAgcmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/IHJvb3QucmVhZHkoc2VsZWN0b3IpIDogc2VsZWN0b3IoU2xpbUpRKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBTbGltSlEubWFrZUFycmF5KHNlbGVjdG9yLCB0aGlzKVxyXG4gIH0pXHJcblxyXG4gIGluaXQucHJvdG90eXBlID0gU2xpbUpRLmZuXHJcblxyXG4gIHJvb3RTbGltSlEgPSBTbGltSlEoZG9jdW1lbnQpXHJcblxyXG4gIHZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpL1xyXG5cclxuICB2YXIgZ3VhcmFudGVlZFVuaXF1ZSA9IHtcclxuICAgIGNoaWxkcmVuOiB0cnVlLFxyXG4gICAgY29udGVudHM6IHRydWUsXHJcbiAgICBuZXh0OiB0cnVlLFxyXG4gICAgcHJldjogdHJ1ZVxyXG4gIH1cclxuXHJcbiAgU2xpbUpRLmZuLmV4dGVuZCh7XHJcbiAgICBoYXM6IGZ1bmN0aW9uKHRhcmdldCkge1xyXG4gICAgICB2YXIgdGFyZ2V0cyA9IFNsaW1KUSh0YXJnZXQsIHRoaXMpXHJcblxyXG4gICAgICB2YXIgbCA9IHRhcmdldHMubGVuZ3RoXHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGkgPSAwXHJcbiAgICAgICAgZm9yICg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgIGlmIChTbGltSlEuY29udGFpbnModGhpcywgdGFyZ2V0c1tpXSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG5cclxuICAgIGNsb3Nlc3Q6IGZ1bmN0aW9uKHNlbGVjdG9ycywgY29udGV4dCkge1xyXG4gICAgICB2YXIgY3VyXHJcblxyXG4gICAgICB2YXIgaSA9IDBcclxuXHJcbiAgICAgIHZhciBsID0gdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgIHZhciBtYXRjaGVkID0gW11cclxuXHJcbiAgICAgIHZhciB0YXJnZXRzID0gdHlwZW9mIHNlbGVjdG9ycyAhPT0gJ3N0cmluZycgJiYgU2xpbUpRKHNlbGVjdG9ycylcclxuXHJcbiAgICAgIGlmICghcm5lZWRzQ29udGV4dC50ZXN0KHNlbGVjdG9ycykpIHtcclxuICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgZm9yIChjdXIgPSB0aGlzW2ldOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgY3VyLm5vZGVUeXBlIDwgMTEgJiZcclxuICAgICAgICAgICAgICAodGFyZ2V0c1xyXG4gICAgICAgICAgICAgICAgPyB0YXJnZXRzLmluZGV4KGN1cikgPiAtMVxyXG4gICAgICAgICAgICAgICAgOiBjdXIubm9kZVR5cGUgPT09IDEgJiZcclxuICAgICAgICAgICAgICAgICAgU2xpbUpRLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGN1ciwgc2VsZWN0b3JzKSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgbWF0Y2hlZC5wdXNoKGN1cilcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soXHJcbiAgICAgICAgbWF0Y2hlZC5sZW5ndGggPiAxID8gU2xpbUpRLnVuaXF1ZVNvcnQobWF0Y2hlZCkgOiBtYXRjaGVkXHJcbiAgICAgIClcclxuICAgIH0sXHJcblxyXG4gICAgaW5kZXg6IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgaWYgKCFlbGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlXHJcbiAgICAgICAgICA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoXHJcbiAgICAgICAgICA6IC0xXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgZWxlbSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gaW5kZXhPZi5jYWxsKFNsaW1KUShlbGVtKSwgdGhpc1swXSlcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGluZGV4T2YuY2FsbChcclxuICAgICAgICB0aGlzLFxyXG5cclxuICAgICAgICBlbGVtLnNsaW1KUSA/IGVsZW1bMF0gOiBlbGVtXHJcbiAgICAgIClcclxuICAgIH0sXHJcblxyXG4gICAgYWRkOiBmdW5jdGlvbihzZWxlY3RvciwgY29udGV4dCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wdXNoU3RhY2soXHJcbiAgICAgICAgU2xpbUpRLnVuaXF1ZVNvcnQoU2xpbUpRLm1lcmdlKHRoaXMuZ2V0KCksIFNsaW1KUShzZWxlY3RvciwgY29udGV4dCkpKVxyXG4gICAgICApXHJcbiAgICB9LFxyXG5cclxuICAgIGFkZEJhY2s6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFkZChcclxuICAgICAgICBzZWxlY3RvciA9PSBudWxsID8gdGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlcihzZWxlY3RvcilcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIGZ1bmN0aW9uIHNpYmxpbmcoY3VyLCBkaXIpIHtcclxuICAgIHdoaWxlICgoY3VyID0gY3VyW2Rpcl0pICYmIGN1ci5ub2RlVHlwZSAhPT0gMSkge31cclxuICAgIHJldHVybiBjdXJcclxuICB9XHJcblxyXG4gIFNsaW1KUS5lYWNoKFxyXG4gICAge1xyXG4gICAgICBwYXJlbnQ6IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlXHJcbiAgICAgICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbFxyXG4gICAgICB9LFxyXG4gICAgICBwYXJlbnRzOiBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGRpcihlbGVtLCAncGFyZW50Tm9kZScpXHJcbiAgICAgIH0sXHJcbiAgICAgIHBhcmVudHNVbnRpbDogZnVuY3Rpb24oZWxlbSwgaSwgdW50aWwpIHtcclxuICAgICAgICByZXR1cm4gZGlyKGVsZW0sICdwYXJlbnROb2RlJywgdW50aWwpXHJcbiAgICAgIH0sXHJcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICByZXR1cm4gc2libGluZyhlbGVtLCAnbmV4dFNpYmxpbmcnKVxyXG4gICAgICB9LFxyXG4gICAgICBwcmV2OiBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIHNpYmxpbmcoZWxlbSwgJ3ByZXZpb3VzU2libGluZycpXHJcbiAgICAgIH0sXHJcbiAgICAgIG5leHRBbGw6IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICByZXR1cm4gZGlyKGVsZW0sICduZXh0U2libGluZycpXHJcbiAgICAgIH0sXHJcbiAgICAgIHByZXZBbGw6IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICByZXR1cm4gZGlyKGVsZW0sICdwcmV2aW91c1NpYmxpbmcnKVxyXG4gICAgICB9LFxyXG4gICAgICBuZXh0VW50aWw6IGZ1bmN0aW9uKGVsZW0sIGksIHVudGlsKSB7XHJcbiAgICAgICAgcmV0dXJuIGRpcihlbGVtLCAnbmV4dFNpYmxpbmcnLCB1bnRpbClcclxuICAgICAgfSxcclxuICAgICAgcHJldlVudGlsOiBmdW5jdGlvbihlbGVtLCBpLCB1bnRpbCkge1xyXG4gICAgICAgIHJldHVybiBkaXIoZWxlbSwgJ3ByZXZpb3VzU2libGluZycsIHVudGlsKVxyXG4gICAgICB9LFxyXG4gICAgICBzaWJsaW5nczogZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICAgIHJldHVybiBzaWJsaW5ncygoZWxlbS5wYXJlbnROb2RlIHx8IHt9KS5maXJzdENoaWxkLCBlbGVtKVxyXG4gICAgICB9LFxyXG4gICAgICBjaGlsZHJlbjogZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICAgIHJldHVybiBzaWJsaW5ncyhlbGVtLmZpcnN0Q2hpbGQpXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbnRlbnRzOiBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgaWYgKG5vZGVOYW1lKGVsZW0sICdpZnJhbWUnKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobm9kZU5hbWUoZWxlbSwgJ3RlbXBsYXRlJykpIHtcclxuICAgICAgICAgIGVsZW0gPSBlbGVtLmNvbnRlbnQgfHwgZWxlbVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFNsaW1KUS5tZXJnZShbXSwgZWxlbS5jaGlsZE5vZGVzKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZnVuY3Rpb24obmFtZSwgZm4pIHtcclxuICAgICAgU2xpbUpRLmZuW25hbWVdID0gZnVuY3Rpb24odW50aWwsIHNlbGVjdG9yKSB7XHJcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBTbGltSlEubWFwKHRoaXMsIGZuLCB1bnRpbClcclxuXHJcbiAgICAgICAgaWYgKG5hbWUuc2xpY2UoLTUpICE9PSAnVW50aWwnKSB7XHJcbiAgICAgICAgICBzZWxlY3RvciA9IHVudGlsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgbWF0Y2hlZCA9IFNsaW1KUS5maWx0ZXIoc2VsZWN0b3IsIG1hdGNoZWQpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICBpZiAoIWd1YXJhbnRlZWRVbmlxdWVbbmFtZV0pIHtcclxuICAgICAgICAgICAgU2xpbUpRLnVuaXF1ZVNvcnQobWF0Y2hlZClcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocnBhcmVudHNwcmV2LnRlc3QobmFtZSkpIHtcclxuICAgICAgICAgICAgbWF0Y2hlZC5yZXZlcnNlKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnB1c2hTdGFjayhtYXRjaGVkKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgKVxyXG4gIHZhciBybm90aHRtbHdoaXRlID0gL1teXFx4MjBcXHRcXHJcXG5cXGZdKy9nXHJcblxyXG4gIGZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMob3B0aW9ucykge1xyXG4gICAgdmFyIG9iamVjdCA9IHt9XHJcbiAgICBTbGltSlEuZWFjaChvcHRpb25zLm1hdGNoKHJub3RodG1sd2hpdGUpIHx8IFtdLCBmdW5jdGlvbihfLCBmbGFnKSB7XHJcbiAgICAgIG9iamVjdFtmbGFnXSA9IHRydWVcclxuICAgIH0pXHJcbiAgICByZXR1cm4gb2JqZWN0XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcclxuICpcclxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcclxuICpcdFx0XHR0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0XHJcbiAqXHJcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXHJcbiAqIFwiZmlyZWRcIiBtdWx0aXBsZSB0aW1lcy5cclxuICpcclxuICogUG9zc2libGUgb3B0aW9uczpcclxuICpcclxuICpcdG9uY2U6XHRcdFx0d2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKVxyXG4gKlxyXG4gKlx0bWVtb3J5Olx0XHRcdHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWRcclxuICpcdFx0XHRcdFx0YWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgXCJtZW1vcml6ZWRcIlxyXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcclxuICpcclxuICpcdHVuaXF1ZTpcdFx0XHR3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdClcclxuICpcclxuICpcdHN0b3BPbkZhbHNlOlx0aW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlXHJcbiAqXHJcbiAqL1xyXG4gIFNsaW1KUS5DYWxsYmFja3MgPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgICBvcHRpb25zID1cclxuICAgICAgdHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnXHJcbiAgICAgICAgPyBjcmVhdGVPcHRpb25zKG9wdGlvbnMpXHJcbiAgICAgICAgOiBTbGltSlEuZXh0ZW5kKHt9LCBvcHRpb25zKVxyXG5cclxuICAgIHZhciBmaXJpbmdcclxuXHJcbiAgICB2YXIgbWVtb3J5XHJcblxyXG4gICAgdmFyIGZpcmVkXHJcblxyXG4gICAgdmFyIGxvY2tlZFxyXG5cclxuICAgIHZhciBsaXN0ID0gW11cclxuXHJcbiAgICB2YXIgcXVldWUgPSBbXVxyXG5cclxuICAgIHZhciBmaXJpbmdJbmRleCA9IC0xXHJcblxyXG4gICAgdmFyIGZpcmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgbG9ja2VkID0gbG9ja2VkIHx8IG9wdGlvbnMub25jZVxyXG5cclxuICAgICAgZmlyZWQgPSBmaXJpbmcgPSB0cnVlXHJcbiAgICAgIGZvciAoOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEpIHtcclxuICAgICAgICBtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpXHJcbiAgICAgICAgd2hpbGUgKCsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBsaXN0W2ZpcmluZ0luZGV4XS5hcHBseShtZW1vcnlbMF0sIG1lbW9yeVsxXSkgPT09IGZhbHNlICYmXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc3RvcE9uRmFsc2VcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoXHJcbiAgICAgICAgICAgIG1lbW9yeSA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIW9wdGlvbnMubWVtb3J5KSB7XHJcbiAgICAgICAgbWVtb3J5ID0gZmFsc2VcclxuICAgICAgfVxyXG5cclxuICAgICAgZmlyaW5nID0gZmFsc2VcclxuXHJcbiAgICAgIGlmIChsb2NrZWQpIHtcclxuICAgICAgICBpZiAobWVtb3J5KSB7XHJcbiAgICAgICAgICBsaXN0ID0gW11cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGlzdCA9ICcnXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHNlbGYgPSB7XHJcbiAgICAgIGFkZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKGxpc3QpIHtcclxuICAgICAgICAgIGlmIChtZW1vcnkgJiYgIWZpcmluZykge1xyXG4gICAgICAgICAgICBmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICBxdWV1ZS5wdXNoKG1lbW9yeSlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICA7KGZ1bmN0aW9uIGFkZChhcmdzKSB7XHJcbiAgICAgICAgICAgIFNsaW1KUS5lYWNoKGFyZ3MsIGZ1bmN0aW9uKF8sIGFyZykge1xyXG4gICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGFyZykpIHtcclxuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKGFyZykpIHtcclxuICAgICAgICAgICAgICAgICAgbGlzdC5wdXNoKGFyZylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZShhcmcpICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgYWRkKGFyZylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9KShhcmd1bWVudHMpXHJcblxyXG4gICAgICAgICAgaWYgKG1lbW9yeSAmJiAhZmlyaW5nKSB7XHJcbiAgICAgICAgICAgIGZpcmUoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICBTbGltSlEuZWFjaChhcmd1bWVudHMsIGZ1bmN0aW9uKF8sIGFyZykge1xyXG4gICAgICAgICAgdmFyIGluZGV4XHJcbiAgICAgICAgICB3aGlsZSAoKGluZGV4ID0gU2xpbUpRLmluQXJyYXkoYXJnLCBsaXN0LCBpbmRleCkpID4gLTEpIHtcclxuICAgICAgICAgICAgbGlzdC5zcGxpY2UoaW5kZXgsIDEpXHJcblxyXG4gICAgICAgICAgICBpZiAoaW5kZXggPD0gZmlyaW5nSW5kZXgpIHtcclxuICAgICAgICAgICAgICBmaXJpbmdJbmRleC0tXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBoYXM6IGZ1bmN0aW9uKGZuKSB7XHJcbiAgICAgICAgcmV0dXJuIGZuID8gU2xpbUpRLmluQXJyYXkoZm4sIGxpc3QpID4gLTEgOiBsaXN0Lmxlbmd0aCA+IDBcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGVtcHR5OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBpZiAobGlzdCkge1xyXG4gICAgICAgICAgbGlzdCA9IFtdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBkaXNhYmxlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICBsb2NrZWQgPSBxdWV1ZSA9IFtdXHJcbiAgICAgICAgbGlzdCA9IG1lbW9yeSA9ICcnXHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgfSxcclxuICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAhbGlzdFxyXG4gICAgICB9LFxyXG5cclxuICAgICAgbG9jazogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbG9ja2VkID0gcXVldWUgPSBbXVxyXG4gICAgICAgIGlmICghbWVtb3J5ICYmICFmaXJpbmcpIHtcclxuICAgICAgICAgIGxpc3QgPSBtZW1vcnkgPSAnJ1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICB9LFxyXG4gICAgICBsb2NrZWQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiAhIWxvY2tlZFxyXG4gICAgICB9LFxyXG5cclxuICAgICAgZmlyZVdpdGg6IGZ1bmN0aW9uKGNvbnRleHQsIGFyZ3MpIHtcclxuICAgICAgICBpZiAoIWxvY2tlZCkge1xyXG4gICAgICAgICAgYXJncyA9IGFyZ3MgfHwgW11cclxuICAgICAgICAgIGFyZ3MgPSBbY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3NdXHJcbiAgICAgICAgICBxdWV1ZS5wdXNoKGFyZ3MpXHJcbiAgICAgICAgICBpZiAoIWZpcmluZykge1xyXG4gICAgICAgICAgICBmaXJlKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXNcclxuICAgICAgfSxcclxuXHJcbiAgICAgIGZpcmU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHNlbGYuZmlyZVdpdGgodGhpcywgYXJndW1lbnRzKVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBmaXJlZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuICEhZmlyZWRcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzZWxmXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBJZGVudGl0eSh2KSB7XHJcbiAgICByZXR1cm4gdlxyXG4gIH1cclxuICBmdW5jdGlvbiBUaHJvd2VyKGV4KSB7XHJcbiAgICB0aHJvdyBleFxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYWRvcHRWYWx1ZSh2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0LCBub1ZhbHVlKSB7XHJcbiAgICB2YXIgbWV0aG9kXHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHZhbHVlICYmIGlzRnVuY3Rpb24oKG1ldGhvZCA9IHZhbHVlLnByb21pc2UpKSkge1xyXG4gICAgICAgIG1ldGhvZFxyXG4gICAgICAgICAgLmNhbGwodmFsdWUpXHJcbiAgICAgICAgICAuZG9uZShyZXNvbHZlKVxyXG4gICAgICAgICAgLmZhaWwocmVqZWN0KVxyXG4gICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIGlzRnVuY3Rpb24oKG1ldGhvZCA9IHZhbHVlLnRoZW4pKSkge1xyXG4gICAgICAgIG1ldGhvZC5jYWxsKHZhbHVlLCByZXNvbHZlLCByZWplY3QpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZS5hcHBseSh1bmRlZmluZWQsIFt2YWx1ZV0uc2xpY2Uobm9WYWx1ZSkpXHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKHZhbHVlKSB7XHJcbiAgICAgIHJlamVjdC5hcHBseSh1bmRlZmluZWQsIFt2YWx1ZV0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBTbGltSlEuZXh0ZW5kKHtcclxuICAgIERlZmVycmVkOiBmdW5jdGlvbihmdW5jKSB7XHJcbiAgICAgIHZhciB0dXBsZXMgPSBbXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgJ25vdGlmeScsXHJcbiAgICAgICAgICAncHJvZ3Jlc3MnLFxyXG4gICAgICAgICAgU2xpbUpRLkNhbGxiYWNrcygnbWVtb3J5JyksXHJcbiAgICAgICAgICBTbGltSlEuQ2FsbGJhY2tzKCdtZW1vcnknKSxcclxuICAgICAgICAgIDJcclxuICAgICAgICBdLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgICdyZXNvbHZlJyxcclxuICAgICAgICAgICdkb25lJyxcclxuICAgICAgICAgIFNsaW1KUS5DYWxsYmFja3MoJ29uY2UgbWVtb3J5JyksXHJcbiAgICAgICAgICBTbGltSlEuQ2FsbGJhY2tzKCdvbmNlIG1lbW9yeScpLFxyXG4gICAgICAgICAgMCxcclxuICAgICAgICAgICdyZXNvbHZlZCdcclxuICAgICAgICBdLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgICdyZWplY3QnLFxyXG4gICAgICAgICAgJ2ZhaWwnLFxyXG4gICAgICAgICAgU2xpbUpRLkNhbGxiYWNrcygnb25jZSBtZW1vcnknKSxcclxuICAgICAgICAgIFNsaW1KUS5DYWxsYmFja3MoJ29uY2UgbWVtb3J5JyksXHJcbiAgICAgICAgICAxLFxyXG4gICAgICAgICAgJ3JlamVjdGVkJ1xyXG4gICAgICAgIF1cclxuICAgICAgXVxyXG5cclxuICAgICAgdmFyIHN0YXRlID0gJ3BlbmRpbmcnXHJcblxyXG4gICAgICB2YXIgcHJvbWlzZSA9IHtcclxuICAgICAgICBzdGF0ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICByZXR1cm4gc3RhdGVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFsd2F5czogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICBkZWZlcnJlZC5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpXHJcbiAgICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2F0Y2g6IGZ1bmN0aW9uKGZuKSB7XHJcbiAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKG51bGwsIGZuKVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHBpcGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgdmFyIGZucyA9IGFyZ3VtZW50c1xyXG5cclxuICAgICAgICAgIHJldHVybiBTbGltSlEuRGVmZXJyZWQoZnVuY3Rpb24obmV3RGVmZXIpIHtcclxuICAgICAgICAgICAgU2xpbUpRLmVhY2godHVwbGVzLCBmdW5jdGlvbihpLCB0dXBsZSkge1xyXG4gICAgICAgICAgICAgIHZhciBmbiA9IGlzRnVuY3Rpb24oZm5zW3R1cGxlWzRdXSkgJiYgZm5zW3R1cGxlWzRdXVxyXG5cclxuICAgICAgICAgICAgICBkZWZlcnJlZFt0dXBsZVsxXV0oZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbiAgICAgICAgICAgICAgICBpZiAocmV0dXJuZWQgJiYgaXNGdW5jdGlvbihyZXR1cm5lZC5wcm9taXNlKSkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm5lZFxyXG4gICAgICAgICAgICAgICAgICAgIC5wcm9taXNlKClcclxuICAgICAgICAgICAgICAgICAgICAucHJvZ3Jlc3MobmV3RGVmZXIubm90aWZ5KVxyXG4gICAgICAgICAgICAgICAgICAgIC5kb25lKG5ld0RlZmVyLnJlc29sdmUpXHJcbiAgICAgICAgICAgICAgICAgICAgLmZhaWwobmV3RGVmZXIucmVqZWN0KVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgbmV3RGVmZXJbdHVwbGVbMF0gKyAnV2l0aCddKHRoaXMsIGZuID8gW3JldHVybmVkXSA6IGFyZ3VtZW50cylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBmbnMgPSBudWxsXHJcbiAgICAgICAgICB9KS5wcm9taXNlKClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRoZW46IGZ1bmN0aW9uKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzKSB7XHJcbiAgICAgICAgICB2YXIgbWF4RGVwdGggPSAwXHJcbiAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlKGRlcHRoLCBkZWZlcnJlZCwgaGFuZGxlciwgc3BlY2lhbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzXHJcblxyXG4gICAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzXHJcblxyXG4gICAgICAgICAgICAgIHZhciBtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmV0dXJuZWQsIHRoZW5cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGVwdGggPCBtYXhEZXB0aCkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm5lZCA9IGhhbmRsZXIuYXBwbHkodGhhdCwgYXJncylcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmV0dXJuZWQgPT09IGRlZmVycmVkLnByb21pc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGVuYWJsZSBzZWxmLXJlc29sdXRpb24nKVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoZW4gPVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm5lZCAmJlxyXG4gICAgICAgICAgICAgICAgICAodHlwZW9mIHJldHVybmVkID09PSAnb2JqZWN0JyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXR1cm5lZCA9PT0gJ2Z1bmN0aW9uJykgJiZcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuZWQudGhlblxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoZW4pKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChzcGVjaWFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhlbi5jYWxsKFxyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwpXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG1heERlcHRoKytcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhlbi5jYWxsKFxyXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBkZWZlcnJlZC5ub3RpZnlXaXRoKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIgIT09IElkZW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhhdCA9IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbcmV0dXJuZWRdXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgIDsoc3BlY2lhbCB8fCBkZWZlcnJlZC5yZXNvbHZlV2l0aCkodGhhdCwgYXJncylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHZhciBwcm9jZXNzID0gc3BlY2lhbFxyXG4gICAgICAgICAgICAgICAgPyBtaWdodFRocm93XHJcbiAgICAgICAgICAgICAgICA6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1pZ2h0VGhyb3coKVxyXG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFNsaW1KUS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBTbGltSlEuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayhlLCBwcm9jZXNzLnN0YWNrVHJhY2UpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVwdGggKyAxID49IG1heERlcHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlciAhPT0gVGhyb3dlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGF0ID0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbZV1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5yZWplY3RXaXRoKHRoYXQsIGFyZ3MpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChkZXB0aCkge1xyXG4gICAgICAgICAgICAgICAgcHJvY2VzcygpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChTbGltSlEuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKSB7XHJcbiAgICAgICAgICAgICAgICAgIHByb2Nlc3Muc3RhY2tUcmFjZSA9IFNsaW1KUS5EZWZlcnJlZC5nZXRTdGFja0hvb2soKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQocHJvY2VzcylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gU2xpbUpRLkRlZmVycmVkKGZ1bmN0aW9uKG5ld0RlZmVyKSB7XHJcbiAgICAgICAgICAgIHR1cGxlc1swXVszXS5hZGQoXHJcbiAgICAgICAgICAgICAgcmVzb2x2ZShcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICBuZXdEZWZlcixcclxuICAgICAgICAgICAgICAgIGlzRnVuY3Rpb24ob25Qcm9ncmVzcykgPyBvblByb2dyZXNzIDogSWRlbnRpdHksXHJcbiAgICAgICAgICAgICAgICBuZXdEZWZlci5ub3RpZnlXaXRoXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgICB0dXBsZXNbMV1bM10uYWRkKFxyXG4gICAgICAgICAgICAgIHJlc29sdmUoXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgbmV3RGVmZXIsXHJcbiAgICAgICAgICAgICAgICBpc0Z1bmN0aW9uKG9uRnVsZmlsbGVkKSA/IG9uRnVsZmlsbGVkIDogSWRlbnRpdHlcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICAgIHR1cGxlc1syXVszXS5hZGQoXHJcbiAgICAgICAgICAgICAgcmVzb2x2ZShcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICBuZXdEZWZlcixcclxuICAgICAgICAgICAgICAgIGlzRnVuY3Rpb24ob25SZWplY3RlZCkgPyBvblJlamVjdGVkIDogVGhyb3dlclxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSkucHJvbWlzZSgpXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgcHJvbWlzZTogZnVuY3Rpb24ob2JqKSB7XHJcbiAgICAgICAgICByZXR1cm4gb2JqICE9IG51bGwgPyBTbGltSlEuZXh0ZW5kKG9iaiwgcHJvbWlzZSkgOiBwcm9taXNlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgZGVmZXJyZWQgPSB7fVxyXG5cclxuICAgICAgU2xpbUpRLmVhY2godHVwbGVzLCBmdW5jdGlvbihpLCB0dXBsZSkge1xyXG4gICAgICAgIHZhciBsaXN0ID0gdHVwbGVbMl1cclxuXHJcbiAgICAgICAgdmFyIHN0YXRlU3RyaW5nID0gdHVwbGVbNV1cclxuXHJcbiAgICAgICAgcHJvbWlzZVt0dXBsZVsxXV0gPSBsaXN0LmFkZFxyXG5cclxuICAgICAgICBpZiAoc3RhdGVTdHJpbmcpIHtcclxuICAgICAgICAgIGxpc3QuYWRkKFxyXG4gICAgICAgICAgICBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlU3RyaW5nXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICB0dXBsZXNbMyAtIGldWzJdLmRpc2FibGUsXHJcblxyXG4gICAgICAgICAgICB0dXBsZXNbMyAtIGldWzNdLmRpc2FibGUsXHJcblxyXG4gICAgICAgICAgICB0dXBsZXNbMF1bMl0ubG9jayxcclxuXHJcbiAgICAgICAgICAgIHR1cGxlc1swXVszXS5sb2NrXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsaXN0LmFkZCh0dXBsZVszXS5maXJlKVxyXG5cclxuICAgICAgICBkZWZlcnJlZFt0dXBsZVswXV0gPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIGRlZmVycmVkW3R1cGxlWzBdICsgJ1dpdGgnXShcclxuICAgICAgICAgICAgdGhpcyA9PT0gZGVmZXJyZWQgPyB1bmRlZmluZWQgOiB0aGlzLFxyXG4gICAgICAgICAgICBhcmd1bWVudHNcclxuICAgICAgICAgIClcclxuICAgICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWZlcnJlZFt0dXBsZVswXSArICdXaXRoJ10gPSBsaXN0LmZpcmVXaXRoXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBwcm9taXNlLnByb21pc2UoZGVmZXJyZWQpXHJcblxyXG4gICAgICBpZiAoZnVuYykge1xyXG4gICAgICAgIGZ1bmMuY2FsbChkZWZlcnJlZCwgZGVmZXJyZWQpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBkZWZlcnJlZFxyXG4gICAgfSxcclxuXHJcbiAgICB3aGVuOiBmdW5jdGlvbihzaW5nbGVWYWx1ZSkge1xyXG4gICAgICB2YXIgcmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aFxyXG5cclxuICAgICAgdmFyIGkgPSByZW1haW5pbmdcclxuXHJcbiAgICAgIHZhciByZXNvbHZlQ29udGV4dHMgPSBBcnJheShpKVxyXG5cclxuICAgICAgdmFyIHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cylcclxuXHJcbiAgICAgIHZhciBtYXN0ZXIgPSBTbGltSlEuRGVmZXJyZWQoKVxyXG5cclxuICAgICAgdmFyIHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbihpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgICByZXNvbHZlQ29udGV4dHNbaV0gPSB0aGlzXHJcbiAgICAgICAgICByZXNvbHZlVmFsdWVzW2ldID1cclxuICAgICAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZS5jYWxsKGFyZ3VtZW50cykgOiB2YWx1ZVxyXG4gICAgICAgICAgaWYgKCEtLXJlbWFpbmluZykge1xyXG4gICAgICAgICAgICBtYXN0ZXIucmVzb2x2ZVdpdGgocmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJlbWFpbmluZyA8PSAxKSB7XHJcbiAgICAgICAgYWRvcHRWYWx1ZShcclxuICAgICAgICAgIHNpbmdsZVZhbHVlLFxyXG4gICAgICAgICAgbWFzdGVyLmRvbmUodXBkYXRlRnVuYyhpKSkucmVzb2x2ZSxcclxuICAgICAgICAgIG1hc3Rlci5yZWplY3QsXHJcbiAgICAgICAgICAhcmVtYWluaW5nXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBtYXN0ZXIuc3RhdGUoKSA9PT0gJ3BlbmRpbmcnIHx8XHJcbiAgICAgICAgICBpc0Z1bmN0aW9uKHJlc29sdmVWYWx1ZXNbaV0gJiYgcmVzb2x2ZVZhbHVlc1tpXS50aGVuKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIG1hc3Rlci50aGVuKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICBhZG9wdFZhbHVlKHJlc29sdmVWYWx1ZXNbaV0sIHVwZGF0ZUZ1bmMoaSksIG1hc3Rlci5yZWplY3QpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBtYXN0ZXIucHJvbWlzZSgpXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgdmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC9cclxuXHJcbiAgU2xpbUpRLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgPSBmdW5jdGlvbihlcnJvciwgc3RhY2spIHtcclxuICAgIGlmIChcclxuICAgICAgd2luZG93LmNvbnNvbGUgJiZcclxuICAgICAgd2luZG93LmNvbnNvbGUud2FybiAmJlxyXG4gICAgICBlcnJvciAmJlxyXG4gICAgICByZXJyb3JOYW1lcy50ZXN0KGVycm9yLm5hbWUpXHJcbiAgICApIHtcclxuICAgICAgd2luZG93LmNvbnNvbGUud2FybihcclxuICAgICAgICAnU2xpbUpRLkRlZmVycmVkIGV4Y2VwdGlvbjogJyArIGVycm9yLm1lc3NhZ2UsXHJcbiAgICAgICAgZXJyb3Iuc3RhY2ssXHJcbiAgICAgICAgc3RhY2tcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgU2xpbUpRLnJlYWR5RXhjZXB0aW9uID0gZnVuY3Rpb24oZXJyb3IpIHtcclxuICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICB0aHJvdyBlcnJvclxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHZhciByZWFkeUxpc3QgPSBTbGltSlEuRGVmZXJyZWQoKVxyXG5cclxuICBTbGltSlEuZm4ucmVhZHkgPSBmdW5jdGlvbihmbikge1xyXG4gICAgcmVhZHlMaXN0XHJcbiAgICAgIC50aGVuKGZuKVxyXG5cclxuICAgICAgLmNhdGNoKGZ1bmN0aW9uKGVycm9yKSB7XHJcbiAgICAgICAgU2xpbUpRLnJlYWR5RXhjZXB0aW9uKGVycm9yKVxyXG4gICAgICB9KVxyXG5cclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxuICBTbGltSlEuZXh0ZW5kKHtcclxuICAgIGlzUmVhZHk6IGZhbHNlLFxyXG5cclxuICAgIHJlYWR5V2FpdDogMSxcclxuXHJcbiAgICByZWFkeTogZnVuY3Rpb24od2FpdCkge1xyXG4gICAgICBpZiAod2FpdCA9PT0gdHJ1ZSA/IC0tU2xpbUpRLnJlYWR5V2FpdCA6IFNsaW1KUS5pc1JlYWR5KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFNsaW1KUS5pc1JlYWR5ID0gdHJ1ZVxyXG5cclxuICAgICAgaWYgKHdhaXQgIT09IHRydWUgJiYgLS1TbGltSlEucmVhZHlXYWl0ID4gMCkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICByZWFkeUxpc3QucmVzb2x2ZVdpdGgoZG9jdW1lbnQsIFtTbGltSlFdKVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIFNsaW1KUS5yZWFkeS50aGVuID0gcmVhZHlMaXN0LnRoZW5cclxuXHJcbiAgZnVuY3Rpb24gY29tcGxldGVkKCkge1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGNvbXBsZXRlZClcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgY29tcGxldGVkKVxyXG4gICAgU2xpbUpRLnJlYWR5KClcclxuICB9XHJcblxyXG4gIGlmIChcclxuICAgIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScgfHxcclxuICAgIChkb2N1bWVudC5yZWFkeVN0YXRlICE9PSAnbG9hZGluZycgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbClcclxuICApIHtcclxuICAgIHdpbmRvdy5zZXRUaW1lb3V0KFNsaW1KUS5yZWFkeSlcclxuICB9IGVsc2Uge1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGNvbXBsZXRlZClcclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGNvbXBsZXRlZClcclxuICB9XHJcblxyXG4gIHZhciBhY2Nlc3MgPSBmdW5jdGlvbihlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdykge1xyXG4gICAgdmFyIGkgPSAwXHJcblxyXG4gICAgdmFyIGxlbiA9IGVsZW1zLmxlbmd0aFxyXG5cclxuICAgIHZhciBidWxrID0ga2V5ID09IG51bGxcclxuXHJcbiAgICBpZiAodG9UeXBlKGtleSkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGNoYWluYWJsZSA9IHRydWVcclxuICAgICAgZm9yIChpIGluIGtleSkge1xyXG4gICAgICAgIGFjY2VzcyhlbGVtcywgZm4sIGksIGtleVtpXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdylcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNoYWluYWJsZSA9IHRydWVcclxuXHJcbiAgICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHtcclxuICAgICAgICByYXcgPSB0cnVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChidWxrKSB7XHJcbiAgICAgICAgaWYgKHJhdykge1xyXG4gICAgICAgICAgZm4uY2FsbChlbGVtcywgdmFsdWUpXHJcbiAgICAgICAgICBmbiA9IG51bGxcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYnVsayA9IGZuXHJcbiAgICAgICAgICBmbiA9IGZ1bmN0aW9uKGVsZW0sIGtleSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGJ1bGsuY2FsbChTbGltSlEoZWxlbSksIHZhbHVlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGZuKSB7XHJcbiAgICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgZm4oXHJcbiAgICAgICAgICAgIGVsZW1zW2ldLFxyXG4gICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgIHJhdyA/IHZhbHVlIDogdmFsdWUuY2FsbChlbGVtc1tpXSwgaSwgZm4oZWxlbXNbaV0sIGtleSkpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYWluYWJsZSkge1xyXG4gICAgICByZXR1cm4gZWxlbXNcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYnVsaykge1xyXG4gICAgICByZXR1cm4gZm4uY2FsbChlbGVtcylcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGVuID8gZm4oZWxlbXNbMF0sIGtleSkgOiBlbXB0eUdldFxyXG4gIH1cclxuXHJcbiAgdmFyIHJtc1ByZWZpeCA9IC9eLW1zLS9cclxuXHJcbiAgdmFyIHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZ1xyXG5cclxuICBmdW5jdGlvbiBmY2FtZWxDYXNlKGFsbCwgbGV0dGVyKSB7XHJcbiAgICByZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKClcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNhbWVsQ2FzZShzdHJpbmcpIHtcclxuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShybXNQcmVmaXgsICdtcy0nKS5yZXBsYWNlKHJkYXNoQWxwaGEsIGZjYW1lbENhc2UpXHJcbiAgfVxyXG4gIHZhciBhY2NlcHREYXRhID0gZnVuY3Rpb24ob3duZXIpIHtcclxuICAgIHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhK293bmVyLm5vZGVUeXBlXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBEYXRhKCkge1xyXG4gICAgdGhpcy5leHBhbmRvID0gU2xpbUpRLmV4cGFuZG8gKyBEYXRhLnVpZCsrXHJcbiAgfVxyXG5cclxuICBEYXRhLnVpZCA9IDFcclxuXHJcbiAgRGF0YS5wcm90b3R5cGUgPSB7XHJcbiAgICBjYWNoZTogZnVuY3Rpb24ob3duZXIpIHtcclxuICAgICAgdmFyIHZhbHVlID0gb3duZXJbdGhpcy5leHBhbmRvXVxyXG5cclxuICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgIHZhbHVlID0ge31cclxuXHJcbiAgICAgICAgaWYgKGFjY2VwdERhdGEob3duZXIpKSB7XHJcbiAgICAgICAgICBpZiAob3duZXIubm9kZVR5cGUpIHtcclxuICAgICAgICAgICAgb3duZXJbdGhpcy5leHBhbmRvXSA9IHZhbHVlXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3duZXIsIHRoaXMuZXhwYW5kbywge1xyXG4gICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24ob3duZXIsIGRhdGEsIHZhbHVlKSB7XHJcbiAgICAgIHZhciBwcm9wXHJcblxyXG4gICAgICB2YXIgY2FjaGUgPSB0aGlzLmNhY2hlKG93bmVyKVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGNhY2hlW2NhbWVsQ2FzZShkYXRhKV0gPSB2YWx1ZVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAocHJvcCBpbiBkYXRhKSB7XHJcbiAgICAgICAgICBjYWNoZVtjYW1lbENhc2UocHJvcCldID0gZGF0YVtwcm9wXVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY2FjaGVcclxuICAgIH0sXHJcbiAgICBnZXQ6IGZ1bmN0aW9uKG93bmVyLCBrZXkpIHtcclxuICAgICAgcmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICAgPyB0aGlzLmNhY2hlKG93bmVyKVxyXG4gICAgICAgIDogb3duZXJbdGhpcy5leHBhbmRvXSAmJiBvd25lclt0aGlzLmV4cGFuZG9dW2NhbWVsQ2FzZShrZXkpXVxyXG4gICAgfSxcclxuICAgIGFjY2VzczogZnVuY3Rpb24ob3duZXIsIGtleSwgdmFsdWUpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGtleSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgKGtleSAmJiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXQob3duZXIsIGtleSlcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXQob3duZXIsIGtleSwgdmFsdWUpXHJcblxyXG4gICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5XHJcbiAgICB9LFxyXG4gICAgcmVtb3ZlOiBmdW5jdGlvbihvd25lciwga2V5KSB7XHJcbiAgICAgIHZhciBpXHJcblxyXG4gICAgICB2YXIgY2FjaGUgPSBvd25lclt0aGlzLmV4cGFuZG9dXHJcblxyXG4gICAgICBpZiAoY2FjaGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShrZXkpKSB7XHJcbiAgICAgICAgICBrZXkgPSBrZXkubWFwKGNhbWVsQ2FzZSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAga2V5ID0gY2FtZWxDYXNlKGtleSlcclxuXHJcbiAgICAgICAgICBrZXkgPSBrZXkgaW4gY2FjaGUgPyBba2V5XSA6IGtleS5tYXRjaChybm90aHRtbHdoaXRlKSB8fCBbXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaSA9IGtleS5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgICAgZGVsZXRlIGNhY2hlW2tleVtpXV1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBTbGltSlEuaXNFbXB0eU9iamVjdChjYWNoZSkpIHtcclxuICAgICAgICBpZiAob3duZXIubm9kZVR5cGUpIHtcclxuICAgICAgICAgIG93bmVyW3RoaXMuZXhwYW5kb10gPSB1bmRlZmluZWRcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZGVsZXRlIG93bmVyW3RoaXMuZXhwYW5kb11cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBoYXNEYXRhOiBmdW5jdGlvbihvd25lcikge1xyXG4gICAgICB2YXIgY2FjaGUgPSBvd25lclt0aGlzLmV4cGFuZG9dXHJcbiAgICAgIHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFTbGltSlEuaXNFbXB0eU9iamVjdChjYWNoZSlcclxuICAgIH1cclxuICB9XHJcbiAgdmFyIGRhdGFQcml2ID0gbmV3IERhdGEoKVxyXG5cclxuICB2YXIgZGF0YVVzZXIgPSBuZXcgRGF0YSgpXHJcblxyXG4gIHZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC9cclxuXHJcbiAgdmFyIHJtdWx0aURhc2ggPSAvW0EtWl0vZ1xyXG5cclxuICBmdW5jdGlvbiBnZXREYXRhKGRhdGEpIHtcclxuICAgIGlmIChkYXRhID09PSAndHJ1ZScpIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0YSA9PT0gJ2ZhbHNlJykge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0YSA9PT0gJ251bGwnKSB7XHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGEgPT09ICtkYXRhICsgJycpIHtcclxuICAgICAgcmV0dXJuICtkYXRhXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJicmFjZS50ZXN0KGRhdGEpKSB7XHJcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGFcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRhdGFBdHRyKGVsZW0sIGtleSwgZGF0YSkge1xyXG4gICAgdmFyIG5hbWVcclxuXHJcbiAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgbmFtZSA9ICdkYXRhLScgKyBrZXkucmVwbGFjZShybXVsdGlEYXNoLCAnLSQmJykudG9Mb3dlckNhc2UoKVxyXG4gICAgICBkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUobmFtZSlcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgZGF0YSA9IGdldERhdGEoZGF0YSlcclxuICAgICAgICB9IGNhdGNoIChlKSB7fVxyXG5cclxuICAgICAgICBkYXRhVXNlci5zZXQoZWxlbSwga2V5LCBkYXRhKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRhdGEgPSB1bmRlZmluZWRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGFcclxuICB9XHJcblxyXG4gIFNsaW1KUS5leHRlbmQoe1xyXG4gICAgaGFzRGF0YTogZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICByZXR1cm4gZGF0YVVzZXIuaGFzRGF0YShlbGVtKSB8fCBkYXRhUHJpdi5oYXNEYXRhKGVsZW0pXHJcbiAgICB9LFxyXG5cclxuICAgIGRhdGE6IGZ1bmN0aW9uKGVsZW0sIG5hbWUsIGRhdGEpIHtcclxuICAgICAgcmV0dXJuIGRhdGFVc2VyLmFjY2VzcyhlbGVtLCBuYW1lLCBkYXRhKVxyXG4gICAgfSxcclxuXHJcbiAgICByZW1vdmVEYXRhOiBmdW5jdGlvbihlbGVtLCBuYW1lKSB7XHJcbiAgICAgIGRhdGFVc2VyLnJlbW92ZShlbGVtLCBuYW1lKVxyXG4gICAgfSxcclxuXHJcbiAgICBfZGF0YTogZnVuY3Rpb24oZWxlbSwgbmFtZSwgZGF0YSkge1xyXG4gICAgICByZXR1cm4gZGF0YVByaXYuYWNjZXNzKGVsZW0sIG5hbWUsIGRhdGEpXHJcbiAgICB9LFxyXG5cclxuICAgIF9yZW1vdmVEYXRhOiBmdW5jdGlvbihlbGVtLCBuYW1lKSB7XHJcbiAgICAgIGRhdGFQcml2LnJlbW92ZShlbGVtLCBuYW1lKVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIFNsaW1KUS5mbi5leHRlbmQoe1xyXG4gICAgZGF0YTogZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xyXG4gICAgICB2YXIgaVxyXG5cclxuICAgICAgdmFyIG5hbWVcclxuXHJcbiAgICAgIHZhciBkYXRhXHJcblxyXG4gICAgICB2YXIgZWxlbSA9IHRoaXNbMF1cclxuXHJcbiAgICAgIHZhciBhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzXHJcblxyXG4gICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodGhpcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGRhdGEgPSBkYXRhVXNlci5nZXQoZWxlbSlcclxuXHJcbiAgICAgICAgICBpZiAoZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YVByaXYuZ2V0KGVsZW0sICdoYXNEYXRhQXR0cnMnKSkge1xyXG4gICAgICAgICAgICBpID0gYXR0cnMubGVuZ3RoXHJcbiAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICAgICAgICBpZiAoYXR0cnNbaV0pIHtcclxuICAgICAgICAgICAgICAgIG5hbWUgPSBhdHRyc1tpXS5uYW1lXHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZS5pbmRleE9mKCdkYXRhLScpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWUgPSBjYW1lbENhc2UobmFtZS5zbGljZSg1KSlcclxuICAgICAgICAgICAgICAgICAgZGF0YUF0dHIoZWxlbSwgbmFtZSwgZGF0YVtuYW1lXSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGF0YVByaXYuc2V0KGVsZW0sICdoYXNEYXRhQXR0cnMnLCB0cnVlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGRhdGFcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgIGRhdGFVc2VyLnNldCh0aGlzLCBrZXkpXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGFjY2VzcyhcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgICB2YXIgZGF0YVxyXG5cclxuICAgICAgICAgIGlmIChlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZGF0YSA9IGRhdGFVc2VyLmdldChlbGVtLCBrZXkpXHJcbiAgICAgICAgICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZGF0YVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkYXRhID0gZGF0YUF0dHIoZWxlbSwga2V5KVxyXG4gICAgICAgICAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBkYXRhVXNlci5zZXQodGhpcywga2V5LCB2YWx1ZSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIHZhbHVlLFxyXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApXHJcbiAgICB9LFxyXG5cclxuICAgIHJlbW92ZURhdGE6IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGRhdGFVc2VyLnJlbW92ZSh0aGlzLCBrZXkpXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgU2xpbUpRLmV4dGVuZCh7XHJcbiAgICBxdWV1ZTogZnVuY3Rpb24oZWxlbSwgdHlwZSwgZGF0YSkge1xyXG4gICAgICB2YXIgcXVldWVcclxuXHJcbiAgICAgIGlmIChlbGVtKSB7XHJcbiAgICAgICAgdHlwZSA9ICh0eXBlIHx8ICdmeCcpICsgJ3F1ZXVlJ1xyXG4gICAgICAgIHF1ZXVlID0gZGF0YVByaXYuZ2V0KGVsZW0sIHR5cGUpXHJcblxyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICBpZiAoIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcclxuICAgICAgICAgICAgcXVldWUgPSBkYXRhUHJpdi5hY2Nlc3MoZWxlbSwgdHlwZSwgU2xpbUpRLm1ha2VBcnJheShkYXRhKSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHF1ZXVlLnB1c2goZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHF1ZXVlIHx8IFtdXHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgZGVxdWV1ZTogZnVuY3Rpb24oZWxlbSwgdHlwZSkge1xyXG4gICAgICB0eXBlID0gdHlwZSB8fCAnZngnXHJcblxyXG4gICAgICB2YXIgcXVldWUgPSBTbGltSlEucXVldWUoZWxlbSwgdHlwZSlcclxuXHJcbiAgICAgIHZhciBzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aFxyXG5cclxuICAgICAgdmFyIGZuID0gcXVldWUuc2hpZnQoKVxyXG5cclxuICAgICAgdmFyIGhvb2tzID0gU2xpbUpRLl9xdWV1ZUhvb2tzKGVsZW0sIHR5cGUpXHJcblxyXG4gICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIFNsaW1KUS5kZXF1ZXVlKGVsZW0sIHR5cGUpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmbiA9PT0gJ2lucHJvZ3Jlc3MnKSB7XHJcbiAgICAgICAgZm4gPSBxdWV1ZS5zaGlmdCgpXHJcbiAgICAgICAgc3RhcnRMZW5ndGgtLVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZm4pIHtcclxuICAgICAgICBpZiAodHlwZSA9PT0gJ2Z4Jykge1xyXG4gICAgICAgICAgcXVldWUudW5zaGlmdCgnaW5wcm9ncmVzcycpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWxldGUgaG9va3Muc3RvcFxyXG4gICAgICAgIGZuLmNhbGwoZWxlbSwgbmV4dCwgaG9va3MpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghc3RhcnRMZW5ndGggJiYgaG9va3MpIHtcclxuICAgICAgICBob29rcy5lbXB0eS5maXJlKClcclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBfcXVldWVIb29rczogZnVuY3Rpb24oZWxlbSwgdHlwZSkge1xyXG4gICAgICB2YXIga2V5ID0gdHlwZSArICdxdWV1ZUhvb2tzJ1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGRhdGFQcml2LmdldChlbGVtLCBrZXkpIHx8XHJcbiAgICAgICAgZGF0YVByaXYuYWNjZXNzKGVsZW0sIGtleSwge1xyXG4gICAgICAgICAgZW1wdHk6IFNsaW1KUS5DYWxsYmFja3MoJ29uY2UgbWVtb3J5JykuYWRkKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBkYXRhUHJpdi5yZW1vdmUoZWxlbSwgW3R5cGUgKyAncXVldWUnLCBrZXldKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgU2xpbUpRLmZuLmV4dGVuZCh7XHJcbiAgICBxdWV1ZTogZnVuY3Rpb24odHlwZSwgZGF0YSkge1xyXG4gICAgICB2YXIgc2V0dGVyID0gMlxyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGRhdGEgPSB0eXBlXHJcbiAgICAgICAgdHlwZSA9ICdmeCdcclxuICAgICAgICBzZXR0ZXItLVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlcikge1xyXG4gICAgICAgIHJldHVybiBTbGltSlEucXVldWUodGhpc1swXSwgdHlwZSlcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZFxyXG4gICAgICAgID8gdGhpc1xyXG4gICAgICAgIDogdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgdmFyIHF1ZXVlID0gU2xpbUpRLnF1ZXVlKHRoaXMsIHR5cGUsIGRhdGEpXHJcblxyXG4gICAgICAgICAgU2xpbUpRLl9xdWV1ZUhvb2tzKHRoaXMsIHR5cGUpXHJcblxyXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdmeCcgJiYgcXVldWVbMF0gIT09ICdpbnByb2dyZXNzJykge1xyXG4gICAgICAgICAgICBTbGltSlEuZGVxdWV1ZSh0aGlzLCB0eXBlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgZGVxdWV1ZTogZnVuY3Rpb24odHlwZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIFNsaW1KUS5kZXF1ZXVlKHRoaXMsIHR5cGUpXHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgY2xlYXJRdWV1ZTogZnVuY3Rpb24odHlwZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5xdWV1ZSh0eXBlIHx8ICdmeCcsIFtdKVxyXG4gICAgfSxcclxuXHJcbiAgICBwcm9taXNlOiBmdW5jdGlvbih0eXBlLCBvYmopIHtcclxuICAgICAgdmFyIHRtcFxyXG5cclxuICAgICAgdmFyIGNvdW50ID0gMVxyXG5cclxuICAgICAgdmFyIGRlZmVyID0gU2xpbUpRLkRlZmVycmVkKClcclxuXHJcbiAgICAgIHZhciBlbGVtZW50cyA9IHRoaXNcclxuXHJcbiAgICAgIHZhciBpID0gdGhpcy5sZW5ndGhcclxuXHJcbiAgICAgIHZhciByZXNvbHZlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKCEtLWNvdW50KSB7XHJcbiAgICAgICAgICBkZWZlci5yZXNvbHZlV2l0aChlbGVtZW50cywgW2VsZW1lbnRzXSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICBvYmogPSB0eXBlXHJcbiAgICAgICAgdHlwZSA9IHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICAgIHR5cGUgPSB0eXBlIHx8ICdmeCdcclxuXHJcbiAgICAgIHdoaWxlIChpLS0pIHtcclxuICAgICAgICB0bXAgPSBkYXRhUHJpdi5nZXQoZWxlbWVudHNbaV0sIHR5cGUgKyAncXVldWVIb29rcycpXHJcbiAgICAgICAgaWYgKHRtcCAmJiB0bXAuZW1wdHkpIHtcclxuICAgICAgICAgIGNvdW50KytcclxuICAgICAgICAgIHRtcC5lbXB0eS5hZGQocmVzb2x2ZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmVzb2x2ZSgpXHJcbiAgICAgIHJldHVybiBkZWZlci5wcm9taXNlKG9iailcclxuICAgIH1cclxuICB9KVxyXG4gIHZhciBwbnVtID0gL1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8uc291cmNlXHJcblxyXG4gIHZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCgnXig/OihbKy1dKT18KSgnICsgcG51bSArICcpKFthLXolXSopJCcsICdpJylcclxuXHJcbiAgdmFyIGNzc0V4cGFuZCA9IFsnVG9wJywgJ1JpZ2h0JywgJ0JvdHRvbScsICdMZWZ0J11cclxuXHJcbiAgdmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKGVsZW0sIGVsKSB7XHJcbiAgICBlbGVtID0gZWwgfHwgZWxlbVxyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnIHx8XHJcbiAgICAgIChlbGVtLnN0eWxlLmRpc3BsYXkgPT09ICcnICYmXHJcbiAgICAgICAgU2xpbUpRLmNvbnRhaW5zKGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSkgJiZcclxuICAgICAgICBTbGltSlEuY3NzKGVsZW0sICdkaXNwbGF5JykgPT09ICdub25lJylcclxuICAgIClcclxuICB9XHJcblxyXG4gIHZhciBzd2FwID0gZnVuY3Rpb24oZWxlbSwgb3B0aW9ucywgY2FsbGJhY2ssIGFyZ3MpIHtcclxuICAgIHZhciByZXRcclxuXHJcbiAgICB2YXIgbmFtZVxyXG5cclxuICAgIHZhciBvbGQgPSB7fVxyXG5cclxuICAgIGZvciAobmFtZSBpbiBvcHRpb25zKSB7XHJcbiAgICAgIG9sZFtuYW1lXSA9IGVsZW0uc3R5bGVbbmFtZV1cclxuICAgICAgZWxlbS5zdHlsZVtuYW1lXSA9IG9wdGlvbnNbbmFtZV1cclxuICAgIH1cclxuXHJcbiAgICByZXQgPSBjYWxsYmFjay5hcHBseShlbGVtLCBhcmdzIHx8IFtdKVxyXG5cclxuICAgIGZvciAobmFtZSBpbiBvcHRpb25zKSB7XHJcbiAgICAgIGVsZW0uc3R5bGVbbmFtZV0gPSBvbGRbbmFtZV1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBhZGp1c3RDU1MoZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4pIHtcclxuICAgIHZhciBhZGp1c3RlZFxyXG5cclxuICAgIHZhciBzY2FsZVxyXG5cclxuICAgIHZhciBtYXhJdGVyYXRpb25zID0gMjBcclxuXHJcbiAgICB2YXIgY3VycmVudFZhbHVlID0gdHdlZW5cclxuICAgICAgPyBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdHdlZW4uY3VyKClcclxuICAgICAgfVxyXG4gICAgICA6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBTbGltSlEuY3NzKGVsZW0sIHByb3AsICcnKVxyXG4gICAgICB9XHJcblxyXG4gICAgdmFyIGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKVxyXG5cclxuICAgIHZhciB1bml0ID1cclxuICAgICAgKHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1szXSkgfHwgKFNsaW1KUS5jc3NOdW1iZXJbcHJvcF0gPyAnJyA6ICdweCcpXHJcblxyXG4gICAgdmFyIGluaXRpYWxJblVuaXQgPVxyXG4gICAgICAoU2xpbUpRLmNzc051bWJlcltwcm9wXSB8fCAodW5pdCAhPT0gJ3B4JyAmJiAraW5pdGlhbCkpICYmXHJcbiAgICAgIHJjc3NOdW0uZXhlYyhTbGltSlEuY3NzKGVsZW0sIHByb3ApKVxyXG5cclxuICAgIGlmIChpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbM10gIT09IHVuaXQpIHtcclxuICAgICAgaW5pdGlhbCA9IGluaXRpYWwgLyAyXHJcblxyXG4gICAgICB1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WzNdXHJcblxyXG4gICAgICBpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMVxyXG5cclxuICAgICAgd2hpbGUgKG1heEl0ZXJhdGlvbnMtLSkge1xyXG4gICAgICAgIFNsaW1KUS5zdHlsZShlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdClcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAoMSAtIHNjYWxlKSAqICgxIC0gKHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSkpIDw9XHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBtYXhJdGVyYXRpb25zID0gMFxyXG4gICAgICAgIH1cclxuICAgICAgICBpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMlxyXG4gICAgICBTbGltSlEuc3R5bGUoZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQpXHJcblxyXG4gICAgICB2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWx1ZVBhcnRzKSB7XHJcbiAgICAgIGluaXRpYWxJblVuaXQgPSAraW5pdGlhbEluVW5pdCB8fCAraW5pdGlhbCB8fCAwXHJcblxyXG4gICAgICBhZGp1c3RlZCA9IHZhbHVlUGFydHNbMV1cclxuICAgICAgICA/IGluaXRpYWxJblVuaXQgKyAodmFsdWVQYXJ0c1sxXSArIDEpICogdmFsdWVQYXJ0c1syXVxyXG4gICAgICAgIDogK3ZhbHVlUGFydHNbMl1cclxuICAgICAgaWYgKHR3ZWVuKSB7XHJcbiAgICAgICAgdHdlZW4udW5pdCA9IHVuaXRcclxuICAgICAgICB0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXRcclxuICAgICAgICB0d2Vlbi5lbmQgPSBhZGp1c3RlZFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWRqdXN0ZWRcclxuICB9XHJcblxyXG4gIHZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9XHJcblxyXG4gIGZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KGVsZW0pIHtcclxuICAgIHZhciB0ZW1wXHJcblxyXG4gICAgdmFyIGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudFxyXG5cclxuICAgIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWVcclxuXHJcbiAgICB2YXIgZGlzcGxheSA9IGRlZmF1bHREaXNwbGF5TWFwW25vZGVOYW1lXVxyXG5cclxuICAgIGlmIChkaXNwbGF5KSB7XHJcbiAgICAgIHJldHVybiBkaXNwbGF5XHJcbiAgICB9XHJcblxyXG4gICAgdGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKGRvYy5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKSlcclxuICAgIGRpc3BsYXkgPSBTbGltSlEuY3NzKHRlbXAsICdkaXNwbGF5JylcclxuXHJcbiAgICB0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGVtcClcclxuXHJcbiAgICBpZiAoZGlzcGxheSA9PT0gJ25vbmUnKSB7XHJcbiAgICAgIGRpc3BsYXkgPSAnYmxvY2snXHJcbiAgICB9XHJcbiAgICBkZWZhdWx0RGlzcGxheU1hcFtub2RlTmFtZV0gPSBkaXNwbGF5XHJcblxyXG4gICAgcmV0dXJuIGRpc3BsYXlcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNob3dIaWRlKGVsZW1lbnRzLCBzaG93KSB7XHJcbiAgICB2YXIgZGlzcGxheVxyXG5cclxuICAgIHZhciBlbGVtXHJcblxyXG4gICAgdmFyIHZhbHVlcyA9IFtdXHJcblxyXG4gICAgdmFyIGluZGV4ID0gMFxyXG5cclxuICAgIHZhciBsZW5ndGggPSBlbGVtZW50cy5sZW5ndGhcclxuXHJcbiAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgZWxlbSA9IGVsZW1lbnRzW2luZGV4XVxyXG4gICAgICBpZiAoIWVsZW0uc3R5bGUpIHtcclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5XHJcbiAgICAgIGlmIChzaG93KSB7XHJcbiAgICAgICAgaWYgKGRpc3BsYXkgPT09ICdub25lJykge1xyXG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IGRhdGFQcml2LmdldChlbGVtLCAnZGlzcGxheScpIHx8IG51bGxcclxuICAgICAgICAgIGlmICghdmFsdWVzW2luZGV4XSkge1xyXG4gICAgICAgICAgICBlbGVtLnN0eWxlLmRpc3BsYXkgPSAnJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZWxlbS5zdHlsZS5kaXNwbGF5ID09PSAnJyAmJiBpc0hpZGRlbldpdGhpblRyZWUoZWxlbSkpIHtcclxuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSBnZXREZWZhdWx0RGlzcGxheShlbGVtKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoZGlzcGxheSAhPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gJ25vbmUnXHJcblxyXG4gICAgICAgICAgZGF0YVByaXYuc2V0KGVsZW0sICdkaXNwbGF5JywgZGlzcGxheSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgaWYgKHZhbHVlc1tpbmRleF0gIT0gbnVsbCkge1xyXG4gICAgICAgIGVsZW1lbnRzW2luZGV4XS5zdHlsZS5kaXNwbGF5ID0gdmFsdWVzW2luZGV4XVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVsZW1lbnRzXHJcbiAgfVxyXG5cclxuICBTbGltSlEuZm4uZXh0ZW5kKHtcclxuICAgIHNob3c6IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gc2hvd0hpZGUodGhpcywgdHJ1ZSlcclxuICAgIH0sXHJcbiAgICBoaWRlOiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIHNob3dIaWRlKHRoaXMpXHJcbiAgICB9LFxyXG4gICAgdG9nZ2xlOiBmdW5jdGlvbihzdGF0ZSkge1xyXG4gICAgICBpZiAodHlwZW9mIHN0YXRlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICByZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKGlzSGlkZGVuV2l0aGluVHJlZSh0aGlzKSkge1xyXG4gICAgICAgICAgU2xpbUpRKHRoaXMpLnNob3coKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBTbGltSlEodGhpcykuaGlkZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH0pXHJcbiAgdmFyIHJjaGVja2FibGVUeXBlID0gL14oPzpjaGVja2JveHxyYWRpbykkL2lcclxuXHJcbiAgdmFyIHJ0YWdOYW1lID0gLzwoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0rKS9pXHJcblxyXG4gIHZhciByc2NyaXB0VHlwZSA9IC9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2lcclxuXHJcbiAgdmFyIHdyYXBNYXAgPSB7XHJcbiAgICBvcHRpb246IFsxLCBcIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz5cIiwgJzwvc2VsZWN0PiddLFxyXG5cclxuICAgIHRoZWFkOiBbMSwgJzx0YWJsZT4nLCAnPC90YWJsZT4nXSxcclxuICAgIGNvbDogWzIsICc8dGFibGU+PGNvbGdyb3VwPicsICc8L2NvbGdyb3VwPjwvdGFibGU+J10sXHJcbiAgICB0cjogWzIsICc8dGFibGU+PHRib2R5PicsICc8L3Rib2R5PjwvdGFibGU+J10sXHJcbiAgICB0ZDogWzMsICc8dGFibGU+PHRib2R5Pjx0cj4nLCAnPC90cj48L3Rib2R5PjwvdGFibGU+J10sXHJcblxyXG4gICAgX2RlZmF1bHQ6IFswLCAnJywgJyddXHJcbiAgfVxyXG5cclxuICB3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb25cclxuXHJcbiAgd3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID1cclxuICAgIHdyYXBNYXAudGhlYWRcclxuICB3cmFwTWFwLnRoID0gd3JhcE1hcC50ZFxyXG5cclxuICBmdW5jdGlvbiBnZXRBbGwoY29udGV4dCwgdGFnKSB7XHJcbiAgICB2YXIgcmV0XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICByZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyB8fCAnKicpXHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCh0YWcgfHwgJyonKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0ID0gW11cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGFnID09PSB1bmRlZmluZWQgfHwgKHRhZyAmJiBub2RlTmFtZShjb250ZXh0LCB0YWcpKSkge1xyXG4gICAgICByZXR1cm4gU2xpbUpRLm1lcmdlKFtjb250ZXh0XSwgcmV0KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXRcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNldEdsb2JhbEV2YWwoZWxlbXMsIHJlZkVsZW1lbnRzKSB7XHJcbiAgICB2YXIgaSA9IDBcclxuXHJcbiAgICB2YXIgbCA9IGVsZW1zLmxlbmd0aFxyXG5cclxuICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgIGRhdGFQcml2LnNldChcclxuICAgICAgICBlbGVtc1tpXSxcclxuICAgICAgICAnZ2xvYmFsRXZhbCcsXHJcbiAgICAgICAgIXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldChyZWZFbGVtZW50c1tpXSwgJ2dsb2JhbEV2YWwnKVxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy9cclxuXHJcbiAgZnVuY3Rpb24gYnVpbGRGcmFnbWVudChlbGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uLCBpZ25vcmVkKSB7XHJcbiAgICB2YXIgZWxlbVxyXG5cclxuICAgIHZhciB0bXBcclxuXHJcbiAgICB2YXIgdGFnXHJcblxyXG4gICAgdmFyIHdyYXBcclxuXHJcbiAgICB2YXIgY29udGFpbnNcclxuXHJcbiAgICB2YXIgalxyXG5cclxuICAgIHZhciBmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpXHJcblxyXG4gICAgdmFyIG5vZGVzID0gW11cclxuXHJcbiAgICB2YXIgaSA9IDBcclxuXHJcbiAgICB2YXIgbCA9IGVsZW1zLmxlbmd0aFxyXG5cclxuICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgIGVsZW0gPSBlbGVtc1tpXVxyXG5cclxuICAgICAgaWYgKGVsZW0gfHwgZWxlbSA9PT0gMCkge1xyXG4gICAgICAgIGlmICh0b1R5cGUoZWxlbSkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICBTbGltSlEubWVyZ2Uobm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbZWxlbV0gOiBlbGVtKVxyXG4gICAgICAgIH0gZWxzZSBpZiAoIXJodG1sLnRlc3QoZWxlbSkpIHtcclxuICAgICAgICAgIG5vZGVzLnB1c2goY29udGV4dC5jcmVhdGVUZXh0Tm9kZShlbGVtKSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKGNvbnRleHQuY3JlYXRlRWxlbWVudCgnZGl2JykpXHJcblxyXG4gICAgICAgICAgdGFnID0gKHJ0YWdOYW1lLmV4ZWMoZWxlbSkgfHwgWycnLCAnJ10pWzFdLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgIHdyYXAgPSB3cmFwTWFwW3RhZ10gfHwgd3JhcE1hcC5fZGVmYXVsdFxyXG4gICAgICAgICAgdG1wLmlubmVySFRNTCA9IHdyYXBbMV0gKyBTbGltSlEuaHRtbFByZWZpbHRlcihlbGVtKSArIHdyYXBbMl1cclxuXHJcbiAgICAgICAgICBqID0gd3JhcFswXVxyXG4gICAgICAgICAgd2hpbGUgKGotLSkge1xyXG4gICAgICAgICAgICB0bXAgPSB0bXAubGFzdENoaWxkXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgU2xpbUpRLm1lcmdlKG5vZGVzLCB0bXAuY2hpbGROb2RlcylcclxuXHJcbiAgICAgICAgICB0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkXHJcblxyXG4gICAgICAgICAgdG1wLnRleHRDb250ZW50ID0gJydcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmcmFnbWVudC50ZXh0Q29udGVudCA9ICcnXHJcblxyXG4gICAgaSA9IDBcclxuICAgIHdoaWxlICgoZWxlbSA9IG5vZGVzW2krK10pKSB7XHJcbiAgICAgIGlmIChzZWxlY3Rpb24gJiYgU2xpbUpRLmluQXJyYXkoZWxlbSwgc2VsZWN0aW9uKSA+IC0xKSB7XHJcbiAgICAgICAgaWYgKGlnbm9yZWQpIHtcclxuICAgICAgICAgIGlnbm9yZWQucHVzaChlbGVtKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb250aW51ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb250YWlucyA9IFNsaW1KUS5jb250YWlucyhlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0pXHJcblxyXG4gICAgICB0bXAgPSBnZXRBbGwoZnJhZ21lbnQuYXBwZW5kQ2hpbGQoZWxlbSksICdzY3JpcHQnKVxyXG5cclxuICAgICAgaWYgKGNvbnRhaW5zKSB7XHJcbiAgICAgICAgc2V0R2xvYmFsRXZhbCh0bXApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzY3JpcHRzKSB7XHJcbiAgICAgICAgaiA9IDBcclxuICAgICAgICB3aGlsZSAoKGVsZW0gPSB0bXBbaisrXSkpIHtcclxuICAgICAgICAgIGlmIChyc2NyaXB0VHlwZS50ZXN0KGVsZW0udHlwZSB8fCAnJykpIHtcclxuICAgICAgICAgICAgc2NyaXB0cy5wdXNoKGVsZW0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZyYWdtZW50XHJcbiAgfVxyXG5cclxuICA7KGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpXHJcblxyXG4gICAgdmFyIGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKVxyXG5cclxuICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JylcclxuXHJcbiAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAncmFkaW8nKVxyXG4gICAgaW5wdXQuc2V0QXR0cmlidXRlKCdjaGVja2VkJywgJ2NoZWNrZWQnKVxyXG4gICAgaW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgJ3QnKVxyXG5cclxuICAgIGRpdi5hcHBlbmRDaGlsZChpbnB1dClcclxuXHJcbiAgICBzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKHRydWUpLmNsb25lTm9kZSh0cnVlKS5sYXN0Q2hpbGQuY2hlY2tlZFxyXG5cclxuICAgIGRpdi5pbm5lckhUTUwgPSAnPHRleHRhcmVhPng8L3RleHRhcmVhPidcclxuICAgIHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUodHJ1ZSkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZVxyXG4gIH0pKClcclxuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XHJcblxyXG4gIHZhciBya2V5RXZlbnQgPSAvXmtleS9cclxuXHJcbiAgdmFyIHJtb3VzZUV2ZW50ID0gL14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svXHJcblxyXG4gIHZhciBydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlxcLiguKyl8KS9cclxuXHJcbiAgZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxyXG4gICAgfSBjYXRjaCAoZXJyKSB7fVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gb24oZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lKSB7XHJcbiAgICB2YXIgb3JpZ0ZuLCB0eXBlXHJcblxyXG4gICAgaWYgKHR5cGVvZiB0eXBlcyA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgaWYgKHR5cGVvZiBzZWxlY3RvciAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICBkYXRhID0gZGF0YSB8fCBzZWxlY3RvclxyXG4gICAgICAgIHNlbGVjdG9yID0gdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgICAgZm9yICh0eXBlIGluIHR5cGVzKSB7XHJcbiAgICAgICAgb24oZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzW3R5cGVdLCBvbmUpXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGVsZW1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwpIHtcclxuICAgICAgZm4gPSBzZWxlY3RvclxyXG4gICAgICBkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWRcclxuICAgIH0gZWxzZSBpZiAoZm4gPT0gbnVsbCkge1xyXG4gICAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGZuID0gZGF0YVxyXG4gICAgICAgIGRhdGEgPSB1bmRlZmluZWRcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmbiA9IGRhdGFcclxuICAgICAgICBkYXRhID0gc2VsZWN0b3JcclxuICAgICAgICBzZWxlY3RvciA9IHVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZm4gPT09IGZhbHNlKSB7XHJcbiAgICAgIGZuID0gcmV0dXJuRmFsc2VcclxuICAgIH0gZWxzZSBpZiAoIWZuKSB7XHJcbiAgICAgIHJldHVybiBlbGVtXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9uZSA9PT0gMSkge1xyXG4gICAgICBvcmlnRm4gPSBmblxyXG4gICAgICBmbiA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgU2xpbUpRKCkub2ZmKGV2ZW50KVxyXG4gICAgICAgIHJldHVybiBvcmlnRm4uYXBwbHkodGhpcywgYXJndW1lbnRzKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKG9yaWdGbi5ndWlkID0gU2xpbUpRLmd1aWQrKylcclxuICAgIH1cclxuICAgIHJldHVybiBlbGVtLmVhY2goZnVuY3Rpb24oKSB7XHJcbiAgICAgIFNsaW1KUS5ldmVudC5hZGQodGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvcilcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKlxyXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXHJcbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXHJcbiAqL1xyXG4gIFNsaW1KUS5ldmVudCA9IHtcclxuICAgIGdsb2JhbDoge30sXHJcblxyXG4gICAgYWRkOiBmdW5jdGlvbihlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IpIHtcclxuICAgICAgdmFyIGhhbmRsZU9iakluXHJcblxyXG4gICAgICB2YXIgZXZlbnRIYW5kbGVcclxuXHJcbiAgICAgIHZhciB0bXBcclxuXHJcbiAgICAgIHZhciBldmVudHNcclxuXHJcbiAgICAgIHZhciB0XHJcblxyXG4gICAgICB2YXIgaGFuZGxlT2JqXHJcblxyXG4gICAgICB2YXIgc3BlY2lhbFxyXG5cclxuICAgICAgdmFyIGhhbmRsZXJzXHJcblxyXG4gICAgICB2YXIgdHlwZVxyXG5cclxuICAgICAgdmFyIG5hbWVzcGFjZXNcclxuXHJcbiAgICAgIHZhciBvcmlnVHlwZVxyXG5cclxuICAgICAgdmFyIGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KGVsZW0pXHJcblxyXG4gICAgICBpZiAoIWVsZW1EYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChoYW5kbGVyLmhhbmRsZXIpIHtcclxuICAgICAgICBoYW5kbGVPYmpJbiA9IGhhbmRsZXJcclxuICAgICAgICBoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlclxyXG4gICAgICAgIHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3JcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHNlbGVjdG9yKSB7XHJcbiAgICAgICAgU2xpbUpRLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaGFuZGxlci5ndWlkKSB7XHJcbiAgICAgICAgaGFuZGxlci5ndWlkID0gU2xpbUpRLmd1aWQrK1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIShldmVudHMgPSBlbGVtRGF0YS5ldmVudHMpKSB7XHJcbiAgICAgICAgZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0ge31cclxuICAgICAgfVxyXG4gICAgICBpZiAoIShldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSkpIHtcclxuICAgICAgICBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgIHJldHVybiB0eXBlb2YgU2xpbUpRICE9PSAndW5kZWZpbmVkJyAmJlxyXG4gICAgICAgICAgICBTbGltSlEuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGVcclxuICAgICAgICAgICAgPyBTbGltSlEuZXZlbnQuZGlzcGF0Y2guYXBwbHkoZWxlbSwgYXJndW1lbnRzKVxyXG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdHlwZXMgPSAodHlwZXMgfHwgJycpLm1hdGNoKHJub3RodG1sd2hpdGUpIHx8IFsnJ11cclxuICAgICAgdCA9IHR5cGVzLmxlbmd0aFxyXG4gICAgICB3aGlsZSAodC0tKSB7XHJcbiAgICAgICAgdG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyh0eXBlc1t0XSkgfHwgW11cclxuICAgICAgICB0eXBlID0gb3JpZ1R5cGUgPSB0bXBbMV1cclxuICAgICAgICBuYW1lc3BhY2VzID0gKHRtcFsyXSB8fCAnJykuc3BsaXQoJy4nKS5zb3J0KClcclxuXHJcbiAgICAgICAgaWYgKCF0eXBlKSB7XHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3BlY2lhbCA9IFNsaW1KUS5ldmVudC5zcGVjaWFsW3R5cGVdIHx8IHt9XHJcblxyXG4gICAgICAgIHR5cGUgPSAoc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUpIHx8IHR5cGVcclxuXHJcbiAgICAgICAgc3BlY2lhbCA9IFNsaW1KUS5ldmVudC5zcGVjaWFsW3R5cGVdIHx8IHt9XHJcblxyXG4gICAgICAgIGhhbmRsZU9iaiA9IFNsaW1KUS5leHRlbmQoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgICAgIG9yaWdUeXBlOiBvcmlnVHlwZSxcclxuICAgICAgICAgICAgZGF0YTogZGF0YSxcclxuICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcclxuICAgICAgICAgICAgZ3VpZDogaGFuZGxlci5ndWlkLFxyXG4gICAgICAgICAgICBzZWxlY3Rvcjogc2VsZWN0b3IsXHJcbiAgICAgICAgICAgIG5lZWRzQ29udGV4dDpcclxuICAgICAgICAgICAgICBzZWxlY3RvciAmJiBTbGltSlEuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChzZWxlY3RvciksXHJcbiAgICAgICAgICAgIG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCcuJylcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBoYW5kbGVPYmpJblxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgaWYgKCEoaGFuZGxlcnMgPSBldmVudHNbdHlwZV0pKSB7XHJcbiAgICAgICAgICBoYW5kbGVycyA9IGV2ZW50c1t0eXBlXSA9IFtdXHJcbiAgICAgICAgICBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMFxyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXNwZWNpYWwuc2V0dXAgfHxcclxuICAgICAgICAgICAgc3BlY2lhbC5zZXR1cC5jYWxsKGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlKSA9PT0gZmFsc2VcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbS5hZGRFdmVudExpc3RlbmVyKSB7XHJcbiAgICAgICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50SGFuZGxlKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3BlY2lhbC5hZGQpIHtcclxuICAgICAgICAgIHNwZWNpYWwuYWRkLmNhbGwoZWxlbSwgaGFuZGxlT2JqKVxyXG5cclxuICAgICAgICAgIGlmICghaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCkge1xyXG4gICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VsZWN0b3IpIHtcclxuICAgICAgICAgIGhhbmRsZXJzLnNwbGljZShoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iailcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaGFuZGxlcnMucHVzaChoYW5kbGVPYmopXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBTbGltSlEuZXZlbnQuZ2xvYmFsW3R5cGVdID0gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbW92ZTogZnVuY3Rpb24oZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcykge1xyXG4gICAgICB2YXIgalxyXG5cclxuICAgICAgdmFyIG9yaWdDb3VudFxyXG5cclxuICAgICAgdmFyIHRtcFxyXG5cclxuICAgICAgdmFyIGV2ZW50c1xyXG5cclxuICAgICAgdmFyIHRcclxuXHJcbiAgICAgIHZhciBoYW5kbGVPYmpcclxuXHJcbiAgICAgIHZhciBzcGVjaWFsXHJcblxyXG4gICAgICB2YXIgaGFuZGxlcnNcclxuXHJcbiAgICAgIHZhciB0eXBlXHJcblxyXG4gICAgICB2YXIgbmFtZXNwYWNlc1xyXG5cclxuICAgICAgdmFyIG9yaWdUeXBlXHJcblxyXG4gICAgICB2YXIgZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKGVsZW0pICYmIGRhdGFQcml2LmdldChlbGVtKVxyXG5cclxuICAgICAgaWYgKCFlbGVtRGF0YSB8fCAhKGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cykpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgdHlwZXMgPSAodHlwZXMgfHwgJycpLm1hdGNoKHJub3RodG1sd2hpdGUpIHx8IFsnJ11cclxuICAgICAgdCA9IHR5cGVzLmxlbmd0aFxyXG4gICAgICB3aGlsZSAodC0tKSB7XHJcbiAgICAgICAgdG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyh0eXBlc1t0XSkgfHwgW11cclxuICAgICAgICB0eXBlID0gb3JpZ1R5cGUgPSB0bXBbMV1cclxuICAgICAgICBuYW1lc3BhY2VzID0gKHRtcFsyXSB8fCAnJykuc3BsaXQoJy4nKS5zb3J0KClcclxuXHJcbiAgICAgICAgaWYgKCF0eXBlKSB7XHJcbiAgICAgICAgICBmb3IgKHR5cGUgaW4gZXZlbnRzKSB7XHJcbiAgICAgICAgICAgIFNsaW1KUS5ldmVudC5yZW1vdmUoZWxlbSwgdHlwZSArIHR5cGVzW3RdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzcGVjaWFsID0gU2xpbUpRLmV2ZW50LnNwZWNpYWxbdHlwZV0gfHwge31cclxuICAgICAgICB0eXBlID0gKHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlKSB8fCB0eXBlXHJcbiAgICAgICAgaGFuZGxlcnMgPSBldmVudHNbdHlwZV0gfHwgW11cclxuICAgICAgICB0bXAgPVxyXG4gICAgICAgICAgdG1wWzJdICYmXHJcbiAgICAgICAgICBuZXcgUmVnRXhwKCcoXnxcXFxcLiknICsgbmFtZXNwYWNlcy5qb2luKCdcXFxcLig/Oi4qXFxcXC58KScpICsgJyhcXFxcLnwkKScpXHJcblxyXG4gICAgICAgIG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGhcclxuICAgICAgICB3aGlsZSAoai0tKSB7XHJcbiAgICAgICAgICBoYW5kbGVPYmogPSBoYW5kbGVyc1tqXVxyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgKG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUpICYmXHJcbiAgICAgICAgICAgICghaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkKSAmJlxyXG4gICAgICAgICAgICAoIXRtcCB8fCB0bXAudGVzdChoYW5kbGVPYmoubmFtZXNwYWNlKSkgJiZcclxuICAgICAgICAgICAgKCFzZWxlY3RvciB8fFxyXG4gICAgICAgICAgICAgIHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHxcclxuICAgICAgICAgICAgICAoc2VsZWN0b3IgPT09ICcqKicgJiYgaGFuZGxlT2JqLnNlbGVjdG9yKSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoaiwgMSlcclxuXHJcbiAgICAgICAgICAgIGlmIChoYW5kbGVPYmouc2VsZWN0b3IpIHtcclxuICAgICAgICAgICAgICBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3BlY2lhbC5yZW1vdmUpIHtcclxuICAgICAgICAgICAgICBzcGVjaWFsLnJlbW92ZS5jYWxsKGVsZW0sIGhhbmRsZU9iailcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFzcGVjaWFsLnRlYXJkb3duIHx8XHJcbiAgICAgICAgICAgIHNwZWNpYWwudGVhcmRvd24uY2FsbChlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUpID09PSBmYWxzZVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIFNsaW1KUS5yZW1vdmVFdmVudChlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFNsaW1KUS5pc0VtcHR5T2JqZWN0KGV2ZW50cykpIHtcclxuICAgICAgICBkYXRhUHJpdi5yZW1vdmUoZWxlbSwgJ2hhbmRsZSBldmVudHMnKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGRpc3BhdGNoOiBmdW5jdGlvbihuYXRpdmVFdmVudCkge1xyXG4gICAgICB2YXIgZXZlbnQgPSBTbGltSlEuZXZlbnQuZml4KG5hdGl2ZUV2ZW50KVxyXG5cclxuICAgICAgdmFyIGlcclxuXHJcbiAgICAgIHZhciBqXHJcblxyXG4gICAgICB2YXIgcmV0XHJcblxyXG4gICAgICB2YXIgbWF0Y2hlZFxyXG5cclxuICAgICAgdmFyIGhhbmRsZU9ialxyXG5cclxuICAgICAgdmFyIGhhbmRsZXJRdWV1ZVxyXG5cclxuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aClcclxuXHJcbiAgICAgIHZhciBoYW5kbGVycyA9IChkYXRhUHJpdi5nZXQodGhpcywgJ2V2ZW50cycpIHx8IHt9KVtldmVudC50eXBlXSB8fCBbXVxyXG5cclxuICAgICAgdmFyIHNwZWNpYWwgPSBTbGltSlEuZXZlbnQuc3BlY2lhbFtldmVudC50eXBlXSB8fCB7fVxyXG5cclxuICAgICAgYXJnc1swXSA9IGV2ZW50XHJcblxyXG4gICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXVxyXG4gICAgICB9XHJcblxyXG4gICAgICBldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXNcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBzcGVjaWFsLnByZURpc3BhdGNoICYmXHJcbiAgICAgICAgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsIGV2ZW50KSA9PT0gZmFsc2VcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGhhbmRsZXJRdWV1ZSA9IFNsaW1KUS5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsIGV2ZW50LCBoYW5kbGVycylcclxuXHJcbiAgICAgIGkgPSAwXHJcbiAgICAgIHdoaWxlICgobWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVtpKytdKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xyXG4gICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW1cclxuXHJcbiAgICAgICAgaiA9IDBcclxuICAgICAgICB3aGlsZSAoXHJcbiAgICAgICAgICAoaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1tqKytdKSAmJlxyXG4gICAgICAgICAgIWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmICghZXZlbnQucm5hbWVzcGFjZSB8fCBldmVudC5ybmFtZXNwYWNlLnRlc3QoaGFuZGxlT2JqLm5hbWVzcGFjZSkpIHtcclxuICAgICAgICAgICAgZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqXHJcbiAgICAgICAgICAgIGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YVxyXG5cclxuICAgICAgICAgICAgcmV0ID0gKFxyXG4gICAgICAgICAgICAgIChTbGltSlEuZXZlbnQuc3BlY2lhbFtoYW5kbGVPYmoub3JpZ1R5cGVdIHx8IHt9KS5oYW5kbGUgfHxcclxuICAgICAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlclxyXG4gICAgICAgICAgICApLmFwcGx5KG1hdGNoZWQuZWxlbSwgYXJncylcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIGlmICgoZXZlbnQucmVzdWx0ID0gcmV0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc3BlY2lhbC5wb3N0RGlzcGF0Y2gpIHtcclxuICAgICAgICBzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsIGV2ZW50KVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gZXZlbnQucmVzdWx0XHJcbiAgICB9LFxyXG5cclxuICAgIGhhbmRsZXJzOiBmdW5jdGlvbihldmVudCwgaGFuZGxlcnMpIHtcclxuICAgICAgdmFyIGlcclxuXHJcbiAgICAgIHZhciBoYW5kbGVPYmpcclxuXHJcbiAgICAgIHZhciBzZWxcclxuXHJcbiAgICAgIHZhciBtYXRjaGVkSGFuZGxlcnNcclxuXHJcbiAgICAgIHZhciBtYXRjaGVkU2VsZWN0b3JzXHJcblxyXG4gICAgICB2YXIgaGFuZGxlclF1ZXVlID0gW11cclxuXHJcbiAgICAgIHZhciBkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudFxyXG5cclxuICAgICAgdmFyIGN1ciA9IGV2ZW50LnRhcmdldFxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIGRlbGVnYXRlQ291bnQgJiZcclxuICAgICAgICBjdXIubm9kZVR5cGUgJiZcclxuICAgICAgICAhKGV2ZW50LnR5cGUgPT09ICdjbGljaycgJiYgZXZlbnQuYnV0dG9uID49IDEpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGZvciAoOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgY3VyLm5vZGVUeXBlID09PSAxICYmXHJcbiAgICAgICAgICAgICEoZXZlbnQudHlwZSA9PT0gJ2NsaWNrJyAmJiBjdXIuZGlzYWJsZWQgPT09IHRydWUpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbWF0Y2hlZEhhbmRsZXJzID0gW11cclxuICAgICAgICAgICAgbWF0Y2hlZFNlbGVjdG9ycyA9IHt9XHJcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgICBoYW5kbGVPYmogPSBoYW5kbGVyc1tpXVxyXG5cclxuICAgICAgICAgICAgICBzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyAnICdcclxuXHJcbiAgICAgICAgICAgICAgaWYgKG1hdGNoZWRTZWxlY3RvcnNbc2VsXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRjaGVkU2VsZWN0b3JzW3NlbF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0XHJcbiAgICAgICAgICAgICAgICAgID8gU2xpbUpRKHNlbCwgdGhpcykuaW5kZXgoY3VyKSA+IC0xXHJcbiAgICAgICAgICAgICAgICAgIDogU2xpbUpRLmZpbmQoc2VsLCB0aGlzLCBudWxsLCBbY3VyXSkubGVuZ3RoXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChtYXRjaGVkU2VsZWN0b3JzW3NlbF0pIHtcclxuICAgICAgICAgICAgICAgIG1hdGNoZWRIYW5kbGVycy5wdXNoKGhhbmRsZU9iailcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGNoZWRIYW5kbGVycy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBoYW5kbGVyUXVldWUucHVzaCh7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjdXIgPSB0aGlzXHJcbiAgICAgIGlmIChkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgaGFuZGxlclF1ZXVlLnB1c2goe1xyXG4gICAgICAgICAgZWxlbTogY3VyLFxyXG4gICAgICAgICAgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKGRlbGVnYXRlQ291bnQpXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGhhbmRsZXJRdWV1ZVxyXG4gICAgfSxcclxuXHJcbiAgICBhZGRQcm9wOiBmdW5jdGlvbihuYW1lLCBob29rKSB7XHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTbGltSlEuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcblxyXG4gICAgICAgIGdldDogaXNGdW5jdGlvbihob29rKVxyXG4gICAgICAgICAgPyBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxFdmVudCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBob29rKHRoaXMub3JpZ2luYWxFdmVudClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxFdmVudCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbbmFtZV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIHtcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0sXHJcblxyXG4gICAgZml4OiBmdW5jdGlvbihvcmlnaW5hbEV2ZW50KSB7XHJcbiAgICAgIHJldHVybiBvcmlnaW5hbEV2ZW50W1NsaW1KUS5leHBhbmRvXVxyXG4gICAgICAgID8gb3JpZ2luYWxFdmVudFxyXG4gICAgICAgIDogbmV3IFNsaW1KUS5FdmVudChvcmlnaW5hbEV2ZW50KVxyXG4gICAgfSxcclxuXHJcbiAgICBzcGVjaWFsOiB7XHJcbiAgICAgIGxvYWQ6IHtcclxuICAgICAgICBub0J1YmJsZTogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBmb2N1czoge1xyXG4gICAgICAgIHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMgIT09IHNhZmVBY3RpdmVFbGVtZW50KCkgJiYgdGhpcy5mb2N1cykge1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzKClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWxlZ2F0ZVR5cGU6ICdmb2N1c2luJ1xyXG4gICAgICB9LFxyXG4gICAgICBibHVyOiB7XHJcbiAgICAgICAgdHJpZ2dlcjogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICBpZiAodGhpcyA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJiB0aGlzLmJsdXIpIHtcclxuICAgICAgICAgICAgdGhpcy5ibHVyKClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBkZWxlZ2F0ZVR5cGU6ICdmb2N1c291dCdcclxuICAgICAgfSxcclxuICAgICAgY2xpY2s6IHtcclxuICAgICAgICB0cmlnZ2VyOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy50eXBlID09PSAnY2hlY2tib3gnICYmXHJcbiAgICAgICAgICAgIHRoaXMuY2xpY2sgJiZcclxuICAgICAgICAgICAgbm9kZU5hbWUodGhpcywgJ2lucHV0JylcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmNsaWNrKClcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgX2RlZmF1bHQ6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICByZXR1cm4gbm9kZU5hbWUoZXZlbnQudGFyZ2V0LCAnYScpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgYmVmb3JldW5sb2FkOiB7XHJcbiAgICAgICAgcG9zdERpc3BhdGNoOiBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgaWYgKGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQpIHtcclxuICAgICAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgU2xpbUpRLnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oZWxlbSwgdHlwZSwgaGFuZGxlKSB7XHJcbiAgICBpZiAoZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKSB7XHJcbiAgICAgIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBTbGltSlEuRXZlbnQgPSBmdW5jdGlvbihzcmMsIHByb3BzKSB7XHJcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU2xpbUpRLkV2ZW50KSkge1xyXG4gICAgICByZXR1cm4gbmV3IFNsaW1KUS5FdmVudChzcmMsIHByb3BzKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzcmMgJiYgc3JjLnR5cGUpIHtcclxuICAgICAgdGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjXHJcbiAgICAgIHRoaXMudHlwZSA9IHNyYy50eXBlXHJcblxyXG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9XHJcbiAgICAgICAgc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHxcclxuICAgICAgICAoc3JjLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJiBzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlKVxyXG4gICAgICAgICAgPyByZXR1cm5UcnVlXHJcbiAgICAgICAgICA6IHJldHVybkZhbHNlXHJcblxyXG4gICAgICB0aGlzLnRhcmdldCA9XHJcbiAgICAgICAgc3JjLnRhcmdldCAmJiBzcmMudGFyZ2V0Lm5vZGVUeXBlID09PSAzXHJcbiAgICAgICAgICA/IHNyYy50YXJnZXQucGFyZW50Tm9kZVxyXG4gICAgICAgICAgOiBzcmMudGFyZ2V0XHJcblxyXG4gICAgICB0aGlzLmN1cnJlbnRUYXJnZXQgPSBzcmMuY3VycmVudFRhcmdldFxyXG4gICAgICB0aGlzLnJlbGF0ZWRUYXJnZXQgPSBzcmMucmVsYXRlZFRhcmdldFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50eXBlID0gc3JjXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHByb3BzKSB7XHJcbiAgICAgIFNsaW1KUS5leHRlbmQodGhpcywgcHJvcHMpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50aW1lU3RhbXAgPSAoc3JjICYmIHNyYy50aW1lU3RhbXApIHx8IERhdGUubm93KClcclxuXHJcbiAgICB0aGlzW1NsaW1KUS5leHBhbmRvXSA9IHRydWVcclxuICB9XHJcblxyXG4gIFNsaW1KUS5FdmVudC5wcm90b3R5cGUgPSB7XHJcbiAgICBjb25zdHJ1Y3RvcjogU2xpbUpRLkV2ZW50LFxyXG4gICAgaXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcclxuICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcclxuICAgIGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcclxuICAgIGlzU2ltdWxhdGVkOiBmYWxzZSxcclxuXHJcbiAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50XHJcblxyXG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWVcclxuXHJcbiAgICAgIGlmIChlICYmICF0aGlzLmlzU2ltdWxhdGVkKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudFxyXG5cclxuICAgICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWVcclxuXHJcbiAgICAgIGlmIChlICYmICF0aGlzLmlzU2ltdWxhdGVkKSB7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcclxuICAgICAgdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnRcclxuXHJcbiAgICAgIHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlXHJcblxyXG4gICAgICBpZiAoZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCkge1xyXG4gICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgU2xpbUpRLmVhY2goXHJcbiAgICB7XHJcbiAgICAgIGFsdEtleTogdHJ1ZSxcclxuICAgICAgYnViYmxlczogdHJ1ZSxcclxuICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcclxuICAgICAgY2hhbmdlZFRvdWNoZXM6IHRydWUsXHJcbiAgICAgIGN0cmxLZXk6IHRydWUsXHJcbiAgICAgIGRldGFpbDogdHJ1ZSxcclxuICAgICAgZXZlbnRQaGFzZTogdHJ1ZSxcclxuICAgICAgbWV0YUtleTogdHJ1ZSxcclxuICAgICAgcGFnZVg6IHRydWUsXHJcbiAgICAgIHBhZ2VZOiB0cnVlLFxyXG4gICAgICBzaGlmdEtleTogdHJ1ZSxcclxuICAgICAgdmlldzogdHJ1ZSxcclxuICAgICAgY2hhcjogdHJ1ZSxcclxuICAgICAgY2hhckNvZGU6IHRydWUsXHJcbiAgICAgIGtleTogdHJ1ZSxcclxuICAgICAga2V5Q29kZTogdHJ1ZSxcclxuICAgICAgYnV0dG9uOiB0cnVlLFxyXG4gICAgICBidXR0b25zOiB0cnVlLFxyXG4gICAgICBjbGllbnRYOiB0cnVlLFxyXG4gICAgICBjbGllbnRZOiB0cnVlLFxyXG4gICAgICBvZmZzZXRYOiB0cnVlLFxyXG4gICAgICBvZmZzZXRZOiB0cnVlLFxyXG4gICAgICBwb2ludGVySWQ6IHRydWUsXHJcbiAgICAgIHBvaW50ZXJUeXBlOiB0cnVlLFxyXG4gICAgICBzY3JlZW5YOiB0cnVlLFxyXG4gICAgICBzY3JlZW5ZOiB0cnVlLFxyXG4gICAgICB0YXJnZXRUb3VjaGVzOiB0cnVlLFxyXG4gICAgICB0b0VsZW1lbnQ6IHRydWUsXHJcbiAgICAgIHRvdWNoZXM6IHRydWUsXHJcblxyXG4gICAgICB3aGljaDogZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICB2YXIgYnV0dG9uID0gZXZlbnQuYnV0dG9uXHJcblxyXG4gICAgICAgIGlmIChldmVudC53aGljaCA9PSBudWxsICYmIHJrZXlFdmVudC50ZXN0KGV2ZW50LnR5cGUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gZXZlbnQuY2hhckNvZGUgIT0gbnVsbCA/IGV2ZW50LmNoYXJDb2RlIDogZXZlbnQua2V5Q29kZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIWV2ZW50LndoaWNoICYmXHJcbiAgICAgICAgICBidXR0b24gIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgcm1vdXNlRXZlbnQudGVzdChldmVudC50eXBlKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKGJ1dHRvbiAmIDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDFcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoYnV0dG9uICYgMikge1xyXG4gICAgICAgICAgICByZXR1cm4gM1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChidXR0b24gJiA0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAyXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIDBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBldmVudC53aGljaFxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgU2xpbUpRLmV2ZW50LmFkZFByb3BcclxuICApXHJcblxyXG4gIFNsaW1KUS5lYWNoKFxyXG4gICAge1xyXG4gICAgICBtb3VzZWVudGVyOiAnbW91c2VvdmVyJyxcclxuICAgICAgbW91c2VsZWF2ZTogJ21vdXNlb3V0JyxcclxuICAgICAgcG9pbnRlcmVudGVyOiAncG9pbnRlcm92ZXInLFxyXG4gICAgICBwb2ludGVybGVhdmU6ICdwb2ludGVyb3V0J1xyXG4gICAgfSxcclxuICAgIGZ1bmN0aW9uKG9yaWcsIGZpeCkge1xyXG4gICAgICBTbGltSlEuZXZlbnQuc3BlY2lhbFtvcmlnXSA9IHtcclxuICAgICAgICBkZWxlZ2F0ZVR5cGU6IGZpeCxcclxuICAgICAgICBiaW5kVHlwZTogZml4LFxyXG5cclxuICAgICAgICBoYW5kbGU6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICB2YXIgcmV0XHJcblxyXG4gICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXNcclxuXHJcbiAgICAgICAgICB2YXIgcmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXRcclxuXHJcbiAgICAgICAgICB2YXIgaGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqXHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhcmVsYXRlZCB8fFxyXG4gICAgICAgICAgICAocmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFTbGltSlEuY29udGFpbnModGFyZ2V0LCByZWxhdGVkKSlcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlXHJcbiAgICAgICAgICAgIHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcclxuICAgICAgICAgICAgZXZlbnQudHlwZSA9IGZpeFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHJldFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIClcclxuXHJcbiAgU2xpbUpRLmZuLmV4dGVuZCh7XHJcbiAgICBvbjogZnVuY3Rpb24odHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbikge1xyXG4gICAgICByZXR1cm4gb24odGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbilcclxuICAgIH0sXHJcbiAgICBvbmU6IGZ1bmN0aW9uKHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4pIHtcclxuICAgICAgcmV0dXJuIG9uKHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEpXHJcbiAgICB9LFxyXG4gICAgb2ZmOiBmdW5jdGlvbih0eXBlcywgc2VsZWN0b3IsIGZuKSB7XHJcbiAgICAgIHZhciBoYW5kbGVPYmosIHR5cGVcclxuICAgICAgaWYgKHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaikge1xyXG4gICAgICAgIGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9ialxyXG4gICAgICAgIFNsaW1KUSh0eXBlcy5kZWxlZ2F0ZVRhcmdldCkub2ZmKFxyXG4gICAgICAgICAgaGFuZGxlT2JqLm5hbWVzcGFjZVxyXG4gICAgICAgICAgICA/IGhhbmRsZU9iai5vcmlnVHlwZSArICcuJyArIGhhbmRsZU9iai5uYW1lc3BhY2VcclxuICAgICAgICAgICAgOiBoYW5kbGVPYmoub3JpZ1R5cGUsXHJcbiAgICAgICAgICBoYW5kbGVPYmouc2VsZWN0b3IsXHJcbiAgICAgICAgICBoYW5kbGVPYmouaGFuZGxlclxyXG4gICAgICAgIClcclxuICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlb2YgdHlwZXMgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgZm9yICh0eXBlIGluIHR5cGVzKSB7XHJcbiAgICAgICAgICB0aGlzLm9mZih0eXBlLCBzZWxlY3RvciwgdHlwZXNbdHlwZV0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBmbiA9IHNlbGVjdG9yXHJcbiAgICAgICAgc2VsZWN0b3IgPSB1bmRlZmluZWRcclxuICAgICAgfVxyXG4gICAgICBpZiAoZm4gPT09IGZhbHNlKSB7XHJcbiAgICAgICAgZm4gPSByZXR1cm5GYWxzZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgU2xpbUpRLmV2ZW50LnJlbW92ZSh0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIHZhciByeGh0bWxUYWcgPSAvPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopW14+XSopXFwvPi9naVxyXG5cclxuICB2YXIgcm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2lcclxuXHJcbiAgdmFyIHJjaGVja2VkID0gL2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaVxyXG5cclxuICB2YXIgcmNsZWFuU2NyaXB0ID0gL15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nXHJcblxyXG4gIGZ1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldChlbGVtLCBjb250ZW50KSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIG5vZGVOYW1lKGVsZW0sICd0YWJsZScpICYmXHJcbiAgICAgIG5vZGVOYW1lKGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgJ3RyJylcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gU2xpbUpRKGVsZW0pLmNoaWxkcmVuKCd0Ym9keScpWzBdIHx8IGVsZW1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZWxlbVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZGlzYWJsZVNjcmlwdChlbGVtKSB7XHJcbiAgICBlbGVtLnR5cGUgPSAoZWxlbS5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSAhPT0gbnVsbCkgKyAnLycgKyBlbGVtLnR5cGVcclxuICAgIHJldHVybiBlbGVtXHJcbiAgfVxyXG4gIGZ1bmN0aW9uIHJlc3RvcmVTY3JpcHQoZWxlbSkge1xyXG4gICAgaWYgKChlbGVtLnR5cGUgfHwgJycpLnNsaWNlKDAsIDUpID09PSAndHJ1ZS8nKSB7XHJcbiAgICAgIGVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSg1KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWxlbS5yZW1vdmVBdHRyaWJ1dGUoJ3R5cGUnKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlbGVtXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBjbG9uZUNvcHlFdmVudChzcmMsIGRlc3QpIHtcclxuICAgIHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgcGRhdGFDdXIsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzXHJcblxyXG4gICAgaWYgKGRlc3Qubm9kZVR5cGUgIT09IDEpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGFQcml2Lmhhc0RhdGEoc3JjKSkge1xyXG4gICAgICBwZGF0YU9sZCA9IGRhdGFQcml2LmFjY2VzcyhzcmMpXHJcbiAgICAgIHBkYXRhQ3VyID0gZGF0YVByaXYuc2V0KGRlc3QsIHBkYXRhT2xkKVxyXG4gICAgICBldmVudHMgPSBwZGF0YU9sZC5ldmVudHNcclxuXHJcbiAgICAgIGlmIChldmVudHMpIHtcclxuICAgICAgICBkZWxldGUgcGRhdGFDdXIuaGFuZGxlXHJcbiAgICAgICAgcGRhdGFDdXIuZXZlbnRzID0ge31cclxuXHJcbiAgICAgICAgZm9yICh0eXBlIGluIGV2ZW50cykge1xyXG4gICAgICAgICAgZm9yIChpID0gMCwgbCA9IGV2ZW50c1t0eXBlXS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgU2xpbUpRLmV2ZW50LmFkZChkZXN0LCB0eXBlLCBldmVudHNbdHlwZV1baV0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGFVc2VyLmhhc0RhdGEoc3JjKSkge1xyXG4gICAgICB1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2VzcyhzcmMpXHJcbiAgICAgIHVkYXRhQ3VyID0gU2xpbUpRLmV4dGVuZCh7fSwgdWRhdGFPbGQpXHJcblxyXG4gICAgICBkYXRhVXNlci5zZXQoZGVzdCwgdWRhdGFDdXIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmaXhJbnB1dChzcmMsIGRlc3QpIHtcclxuICAgIHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKVxyXG5cclxuICAgIGlmIChub2RlTmFtZSA9PT0gJ2lucHV0JyAmJiByY2hlY2thYmxlVHlwZS50ZXN0KHNyYy50eXBlKSkge1xyXG4gICAgICBkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZFxyXG4gICAgfSBlbHNlIGlmIChub2RlTmFtZSA9PT0gJ2lucHV0JyB8fCBub2RlTmFtZSA9PT0gJ3RleHRhcmVhJykge1xyXG4gICAgICBkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRvbU1hbmlwKGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkKSB7XHJcbiAgICBhcmdzID0gY29uY2F0LmFwcGx5KFtdLCBhcmdzKVxyXG5cclxuICAgIHZhciBmcmFnbWVudFxyXG5cclxuICAgIHZhciBmaXJzdFxyXG5cclxuICAgIHZhciBzY3JpcHRzXHJcblxyXG4gICAgdmFyIGhhc1NjcmlwdHNcclxuXHJcbiAgICB2YXIgbm9kZVxyXG5cclxuICAgIHZhciBkb2NcclxuXHJcbiAgICB2YXIgaSA9IDBcclxuXHJcbiAgICB2YXIgbCA9IGNvbGxlY3Rpb24ubGVuZ3RoXHJcblxyXG4gICAgdmFyIGlOb0Nsb25lID0gbCAtIDFcclxuXHJcbiAgICB2YXIgdmFsdWUgPSBhcmdzWzBdXHJcblxyXG4gICAgdmFyIHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24odmFsdWUpXHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB2YWx1ZUlzRnVuY3Rpb24gfHxcclxuICAgICAgKGwgPiAxICYmXHJcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxyXG4gICAgICAgICFzdXBwb3J0LmNoZWNrQ2xvbmUgJiZcclxuICAgICAgICByY2hlY2tlZC50ZXN0KHZhbHVlKSlcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gY29sbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKGluZGV4KSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKGluZGV4KVxyXG4gICAgICAgIGlmICh2YWx1ZUlzRnVuY3Rpb24pIHtcclxuICAgICAgICAgIGFyZ3NbMF0gPSB2YWx1ZS5jYWxsKHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZG9tTWFuaXAoc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQpXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGwpIHtcclxuICAgICAgZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KFxyXG4gICAgICAgIGFyZ3MsXHJcbiAgICAgICAgY29sbGVjdGlvblswXS5vd25lckRvY3VtZW50LFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIGNvbGxlY3Rpb24sXHJcbiAgICAgICAgaWdub3JlZFxyXG4gICAgICApXHJcbiAgICAgIGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZFxyXG5cclxuICAgICAgaWYgKGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgZnJhZ21lbnQgPSBmaXJzdFxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZmlyc3QgfHwgaWdub3JlZCkge1xyXG4gICAgICAgIHNjcmlwdHMgPSBTbGltSlEubWFwKGdldEFsbChmcmFnbWVudCwgJ3NjcmlwdCcpLCBkaXNhYmxlU2NyaXB0KVxyXG4gICAgICAgIGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aFxyXG5cclxuICAgICAgICBmb3IgKDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgbm9kZSA9IGZyYWdtZW50XHJcblxyXG4gICAgICAgICAgaWYgKGkgIT09IGlOb0Nsb25lKSB7XHJcbiAgICAgICAgICAgIG5vZGUgPSBTbGltSlEuY2xvbmUobm9kZSwgdHJ1ZSwgdHJ1ZSlcclxuXHJcbiAgICAgICAgICAgIGlmIChoYXNTY3JpcHRzKSB7XHJcbiAgICAgICAgICAgICAgU2xpbUpRLm1lcmdlKHNjcmlwdHMsIGdldEFsbChub2RlLCAnc2NyaXB0JykpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjYWxsYmFjay5jYWxsKGNvbGxlY3Rpb25baV0sIG5vZGUsIGkpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGFzU2NyaXB0cykge1xyXG4gICAgICAgICAgZG9jID0gc2NyaXB0c1tzY3JpcHRzLmxlbmd0aCAtIDFdLm93bmVyRG9jdW1lbnRcclxuXHJcbiAgICAgICAgICBTbGltSlEubWFwKHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQpXHJcblxyXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKykge1xyXG4gICAgICAgICAgICBub2RlID0gc2NyaXB0c1tpXVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgcnNjcmlwdFR5cGUudGVzdChub2RlLnR5cGUgfHwgJycpICYmXHJcbiAgICAgICAgICAgICAgIWRhdGFQcml2LmFjY2Vzcyhub2RlLCAnZ2xvYmFsRXZhbCcpICYmXHJcbiAgICAgICAgICAgICAgU2xpbUpRLmNvbnRhaW5zKGRvYywgbm9kZSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5vZGUuc3JjICYmIChub2RlLnR5cGUgfHwgJycpLnRvTG93ZXJDYXNlKCkgIT09ICdtb2R1bGUnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoU2xpbUpRLl9ldmFsVXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgIFNsaW1KUS5fZXZhbFVybChub2RlLnNyYylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgRE9NRXZhbChub2RlLnRleHRDb250ZW50LnJlcGxhY2UocmNsZWFuU2NyaXB0LCAnJyksIGRvYywgbm9kZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY29sbGVjdGlvblxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVtb3ZlKGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSkge1xyXG4gICAgdmFyIG5vZGVcclxuXHJcbiAgICB2YXIgbm9kZXMgPSBzZWxlY3RvciA/IFNsaW1KUS5maWx0ZXIoc2VsZWN0b3IsIGVsZW0pIDogZWxlbVxyXG5cclxuICAgIHZhciBpID0gMFxyXG5cclxuICAgIGZvciAoOyAobm9kZSA9IG5vZGVzW2ldKSAhPSBudWxsOyBpKyspIHtcclxuICAgICAgaWYgKCFrZWVwRGF0YSAmJiBub2RlLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgU2xpbUpRLmNsZWFuRGF0YShnZXRBbGwobm9kZSkpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcclxuICAgICAgICBpZiAoa2VlcERhdGEgJiYgU2xpbUpRLmNvbnRhaW5zKG5vZGUub3duZXJEb2N1bWVudCwgbm9kZSkpIHtcclxuICAgICAgICAgIHNldEdsb2JhbEV2YWwoZ2V0QWxsKG5vZGUsICdzY3JpcHQnKSlcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZWxlbVxyXG4gIH1cclxuXHJcbiAgU2xpbUpRLmV4dGVuZCh7XHJcbiAgICBodG1sUHJlZmlsdGVyOiBmdW5jdGlvbihodG1sKSB7XHJcbiAgICAgIHJldHVybiBodG1sLnJlcGxhY2UocnhodG1sVGFnLCAnPCQxPjwvJDI+JylcclxuICAgIH0sXHJcblxyXG4gICAgY2xvbmU6IGZ1bmN0aW9uKGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzKSB7XHJcbiAgICAgIHZhciBpXHJcblxyXG4gICAgICB2YXIgbFxyXG5cclxuICAgICAgdmFyIHNyY0VsZW1lbnRzXHJcblxyXG4gICAgICB2YXIgZGVzdEVsZW1lbnRzXHJcblxyXG4gICAgICB2YXIgY2xvbmUgPSBlbGVtLmNsb25lTm9kZSh0cnVlKVxyXG5cclxuICAgICAgdmFyIGluUGFnZSA9IFNsaW1KUS5jb250YWlucyhlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0pXHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiZcclxuICAgICAgICAoZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSkgJiZcclxuICAgICAgICAhU2xpbUpRLmlzWE1MRG9jKGVsZW0pXHJcbiAgICAgICkge1xyXG4gICAgICAgIGRlc3RFbGVtZW50cyA9IGdldEFsbChjbG9uZSlcclxuICAgICAgICBzcmNFbGVtZW50cyA9IGdldEFsbChlbGVtKVxyXG5cclxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICBmaXhJbnB1dChzcmNFbGVtZW50c1tpXSwgZGVzdEVsZW1lbnRzW2ldKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRhdGFBbmRFdmVudHMpIHtcclxuICAgICAgICBpZiAoZGVlcERhdGFBbmRFdmVudHMpIHtcclxuICAgICAgICAgIHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKGVsZW0pXHJcbiAgICAgICAgICBkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKGNsb25lKVxyXG5cclxuICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICAgICAgY2xvbmVDb3B5RXZlbnQoc3JjRWxlbWVudHNbaV0sIGRlc3RFbGVtZW50c1tpXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY2xvbmVDb3B5RXZlbnQoZWxlbSwgY2xvbmUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBkZXN0RWxlbWVudHMgPSBnZXRBbGwoY2xvbmUsICdzY3JpcHQnKVxyXG4gICAgICBpZiAoZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBzZXRHbG9iYWxFdmFsKGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoZWxlbSwgJ3NjcmlwdCcpKVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY2xvbmVcclxuICAgIH0sXHJcblxyXG4gICAgY2xlYW5EYXRhOiBmdW5jdGlvbihlbGVtcykge1xyXG4gICAgICB2YXIgZGF0YVxyXG5cclxuICAgICAgdmFyIGVsZW1cclxuXHJcbiAgICAgIHZhciB0eXBlXHJcblxyXG4gICAgICB2YXIgc3BlY2lhbCA9IFNsaW1KUS5ldmVudC5zcGVjaWFsXHJcblxyXG4gICAgICB2YXIgaSA9IDBcclxuXHJcbiAgICAgIGZvciAoOyAoZWxlbSA9IGVsZW1zW2ldKSAhPT0gdW5kZWZpbmVkOyBpKyspIHtcclxuICAgICAgICBpZiAoYWNjZXB0RGF0YShlbGVtKSkge1xyXG4gICAgICAgICAgaWYgKChkYXRhID0gZWxlbVtkYXRhUHJpdi5leHBhbmRvXSkpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuZXZlbnRzKSB7XHJcbiAgICAgICAgICAgICAgZm9yICh0eXBlIGluIGRhdGEuZXZlbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3BlY2lhbFt0eXBlXSkge1xyXG4gICAgICAgICAgICAgICAgICBTbGltSlEuZXZlbnQucmVtb3ZlKGVsZW0sIHR5cGUpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBTbGltSlEucmVtb3ZlRXZlbnQoZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbGVtW2RhdGFQcml2LmV4cGFuZG9dID0gdW5kZWZpbmVkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbVtkYXRhVXNlci5leHBhbmRvXSkge1xyXG4gICAgICAgICAgICBlbGVtW2RhdGFVc2VyLmV4cGFuZG9dID0gdW5kZWZpbmVkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgU2xpbUpRLmZuLmV4dGVuZCh7XHJcbiAgICBkZXRhY2g6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XHJcbiAgICAgIHJldHVybiByZW1vdmUodGhpcywgc2VsZWN0b3IsIHRydWUpXHJcbiAgICB9LFxyXG5cclxuICAgIHJlbW92ZTogZnVuY3Rpb24oc2VsZWN0b3IpIHtcclxuICAgICAgcmV0dXJuIHJlbW92ZSh0aGlzLCBzZWxlY3RvcilcclxuICAgIH0sXHJcblxyXG4gICAgdGV4dDogZnVuY3Rpb24odmFsdWUpIHtcclxuICAgICAgcmV0dXJuIGFjY2VzcyhcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/IFNsaW1KUS50ZXh0KHRoaXMpXHJcbiAgICAgICAgICAgIDogdGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlVHlwZSA9PT0gMSB8fFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm5vZGVUeXBlID09PSAxMSB8fFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm5vZGVUeXBlID09PSA5XHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIHZhbHVlLFxyXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGhcclxuICAgICAgKVxyXG4gICAgfSxcclxuXHJcbiAgICBhcHBlbmQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gZG9tTWFuaXAodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5ub2RlVHlwZSA9PT0gMSB8fFxyXG4gICAgICAgICAgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHxcclxuICAgICAgICAgIHRoaXMubm9kZVR5cGUgPT09IDlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQodGhpcywgZWxlbSlcclxuICAgICAgICAgIHRhcmdldC5hcHBlbmRDaGlsZChlbGVtKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0sXHJcblxyXG4gICAgcHJlcGVuZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBkb21NYW5pcCh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLm5vZGVUeXBlID09PSAxIHx8XHJcbiAgICAgICAgICB0aGlzLm5vZGVUeXBlID09PSAxMSB8fFxyXG4gICAgICAgICAgdGhpcy5ub2RlVHlwZSA9PT0gOVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCh0aGlzLCBlbGVtKVxyXG4gICAgICAgICAgdGFyZ2V0Lmluc2VydEJlZm9yZShlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG5cclxuICAgIGJlZm9yZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBkb21NYW5pcCh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsZW0sIHRoaXMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuXHJcbiAgICBhZnRlcjogZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBkb21NYW5pcCh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsZW0sIHRoaXMubmV4dFNpYmxpbmcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuXHJcbiAgICBlbXB0eTogZnVuY3Rpb24oKSB7XHJcbiAgICAgIHZhciBlbGVtXHJcblxyXG4gICAgICB2YXIgaSA9IDBcclxuXHJcbiAgICAgIGZvciAoOyAoZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7IGkrKykge1xyXG4gICAgICAgIGlmIChlbGVtLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICBTbGltSlEuY2xlYW5EYXRhKGdldEFsbChlbGVtLCBmYWxzZSkpXHJcblxyXG4gICAgICAgICAgZWxlbS50ZXh0Q29udGVudCA9ICcnXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpc1xyXG4gICAgfSxcclxuXHJcbiAgICBjbG9uZTogZnVuY3Rpb24oZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMpIHtcclxuICAgICAgZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50c1xyXG4gICAgICBkZWVwRGF0YUFuZEV2ZW50cyA9XHJcbiAgICAgICAgZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50c1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBTbGltSlEuY2xvbmUodGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMpXHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG5cclxuICAgIGh0bWw6IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBhY2Nlc3MoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdIHx8IHt9XHJcblxyXG4gICAgICAgICAgdmFyIGkgPSAwXHJcblxyXG4gICAgICAgICAgdmFyIGwgPSB0aGlzLmxlbmd0aFxyXG5cclxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsZW0uaW5uZXJIVE1MXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgICAgICFybm9Jbm5lcmh0bWwudGVzdCh2YWx1ZSkgJiZcclxuICAgICAgICAgICAgIXdyYXBNYXBbKHJ0YWdOYW1lLmV4ZWModmFsdWUpIHx8IFsnJywgJyddKVsxXS50b0xvd2VyQ2FzZSgpXVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gU2xpbUpRLmh0bWxQcmVmaWx0ZXIodmFsdWUpXHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtID0gdGhpc1tpXSB8fCB7fVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChlbGVtLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIFNsaW1KUS5jbGVhbkRhdGEoZ2V0QWxsKGVsZW0sIGZhbHNlKSlcclxuICAgICAgICAgICAgICAgICAgZWxlbS5pbm5lckhUTUwgPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgZWxlbSA9IDBcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoZWxlbSkge1xyXG4gICAgICAgICAgICB0aGlzLmVtcHR5KCkuYXBwZW5kKHZhbHVlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICB2YWx1ZSxcclxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoXHJcbiAgICAgIClcclxuICAgIH0sXHJcblxyXG4gICAgcmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xyXG4gICAgICB2YXIgaWdub3JlZCA9IFtdXHJcblxyXG4gICAgICByZXR1cm4gZG9tTWFuaXAoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICBhcmd1bWVudHMsXHJcbiAgICAgICAgZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZVxyXG5cclxuICAgICAgICAgIGlmIChTbGltSlEuaW5BcnJheSh0aGlzLCBpZ25vcmVkKSA8IDApIHtcclxuICAgICAgICAgICAgU2xpbUpRLmNsZWFuRGF0YShnZXRBbGwodGhpcykpXHJcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKGVsZW0sIHRoaXMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGlnbm9yZWRcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIFNsaW1KUS5lYWNoKFxyXG4gICAge1xyXG4gICAgICBhcHBlbmRUbzogJ2FwcGVuZCcsXHJcbiAgICAgIHByZXBlbmRUbzogJ3ByZXBlbmQnLFxyXG4gICAgICBpbnNlcnRCZWZvcmU6ICdiZWZvcmUnLFxyXG4gICAgICBpbnNlcnRBZnRlcjogJ2FmdGVyJyxcclxuICAgICAgcmVwbGFjZUFsbDogJ3JlcGxhY2VXaXRoJ1xyXG4gICAgfSxcclxuICAgIGZ1bmN0aW9uKG5hbWUsIG9yaWdpbmFsKSB7XHJcbiAgICAgIFNsaW1KUS5mbltuYW1lXSA9IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XHJcbiAgICAgICAgdmFyIGVsZW1zXHJcblxyXG4gICAgICAgIHZhciByZXQgPSBbXVxyXG5cclxuICAgICAgICB2YXIgaW5zZXJ0ID0gU2xpbUpRKHNlbGVjdG9yKVxyXG5cclxuICAgICAgICB2YXIgbGFzdCA9IGluc2VydC5sZW5ndGggLSAxXHJcblxyXG4gICAgICAgIHZhciBpID0gMFxyXG5cclxuICAgICAgICBmb3IgKDsgaSA8PSBsYXN0OyBpKyspIHtcclxuICAgICAgICAgIGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKHRydWUpXHJcbiAgICAgICAgICBTbGltSlEoaW5zZXJ0W2ldKVtvcmlnaW5hbF0oZWxlbXMpXHJcblxyXG4gICAgICAgICAgcHVzaC5hcHBseShyZXQsIGVsZW1zLmdldCgpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHVzaFN0YWNrKHJldClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIClcclxuICB2YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCgnXignICsgcG51bSArICcpKD8hcHgpW2EteiVdKyQnLCAnaScpXHJcblxyXG4gIHZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICB2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld1xyXG5cclxuICAgIGlmICghdmlldyB8fCAhdmlldy5vcGVuZXIpIHtcclxuICAgICAgdmlldyA9IHdpbmRvd1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2aWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSlcclxuICB9XHJcblxyXG4gIHZhciByYm94U3R5bGUgPSBuZXcgUmVnRXhwKGNzc0V4cGFuZC5qb2luKCd8JyksICdpJylcclxuICA7KGZ1bmN0aW9uKCkge1xyXG4gICAgZnVuY3Rpb24gY29tcHV0ZVN0eWxlVGVzdHMoKSB7XHJcbiAgICAgIGlmICghZGl2KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgICAncG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4OycgK1xyXG4gICAgICAgICdtYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjAnXHJcbiAgICAgIGRpdi5zdHlsZS5jc3NUZXh0ID1cclxuICAgICAgICAncG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsOycgK1xyXG4gICAgICAgICdtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4OycgK1xyXG4gICAgICAgICd3aWR0aDo2MCU7dG9wOjElJ1xyXG4gICAgICBkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKS5hcHBlbmRDaGlsZChkaXYpXHJcblxyXG4gICAgICB2YXIgZGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkaXYpXHJcbiAgICAgIHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09ICcxJSdcclxuXHJcbiAgICAgIHJlbGlhYmxlTWFyZ2luTGVmdFZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyhkaXZTdHlsZS5tYXJnaW5MZWZ0KSA9PT0gMTJcclxuXHJcbiAgICAgIGRpdi5zdHlsZS5yaWdodCA9ICc2MCUnXHJcbiAgICAgIHBpeGVsQm94U3R5bGVzVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKGRpdlN0eWxlLnJpZ2h0KSA9PT0gMzZcclxuXHJcbiAgICAgIGJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKGRpdlN0eWxlLndpZHRoKSA9PT0gMzZcclxuXHJcbiAgICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSdcclxuICAgICAgc2Nyb2xsYm94U2l6ZVZhbCA9IGRpdi5vZmZzZXRXaWR0aCA9PT0gMzYgfHwgJ2Fic29sdXRlJ1xyXG5cclxuICAgICAgZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKGNvbnRhaW5lcilcclxuXHJcbiAgICAgIGRpdiA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMobWVhc3VyZSkge1xyXG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KG1lYXN1cmUpKVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBwaXhlbFBvc2l0aW9uVmFsXHJcblxyXG4gICAgdmFyIGJveFNpemluZ1JlbGlhYmxlVmFsXHJcblxyXG4gICAgdmFyIHNjcm9sbGJveFNpemVWYWxcclxuXHJcbiAgICB2YXIgcGl4ZWxCb3hTdHlsZXNWYWxcclxuXHJcbiAgICB2YXIgcmVsaWFibGVNYXJnaW5MZWZ0VmFsXHJcblxyXG4gICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcblxyXG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcblxyXG4gICAgaWYgKCFkaXYuc3R5bGUpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gJ2NvbnRlbnQtYm94J1xyXG4gICAgZGl2LmNsb25lTm9kZSh0cnVlKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9ICcnXHJcbiAgICBzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gJ2NvbnRlbnQtYm94J1xyXG5cclxuICAgIFNsaW1KUS5leHRlbmQoc3VwcG9ydCwge1xyXG4gICAgICBib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29tcHV0ZVN0eWxlVGVzdHMoKVxyXG4gICAgICAgIHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbFxyXG4gICAgICB9LFxyXG4gICAgICBwaXhlbEJveFN0eWxlczogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgY29tcHV0ZVN0eWxlVGVzdHMoKVxyXG4gICAgICAgIHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbFxyXG4gICAgICB9LFxyXG4gICAgICBwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcclxuICAgICAgICBjb21wdXRlU3R5bGVUZXN0cygpXHJcbiAgICAgICAgcmV0dXJuIHBpeGVsUG9zaXRpb25WYWxcclxuICAgICAgfSxcclxuICAgICAgcmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcclxuICAgICAgICBjb21wdXRlU3R5bGVUZXN0cygpXHJcbiAgICAgICAgcmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbFxyXG4gICAgICB9LFxyXG4gICAgICBzY3JvbGxib3hTaXplOiBmdW5jdGlvbigpIHtcclxuICAgICAgICBjb21wdXRlU3R5bGVUZXN0cygpXHJcbiAgICAgICAgcmV0dXJuIHNjcm9sbGJveFNpemVWYWxcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9KSgpXHJcblxyXG4gIGZ1bmN0aW9uIGN1ckNTUyhlbGVtLCBuYW1lLCBjb21wdXRlZCkge1xyXG4gICAgdmFyIHdpZHRoXHJcblxyXG4gICAgdmFyIG1pbldpZHRoXHJcblxyXG4gICAgdmFyIG1heFdpZHRoXHJcblxyXG4gICAgdmFyIHJldFxyXG5cclxuICAgIHZhciBzdHlsZSA9IGVsZW0uc3R5bGVcclxuXHJcbiAgICBjb21wdXRlZCA9IGNvbXB1dGVkIHx8IGdldFN0eWxlcyhlbGVtKVxyXG5cclxuICAgIGlmIChjb21wdXRlZCkge1xyXG4gICAgICByZXQgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpIHx8IGNvbXB1dGVkW25hbWVdXHJcblxyXG4gICAgICBpZiAocmV0ID09PSAnJyAmJiAhU2xpbUpRLmNvbnRhaW5zKGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSkpIHtcclxuICAgICAgICByZXQgPSBTbGltSlEuc3R5bGUoZWxlbSwgbmFtZSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgICFzdXBwb3J0LnBpeGVsQm94U3R5bGVzKCkgJiZcclxuICAgICAgICBybnVtbm9ucHgudGVzdChyZXQpICYmXHJcbiAgICAgICAgcmJveFN0eWxlLnRlc3QobmFtZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgd2lkdGggPSBzdHlsZS53aWR0aFxyXG4gICAgICAgIG1pbldpZHRoID0gc3R5bGUubWluV2lkdGhcclxuICAgICAgICBtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoXHJcblxyXG4gICAgICAgIHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldFxyXG4gICAgICAgIHJldCA9IGNvbXB1dGVkLndpZHRoXHJcblxyXG4gICAgICAgIHN0eWxlLndpZHRoID0gd2lkdGhcclxuICAgICAgICBzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoXHJcbiAgICAgICAgc3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID8gcmV0ICsgJycgOiByZXRcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFkZEdldEhvb2tJZihjb25kaXRpb25GbiwgaG9va0ZuKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmIChjb25kaXRpb25GbigpKSB7XHJcbiAgICAgICAgICBkZWxldGUgdGhpcy5nZXRcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmdldCA9IGhvb2tGbikuYXBwbHkodGhpcywgYXJndW1lbnRzKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YXIgcmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvXHJcblxyXG4gIHZhciByY3VzdG9tUHJvcCA9IC9eLS0vXHJcblxyXG4gIHZhciBjc3NTaG93ID0geyBwb3NpdGlvbjogJ2Fic29sdXRlJywgdmlzaWJpbGl0eTogJ2hpZGRlbicsIGRpc3BsYXk6ICdibG9jaycgfVxyXG5cclxuICB2YXIgY3NzTm9ybWFsVHJhbnNmb3JtID0ge1xyXG4gICAgbGV0dGVyU3BhY2luZzogJzAnLFxyXG4gICAgZm9udFdlaWdodDogJzQwMCdcclxuICB9XHJcblxyXG4gIHZhciBjc3NQcmVmaXhlcyA9IFsnV2Via2l0JywgJ01veicsICdtcyddXHJcblxyXG4gIHZhciBlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGVcclxuXHJcbiAgZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUobmFtZSkge1xyXG4gICAgaWYgKG5hbWUgaW4gZW1wdHlTdHlsZSkge1xyXG4gICAgICByZXR1cm4gbmFtZVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBjYXBOYW1lID0gbmFtZVswXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKVxyXG5cclxuICAgIHZhciBpID0gY3NzUHJlZml4ZXMubGVuZ3RoXHJcblxyXG4gICAgd2hpbGUgKGktLSkge1xyXG4gICAgICBuYW1lID0gY3NzUHJlZml4ZXNbaV0gKyBjYXBOYW1lXHJcbiAgICAgIGlmIChuYW1lIGluIGVtcHR5U3R5bGUpIHtcclxuICAgICAgICByZXR1cm4gbmFtZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBmaW5hbFByb3BOYW1lKG5hbWUpIHtcclxuICAgIHZhciByZXQgPSBTbGltSlEuY3NzUHJvcHNbbmFtZV1cclxuICAgIGlmICghcmV0KSB7XHJcbiAgICAgIHJldCA9IFNsaW1KUS5jc3NQcm9wc1tuYW1lXSA9IHZlbmRvclByb3BOYW1lKG5hbWUpIHx8IG5hbWVcclxuICAgIH1cclxuICAgIHJldHVybiByZXRcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCkge1xyXG4gICAgdmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWModmFsdWUpXHJcbiAgICByZXR1cm4gbWF0Y2hlc1xyXG4gICAgICA/IE1hdGgubWF4KDAsIG1hdGNoZXNbMl0gLSAoc3VidHJhY3QgfHwgMCkpICsgKG1hdGNoZXNbM10gfHwgJ3B4JylcclxuICAgICAgOiB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gYm94TW9kZWxBZGp1c3RtZW50KFxyXG4gICAgZWxlbSxcclxuICAgIGRpbWVuc2lvbixcclxuICAgIGJveCxcclxuICAgIGlzQm9yZGVyQm94LFxyXG4gICAgc3R5bGVzLFxyXG4gICAgY29tcHV0ZWRWYWxcclxuICApIHtcclxuICAgIHZhciBpID0gZGltZW5zaW9uID09PSAnd2lkdGgnID8gMSA6IDBcclxuXHJcbiAgICB2YXIgZXh0cmEgPSAwXHJcblxyXG4gICAgdmFyIGRlbHRhID0gMFxyXG5cclxuICAgIGlmIChib3ggPT09IChpc0JvcmRlckJveCA/ICdib3JkZXInIDogJ2NvbnRlbnQnKSkge1xyXG4gICAgICByZXR1cm4gMFxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoOyBpIDwgNDsgaSArPSAyKSB7XHJcbiAgICAgIGlmIChib3ggPT09ICdtYXJnaW4nKSB7XHJcbiAgICAgICAgZGVsdGEgKz0gU2xpbUpRLmNzcyhlbGVtLCBib3ggKyBjc3NFeHBhbmRbaV0sIHRydWUsIHN0eWxlcylcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFpc0JvcmRlckJveCkge1xyXG4gICAgICAgIGRlbHRhICs9IFNsaW1KUS5jc3MoZWxlbSwgJ3BhZGRpbmcnICsgY3NzRXhwYW5kW2ldLCB0cnVlLCBzdHlsZXMpXHJcblxyXG4gICAgICAgIGlmIChib3ggIT09ICdwYWRkaW5nJykge1xyXG4gICAgICAgICAgZGVsdGEgKz0gU2xpbUpRLmNzcyhcclxuICAgICAgICAgICAgZWxlbSxcclxuICAgICAgICAgICAgJ2JvcmRlcicgKyBjc3NFeHBhbmRbaV0gKyAnV2lkdGgnLFxyXG4gICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICBzdHlsZXNcclxuICAgICAgICAgIClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZXh0cmEgKz0gU2xpbUpRLmNzcyhcclxuICAgICAgICAgICAgZWxlbSxcclxuICAgICAgICAgICAgJ2JvcmRlcicgKyBjc3NFeHBhbmRbaV0gKyAnV2lkdGgnLFxyXG4gICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICBzdHlsZXNcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGJveCA9PT0gJ2NvbnRlbnQnKSB7XHJcbiAgICAgICAgICBkZWx0YSAtPSBTbGltSlEuY3NzKGVsZW0sICdwYWRkaW5nJyArIGNzc0V4cGFuZFtpXSwgdHJ1ZSwgc3R5bGVzKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJveCAhPT0gJ21hcmdpbicpIHtcclxuICAgICAgICAgIGRlbHRhIC09IFNsaW1KUS5jc3MoXHJcbiAgICAgICAgICAgIGVsZW0sXHJcbiAgICAgICAgICAgICdib3JkZXInICsgY3NzRXhwYW5kW2ldICsgJ1dpZHRoJyxcclxuICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgc3R5bGVzXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpc0JvcmRlckJveCAmJiBjb21wdXRlZFZhbCA+PSAwKSB7XHJcbiAgICAgIGRlbHRhICs9IE1hdGgubWF4KFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgTWF0aC5jZWlsKFxyXG4gICAgICAgICAgZWxlbVsnb2Zmc2V0JyArIGRpbWVuc2lvblswXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKDEpXSAtXHJcbiAgICAgICAgICAgIGNvbXB1dGVkVmFsIC1cclxuICAgICAgICAgICAgZGVsdGEgLVxyXG4gICAgICAgICAgICBleHRyYSAtXHJcbiAgICAgICAgICAgIDAuNVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkZWx0YVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodChlbGVtLCBkaW1lbnNpb24sIGV4dHJhKSB7XHJcbiAgICB2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKGVsZW0pXHJcblxyXG4gICAgdmFyIHZhbCA9IGN1ckNTUyhlbGVtLCBkaW1lbnNpb24sIHN0eWxlcylcclxuXHJcbiAgICB2YXIgaXNCb3JkZXJCb3ggPVxyXG4gICAgICBTbGltSlEuY3NzKGVsZW0sICdib3hTaXppbmcnLCBmYWxzZSwgc3R5bGVzKSA9PT0gJ2JvcmRlci1ib3gnXHJcblxyXG4gICAgdmFyIHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveFxyXG5cclxuICAgIGlmIChybnVtbm9ucHgudGVzdCh2YWwpKSB7XHJcbiAgICAgIGlmICghZXh0cmEpIHtcclxuICAgICAgICByZXR1cm4gdmFsXHJcbiAgICAgIH1cclxuICAgICAgdmFsID0gJ2F1dG8nXHJcbiAgICB9XHJcblxyXG4gICAgdmFsdWVJc0JvcmRlckJveCA9XHJcbiAgICAgIHZhbHVlSXNCb3JkZXJCb3ggJiZcclxuICAgICAgKHN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCB2YWwgPT09IGVsZW0uc3R5bGVbZGltZW5zaW9uXSlcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHZhbCA9PT0gJ2F1dG8nIHx8XHJcbiAgICAgICghcGFyc2VGbG9hdCh2YWwpICYmXHJcbiAgICAgICAgU2xpbUpRLmNzcyhlbGVtLCAnZGlzcGxheScsIGZhbHNlLCBzdHlsZXMpID09PSAnaW5saW5lJylcclxuICAgICkge1xyXG4gICAgICB2YWwgPSBlbGVtWydvZmZzZXQnICsgZGltZW5zaW9uWzBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoMSldXHJcblxyXG4gICAgICB2YWx1ZUlzQm9yZGVyQm94ID0gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHZhbCA9IHBhcnNlRmxvYXQodmFsKSB8fCAwXHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgdmFsICtcclxuICAgICAgYm94TW9kZWxBZGp1c3RtZW50KFxyXG4gICAgICAgIGVsZW0sXHJcbiAgICAgICAgZGltZW5zaW9uLFxyXG4gICAgICAgIGV4dHJhIHx8IChpc0JvcmRlckJveCA/ICdib3JkZXInIDogJ2NvbnRlbnQnKSxcclxuICAgICAgICB2YWx1ZUlzQm9yZGVyQm94LFxyXG4gICAgICAgIHN0eWxlcyxcclxuXHJcbiAgICAgICAgdmFsXHJcbiAgICAgICkgK1xyXG4gICAgICAncHgnXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBTbGltSlEuZXh0ZW5kKHtcclxuICAgIGNzc0hvb2tzOiB7XHJcbiAgICAgIG9wYWNpdHk6IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uKGVsZW0sIGNvbXB1dGVkKSB7XHJcbiAgICAgICAgICBpZiAoY29tcHV0ZWQpIHtcclxuICAgICAgICAgICAgdmFyIHJldCA9IGN1ckNTUyhlbGVtLCAnb3BhY2l0eScpXHJcbiAgICAgICAgICAgIHJldHVybiByZXQgPT09ICcnID8gJzEnIDogcmV0XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIGNzc051bWJlcjoge1xyXG4gICAgICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogdHJ1ZSxcclxuICAgICAgY29sdW1uQ291bnQ6IHRydWUsXHJcbiAgICAgIGZpbGxPcGFjaXR5OiB0cnVlLFxyXG4gICAgICBmbGV4R3JvdzogdHJ1ZSxcclxuICAgICAgZmxleFNocmluazogdHJ1ZSxcclxuICAgICAgZm9udFdlaWdodDogdHJ1ZSxcclxuICAgICAgbGluZUhlaWdodDogdHJ1ZSxcclxuICAgICAgb3BhY2l0eTogdHJ1ZSxcclxuICAgICAgb3JkZXI6IHRydWUsXHJcbiAgICAgIG9ycGhhbnM6IHRydWUsXHJcbiAgICAgIHdpZG93czogdHJ1ZSxcclxuICAgICAgekluZGV4OiB0cnVlLFxyXG4gICAgICB6b29tOiB0cnVlXHJcbiAgICB9LFxyXG5cclxuICAgIGNzc1Byb3BzOiB7fSxcclxuXHJcbiAgICBzdHlsZTogZnVuY3Rpb24oZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhKSB7XHJcbiAgICAgIGlmICghZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHJldFxyXG5cclxuICAgICAgdmFyIHR5cGVcclxuXHJcbiAgICAgIHZhciBob29rc1xyXG5cclxuICAgICAgdmFyIG9yaWdOYW1lID0gY2FtZWxDYXNlKG5hbWUpXHJcblxyXG4gICAgICB2YXIgaXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdChuYW1lKVxyXG5cclxuICAgICAgdmFyIHN0eWxlID0gZWxlbS5zdHlsZVxyXG5cclxuICAgICAgaWYgKCFpc0N1c3RvbVByb3ApIHtcclxuICAgICAgICBuYW1lID0gZmluYWxQcm9wTmFtZShvcmlnTmFtZSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaG9va3MgPSBTbGltSlEuY3NzSG9va3NbbmFtZV0gfHwgU2xpbUpRLmNzc0hvb2tzW29yaWdOYW1lXVxyXG5cclxuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0eXBlID0gdHlwZW9mIHZhbHVlXHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiAocmV0ID0gcmNzc051bS5leGVjKHZhbHVlKSkgJiYgcmV0WzFdKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IGFkanVzdENTUyhlbGVtLCBuYW1lLCByZXQpXHJcblxyXG4gICAgICAgICAgdHlwZSA9ICdudW1iZXInXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICB2YWx1ZSArPSAocmV0ICYmIHJldFszXSkgfHwgKFNsaW1KUS5jc3NOdW1iZXJbb3JpZ05hbWVdID8gJycgOiAncHgnKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmXHJcbiAgICAgICAgICB2YWx1ZSA9PT0gJycgJiZcclxuICAgICAgICAgIG5hbWUuaW5kZXhPZignYmFja2dyb3VuZCcpID09PSAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBzdHlsZVtuYW1lXSA9ICdpbmhlcml0J1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIWhvb2tzIHx8XHJcbiAgICAgICAgICAhKCdzZXQnIGluIGhvb2tzKSB8fFxyXG4gICAgICAgICAgKHZhbHVlID0gaG9va3Muc2V0KGVsZW0sIHZhbHVlLCBleHRyYSkpICE9PSB1bmRlZmluZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmIChpc0N1c3RvbVByb3ApIHtcclxuICAgICAgICAgICAgc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdHlsZVtuYW1lXSA9IHZhbHVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGhvb2tzICYmXHJcbiAgICAgICAgICAnZ2V0JyBpbiBob29rcyAmJlxyXG4gICAgICAgICAgKHJldCA9IGhvb2tzLmdldChlbGVtLCBmYWxzZSwgZXh0cmEpKSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gcmV0XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc3R5bGVbbmFtZV1cclxuICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBjc3M6IGZ1bmN0aW9uKGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMpIHtcclxuICAgICAgdmFyIHZhbFxyXG5cclxuICAgICAgdmFyIG51bVxyXG5cclxuICAgICAgdmFyIGhvb2tzXHJcblxyXG4gICAgICB2YXIgb3JpZ05hbWUgPSBjYW1lbENhc2UobmFtZSlcclxuXHJcbiAgICAgIHZhciBpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KG5hbWUpXHJcblxyXG4gICAgICBpZiAoIWlzQ3VzdG9tUHJvcCkge1xyXG4gICAgICAgIG5hbWUgPSBmaW5hbFByb3BOYW1lKG9yaWdOYW1lKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBob29rcyA9IFNsaW1KUS5jc3NIb29rc1tuYW1lXSB8fCBTbGltSlEuY3NzSG9va3Nbb3JpZ05hbWVdXHJcblxyXG4gICAgICBpZiAoaG9va3MgJiYgJ2dldCcgaW4gaG9va3MpIHtcclxuICAgICAgICB2YWwgPSBob29rcy5nZXQoZWxlbSwgdHJ1ZSwgZXh0cmEpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHZhbCA9IGN1ckNTUyhlbGVtLCBuYW1lLCBzdHlsZXMpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh2YWwgPT09ICdub3JtYWwnICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtKSB7XHJcbiAgICAgICAgdmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtW25hbWVdXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChleHRyYSA9PT0gJycgfHwgZXh0cmEpIHtcclxuICAgICAgICBudW0gPSBwYXJzZUZsb2F0KHZhbClcclxuICAgICAgICByZXR1cm4gZXh0cmEgPT09IHRydWUgfHwgaXNGaW5pdGUobnVtKSA/IG51bSB8fCAwIDogdmFsXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB2YWxcclxuICAgIH1cclxuICB9KVxyXG5cclxuICBTbGltSlEuZWFjaChbJ2hlaWdodCcsICd3aWR0aCddLCBmdW5jdGlvbihpLCBkaW1lbnNpb24pIHtcclxuICAgIFNsaW1KUS5jc3NIb29rc1tkaW1lbnNpb25dID0ge1xyXG4gICAgICBnZXQ6IGZ1bmN0aW9uKGVsZW0sIGNvbXB1dGVkLCBleHRyYSkge1xyXG4gICAgICAgIGlmIChjb21wdXRlZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KFNsaW1KUS5jc3MoZWxlbSwgJ2Rpc3BsYXknKSkgJiZcclxuICAgICAgICAgICAgKCFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICAgIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpXHJcbiAgICAgICAgICAgID8gc3dhcChlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gZ2V0V2lkdGhPckhlaWdodChlbGVtLCBkaW1lbnNpb24sIGV4dHJhKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICA6IGdldFdpZHRoT3JIZWlnaHQoZWxlbSwgZGltZW5zaW9uLCBleHRyYSlcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBzZXQ6IGZ1bmN0aW9uKGVsZW0sIHZhbHVlLCBleHRyYSkge1xyXG4gICAgICAgIHZhciBtYXRjaGVzXHJcblxyXG4gICAgICAgIHZhciBzdHlsZXMgPSBnZXRTdHlsZXMoZWxlbSlcclxuXHJcbiAgICAgICAgdmFyIGlzQm9yZGVyQm94ID1cclxuICAgICAgICAgIFNsaW1KUS5jc3MoZWxlbSwgJ2JveFNpemluZycsIGZhbHNlLCBzdHlsZXMpID09PSAnYm9yZGVyLWJveCdcclxuXHJcbiAgICAgICAgdmFyIHN1YnRyYWN0ID1cclxuICAgICAgICAgIGV4dHJhICYmXHJcbiAgICAgICAgICBib3hNb2RlbEFkanVzdG1lbnQoZWxlbSwgZGltZW5zaW9uLCBleHRyYSwgaXNCb3JkZXJCb3gsIHN0eWxlcylcclxuXHJcbiAgICAgICAgaWYgKGlzQm9yZGVyQm94ICYmIHN1cHBvcnQuc2Nyb2xsYm94U2l6ZSgpID09PSBzdHlsZXMucG9zaXRpb24pIHtcclxuICAgICAgICAgIHN1YnRyYWN0IC09IE1hdGguY2VpbChcclxuICAgICAgICAgICAgZWxlbVsnb2Zmc2V0JyArIGRpbWVuc2lvblswXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKDEpXSAtXHJcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChzdHlsZXNbZGltZW5zaW9uXSkgLVxyXG4gICAgICAgICAgICAgIGJveE1vZGVsQWRqdXN0bWVudChlbGVtLCBkaW1lbnNpb24sICdib3JkZXInLCBmYWxzZSwgc3R5bGVzKSAtXHJcbiAgICAgICAgICAgICAgMC41XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBzdWJ0cmFjdCAmJlxyXG4gICAgICAgICAgKG1hdGNoZXMgPSByY3NzTnVtLmV4ZWModmFsdWUpKSAmJlxyXG4gICAgICAgICAgKG1hdGNoZXNbM10gfHwgJ3B4JykgIT09ICdweCdcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGVsZW0uc3R5bGVbZGltZW5zaW9uXSA9IHZhbHVlXHJcbiAgICAgICAgICB2YWx1ZSA9IFNsaW1KUS5jc3MoZWxlbSwgZGltZW5zaW9uKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKGVsZW0sIHZhbHVlLCBzdWJ0cmFjdClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIFNsaW1KUS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKFxyXG4gICAgc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXHJcbiAgICBmdW5jdGlvbihlbGVtLCBjb21wdXRlZCkge1xyXG4gICAgICBpZiAoY29tcHV0ZWQpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgKHBhcnNlRmxvYXQoY3VyQ1NTKGVsZW0sICdtYXJnaW5MZWZ0JykpIHx8XHJcbiAgICAgICAgICAgIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXHJcbiAgICAgICAgICAgICAgc3dhcChlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0XHJcbiAgICAgICAgICAgICAgfSkpICsgJ3B4J1xyXG4gICAgICAgIClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIClcclxuXHJcbiAgU2xpbUpRLmVhY2goXHJcbiAgICB7XHJcbiAgICAgIG1hcmdpbjogJycsXHJcbiAgICAgIHBhZGRpbmc6ICcnLFxyXG4gICAgICBib3JkZXI6ICdXaWR0aCdcclxuICAgIH0sXHJcbiAgICBmdW5jdGlvbihwcmVmaXgsIHN1ZmZpeCkge1xyXG4gICAgICBTbGltSlEuY3NzSG9va3NbcHJlZml4ICsgc3VmZml4XSA9IHtcclxuICAgICAgICBleHBhbmQ6IGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgICB2YXIgaSA9IDBcclxuXHJcbiAgICAgICAgICB2YXIgZXhwYW5kZWQgPSB7fVxyXG5cclxuICAgICAgICAgIHZhciBwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZS5zcGxpdCgnICcpIDogW3ZhbHVlXVxyXG5cclxuICAgICAgICAgIGZvciAoOyBpIDwgNDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGV4cGFuZGVkW3ByZWZpeCArIGNzc0V4cGFuZFtpXSArIHN1ZmZpeF0gPVxyXG4gICAgICAgICAgICAgIHBhcnRzW2ldIHx8IHBhcnRzW2kgLSAyXSB8fCBwYXJ0c1swXVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiBleHBhbmRlZFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHByZWZpeCAhPT0gJ21hcmdpbicpIHtcclxuICAgICAgICBTbGltSlEuY3NzSG9va3NbcHJlZml4ICsgc3VmZml4XS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlclxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgKVxyXG5cclxuICBTbGltSlEuZm4uZXh0ZW5kKHtcclxuICAgIGNzczogZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIGFjY2VzcyhcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIGZ1bmN0aW9uKGVsZW0sIG5hbWUsIHZhbHVlKSB7XHJcbiAgICAgICAgICB2YXIgc3R5bGVzXHJcblxyXG4gICAgICAgICAgdmFyIGxlblxyXG5cclxuICAgICAgICAgIHZhciBtYXAgPSB7fVxyXG5cclxuICAgICAgICAgIHZhciBpID0gMFxyXG5cclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XHJcbiAgICAgICAgICAgIHN0eWxlcyA9IGdldFN0eWxlcyhlbGVtKVxyXG4gICAgICAgICAgICBsZW4gPSBuYW1lLmxlbmd0aFxyXG5cclxuICAgICAgICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICAgIG1hcFtuYW1lW2ldXSA9IFNsaW1KUS5jc3MoZWxlbSwgbmFtZVtpXSwgZmFsc2UsIHN0eWxlcylcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIG1hcFxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gU2xpbUpRLnN0eWxlKGVsZW0sIG5hbWUsIHZhbHVlKVxyXG4gICAgICAgICAgICA6IFNsaW1KUS5jc3MoZWxlbSwgbmFtZSlcclxuICAgICAgICB9LFxyXG4gICAgICAgIG5hbWUsXHJcbiAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDFcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIFNsaW1KUS5mbi5kZWxheSA9IGZ1bmN0aW9uKHRpbWUsIHR5cGUpIHtcclxuICAgIHRpbWUgPSBTbGltSlEuZnggPyBTbGltSlEuZnguc3BlZWRzW3RpbWVdIHx8IHRpbWUgOiB0aW1lXHJcbiAgICB0eXBlID0gdHlwZSB8fCAnZngnXHJcblxyXG4gICAgcmV0dXJuIHRoaXMucXVldWUodHlwZSwgZnVuY3Rpb24obmV4dCwgaG9va3MpIHtcclxuICAgICAgdmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChuZXh0LCB0aW1lKVxyXG4gICAgICBob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lb3V0KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICA7KGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxyXG5cclxuICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKVxyXG5cclxuICAgIHZhciBvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJykpXHJcblxyXG4gICAgaW5wdXQudHlwZSA9ICdjaGVja2JveCdcclxuXHJcbiAgICBzdXBwb3J0LmNoZWNrT24gPSBpbnB1dC52YWx1ZSAhPT0gJydcclxuXHJcbiAgICBzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkXHJcblxyXG4gICAgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpXHJcbiAgICBpbnB1dC52YWx1ZSA9ICd0J1xyXG4gICAgaW5wdXQudHlwZSA9ICdyYWRpbydcclxuICAgIHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSAndCdcclxuICB9KSgpXHJcblxyXG4gIHZhciBib29sSG9va1xyXG5cclxuICB2YXIgYXR0ckhhbmRsZSA9IFNsaW1KUS5leHByLmF0dHJIYW5kbGVcclxuXHJcbiAgU2xpbUpRLmZuLmV4dGVuZCh7XHJcbiAgICBhdHRyOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gYWNjZXNzKHRoaXMsIFNsaW1KUS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEpXHJcbiAgICB9LFxyXG5cclxuICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICBTbGltSlEucmVtb3ZlQXR0cih0aGlzLCBuYW1lKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIFNsaW1KUS5leHRlbmQoe1xyXG4gICAgYXR0cjogZnVuY3Rpb24oZWxlbSwgbmFtZSwgdmFsdWUpIHtcclxuICAgICAgdmFyIHJldFxyXG5cclxuICAgICAgdmFyIGhvb2tzXHJcblxyXG4gICAgICB2YXIgblR5cGUgPSBlbGVtLm5vZGVUeXBlXHJcblxyXG4gICAgICBpZiAoblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICByZXR1cm4gU2xpbUpRLnByb3AoZWxlbSwgbmFtZSwgdmFsdWUpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuVHlwZSAhPT0gMSB8fCAhU2xpbUpRLmlzWE1MRG9jKGVsZW0pKSB7XHJcbiAgICAgICAgaG9va3MgPVxyXG4gICAgICAgICAgU2xpbUpRLmF0dHJIb29rc1tuYW1lLnRvTG93ZXJDYXNlKCldIHx8XHJcbiAgICAgICAgICAoU2xpbUpRLmV4cHIubWF0Y2guYm9vbC50ZXN0KG5hbWUpID8gYm9vbEhvb2sgOiB1bmRlZmluZWQpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICBTbGltSlEucmVtb3ZlQXR0cihlbGVtLCBuYW1lKVxyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBob29rcyAmJlxyXG4gICAgICAgICAgJ3NldCcgaW4gaG9va3MgJiZcclxuICAgICAgICAgIChyZXQgPSBob29rcy5zZXQoZWxlbSwgdmFsdWUsIG5hbWUpKSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICByZXR1cm4gcmV0XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSArICcnKVxyXG4gICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaG9va3MgJiYgJ2dldCcgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLmdldChlbGVtLCBuYW1lKSkgIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gcmV0XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldCA9IFNsaW1KUS5maW5kLmF0dHIoZWxlbSwgbmFtZSlcclxuXHJcbiAgICAgIHJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldFxyXG4gICAgfSxcclxuXHJcbiAgICBhdHRySG9va3M6IHtcclxuICAgICAgdHlwZToge1xyXG4gICAgICAgIHNldDogZnVuY3Rpb24oZWxlbSwgdmFsdWUpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIXN1cHBvcnQucmFkaW9WYWx1ZSAmJlxyXG4gICAgICAgICAgICB2YWx1ZSA9PT0gJ3JhZGlvJyAmJlxyXG4gICAgICAgICAgICBub2RlTmFtZShlbGVtLCAnaW5wdXQnKVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWwgPSBlbGVtLnZhbHVlXHJcbiAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCd0eXBlJywgdmFsdWUpXHJcbiAgICAgICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgICBlbGVtLnZhbHVlID0gdmFsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHJlbW92ZUF0dHI6IGZ1bmN0aW9uKGVsZW0sIHZhbHVlKSB7XHJcbiAgICAgIHZhciBuYW1lXHJcblxyXG4gICAgICB2YXIgaSA9IDBcclxuXHJcbiAgICAgIHZhciBhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaChybm90aHRtbHdoaXRlKVxyXG5cclxuICAgICAgaWYgKGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxKSB7XHJcbiAgICAgICAgd2hpbGUgKChuYW1lID0gYXR0ck5hbWVzW2krK10pKSB7XHJcbiAgICAgICAgICBlbGVtLnJlbW92ZUF0dHJpYnV0ZShuYW1lKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIGJvb2xIb29rID0ge1xyXG4gICAgc2V0OiBmdW5jdGlvbihlbGVtLCB2YWx1ZSwgbmFtZSkge1xyXG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgU2xpbUpRLnJlbW92ZUF0dHIoZWxlbSwgbmFtZSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZShuYW1lLCBuYW1lKVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBuYW1lXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBTbGltSlEuZWFjaChTbGltSlEuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXFx3Ky9nKSwgZnVuY3Rpb24oaSwgbmFtZSkge1xyXG4gICAgdmFyIGdldHRlciA9IGF0dHJIYW5kbGVbbmFtZV0gfHwgU2xpbUpRLmZpbmQuYXR0clxyXG5cclxuICAgIGF0dHJIYW5kbGVbbmFtZV0gPSBmdW5jdGlvbihlbGVtLCBuYW1lLCBpc1hNTCkge1xyXG4gICAgICB2YXIgcmV0XHJcblxyXG4gICAgICB2YXIgaGFuZGxlXHJcblxyXG4gICAgICB2YXIgbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxyXG5cclxuICAgICAgaWYgKCFpc1hNTCkge1xyXG4gICAgICAgIGhhbmRsZSA9IGF0dHJIYW5kbGVbbG93ZXJjYXNlTmFtZV1cclxuICAgICAgICBhdHRySGFuZGxlW2xvd2VyY2FzZU5hbWVdID0gcmV0XHJcbiAgICAgICAgcmV0ID0gZ2V0dGVyKGVsZW0sIG5hbWUsIGlzWE1MKSAhPSBudWxsID8gbG93ZXJjYXNlTmFtZSA6IG51bGxcclxuICAgICAgICBhdHRySGFuZGxlW2xvd2VyY2FzZU5hbWVdID0gaGFuZGxlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJldFxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIHZhciByZm9jdXNhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaVxyXG5cclxuICB2YXIgcmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaVxyXG5cclxuICBTbGltSlEuZm4uZXh0ZW5kKHtcclxuICAgIHByb3A6IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBhY2Nlc3ModGhpcywgU2xpbUpRLnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSlcclxuICAgIH0sXHJcblxyXG4gICAgcmVtb3ZlUHJvcDogZnVuY3Rpb24obmFtZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzW1NsaW1KUS5wcm9wRml4W25hbWVdIHx8IG5hbWVdXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgU2xpbUpRLmV4dGVuZCh7XHJcbiAgICBwcm9wOiBmdW5jdGlvbihlbGVtLCBuYW1lLCB2YWx1ZSkge1xyXG4gICAgICB2YXIgcmV0XHJcblxyXG4gICAgICB2YXIgaG9va3NcclxuXHJcbiAgICAgIHZhciBuVHlwZSA9IGVsZW0ubm9kZVR5cGVcclxuXHJcbiAgICAgIGlmIChuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMikge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoblR5cGUgIT09IDEgfHwgIVNsaW1KUS5pc1hNTERvYyhlbGVtKSkge1xyXG4gICAgICAgIG5hbWUgPSBTbGltSlEucHJvcEZpeFtuYW1lXSB8fCBuYW1lXHJcbiAgICAgICAgaG9va3MgPSBTbGltSlEucHJvcEhvb2tzW25hbWVdXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgaG9va3MgJiZcclxuICAgICAgICAgICdzZXQnIGluIGhvb2tzICYmXHJcbiAgICAgICAgICAocmV0ID0gaG9va3Muc2V0KGVsZW0sIHZhbHVlLCBuYW1lKSkgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIHJldFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIChlbGVtW25hbWVdID0gdmFsdWUpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChob29rcyAmJiAnZ2V0JyBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KGVsZW0sIG5hbWUpKSAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiByZXRcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGVsZW1bbmFtZV1cclxuICAgIH0sXHJcblxyXG4gICAgcHJvcEhvb2tzOiB7XHJcbiAgICAgIHRhYkluZGV4OiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgICB2YXIgdGFiaW5kZXggPSBTbGltSlEuZmluZC5hdHRyKGVsZW0sICd0YWJpbmRleCcpXHJcblxyXG4gICAgICAgICAgaWYgKHRhYmluZGV4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh0YWJpbmRleCwgMTApXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICByZm9jdXNhYmxlLnRlc3QoZWxlbS5ub2RlTmFtZSkgfHxcclxuICAgICAgICAgICAgKHJjbGlja2FibGUudGVzdChlbGVtLm5vZGVOYW1lKSAmJiBlbGVtLmhyZWYpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIDBcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gLTFcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcHJvcEZpeDoge1xyXG4gICAgICBmb3I6ICdodG1sRm9yJyxcclxuICAgICAgY2xhc3M6ICdjbGFzc05hbWUnXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgaWYgKCFzdXBwb3J0Lm9wdFNlbGVjdGVkKSB7XHJcbiAgICBTbGltSlEucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xyXG4gICAgICBnZXQ6IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlXHJcbiAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbFxyXG4gICAgICB9LFxyXG4gICAgICBzZXQ6IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICB2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlXHJcbiAgICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgICAgcGFyZW50LnNlbGVjdGVkSW5kZXhcclxuXHJcbiAgICAgICAgICBpZiAocGFyZW50LnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgU2xpbUpRLmVhY2goXHJcbiAgICBbXHJcbiAgICAgICd0YWJJbmRleCcsXHJcbiAgICAgICdyZWFkT25seScsXHJcbiAgICAgICdtYXhMZW5ndGgnLFxyXG4gICAgICAnY2VsbFNwYWNpbmcnLFxyXG4gICAgICAnY2VsbFBhZGRpbmcnLFxyXG4gICAgICAncm93U3BhbicsXHJcbiAgICAgICdjb2xTcGFuJyxcclxuICAgICAgJ3VzZU1hcCcsXHJcbiAgICAgICdmcmFtZUJvcmRlcicsXHJcbiAgICAgICdjb250ZW50RWRpdGFibGUnXHJcbiAgICBdLFxyXG4gICAgZnVuY3Rpb24oKSB7XHJcbiAgICAgIFNsaW1KUS5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV0gPSB0aGlzXHJcbiAgICB9XHJcbiAgKVxyXG5cclxuICBmdW5jdGlvbiBzdHJpcEFuZENvbGxhcHNlKHZhbHVlKSB7XHJcbiAgICB2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2gocm5vdGh0bWx3aGl0ZSkgfHwgW11cclxuICAgIHJldHVybiB0b2tlbnMuam9pbignICcpXHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRDbGFzcyhlbGVtKSB7XHJcbiAgICByZXR1cm4gKGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCdjbGFzcycpKSB8fCAnJ1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY2xhc3Nlc1RvQXJyYXkodmFsdWUpIHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWVcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZS5tYXRjaChybm90aHRtbHdoaXRlKSB8fCBbXVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdXHJcbiAgfVxyXG5cclxuICBTbGltSlEuZm4uZXh0ZW5kKHtcclxuICAgIGFkZENsYXNzOiBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICB2YXIgY2xhc3Nlc1xyXG5cclxuICAgICAgdmFyIGVsZW1cclxuXHJcbiAgICAgIHZhciBjdXJcclxuXHJcbiAgICAgIHZhciBjdXJWYWx1ZVxyXG5cclxuICAgICAgdmFyIGNsYXp6XHJcblxyXG4gICAgICB2YXIgalxyXG5cclxuICAgICAgdmFyIGZpbmFsVmFsdWVcclxuXHJcbiAgICAgIHZhciBpID0gMFxyXG5cclxuICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihqKSB7XHJcbiAgICAgICAgICBTbGltSlEodGhpcykuYWRkQ2xhc3ModmFsdWUuY2FsbCh0aGlzLCBqLCBnZXRDbGFzcyh0aGlzKSkpXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KHZhbHVlKVxyXG5cclxuICAgICAgaWYgKGNsYXNzZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgd2hpbGUgKChlbGVtID0gdGhpc1tpKytdKSkge1xyXG4gICAgICAgICAgY3VyVmFsdWUgPSBnZXRDbGFzcyhlbGVtKVxyXG4gICAgICAgICAgY3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAnICcgKyBzdHJpcEFuZENvbGxhcHNlKGN1clZhbHVlKSArICcgJ1xyXG5cclxuICAgICAgICAgIGlmIChjdXIpIHtcclxuICAgICAgICAgICAgaiA9IDBcclxuICAgICAgICAgICAgd2hpbGUgKChjbGF6eiA9IGNsYXNzZXNbaisrXSkpIHtcclxuICAgICAgICAgICAgICBpZiAoY3VyLmluZGV4T2YoJyAnICsgY2xhenogKyAnICcpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgY3VyICs9IGNsYXp6ICsgJyAnXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZShjdXIpXHJcbiAgICAgICAgICAgIGlmIChjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdjbGFzcycsIGZpbmFsVmFsdWUpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzXHJcbiAgICB9LFxyXG5cclxuICAgIHJlbW92ZUNsYXNzOiBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICB2YXIgY2xhc3Nlc1xyXG5cclxuICAgICAgdmFyIGVsZW1cclxuXHJcbiAgICAgIHZhciBjdXJcclxuXHJcbiAgICAgIHZhciBjdXJWYWx1ZVxyXG5cclxuICAgICAgdmFyIGNsYXp6XHJcblxyXG4gICAgICB2YXIgalxyXG5cclxuICAgICAgdmFyIGZpbmFsVmFsdWVcclxuXHJcbiAgICAgIHZhciBpID0gMFxyXG5cclxuICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihqKSB7XHJcbiAgICAgICAgICBTbGltSlEodGhpcykucmVtb3ZlQ2xhc3ModmFsdWUuY2FsbCh0aGlzLCBqLCBnZXRDbGFzcyh0aGlzKSkpXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cignY2xhc3MnLCAnJylcclxuICAgICAgfVxyXG5cclxuICAgICAgY2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KHZhbHVlKVxyXG5cclxuICAgICAgaWYgKGNsYXNzZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgd2hpbGUgKChlbGVtID0gdGhpc1tpKytdKSkge1xyXG4gICAgICAgICAgY3VyVmFsdWUgPSBnZXRDbGFzcyhlbGVtKVxyXG5cclxuICAgICAgICAgIGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgJyAnICsgc3RyaXBBbmRDb2xsYXBzZShjdXJWYWx1ZSkgKyAnICdcclxuXHJcbiAgICAgICAgICBpZiAoY3VyKSB7XHJcbiAgICAgICAgICAgIGogPSAwXHJcbiAgICAgICAgICAgIHdoaWxlICgoY2xhenogPSBjbGFzc2VzW2orK10pKSB7XHJcbiAgICAgICAgICAgICAgd2hpbGUgKGN1ci5pbmRleE9mKCcgJyArIGNsYXp6ICsgJyAnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjdXIgPSBjdXIucmVwbGFjZSgnICcgKyBjbGF6eiArICcgJywgJyAnKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoY3VyKVxyXG4gICAgICAgICAgICBpZiAoY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUpIHtcclxuICAgICAgICAgICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBmaW5hbFZhbHVlKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpc1xyXG4gICAgfSxcclxuXHJcbiAgICB0b2dnbGVDbGFzczogZnVuY3Rpb24odmFsdWUsIHN0YXRlVmFsKSB7XHJcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlXHJcblxyXG4gICAgICB2YXIgaXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSlcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygc3RhdGVWYWwgPT09ICdib29sZWFuJyAmJiBpc1ZhbGlkVmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENsYXNzKHZhbHVlKSA6IHRoaXMucmVtb3ZlQ2xhc3ModmFsdWUpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkge1xyXG4gICAgICAgICAgU2xpbUpRKHRoaXMpLnRvZ2dsZUNsYXNzKFxyXG4gICAgICAgICAgICB2YWx1ZS5jYWxsKHRoaXMsIGksIGdldENsYXNzKHRoaXMpLCBzdGF0ZVZhbCksXHJcbiAgICAgICAgICAgIHN0YXRlVmFsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY2xhc3NOYW1lLCBpLCBzZWxmLCBjbGFzc05hbWVzXHJcblxyXG4gICAgICAgIGlmIChpc1ZhbGlkVmFsdWUpIHtcclxuICAgICAgICAgIGkgPSAwXHJcbiAgICAgICAgICBzZWxmID0gU2xpbUpRKHRoaXMpXHJcbiAgICAgICAgICBjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkodmFsdWUpXHJcblxyXG4gICAgICAgICAgd2hpbGUgKChjbGFzc05hbWUgPSBjbGFzc05hbWVzW2krK10pKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLmhhc0NsYXNzKGNsYXNzTmFtZSkpIHtcclxuICAgICAgICAgICAgICBzZWxmLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzZWxmLmFkZENsYXNzKGNsYXNzTmFtZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgIGNsYXNzTmFtZSA9IGdldENsYXNzKHRoaXMpXHJcbiAgICAgICAgICBpZiAoY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgIGRhdGFQcml2LnNldCh0aGlzLCAnX19jbGFzc05hbWVfXycsIGNsYXNzTmFtZSlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zZXRBdHRyaWJ1dGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoXHJcbiAgICAgICAgICAgICAgJ2NsYXNzJyxcclxuICAgICAgICAgICAgICBjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlXHJcbiAgICAgICAgICAgICAgICA/ICcnXHJcbiAgICAgICAgICAgICAgICA6IGRhdGFQcml2LmdldCh0aGlzLCAnX19jbGFzc05hbWVfXycpIHx8ICcnXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG5cclxuICAgIGhhc0NsYXNzOiBmdW5jdGlvbihzZWxlY3Rvcikge1xyXG4gICAgICB2YXIgY2xhc3NOYW1lXHJcblxyXG4gICAgICB2YXIgZWxlbVxyXG5cclxuICAgICAgdmFyIGkgPSAwXHJcblxyXG4gICAgICBjbGFzc05hbWUgPSAnICcgKyBzZWxlY3RvciArICcgJ1xyXG4gICAgICB3aGlsZSAoKGVsZW0gPSB0aGlzW2krK10pKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxyXG4gICAgICAgICAgKCcgJyArIHN0cmlwQW5kQ29sbGFwc2UoZ2V0Q2xhc3MoZWxlbSkpICsgJyAnKS5pbmRleE9mKGNsYXNzTmFtZSkgPiAtMVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIHZhciBycmV0dXJuID0gL1xcci9nXHJcblxyXG4gIFNsaW1KUS5mbi5leHRlbmQoe1xyXG4gICAgdmFsOiBmdW5jdGlvbih2YWx1ZSkge1xyXG4gICAgICB2YXIgaG9va3NcclxuXHJcbiAgICAgIHZhciByZXRcclxuXHJcbiAgICAgIHZhciB2YWx1ZUlzRnVuY3Rpb25cclxuXHJcbiAgICAgIHZhciBlbGVtID0gdGhpc1swXVxyXG5cclxuICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKGVsZW0pIHtcclxuICAgICAgICAgIGhvb2tzID1cclxuICAgICAgICAgICAgU2xpbUpRLnZhbEhvb2tzW2VsZW0udHlwZV0gfHxcclxuICAgICAgICAgICAgU2xpbUpRLnZhbEhvb2tzW2VsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKV1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGhvb2tzICYmXHJcbiAgICAgICAgICAgICdnZXQnIGluIGhvb2tzICYmXHJcbiAgICAgICAgICAgIChyZXQgPSBob29rcy5nZXQoZWxlbSwgJ3ZhbHVlJykpICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0ID0gZWxlbS52YWx1ZVxyXG5cclxuICAgICAgICAgIGlmICh0eXBlb2YgcmV0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0LnJlcGxhY2UocnJldHVybiwgJycpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHJldCA9PSBudWxsID8gJycgOiByZXRcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICB2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKHZhbHVlKVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7XHJcbiAgICAgICAgdmFyIHZhbFxyXG5cclxuICAgICAgICBpZiAodGhpcy5ub2RlVHlwZSAhPT0gMSkge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWVJc0Z1bmN0aW9uKSB7XHJcbiAgICAgICAgICB2YWwgPSB2YWx1ZS5jYWxsKHRoaXMsIGksIFNsaW1KUSh0aGlzKS52YWwoKSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFsID0gdmFsdWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgdmFsID0gJydcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICB2YWwgKz0gJydcclxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xyXG4gICAgICAgICAgdmFsID0gU2xpbUpRLm1hcCh2YWwsIGZ1bmN0aW9uKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZSArICcnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaG9va3MgPVxyXG4gICAgICAgICAgU2xpbUpRLnZhbEhvb2tzW3RoaXMudHlwZV0gfHxcclxuICAgICAgICAgIFNsaW1KUS52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldXHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICFob29rcyB8fFxyXG4gICAgICAgICAgISgnc2V0JyBpbiBob29rcykgfHxcclxuICAgICAgICAgIGhvb2tzLnNldCh0aGlzLCB2YWwsICd2YWx1ZScpID09PSB1bmRlZmluZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWxcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgU2xpbUpRLmV4dGVuZCh7XHJcbiAgICB2YWxIb29rczoge1xyXG4gICAgICBvcHRpb246IHtcclxuICAgICAgICBnZXQ6IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgICAgICAgIHZhciB2YWwgPSBTbGltSlEuZmluZC5hdHRyKGVsZW0sICd2YWx1ZScpXHJcbiAgICAgICAgICByZXR1cm4gdmFsICE9IG51bGwgPyB2YWwgOiBzdHJpcEFuZENvbGxhcHNlKFNsaW1KUS50ZXh0KGVsZW0pKVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgc2VsZWN0OiB7XHJcbiAgICAgICAgZ2V0OiBmdW5jdGlvbihlbGVtKSB7XHJcbiAgICAgICAgICB2YXIgdmFsdWVcclxuXHJcbiAgICAgICAgICB2YXIgb3B0aW9uXHJcblxyXG4gICAgICAgICAgdmFyIGlcclxuXHJcbiAgICAgICAgICB2YXIgb3B0aW9ucyA9IGVsZW0ub3B0aW9uc1xyXG5cclxuICAgICAgICAgIHZhciBpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleFxyXG5cclxuICAgICAgICAgIHZhciBvbmUgPSBlbGVtLnR5cGUgPT09ICdzZWxlY3Qtb25lJ1xyXG5cclxuICAgICAgICAgIHZhciB2YWx1ZXMgPSBvbmUgPyBudWxsIDogW11cclxuXHJcbiAgICAgICAgICB2YXIgbWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGhcclxuXHJcbiAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgIGkgPSBtYXhcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGkgPSBvbmUgPyBpbmRleCA6IDBcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBmb3IgKDsgaSA8IG1heDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbiA9IG9wdGlvbnNbaV1cclxuXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAob3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4KSAmJlxyXG4gICAgICAgICAgICAgICFvcHRpb24uZGlzYWJsZWQgJiZcclxuICAgICAgICAgICAgICAoIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XHJcbiAgICAgICAgICAgICAgICAhbm9kZU5hbWUob3B0aW9uLnBhcmVudE5vZGUsICdvcHRncm91cCcpKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB2YWx1ZSA9IFNsaW1KUShvcHRpb24pLnZhbCgpXHJcblxyXG4gICAgICAgICAgICAgIGlmIChvbmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gdmFsdWVzXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0OiBmdW5jdGlvbihlbGVtLCB2YWx1ZSkge1xyXG4gICAgICAgICAgdmFyIG9wdGlvblNldFxyXG5cclxuICAgICAgICAgIHZhciBvcHRpb25cclxuXHJcbiAgICAgICAgICB2YXIgb3B0aW9ucyA9IGVsZW0ub3B0aW9uc1xyXG5cclxuICAgICAgICAgIHZhciB2YWx1ZXMgPSBTbGltSlEubWFrZUFycmF5KHZhbHVlKVxyXG5cclxuICAgICAgICAgIHZhciBpID0gb3B0aW9ucy5sZW5ndGhcclxuXHJcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgIG9wdGlvbiA9IG9wdGlvbnNbaV1cclxuXHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAob3B0aW9uLnNlbGVjdGVkID1cclxuICAgICAgICAgICAgICAgIFNsaW1KUS5pbkFycmF5KFNsaW1KUS52YWxIb29rcy5vcHRpb24uZ2V0KG9wdGlvbiksIHZhbHVlcykgPiAtMSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgb3B0aW9uU2V0ID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCFvcHRpb25TZXQpIHtcclxuICAgICAgICAgICAgZWxlbS5zZWxlY3RlZEluZGV4ID0gLTFcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB2YWx1ZXNcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KVxyXG5cclxuICBTbGltSlEuZWFjaChbJ3JhZGlvJywgJ2NoZWNrYm94J10sIGZ1bmN0aW9uKCkge1xyXG4gICAgU2xpbUpRLnZhbEhvb2tzW3RoaXNdID0ge1xyXG4gICAgICBzZXQ6IGZ1bmN0aW9uKGVsZW0sIHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gKGVsZW0uY2hlY2tlZCA9IFNsaW1KUS5pbkFycmF5KFNsaW1KUShlbGVtKS52YWwoKSwgdmFsdWUpID4gLTEpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXN1cHBvcnQuY2hlY2tPbikge1xyXG4gICAgICBTbGltSlEudmFsSG9va3NbdGhpc10uZ2V0ID0gZnVuY3Rpb24oZWxlbSkge1xyXG4gICAgICAgIHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgndmFsdWUnKSA9PT0gbnVsbCA/ICdvbicgOiBlbGVtLnZhbHVlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KVxyXG5cclxuICBzdXBwb3J0LmZvY3VzaW4gPSAnb25mb2N1c2luJyBpbiB3aW5kb3dcclxuXHJcbiAgdmFyIHJmb2N1c01vcnBoID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvXHJcblxyXG4gIHZhciBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayA9IGZ1bmN0aW9uKGUpIHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcclxuICB9XHJcblxyXG4gIFNsaW1KUS5leHRlbmQoU2xpbUpRLmV2ZW50LCB7XHJcbiAgICB0cmlnZ2VyOiBmdW5jdGlvbihldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzKSB7XHJcbiAgICAgIHZhciBpXHJcblxyXG4gICAgICB2YXIgY3VyXHJcblxyXG4gICAgICB2YXIgdG1wXHJcblxyXG4gICAgICB2YXIgYnViYmxlVHlwZVxyXG5cclxuICAgICAgdmFyIG9udHlwZVxyXG5cclxuICAgICAgdmFyIGhhbmRsZVxyXG5cclxuICAgICAgdmFyIHNwZWNpYWxcclxuXHJcbiAgICAgIHZhciBsYXN0RWxlbWVudFxyXG5cclxuICAgICAgdmFyIGV2ZW50UGF0aCA9IFtlbGVtIHx8IGRvY3VtZW50XVxyXG5cclxuICAgICAgdmFyIHR5cGUgPSBoYXNPd24uY2FsbChldmVudCwgJ3R5cGUnKSA/IGV2ZW50LnR5cGUgOiBldmVudFxyXG5cclxuICAgICAgdmFyIG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbChldmVudCwgJ25hbWVzcGFjZScpXHJcbiAgICAgICAgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoJy4nKVxyXG4gICAgICAgIDogW11cclxuXHJcbiAgICAgIGN1ciA9IGxhc3RFbGVtZW50ID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnRcclxuXHJcbiAgICAgIGlmIChlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDgpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJmb2N1c01vcnBoLnRlc3QodHlwZSArIFNsaW1KUS5ldmVudC50cmlnZ2VyZWQpKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0eXBlLmluZGV4T2YoJy4nKSA+IC0xKSB7XHJcbiAgICAgICAgbmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoJy4nKVxyXG4gICAgICAgIHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KClcclxuICAgICAgICBuYW1lc3BhY2VzLnNvcnQoKVxyXG4gICAgICB9XHJcbiAgICAgIG9udHlwZSA9IHR5cGUuaW5kZXhPZignOicpIDwgMCAmJiAnb24nICsgdHlwZVxyXG5cclxuICAgICAgZXZlbnQgPSBldmVudFtTbGltSlEuZXhwYW5kb11cclxuICAgICAgICA/IGV2ZW50XHJcbiAgICAgICAgOiBuZXcgU2xpbUpRLkV2ZW50KHR5cGUsIHR5cGVvZiBldmVudCA9PT0gJ29iamVjdCcgJiYgZXZlbnQpXHJcblxyXG4gICAgICBldmVudC5pc1RyaWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogM1xyXG4gICAgICBldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oJy4nKVxyXG4gICAgICBldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlXHJcbiAgICAgICAgPyBuZXcgUmVnRXhwKCcoXnxcXFxcLiknICsgbmFtZXNwYWNlcy5qb2luKCdcXFxcLig/Oi4qXFxcXC58KScpICsgJyhcXFxcLnwkKScpXHJcbiAgICAgICAgOiBudWxsXHJcblxyXG4gICAgICBldmVudC5yZXN1bHQgPSB1bmRlZmluZWRcclxuICAgICAgaWYgKCFldmVudC50YXJnZXQpIHtcclxuICAgICAgICBldmVudC50YXJnZXQgPSBlbGVtXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRhdGEgPSBkYXRhID09IG51bGwgPyBbZXZlbnRdIDogU2xpbUpRLm1ha2VBcnJheShkYXRhLCBbZXZlbnRdKVxyXG5cclxuICAgICAgc3BlY2lhbCA9IFNsaW1KUS5ldmVudC5zcGVjaWFsW3R5cGVdIHx8IHt9XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhb25seUhhbmRsZXJzICYmXHJcbiAgICAgICAgc3BlY2lhbC50cmlnZ2VyICYmXHJcbiAgICAgICAgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KGVsZW0sIGRhdGEpID09PSBmYWxzZVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWlzV2luZG93KGVsZW0pKSB7XHJcbiAgICAgICAgYnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGVcclxuICAgICAgICBpZiAoIXJmb2N1c01vcnBoLnRlc3QoYnViYmxlVHlwZSArIHR5cGUpKSB7XHJcbiAgICAgICAgICBjdXIgPSBjdXIucGFyZW50Tm9kZVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgZXZlbnRQYXRoLnB1c2goY3VyKVxyXG4gICAgICAgICAgdG1wID0gY3VyXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodG1wID09PSAoZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50KSkge1xyXG4gICAgICAgICAgZXZlbnRQYXRoLnB1c2godG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaSA9IDBcclxuICAgICAgd2hpbGUgKChjdXIgPSBldmVudFBhdGhbaSsrXSkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcclxuICAgICAgICBsYXN0RWxlbWVudCA9IGN1clxyXG4gICAgICAgIGV2ZW50LnR5cGUgPSBpID4gMSA/IGJ1YmJsZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGVcclxuXHJcbiAgICAgICAgaGFuZGxlID1cclxuICAgICAgICAgIChkYXRhUHJpdi5nZXQoY3VyLCAnZXZlbnRzJykgfHwge30pW2V2ZW50LnR5cGVdICYmXHJcbiAgICAgICAgICBkYXRhUHJpdi5nZXQoY3VyLCAnaGFuZGxlJylcclxuICAgICAgICBpZiAoaGFuZGxlKSB7XHJcbiAgICAgICAgICBoYW5kbGUuYXBwbHkoY3VyLCBkYXRhKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaGFuZGxlID0gb250eXBlICYmIGN1cltvbnR5cGVdXHJcbiAgICAgICAgaWYgKGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YShjdXIpKSB7XHJcbiAgICAgICAgICBldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoY3VyLCBkYXRhKVxyXG4gICAgICAgICAgaWYgKGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBldmVudC50eXBlID0gdHlwZVxyXG5cclxuICAgICAgaWYgKCFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKCFzcGVjaWFsLl9kZWZhdWx0IHx8XHJcbiAgICAgICAgICAgIHNwZWNpYWwuX2RlZmF1bHQuYXBwbHkoZXZlbnRQYXRoLnBvcCgpLCBkYXRhKSA9PT0gZmFsc2UpICYmXHJcbiAgICAgICAgICBhY2NlcHREYXRhKGVsZW0pXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAob250eXBlICYmIGlzRnVuY3Rpb24oZWxlbVt0eXBlXSkgJiYgIWlzV2luZG93KGVsZW0pKSB7XHJcbiAgICAgICAgICAgIHRtcCA9IGVsZW1bb250eXBlXVxyXG5cclxuICAgICAgICAgICAgaWYgKHRtcCkge1xyXG4gICAgICAgICAgICAgIGVsZW1bb250eXBlXSA9IG51bGxcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgU2xpbUpRLmV2ZW50LnRyaWdnZXJlZCA9IHR5cGVcclxuXHJcbiAgICAgICAgICAgIGlmIChldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XHJcbiAgICAgICAgICAgICAgbGFzdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjaylcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZWxlbVt0eXBlXSgpXHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xyXG4gICAgICAgICAgICAgIGxhc3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2spXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIFNsaW1KUS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWRcclxuXHJcbiAgICAgICAgICAgIGlmICh0bXApIHtcclxuICAgICAgICAgICAgICBlbGVtW29udHlwZV0gPSB0bXBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGV2ZW50LnJlc3VsdFxyXG4gICAgfSxcclxuXHJcbiAgICBzaW11bGF0ZTogZnVuY3Rpb24odHlwZSwgZWxlbSwgZXZlbnQpIHtcclxuICAgICAgdmFyIGUgPSBTbGltSlEuZXh0ZW5kKG5ldyBTbGltSlEuRXZlbnQoKSwgZXZlbnQsIHtcclxuICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgIGlzU2ltdWxhdGVkOiB0cnVlXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBTbGltSlEuZXZlbnQudHJpZ2dlcihlLCBudWxsLCBlbGVtKVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIFNsaW1KUS5mbi5leHRlbmQoe1xyXG4gICAgdHJpZ2dlcjogZnVuY3Rpb24odHlwZSwgZGF0YSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIFNsaW1KUS5ldmVudC50cmlnZ2VyKHR5cGUsIGRhdGEsIHRoaXMpXHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgdHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKHR5cGUsIGRhdGEpIHtcclxuICAgICAgdmFyIGVsZW0gPSB0aGlzWzBdXHJcbiAgICAgIGlmIChlbGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIFNsaW1KUS5ldmVudC50cmlnZ2VyKHR5cGUsIGRhdGEsIGVsZW0sIHRydWUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KVxyXG5cclxuICBpZiAoIXN1cHBvcnQuZm9jdXNpbikge1xyXG4gICAgU2xpbUpRLmVhY2goeyBmb2N1czogJ2ZvY3VzaW4nLCBibHVyOiAnZm9jdXNvdXQnIH0sIGZ1bmN0aW9uKG9yaWcsIGZpeCkge1xyXG4gICAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgU2xpbUpRLmV2ZW50LnNpbXVsYXRlKGZpeCwgZXZlbnQudGFyZ2V0LCBTbGltSlEuZXZlbnQuZml4KGV2ZW50KSlcclxuICAgICAgfVxyXG5cclxuICAgICAgU2xpbUpRLmV2ZW50LnNwZWNpYWxbZml4XSA9IHtcclxuICAgICAgICBzZXR1cDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICB2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXNcclxuXHJcbiAgICAgICAgICB2YXIgYXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoZG9jLCBmaXgpXHJcblxyXG4gICAgICAgICAgaWYgKCFhdHRhY2hlcykge1xyXG4gICAgICAgICAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcihvcmlnLCBoYW5kbGVyLCB0cnVlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGF0YVByaXYuYWNjZXNzKGRvYywgZml4LCAoYXR0YWNoZXMgfHwgMCkgKyAxKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGVhcmRvd246IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgdmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzXHJcblxyXG4gICAgICAgICAgdmFyIGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKGRvYywgZml4KSAtIDFcclxuXHJcbiAgICAgICAgICBpZiAoIWF0dGFjaGVzKSB7XHJcbiAgICAgICAgICAgIGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKG9yaWcsIGhhbmRsZXIsIHRydWUpXHJcbiAgICAgICAgICAgIGRhdGFQcml2LnJlbW92ZShkb2MsIGZpeClcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGFQcml2LmFjY2Vzcyhkb2MsIGZpeCwgYXR0YWNoZXMpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdmFyIHJicmFja2V0ID0gL1xcW1xcXSQvXHJcblxyXG4gIHZhciByQ1JMRiA9IC9cXHI/XFxuL2dcclxuXHJcbiAgdmFyIHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaVxyXG5cclxuICB2YXIgcnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pXHJcblxyXG4gIGZ1bmN0aW9uIGJ1aWxkUGFyYW1zKHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkKSB7XHJcbiAgICB2YXIgbmFtZVxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcclxuICAgICAgU2xpbUpRLmVhY2gob2JqLCBmdW5jdGlvbihpLCB2KSB7XHJcbiAgICAgICAgaWYgKHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QocHJlZml4KSkge1xyXG4gICAgICAgICAgYWRkKHByZWZpeCwgdilcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYnVpbGRQYXJhbXMoXHJcbiAgICAgICAgICAgIHByZWZpeCArICdbJyArICh0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiAhPSBudWxsID8gaSA6ICcnKSArICddJyxcclxuICAgICAgICAgICAgdixcclxuICAgICAgICAgICAgdHJhZGl0aW9uYWwsXHJcbiAgICAgICAgICAgIGFkZFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0gZWxzZSBpZiAoIXRyYWRpdGlvbmFsICYmIHRvVHlwZShvYmopID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBmb3IgKG5hbWUgaW4gb2JqKSB7XHJcbiAgICAgICAgYnVpbGRQYXJhbXMocHJlZml4ICsgJ1snICsgbmFtZSArICddJywgb2JqW25hbWVdLCB0cmFkaXRpb25hbCwgYWRkKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhZGQocHJlZml4LCBvYmopXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBTbGltSlEucGFyYW0gPSBmdW5jdGlvbihhLCB0cmFkaXRpb25hbCkge1xyXG4gICAgdmFyIHByZWZpeFxyXG5cclxuICAgIHZhciBzID0gW11cclxuXHJcbiAgICB2YXIgYWRkID0gZnVuY3Rpb24oa2V5LCB2YWx1ZU9yRnVuY3Rpb24pIHtcclxuICAgICAgdmFyIHZhbHVlID0gaXNGdW5jdGlvbih2YWx1ZU9yRnVuY3Rpb24pXHJcbiAgICAgICAgPyB2YWx1ZU9yRnVuY3Rpb24oKVxyXG4gICAgICAgIDogdmFsdWVPckZ1bmN0aW9uXHJcblxyXG4gICAgICBzW3MubGVuZ3RoXSA9XHJcbiAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgK1xyXG4gICAgICAgICc9JyArXHJcbiAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KGEpIHx8IChhLnNsaW1KUSAmJiAhU2xpbUpRLmlzUGxhaW5PYmplY3QoYSkpKSB7XHJcbiAgICAgIFNsaW1KUS5lYWNoKGEsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGFkZCh0aGlzLm5hbWUsIHRoaXMudmFsdWUpXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKHByZWZpeCBpbiBhKSB7XHJcbiAgICAgICAgYnVpbGRQYXJhbXMocHJlZml4LCBhW3ByZWZpeF0sIHRyYWRpdGlvbmFsLCBhZGQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcy5qb2luKCcmJylcclxuICB9XHJcblxyXG4gIFNsaW1KUS5mbi5leHRlbmQoe1xyXG4gICAgc2VyaWFsaXplOiBmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuIFNsaW1KUS5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpXHJcbiAgICB9LFxyXG4gICAgc2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnRzID0gU2xpbUpRLnByb3AodGhpcywgJ2VsZW1lbnRzJylcclxuICAgICAgICByZXR1cm4gZWxlbWVudHMgPyBTbGltSlEubWFrZUFycmF5KGVsZW1lbnRzKSA6IHRoaXNcclxuICAgICAgfSlcclxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgdmFyIHR5cGUgPSB0aGlzLnR5cGVcclxuXHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLm5hbWUgJiZcclxuICAgICAgICAgICAgIVNsaW1KUSh0aGlzKS5pcygnOmRpc2FibGVkJykgJiZcclxuICAgICAgICAgICAgcnN1Ym1pdHRhYmxlLnRlc3QodGhpcy5ub2RlTmFtZSkgJiZcclxuICAgICAgICAgICAgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KHR5cGUpICYmXHJcbiAgICAgICAgICAgICh0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QodHlwZSkpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuICAgICAgICAubWFwKGZ1bmN0aW9uKGksIGVsZW0pIHtcclxuICAgICAgICAgIHZhciB2YWwgPSBTbGltSlEodGhpcykudmFsKClcclxuXHJcbiAgICAgICAgICBpZiAodmFsID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBTbGltSlEubWFwKHZhbCwgZnVuY3Rpb24odmFsKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UockNSTEYsICdcXHJcXG4nKSB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UockNSTEYsICdcXHJcXG4nKSB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZ2V0KClcclxuICAgIH1cclxuICB9KVxyXG5cclxuICBTbGltSlEuZm4uZXh0ZW5kKHtcclxuICAgIHdyYXBBbGw6IGZ1bmN0aW9uKGh0bWwpIHtcclxuICAgICAgdmFyIHdyYXBcclxuXHJcbiAgICAgIGlmICh0aGlzWzBdKSB7XHJcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oaHRtbCkpIHtcclxuICAgICAgICAgIGh0bWwgPSBodG1sLmNhbGwodGhpc1swXSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHdyYXAgPSBTbGltSlEoaHRtbCwgdGhpc1swXS5vd25lckRvY3VtZW50KVxyXG4gICAgICAgICAgLmVxKDApXHJcbiAgICAgICAgICAuY2xvbmUodHJ1ZSlcclxuXHJcbiAgICAgICAgaWYgKHRoaXNbMF0ucGFyZW50Tm9kZSkge1xyXG4gICAgICAgICAgd3JhcC5pbnNlcnRCZWZvcmUodGhpc1swXSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHdyYXBcclxuICAgICAgICAgIC5tYXAoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciBlbGVtID0gdGhpc1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQpIHtcclxuICAgICAgICAgICAgICBlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZWxlbVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hcHBlbmQodGhpcylcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH0sXHJcblxyXG4gICAgd3JhcElubmVyOiBmdW5jdGlvbihodG1sKSB7XHJcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGh0bWwpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7XHJcbiAgICAgICAgICBTbGltSlEodGhpcykud3JhcElubmVyKGh0bWwuY2FsbCh0aGlzLCBpKSlcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gU2xpbUpRKHRoaXMpXHJcblxyXG4gICAgICAgIHZhciBjb250ZW50cyA9IHNlbGYuY29udGVudHMoKVxyXG5cclxuICAgICAgICBpZiAoY29udGVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb250ZW50cy53cmFwQWxsKGh0bWwpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNlbGYuYXBwZW5kKGh0bWwpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuXHJcbiAgICB3cmFwOiBmdW5jdGlvbihodG1sKSB7XHJcbiAgICAgIHZhciBodG1sSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oaHRtbClcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkge1xyXG4gICAgICAgIFNsaW1KUSh0aGlzKS53cmFwQWxsKGh0bWxJc0Z1bmN0aW9uID8gaHRtbC5jYWxsKHRoaXMsIGkpIDogaHRtbClcclxuICAgICAgfSlcclxuICAgIH0sXHJcblxyXG4gICAgdW53cmFwOiBmdW5jdGlvbihzZWxlY3Rvcikge1xyXG4gICAgICB0aGlzLnBhcmVudChzZWxlY3RvcilcclxuICAgICAgICAubm90KCdib2R5JylcclxuICAgICAgICAuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgIFNsaW1KUSh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpXHJcbiAgICAgICAgfSlcclxuICAgICAgcmV0dXJuIHRoaXNcclxuICAgIH1cclxuICB9KVxyXG5cclxuICBTbGltSlEuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgIHJldHVybiAhU2xpbUpRLmV4cHIucHNldWRvcy52aXNpYmxlKGVsZW0pXHJcbiAgfVxyXG4gIFNsaW1KUS5leHByLnBzZXVkb3MudmlzaWJsZSA9IGZ1bmN0aW9uKGVsZW0pIHtcclxuICAgIHJldHVybiAhIShcclxuICAgICAgZWxlbS5vZmZzZXRXaWR0aCB8fFxyXG4gICAgICBlbGVtLm9mZnNldEhlaWdodCB8fFxyXG4gICAgICBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9IChmdW5jdGlvbigpIHtcclxuICAgIHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCcnKS5ib2R5XHJcbiAgICBib2R5LmlubmVySFRNTCA9ICc8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPidcclxuICAgIHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyXHJcbiAgfSkoKVxyXG5cclxuICBTbGltSlEucGFyc2VIVE1MID0gZnVuY3Rpb24oZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMpIHtcclxuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIFtdXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGNvbnRleHQgPT09ICdib29sZWFuJykge1xyXG4gICAgICBrZWVwU2NyaXB0cyA9IGNvbnRleHRcclxuICAgICAgY29udGV4dCA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGJhc2UsIHBhcnNlZCwgc2NyaXB0c1xyXG5cclxuICAgIGlmICghY29udGV4dCkge1xyXG4gICAgICBpZiAoc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQpIHtcclxuICAgICAgICBjb250ZXh0ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCcnKVxyXG5cclxuICAgICAgICBiYXNlID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCdiYXNlJylcclxuICAgICAgICBiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmXHJcbiAgICAgICAgY29udGV4dC5oZWFkLmFwcGVuZENoaWxkKGJhc2UpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29udGV4dCA9IGRvY3VtZW50XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoZGF0YSlcclxuICAgIHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW11cclxuXHJcbiAgICBpZiAocGFyc2VkKSB7XHJcbiAgICAgIHJldHVybiBbY29udGV4dC5jcmVhdGVFbGVtZW50KHBhcnNlZFsxXSldXHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VkID0gYnVpbGRGcmFnbWVudChbZGF0YV0sIGNvbnRleHQsIHNjcmlwdHMpXHJcblxyXG4gICAgaWYgKHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGgpIHtcclxuICAgICAgU2xpbUpRKHNjcmlwdHMpLnJlbW92ZSgpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFNsaW1KUS5tZXJnZShbXSwgcGFyc2VkLmNoaWxkTm9kZXMpXHJcbiAgfVxyXG5cclxuICBTbGltSlEub2Zmc2V0ID0ge1xyXG4gICAgc2V0T2Zmc2V0OiBmdW5jdGlvbihlbGVtLCBvcHRpb25zLCBpKSB7XHJcbiAgICAgIHZhciBjdXJQb3NpdGlvblxyXG5cclxuICAgICAgdmFyIGN1ckxlZnRcclxuXHJcbiAgICAgIHZhciBjdXJDU1NUb3BcclxuXHJcbiAgICAgIHZhciBjdXJUb3BcclxuXHJcbiAgICAgIHZhciBjdXJPZmZzZXRcclxuXHJcbiAgICAgIHZhciBjdXJDU1NMZWZ0XHJcblxyXG4gICAgICB2YXIgY2FsY3VsYXRlUG9zaXRpb25cclxuXHJcbiAgICAgIHZhciBwb3NpdGlvbiA9IFNsaW1KUS5jc3MoZWxlbSwgJ3Bvc2l0aW9uJylcclxuXHJcbiAgICAgIHZhciBjdXJFbGVtID0gU2xpbUpRKGVsZW0pXHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7fVxyXG5cclxuICAgICAgaWYgKHBvc2l0aW9uID09PSAnc3RhdGljJykge1xyXG4gICAgICAgIGVsZW0uc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KClcclxuICAgICAgY3VyQ1NTVG9wID0gU2xpbUpRLmNzcyhlbGVtLCAndG9wJylcclxuICAgICAgY3VyQ1NTTGVmdCA9IFNsaW1KUS5jc3MoZWxlbSwgJ2xlZnQnKVxyXG4gICAgICBjYWxjdWxhdGVQb3NpdGlvbiA9XHJcbiAgICAgICAgKHBvc2l0aW9uID09PSAnYWJzb2x1dGUnIHx8IHBvc2l0aW9uID09PSAnZml4ZWQnKSAmJlxyXG4gICAgICAgIChjdXJDU1NUb3AgKyBjdXJDU1NMZWZ0KS5pbmRleE9mKCdhdXRvJykgPiAtMVxyXG4gICAgICBpZiAoY2FsY3VsYXRlUG9zaXRpb24pIHtcclxuICAgICAgICBjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKVxyXG4gICAgICAgIGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcFxyXG4gICAgICAgIGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3VyVG9wID0gcGFyc2VGbG9hdChjdXJDU1NUb3ApIHx8IDBcclxuICAgICAgICBjdXJMZWZ0ID0gcGFyc2VGbG9hdChjdXJDU1NMZWZ0KSB8fCAwXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XHJcbiAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuY2FsbChlbGVtLCBpLCBTbGltSlEuZXh0ZW5kKHt9LCBjdXJPZmZzZXQpKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAob3B0aW9ucy50b3AgIT0gbnVsbCkge1xyXG4gICAgICAgIHByb3BzLnRvcCA9IG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCArIGN1clRvcFxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb25zLmxlZnQgIT0gbnVsbCkge1xyXG4gICAgICAgIHByb3BzLmxlZnQgPSBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCArIGN1ckxlZnRcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCd1c2luZycgaW4gb3B0aW9ucykge1xyXG4gICAgICAgIG9wdGlvbnMudXNpbmcuY2FsbChlbGVtLCBwcm9wcylcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdXJFbGVtLmNzcyhwcm9wcylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgU2xpbUpRLmZuLmV4dGVuZCh7XHJcbiAgICBvZmZzZXQ6IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICA/IHRoaXNcclxuICAgICAgICAgIDogdGhpcy5lYWNoKGZ1bmN0aW9uKGkpIHtcclxuICAgICAgICAgICAgU2xpbUpRLm9mZnNldC5zZXRPZmZzZXQodGhpcywgb3B0aW9ucywgaSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciByZWN0XHJcblxyXG4gICAgICB2YXIgd2luXHJcblxyXG4gICAgICB2YXIgZWxlbSA9IHRoaXNbMF1cclxuXHJcbiAgICAgIGlmICghZWxlbSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxyXG4gICAgICB3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXdcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0LFxyXG4gICAgICAgIGxlZnQ6IHJlY3QubGVmdCArIHdpbi5wYWdlWE9mZnNldFxyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcclxuICAgICAgaWYgKCF0aGlzWzBdKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBvZmZzZXRQYXJlbnRcclxuXHJcbiAgICAgIHZhciBvZmZzZXRcclxuXHJcbiAgICAgIHZhciBkb2NcclxuXHJcbiAgICAgIHZhciBlbGVtID0gdGhpc1swXVxyXG5cclxuICAgICAgdmFyIHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH1cclxuXHJcbiAgICAgIGlmIChTbGltSlEuY3NzKGVsZW0sICdwb3NpdGlvbicpID09PSAnZml4ZWQnKSB7XHJcbiAgICAgICAgb2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9mZnNldCA9IHRoaXMub2Zmc2V0KClcclxuICAgICAgICBkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnRcclxuICAgICAgICBvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50XHJcbiAgICAgICAgd2hpbGUgKFxyXG4gICAgICAgICAgb2Zmc2V0UGFyZW50ICYmXHJcbiAgICAgICAgICAob2Zmc2V0UGFyZW50ID09PSBkb2MuYm9keSB8fCBvZmZzZXRQYXJlbnQgPT09IGRvYy5kb2N1bWVudEVsZW1lbnQpICYmXHJcbiAgICAgICAgICBTbGltSlEuY3NzKG9mZnNldFBhcmVudCwgJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBvZmZzZXRQYXJlbnQgJiZcclxuICAgICAgICAgIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJlxyXG4gICAgICAgICAgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBwYXJlbnRPZmZzZXQgPSBTbGltSlEob2Zmc2V0UGFyZW50KS5vZmZzZXQoKVxyXG4gICAgICAgICAgcGFyZW50T2Zmc2V0LnRvcCArPSBTbGltSlEuY3NzKG9mZnNldFBhcmVudCwgJ2JvcmRlclRvcFdpZHRoJywgdHJ1ZSlcclxuICAgICAgICAgIHBhcmVudE9mZnNldC5sZWZ0ICs9IFNsaW1KUS5jc3Mob2Zmc2V0UGFyZW50LCAnYm9yZGVyTGVmdFdpZHRoJywgdHJ1ZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdG9wOlxyXG4gICAgICAgICAgb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBTbGltSlEuY3NzKGVsZW0sICdtYXJnaW5Ub3AnLCB0cnVlKSxcclxuICAgICAgICBsZWZ0OlxyXG4gICAgICAgICAgb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIFNsaW1KUS5jc3MoZWxlbSwgJ21hcmdpbkxlZnQnLCB0cnVlKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnRcclxuXHJcbiAgICAgICAgd2hpbGUgKFxyXG4gICAgICAgICAgb2Zmc2V0UGFyZW50ICYmXHJcbiAgICAgICAgICBTbGltSlEuY3NzKG9mZnNldFBhcmVudCwgJ3Bvc2l0aW9uJykgPT09ICdzdGF0aWMnXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIFNsaW1KUS5lYWNoKHsgc2Nyb2xsTGVmdDogJ3BhZ2VYT2Zmc2V0Jywgc2Nyb2xsVG9wOiAncGFnZVlPZmZzZXQnIH0sIGZ1bmN0aW9uKFxyXG4gICAgbWV0aG9kLFxyXG4gICAgcHJvcFxyXG4gICkge1xyXG4gICAgdmFyIHRvcCA9IHByb3AgPT09ICdwYWdlWU9mZnNldCdcclxuXHJcbiAgICBTbGltSlEuZm5bbWV0aG9kXSA9IGZ1bmN0aW9uKHZhbCkge1xyXG4gICAgICByZXR1cm4gYWNjZXNzKFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgZnVuY3Rpb24oZWxlbSwgbWV0aG9kLCB2YWwpIHtcclxuICAgICAgICAgIHZhciB3aW5cclxuICAgICAgICAgIGlmIChpc1dpbmRvdyhlbGVtKSkge1xyXG4gICAgICAgICAgICB3aW4gPSBlbGVtXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGVsZW0ubm9kZVR5cGUgPT09IDkpIHtcclxuICAgICAgICAgICAgd2luID0gZWxlbS5kZWZhdWx0Vmlld1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gd2luID8gd2luW3Byb3BdIDogZWxlbVttZXRob2RdXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHdpbikge1xyXG4gICAgICAgICAgICB3aW4uc2Nyb2xsVG8oXHJcbiAgICAgICAgICAgICAgIXRvcCA/IHZhbCA6IHdpbi5wYWdlWE9mZnNldCxcclxuICAgICAgICAgICAgICB0b3AgPyB2YWwgOiB3aW4ucGFnZVlPZmZzZXRcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZWxlbVttZXRob2RdID0gdmFsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgdmFsLFxyXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGhcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIFNsaW1KUS5lYWNoKFsndG9wJywgJ2xlZnQnXSwgZnVuY3Rpb24oaSwgcHJvcCkge1xyXG4gICAgU2xpbUpRLmNzc0hvb2tzW3Byb3BdID0gYWRkR2V0SG9va0lmKHN1cHBvcnQucGl4ZWxQb3NpdGlvbiwgZnVuY3Rpb24oXHJcbiAgICAgIGVsZW0sXHJcbiAgICAgIGNvbXB1dGVkXHJcbiAgICApIHtcclxuICAgICAgaWYgKGNvbXB1dGVkKSB7XHJcbiAgICAgICAgY29tcHV0ZWQgPSBjdXJDU1MoZWxlbSwgcHJvcClcclxuICAgICAgICByZXR1cm4gcm51bW5vbnB4LnRlc3QoY29tcHV0ZWQpXHJcbiAgICAgICAgICA/IFNsaW1KUShlbGVtKS5wb3NpdGlvbigpW3Byb3BdICsgJ3B4J1xyXG4gICAgICAgICAgOiBjb21wdXRlZFxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH0pXHJcblxyXG4gIFNsaW1KUS5lYWNoKHsgSGVpZ2h0OiAnaGVpZ2h0JywgV2lkdGg6ICd3aWR0aCcgfSwgZnVuY3Rpb24obmFtZSwgdHlwZSkge1xyXG4gICAgU2xpbUpRLmVhY2goXHJcbiAgICAgIHsgcGFkZGluZzogJ2lubmVyJyArIG5hbWUsIGNvbnRlbnQ6IHR5cGUsICcnOiAnb3V0ZXInICsgbmFtZSB9LFxyXG4gICAgICBmdW5jdGlvbihkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lKSB7XHJcbiAgICAgICAgU2xpbUpRLmZuW2Z1bmNOYW1lXSA9IGZ1bmN0aW9uKG1hcmdpbiwgdmFsdWUpIHtcclxuICAgICAgICAgIHZhciBjaGFpbmFibGUgPVxyXG4gICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoICYmIChkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gJ2Jvb2xlYW4nKVxyXG5cclxuICAgICAgICAgIHZhciBleHRyYSA9XHJcbiAgICAgICAgICAgIGRlZmF1bHRFeHRyYSB8fFxyXG4gICAgICAgICAgICAobWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gJ21hcmdpbicgOiAnYm9yZGVyJylcclxuXHJcbiAgICAgICAgICByZXR1cm4gYWNjZXNzKFxyXG4gICAgICAgICAgICB0aGlzLFxyXG4gICAgICAgICAgICBmdW5jdGlvbihlbGVtLCB0eXBlLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgIHZhciBkb2NcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGlzV2luZG93KGVsZW0pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY05hbWUuaW5kZXhPZignb3V0ZXInKSA9PT0gMFxyXG4gICAgICAgICAgICAgICAgICA/IGVsZW1bJ2lubmVyJyArIG5hbWVdXHJcbiAgICAgICAgICAgICAgICAgIDogZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbJ2NsaWVudCcgKyBuYW1lXVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKGVsZW0ubm9kZVR5cGUgPT09IDkpIHtcclxuICAgICAgICAgICAgICAgIGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoXHJcbiAgICAgICAgICAgICAgICAgIGVsZW0uYm9keVsnc2Nyb2xsJyArIG5hbWVdLFxyXG4gICAgICAgICAgICAgICAgICBkb2NbJ3Njcm9sbCcgKyBuYW1lXSxcclxuICAgICAgICAgICAgICAgICAgZWxlbS5ib2R5WydvZmZzZXQnICsgbmFtZV0sXHJcbiAgICAgICAgICAgICAgICAgIGRvY1snb2Zmc2V0JyArIG5hbWVdLFxyXG4gICAgICAgICAgICAgICAgICBkb2NbJ2NsaWVudCcgKyBuYW1lXVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgID8gU2xpbUpRLmNzcyhlbGVtLCB0eXBlLCBleHRyYSlcclxuICAgICAgICAgICAgICAgIDogU2xpbUpRLnN0eWxlKGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdHlwZSxcclxuICAgICAgICAgICAgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICBjaGFpbmFibGVcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIClcclxuICB9KVxyXG5cclxuICBTbGltSlEuZWFjaChcclxuICAgIChcclxuICAgICAgJ2JsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrICcgK1xyXG4gICAgICAnbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgJyArXHJcbiAgICAgICdjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51J1xyXG4gICAgKS5zcGxpdCgnICcpLFxyXG4gICAgZnVuY3Rpb24oaSwgbmFtZSkge1xyXG4gICAgICBTbGltSlEuZm5bbmFtZV0gPSBmdW5jdGlvbihkYXRhLCBmbikge1xyXG4gICAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgPyB0aGlzLm9uKG5hbWUsIG51bGwsIGRhdGEsIGZuKVxyXG4gICAgICAgICAgOiB0aGlzLnRyaWdnZXIobmFtZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIClcclxuXHJcbiAgU2xpbUpRLmZuLmV4dGVuZCh7XHJcbiAgICBob3ZlcjogZnVuY3Rpb24oZm5PdmVyLCBmbk91dCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tb3VzZWVudGVyKGZuT3ZlcikubW91c2VsZWF2ZShmbk91dCB8fCBmbk92ZXIpXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgU2xpbUpRLmZuLmV4dGVuZCh7XHJcbiAgICBiaW5kOiBmdW5jdGlvbih0eXBlcywgZGF0YSwgZm4pIHtcclxuICAgICAgcmV0dXJuIHRoaXMub24odHlwZXMsIG51bGwsIGRhdGEsIGZuKVxyXG4gICAgfSxcclxuICAgIHVuYmluZDogZnVuY3Rpb24odHlwZXMsIGZuKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm9mZih0eXBlcywgbnVsbCwgZm4pXHJcbiAgICB9LFxyXG5cclxuICAgIGRlbGVnYXRlOiBmdW5jdGlvbihzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm9uKHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4pXHJcbiAgICB9LFxyXG4gICAgdW5kZWxlZ2F0ZTogZnVuY3Rpb24oc2VsZWN0b3IsIHR5cGVzLCBmbikge1xyXG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMVxyXG4gICAgICAgID8gdGhpcy5vZmYoc2VsZWN0b3IsICcqKicpXHJcbiAgICAgICAgOiB0aGlzLm9mZih0eXBlcywgc2VsZWN0b3IgfHwgJyoqJywgZm4pXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgU2xpbUpRLnByb3h5ID0gZnVuY3Rpb24oZm4sIGNvbnRleHQpIHtcclxuICAgIHZhciB0bXAsIGFyZ3MsIHByb3h5XHJcblxyXG4gICAgaWYgKHR5cGVvZiBjb250ZXh0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0bXAgPSBmbltjb250ZXh0XVxyXG4gICAgICBjb250ZXh0ID0gZm5cclxuICAgICAgZm4gPSB0bXBcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzRnVuY3Rpb24oZm4pKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgIH1cclxuXHJcbiAgICBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpXHJcbiAgICBwcm94eSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpKVxyXG4gICAgfVxyXG5cclxuICAgIHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBTbGltSlEuZ3VpZCsrXHJcblxyXG4gICAgcmV0dXJuIHByb3h5XHJcbiAgfVxyXG5cclxuICBTbGltSlEuaG9sZFJlYWR5ID0gZnVuY3Rpb24oaG9sZCkge1xyXG4gICAgaWYgKGhvbGQpIHtcclxuICAgICAgU2xpbUpRLnJlYWR5V2FpdCsrXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBTbGltSlEucmVhZHkodHJ1ZSlcclxuICAgIH1cclxuICB9XHJcbiAgU2xpbUpRLmlzQXJyYXkgPSBBcnJheS5pc0FycmF5XHJcbiAgU2xpbUpRLnBhcnNlSlNPTiA9IEpTT04ucGFyc2VcclxuICBTbGltSlEubm9kZU5hbWUgPSBub2RlTmFtZVxyXG4gIFNsaW1KUS5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvblxyXG4gIFNsaW1KUS5pc1dpbmRvdyA9IGlzV2luZG93XHJcbiAgU2xpbUpRLmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZVxyXG4gIFNsaW1KUS50eXBlID0gdG9UeXBlXHJcblxyXG4gIFNsaW1KUS5ub3cgPSBEYXRlLm5vd1xyXG5cclxuICBTbGltSlEuaXNOdW1lcmljID0gZnVuY3Rpb24ob2JqKSB7XHJcbiAgICB2YXIgdHlwZSA9IFNsaW1KUS50eXBlKG9iailcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh0eXBlID09PSAnbnVtYmVyJyB8fCB0eXBlID09PSAnc3RyaW5nJykgJiYgIWlzTmFOKG9iaiAtIHBhcnNlRmxvYXQob2JqKSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIHJldHVybiBTbGltSlFcclxufVxyXG5cclxuLy8gU2xpbUpRLmZuLmJ1dHRvbiA9IGZ1bmN0aW9uKGUpIHtcclxuLy8gICBpZiAodHlwZW9mIGUgPT09ICdzdHJpbmcnKSB7XHJcbi8vICAgICBpZiAoZSA9PT0gJ2Rpc2FibGUnKSB7XHJcbi8vICAgICAgIFNsaW1KUSh0aGlzKS5hZGRDbGFzcygnZGlzYWJsZWQnKVxyXG4vLyAgICAgICBTbGltSlEodGhpcylcclxuLy8gICAgICAgICAuZmluZCgnaW5wdXQnKVxyXG4vLyAgICAgICAgIC5hdHRyKCdkaXNhYmxlZCcsIHRydWUpXHJcbi8vICAgICB9IGVsc2Uge1xyXG4vLyAgICAgICBpZiAoZSA9PT0gJ2VuYWJsZScpIHtcclxuLy8gICAgICAgICBTbGltSlEodGhpcykucmVtb3ZlQ2xhc3MoJ2Rpc2FibGVkJylcclxuLy8gICAgICAgICBTbGltSlEodGhpcylcclxuLy8gICAgICAgICAgIC5maW5kKCdpbnB1dCcpXHJcbi8vICAgICAgICAgICAuYXR0cignZGlzYWJsZWQnLCBmYWxzZSlcclxuLy8gICAgICAgfSBlbHNlIHtcclxuLy8gICAgICAgICBpZiAoZSA9PT0gJ2lzRGlzYWJsZWQnKSB7XHJcbi8vICAgICAgICAgICByZXR1cm4gU2xpbUpRKHRoaXMpLmhhc0NsYXNzKCdkaXNhYmxlZCcpXHJcbi8vICAgICAgICAgfSBlbHNlIHtcclxuLy8gICAgICAgICAgIGlmIChlID09PSAnaXNTZWxlY3RlZCcpIHtcclxuLy8gICAgICAgICAgICAgcmV0dXJuIFNsaW1KUSh0aGlzKS5oYXNDbGFzcygnc2VsZWN0ZWQnKVxyXG4vLyAgICAgICAgICAgfSBlbHNlIHtcclxuLy8gICAgICAgICAgICAgaWYgKGUgPT09ICd1bnNlbGVjdCcpIHtcclxuLy8gICAgICAgICAgICAgICBTbGltSlEodGhpcykucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJylcclxuLy8gICAgICAgICAgICAgfSBlbHNlIHtcclxuLy8gICAgICAgICAgICAgICBpZiAoZSA9PT0gJ3NlbGVjdCcpIHtcclxuLy8gICAgICAgICAgICAgICAgIFNsaW1KUSh0aGlzKS5hZGRDbGFzcygnc2VsZWN0ZWQnKVxyXG4vLyAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbi8vICAgICAgICAgICAgICAgICBpZiAoZSA9PT0gJ3NldFRleHQnKSB7XHJcbi8vICAgICAgICAgICAgICAgICAgIFNsaW1KUSh0aGlzKVxyXG4vLyAgICAgICAgICAgICAgICAgICAgIC5jaGlsZHJlbignLnRleHRfY29udGVudCcpXHJcbi8vICAgICAgICAgICAgICAgICAgICAgLmh0bWwoYXJndW1lbnRzWzFdKVxyXG4vLyAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuLy8gICAgICAgICAgICAgICAgICAgaWYgKGUgPT09ICdzZXRDb2xvcicpIHtcclxuLy8gICAgICAgICAgICAgICAgICAgICBTbGltSlEodGhpcylcclxuLy8gICAgICAgICAgICAgICAgICAgICAgIC5jaGlsZHJlbignLmJ0bl9jb2xvcicpXHJcbi8vICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ3JnYignICsgYXJndW1lbnRzWzFdICsgJyknKVxyXG4vLyAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4vLyAgICAgICAgICAgICAgICAgICAgIGlmIChlID09PSAnZ2V0Q29sb3InKSB7XHJcbi8vICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IFNsaW1KUSh0aGlzKVxyXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAuY2hpbGRyZW4oJy5idG5fY29sb3InKVxyXG4vLyAgICAgICAgICAgICAgICAgICAgICAgICAuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJylcclxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xccy9nLCAnJylcclxuLy8gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkLnN1YnN0cmluZyg0LCBkLmxlbmd0aCAtIDEpXHJcbi8vICAgICAgICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgICB9XHJcbi8vICAgICAgICAgfVxyXG4vLyAgICAgICB9XHJcbi8vICAgICB9XHJcbi8vICAgICByZXR1cm4gU2xpbUpRKHRoaXMpXHJcbi8vICAgfVxyXG4vLyAgIHZhciBmID0gU2xpbUpRKHRoaXMpXHJcbi8vICAgZi51bmJpbmQoJ2NsaWNrJylcclxuLy8gICBmLnVuYmluZCgnbW91c2Vkb3duJylcclxuLy8gICBpZiAoZS5vbkNsaWNrKSB7XHJcbi8vICAgICBmLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XHJcbi8vICAgICAgIGlmIChmLmJ1dHRvbignaXNEaXNhYmxlZCcpKSB7XHJcbi8vICAgICAgICAgcmV0dXJuXHJcbi8vICAgICAgIH1cclxuLy8gICAgICAgZS5vbkNsaWNrKClcclxuLy8gICAgIH0pXHJcbi8vICAgfVxyXG4vLyAgIGlmIChlLm9uTW91c2Vkb3duKSB7XHJcbi8vICAgICBmLmJpbmQoJ21vdXNlZG93bicsIGZ1bmN0aW9uKGcpIHtcclxuLy8gICAgICAgaWYgKGYuYnV0dG9uKCdpc0Rpc2FibGVkJykpIHtcclxuLy8gICAgICAgICByZXR1cm5cclxuLy8gICAgICAgfVxyXG4vLyAgICAgICBlLm9uTW91c2Vkb3duKClcclxuLy8gICAgICAgZy5zdG9wUHJvcGFnYXRpb24oKVxyXG4vLyAgICAgfSlcclxuLy8gICB9XHJcbi8vIH1cclxuXHJcbi8vIHZhciBiID0gbnVsbFxyXG5cclxuLy8gU2xpbUpRLmZuLmRyb3Bkb3duID0gZnVuY3Rpb24oZSkge1xyXG4vLyAgIHZhciBpID0gU2xpbUpRKHRoaXMpXHJcbi8vICAgaWYgKHR5cGVvZiBlID09PSAnc3RyaW5nJykge1xyXG4vLyAgICAgaWYgKGUgPT09ICdjbG9zZScpIHtcclxuLy8gICAgICAgaS5oaWRlKClcclxuLy8gICAgICAgYi50YXJnZXQucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJylcclxuLy8gICAgICAgU2xpbUpRKGRvY3VtZW50KS51bmJpbmQoJ21vdXNlZG93bi51aV9kcm9wZG93bicpXHJcbi8vICAgICAgIGIgPSBudWxsXHJcbi8vICAgICB9IGVsc2Uge1xyXG4vLyAgICAgICBpZiAoZSA9PT0gJ3NlbGVjdCcpIHtcclxuLy8gICAgICAgICBhcmd1bWVudHNbMV0ucHJlcGVuZChcIjxkaXYgY2xhc3M9J2ljbyBpY29fc2VsZWN0ZWQnPjwvZGl2PlwiKVxyXG4vLyAgICAgICB9XHJcbi8vICAgICB9XHJcbi8vICAgICByZXR1cm5cclxuLy8gICB9XHJcbi8vICAgaS5maW5kKCcuaWNvX3NlbGVjdGVkJykucmVtb3ZlKClcclxuLy8gICBpZiAoYiAhPSBudWxsKSB7XHJcbi8vICAgICBiLm1lbnUuZHJvcGRvd24oJ2Nsb3NlJylcclxuLy8gICB9XHJcbi8vICAgdmFyIGkgPSBTbGltSlEodGhpcylcclxuLy8gICB2YXIgZCA9IGUudGFyZ2V0XHJcbi8vICAgYiA9IHsgdGFyZ2V0OiBkLCBtZW51OiBpIH1cclxuLy8gICB2YXIgaCA9IGQub2Zmc2V0KClcclxuLy8gICBkLmFkZENsYXNzKCdzZWxlY3RlZCcpXHJcbi8vICAgaS5zaG93KClcclxuLy8gICB2YXIgZ1xyXG4vLyAgIGlmIChlLnBvc2l0aW9uID09PSAnY2VudGVyJykge1xyXG4vLyAgICAgZyA9IGgubGVmdCArIGQub3V0ZXJXaWR0aCgpIC8gMiAtIGkub3V0ZXJXaWR0aCgpIC8gMlxyXG4vLyAgIH0gZWxzZSB7XHJcbi8vICAgICBpZiAoZS5wb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xyXG4vLyAgICAgICBnID0gaC5sZWZ0ICsgZC5vdXRlcldpZHRoKCkgLSBpLm91dGVyV2lkdGgoKVxyXG4vLyAgICAgfSBlbHNlIHtcclxuLy8gICAgICAgZyA9IGgubGVmdFxyXG4vLyAgICAgfVxyXG4vLyAgIH1cclxuLy8gICB2YXIgZiA9IGgudG9wICsgZC5vdXRlckhlaWdodCgpXHJcbi8vICAgaWYgKGYgKyBpLm91dGVySGVpZ2h0KCkgPiBTbGltSlEod2luZG93KS5oZWlnaHQoKSkge1xyXG4vLyAgICAgZiA9IFNsaW1KUSh3aW5kb3cpLmhlaWdodCgpIC0gaS5vdXRlckhlaWdodCgpXHJcbi8vICAgfVxyXG4vLyAgIGkuY3NzKHsgdG9wOiBmLCBsZWZ0OiBnIH0pXHJcbi8vICAgaWYgKHR5cGVvZiBlLnppbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuLy8gICAgIGkuY3NzKCd6LWluZGV4JywgZS56aW5kZXgpXHJcbi8vICAgfVxyXG4vLyAgIGkudW5iaW5kKCdtb3VzZWRvd24nKS5iaW5kKCdtb3VzZWRvd24nLCBmdW5jdGlvbihqKSB7XHJcbi8vICAgICBqLnN0b3BQcm9wYWdhdGlvbigpXHJcbi8vICAgfSlcclxuLy8gICBpZiAodHlwZW9mIGUuYmluZCA9PT0gJ3VuZGVmaW5lZCcgfHwgZS5iaW5kID09PSB0cnVlKSB7XHJcbi8vICAgICBpLmZpbmQoJ2xpOm5vdCguZGV2aWRlciwubWVudV90ZXh0KScpXHJcbi8vICAgICAgIC51bmJpbmQoKVxyXG4vLyAgICAgICAuYmluZCgnY2xpY2snLCBmdW5jdGlvbigpIHtcclxuLy8gICAgICAgICB2YXIgaiA9IFNsaW1KUSh0aGlzKVxyXG4vLyAgICAgICAgIGlmIChcclxuLy8gICAgICAgICAgICFqLm1lbnVpdGVtKCdpc0Rpc2FibGVkJykgJiZcclxuLy8gICAgICAgICAgIGouY2hpbGRyZW4oJy5leHRlbmRfbWVudScpLmxlbmd0aCA9PT0gMFxyXG4vLyAgICAgICAgICkge1xyXG4vLyAgICAgICAgICAgaWYgKGUub25TZWxlY3QpIHtcclxuLy8gICAgICAgICAgICAgZS5vblNlbGVjdChqKVxyXG4vLyAgICAgICAgICAgfVxyXG4vLyAgICAgICAgICAgaS5kcm9wZG93bignY2xvc2UnKVxyXG4vLyAgICAgICAgIH1cclxuLy8gICAgICAgfSlcclxuLy8gICB9XHJcbi8vICAgU2xpbUpRKGRvY3VtZW50KS5iaW5kKCdtb3VzZWRvd24udWlfZHJvcGRvd24nLCBmdW5jdGlvbigpIHtcclxuLy8gICAgIGkuZHJvcGRvd24oJ2Nsb3NlJylcclxuLy8gICB9KVxyXG4vLyB9XHJcbi8vIFNsaW1KUS5jb2xvcnBpY2tlciA9IGZ1bmN0aW9uKGUpIHtcclxuLy8gICB2YXIgZCA9IFNsaW1KUSgnI2NvbG9yX3BpY2tlcicpXHJcbi8vICAgZC5maW5kKCcuc2VsZWN0ZWQnKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKVxyXG4vLyAgIGlmICghZC5hdHRyKCdpbml0JykpIHtcclxuLy8gICAgIGQuZmluZCgnZGl2JykuZWFjaChmdW5jdGlvbigpIHtcclxuLy8gICAgICAgdmFyIGcgPSBTbGltSlEodGhpcykuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJylcclxuLy8gICAgICAgZyA9IGcucmVwbGFjZSgvXFxzL2csICcnKVxyXG4vLyAgICAgICBnID0gZy5zdWJzdHJpbmcoNCwgZy5sZW5ndGggLSAxKVxyXG4vLyAgICAgICBTbGltSlEodGhpcykuYXR0cignY29sJywgZylcclxuLy8gICAgIH0pXHJcbi8vICAgICBkLmF0dHIoJ2luaXQnLCB0cnVlKVxyXG4vLyAgIH1cclxuLy8gICB2YXIgZiA9IFNsaW1KUS5leHRlbmQoe30sIGUsIHsgYmluZDogZmFsc2UgfSlcclxuLy8gICBkLmRyb3Bkb3duKGYpXHJcbi8vICAgZC5jaGlsZHJlbignLmNvbG9yX2l0ZW1zJylcclxuLy8gICAgIC5jaGlsZHJlbignZGl2JylcclxuLy8gICAgIC51bmJpbmQoKVxyXG4vLyAgICAgLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XHJcbi8vICAgICAgIGlmIChlLm9uU2VsZWN0KSB7XHJcbi8vICAgICAgICAgdmFyIGcgPSBTbGltSlEodGhpcykuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJylcclxuLy8gICAgICAgICBnID0gZy5yZXBsYWNlKC9cXHMvZywgJycpXHJcbi8vICAgICAgICAgZyA9IGcuc3Vic3RyaW5nKDQsIGcubGVuZ3RoIC0gMSlcclxuLy8gICAgICAgICBlLm9uU2VsZWN0KGcpXHJcbi8vICAgICAgIH1cclxuLy8gICAgICAgU2xpbUpRKCcjY29sb3JfcGlja2VyJykuZHJvcGRvd24oJ2Nsb3NlJylcclxuLy8gICAgIH0pXHJcbi8vICAgaWYgKGUuY29sb3IpIHtcclxuLy8gICAgIGQuZmluZChcImRpdltjb2w9J1wiICsgZS5jb2xvciArIFwiJ11cIikuYWRkQ2xhc3MoJ3NlbGVjdGVkJylcclxuLy8gICB9XHJcbi8vICAgU2xpbUpRKCcjY29sb3JfcGlja2VyJylcclxuLy8gICAgIC5jaGlsZHJlbignLmNvbG9yX2V4dGVuZCcpXHJcbi8vICAgICAucmVtb3ZlKClcclxuLy8gICBpZiAoZS5leHRlbmQpIHtcclxuLy8gICAgIFNsaW1KUSgnI2NvbG9yX3BpY2tlcicpLmFwcGVuZChcclxuLy8gICAgICAgXCI8ZGl2IGNsYXNzPSdjb2xvcl9leHRlbmQnPlwiICsgZS5leHRlbmQgKyAnPC9kaXY+J1xyXG4vLyAgICAgKVxyXG4vLyAgIH1cclxuLy8gfVxyXG4vLyBTbGltSlEuZm4uY29sb3JCdXR0b24gPSBmdW5jdGlvbihlKSB7XHJcbi8vICAgdmFyIGQgPSBTbGltSlEodGhpcylcclxuLy8gICBpZiAodHlwZW9mIGUgPT09ICdzdHJpbmcnKSB7XHJcbi8vICAgICBpZiAoZSA9PT0gJ3NldENvbG9yJykge1xyXG4vLyAgICAgICBkLmNoaWxkcmVuKCcucGlja2VyX2J0bl9ob2xkZXInKS5jc3MoXHJcbi8vICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InLFxyXG4vLyAgICAgICAgICdyZ2IoJyArIGFyZ3VtZW50c1sxXSArICcpJ1xyXG4vLyAgICAgICApXHJcbi8vICAgICB9XHJcbi8vICAgICByZXR1cm5cclxuLy8gICB9XHJcbi8vICAgZC5odG1sKFxyXG4vLyAgICAgXCI8ZGl2IGNsYXNzPSdwaWNrZXJfYnRuX2hvbGRlcic+PC9kaXY+PGRpdiBjbGFzcz0naWNvIGljb19jb2xvcmRyb3AnPjwvZGl2PlwiXHJcbi8vICAgKVxyXG4vLyAgIGQuYmluZCgnbW91c2Vkb3duJywgZnVuY3Rpb24oaCkge1xyXG4vLyAgICAgaWYgKGQuYnV0dG9uKCdpc0Rpc2FibGVkJykpIHtcclxuLy8gICAgICAgcmV0dXJuXHJcbi8vICAgICB9XHJcbi8vICAgICBoLnN0b3BQcm9wYWdhdGlvbigpXHJcbi8vICAgICB2YXIgZyA9IFNsaW1KUS5leHRlbmQoe30sIGUpXHJcbi8vICAgICBnLnRhcmdldCA9IGRcclxuLy8gICAgIGcub25TZWxlY3QgPSBmdW5jdGlvbihpKSB7XHJcbi8vICAgICAgIGQuY29sb3JCdXR0b24oJ3NldENvbG9yJywgaSlcclxuLy8gICAgICAgaWYgKGUub25TZWxlY3QpIHtcclxuLy8gICAgICAgICBlLm9uU2VsZWN0KGkpXHJcbi8vICAgICAgIH1cclxuLy8gICAgIH1cclxuLy8gICAgIHZhciBmID0gU2xpbUpRKHRoaXMpXHJcbi8vICAgICAgIC5jaGlsZHJlbignLnBpY2tlcl9idG5faG9sZGVyJylcclxuLy8gICAgICAgLmNzcygnYmFja2dyb3VuZC1jb2xvcicpXHJcbi8vICAgICBmID0gZi5yZXBsYWNlKC9cXHMvZywgJycpXHJcbi8vICAgICBmID0gZi5zdWJzdHJpbmcoNCwgZi5sZW5ndGggLSAxKVxyXG4vLyAgICAgZy5jb2xvciA9IGZcclxuLy8gICAgIFNsaW1KUS5jb2xvcnBpY2tlcihnKVxyXG4vLyAgIH0pXHJcbi8vIH1cclxuLy8gU2xpbUpRLmZuLnNwaW5uZXIgPSBmdW5jdGlvbihnKSB7XHJcbi8vICAgdmFyIGkgPSBTbGltSlEodGhpcylcclxuLy8gICBpZiAodHlwZW9mIGcgPT09ICdzdHJpbmcnKSB7XHJcbi8vICAgICBpZiAoZyA9PT0gJ2dldFZhbHVlJykge1xyXG4vLyAgICAgICB2YXIgZCA9IGkuZmluZCgnaW5wdXQnKS52YWwoKVxyXG4vLyAgICAgICBkID0gcGFyc2VGbG9hdChkKVxyXG4vLyAgICAgICByZXR1cm4gZFxyXG4vLyAgICAgfSBlbHNlIHtcclxuLy8gICAgICAgaWYgKGcgPT09ICdzZXRWYWx1ZScpIHtcclxuLy8gICAgICAgICBpLmZpbmQoJ2lucHV0JykudmFsKGFyZ3VtZW50c1sxXSlcclxuLy8gICAgICAgICBpLmF0dHIoJ29sZCcsIGFyZ3VtZW50c1sxXSlcclxuLy8gICAgICAgfVxyXG4vLyAgICAgfVxyXG4vLyAgICAgcmV0dXJuXHJcbi8vICAgfVxyXG4vLyAgIGkuaHRtbChcclxuLy8gICAgIFwiPGRpdiBjbGFzcz0nc3Bpbm5lcl9pbnB1dCc+PGlucHV0IHJlYWRvbmx5Lz48L2Rpdj48ZGl2IGNsYXNzPSdidXR0b25zJz48ZGl2IGNsYXNzPSdzcGlubmVyX3VwJz48L2Rpdj48ZGl2IGNsYXNzPSdzcGlubmVyX2Rvd24nPjwvZGl2PjwvZGl2PlwiXHJcbi8vICAgKVxyXG4vLyAgIHZhciBoID0geyBtaW46IDAsIG1heDogTnVtYmVyLk1BWF9WQUxVRSwgc3RlcDogMSwgdW5pdDogJycgfVxyXG4vLyAgIGcgPSBTbGltSlEuZXh0ZW5kKGgsIGcpXHJcbi8vICAgdmFyIGUgPSBpLmNoaWxkcmVuKCcuc3Bpbm5lcl9pbnB1dCcpXHJcbi8vICAgdmFyIGYgPSBlLmZpbmQoJ2lucHV0JylcclxuLy8gICBpLnNwaW5uZXIoJ3NldFZhbHVlJywgZy5taW4gKyBnLnVuaXQpXHJcbi8vICAgaS5maW5kKCcuc3Bpbm5lcl91cCcpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XHJcbi8vICAgICBpZiAoaS5idXR0b24oJ2lzRGlzYWJsZWQnKSkge1xyXG4vLyAgICAgICByZXR1cm5cclxuLy8gICAgIH1cclxuLy8gICAgIHZhciBrID0gaS5zcGlubmVyKCdnZXRWYWx1ZScpXHJcbi8vICAgICB2YXIgaiA9IGsgKyBnLnN0ZXBcclxuLy8gICAgIGEoaSwgaiwgZylcclxuLy8gICB9KVxyXG4vLyAgIGkuZmluZCgnLnNwaW5uZXJfZG93bicpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XHJcbi8vICAgICBpZiAoaS5idXR0b24oJ2lzRGlzYWJsZWQnKSkge1xyXG4vLyAgICAgICByZXR1cm5cclxuLy8gICAgIH1cclxuLy8gICAgIHZhciBrID0gaS5zcGlubmVyKCdnZXRWYWx1ZScpXHJcbi8vICAgICB2YXIgaiA9IGsgLSBnLnN0ZXBcclxuLy8gICAgIGEoaSwgaiwgZylcclxuLy8gICB9KVxyXG4vLyAgIGYuYmluZCgna2V5ZG93bicsIGZ1bmN0aW9uKGspIHtcclxuLy8gICAgIGlmIChrLmtleUNvZGUgPT09IDEzKSB7XHJcbi8vICAgICAgIHZhciBqID0gcGFyc2VJbnQoU2xpbUpRKHRoaXMpLnZhbCgpKVxyXG4vLyAgICAgICBpZiAoaXNOYU4oaikpIHtcclxuLy8gICAgICAgICBqID0gZy5taW5cclxuLy8gICAgICAgfVxyXG4vLyAgICAgICBhKGksIGosIGcpXHJcbi8vICAgICB9XHJcbi8vICAgfSlcclxuLy8gICAgIC5iaW5kKCdmb2N1cycsIGZ1bmN0aW9uKGspIHtcclxuLy8gICAgICAgU2xpbUpRKHRoaXMpLnNlbGVjdCgpXHJcbi8vICAgICAgIFNsaW1KUSh0aGlzKS5iaW5kKCdtb3VzZXVwJywgZnVuY3Rpb24obCkge1xyXG4vLyAgICAgICAgIGwucHJldmVudERlZmF1bHQoKVxyXG4vLyAgICAgICAgIFNsaW1KUSh0aGlzKS51bmJpbmQoJ21vdXNldXAnKVxyXG4vLyAgICAgICB9KVxyXG4vLyAgICAgICB2YXIgaiA9IFNsaW1KUSh0aGlzKVxyXG4vLyAgICAgICAgIC5wYXJlbnQoKVxyXG4vLyAgICAgICAgIC5wYXJlbnQoKVxyXG4vLyAgICAgICBpZiAoIWouaGFzQ2xhc3MoJ2FjdGl2ZScpKSB7XHJcbi8vICAgICAgICAgai5hZGRDbGFzcygnYWN0aXZlIGluc2V0JylcclxuLy8gICAgICAgfVxyXG4vLyAgICAgfSlcclxuLy8gICAgIC5iaW5kKCdibHVyJywgZnVuY3Rpb24oaykge1xyXG4vLyAgICAgICB2YXIgaiA9IFNsaW1KUSh0aGlzKVxyXG4vLyAgICAgICAgIC5wYXJlbnQoKVxyXG4vLyAgICAgICAgIC5wYXJlbnQoKVxyXG4vLyAgICAgICBpZiAoai5oYXNDbGFzcygnaW5zZXQnKSkge1xyXG4vLyAgICAgICAgIGoucmVtb3ZlQ2xhc3MoJ2FjdGl2ZSBpbnNldCcpXHJcbi8vICAgICAgIH1cclxuLy8gICAgIH0pXHJcbi8vIH1cclxuXHJcbi8vIGZ1bmN0aW9uIGEoaCwgZiwgZSkge1xyXG4vLyAgIGlmIChmID4gZS5tYXgpIHtcclxuLy8gICAgIGYgPSBlLm1heFxyXG4vLyAgIH1cclxuLy8gICBpZiAoZiA8IGUubWluKSB7XHJcbi8vICAgICBmID0gZS5taW5cclxuLy8gICB9XHJcbi8vICAgdmFyIGQgPSBoLmF0dHIoJ29sZCcpXHJcbi8vICAgdmFyIGcgPSBmICsgZS51bml0XHJcbi8vICAgaWYgKGQgIT09IGcpIHtcclxuLy8gICAgIGlmIChlLm9uQ2hhbmdlKSB7XHJcbi8vICAgICAgIGUub25DaGFuZ2UoZilcclxuLy8gICAgIH1cclxuLy8gICB9XHJcbi8vICAgaC5zcGlubmVyKCdzZXRWYWx1ZScsIGYgKyBlLnVuaXQpXHJcbi8vIH1cclxuXHJcbi8vIFNsaW1KUS5mbi5tZW51aXRlbSA9IGZ1bmN0aW9uKGQpIHtcclxuLy8gICB2YXIgZSA9IFNsaW1KUSh0aGlzKVxyXG4vLyAgIGlmICh0eXBlb2YgZCA9PT0gJ3N0cmluZycpIHtcclxuLy8gICAgIGlmIChkID09PSAnZGlzYWJsZScpIHtcclxuLy8gICAgICAgZS5hZGRDbGFzcygnZGlzYWJsZWQnKVxyXG4vLyAgICAgfSBlbHNlIHtcclxuLy8gICAgICAgaWYgKGQgPT09ICdlbmFibGUnKSB7XHJcbi8vICAgICAgICAgZS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKVxyXG4vLyAgICAgICB9IGVsc2Uge1xyXG4vLyAgICAgICAgIGlmIChkID09PSAnaXNEaXNhYmxlZCcpIHtcclxuLy8gICAgICAgICAgIHJldHVybiBlLmhhc0NsYXNzKCdkaXNhYmxlZCcpXHJcbi8vICAgICAgICAgfSBlbHNlIHtcclxuLy8gICAgICAgICAgIGlmIChkID09PSAnaXNTZWxlY3RlZCcpIHtcclxuLy8gICAgICAgICAgICAgcmV0dXJuIGUuY2hpbGRyZW4oJy5pY29fc2VsZWN0ZWQnKS5sZW5ndGggPiAwXHJcbi8vICAgICAgICAgICB9IGVsc2Uge1xyXG4vLyAgICAgICAgICAgICBpZiAoZCA9PT0gJ3Vuc2VsZWN0Jykge1xyXG4vLyAgICAgICAgICAgICAgIHJldHVybiBlLmNoaWxkcmVuKCcuaWNvX3NlbGVjdGVkJykucmVtb3ZlKClcclxuLy8gICAgICAgICAgICAgfSBlbHNlIHtcclxuLy8gICAgICAgICAgICAgICBpZiAoZCA9PT0gJ3NlbGVjdCcpIHtcclxuLy8gICAgICAgICAgICAgICAgIHJldHVybiBlLnByZXBlbmQoXCI8ZGl2IGNsYXNzPSdpY28gaWNvX3NlbGVjdGVkJz48L2Rpdj5cIilcclxuLy8gICAgICAgICAgICAgICB9XHJcbi8vICAgICAgICAgICAgIH1cclxuLy8gICAgICAgICAgIH1cclxuLy8gICAgICAgICB9XHJcbi8vICAgICAgIH1cclxuLy8gICAgIH1cclxuLy8gICB9XHJcbi8vIH1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNsaW1KUSgpXHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvdXRpbHMvc2xpbUpRLmpzIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE3REE7QUFDQTtBQStEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQS9KQTtBQUNBO0FBaUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWNBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFZQTtBQUNBO0FBbkJBO0FBQ0E7QUE4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBV0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBS0E7QUFJQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFEQTtBQUNBO0FBNERBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQU1BO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4T0E7QUFDQTtBQTBPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBeExBO0FBMVRBO0FBQ0E7QUFxZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFJQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQTdDQTtBQUNBO0FBK0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQTdFQTtBQUNBO0FBK0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdDQTtBQWdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0JBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTNGQTtBQUNBO0FBNkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQU9BO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdkpBO0FBQ0E7QUF5SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbFJBO0FBQ0E7QUFvUkE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBakJBO0FBQ0E7QUFtQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXhGQTtBQTBGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuQkE7QUFDQTtBQXFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBM0VBO0FBQ0E7QUE2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUEvREE7QUFDQTtBQWlFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFuRUE7QUFxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkJBO0FBcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBQ0E7QUFVQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQVRBO0FBQ0E7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUF2QkE7QUF5QkE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFTQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZEE7QUFDQTtBQWdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQXZDQTtBQTVYQTtBQUNBO0FBNGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBbkNBO0FBQ0E7QUFxQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTNEQTtBQUNBO0FBK0RBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF0QkE7QUF3QkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBcENBO0FBQ0E7QUFzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQW5GQTtBQUNBO0FBcUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBbEtBO0FBQ0E7QUFvS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwQkE7QUFzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFEQTtBQUNBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWJBO0FBQ0E7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBeklBO0FBQ0E7QUEySUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBNUNBO0FBOENBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFkQTtBQUNBO0FBZ0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFLQTtBQWhDQTtBQUNBO0FBa0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZEE7QUFEQTtBQUNBO0FBa0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaEZBO0FBQ0E7QUFrRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUkE7QUFDQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFDQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoQkE7QUFEQTtBQUNBO0FBb0JBO0FBQ0E7QUFDQTtBQUZBO0FBekRBO0FBQ0E7QUE4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFqQkE7QUFtQkE7QUFDQTtBQUNBO0FBY0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTdLQTtBQUNBO0FBK0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBekVBO0FBQ0E7QUEyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF4RUE7QUFQQTtBQURBO0FBQ0E7QUFvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQXRKQTtBQUNBO0FBd0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVhBO0FBQ0E7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdEJBO0FBd0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBT0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFwQ0E7QUFDQTtBQXNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFwRUE7QUFDQTtBQXNFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF6REE7QUFDQTtBQTJEQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE1RkE7QUFDQTtBQThGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFHQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQWZBO0FBQ0E7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///3\n"); + +/***/ }), +/* 4 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Base__ = __webpack_require__(6);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\nvar Shape = function (_Base) {\n _inherits(Shape, _Base);\n\n function Shape() {\n _classCallCheck(this, Shape);\n\n // TODO: 子元素\n var _this = _possibleConstructorReturn(this, (Shape.__proto__ || Object.getPrototypeOf(Shape)).call(this));\n\n _this.children = [];\n // TODO: 父元素\n _this.parent = '';\n // 缩放点\n _this.resizeDir = ['tl', 'tr', 'br', 'bl'];\n // 属性\n _this.attribute = {\n container: false,\n visible: true,\n rotatable: false,\n linkable: true,\n editable: true,\n markerOffset: 5\n // 描边样式\n };_this.lineStyle = { lineWidth: 2, lineColor: '50,50,50', lineStyle: 'solid'\n // 填充样式\n };_this.fillStyle = { type: 'solid', color: '255,255,255'\n // 高亮样式\n };_this.lightStyle = {};\n // 绘制方式\n _this.actions = null;\n return _this;\n }\n\n return Shape;\n}(__WEBPACK_IMPORTED_MODULE_0__Base__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Shape);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvZHJhdy9zaGFwZS9TaGFwZS5qcz82ZGY4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCYXNlIGZyb20gJy4vQmFzZSdcclxuXHJcbmNsYXNzIFNoYXBlIGV4dGVuZHMgQmFzZSB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICAvLyBUT0RPOiDlrZDlhYPntKBcclxuICAgIHRoaXMuY2hpbGRyZW4gPSBbXVxyXG4gICAgLy8gVE9ETzog54i25YWD57SgXHJcbiAgICB0aGlzLnBhcmVudCA9ICcnXHJcbiAgICAvLyDnvKnmlL7ngrlcclxuICAgIHRoaXMucmVzaXplRGlyID0gWyd0bCcsICd0cicsICdicicsICdibCddXHJcbiAgICAvLyDlsZ7mgKdcclxuICAgIHRoaXMuYXR0cmlidXRlID0ge1xyXG4gICAgICBjb250YWluZXI6IGZhbHNlLFxyXG4gICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICByb3RhdGFibGU6IGZhbHNlLFxyXG4gICAgICBsaW5rYWJsZTogdHJ1ZSxcclxuICAgICAgZWRpdGFibGU6IHRydWUsXHJcbiAgICAgIG1hcmtlck9mZnNldDogNVxyXG4gICAgfVxyXG4gICAgLy8g5o+P6L655qC35byPXHJcbiAgICB0aGlzLmxpbmVTdHlsZSA9IHsgbGluZVdpZHRoOiAyLCBsaW5lQ29sb3I6ICc1MCw1MCw1MCcsIGxpbmVTdHlsZTogJ3NvbGlkJyB9XHJcbiAgICAvLyDloavlhYXmoLflvI9cclxuICAgIHRoaXMuZmlsbFN0eWxlID0geyB0eXBlOiAnc29saWQnLCBjb2xvcjogJzI1NSwyNTUsMjU1JyB9XHJcbiAgICAvLyDpq5jkuq7moLflvI9cclxuICAgIHRoaXMubGlnaHRTdHlsZSA9IHt9XHJcbiAgICAvLyDnu5jliLbmlrnlvI9cclxuICAgIHRoaXMuYWN0aW9ucyA9IG51bGxcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNoYXBlXHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZHJhdy9zaGFwZS9TaGFwZS5qcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTs7O0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQVJBO0FBVUE7QUFEQTtBQUdBO0FBREE7QUFHQTtBQUNBO0FBeEJBO0FBeUJBO0FBQ0E7O0FBM0JBO0FBQ0E7QUE0QkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///4\n"); + +/***/ }), +/* 5 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return DEFAULT_NS_MAP; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return XSI_TYPE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return coerceType; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return isBuiltIn; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return isSimple; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return hasLowerCaseAlias; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"i\", function() { return serializeAsType; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"h\", function() { return serializeAsProperty; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return parseName; });\n/**\r\n * Built-in moddle types\r\n */\nvar BUILTINS = {\n String: true,\n Boolean: true,\n Integer: true,\n Real: true,\n Element: true\n\n /**\r\n * Converters for built in types from string representations\r\n */\n};var TYPE_CONVERTERS = {\n String: function String(s) {\n return s;\n },\n Boolean: function Boolean(s) {\n return s === 'true';\n },\n Integer: function Integer(s) {\n return parseInt(s, 10);\n },\n Real: function Real(s) {\n return parseFloat(s, 10);\n }\n};\n\nvar DEFAULT_NS_MAP = {\n xsi: 'http://www.w3.org/2001/XMLSchema-instance'\n};\n\nvar XSI_TYPE = 'xsi:type';\n\n/**\r\n * Convert a type to its real representation\r\n */\nvar coerceType = function coerceType(type, value) {\n var converter = TYPE_CONVERTERS[type];\n\n if (converter) {\n return converter(value);\n } else {\n return value;\n }\n};\n\n/**\r\n * Return whether the given type is built-in\r\n */\nvar isBuiltIn = function isBuiltIn(type) {\n return !!BUILTINS[type];\n};\n\n/**\r\n * Return whether the given type is simple\r\n */\nvar isSimple = function isSimple(type) {\n return !!TYPE_CONVERTERS[type];\n};\n\nvar hasLowerCaseAlias = function hasLowerCaseAlias(pkg) {\n return pkg.xml && pkg.xml.tagAlias === 'lowerCase';\n};\n\nvar serializeFormat = function serializeFormat(element) {\n return element.xml && element.xml.serialize;\n};\n\nvar serializeAsType = function serializeAsType(element) {\n return serializeFormat(element) === XSI_TYPE;\n};\n\nvar serializeAsProperty = function serializeAsProperty(element) {\n return serializeFormat(element) === 'property';\n};\n\n/**\r\n * Parses a namespaced attribute name of the form (ns:)localName to an object,\r\n * given a default prefix to assume in case no explicit namespace is given.\r\n *\r\n * @param {String} name\r\n * @param {String} [defaultPrefix] the default prefix to take, if none is present.\r\n *\r\n * @return {Object} the parsed name\r\n */\nvar parseName = function parseName(name, defaultPrefix) {\n var parts = name.split(/:/);\n\n var localName;\n var prefix;\n\n // no prefix (i.e. only local name)\n if (parts.length === 1) {\n localName = name;\n prefix = defaultPrefix;\n }\n // prefix + local name\n else if (parts.length === 2) {\n localName = parts[1];\n prefix = parts[0];\n } else {\n throw new Error('expected or , got ' + name);\n }\n\n name = (prefix ? prefix + ':' : '') + localName;\n\n return {\n name: name,\n prefix: prefix,\n localName: localName\n };\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvZmVhdHVyZXMveG1sL3V0aWxzLmpzP2EzYTAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEJ1aWx0LWluIG1vZGRsZSB0eXBlc1xyXG4gKi9cclxuY29uc3QgQlVJTFRJTlMgPSB7XHJcbiAgU3RyaW5nOiB0cnVlLFxyXG4gIEJvb2xlYW46IHRydWUsXHJcbiAgSW50ZWdlcjogdHJ1ZSxcclxuICBSZWFsOiB0cnVlLFxyXG4gIEVsZW1lbnQ6IHRydWVcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRlcnMgZm9yIGJ1aWx0IGluIHR5cGVzIGZyb20gc3RyaW5nIHJlcHJlc2VudGF0aW9uc1xyXG4gKi9cclxuY29uc3QgVFlQRV9DT05WRVJURVJTID0ge1xyXG4gIFN0cmluZzogZnVuY3Rpb24ocykge1xyXG4gICAgcmV0dXJuIHNcclxuICB9LFxyXG4gIEJvb2xlYW46IGZ1bmN0aW9uKHMpIHtcclxuICAgIHJldHVybiBzID09PSAndHJ1ZSdcclxuICB9LFxyXG4gIEludGVnZXI6IGZ1bmN0aW9uKHMpIHtcclxuICAgIHJldHVybiBwYXJzZUludChzLCAxMClcclxuICB9LFxyXG4gIFJlYWw6IGZ1bmN0aW9uKHMpIHtcclxuICAgIHJldHVybiBwYXJzZUZsb2F0KHMsIDEwKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTlNfTUFQID0ge1xyXG4gIHhzaTogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJ1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgWFNJX1RZUEUgPSAneHNpOnR5cGUnXHJcblxyXG4vKipcclxuICogQ29udmVydCBhIHR5cGUgdG8gaXRzIHJlYWwgcmVwcmVzZW50YXRpb25cclxuICovXHJcbmV4cG9ydCBjb25zdCBjb2VyY2VUeXBlID0gKHR5cGUsIHZhbHVlKSA9PiB7XHJcbiAgdmFyIGNvbnZlcnRlciA9IFRZUEVfQ09OVkVSVEVSU1t0eXBlXVxyXG5cclxuICBpZiAoY29udmVydGVyKSB7XHJcbiAgICByZXR1cm4gY29udmVydGVyKHZhbHVlKVxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gdmFsdWVcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBpcyBidWlsdC1pblxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGlzQnVpbHRJbiA9IHR5cGUgPT4ge1xyXG4gIHJldHVybiAhIUJVSUxUSU5TW3R5cGVdXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gdHlwZSBpcyBzaW1wbGVcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc1NpbXBsZSA9IHR5cGUgPT4ge1xyXG4gIHJldHVybiAhIVRZUEVfQ09OVkVSVEVSU1t0eXBlXVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaGFzTG93ZXJDYXNlQWxpYXMgPSBwa2cgPT4ge1xyXG4gIHJldHVybiBwa2cueG1sICYmIHBrZy54bWwudGFnQWxpYXMgPT09ICdsb3dlckNhc2UnXHJcbn1cclxuXHJcbmNvbnN0IHNlcmlhbGl6ZUZvcm1hdCA9IGVsZW1lbnQgPT4ge1xyXG4gIHJldHVybiBlbGVtZW50LnhtbCAmJiBlbGVtZW50LnhtbC5zZXJpYWxpemVcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZUFzVHlwZSA9IGVsZW1lbnQgPT4ge1xyXG4gIHJldHVybiBzZXJpYWxpemVGb3JtYXQoZWxlbWVudCkgPT09IFhTSV9UWVBFXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBzZXJpYWxpemVBc1Byb3BlcnR5ID0gZWxlbWVudCA9PiB7XHJcbiAgcmV0dXJuIHNlcmlhbGl6ZUZvcm1hdChlbGVtZW50KSA9PT0gJ3Byb3BlcnR5J1xyXG59XHJcblxyXG4vKipcclxuICogUGFyc2VzIGEgbmFtZXNwYWNlZCBhdHRyaWJ1dGUgbmFtZSBvZiB0aGUgZm9ybSAobnM6KWxvY2FsTmFtZSB0byBhbiBvYmplY3QsXHJcbiAqIGdpdmVuIGEgZGVmYXVsdCBwcmVmaXggdG8gYXNzdW1lIGluIGNhc2Ugbm8gZXhwbGljaXQgbmFtZXNwYWNlIGlzIGdpdmVuLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxyXG4gKiBAcGFyYW0ge1N0cmluZ30gW2RlZmF1bHRQcmVmaXhdIHRoZSBkZWZhdWx0IHByZWZpeCB0byB0YWtlLCBpZiBub25lIGlzIHByZXNlbnQuXHJcbiAqXHJcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIHBhcnNlZCBuYW1lXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcGFyc2VOYW1lID0gKG5hbWUsIGRlZmF1bHRQcmVmaXgpID0+IHtcclxuICB2YXIgcGFydHMgPSBuYW1lLnNwbGl0KC86LylcclxuXHJcbiAgdmFyIGxvY2FsTmFtZVxyXG4gIHZhciBwcmVmaXhcclxuXHJcbiAgLy8gbm8gcHJlZml4IChpLmUuIG9ubHkgbG9jYWwgbmFtZSlcclxuICBpZiAocGFydHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICBsb2NhbE5hbWUgPSBuYW1lXHJcbiAgICBwcmVmaXggPSBkZWZhdWx0UHJlZml4XHJcbiAgfVxyXG4gIC8vIHByZWZpeCArIGxvY2FsIG5hbWVcclxuICBlbHNlIGlmIChwYXJ0cy5sZW5ndGggPT09IDIpIHtcclxuICAgIGxvY2FsTmFtZSA9IHBhcnRzWzFdXHJcbiAgICBwcmVmaXggPSBwYXJ0c1swXVxyXG4gIH0gZWxzZSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGVjdGVkIDxwcmVmaXg6bG9jYWxOYW1lPiBvciA8bG9jYWxOYW1lPiwgZ290ICcgKyBuYW1lKVxyXG4gIH1cclxuXHJcbiAgbmFtZSA9IChwcmVmaXggPyBwcmVmaXggKyAnOicgOiAnJykgKyBsb2NhbE5hbWVcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIG5hbWU6IG5hbWUsXHJcbiAgICBwcmVmaXg6IHByZWZpeCxcclxuICAgIGxvY2FsTmFtZTogbG9jYWxOYW1lXHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZmVhdHVyZXMveG1sL3V0aWxzLmpzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBUkE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFaQTtBQUNBO0FBY0E7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///5\n"); + +/***/ }), +/* 6 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Base = function () {\n function Base() {\n _classCallCheck(this, Base);\n\n // 分组\n this.group = '';\n // 分组名称\n this.groupName = null;\n // TODO: 锁定\n this.locked = false;\n // 序号\n this.orderIndex = 0;\n // 标记尺寸\n this.markerSize = 14;\n // 图形样式\n this.shapeStyle = { alpha: 1, zindex: 0, angle: 0\n // 字体样式\n };this.fontStyle = {\n fontFamily: 'Arial',\n size: 13,\n color: '50,50,50',\n bold: false,\n italic: false,\n underline: false,\n textAlign: 'center',\n vAlign: 'middle',\n orientation: 'vertical'\n };\n }\n /**\r\n * 获取绘图路径\r\n */\n\n\n _createClass(Base, [{\n key: 'getPath',\n value: function getPath() {\n var _plane$bounds = this.plane.bounds,\n height = _plane$bounds.height,\n width = _plane$bounds.width;\n\n return [{\n actions: [{ action: 'move', x: 0, y: 0 }, { action: 'line', x: width, y: 0 }, { action: 'line', x: width, y: height }, { action: 'line', x: 0, y: height }, { action: 'close' }]\n }];\n }\n /**\r\n * 获取文本范围\r\n */\n\n }, {\n key: 'getTextBlock',\n value: function getTextBlock() {\n var _plane$bounds2 = this.plane.bounds,\n height = _plane$bounds2.height,\n width = _plane$bounds2.width;\n\n return { x: 10, y: 0, width: width - 20, height: height };\n }\n /**\r\n * 获取锚点位置\r\n */\n\n }, {\n key: 'getAnchors',\n value: function getAnchors() {\n var _plane$bounds3 = this.plane.bounds,\n height = _plane$bounds3.height,\n width = _plane$bounds3.width;\n\n return [{ x: width / 2, y: 0 }, { x: width / 2, y: height }, { x: 0, y: height / 2 }, { x: width, y: height / 2 }];\n }\n }]);\n\n return Base;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Base);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvZHJhdy9zaGFwZS9CYXNlLmpzP2Y4MDgiXSwic291cmNlc0NvbnRlbnQiOlsiY2xhc3MgQmFzZSB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAvLyDliIbnu4RcclxuICAgIHRoaXMuZ3JvdXAgPSAnJ1xyXG4gICAgLy8g5YiG57uE5ZCN56ewXHJcbiAgICB0aGlzLmdyb3VwTmFtZSA9IG51bGxcclxuICAgIC8vIFRPRE86IOmUgeWumlxyXG4gICAgdGhpcy5sb2NrZWQgPSBmYWxzZVxyXG4gICAgLy8g5bqP5Y+3XHJcbiAgICB0aGlzLm9yZGVySW5kZXggPSAwXHJcbiAgICAvLyDmoIforrDlsLrlr7hcclxuICAgIHRoaXMubWFya2VyU2l6ZSA9IDE0XHJcbiAgICAvLyDlm77lvaLmoLflvI9cclxuICAgIHRoaXMuc2hhcGVTdHlsZSA9IHsgYWxwaGE6IDEsIHppbmRleDogMCwgYW5nbGU6IDAgfVxyXG4gICAgLy8g5a2X5L2T5qC35byPXHJcbiAgICB0aGlzLmZvbnRTdHlsZSA9IHtcclxuICAgICAgZm9udEZhbWlseTogJ0FyaWFsJyxcclxuICAgICAgc2l6ZTogMTMsXHJcbiAgICAgIGNvbG9yOiAnNTAsNTAsNTAnLFxyXG4gICAgICBib2xkOiBmYWxzZSxcclxuICAgICAgaXRhbGljOiBmYWxzZSxcclxuICAgICAgdW5kZXJsaW5lOiBmYWxzZSxcclxuICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcclxuICAgICAgdkFsaWduOiAnbWlkZGxlJyxcclxuICAgICAgb3JpZW50YXRpb246ICd2ZXJ0aWNhbCdcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICog6I635Y+W57uY5Zu+6Lev5b6EXHJcbiAgICovXHJcbiAgZ2V0UGF0aCgpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0LCB3aWR0aCB9ID0gdGhpcy5wbGFuZS5ib3VuZHNcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ21vdmUnLCB4OiAwLCB5OiAwIH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiB3aWR0aCwgeTogMCB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdsaW5lJywgeDogd2lkdGgsIHk6IGhlaWdodCB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdsaW5lJywgeDogMCwgeTogaGVpZ2h0IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2Nsb3NlJyB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOiOt+WPluaWh+acrOiMg+WbtFxyXG4gICAqL1xyXG4gIGdldFRleHRCbG9jaygpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0LCB3aWR0aCB9ID0gdGhpcy5wbGFuZS5ib3VuZHNcclxuICAgIHJldHVybiB7IHg6IDEwLCB5OiAwLCB3aWR0aDogd2lkdGggLSAyMCwgaGVpZ2h0OiBoZWlnaHQgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiDojrflj5bplJrngrnkvY3nva5cclxuICAgKi9cclxuICBnZXRBbmNob3JzKCkge1xyXG4gICAgY29uc3QgeyBoZWlnaHQsIHdpZHRoIH0gPSB0aGlzLnBsYW5lLmJvdW5kc1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgeyB4OiB3aWR0aCAvIDIsIHk6IDAgfSxcclxuICAgICAgeyB4OiB3aWR0aCAvIDIsIHk6IGhlaWdodCB9LFxyXG4gICAgICB7IHg6IDAsIHk6IGhlaWdodCAvIDIgfSxcclxuICAgICAgeyB4OiB3aWR0aCwgeTogaGVpZ2h0IC8gMiB9XHJcbiAgICBdXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCYXNlXHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZHJhdy9zaGFwZS9CYXNlLmpzIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVEE7QUFXQTtBQUNBOzs7Ozs7O0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFEQTtBQVVBO0FBQ0E7Ozs7OztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQU1BOzs7Ozs7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///6\n"); + +/***/ }), +/* 7 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__draw_drawUtils__ = __webpack_require__(2);\n\n\nvar GradientUtils = {\n /**\r\n * 线性渐变色\r\n * @param {*} shape2D\r\n * @param {*} shape\r\n * @param {*} fillStyle\r\n */\n createLinearGradient: function createLinearGradient(shape2D, shape, fillStyle) {\n var _shape$bpmnPlane$boun = shape.bpmnPlane.bounds,\n width = _shape$bpmnPlane$boun.width,\n height = _shape$bpmnPlane$boun.height;\n\n var start = { x: width / 2, y: 0 // c\n };var end = { x: width / 2, y: height //e\n };var angle = fillStyle.angle; // d\n if (width > height) {\n start = { x: 0, y: height / 2 };\n end = { x: width, y: height / 2 };\n angle = (h.angle + Math.PI / 2) % (Math.PI * 2);\n }\n if (angle !== 0) {\n var center = { x: width / 2, y: height / 2 };\n start = __WEBPACK_IMPORTED_MODULE_0__draw_drawUtils__[\"a\" /* default */].getRotated(center, start, angle);\n end = __WEBPACK_IMPORTED_MODULE_0__draw_drawUtils__[\"a\" /* default */].getRotated(center, end, angle);\n if (start.x < 0) {\n start.x = 0;\n }\n if (start.x > width) {\n start.x = width;\n }\n if (start.y < 0) {\n start.y = 0;\n }\n if (start.y > height) {\n start.y = height;\n }\n if (end.x < 0) {\n end.x = 0;\n }\n if (end.x > width) {\n end.x = width;\n }\n if (end.y < 0) {\n end.y = 0;\n }\n if (end.y > height) {\n end.y = height;\n }\n }\n var gradient = shape2D.createLinearGradient(start.x, start.y, end.x, end.y);\n gradient.addColorStop(0, 'rgb(' + fillStyle.beginColor + ')');\n gradient.addColorStop(1, 'rgb(' + fillStyle.endColor + ')');\n return gradient;\n },\n /**\r\n * 放射性渐变色\r\n * @param {*} shape2D\r\n * @param {*} shape\r\n * @param {*} fillStyle\r\n */\n createRadialGradient: function createRadialGradient(shape2D, shape, fillStyle) {\n var _shape$bpmnPlane$boun2 = shape.bpmnPlane.bounds,\n width = _shape$bpmnPlane$boun2.width,\n height = _shape$bpmnPlane$boun2.height;\n\n var radius = width < height ? width : height;\n var gradient = shape2D.createRadialGradient(width / 2, height / 2, 10, width / 2, height / 2, radius * fillStyle.radius);\n gradient.addColorStop(0, 'rgb(' + fillStyle.beginColor + ')');\n gradient.addColorStop(1, 'rgb(' + fillStyle.endColor + ')');\n return gradient;\n }\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (GradientUtils);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvdXRpbHMvZ3JhZGllbnQuanM/MTMwZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZHJhd1V0aWxzIGZyb20gJy4uL2RyYXcvZHJhd1V0aWxzJ1xyXG5cclxuY29uc3QgR3JhZGllbnRVdGlscyA9IHtcclxuICAvKipcclxuICAgKiDnur/mgKfmuJDlj5joibJcclxuICAgKiBAcGFyYW0geyp9IHNoYXBlMkRcclxuICAgKiBAcGFyYW0geyp9IHNoYXBlXHJcbiAgICogQHBhcmFtIHsqfSBmaWxsU3R5bGVcclxuICAgKi9cclxuICBjcmVhdGVMaW5lYXJHcmFkaWVudDogKHNoYXBlMkQsIHNoYXBlLCBmaWxsU3R5bGUpID0+IHtcclxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gc2hhcGUuYnBtblBsYW5lLmJvdW5kc1xyXG4gICAgbGV0IHN0YXJ0ID0geyB4OiB3aWR0aCAvIDIsIHk6IDAgfSAvLyBjXHJcbiAgICBsZXQgZW5kID0geyB4OiB3aWR0aCAvIDIsIHk6IGhlaWdodCB9IC8vZVxyXG4gICAgbGV0IGFuZ2xlID0gZmlsbFN0eWxlLmFuZ2xlIC8vIGRcclxuICAgIGlmICh3aWR0aCA+IGhlaWdodCkge1xyXG4gICAgICBzdGFydCA9IHsgeDogMCwgeTogaGVpZ2h0IC8gMiB9XHJcbiAgICAgIGVuZCA9IHsgeDogd2lkdGgsIHk6IGhlaWdodCAvIDIgfVxyXG4gICAgICBhbmdsZSA9IChoLmFuZ2xlICsgTWF0aC5QSSAvIDIpICUgKE1hdGguUEkgKiAyKVxyXG4gICAgfVxyXG4gICAgaWYgKGFuZ2xlICE9PSAwKSB7XHJcbiAgICAgIGNvbnN0IGNlbnRlciA9IHsgeDogd2lkdGggLyAyLCB5OiBoZWlnaHQgLyAyIH1cclxuICAgICAgc3RhcnQgPSBkcmF3VXRpbHMuZ2V0Um90YXRlZChjZW50ZXIsIHN0YXJ0LCBhbmdsZSlcclxuICAgICAgZW5kID0gZHJhd1V0aWxzLmdldFJvdGF0ZWQoY2VudGVyLCBlbmQsIGFuZ2xlKVxyXG4gICAgICBpZiAoc3RhcnQueCA8IDApIHtcclxuICAgICAgICBzdGFydC54ID0gMFxyXG4gICAgICB9XHJcbiAgICAgIGlmIChzdGFydC54ID4gd2lkdGgpIHtcclxuICAgICAgICBzdGFydC54ID0gd2lkdGhcclxuICAgICAgfVxyXG4gICAgICBpZiAoc3RhcnQueSA8IDApIHtcclxuICAgICAgICBzdGFydC55ID0gMFxyXG4gICAgICB9XHJcbiAgICAgIGlmIChzdGFydC55ID4gaGVpZ2h0KSB7XHJcbiAgICAgICAgc3RhcnQueSA9IGhlaWdodFxyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbmQueCA8IDApIHtcclxuICAgICAgICBlbmQueCA9IDBcclxuICAgICAgfVxyXG4gICAgICBpZiAoZW5kLnggPiB3aWR0aCkge1xyXG4gICAgICAgIGVuZC54ID0gd2lkdGhcclxuICAgICAgfVxyXG4gICAgICBpZiAoZW5kLnkgPCAwKSB7XHJcbiAgICAgICAgZW5kLnkgPSAwXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVuZC55ID4gaGVpZ2h0KSB7XHJcbiAgICAgICAgZW5kLnkgPSBoZWlnaHRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZ3JhZGllbnQgPSBzaGFwZTJELmNyZWF0ZUxpbmVhckdyYWRpZW50KFxyXG4gICAgICBzdGFydC54LFxyXG4gICAgICBzdGFydC55LFxyXG4gICAgICBlbmQueCxcclxuICAgICAgZW5kLnlcclxuICAgIClcclxuICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgwLCAncmdiKCcgKyBmaWxsU3R5bGUuYmVnaW5Db2xvciArICcpJylcclxuICAgIGdyYWRpZW50LmFkZENvbG9yU3RvcCgxLCAncmdiKCcgKyBmaWxsU3R5bGUuZW5kQ29sb3IgKyAnKScpXHJcbiAgICByZXR1cm4gZ3JhZGllbnRcclxuICB9LFxyXG4gIC8qKlxyXG4gICAqIOaUvuWwhOaAp+a4kOWPmOiJslxyXG4gICAqIEBwYXJhbSB7Kn0gc2hhcGUyRFxyXG4gICAqIEBwYXJhbSB7Kn0gc2hhcGVcclxuICAgKiBAcGFyYW0geyp9IGZpbGxTdHlsZVxyXG4gICAqL1xyXG4gIGNyZWF0ZVJhZGlhbEdyYWRpZW50OiAoc2hhcGUyRCwgc2hhcGUsIGZpbGxTdHlsZSkgPT4ge1xyXG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzaGFwZS5icG1uUGxhbmUuYm91bmRzXHJcbiAgICBjb25zdCByYWRpdXMgPSB3aWR0aCA8IGhlaWdodCA/IHdpZHRoIDogaGVpZ2h0XHJcbiAgICBjb25zdCBncmFkaWVudCA9IHNoYXBlMkQuY3JlYXRlUmFkaWFsR3JhZGllbnQoXHJcbiAgICAgIHdpZHRoIC8gMixcclxuICAgICAgaGVpZ2h0IC8gMixcclxuICAgICAgMTAsXHJcbiAgICAgIHdpZHRoIC8gMixcclxuICAgICAgaGVpZ2h0IC8gMixcclxuICAgICAgcmFkaXVzICogZmlsbFN0eWxlLnJhZGl1c1xyXG4gICAgKVxyXG4gICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDAsICdyZ2IoJyArIGZpbGxTdHlsZS5iZWdpbkNvbG9yICsgJyknKVxyXG4gICAgZ3JhZGllbnQuYWRkQ29sb3JTdG9wKDEsICdyZ2IoJyArIGZpbGxTdHlsZS5lbmRDb2xvciArICcpJylcclxuICAgIHJldHVybiBncmFkaWVudFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgR3JhZGllbnRVdGlsc1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL3V0aWxzL2dyYWRpZW50LmpzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUE1RUE7QUFDQTtBQThFQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///7\n"); + +/***/ }), +/* 8 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__factory__ = __webpack_require__(31);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__registry__ = __webpack_require__(33);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__properties__ = __webpack_require__(35);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils__ = __webpack_require__(5);\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n/**\r\n * A model that can be used to create elements of a specific type.\r\n * @param {Array} packages the packages to contain\r\n */\n\nvar Model = function () {\n function Model(packages) {\n _classCallCheck(this, Model);\n\n this.properties = new __WEBPACK_IMPORTED_MODULE_2__properties__[\"a\" /* default */](this);\n\n this.factory = new __WEBPACK_IMPORTED_MODULE_0__factory__[\"a\" /* default */](this, this.properties);\n\n this.registry = new __WEBPACK_IMPORTED_MODULE_1__registry__[\"a\" /* default */](packages, this.properties);\n\n this.typeCache = {};\n }\n\n /**\r\n * Create an instance of the specified type.\r\n * @param {String|Object} descriptor the type descriptor or name know to the model\r\n * @param {Object} attrs a number of attributes to initialize the model instance with\r\n * @return {Object} model instance\r\n */\n\n\n _createClass(Model, [{\n key: 'create',\n value: function create(descriptor, attrs) {\n var Type = this.getType(descriptor);\n if (!Type) {\n throw new Error('unknown type <' + descriptor + '>');\n }\n return new Type(attrs);\n }\n\n /**\r\n * Returns the type representing a given descriptor\r\n * @param {String|Object} descriptor the type descriptor or name know to the model\r\n * @return {Object} the type representing the descriptor\r\n */\n\n }, {\n key: 'getType',\n value: function getType(descriptor) {\n var cache = this.typeCache;\n\n var name = typeof descriptor === 'string' && descriptor.constructor === String ? descriptor : descriptor.ns.name;\n\n var type = cache[name];\n\n if (!type) {\n descriptor = this.registry.getEffectiveDescriptor(name);\n type = cache[name] = this.factory.createType(descriptor);\n }\n\n return type;\n }\n\n /**\r\n * Creates an any-element type to be used within model instances.\r\n *\r\n * This can be used to create custom elements that lie outside the meta-model.\r\n * The created element contains all the meta-data required to serialize it\r\n *\r\n * @param {String} name the name of the element\r\n * @param {String} nsUri the namespace uri of the element\r\n * @param {Object} [properties] a map of properties to initialize the instance with\r\n * @return {Object} the any type instance\r\n */\n\n }, {\n key: 'createAny',\n value: function createAny(name, nsUri, properties) {\n var nameNs = Object(__WEBPACK_IMPORTED_MODULE_3__utils__[\"g\" /* parseName */])(name);\n\n var element = {\n $type: name,\n $instanceOf: function $instanceOf(type) {\n return type === this.$type;\n }\n };\n\n var descriptor = {\n name: name,\n isGeneric: true,\n ns: {\n prefix: nameNs.prefix,\n localName: nameNs.localName,\n uri: nsUri\n }\n };\n\n this.properties.defineDescriptor(element, descriptor);\n this.properties.defineModel(element, this);\n this.properties.define(element, '$parent', {\n enumerable: false,\n writable: true\n });\n\n for (var key in properties) {\n var prop = properties[key];\n if ((typeof prop === 'undefined' ? 'undefined' : _typeof(prop)) === 'object' && prop.constructor === Object && prop.value !== undefined) {\n element[prop.name] = a.value;\n } else {\n element[key] = prop;\n }\n }\n\n return element;\n }\n\n /**\r\n * Returns a registered package by uri or prefix\r\n *\r\n * @return {Object} the package\r\n */\n\n }, {\n key: 'getPackage',\n value: function getPackage(uriOrPrefix) {\n return this.registry.getPackage(uriOrPrefix);\n }\n\n /**\r\n * Returns a snapshot of all known packages\r\n *\r\n * @return {Object} the package\r\n */\n\n }, {\n key: 'getPackages',\n value: function getPackages() {\n return this.registry.getPackages();\n }\n\n /**\r\n * Returns the descriptor for an element\r\n */\n\n }, {\n key: 'getElementDescriptor',\n value: function getElementDescriptor(element) {\n return element.$descriptor;\n }\n\n /**\r\n * Returns true if the given descriptor or instance\r\n * represents the given type.\r\n *\r\n * May be applied to this, if element is omitted.\r\n */\n\n }, {\n key: 'hasType',\n value: function hasType(element, type) {\n if (type === undefined) {\n type = element;\n element = this;\n }\n\n var descriptor = element.$model.getElementDescriptor(element);\n\n return type in descriptor.allTypesByName;\n }\n\n /**\r\n * Returns the descriptor of an elements named property\r\n */\n\n }, {\n key: 'getPropertyDescriptor',\n value: function getPropertyDescriptor(element, property) {\n return this.getElementDescriptor(element).propertiesByName[property];\n }\n\n /**\r\n * Returns a mapped type's descriptor\r\n */\n\n }, {\n key: 'getTypeDescriptor',\n value: function getTypeDescriptor(type) {\n return this.registry.typeMap[type];\n }\n }]);\n\n return Model;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Model);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvZmVhdHVyZXMveG1sL21vZGVsL21vZGVsLmpzP2ZmYWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEZhY3RvcnkgZnJvbSAnLi9mYWN0b3J5J1xyXG5pbXBvcnQgUmVnaXN0cnkgZnJvbSAnLi9yZWdpc3RyeSdcclxuaW1wb3J0IFByb3BlcnRpZXMgZnJvbSAnLi9wcm9wZXJ0aWVzJ1xyXG5pbXBvcnQgeyBwYXJzZU5hbWUgYXMgcGFyc2VOYW1lTnMgfSBmcm9tICcuLi91dGlscydcclxuXHJcbi8qKlxyXG4gKiBBIG1vZGVsIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGVsZW1lbnRzIG9mIGEgc3BlY2lmaWMgdHlwZS5cclxuICogQHBhcmFtIHtBcnJheTxQYWNrYWdlPn0gcGFja2FnZXMgdGhlIHBhY2thZ2VzIHRvIGNvbnRhaW5cclxuICovXHJcbmNsYXNzIE1vZGVsIHtcclxuICBjb25zdHJ1Y3RvcihwYWNrYWdlcykge1xyXG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXModGhpcylcclxuXHJcbiAgICB0aGlzLmZhY3RvcnkgPSBuZXcgRmFjdG9yeSh0aGlzLCB0aGlzLnByb3BlcnRpZXMpXHJcblxyXG4gICAgdGhpcy5yZWdpc3RyeSA9IG5ldyBSZWdpc3RyeShwYWNrYWdlcywgdGhpcy5wcm9wZXJ0aWVzKVxyXG5cclxuICAgIHRoaXMudHlwZUNhY2hlID0ge31cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuXHJcbiAgICogQHBhcmFtICB7U3RyaW5nfE9iamVjdH0gZGVzY3JpcHRvciB0aGUgdHlwZSBkZXNjcmlwdG9yIG9yIG5hbWUga25vdyB0byB0aGUgbW9kZWxcclxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGF0dHJzICAgYSBudW1iZXIgb2YgYXR0cmlidXRlcyB0byBpbml0aWFsaXplIHRoZSBtb2RlbCBpbnN0YW5jZSB3aXRoXHJcbiAgICogQHJldHVybiB7T2JqZWN0fSAgICAgICAgIG1vZGVsIGluc3RhbmNlXHJcbiAgICovXHJcbiAgY3JlYXRlKGRlc2NyaXB0b3IsIGF0dHJzKSB7XHJcbiAgICBjb25zdCBUeXBlID0gdGhpcy5nZXRUeXBlKGRlc2NyaXB0b3IpXHJcbiAgICBpZiAoIVR5cGUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIHR5cGUgPCcgKyBkZXNjcmlwdG9yICsgJz4nKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBUeXBlKGF0dHJzKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgdHlwZSByZXByZXNlbnRpbmcgYSBnaXZlbiBkZXNjcmlwdG9yXHJcbiAgICogQHBhcmFtICB7U3RyaW5nfE9iamVjdH0gZGVzY3JpcHRvciB0aGUgdHlwZSBkZXNjcmlwdG9yIG9yIG5hbWUga25vdyB0byB0aGUgbW9kZWxcclxuICAgKiBAcmV0dXJuIHtPYmplY3R9ICAgICAgICAgdGhlIHR5cGUgcmVwcmVzZW50aW5nIHRoZSBkZXNjcmlwdG9yXHJcbiAgICovXHJcbiAgZ2V0VHlwZShkZXNjcmlwdG9yKSB7XHJcbiAgICB2YXIgY2FjaGUgPSB0aGlzLnR5cGVDYWNoZVxyXG5cclxuICAgIHZhciBuYW1lID1cclxuICAgICAgdHlwZW9mIGRlc2NyaXB0b3IgPT09ICdzdHJpbmcnICYmIGRlc2NyaXB0b3IuY29uc3RydWN0b3IgPT09IFN0cmluZ1xyXG4gICAgICAgID8gZGVzY3JpcHRvclxyXG4gICAgICAgIDogZGVzY3JpcHRvci5ucy5uYW1lXHJcblxyXG4gICAgdmFyIHR5cGUgPSBjYWNoZVtuYW1lXVxyXG5cclxuICAgIGlmICghdHlwZSkge1xyXG4gICAgICBkZXNjcmlwdG9yID0gdGhpcy5yZWdpc3RyeS5nZXRFZmZlY3RpdmVEZXNjcmlwdG9yKG5hbWUpXHJcbiAgICAgIHR5cGUgPSBjYWNoZVtuYW1lXSA9IHRoaXMuZmFjdG9yeS5jcmVhdGVUeXBlKGRlc2NyaXB0b3IpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHR5cGVcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gYW55LWVsZW1lbnQgdHlwZSB0byBiZSB1c2VkIHdpdGhpbiBtb2RlbCBpbnN0YW5jZXMuXHJcbiAgICpcclxuICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBjdXN0b20gZWxlbWVudHMgdGhhdCBsaWUgb3V0c2lkZSB0aGUgbWV0YS1tb2RlbC5cclxuICAgKiBUaGUgY3JlYXRlZCBlbGVtZW50IGNvbnRhaW5zIGFsbCB0aGUgbWV0YS1kYXRhIHJlcXVpcmVkIHRvIHNlcmlhbGl6ZSBpdFxyXG4gICAqXHJcbiAgICogQHBhcmFtICB7U3RyaW5nfSBuYW1lICB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudFxyXG4gICAqIEBwYXJhbSAge1N0cmluZ30gbnNVcmkgdGhlIG5hbWVzcGFjZSB1cmkgb2YgdGhlIGVsZW1lbnRcclxuICAgKiBAcGFyYW0gIHtPYmplY3R9IFtwcm9wZXJ0aWVzXSBhIG1hcCBvZiBwcm9wZXJ0aWVzIHRvIGluaXRpYWxpemUgdGhlIGluc3RhbmNlIHdpdGhcclxuICAgKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBhbnkgdHlwZSBpbnN0YW5jZVxyXG4gICAqL1xyXG4gIGNyZWF0ZUFueShuYW1lLCBuc1VyaSwgcHJvcGVydGllcykge1xyXG4gICAgdmFyIG5hbWVOcyA9IHBhcnNlTmFtZU5zKG5hbWUpXHJcblxyXG4gICAgdmFyIGVsZW1lbnQgPSB7XHJcbiAgICAgICR0eXBlOiBuYW1lLFxyXG4gICAgICAkaW5zdGFuY2VPZjogZnVuY3Rpb24odHlwZSkge1xyXG4gICAgICAgIHJldHVybiB0eXBlID09PSB0aGlzLiR0eXBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IHtcclxuICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgaXNHZW5lcmljOiB0cnVlLFxyXG4gICAgICBuczoge1xyXG4gICAgICAgIHByZWZpeDogbmFtZU5zLnByZWZpeCxcclxuICAgICAgICBsb2NhbE5hbWU6IG5hbWVOcy5sb2NhbE5hbWUsXHJcbiAgICAgICAgdXJpOiBuc1VyaVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wcm9wZXJ0aWVzLmRlZmluZURlc2NyaXB0b3IoZWxlbWVudCwgZGVzY3JpcHRvcilcclxuICAgIHRoaXMucHJvcGVydGllcy5kZWZpbmVNb2RlbChlbGVtZW50LCB0aGlzKVxyXG4gICAgdGhpcy5wcm9wZXJ0aWVzLmRlZmluZShlbGVtZW50LCAnJHBhcmVudCcsIHtcclxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgIHdyaXRhYmxlOiB0cnVlXHJcbiAgICB9KVxyXG5cclxuICAgIGZvciAobGV0IGtleSBpbiBwcm9wZXJ0aWVzKSB7XHJcbiAgICAgIGNvbnN0IHByb3AgPSBwcm9wZXJ0aWVzW2tleV1cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHR5cGVvZiBwcm9wID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICAgIHByb3AuY29uc3RydWN0b3IgPT09IE9iamVjdCAmJlxyXG4gICAgICAgIHByb3AudmFsdWUgIT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICBlbGVtZW50W3Byb3AubmFtZV0gPSBhLnZhbHVlXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZWxlbWVudFtrZXldID0gcHJvcFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVsZW1lbnRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSByZWdpc3RlcmVkIHBhY2thZ2UgYnkgdXJpIG9yIHByZWZpeFxyXG4gICAqXHJcbiAgICogQHJldHVybiB7T2JqZWN0fSB0aGUgcGFja2FnZVxyXG4gICAqL1xyXG4gIGdldFBhY2thZ2UodXJpT3JQcmVmaXgpIHtcclxuICAgIHJldHVybiB0aGlzLnJlZ2lzdHJ5LmdldFBhY2thZ2UodXJpT3JQcmVmaXgpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgc25hcHNob3Qgb2YgYWxsIGtub3duIHBhY2thZ2VzXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBwYWNrYWdlXHJcbiAgICovXHJcbiAgZ2V0UGFja2FnZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWdpc3RyeS5nZXRQYWNrYWdlcygpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBkZXNjcmlwdG9yIGZvciBhbiBlbGVtZW50XHJcbiAgICovXHJcbiAgZ2V0RWxlbWVudERlc2NyaXB0b3IoZWxlbWVudCkge1xyXG4gICAgcmV0dXJuIGVsZW1lbnQuJGRlc2NyaXB0b3JcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gZGVzY3JpcHRvciBvciBpbnN0YW5jZVxyXG4gICAqIHJlcHJlc2VudHMgdGhlIGdpdmVuIHR5cGUuXHJcbiAgICpcclxuICAgKiBNYXkgYmUgYXBwbGllZCB0byB0aGlzLCBpZiBlbGVtZW50IGlzIG9taXR0ZWQuXHJcbiAgICovXHJcbiAgaGFzVHlwZShlbGVtZW50LCB0eXBlKSB7XHJcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHR5cGUgPSBlbGVtZW50XHJcbiAgICAgIGVsZW1lbnQgPSB0aGlzXHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBlbGVtZW50LiRtb2RlbC5nZXRFbGVtZW50RGVzY3JpcHRvcihlbGVtZW50KVxyXG5cclxuICAgIHJldHVybiB0eXBlIGluIGRlc2NyaXB0b3IuYWxsVHlwZXNCeU5hbWVcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGRlc2NyaXB0b3Igb2YgYW4gZWxlbWVudHMgbmFtZWQgcHJvcGVydHlcclxuICAgKi9cclxuICBnZXRQcm9wZXJ0eURlc2NyaXB0b3IoZWxlbWVudCwgcHJvcGVydHkpIHtcclxuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnREZXNjcmlwdG9yKGVsZW1lbnQpLnByb3BlcnRpZXNCeU5hbWVbcHJvcGVydHldXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGEgbWFwcGVkIHR5cGUncyBkZXNjcmlwdG9yXHJcbiAgICovXHJcbiAgZ2V0VHlwZURlc2NyaXB0b3IodHlwZSkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVnaXN0cnkudHlwZU1hcFt0eXBlXVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTW9kZWxcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9mZWF0dXJlcy94bWwvbW9kZWwvbW9kZWwuanMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBSUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFIQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7QUFDQTtBQUNBOzs7Ozs7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///8\n"); + +/***/ }), +/* 9 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("Object.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__assets_styles_bpd_core_scss__ = __webpack_require__(10);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__assets_styles_bpd_core_scss___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__assets_styles_bpd_core_scss__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__draw_draw__ = __webpack_require__(11);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_slimJQ__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils_ids__ = __webpack_require__(28);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_utils__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__features_xml__ = __webpack_require__(29);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__features_background__ = __webpack_require__(46);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__features_direction__ = __webpack_require__(48);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__features_anchor__ = __webpack_require__(50);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__features_select__ = __webpack_require__(52);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__features_drag__ = __webpack_require__(54);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__features_snapline__ = __webpack_require__(56);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__features_tooltip__ = __webpack_require__(58);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__features_group_panel__ = __webpack_require__(60);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__features_hotkey__ = __webpack_require__(62);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__features_i18n__ = __webpack_require__(65);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\r\n * 入口文件\r\n * @author ctank\r\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// 流程图模板\nvar DEFAULT_DEFINITION = '' + '';\n\n// const DEFAULT_DEFINITION =\n// 'obj_0e2n3e0测试1测试2obj_0e2n3e0obj_0gxdr3xobj_0gxdr3x'\n\n// 默认属性\nvar DEFAULT_OPTIONS = {\n ids: new __WEBPACK_IMPORTED_MODULE_4__utils_ids__[\"a\" /* default */]([32, 36, 1]),\n // 容器\n container: '',\n // 宽\n width: '100%',\n // 高\n height: '100%',\n // 比例\n scale: 1,\n // 只读\n readonly: false,\n // 页面样式\n pageStyle: {\n // 背景色\n backgroundColor: '255,255,255',\n // 高度\n height: 3000,\n // 宽度\n width: 2500\n },\n //\n // local: 'zh_TW',\n // 功能配置\n config: {},\n // bpmn样式\n bpmnStyle: {},\n // 图形样式\n shapeStyle: [],\n // 流程图定义\n definition: DEFAULT_DEFINITION || '',\n // 扩展属性\n extensions: {},\n // 过滤\n filter: [],\n // 支持节点\n bpmns: ['StartEvent', 'UserTask', 'ServiceTask', 'ReceiveTask', 'CallActivity', 'ExclusiveGateway', 'InclusiveGateway', 'ParallelGateway', 'ComplexGateway', 'EndEvent', 'TerminateEndEvent']\n};\n\nvar IS_FONTLOAD = false;\n\n/**\r\n * 创建容器\r\n * @param {*} options\r\n */\nvar createContainer = function createContainer(options) {\n var container = Object(__WEBPACK_IMPORTED_MODULE_3__utils_slimJQ__[\"a\" /* default */])(options.container);\n if (!options.container || container.length <= 0) {\n throw new Error('Can not find container: ' + options.container);\n }\n var designerBox = Object(__WEBPACK_IMPORTED_MODULE_3__utils_slimJQ__[\"a\" /* default */])('
');\n designerBox.css({\n width: options.width,\n height: options.height,\n position: options.position\n });\n container.append(designerBox);\n return designerBox;\n};\n\nvar BPDCore = function () {\n function BPDCore() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, BPDCore);\n\n this.version = '0.1.4';\n // 配置\n this.options = Object.assign({}, DEFAULT_OPTIONS, options);\n // 容器\n this.$container = createContainer(this.options);\n // 功能\n this.features = {\n // 快捷键\n HotKey: new __WEBPACK_IMPORTED_MODULE_15__features_hotkey__[\"a\" /* default */](),\n // 国际化\n I18n: new __WEBPACK_IMPORTED_MODULE_16__features_i18n__[\"a\" /* default */](this.options.local),\n // xml\n BpmnXML: new __WEBPACK_IMPORTED_MODULE_6__features_xml__[\"a\" /* default */](this.options.extensions),\n // 背景\n Background: new __WEBPACK_IMPORTED_MODULE_7__features_background__[\"a\" /* default */](this.$container, this.options, this.options.config.background)\n };\n\n if (!this.options.readonly) {\n // 锚点\n this.features.Anchor = new __WEBPACK_IMPORTED_MODULE_9__features_anchor__[\"a\" /* default */](this.$container, this.options.config.anchor);\n // 对齐\n this.features.Snapline = new __WEBPACK_IMPORTED_MODULE_12__features_snapline__[\"a\" /* default */](this.$container, this.options.config.snapline);\n // 流向\n this.features.Direction = new __WEBPACK_IMPORTED_MODULE_8__features_direction__[\"a\" /* default */](this.$container, this.options.config.direction);\n // 选择\n this.features.Select = new __WEBPACK_IMPORTED_MODULE_10__features_select__[\"a\" /* default */](this.$container, this.options.config.select);\n // 提示\n this.features.Tooltip = new __WEBPACK_IMPORTED_MODULE_13__features_tooltip__[\"a\" /* default */](this.$container, this.options.config.tooltip);\n // 拖动\n this.features.Drag = new __WEBPACK_IMPORTED_MODULE_11__features_drag__[\"a\" /* default */](this.options, this.$container);\n // 组面板\n this.features.GroupPanel = new __WEBPACK_IMPORTED_MODULE_14__features_group_panel__[\"a\" /* default */](this.$container, this.options);\n }\n\n // 绘图\n this.draw = Object(__WEBPACK_IMPORTED_MODULE_2__draw_draw__[\"a\" /* default */])(this.options, this.$container);\n\n // 检查字体载入\n Object(__WEBPACK_IMPORTED_MODULE_5__utils_utils__[\"g\" /* loadFont */])('bpmn', function () {\n IS_FONTLOAD = true;\n });\n\n this.init();\n }\n\n _createClass(BPDCore, [{\n key: 'init',\n value: function init() {\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};\n\n this.importBpmn(this.options.definition, callback);\n }\n\n /**\r\n * 创建图形\r\n * @param {Event} event\r\n */\n\n }, {\n key: 'createShape',\n value: function createShape(event) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n\n var target = Object(__WEBPACK_IMPORTED_MODULE_3__utils_slimJQ__[\"a\" /* default */])(event.target);\n if (target.hasClass('readonly') || this.options.readonly) {\n return;\n }\n var shapeName = target.attr('shapeName');\n if (!shapeName || shapeName === '') {\n throw new Error('shapeName error');\n }\n this.draw.createShape(shapeName, callback);\n }\n\n /**\r\n * 获取全部元素\r\n */\n\n }, {\n key: 'getAllElement',\n value: function getAllElement() {\n var elements = [];\n var elementObj = __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('element.get');\n for (var id in elementObj) {\n var element = Object(__WEBPACK_IMPORTED_MODULE_5__utils_utils__[\"j\" /* setExportData */])(elementObj[id]);\n elements.push(element);\n }\n return elements;\n }\n\n /**\r\n * 获取根元素\r\n */\n\n }, {\n key: 'getRootElement',\n value: function getRootElement() {\n var root = __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('process.get');\n if (root) {\n return Object(__WEBPACK_IMPORTED_MODULE_5__utils_utils__[\"j\" /* setExportData */])(root);\n }\n return null;\n }\n\n /**\r\n * 根据类型获取选中元素之前的元素\r\n * @param {Object} element\r\n * @param {String} bpmn\r\n */\n\n }, {\n key: 'getFrontElementsByBpmn',\n value: function getFrontElementsByBpmn(element, bpmn) {\n return this.getFrontElements(__WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('element.get', element.id)).filter(function (element) {\n return element.bpmnName === bpmn;\n });\n }\n\n /**\r\n * 获取选中元素之前的元素\r\n * @param {Object} element\r\n * @return {Object} 选中元素前一个节点元素\r\n */\n\n }, {\n key: 'getFrontElement',\n value: function getFrontElement(element) {\n if (!element) {\n throw new Error('select element error');\n }\n var frontElement = null;\n var frontElements = this.getFrontElements(__WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('element.get', element.id));\n frontElements.forEach(function (ele) {\n if (!frontElement && ele.bpmnName !== 'SequenceFlow') {\n frontElement = ele;\n }\n });\n return frontElement;\n }\n\n /**\r\n * 获取选中元素之前的全部元素\r\n * @param {Object} element\r\n */\n\n }, {\n key: 'getFrontElements',\n value: function getFrontElements(element) {\n if (!element) {\n throw new Error('select element error');\n }\n var getFront = function getFront(elements) {\n var fronts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n var isStart = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var elems = [];\n if (!isStart) {\n elements.forEach(function (ele) {\n if (ele.shape.bpmnName === 'SequenceFlow') {\n if (ele.data.sourceRef && ele.sourceRef !== '') {\n var _element = __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('element.get', ele.data.sourceRef) || [];\n var hasElement = false;\n fronts.forEach(function (ele) {\n if (ele.data.id === _element.data.id) {\n hasElement = true;\n }\n });\n if (!hasElement) {\n elems.push(_element);\n fronts.push(_element);\n }\n }\n } else {\n var linkerIds = __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('connections.get', ele.data.id) || [];\n linkerIds.forEach(function (id) {\n var linker = __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('element.get', id);\n if (linker.data.targetRef === ele.data.id) {\n var _hasElement = false;\n fronts.forEach(function (ele) {\n if (ele.data.id === linker.data.id) {\n _hasElement = true;\n }\n });\n if (!_hasElement) {\n elems.push(linker);\n fronts.push(linker);\n }\n }\n });\n }\n });\n\n if (elems.length <= 0) {\n return getFront(elems, fronts, true);\n } else {\n return getFront(elems, fronts);\n }\n } else {\n return fronts;\n }\n };\n var frontElements = getFront([element]);\n\n for (var i = 0; i < frontElements.length; i += 1) {\n frontElements[i] = Object(__WEBPACK_IMPORTED_MODULE_5__utils_utils__[\"j\" /* setExportData */])(frontElements[i]);\n }\n return frontElements;\n }\n\n /**\r\n * 更新元素属性\r\n * @param {String} id\r\n * @param {Object} data\r\n */\n\n }, {\n key: 'updateProperties',\n value: function updateProperties(id, data) {\n var callback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {};\n\n data.extensions.forEach(function (dataExtension) {\n dataExtension.$type = dataExtension.name;\n delete dataExtension.name;\n });\n\n var element = __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('element.get', id);\n\n if (!element) {\n return;\n }\n\n var original = Object.assign({}, data.original);\n for (var key in original) {\n element.data[key] = original[key];\n }\n\n var extensionElements = element.data.extensionElements;\n\n var extensions = [];\n if (!extensionElements.values) {\n extensionElements.values = [];\n }\n extensionElements.values.forEach(function (shapeExtension) {\n var hasExtension = false;\n data.extensions.forEach(function (dataExtension) {\n if (dataExtension.$type === shapeExtension.$type) {\n hasExtension = true;\n }\n });\n if (!hasExtension) {\n extensions.push(shapeExtension);\n }\n });\n\n extensionElements.values = [].concat(extensions, _toConsumableArray(data.extensions));\n\n if (element.shape.bpmnName === 'SequenceFlow') {} else {\n __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('shape.render', {\n type: element.shape.bpmnName,\n element: element\n });\n }\n\n callback();\n }\n\n /**\r\n * 更新流程属性,目前仅支持标题和扩展属性\r\n * @param {Object} data\r\n */\n\n }, {\n key: 'updateProcessProperties',\n value: function updateProcessProperties(data) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n\n data.extensions.forEach(function (dataExtension) {\n dataExtension.$type = dataExtension.name;\n delete dataExtension.name;\n });\n\n var process = __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('process.get');\n\n if (!process) {\n return;\n }\n\n var original = Object.assign({}, data.original);\n for (var key in original) {\n process[key] = original[key];\n }\n\n var extensions = [];\n if (!process.extensionElements.values) {\n process.extensionElements.values = [];\n }\n process.extensionElements.values.forEach(function (shapeExtension) {\n var hasExtension = false;\n data.extensions.forEach(function (dataExtension) {\n if (dataExtension.$type === shapeExtension.$type) {\n hasExtension = true;\n }\n });\n if (!hasExtension) {\n extensions.push(shapeExtension);\n }\n });\n\n process.extensionElements.values = [].concat(extensions, _toConsumableArray(data.extensions));\n\n callback();\n }\n }, {\n key: 'updataLineStyle',\n value: function updataLineStyle(id, style) {\n this.draw.updataLineStyle(id, style);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.$container.remove();\n this.draw.cancel();\n __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('key.clear');\n __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].destroy();\n }\n\n /**\r\n * 导入Bpmn\r\n */\n\n }, {\n key: 'importBpmn',\n value: function importBpmn(xmlStr) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n\n var self = this;\n var fontLoadCheck = setInterval(function () {\n if (IS_FONTLOAD) {\n clearInterval(fontLoadCheck);\n __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('model.import', xmlStr, function (err, definitions) {\n if (err) {\n console.log(err);\n } else {\n self.draw.render(definitions);\n // self.exportBpmn(function(xmlStrUpdated) {\n // console.log('导出回调', xmlStrUpdated)\n // })\n // 执行回调\n callback();\n }\n });\n }\n }, 1000);\n }\n /**\r\n * 导出Bpmn\r\n */\n\n }, {\n key: 'exportBpmn',\n value: function exportBpmn() {\n var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};\n\n var self = this;\n var definitions = this.draw.designer.createDefinition();\n __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('model.export', definitions, function (err, xmlStrUpdated) {\n if (err) {\n console.log(err, xmlStrUpdated);\n }\n callback(xmlStrUpdated);\n });\n }\n }]);\n\n return BPDCore;\n}();\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (BPDCore);\n\nwindow.BPDCore = BPDCore;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiOS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zcmMvbWFpbi5qcz8xYzkwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiDlhaXlj6Pmlofku7ZcclxuICogQGF1dGhvciBjdGFua1xyXG4gKi9cclxuaW1wb3J0ICcuL2Fzc2V0cy9zdHlsZXMvYnBkLWNvcmUuc2NzcydcclxuXHJcbmltcG9ydCBldmVudEJ1cyBmcm9tICcuL2NvcmUvZXZlbnRCdXMnXHJcbmltcG9ydCBkcmF3IGZyb20gJy4vZHJhdy9kcmF3J1xyXG5cclxuaW1wb3J0ICQgZnJvbSAnLi91dGlscy9zbGltSlEnXHJcbmltcG9ydCBJZHMgZnJvbSAnLi91dGlscy9pZHMnXHJcbmltcG9ydCB7IGxvYWRGb250LCBzZXRFeHBvcnREYXRhIH0gZnJvbSAnLi91dGlscy91dGlscydcclxuXHJcbmltcG9ydCBCcG1uWE1MIGZyb20gJy4vZmVhdHVyZXMveG1sJ1xyXG5pbXBvcnQgQmFja2dyb3VuZCBmcm9tICcuL2ZlYXR1cmVzL2JhY2tncm91bmQnXHJcbmltcG9ydCBEaXJlY3Rpb24gZnJvbSAnLi9mZWF0dXJlcy9kaXJlY3Rpb24nXHJcbmltcG9ydCBTaGFwZUFuY2hvciBmcm9tICcuL2ZlYXR1cmVzL2FuY2hvcidcclxuaW1wb3J0IFNoYXBlU2VsZWN0IGZyb20gJy4vZmVhdHVyZXMvc2VsZWN0J1xyXG5pbXBvcnQgU2hhcGVEcmFnIGZyb20gJy4vZmVhdHVyZXMvZHJhZydcclxuaW1wb3J0IFNuYXBsaW5lIGZyb20gJy4vZmVhdHVyZXMvc25hcGxpbmUnXHJcbmltcG9ydCBUb29sdGlwIGZyb20gJy4vZmVhdHVyZXMvdG9vbHRpcCdcclxuaW1wb3J0IEdyb3VwUGFuZWwgZnJvbSAnLi9mZWF0dXJlcy9ncm91cC1wYW5lbCdcclxuaW1wb3J0IEhvdEtleSBmcm9tICcuL2ZlYXR1cmVzL2hvdGtleSdcclxuaW1wb3J0IEkxOG4gZnJvbSAnLi9mZWF0dXJlcy9pMThuJ1xyXG5cclxuLy8g5rWB56iL5Zu+5qih5p2/XHJcbmNvbnN0IERFRkFVTFRfREVGSU5JVElPTiA9XHJcbiAgJzw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PicgK1xyXG4gICc8YnBtbjpkZWZpbml0aW9ucyB4bWxuczp4c2k9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiICcgK1xyXG4gICd4bWxuczpicG1uPVwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9NT0RFTFwiICcgK1xyXG4gICd4bWxuczpicG1uZGk9XCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9CUE1OLzIwMTAwNTI0L0RJXCIgJyArXHJcbiAgJ3htbG5zOmRjPVwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvREQvMjAxMDA1MjQvRENcIiAnICtcclxuICAndGFyZ2V0TmFtZXNwYWNlPVwiaHR0cDovL2JwbW4uaW8vc2NoZW1hL2JwbW5cIicgK1xyXG4gICc+PC9icG1uOmRlZmluaXRpb25zPidcclxuXHJcbi8vIGNvbnN0IERFRkFVTFRfREVGSU5JVElPTiA9XHJcbi8vICc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz48YnBtbjpkZWZpbml0aW9ucyB4bWxuczp4c2k9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiIHhtbG5zOmJwbW49XCJodHRwOi8vd3d3Lm9tZy5vcmcvc3BlYy9CUE1OLzIwMTAwNTI0L01PREVMXCIgeG1sbnM6YnBtbmRpPVwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9ESVwiIHhtbG5zOmRjPVwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvREQvMjAxMDA1MjQvRENcIiB4bWxuczpkaT1cImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0RELzIwMTAwNTI0L0RJXCIgaWQ9XCJkZWZpbml0aW9uc18wa25pMmFtXCIgdGFyZ2V0TmFtZXNwYWNlPVwiaHR0cDovL2JwbW4uaW8vc2NoZW1hL2JwbW5cIj48YnBtbjpwcm9jZXNzIGlkPVwicHJvY2Vzc18wOXV0djJuXCI+PGJwbW46ZXh0ZW5zaW9uRWxlbWVudHMgLz48YnBtbjpzdGFydEV2ZW50IGlkPVwib2JqXzFuc3htZXRcIiBuYW1lPVwi5byA5aeL5LqL5Lu2XCI+PGJwbW46ZXh0ZW5zaW9uRWxlbWVudHMgLz48YnBtbjpvdXRnb2luZz5vYmpfMGUybjNlMDwvYnBtbjpvdXRnb2luZz48L2JwbW46c3RhcnRFdmVudD48YnBtbjp1c2VyVGFzayBpZD1cIm9ial8wZzJhM3A4XCIgbmFtZT1cIuS6uuW3peS7u+WKoVwiPjxicG1uOmV4dGVuc2lvbkVsZW1lbnRzPjx0OnRlc3QxPua1i+ivlTE8L3Q6dGVzdDE+PHQ6dGVzdDI+5rWL6K+VMjwvdDp0ZXN0Mj48L2JwbW46ZXh0ZW5zaW9uRWxlbWVudHM+PGJwbW46aW5jb21pbmc+b2JqXzBlMm4zZTA8L2JwbW46aW5jb21pbmc+PGJwbW46b3V0Z29pbmc+b2JqXzBneGRyM3g8L2JwbW46b3V0Z29pbmc+PC9icG1uOnVzZXJUYXNrPjxicG1uOmVuZEV2ZW50IGlkPVwib2JqXzBjcmR3OW9cIiBuYW1lPVwi57uT5p2f5LqL5Lu2XCI+PGJwbW46ZXh0ZW5zaW9uRWxlbWVudHMgLz48YnBtbjppbmNvbWluZz5vYmpfMGd4ZHIzeDwvYnBtbjppbmNvbWluZz48L2JwbW46ZW5kRXZlbnQ+PGJwbW46c2VxdWVuY2VGbG93IGlkPVwib2JqXzBlMm4zZTBcIiBuYW1lPVwiXCIgc291cmNlUmVmPVwib2JqXzFuc3htZXRcIiB0YXJnZXRSZWY9XCJvYmpfMGcyYTNwOFwiPjxicG1uOmV4dGVuc2lvbkVsZW1lbnRzIC8+PC9icG1uOnNlcXVlbmNlRmxvdz48YnBtbjpzZXF1ZW5jZUZsb3cgaWQ9XCJvYmpfMGd4ZHIzeFwiIG5hbWU9XCJcIiBzb3VyY2VSZWY9XCJvYmpfMGcyYTNwOFwiIHRhcmdldFJlZj1cIm9ial8wY3JkdzlvXCI+PGJwbW46ZXh0ZW5zaW9uRWxlbWVudHMgLz48L2JwbW46c2VxdWVuY2VGbG93PjwvYnBtbjpwcm9jZXNzPjxicG1uZGk6QlBNTkRpYWdyYW0gaWQ9XCJwcm9jZXNzXzA5dXR2Mm5fZGlcIj48YnBtbmRpOkJQTU5QbGFuZSBpZD1cInByb2Nlc3NfMDl1dHYybl9wbFwiIGJwbW5FbGVtZW50PVwicHJvY2Vzc18wOXV0djJuXCI+PGJwbW5kaTpCUE1OU2hhcGUgaWQ9XCJvYmpfMW5zeG1ldF9kaVwiIGJwbW5FbGVtZW50PVwib2JqXzFuc3htZXRcIj48ZGM6Qm91bmRzIHg9XCI3NFwiIHk9XCIxNzdcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiAvPjwvYnBtbmRpOkJQTU5TaGFwZT48YnBtbmRpOkJQTU5TaGFwZSBpZD1cIm9ial8wZzJhM3A4X2RpXCIgYnBtbkVsZW1lbnQ9XCJvYmpfMGcyYTNwOFwiPjxkYzpCb3VuZHMgeD1cIjE2N1wiIHk9XCIxNjJcIiB3aWR0aD1cIjEwMFwiIGhlaWdodD1cIjcwXCIgLz48L2JwbW5kaTpCUE1OU2hhcGU+PGJwbW5kaTpCUE1OU2hhcGUgaWQ9XCJvYmpfMGNyZHc5b19kaVwiIGJwbW5FbGVtZW50PVwib2JqXzBjcmR3OW9cIj48ZGM6Qm91bmRzIHg9XCIzMjJcIiB5PVwiMTc3XCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgLz48L2JwbW5kaTpCUE1OU2hhcGU+PGJwbW5kaTpCUE1ORWRnZSBpZD1cIm9ial8wZTJuM2UwX2RpXCIgYnBtbkVsZW1lbnQ9XCJvYmpfMGUybjNlMFwiPjxkaTp3YXlwb2ludCB4PVwiMTE0XCIgeT1cIjE5N1wiIC8+PGRpOndheXBvaW50IHg9XCIxNDAuNVwiIHk9XCIxOTdcIiAvPjxkaTp3YXlwb2ludCB4PVwiMTQwLjVcIiB5PVwiMTk3XCIgLz48ZGk6d2F5cG9pbnQgeD1cIjE2N1wiIHk9XCIxOTdcIiAvPjwvYnBtbmRpOkJQTU5FZGdlPjxicG1uZGk6QlBNTkVkZ2UgaWQ9XCJvYmpfMGd4ZHIzeF9kaVwiIGJwbW5FbGVtZW50PVwib2JqXzBneGRyM3hcIj48ZGk6d2F5cG9pbnQgeD1cIjI2N1wiIHk9XCIxOTdcIiAvPjxkaTp3YXlwb2ludCB4PVwiMjk0LjVcIiB5PVwiMTk3XCIgLz48ZGk6d2F5cG9pbnQgeD1cIjI5NC41XCIgeT1cIjE5N1wiIC8+PGRpOndheXBvaW50IHg9XCIzMjJcIiB5PVwiMTk3XCIgLz48L2JwbW5kaTpCUE1ORWRnZT48L2JwbW5kaTpCUE1OUGxhbmU+PC9icG1uZGk6QlBNTkRpYWdyYW0+PC9icG1uOmRlZmluaXRpb25zPidcclxuXHJcbi8vIOm7mOiupOWxnuaAp1xyXG5jb25zdCBERUZBVUxUX09QVElPTlMgPSB7XHJcbiAgaWRzOiBuZXcgSWRzKFszMiwgMzYsIDFdKSxcclxuICAvLyDlrrnlmahcclxuICBjb250YWluZXI6ICcnLFxyXG4gIC8vIOWuvVxyXG4gIHdpZHRoOiAnMTAwJScsXHJcbiAgLy8g6auYXHJcbiAgaGVpZ2h0OiAnMTAwJScsXHJcbiAgLy8g5q+U5L6LXHJcbiAgc2NhbGU6IDEsXHJcbiAgLy8g5Y+q6K+7XHJcbiAgcmVhZG9ubHk6IGZhbHNlLFxyXG4gIC8vIOmhtemdouagt+W8j1xyXG4gIHBhZ2VTdHlsZToge1xyXG4gICAgLy8g6IOM5pmv6ImyXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcyNTUsMjU1LDI1NScsXHJcbiAgICAvLyDpq5jluqZcclxuICAgIGhlaWdodDogMzAwMCxcclxuICAgIC8vIOWuveW6plxyXG4gICAgd2lkdGg6IDI1MDBcclxuICB9LFxyXG4gIC8vXHJcbiAgLy8gbG9jYWw6ICd6aF9UVycsXHJcbiAgLy8g5Yqf6IO96YWN572uXHJcbiAgY29uZmlnOiB7fSxcclxuICAvLyBicG1u5qC35byPXHJcbiAgYnBtblN0eWxlOiB7fSxcclxuICAvLyDlm77lvaLmoLflvI9cclxuICBzaGFwZVN0eWxlOiBbXSxcclxuICAvLyDmtYHnqIvlm77lrprkuYlcclxuICBkZWZpbml0aW9uOiBERUZBVUxUX0RFRklOSVRJT04gfHwgJycsXHJcbiAgLy8g5omp5bGV5bGe5oCnXHJcbiAgZXh0ZW5zaW9uczoge30sXHJcbiAgLy8g6L+H5rukXHJcbiAgZmlsdGVyOiBbXSxcclxuICAvLyDmlK/mjIHoioLngrlcclxuICBicG1uczogW1xyXG4gICAgJ1N0YXJ0RXZlbnQnLFxyXG4gICAgJ1VzZXJUYXNrJyxcclxuICAgICdTZXJ2aWNlVGFzaycsXHJcbiAgICAnUmVjZWl2ZVRhc2snLFxyXG4gICAgJ0NhbGxBY3Rpdml0eScsXHJcbiAgICAnRXhjbHVzaXZlR2F0ZXdheScsXHJcbiAgICAnSW5jbHVzaXZlR2F0ZXdheScsXHJcbiAgICAnUGFyYWxsZWxHYXRld2F5JyxcclxuICAgICdDb21wbGV4R2F0ZXdheScsXHJcbiAgICAnRW5kRXZlbnQnLFxyXG4gICAgJ1Rlcm1pbmF0ZUVuZEV2ZW50J1xyXG4gIF1cclxufVxyXG5cclxubGV0IElTX0ZPTlRMT0FEID0gZmFsc2VcclxuXHJcbi8qKlxyXG4gKiDliJvlu7rlrrnlmahcclxuICogQHBhcmFtIHsqfSBvcHRpb25zXHJcbiAqL1xyXG5jb25zdCBjcmVhdGVDb250YWluZXIgPSBvcHRpb25zID0+IHtcclxuICBjb25zdCBjb250YWluZXIgPSAkKG9wdGlvbnMuY29udGFpbmVyKVxyXG4gIGlmICghb3B0aW9ucy5jb250YWluZXIgfHwgY29udGFpbmVyLmxlbmd0aCA8PSAwKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBjb250YWluZXI6ICcgKyBvcHRpb25zLmNvbnRhaW5lcilcclxuICB9XHJcbiAgY29uc3QgZGVzaWduZXJCb3ggPSAkKFxyXG4gICAgJzxkaXYgY2xhc3M9XCJicGQtY29udGFpbmVyXCI+PGRpdiBjbGFzcz1cImJwZC1sYXlvdXRcIj48ZGl2IGNsYXNzPVwiYnBkLWRlc2lnbmVyXCI+PC9kaXY+PC9kaXY+PC9kaXY+J1xyXG4gIClcclxuICBkZXNpZ25lckJveC5jc3Moe1xyXG4gICAgd2lkdGg6IG9wdGlvbnMud2lkdGgsXHJcbiAgICBoZWlnaHQ6IG9wdGlvbnMuaGVpZ2h0LFxyXG4gICAgcG9zaXRpb246IG9wdGlvbnMucG9zaXRpb25cclxuICB9KVxyXG4gIGNvbnRhaW5lci5hcHBlbmQoZGVzaWduZXJCb3gpXHJcbiAgcmV0dXJuIGRlc2lnbmVyQm94XHJcbn1cclxuXHJcbmNsYXNzIEJQRENvcmUge1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xyXG4gICAgdGhpcy52ZXJzaW9uID0gJzAuMS40J1xyXG4gICAgLy8g6YWN572uXHJcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIG9wdGlvbnMpXHJcbiAgICAvLyDlrrnlmahcclxuICAgIHRoaXMuJGNvbnRhaW5lciA9IGNyZWF0ZUNvbnRhaW5lcih0aGlzLm9wdGlvbnMpXHJcbiAgICAvLyDlip/og71cclxuICAgIHRoaXMuZmVhdHVyZXMgPSB7XHJcbiAgICAgIC8vIOW/q+aNt+mUrlxyXG4gICAgICBIb3RLZXk6IG5ldyBIb3RLZXkoKSxcclxuICAgICAgLy8g5Zu96ZmF5YyWXHJcbiAgICAgIEkxOG46IG5ldyBJMThuKHRoaXMub3B0aW9ucy5sb2NhbCksXHJcbiAgICAgIC8vIHhtbFxyXG4gICAgICBCcG1uWE1MOiBuZXcgQnBtblhNTCh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyksXHJcbiAgICAgIC8vIOiDjOaZr1xyXG4gICAgICBCYWNrZ3JvdW5kOiBuZXcgQmFja2dyb3VuZChcclxuICAgICAgICB0aGlzLiRjb250YWluZXIsXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5jb25maWcuYmFja2dyb3VuZFxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucmVhZG9ubHkpIHtcclxuICAgICAgLy8g6ZSa54K5XHJcbiAgICAgIHRoaXMuZmVhdHVyZXMuQW5jaG9yID0gbmV3IFNoYXBlQW5jaG9yKFxyXG4gICAgICAgIHRoaXMuJGNvbnRhaW5lcixcclxuICAgICAgICB0aGlzLm9wdGlvbnMuY29uZmlnLmFuY2hvclxyXG4gICAgICApXHJcbiAgICAgIC8vIOWvuem9kFxyXG4gICAgICB0aGlzLmZlYXR1cmVzLlNuYXBsaW5lID0gbmV3IFNuYXBsaW5lKFxyXG4gICAgICAgIHRoaXMuJGNvbnRhaW5lcixcclxuICAgICAgICB0aGlzLm9wdGlvbnMuY29uZmlnLnNuYXBsaW5lXHJcbiAgICAgIClcclxuICAgICAgLy8g5rWB5ZCRXHJcbiAgICAgIHRoaXMuZmVhdHVyZXMuRGlyZWN0aW9uID0gbmV3IERpcmVjdGlvbihcclxuICAgICAgICB0aGlzLiRjb250YWluZXIsXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmNvbmZpZy5kaXJlY3Rpb25cclxuICAgICAgKVxyXG4gICAgICAvLyDpgInmi6lcclxuICAgICAgdGhpcy5mZWF0dXJlcy5TZWxlY3QgPSBuZXcgU2hhcGVTZWxlY3QoXHJcbiAgICAgICAgdGhpcy4kY29udGFpbmVyLFxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5jb25maWcuc2VsZWN0XHJcbiAgICAgIClcclxuICAgICAgLy8g5o+Q56S6XHJcbiAgICAgIHRoaXMuZmVhdHVyZXMuVG9vbHRpcCA9IG5ldyBUb29sdGlwKFxyXG4gICAgICAgIHRoaXMuJGNvbnRhaW5lcixcclxuICAgICAgICB0aGlzLm9wdGlvbnMuY29uZmlnLnRvb2x0aXBcclxuICAgICAgKVxyXG4gICAgICAvLyDmi5bliqhcclxuICAgICAgdGhpcy5mZWF0dXJlcy5EcmFnID0gbmV3IFNoYXBlRHJhZyh0aGlzLm9wdGlvbnMsIHRoaXMuJGNvbnRhaW5lcilcclxuICAgICAgLy8g57uE6Z2i5p2/XHJcbiAgICAgIHRoaXMuZmVhdHVyZXMuR3JvdXBQYW5lbCA9IG5ldyBHcm91cFBhbmVsKHRoaXMuJGNvbnRhaW5lciwgdGhpcy5vcHRpb25zKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOe7mOWbvlxyXG4gICAgdGhpcy5kcmF3ID0gZHJhdyh0aGlzLm9wdGlvbnMsIHRoaXMuJGNvbnRhaW5lcilcclxuXHJcbiAgICAvLyDmo4Dmn6XlrZfkvZPovb3lhaVcclxuICAgIGxvYWRGb250KCdicG1uJywgKCkgPT4ge1xyXG4gICAgICBJU19GT05UTE9BRCA9IHRydWVcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5pbml0KClcclxuICB9XHJcblxyXG4gIGluaXQoY2FsbGJhY2sgPSAoKSA9PiB7fSkge1xyXG4gICAgdGhpcy5pbXBvcnRCcG1uKHRoaXMub3B0aW9ucy5kZWZpbml0aW9uLCBjYWxsYmFjaylcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWIm+W7uuWbvuW9olxyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XHJcbiAgICovXHJcbiAgY3JlYXRlU2hhcGUoZXZlbnQsIGNhbGxiYWNrID0gKCkgPT4ge30pIHtcclxuICAgIGNvbnN0IHRhcmdldCA9ICQoZXZlbnQudGFyZ2V0KVxyXG4gICAgaWYgKHRhcmdldC5oYXNDbGFzcygncmVhZG9ubHknKSB8fCB0aGlzLm9wdGlvbnMucmVhZG9ubHkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBjb25zdCBzaGFwZU5hbWUgPSB0YXJnZXQuYXR0cignc2hhcGVOYW1lJylcclxuICAgIGlmICghc2hhcGVOYW1lIHx8IHNoYXBlTmFtZSA9PT0gJycpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaGFwZU5hbWUgZXJyb3InKVxyXG4gICAgfVxyXG4gICAgdGhpcy5kcmF3LmNyZWF0ZVNoYXBlKHNoYXBlTmFtZSwgY2FsbGJhY2spXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDojrflj5blhajpg6jlhYPntKBcclxuICAgKi9cclxuICBnZXRBbGxFbGVtZW50KCkge1xyXG4gICAgY29uc3QgZWxlbWVudHMgPSBbXVxyXG4gICAgY29uc3QgZWxlbWVudE9iaiA9IGV2ZW50QnVzLnRyaWdnZXIoJ2VsZW1lbnQuZ2V0JylcclxuICAgIGZvciAobGV0IGlkIGluIGVsZW1lbnRPYmopIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IHNldEV4cG9ydERhdGEoZWxlbWVudE9ialtpZF0pXHJcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudClcclxuICAgIH1cclxuICAgIHJldHVybiBlbGVtZW50c1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W5qC55YWD57SgXHJcbiAgICovXHJcbiAgZ2V0Um9vdEVsZW1lbnQoKSB7XHJcbiAgICBsZXQgcm9vdCA9IGV2ZW50QnVzLnRyaWdnZXIoJ3Byb2Nlc3MuZ2V0JylcclxuICAgIGlmIChyb290KSB7XHJcbiAgICAgIHJldHVybiBzZXRFeHBvcnREYXRhKHJvb3QpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5qC55o2u57G75Z6L6I635Y+W6YCJ5Lit5YWD57Sg5LmL5YmN55qE5YWD57SgXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gYnBtblxyXG4gICAqL1xyXG4gIGdldEZyb250RWxlbWVudHNCeUJwbW4oZWxlbWVudCwgYnBtbikge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0RnJvbnRFbGVtZW50cyhcclxuICAgICAgZXZlbnRCdXMudHJpZ2dlcignZWxlbWVudC5nZXQnLCBlbGVtZW50LmlkKVxyXG4gICAgKS5maWx0ZXIoZWxlbWVudCA9PiBlbGVtZW50LmJwbW5OYW1lID09PSBicG1uKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W6YCJ5Lit5YWD57Sg5LmL5YmN55qE5YWD57SgXHJcbiAgICogQHBhcmFtIHtPYmplY3R9IGVsZW1lbnRcclxuICAgKiBAcmV0dXJuIHtPYmplY3R9IOmAieS4reWFg+e0oOWJjeS4gOS4quiKgueCueWFg+e0oFxyXG4gICAqL1xyXG4gIGdldEZyb250RWxlbWVudChlbGVtZW50KSB7XHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWxlY3QgZWxlbWVudCBlcnJvcicpXHJcbiAgICB9XHJcbiAgICBsZXQgZnJvbnRFbGVtZW50ID0gbnVsbFxyXG4gICAgY29uc3QgZnJvbnRFbGVtZW50cyA9IHRoaXMuZ2V0RnJvbnRFbGVtZW50cyhcclxuICAgICAgZXZlbnRCdXMudHJpZ2dlcignZWxlbWVudC5nZXQnLCBlbGVtZW50LmlkKVxyXG4gICAgKVxyXG4gICAgZnJvbnRFbGVtZW50cy5mb3JFYWNoKGVsZSA9PiB7XHJcbiAgICAgIGlmICghZnJvbnRFbGVtZW50ICYmIGVsZS5icG1uTmFtZSAhPT0gJ1NlcXVlbmNlRmxvdycpIHtcclxuICAgICAgICBmcm9udEVsZW1lbnQgPSBlbGVcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJldHVybiBmcm9udEVsZW1lbnRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiOt+WPlumAieS4reWFg+e0oOS5i+WJjeeahOWFqOmDqOWFg+e0oFxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBlbGVtZW50XHJcbiAgICovXHJcbiAgZ2V0RnJvbnRFbGVtZW50cyhlbGVtZW50KSB7XHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWxlY3QgZWxlbWVudCBlcnJvcicpXHJcbiAgICB9XHJcbiAgICBjb25zdCBnZXRGcm9udCA9IChlbGVtZW50cywgZnJvbnRzID0gW10sIGlzU3RhcnQgPSBmYWxzZSkgPT4ge1xyXG4gICAgICBjb25zdCBlbGVtcyA9IFtdXHJcbiAgICAgIGlmICghaXNTdGFydCkge1xyXG4gICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlID0+IHtcclxuICAgICAgICAgIGlmIChlbGUuc2hhcGUuYnBtbk5hbWUgPT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGUuZGF0YS5zb3VyY2VSZWYgJiYgZWxlLnNvdXJjZVJlZiAhPT0gJycpIHtcclxuICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID1cclxuICAgICAgICAgICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2VsZW1lbnQuZ2V0JywgZWxlLmRhdGEuc291cmNlUmVmKSB8fCBbXVxyXG4gICAgICAgICAgICAgIGxldCBoYXNFbGVtZW50ID0gZmFsc2VcclxuICAgICAgICAgICAgICBmcm9udHMuZm9yRWFjaChlbGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZS5kYXRhLmlkID09PSBlbGVtZW50LmRhdGEuaWQpIHtcclxuICAgICAgICAgICAgICAgICAgaGFzRWxlbWVudCA9IHRydWVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIGlmICghaGFzRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbXMucHVzaChlbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgZnJvbnRzLnB1c2goZWxlbWVudClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmtlcklkcyA9XHJcbiAgICAgICAgICAgICAgZXZlbnRCdXMudHJpZ2dlcignY29ubmVjdGlvbnMuZ2V0JywgZWxlLmRhdGEuaWQpIHx8IFtdXHJcbiAgICAgICAgICAgIGxpbmtlcklkcy5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5rZXIgPSBldmVudEJ1cy50cmlnZ2VyKCdlbGVtZW50LmdldCcsIGlkKVxyXG4gICAgICAgICAgICAgIGlmIChsaW5rZXIuZGF0YS50YXJnZXRSZWYgPT09IGVsZS5kYXRhLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGFzRWxlbWVudCA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICBmcm9udHMuZm9yRWFjaChlbGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZWxlLmRhdGEuaWQgPT09IGxpbmtlci5kYXRhLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzRWxlbWVudCA9IHRydWVcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIGlmICghaGFzRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICBlbGVtcy5wdXNoKGxpbmtlcilcclxuICAgICAgICAgICAgICAgICAgZnJvbnRzLnB1c2gobGlua2VyKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBpZiAoZWxlbXMubGVuZ3RoIDw9IDApIHtcclxuICAgICAgICAgIHJldHVybiBnZXRGcm9udChlbGVtcywgZnJvbnRzLCB0cnVlKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gZ2V0RnJvbnQoZWxlbXMsIGZyb250cylcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZyb250c1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBmcm9udEVsZW1lbnRzID0gZ2V0RnJvbnQoW2VsZW1lbnRdKVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJvbnRFbGVtZW50cy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICBmcm9udEVsZW1lbnRzW2ldID0gc2V0RXhwb3J0RGF0YShmcm9udEVsZW1lbnRzW2ldKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZyb250RWxlbWVudHNcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOabtOaWsOWFg+e0oOWxnuaAp1xyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBpZFxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXHJcbiAgICovXHJcbiAgdXBkYXRlUHJvcGVydGllcyhpZCwgZGF0YSwgY2FsbGJhY2sgPSAoKSA9PiB7fSkge1xyXG4gICAgZGF0YS5leHRlbnNpb25zLmZvckVhY2goZGF0YUV4dGVuc2lvbiA9PiB7XHJcbiAgICAgIGRhdGFFeHRlbnNpb24uJHR5cGUgPSBkYXRhRXh0ZW5zaW9uLm5hbWVcclxuICAgICAgZGVsZXRlIGRhdGFFeHRlbnNpb24ubmFtZVxyXG4gICAgfSlcclxuXHJcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnRCdXMudHJpZ2dlcignZWxlbWVudC5nZXQnLCBpZClcclxuXHJcbiAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb3JpZ2luYWwgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhLm9yaWdpbmFsKVxyXG4gICAgZm9yIChsZXQga2V5IGluIG9yaWdpbmFsKSB7XHJcbiAgICAgIGVsZW1lbnQuZGF0YVtrZXldID0gb3JpZ2luYWxba2V5XVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHsgZXh0ZW5zaW9uRWxlbWVudHMgfSA9IGVsZW1lbnQuZGF0YVxyXG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IFtdXHJcbiAgICBpZiAoIWV4dGVuc2lvbkVsZW1lbnRzLnZhbHVlcykge1xyXG4gICAgICBleHRlbnNpb25FbGVtZW50cy52YWx1ZXMgPSBbXVxyXG4gICAgfVxyXG4gICAgZXh0ZW5zaW9uRWxlbWVudHMudmFsdWVzLmZvckVhY2goc2hhcGVFeHRlbnNpb24gPT4ge1xyXG4gICAgICBsZXQgaGFzRXh0ZW5zaW9uID0gZmFsc2VcclxuICAgICAgZGF0YS5leHRlbnNpb25zLmZvckVhY2goZGF0YUV4dGVuc2lvbiA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGFFeHRlbnNpb24uJHR5cGUgPT09IHNoYXBlRXh0ZW5zaW9uLiR0eXBlKSB7XHJcbiAgICAgICAgICBoYXNFeHRlbnNpb24gPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBpZiAoIWhhc0V4dGVuc2lvbikge1xyXG4gICAgICAgIGV4dGVuc2lvbnMucHVzaChzaGFwZUV4dGVuc2lvbilcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBleHRlbnNpb25FbGVtZW50cy52YWx1ZXMgPSBbLi4uZXh0ZW5zaW9ucywgLi4uZGF0YS5leHRlbnNpb25zXVxyXG5cclxuICAgIGlmIChlbGVtZW50LnNoYXBlLmJwbW5OYW1lID09PSAnU2VxdWVuY2VGbG93Jykge1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXZlbnRCdXMudHJpZ2dlcignc2hhcGUucmVuZGVyJywge1xyXG4gICAgICAgIHR5cGU6IGVsZW1lbnQuc2hhcGUuYnBtbk5hbWUsXHJcbiAgICAgICAgZWxlbWVudFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGNhbGxiYWNrKClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOabtOaWsOa1geeoi+WxnuaApyznm67liY3ku4XmlK/mjIHmoIfpopjlkozmianlsZXlsZ7mgKdcclxuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxyXG4gICAqL1xyXG4gIHVwZGF0ZVByb2Nlc3NQcm9wZXJ0aWVzKGRhdGEsIGNhbGxiYWNrID0gKCkgPT4ge30pIHtcclxuICAgIGRhdGEuZXh0ZW5zaW9ucy5mb3JFYWNoKGRhdGFFeHRlbnNpb24gPT4ge1xyXG4gICAgICBkYXRhRXh0ZW5zaW9uLiR0eXBlID0gZGF0YUV4dGVuc2lvbi5uYW1lXHJcbiAgICAgIGRlbGV0ZSBkYXRhRXh0ZW5zaW9uLm5hbWVcclxuICAgIH0pXHJcblxyXG4gICAgY29uc3QgcHJvY2VzcyA9IGV2ZW50QnVzLnRyaWdnZXIoJ3Byb2Nlc3MuZ2V0JylcclxuXHJcbiAgICBpZiAoIXByb2Nlc3MpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb3JpZ2luYWwgPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhLm9yaWdpbmFsKVxyXG4gICAgZm9yIChsZXQga2V5IGluIG9yaWdpbmFsKSB7XHJcbiAgICAgIHByb2Nlc3Nba2V5XSA9IG9yaWdpbmFsW2tleV1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBleHRlbnNpb25zID0gW11cclxuICAgIGlmICghcHJvY2Vzcy5leHRlbnNpb25FbGVtZW50cy52YWx1ZXMpIHtcclxuICAgICAgcHJvY2Vzcy5leHRlbnNpb25FbGVtZW50cy52YWx1ZXMgPSBbXVxyXG4gICAgfVxyXG4gICAgcHJvY2Vzcy5leHRlbnNpb25FbGVtZW50cy52YWx1ZXMuZm9yRWFjaChzaGFwZUV4dGVuc2lvbiA9PiB7XHJcbiAgICAgIGxldCBoYXNFeHRlbnNpb24gPSBmYWxzZVxyXG4gICAgICBkYXRhLmV4dGVuc2lvbnMuZm9yRWFjaChkYXRhRXh0ZW5zaW9uID0+IHtcclxuICAgICAgICBpZiAoZGF0YUV4dGVuc2lvbi4kdHlwZSA9PT0gc2hhcGVFeHRlbnNpb24uJHR5cGUpIHtcclxuICAgICAgICAgIGhhc0V4dGVuc2lvbiA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGlmICghaGFzRXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgZXh0ZW5zaW9ucy5wdXNoKHNoYXBlRXh0ZW5zaW9uKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIHByb2Nlc3MuZXh0ZW5zaW9uRWxlbWVudHMudmFsdWVzID0gWy4uLmV4dGVuc2lvbnMsIC4uLmRhdGEuZXh0ZW5zaW9uc11cclxuXHJcbiAgICBjYWxsYmFjaygpXHJcbiAgfVxyXG5cclxuICB1cGRhdGFMaW5lU3R5bGUoaWQsIHN0eWxlKSB7XHJcbiAgICB0aGlzLmRyYXcudXBkYXRhTGluZVN0eWxlKGlkLCBzdHlsZSlcclxuICB9XHJcblxyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLiRjb250YWluZXIucmVtb3ZlKClcclxuICAgIHRoaXMuZHJhdy5jYW5jZWwoKVxyXG4gICAgZXZlbnRCdXMudHJpZ2dlcigna2V5LmNsZWFyJylcclxuICAgIGV2ZW50QnVzLmRlc3Ryb3koKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5a+85YWlQnBtblxyXG4gICAqL1xyXG4gIGltcG9ydEJwbW4oeG1sU3RyLCBjYWxsYmFjayA9ICgpID0+IHt9KSB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpc1xyXG4gICAgbGV0IGZvbnRMb2FkQ2hlY2sgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIGlmIChJU19GT05UTE9BRCkge1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoZm9udExvYWRDaGVjaylcclxuICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCdtb2RlbC5pbXBvcnQnLCB4bWxTdHIsIChlcnIsIGRlZmluaXRpb25zKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNlbGYuZHJhdy5yZW5kZXIoZGVmaW5pdGlvbnMpXHJcbiAgICAgICAgICAgIC8vIHNlbGYuZXhwb3J0QnBtbihmdW5jdGlvbih4bWxTdHJVcGRhdGVkKSB7XHJcbiAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ+WvvOWHuuWbnuiwgycsIHhtbFN0clVwZGF0ZWQpXHJcbiAgICAgICAgICAgIC8vIH0pXHJcbiAgICAgICAgICAgIC8vIOaJp+ihjOWbnuiwg1xyXG4gICAgICAgICAgICBjYWxsYmFjaygpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSwgMTAwMClcclxuICB9XHJcbiAgLyoqXHJcbiAgICog5a+85Ye6QnBtblxyXG4gICAqL1xyXG4gIGV4cG9ydEJwbW4oY2FsbGJhY2sgPSAoKSA9PiB7fSkge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXNcclxuICAgIGNvbnN0IGRlZmluaXRpb25zID0gdGhpcy5kcmF3LmRlc2lnbmVyLmNyZWF0ZURlZmluaXRpb24oKVxyXG4gICAgZXZlbnRCdXMudHJpZ2dlcignbW9kZWwuZXhwb3J0JywgZGVmaW5pdGlvbnMsIChlcnIsIHhtbFN0clVwZGF0ZWQpID0+IHtcclxuICAgICAgaWYgKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVyciwgeG1sU3RyVXBkYXRlZClcclxuICAgICAgfVxyXG4gICAgICBjYWxsYmFjayh4bWxTdHJVcGRhdGVkKVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJQRENvcmVcclxuXHJcbndpbmRvdy5CUERDb3JlID0gQlBEQ29yZVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL21haW4uanMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFwQ0E7QUFDQTtBQWtEQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQUNBO0FBY0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUlBO0FBQ0E7QUFJQTtBQUNBO0FBSUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBSUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBS0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQUtBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBaEJBO0FBQ0E7QUFpQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQUlBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQUdBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///9\n"); + +/***/ }), +/* 10 */ +/***/ (function(module, exports) { + +eval("// removed by extract-text-webpack-plugin//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTAuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXNzZXRzL3N0eWxlcy9icGQtY29yZS5zY3NzP2JhOTEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gcmVtb3ZlZCBieSBleHRyYWN0LXRleHQtd2VicGFjay1wbHVnaW5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9hc3NldHMvc3R5bGVzL2JwZC1jb3JlLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///10\n"); + +/***/ }), +/* 11 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_designer__ = __webpack_require__(12);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__operation__ = __webpack_require__(13);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__drawShape__ = __webpack_require__(14);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__drawConnection__ = __webpack_require__(26);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__drawUtils__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__utils_utils__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__utils_slimJQ__ = __webpack_require__(3);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar Draw = function (_Operation) {\n _inherits(Draw, _Operation);\n\n function Draw(options, $container) {\n _classCallCheck(this, Draw);\n\n var _this = _possibleConstructorReturn(this, (Draw.__proto__ || Object.getPrototypeOf(Draw)).call(this));\n\n _this.options = options;\n\n _this.$container = $container;\n // 流程定义对象\n _this.definitions = null;\n\n // 设计器\n _this.designer = Object(__WEBPACK_IMPORTED_MODULE_1__core_designer__[\"a\" /* default */])(_this.options, _this.$container, _this.definitions);\n\n _this.drawShape = new __WEBPACK_IMPORTED_MODULE_3__drawShape__[\"a\" /* default */](_this.options, _this.$container);\n\n _this.drawConnection = new __WEBPACK_IMPORTED_MODULE_4__drawConnection__[\"a\" /* default */](_this.options, _this.$container);\n _this.init();\n return _this;\n }\n\n _createClass(Draw, [{\n key: 'init',\n value: function init() {\n if (!this.options.readonly) {\n this.$container.off('mousemove.operate').on('mousemove.operate', this.move.bind(this));\n }\n // 创建图形\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.create', this.createShapeData.bind(this));\n // 渲染图形\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.render', this.renderShape.bind(this));\n // 渲染路径\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.renderPath', this.renderShapePath.bind(this));\n // 删除图形\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.remove', this.removeShape.bind(this));\n // 渲染连线\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('connection.render', this.renderConnection.bind(this));\n // 渲染连线\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('connection.move', this.moveConnection.bind(this));\n // 删除事件\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('key.bind', {\n key: 'Delete',\n fun: function fun() {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.remove');\n }\n });\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('key.bind', {\n key: 'BackSpace',\n fun: function fun() {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.remove');\n }\n });\n }\n /**\r\n * 创建图形数据\r\n */\n\n }, {\n key: 'createShapeData',\n value: function createShapeData(_ref) {\n var type = _ref.type,\n element = _ref.element;\n\n if (type === 'SequenceFlow') {\n element.shape = this.drawConnection.createConnection(element);\n } else {\n element.shape = this.drawShape.createShape(type, element);\n }\n return element;\n }\n /**\r\n * 渲染\r\n * @param {*} definitions\r\n */\n\n }, {\n key: 'render',\n value: function render(definitions) {\n if (definitions === '') {\n console.log('流程定义为空', 'error');\n return;\n }\n\n this.designer.removeShapes();\n\n this.designer.definitions = this.definitions = definitions;\n var _definitions = this.definitions,\n diagrams = _definitions.diagrams,\n rootElements = _definitions.rootElements;\n\n var elements = {};\n\n if (!rootElements) {\n this.designer.setProcessModel();\n } else {\n rootElements.forEach(function (root, index) {\n if (root.flowElements) {\n root.flowElements.forEach(function (element, elementIndex) {\n var planeElement = diagrams[index].plane.planeElement;\n if (planeElement && planeElement.length > 0) {\n planeElement.forEach(function (plane, planeIndex) {\n if (plane.id === element.id + '_di') {\n var data = Object(__WEBPACK_IMPORTED_MODULE_6__utils_utils__[\"c\" /* cloneDeep */])(element);\n if (element.extensionElements) {\n data.extensionElements.values = element.extensionElements.values || [];\n }\n var type = Object(__WEBPACK_IMPORTED_MODULE_6__utils_utils__[\"e\" /* getBpmnNameByType */])(element.$type);\n if (type !== 'SequenceFlow') {\n data.incoming = element.incoming ? element.incoming.id : '';\n data.outgoing = element.outgoing ? element.outgoing.id : '';\n } else {\n data.sourceRef = element.sourceRef ? element.sourceRef.id : '';\n data.targetRef = element.targetRef ? element.targetRef.id : '';\n }\n elements[element.id] = {\n data: data,\n plane: Object(__WEBPACK_IMPORTED_MODULE_6__utils_utils__[\"c\" /* cloneDeep */])(plane)\n };\n }\n });\n }\n });\n }\n });\n }\n\n // 渲染页面\n this.renderPage();\n\n var shapeCount = 0;\n\n // 渲染图形\n for (var id in elements) {\n var element = elements[id];\n var type = Object(__WEBPACK_IMPORTED_MODULE_6__utils_utils__[\"e\" /* getBpmnNameByType */])(element.data.$type);\n if (type !== 'SequenceFlow') {\n this.renderShape({ type: type, element: element });\n this.designer.addData(element, false);\n }\n shapeCount++;\n }\n\n // 渲染连线\n for (var _id in elements) {\n var _element = elements[_id];\n var _type = Object(__WEBPACK_IMPORTED_MODULE_6__utils_utils__[\"e\" /* getBpmnNameByType */])(_element.data.$type);\n if (_type === 'SequenceFlow') {\n this.renderConnection({ element: _element });\n this.designer.addData(_element, false);\n }\n }\n\n if (shapeCount === 0) {\n this.designer.build();\n }\n }\n /**\r\n * 渲染页面\r\n */\n\n }, {\n key: 'renderPage',\n value: function renderPage() {\n var pageStyle = this.options.pageStyle;\n\n var pageWidth = pageStyle.width;\n var pageHeight = pageStyle.height;\n var pageBackGroundColor = pageStyle.backgroundColor;\n var darkerBGColor = __WEBPACK_IMPORTED_MODULE_5__drawUtils__[\"a\" /* default */].getDarkerColor(pageBackGroundColor);\n var darkestBGColor = __WEBPACK_IMPORTED_MODULE_5__drawUtils__[\"a\" /* default */].getDarkestColor(pageBackGroundColor);\n this.$container.find('.bpd-designer').css({\n 'background-color': 'rgb(' + darkerBGColor + ')'\n });\n this.$container.find('.bpd-layout').css({\n width: pageWidth,\n height: pageHeight\n });\n }\n\n /**\r\n * 渲染图形\r\n * @param {*} type\r\n * @param {*} element\r\n */\n\n }, {\n key: 'renderShape',\n value: function renderShape(_ref2) {\n var type = _ref2.type,\n element = _ref2.element;\n\n this.drawShape.render(type, element);\n }\n\n /**\r\n * 渲染路径\r\n * @param {*} data\r\n */\n\n }, {\n key: 'renderShapePath',\n value: function renderShapePath(_ref3) {\n var shape2D = _ref3.shape2D,\n element = _ref3.element,\n render = _ref3.render;\n\n this.drawShape.renderShapePath(shape2D, element, render);\n }\n\n /**\r\n * 渲染连线\r\n * @param {*} type\r\n * @param {*} shapeData\r\n */\n\n }, {\n key: 'renderConnection',\n value: function renderConnection(_ref4) {\n var element = _ref4.element,\n rendered = _ref4.rendered;\n\n this.drawConnection.render(element, rendered);\n }\n }, {\n key: 'moveConnection',\n value: function moveConnection(_ref5) {\n var element = _ref5.element,\n type = _ref5.type,\n x = _ref5.x,\n y = _ref5.y;\n\n this.drawConnection.move(element, type, x, y);\n }\n }, {\n key: 'updataLineStyle',\n value: function updataLineStyle(id, style) {\n if (id) {\n var element = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get', id);\n if (element.shape.bpmnName === 'SequenceFlow') {} else {\n element.shape.lightStyle = { lineStyle: style };\n console.log(element);\n this.drawShape.renderShape(element);\n }\n } else {\n var elements = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get');\n for (var _id2 in elements) {\n var _element2 = elements[_id2];\n if (_element2.shape.bpmnName === 'SequenceFlow') {} else {\n _element2.shape.lightStyle = {};\n this.drawShape.renderShape(_element2);\n }\n }\n }\n }\n\n /**\r\n * 删除图形\r\n * @param {} shapes\r\n */\n\n }, {\n key: 'removeShape',\n value: function removeShape(elements, isRemove) {\n var _this2 = this;\n\n if (!elements) {\n elements = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.get');\n }\n\n if (typeof isRemove === 'undefined') {\n isRemove = true;\n }\n if (isRemove) {\n elements = this.beforeRemove(elements);\n }\n\n var newShapes = [];\n var changedIds = [];\n var parentShapes = [];\n var range = [];\n var connections = [];\n\n if (elements.length === 0) {\n return false;\n }\n\n elements.forEach(function (element) {\n if (element.shape.bpmnName === 'SequenceFlow') {\n connections.push(element.data.id);\n } else {\n range.push(element.data.id);\n }\n });\n\n elements.forEach(function (element) {\n newShapes.push(Object(__WEBPACK_IMPORTED_MODULE_6__utils_utils__[\"c\" /* cloneDeep */])(element));\n\n var data = element.data,\n shape = element.shape;\n\n\n _this2.$container.find('.shape-box[data-id=\"' + data.id + '\"]').remove();\n\n delete _this2.designer.elements[data.id];\n\n if (shape.bpmnName === 'SequenceFlow') {\n if (data.sourceRef != null) {\n //\n }\n if (data.targetRef != null) {\n //\n }\n } else {\n if (shape.parent && range.indexOf(shape.parent) < 0) {\n //\n }\n\n var connectionIds = _this2.designer.connections[data.id];\n if (connectionIds && connectionIds.length > 0) {\n for (var i = 0; i < connectionIds.length; i++) {\n var connection = connectionIds[i];\n if (connections.indexOf(connection) < 0) {\n var connectionElement = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get', connection);\n if (connectionElement.data.sourceRef != null && connectionElement.data.sourceRef === data.id) {\n connectionElement.data.sourceRef = null;\n }\n if (connectionElement.data.targetRef != null && connectionElement.data.targetRef === data.id) {\n connectionElement.data.targetRef = null;\n }\n }\n }\n }\n\n delete _this2.designer.connections[data.id];\n }\n });\n\n this.designer.build();\n\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.remove');\n\n return true;\n }\n\n /**\r\n * 创建图形数据\r\n */\n\n }, {\n key: 'createShape',\n value: function createShape(type) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n\n var element = null;\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('data.create', type, function (data) {\n element = data;\n callback(element);\n });\n }\n\n /**\r\n * 删除前事件\r\n */\n\n }, {\n key: 'beforeRemove',\n value: function beforeRemove(elements) {\n var temp = {};\n for (var i = 0; i < elements.length; i += 1) {\n var element = elements[i];\n temp[element.data.id] = element;\n }\n elements = [];\n for (var id in temp) {\n elements.push(temp[id]);\n }\n return elements;\n }\n\n /**\r\n * 删除后事件\r\n */\n\n }, {\n key: 'removed',\n value: function removed(event) {}\n }]);\n\n return Draw;\n}(__WEBPACK_IMPORTED_MODULE_2__operation__[\"a\" /* default */]);\n\nvar instance = function instance(options, $container) {\n return new Draw(options, $container);\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (instance);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTEuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvZHJhdy5qcz8zYzc5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBldmVudEJ1cyBmcm9tICcuLi9jb3JlL2V2ZW50QnVzJ1xyXG5pbXBvcnQgZGVzaWduZXIgZnJvbSAnLi4vY29yZS9kZXNpZ25lcidcclxuXHJcbmltcG9ydCBPcGVyYXRpb24gZnJvbSAnLi9vcGVyYXRpb24nXHJcblxyXG5pbXBvcnQgRHJhd1NoYXBlIGZyb20gJy4vZHJhd1NoYXBlJ1xyXG5pbXBvcnQgRHJhd0Nvbm5lY3Rpb24gZnJvbSAnLi9kcmF3Q29ubmVjdGlvbidcclxuaW1wb3J0IERyYXdVdGlscyBmcm9tICcuL2RyYXdVdGlscydcclxuXHJcbmltcG9ydCB7XHJcbiAgY2xvbmVEZWVwLFxyXG4gIHJlc3RvcmVTY2FsZSxcclxuICBnZXRCcG1uTmFtZUJ5VHlwZSxcclxuICBjb252ZXJ0Rmlyc3RMZXR0ZXIsXHJcbiAgc2V0RXhwb3J0RXh0ZW5zaW9uc1xyXG59IGZyb20gJy4uL3V0aWxzL3V0aWxzJ1xyXG5pbXBvcnQgJCBmcm9tICcuLi91dGlscy9zbGltSlEnXHJcblxyXG5jbGFzcyBEcmF3IGV4dGVuZHMgT3BlcmF0aW9uIHtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zLCAkY29udGFpbmVyKSB7XHJcbiAgICBzdXBlcigpXHJcblxyXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xyXG5cclxuICAgIHRoaXMuJGNvbnRhaW5lciA9ICRjb250YWluZXJcclxuICAgIC8vIOa1geeoi+WumuS5ieWvueixoVxyXG4gICAgdGhpcy5kZWZpbml0aW9ucyA9IG51bGxcclxuXHJcbiAgICAvLyDorr7orqHlmahcclxuICAgIHRoaXMuZGVzaWduZXIgPSBkZXNpZ25lcih0aGlzLm9wdGlvbnMsIHRoaXMuJGNvbnRhaW5lciwgdGhpcy5kZWZpbml0aW9ucylcclxuXHJcbiAgICB0aGlzLmRyYXdTaGFwZSA9IG5ldyBEcmF3U2hhcGUodGhpcy5vcHRpb25zLCB0aGlzLiRjb250YWluZXIpXHJcblxyXG4gICAgdGhpcy5kcmF3Q29ubmVjdGlvbiA9IG5ldyBEcmF3Q29ubmVjdGlvbih0aGlzLm9wdGlvbnMsIHRoaXMuJGNvbnRhaW5lcilcclxuICAgIHRoaXMuaW5pdCgpXHJcbiAgfVxyXG4gIGluaXQoKSB7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5yZWFkb25seSkge1xyXG4gICAgICB0aGlzLiRjb250YWluZXJcclxuICAgICAgICAub2ZmKCdtb3VzZW1vdmUub3BlcmF0ZScpXHJcbiAgICAgICAgLm9uKCdtb3VzZW1vdmUub3BlcmF0ZScsIHRoaXMubW92ZS5iaW5kKHRoaXMpKVxyXG4gICAgfVxyXG4gICAgLy8g5Yib5bu65Zu+5b2iXHJcbiAgICBldmVudEJ1cy5vbignc2hhcGUuY3JlYXRlJywgdGhpcy5jcmVhdGVTaGFwZURhdGEuYmluZCh0aGlzKSlcclxuICAgIC8vIOa4suafk+WbvuW9olxyXG4gICAgZXZlbnRCdXMub24oJ3NoYXBlLnJlbmRlcicsIHRoaXMucmVuZGVyU2hhcGUuYmluZCh0aGlzKSlcclxuICAgIC8vIOa4suafk+i3r+W+hFxyXG4gICAgZXZlbnRCdXMub24oJ3NoYXBlLnJlbmRlclBhdGgnLCB0aGlzLnJlbmRlclNoYXBlUGF0aC5iaW5kKHRoaXMpKVxyXG4gICAgLy8g5Yig6Zmk5Zu+5b2iXHJcbiAgICBldmVudEJ1cy5vbignc2hhcGUucmVtb3ZlJywgdGhpcy5yZW1vdmVTaGFwZS5iaW5kKHRoaXMpKVxyXG4gICAgLy8g5riy5p+T6L+e57q/XHJcbiAgICBldmVudEJ1cy5vbignY29ubmVjdGlvbi5yZW5kZXInLCB0aGlzLnJlbmRlckNvbm5lY3Rpb24uYmluZCh0aGlzKSlcclxuICAgIC8vIOa4suafk+i/nue6v1xyXG4gICAgZXZlbnRCdXMub24oJ2Nvbm5lY3Rpb24ubW92ZScsIHRoaXMubW92ZUNvbm5lY3Rpb24uYmluZCh0aGlzKSlcclxuICAgIC8vIOWIoOmZpOS6i+S7tlxyXG4gICAgZXZlbnRCdXMudHJpZ2dlcigna2V5LmJpbmQnLCB7XHJcbiAgICAgIGtleTogJ0RlbGV0ZScsXHJcbiAgICAgIGZ1bjogKCkgPT4ge1xyXG4gICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLnJlbW92ZScpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICBldmVudEJ1cy50cmlnZ2VyKCdrZXkuYmluZCcsIHtcclxuICAgICAga2V5OiAnQmFja1NwYWNlJyxcclxuICAgICAgZnVuOiAoKSA9PiB7XHJcbiAgICAgICAgZXZlbnRCdXMudHJpZ2dlcignc2hhcGUucmVtb3ZlJylcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgLyoqXHJcbiAgICog5Yib5bu65Zu+5b2i5pWw5o2uXHJcbiAgICovXHJcbiAgY3JlYXRlU2hhcGVEYXRhKHsgdHlwZSwgZWxlbWVudCB9KSB7XHJcbiAgICBpZiAodHlwZSA9PT0gJ1NlcXVlbmNlRmxvdycpIHtcclxuICAgICAgZWxlbWVudC5zaGFwZSA9IHRoaXMuZHJhd0Nvbm5lY3Rpb24uY3JlYXRlQ29ubmVjdGlvbihlbGVtZW50KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWxlbWVudC5zaGFwZSA9IHRoaXMuZHJhd1NoYXBlLmNyZWF0ZVNoYXBlKHR5cGUsIGVsZW1lbnQpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZWxlbWVudFxyXG4gIH1cclxuICAvKipcclxuICAgKiDmuLLmn5NcclxuICAgKiBAcGFyYW0geyp9IGRlZmluaXRpb25zXHJcbiAgICovXHJcbiAgcmVuZGVyKGRlZmluaXRpb25zKSB7XHJcbiAgICBpZiAoZGVmaW5pdGlvbnMgPT09ICcnKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCfmtYHnqIvlrprkuYnkuLrnqbonLCAnZXJyb3InKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRlc2lnbmVyLnJlbW92ZVNoYXBlcygpXHJcblxyXG4gICAgdGhpcy5kZXNpZ25lci5kZWZpbml0aW9ucyA9IHRoaXMuZGVmaW5pdGlvbnMgPSBkZWZpbml0aW9uc1xyXG4gICAgY29uc3QgeyBkaWFncmFtcywgcm9vdEVsZW1lbnRzIH0gPSB0aGlzLmRlZmluaXRpb25zXHJcbiAgICBjb25zdCBlbGVtZW50cyA9IHt9XHJcblxyXG4gICAgaWYgKCFyb290RWxlbWVudHMpIHtcclxuICAgICAgdGhpcy5kZXNpZ25lci5zZXRQcm9jZXNzTW9kZWwoKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcm9vdEVsZW1lbnRzLmZvckVhY2goKHJvb3QsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHJvb3QuZmxvd0VsZW1lbnRzKSB7XHJcbiAgICAgICAgICByb290LmZsb3dFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50LCBlbGVtZW50SW5kZXgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcGxhbmVFbGVtZW50ID0gZGlhZ3JhbXNbaW5kZXhdLnBsYW5lLnBsYW5lRWxlbWVudFxyXG4gICAgICAgICAgICBpZiAocGxhbmVFbGVtZW50ICYmIHBsYW5lRWxlbWVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgcGxhbmVFbGVtZW50LmZvckVhY2goKHBsYW5lLCBwbGFuZUluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGxhbmUuaWQgPT09IGVsZW1lbnQuaWQgKyAnX2RpJykge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gY2xvbmVEZWVwKGVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmV4dGVuc2lvbkVsZW1lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5leHRlbnNpb25FbGVtZW50cy52YWx1ZXMgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5leHRlbnNpb25FbGVtZW50cy52YWx1ZXMgfHwgW11cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCB0eXBlID0gZ2V0QnBtbk5hbWVCeVR5cGUoZWxlbWVudC4kdHlwZSlcclxuICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgIT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5pbmNvbWluZyA9IGVsZW1lbnQuaW5jb21pbmcgPyBlbGVtZW50LmluY29taW5nLmlkIDogJydcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLm91dGdvaW5nID0gZWxlbWVudC5vdXRnb2luZyA/IGVsZW1lbnQub3V0Z29pbmcuaWQgOiAnJ1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEuc291cmNlUmVmID0gZWxlbWVudC5zb3VyY2VSZWZcclxuICAgICAgICAgICAgICAgICAgICAgID8gZWxlbWVudC5zb3VyY2VSZWYuaWRcclxuICAgICAgICAgICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLnRhcmdldFJlZiA9IGVsZW1lbnQudGFyZ2V0UmVmXHJcbiAgICAgICAgICAgICAgICAgICAgICA/IGVsZW1lbnQudGFyZ2V0UmVmLmlkXHJcbiAgICAgICAgICAgICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZWxlbWVudHNbZWxlbWVudC5pZF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICBwbGFuZTogY2xvbmVEZWVwKHBsYW5lKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLy8g5riy5p+T6aG16Z2iXHJcbiAgICB0aGlzLnJlbmRlclBhZ2UoKVxyXG5cclxuICAgIGxldCBzaGFwZUNvdW50ID0gMFxyXG5cclxuICAgIC8vIOa4suafk+WbvuW9olxyXG4gICAgZm9yIChsZXQgaWQgaW4gZWxlbWVudHMpIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2lkXVxyXG4gICAgICBjb25zdCB0eXBlID0gZ2V0QnBtbk5hbWVCeVR5cGUoZWxlbWVudC5kYXRhLiR0eXBlKVxyXG4gICAgICBpZiAodHlwZSAhPT0gJ1NlcXVlbmNlRmxvdycpIHtcclxuICAgICAgICB0aGlzLnJlbmRlclNoYXBlKHsgdHlwZSwgZWxlbWVudCB9KVxyXG4gICAgICAgIHRoaXMuZGVzaWduZXIuYWRkRGF0YShlbGVtZW50LCBmYWxzZSlcclxuICAgICAgfVxyXG4gICAgICBzaGFwZUNvdW50KytcclxuICAgIH1cclxuXHJcbiAgICAvLyDmuLLmn5Pov57nur9cclxuICAgIGZvciAobGV0IGlkIGluIGVsZW1lbnRzKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tpZF1cclxuICAgICAgY29uc3QgdHlwZSA9IGdldEJwbW5OYW1lQnlUeXBlKGVsZW1lbnQuZGF0YS4kdHlwZSlcclxuICAgICAgaWYgKHR5cGUgPT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJDb25uZWN0aW9uKHsgZWxlbWVudCB9KVxyXG4gICAgICAgIHRoaXMuZGVzaWduZXIuYWRkRGF0YShlbGVtZW50LCBmYWxzZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzaGFwZUNvdW50ID09PSAwKSB7XHJcbiAgICAgIHRoaXMuZGVzaWduZXIuYnVpbGQoKVxyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiDmuLLmn5PpobXpnaJcclxuICAgKi9cclxuICByZW5kZXJQYWdlKCkge1xyXG4gICAgY29uc3QgeyBwYWdlU3R5bGUgfSA9IHRoaXMub3B0aW9uc1xyXG4gICAgY29uc3QgcGFnZVdpZHRoID0gcGFnZVN0eWxlLndpZHRoXHJcbiAgICBjb25zdCBwYWdlSGVpZ2h0ID0gcGFnZVN0eWxlLmhlaWdodFxyXG4gICAgY29uc3QgcGFnZUJhY2tHcm91bmRDb2xvciA9IHBhZ2VTdHlsZS5iYWNrZ3JvdW5kQ29sb3JcclxuICAgIGNvbnN0IGRhcmtlckJHQ29sb3IgPSBEcmF3VXRpbHMuZ2V0RGFya2VyQ29sb3IocGFnZUJhY2tHcm91bmRDb2xvcilcclxuICAgIGNvbnN0IGRhcmtlc3RCR0NvbG9yID0gRHJhd1V0aWxzLmdldERhcmtlc3RDb2xvcihwYWdlQmFja0dyb3VuZENvbG9yKVxyXG4gICAgdGhpcy4kY29udGFpbmVyLmZpbmQoJy5icGQtZGVzaWduZXInKS5jc3Moe1xyXG4gICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICdyZ2IoJyArIGRhcmtlckJHQ29sb3IgKyAnKSdcclxuICAgIH0pXHJcbiAgICB0aGlzLiRjb250YWluZXIuZmluZCgnLmJwZC1sYXlvdXQnKS5jc3Moe1xyXG4gICAgICB3aWR0aDogcGFnZVdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHBhZ2VIZWlnaHRcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmuLLmn5Plm77lvaJcclxuICAgKiBAcGFyYW0geyp9IHR5cGVcclxuICAgKiBAcGFyYW0geyp9IGVsZW1lbnRcclxuICAgKi9cclxuICByZW5kZXJTaGFwZSh7IHR5cGUsIGVsZW1lbnQgfSkge1xyXG4gICAgdGhpcy5kcmF3U2hhcGUucmVuZGVyKHR5cGUsIGVsZW1lbnQpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmuLLmn5Pot6/lvoRcclxuICAgKiBAcGFyYW0geyp9IGRhdGFcclxuICAgKi9cclxuICByZW5kZXJTaGFwZVBhdGgoeyBzaGFwZTJELCBlbGVtZW50LCByZW5kZXIgfSkge1xyXG4gICAgdGhpcy5kcmF3U2hhcGUucmVuZGVyU2hhcGVQYXRoKHNoYXBlMkQsIGVsZW1lbnQsIHJlbmRlcilcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOa4suafk+i/nue6v1xyXG4gICAqIEBwYXJhbSB7Kn0gdHlwZVxyXG4gICAqIEBwYXJhbSB7Kn0gc2hhcGVEYXRhXHJcbiAgICovXHJcbiAgcmVuZGVyQ29ubmVjdGlvbih7IGVsZW1lbnQsIHJlbmRlcmVkIH0pIHtcclxuICAgIHRoaXMuZHJhd0Nvbm5lY3Rpb24ucmVuZGVyKGVsZW1lbnQsIHJlbmRlcmVkKVxyXG4gIH1cclxuXHJcbiAgbW92ZUNvbm5lY3Rpb24oeyBlbGVtZW50LCB0eXBlLCB4LCB5IH0pIHtcclxuICAgIHRoaXMuZHJhd0Nvbm5lY3Rpb24ubW92ZShlbGVtZW50LCB0eXBlLCB4LCB5KVxyXG4gIH1cclxuXHJcbiAgdXBkYXRhTGluZVN0eWxlKGlkLCBzdHlsZSkge1xyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudEJ1cy50cmlnZ2VyKCdlbGVtZW50LmdldCcsIGlkKVxyXG4gICAgICBpZiAoZWxlbWVudC5zaGFwZS5icG1uTmFtZSA9PT0gJ1NlcXVlbmNlRmxvdycpIHtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBlbGVtZW50LnNoYXBlLmxpZ2h0U3R5bGUgPSB7IGxpbmVTdHlsZTogc3R5bGUgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGVsZW1lbnQpXHJcbiAgICAgICAgdGhpcy5kcmF3U2hhcGUucmVuZGVyU2hhcGUoZWxlbWVudClcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZWxlbWVudHMgPSBldmVudEJ1cy50cmlnZ2VyKCdlbGVtZW50LmdldCcpXHJcbiAgICAgIGZvciAobGV0IGlkIGluIGVsZW1lbnRzKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2lkXVxyXG4gICAgICAgIGlmIChlbGVtZW50LnNoYXBlLmJwbW5OYW1lID09PSAnU2VxdWVuY2VGbG93Jykge1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBlbGVtZW50LnNoYXBlLmxpZ2h0U3R5bGUgPSB7fVxyXG4gICAgICAgICAgdGhpcy5kcmF3U2hhcGUucmVuZGVyU2hhcGUoZWxlbWVudClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWIoOmZpOWbvuW9olxyXG4gICAqIEBwYXJhbSB7fSBzaGFwZXNcclxuICAgKi9cclxuICByZW1vdmVTaGFwZShlbGVtZW50cywgaXNSZW1vdmUpIHtcclxuICAgIGlmICghZWxlbWVudHMpIHtcclxuICAgICAgZWxlbWVudHMgPSBldmVudEJ1cy50cmlnZ2VyKCdzaGFwZS5zZWxlY3QuZ2V0JylcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIGlzUmVtb3ZlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBpc1JlbW92ZSA9IHRydWVcclxuICAgIH1cclxuICAgIGlmIChpc1JlbW92ZSkge1xyXG4gICAgICBlbGVtZW50cyA9IHRoaXMuYmVmb3JlUmVtb3ZlKGVsZW1lbnRzKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5ld1NoYXBlcyA9IFtdXHJcbiAgICBjb25zdCBjaGFuZ2VkSWRzID0gW11cclxuICAgIGNvbnN0IHBhcmVudFNoYXBlcyA9IFtdXHJcbiAgICBjb25zdCByYW5nZSA9IFtdXHJcbiAgICBjb25zdCBjb25uZWN0aW9ucyA9IFtdXHJcblxyXG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudC5zaGFwZS5icG1uTmFtZSA9PT0gJ1NlcXVlbmNlRmxvdycpIHtcclxuICAgICAgICBjb25uZWN0aW9ucy5wdXNoKGVsZW1lbnQuZGF0YS5pZClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByYW5nZS5wdXNoKGVsZW1lbnQuZGF0YS5pZClcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICBuZXdTaGFwZXMucHVzaChjbG9uZURlZXAoZWxlbWVudCkpXHJcblxyXG4gICAgICBjb25zdCB7IGRhdGEsIHNoYXBlIH0gPSBlbGVtZW50XHJcblxyXG4gICAgICB0aGlzLiRjb250YWluZXIuZmluZCgnLnNoYXBlLWJveFtkYXRhLWlkPVwiJyArIGRhdGEuaWQgKyAnXCJdJykucmVtb3ZlKClcclxuXHJcbiAgICAgIGRlbGV0ZSB0aGlzLmRlc2lnbmVyLmVsZW1lbnRzW2RhdGEuaWRdXHJcblxyXG4gICAgICBpZiAoc2hhcGUuYnBtbk5hbWUgPT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgICAgaWYgKGRhdGEuc291cmNlUmVmICE9IG51bGwpIHtcclxuICAgICAgICAgIC8vXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRhLnRhcmdldFJlZiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAvL1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoc2hhcGUucGFyZW50ICYmIHJhbmdlLmluZGV4T2Yoc2hhcGUucGFyZW50KSA8IDApIHtcclxuICAgICAgICAgIC8vXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb25uZWN0aW9uSWRzID0gdGhpcy5kZXNpZ25lci5jb25uZWN0aW9uc1tkYXRhLmlkXVxyXG4gICAgICAgIGlmIChjb25uZWN0aW9uSWRzICYmIGNvbm5lY3Rpb25JZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25uZWN0aW9uSWRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0aW9uSWRzW2ldXHJcbiAgICAgICAgICAgIGlmIChjb25uZWN0aW9ucy5pbmRleE9mKGNvbm5lY3Rpb24pIDwgMCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb25FbGVtZW50ID0gZXZlbnRCdXMudHJpZ2dlcihcclxuICAgICAgICAgICAgICAgICdlbGVtZW50LmdldCcsXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25FbGVtZW50LmRhdGEuc291cmNlUmVmICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25FbGVtZW50LmRhdGEuc291cmNlUmVmID09PSBkYXRhLmlkXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uRWxlbWVudC5kYXRhLnNvdXJjZVJlZiA9IG51bGxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbkVsZW1lbnQuZGF0YS50YXJnZXRSZWYgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbkVsZW1lbnQuZGF0YS50YXJnZXRSZWYgPT09IGRhdGEuaWRcclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25FbGVtZW50LmRhdGEudGFyZ2V0UmVmID0gbnVsbFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZGVzaWduZXIuY29ubmVjdGlvbnNbZGF0YS5pZF1cclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLmRlc2lnbmVyLmJ1aWxkKClcclxuXHJcbiAgICBldmVudEJ1cy50cmlnZ2VyKCdzaGFwZS5zZWxlY3QucmVtb3ZlJylcclxuXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Yib5bu65Zu+5b2i5pWw5o2uXHJcbiAgICovXHJcbiAgY3JlYXRlU2hhcGUodHlwZSwgY2FsbGJhY2sgPSAoKSA9PiB7fSkge1xyXG4gICAgbGV0IGVsZW1lbnQgPSBudWxsXHJcbiAgICBldmVudEJ1cy50cmlnZ2VyKCdkYXRhLmNyZWF0ZScsIHR5cGUsIGRhdGEgPT4ge1xyXG4gICAgICBlbGVtZW50ID0gZGF0YVxyXG4gICAgICBjYWxsYmFjayhlbGVtZW50KVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWIoOmZpOWJjeS6i+S7tlxyXG4gICAqL1xyXG4gIGJlZm9yZVJlbW92ZShlbGVtZW50cykge1xyXG4gICAgY29uc3QgdGVtcCA9IHt9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tpXVxyXG4gICAgICB0ZW1wW2VsZW1lbnQuZGF0YS5pZF0gPSBlbGVtZW50XHJcbiAgICB9XHJcbiAgICBlbGVtZW50cyA9IFtdXHJcbiAgICBmb3IgKGxldCBpZCBpbiB0ZW1wKSB7XHJcbiAgICAgIGVsZW1lbnRzLnB1c2godGVtcFtpZF0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZWxlbWVudHNcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWIoOmZpOWQjuS6i+S7tlxyXG4gICAqL1xyXG4gIHJlbW92ZWQoZXZlbnQpIHt9XHJcbn1cclxuXHJcbmNvbnN0IGluc3RhbmNlID0gKG9wdGlvbnMsICRjb250YWluZXIpID0+IHtcclxuICByZXR1cm4gbmV3IERyYXcob3B0aW9ucywgJGNvbnRhaW5lcilcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgaW5zdGFuY2VcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9kcmF3L2RyYXcuanMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBZkE7QUFnQkE7QUFDQTs7O0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7Ozs7OztBQUdBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVJBO0FBQUE7QUFBQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQUdBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFHQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFLQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQUtBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTs7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBSUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUlBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7Ozs7QUFsVkE7QUFDQTtBQW9WQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///11\n"); + +/***/ }), +/* 12 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__draw_drawUtils__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_slimJQ__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_utils__ = __webpack_require__(1);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\nvar Designer = function () {\n function Designer(options, $container, definitions) {\n _classCallCheck(this, Designer);\n\n // 配置\n this.options = options;\n //\n this.$container = $container;\n //\n this.definitions = definitions;\n // 最大z坐标\n this.maxZIndex = 0;\n // 图形集合\n this.elements = {};\n //\n this.groups = {};\n //\n this.connections = {};\n //\n this.orders = [];\n //\n this.init();\n }\n\n _createClass(Designer, [{\n key: 'init',\n value: function init() {\n var _this = this;\n\n // 创建数据\n __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].on('data.create', this.createData.bind(this));\n // 删除数据\n __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].on('data.remove', this.removeData.bind(this));\n // 创建数据\n __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].on('element.create', this.createElement.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].on('element.get', this.getElement.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].on('element.add', this.addData.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].on('element.update', this.update.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].on('element.change', this.change.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].on('process.get', this.getProcess.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].on('connections.get', this.getShapeConnections.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].on('orders.get', function () {\n return _this.orders;\n });\n }\n }, {\n key: 'createData',\n value: function createData(type) {\n var _this2 = this;\n\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n\n var self = this;\n\n var shapeAnchors = [];\n var element = null;\n\n var $shape = null;\n var $layout = this.$container.find('.bpd-layout');\n var $designer = $layout.find('.bpd-designer');\n\n $layout.on('mousemove.create', function (event) {\n var canvasPos = __WEBPACK_IMPORTED_MODULE_1__draw_drawUtils__[\"a\" /* default */].getRelativePos(event.pageX, event.pageY, $designer);\n\n var keys = 0;\n var bounds = null;\n\n if (element == null) {\n // 创建数据\n element = __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].trigger('element.create', {\n name: null,\n type: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"d\" /* convertFirstLetter */])(type, 'uppercase'),\n prefix: 'obj',\n pos: canvasPos\n });\n\n bounds = element.plane.bounds;\n\n bounds.x = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(canvasPos.x) - bounds.width / 2;\n bounds.y = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(canvasPos.y) - bounds.height / 2;\n\n keys = Object.keys(_this2.elements);\n\n // 渲染图形\n __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].trigger('shape.render', { type: type, element: element });\n $shape = _this2.$container.find('.shape-box[data-id=\"' + element.data.id + '\"]');\n $shape.attr('class', 'shape-box-creating');\n $shape.css({\n left: canvasPos.x - $shape.width() / 2 + 'px',\n top: canvasPos.y - $shape.height() / 2 + 'px',\n 'z-index': keys.length\n });\n } else {\n bounds = element.plane.bounds;\n bounds.x = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(canvasPos.x) - bounds.width / 2;\n bounds.y = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(canvasPos.y) - bounds.height / 2;\n }\n\n $shape.css({\n left: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(bounds.x - 10) + 'px',\n top: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(bounds.y - 10) + 'px',\n 'z-index': keys.length\n });\n });\n var isCreated = false;\n $layout.on('mouseup.create', function () {\n isCreated = true;\n });\n\n Object(__WEBPACK_IMPORTED_MODULE_2__utils_slimJQ__[\"a\" /* default */])(document).on('mouseup.create', function () {\n Object(__WEBPACK_IMPORTED_MODULE_2__utils_slimJQ__[\"a\" /* default */])(document).off('mouseup.create');\n $designer.off('mousemove.creating');\n $layout.off('mouseup.create').off('mousemove.create');\n if (element != null) {\n if (isCreated === false) {\n $shape.remove();\n } else {\n $shape.attr('class', 'shape-box');\n _this2.addData(element);\n callback(element);\n }\n }\n });\n }\n\n /**\r\n * 添加图形\r\n * @param {} shapes\r\n */\n\n }, {\n key: 'addData',\n value: function addData(element, status) {\n this.addDatas([element], status);\n }\n\n /**\r\n * 添加多个形状\r\n * @param {} elements\r\n */\n\n }, {\n key: 'addDatas',\n value: function addDatas(elements, status) {\n if (typeof status === 'undefined') {\n status = true;\n }\n var addShapes = [];\n for (var i = 0; i < elements.length; i += 1) {\n var element = elements[i];\n addShapes.push(element);\n this.elements[element.data.id] = element;\n }\n this.build();\n }\n\n /**\r\n * 删除图形\r\n */\n\n }, {\n key: 'removeData',\n value: function removeData(selected) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n\n if (!selected) {\n // TODO:\n }\n\n if (selected.length > 0) {\n var childrenShapes = [];\n selected = selected.concat(childrenShapes);\n callback(selected);\n }\n }\n }, {\n key: 'getElement',\n value: function getElement(id) {\n if (id) {\n return this.elements[id];\n }\n return this.elements;\n }\n }, {\n key: 'getProcess',\n value: function getProcess() {\n var root = null;\n if (this.definitions) {\n root = this.definitions.rootElements[0];\n delete root.flowElements;\n }\n return root;\n }\n\n /**\r\n * 设置组数据\r\n * @param {*} group\r\n * @param {*} shapeId\r\n */\n\n }, {\n key: 'setShapeGroups',\n value: function setShapeGroups(group, shapeId) {\n if (!this.groups[group]) {\n this.groups[group] = [];\n }\n if (this.groups[group].indexOf(shapeId) < 0) {\n this.groups[group].push(shapeId);\n }\n }\n }, {\n key: 'getShapeConnections',\n value: function getShapeConnections(id) {\n return this.connections[id];\n }\n\n /**\r\n * 设置连线和图形关联数据\r\n * @param {*} id\r\n * @param {*} shapeId\r\n */\n\n }, {\n key: 'setShapeConnections',\n value: function setShapeConnections(id, shapeId) {\n if (!this.connections[id]) {\n this.connections[id] = [];\n }\n if (this.connections[id].indexOf(shapeId) < 0) {\n this.connections[id].push(shapeId);\n }\n }\n\n /**\r\n * 更新形状\r\n * @param {} shape\r\n */\n\n }, {\n key: 'update',\n value: function update(element) {\n this.updateMulti([element]);\n }\n\n /**\r\n * 更新多个形状定义\r\n * @param {} shapes\r\n */\n\n }, {\n key: 'updateMulti',\n value: function updateMulti(elements) {\n var updateElements = [];\n var oriElements = [];\n for (var i = 0; i < elements.length; i += 1) {\n var _elements$i = elements[i],\n data = _elements$i.data,\n plane = _elements$i.plane,\n shape = _elements$i.shape;\n\n if (shape.bpmnName !== 'SequenceFlow') {\n shape.textBlock = shape.getTextBlock();\n }\n if (this.elements[shape.id]) {\n this.elements[data.id] = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"c\" /* cloneDeep */])(elements[i]);\n oriElements.push(Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"c\" /* cloneDeep */])(this.getPersistenceById(data.id)));\n updateElements.push(Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"c\" /* cloneDeep */])(elements[i]));\n }\n }\n this.build();\n }\n\n /**\r\n * 更换图形\r\n * @param {} target\r\n * @param {} shapeName\r\n */\n\n }, {\n key: 'change',\n value: function change(_ref) {\n var target = _ref.target,\n type = _ref.type;\n\n var name = __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].trigger('i18n', 'bpmn.' + type);\n var element = __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].trigger('element.create', {\n name: name,\n type: type,\n prefix: 'obj'\n });\n\n target.data.$type = element.data.$type;\n target.data.extensionElements.values = element.data.extensionElements.values;\n target.data.name = element.data.name;\n target.plane.id = element.plane.id;\n target.shape = element.shape;\n target.shape.data = target.data;\n target.shape.plane = target.plane;\n\n __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].trigger('shape.render', { type: type, element: target });\n }\n\n /**\r\n * 删除全部图形\r\n */\n\n }, {\n key: 'removeShapes',\n value: function removeShapes() {\n __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].trigger('shape.select.remove');\n var elements = [];\n for (var key in this.elements) {\n elements.push(this.elements[key]);\n }\n __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].trigger('shape.remove', elements);\n }\n }, {\n key: 'build',\n value: function build() {\n this.orders = [];\n this.connections = {};\n for (var id in this.elements) {\n var _elements$id = this.elements[id],\n data = _elements$id.data,\n plane = _elements$id.plane,\n shape = _elements$id.shape;\n\n this.orders.push({ id: data.id, zindex: shape.shapeStyle.zindex });\n if (shape.bpmnName === 'SequenceFlow') {\n if (data.sourceRef != null) {\n this.setShapeConnections(data.sourceRef, data.id);\n }\n if (data.targetRef != null) {\n this.setShapeConnections(data.targetRef, data.id);\n }\n }\n if (shape.group) {\n this.setShapeGroups(shape.group, data.id);\n }\n }\n\n this.orders.sort(function (item1, item2) {\n return item1.zindex - item2.zindex;\n });\n for (var i = 0; i < this.orders.length; i += 1) {\n var _id = this.orders[i].id;\n this.$container.find('.shape-box[data-id=\"' + _id + '\"]').css('z-index', i);\n }\n var index = 0;\n if (this.orders.length > 0) {\n index = this.orders[this.orders.length - 1].zindex;\n }\n this.maxZIndex = index;\n }\n\n /**\r\n * 创建元素模型\r\n * @param {*} data\r\n */\n\n }, {\n key: 'createAttrs',\n value: function createAttrs(data, plane, shape) {\n var _this3 = this;\n\n var obj = {\n data: {},\n plane: {}\n };\n var id = data.id || 'obj_' + this.options.ids.next();\n if (data) {\n for (var key in data) {\n switch (key) {\n // 不处理\n case '$type':\n case 'flowElements':\n case 'sourceRef':\n case 'targetRef':\n case 'incoming':\n case 'outgoing':\n break;\n // 扩展属性\n case 'extensionElements':\n obj.data.extensionElements = this.createExtensionModel(data[key].values || []);\n break;\n default:\n obj.data[key] = data[key];\n break;\n }\n }\n }\n if (plane) {\n for (var _key in plane) {\n switch (_key) {\n // 不处理\n case '$type':\n break;\n // id与数据id对应\n case 'id':\n obj.plane[_key] = id + '_di';\n break;\n case 'waypoint':\n if (shape.bpmnName === 'SequenceFlow') {\n (function () {\n var start = plane[_key][0];\n var end = plane[_key][plane[_key].length - 1];\n var waypoint = [];\n // 插入起始点\n waypoint.push(_this3.createModel({\n descriptor: 'dc:Point',\n attrs: {\n x: start.x,\n y: start.y\n }\n }));\n // 插入折点\n shape.points.forEach(function (point) {\n waypoint.push(_this3.createModel({\n descriptor: 'dc:Point',\n attrs: {\n x: point.x,\n y: point.y\n }\n }));\n });\n // 插入结束点\n waypoint.push(_this3.createModel({\n descriptor: 'dc:Point',\n attrs: {\n x: end.x,\n y: end.y\n }\n }));\n obj.plane[_key] = waypoint;\n })();\n }\n break;\n case 'bounds':\n if (shape.bpmnName !== 'SequenceFlow') {\n var _plane$_key = plane[_key],\n height = _plane$_key.height,\n width = _plane$_key.width,\n x = _plane$_key.x,\n y = _plane$_key.y;\n\n obj.plane[_key] = this.createModel({\n descriptor: 'dc:Bounds',\n attrs: {\n height: height,\n width: width,\n x: x,\n y: y\n }\n });\n }\n break;\n default:\n obj.plane[_key] = plane[_key];\n break;\n }\n }\n }\n return obj;\n }\n\n /**\r\n * 创建数据\r\n * @param {*} callback\r\n */\n\n }, {\n key: 'createElement',\n value: function createElement(_ref2) {\n var type = _ref2.type,\n prefix = _ref2.prefix,\n name = _ref2.name,\n pos = _ref2.pos;\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n\n var id = prefix + '_' + this.options.ids.next();\n // 元素数据\n var data = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"c\" /* cloneDeep */])(this.createModel({\n descriptor: 'bpmn:' + type,\n attrs: {\n name: name,\n id: id,\n extensionElements: this.createExtensionModel()\n }\n }));\n\n var plane = {};\n\n if (type === 'SequenceFlow') {\n // 连线绘图数据\n plane = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"c\" /* cloneDeep */])(this.createModel({\n descriptor: 'bpmndi:BPMNEdge',\n attrs: {\n id: id + '_di',\n waypoint: []\n }\n }));\n } else {\n // 图形绘图数据\n plane = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"c\" /* cloneDeep */])(this.createModel({\n descriptor: 'bpmndi:BPMNShape',\n attrs: {\n bounds: this.createModel({\n descriptor: 'dc:Bounds',\n attrs: {\n x: 0,\n y: 0\n }\n }),\n bpmnElement: id,\n id: id + '_di'\n }\n }));\n\n if (pos) {\n plane.bounds.x = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(pos.x) - plane.bounds.width;\n plane.bounds.y = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(pos.y) - plane.bounds.height;\n }\n }\n\n // 图形数据\n\n var element = {\n data: data,\n plane: plane\n };\n\n element = __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].trigger('shape.create', {\n type: type,\n element: element\n });\n\n this.maxZIndex = element.shape.shapeStyle.zindex = this.maxZIndex + 1;\n\n callback(element);\n\n return element;\n }\n\n /**\r\n * 创建定义数据\r\n */\n\n }, {\n key: 'createDefinition',\n value: function createDefinition() {\n var _this4 = this;\n\n this.definitions.rootElements.forEach(function (root, index) {\n var shapes = {};\n var flowElements = [];\n var planeElement = [];\n // 先生成图形\n for (var id in _this4.elements) {\n var _elements$id2 = _this4.elements[id],\n data = _elements$id2.data,\n plane = _elements$id2.plane,\n shape = _elements$id2.shape;\n\n var type = shape.bpmnName;\n if (type !== 'SequenceFlow') {\n var attrObj = _this4.createAttrs(data, plane, shape);\n attrObj.data.incoming = [];\n attrObj.data.outgoing = [];\n\n var modelData = _this4.createModel({\n descriptor: data.$type,\n attrs: attrObj.data\n });\n\n attrObj.plane.bpmnElement = modelData;\n var modelPlane = _this4.createModel({\n descriptor: plane.$type,\n attrs: attrObj.plane\n });\n\n shapes[modelData.id] = modelData;\n\n flowElements.push(modelData);\n planeElement.push(modelPlane);\n }\n }\n // 后生成连线\n for (var _id2 in _this4.elements) {\n var _elements$_id = _this4.elements[_id2],\n _data = _elements$_id.data,\n _plane = _elements$_id.plane,\n _shape = _elements$_id.shape;\n\n var _type = _shape.bpmnName;\n if (_type === 'SequenceFlow') {\n var _attrObj = _this4.createAttrs(_data, _plane, _shape);\n _attrObj.data.sourceRef = shapes[_data.sourceRef];\n _attrObj.data.targetRef = shapes[_data.targetRef];\n\n var _modelData = _this4.createModel({\n descriptor: _data.$type,\n attrs: _attrObj.data\n });\n\n if (_data.sourceRef) {\n shapes[_data.sourceRef].outgoing.push(_modelData);\n }\n if (_data.targetRef) {\n shapes[_data.targetRef].incoming.push(_modelData);\n }\n\n _attrObj.plane.bpmnElement = _modelData;\n var _modelPlane = _this4.createModel({\n descriptor: _plane.$type,\n attrs: _attrObj.plane\n });\n\n flowElements.push(_modelData);\n planeElement.push(_modelPlane);\n }\n }\n\n _this4.definitions.diagrams[index].plane.planeElement = planeElement;\n _this4.definitions.rootElements[index] = _this4.createModel({\n descriptor: root.$type,\n attrs: {\n id: root.id || _this4.options.ids.next(),\n extensionElements: _this4.createExtensionModel(root.extensionElements.values || [])\n }\n });\n _this4.definitions.rootElements[index].flowElements = flowElements;\n });\n\n return this.definitions;\n }\n }, {\n key: 'setProcessModel',\n value: function setProcessModel() {\n var id = 'process_' + this.options.ids.next();\n var rootElements = [this.createModel({\n descriptor: 'bpmn:Process',\n attrs: {\n id: id,\n flowElements: [],\n extensionElements: this.createExtensionModel([])\n }\n })];\n\n var diagrams = [this.createModel({\n descriptor: 'bpmndi:BPMNDiagram',\n attrs: {\n id: id + '_di',\n plane: this.createModel({\n descriptor: 'bpmndi:BPMNPlane',\n attrs: {\n id: id + '_pl',\n planeElement: []\n }\n })\n }\n })];\n\n this.definitions.rootElements = rootElements;\n this.definitions.diagrams = diagrams;\n }\n\n /**\r\n * 创建模型数据\r\n * @param {*} data\r\n */\n\n }, {\n key: 'createModel',\n value: function createModel(data) {\n var bpmnModel = null;\n __WEBPACK_IMPORTED_MODULE_0__eventBus__[\"a\" /* default */].trigger('model.create', data, function (model) {\n bpmnModel = model;\n });\n return bpmnModel;\n }\n\n /**\r\n * 创建扩展属性模型\r\n * @param {*} values\r\n */\n\n }, {\n key: 'createExtensionModel',\n value: function createExtensionModel() {\n var _this5 = this;\n\n var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n var extensions = [];\n values.forEach(function (extension) {\n var descriptor = extension.$type || extension.name;\n var attrs = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"c\" /* cloneDeep */])(extension);\n delete attrs.$type;\n delete attrs.name;\n var extensionModel = _this5.createModel({\n descriptor: descriptor,\n attrs: attrs\n });\n if (extensionModel) {\n extensions.push(extensionModel);\n }\n });\n\n return this.createModel({\n descriptor: 'bpmn:ExtensionElements',\n attrs: { values: extensions }\n });\n }\n }]);\n\n return Designer;\n}();\n\nvar instance = function instance(options, $container, definitions) {\n return new Designer(options, $container, definitions);\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (instance);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTIuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2NvcmUvZGVzaWduZXIuanM/ZmIyOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRCdXMgZnJvbSAnLi9ldmVudEJ1cydcclxuaW1wb3J0IERyYXdVdGlscyBmcm9tICcuLi9kcmF3L2RyYXdVdGlscydcclxuXHJcbmltcG9ydCAkIGZyb20gJy4uL3V0aWxzL3NsaW1KUSdcclxuaW1wb3J0IHtcclxuICBjbG9uZURlZXAsXHJcbiAgY29udmVydEZpcnN0TGV0dGVyLFxyXG4gIHNldFNjYWxlLFxyXG4gIHJlc3RvcmVTY2FsZVxyXG59IGZyb20gJy4uL3V0aWxzL3V0aWxzJ1xyXG5cclxuY2xhc3MgRGVzaWduZXIge1xyXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMsICRjb250YWluZXIsIGRlZmluaXRpb25zKSB7XHJcbiAgICAvLyDphY3nva5cclxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcclxuICAgIC8vXHJcbiAgICB0aGlzLiRjb250YWluZXIgPSAkY29udGFpbmVyXHJcbiAgICAvL1xyXG4gICAgdGhpcy5kZWZpbml0aW9ucyA9IGRlZmluaXRpb25zXHJcbiAgICAvLyDmnIDlpKd65Z2Q5qCHXHJcbiAgICB0aGlzLm1heFpJbmRleCA9IDBcclxuICAgIC8vIOWbvuW9oumbhuWQiFxyXG4gICAgdGhpcy5lbGVtZW50cyA9IHt9XHJcbiAgICAvL1xyXG4gICAgdGhpcy5ncm91cHMgPSB7fVxyXG4gICAgLy9cclxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB7fVxyXG4gICAgLy9cclxuICAgIHRoaXMub3JkZXJzID0gW11cclxuICAgIC8vXHJcbiAgICB0aGlzLmluaXQoKVxyXG4gIH1cclxuICBpbml0KCkge1xyXG4gICAgLy8g5Yib5bu65pWw5o2uXHJcbiAgICBldmVudEJ1cy5vbignZGF0YS5jcmVhdGUnLCB0aGlzLmNyZWF0ZURhdGEuYmluZCh0aGlzKSlcclxuICAgIC8vIOWIoOmZpOaVsOaNrlxyXG4gICAgZXZlbnRCdXMub24oJ2RhdGEucmVtb3ZlJywgdGhpcy5yZW1vdmVEYXRhLmJpbmQodGhpcykpXHJcbiAgICAvLyDliJvlu7rmlbDmja5cclxuICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50LmNyZWF0ZScsIHRoaXMuY3JlYXRlRWxlbWVudC5iaW5kKHRoaXMpKVxyXG4gICAgLy9cclxuICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50LmdldCcsIHRoaXMuZ2V0RWxlbWVudC5iaW5kKHRoaXMpKVxyXG4gICAgLy9cclxuICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50LmFkZCcsIHRoaXMuYWRkRGF0YS5iaW5kKHRoaXMpKVxyXG4gICAgLy9cclxuICAgIGV2ZW50QnVzLm9uKCdlbGVtZW50LnVwZGF0ZScsIHRoaXMudXBkYXRlLmJpbmQodGhpcykpXHJcbiAgICAvL1xyXG4gICAgZXZlbnRCdXMub24oJ2VsZW1lbnQuY2hhbmdlJywgdGhpcy5jaGFuZ2UuYmluZCh0aGlzKSlcclxuICAgIC8vXHJcbiAgICBldmVudEJ1cy5vbigncHJvY2Vzcy5nZXQnLCB0aGlzLmdldFByb2Nlc3MuYmluZCh0aGlzKSlcclxuICAgIC8vXHJcbiAgICBldmVudEJ1cy5vbignY29ubmVjdGlvbnMuZ2V0JywgdGhpcy5nZXRTaGFwZUNvbm5lY3Rpb25zLmJpbmQodGhpcykpXHJcbiAgICAvL1xyXG4gICAgZXZlbnRCdXMub24oJ29yZGVycy5nZXQnLCAoKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLm9yZGVyc1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGNyZWF0ZURhdGEodHlwZSwgY2FsbGJhY2sgPSAoKSA9PiB7fSkge1xyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXNcclxuXHJcbiAgICBsZXQgc2hhcGVBbmNob3JzID0gW11cclxuICAgIGxldCBlbGVtZW50ID0gbnVsbFxyXG5cclxuICAgIGxldCAkc2hhcGUgPSBudWxsXHJcbiAgICBsZXQgJGxheW91dCA9IHRoaXMuJGNvbnRhaW5lci5maW5kKCcuYnBkLWxheW91dCcpXHJcbiAgICBsZXQgJGRlc2lnbmVyID0gJGxheW91dC5maW5kKCcuYnBkLWRlc2lnbmVyJylcclxuXHJcbiAgICAkbGF5b3V0Lm9uKCdtb3VzZW1vdmUuY3JlYXRlJywgZXZlbnQgPT4ge1xyXG4gICAgICBjb25zdCBjYW52YXNQb3MgPSBEcmF3VXRpbHMuZ2V0UmVsYXRpdmVQb3MoXHJcbiAgICAgICAgZXZlbnQucGFnZVgsXHJcbiAgICAgICAgZXZlbnQucGFnZVksXHJcbiAgICAgICAgJGRlc2lnbmVyXHJcbiAgICAgIClcclxuXHJcbiAgICAgIGxldCBrZXlzID0gMFxyXG4gICAgICBsZXQgYm91bmRzID0gbnVsbFxyXG5cclxuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xyXG4gICAgICAgIC8vIOWIm+W7uuaVsOaNrlxyXG4gICAgICAgIGVsZW1lbnQgPSBldmVudEJ1cy50cmlnZ2VyKCdlbGVtZW50LmNyZWF0ZScsIHtcclxuICAgICAgICAgIG5hbWU6IG51bGwsXHJcbiAgICAgICAgICB0eXBlOiBjb252ZXJ0Rmlyc3RMZXR0ZXIodHlwZSwgJ3VwcGVyY2FzZScpLFxyXG4gICAgICAgICAgcHJlZml4OiAnb2JqJyxcclxuICAgICAgICAgIHBvczogY2FudmFzUG9zXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgYm91bmRzID0gZWxlbWVudC5wbGFuZS5ib3VuZHNcclxuXHJcbiAgICAgICAgYm91bmRzLnggPSByZXN0b3JlU2NhbGUoY2FudmFzUG9zLngpIC0gYm91bmRzLndpZHRoIC8gMlxyXG4gICAgICAgIGJvdW5kcy55ID0gcmVzdG9yZVNjYWxlKGNhbnZhc1Bvcy55KSAtIGJvdW5kcy5oZWlnaHQgLyAyXHJcblxyXG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmVsZW1lbnRzKVxyXG5cclxuICAgICAgICAvLyDmuLLmn5Plm77lvaJcclxuICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCdzaGFwZS5yZW5kZXInLCB7IHR5cGUsIGVsZW1lbnQgfSlcclxuICAgICAgICAkc2hhcGUgPSB0aGlzLiRjb250YWluZXIuZmluZChcclxuICAgICAgICAgICcuc2hhcGUtYm94W2RhdGEtaWQ9XCInICsgZWxlbWVudC5kYXRhLmlkICsgJ1wiXSdcclxuICAgICAgICApXHJcbiAgICAgICAgJHNoYXBlLmF0dHIoJ2NsYXNzJywgJ3NoYXBlLWJveC1jcmVhdGluZycpXHJcbiAgICAgICAgJHNoYXBlLmNzcyh7XHJcbiAgICAgICAgICBsZWZ0OiBjYW52YXNQb3MueCAtICRzaGFwZS53aWR0aCgpIC8gMiArICdweCcsXHJcbiAgICAgICAgICB0b3A6IGNhbnZhc1Bvcy55IC0gJHNoYXBlLmhlaWdodCgpIC8gMiArICdweCcsXHJcbiAgICAgICAgICAnei1pbmRleCc6IGtleXMubGVuZ3RoXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBib3VuZHMgPSBlbGVtZW50LnBsYW5lLmJvdW5kc1xyXG4gICAgICAgIGJvdW5kcy54ID0gcmVzdG9yZVNjYWxlKGNhbnZhc1Bvcy54KSAtIGJvdW5kcy53aWR0aCAvIDJcclxuICAgICAgICBib3VuZHMueSA9IHJlc3RvcmVTY2FsZShjYW52YXNQb3MueSkgLSBib3VuZHMuaGVpZ2h0IC8gMlxyXG4gICAgICB9XHJcblxyXG4gICAgICAkc2hhcGUuY3NzKHtcclxuICAgICAgICBsZWZ0OiBzZXRTY2FsZShib3VuZHMueCAtIDEwKSArICdweCcsXHJcbiAgICAgICAgdG9wOiBzZXRTY2FsZShib3VuZHMueSAtIDEwKSArICdweCcsXHJcbiAgICAgICAgJ3otaW5kZXgnOiBrZXlzLmxlbmd0aFxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICAgIGxldCBpc0NyZWF0ZWQgPSBmYWxzZVxyXG4gICAgJGxheW91dC5vbignbW91c2V1cC5jcmVhdGUnLCAoKSA9PiB7XHJcbiAgICAgIGlzQ3JlYXRlZCA9IHRydWVcclxuICAgIH0pXHJcblxyXG4gICAgJChkb2N1bWVudCkub24oJ21vdXNldXAuY3JlYXRlJywgKCkgPT4ge1xyXG4gICAgICAkKGRvY3VtZW50KS5vZmYoJ21vdXNldXAuY3JlYXRlJylcclxuICAgICAgJGRlc2lnbmVyLm9mZignbW91c2Vtb3ZlLmNyZWF0aW5nJylcclxuICAgICAgJGxheW91dC5vZmYoJ21vdXNldXAuY3JlYXRlJykub2ZmKCdtb3VzZW1vdmUuY3JlYXRlJylcclxuICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChpc0NyZWF0ZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAkc2hhcGUucmVtb3ZlKClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgJHNoYXBlLmF0dHIoJ2NsYXNzJywgJ3NoYXBlLWJveCcpXHJcbiAgICAgICAgICB0aGlzLmFkZERhdGEoZWxlbWVudClcclxuICAgICAgICAgIGNhbGxiYWNrKGVsZW1lbnQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5re75Yqg5Zu+5b2iXHJcbiAgICogQHBhcmFtIHt9IHNoYXBlc1xyXG4gICAqL1xyXG4gIGFkZERhdGEoZWxlbWVudCwgc3RhdHVzKSB7XHJcbiAgICB0aGlzLmFkZERhdGFzKFtlbGVtZW50XSwgc3RhdHVzKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5re75Yqg5aSa5Liq5b2i54q2XHJcbiAgICogQHBhcmFtIHt9IGVsZW1lbnRzXHJcbiAgICovXHJcbiAgYWRkRGF0YXMoZWxlbWVudHMsIHN0YXR1cykge1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0dXMgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHN0YXR1cyA9IHRydWVcclxuICAgIH1cclxuICAgIGNvbnN0IGFkZFNoYXBlcyA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tpXVxyXG4gICAgICBhZGRTaGFwZXMucHVzaChlbGVtZW50KVxyXG4gICAgICB0aGlzLmVsZW1lbnRzW2VsZW1lbnQuZGF0YS5pZF0gPSBlbGVtZW50XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1aWxkKClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWIoOmZpOWbvuW9olxyXG4gICAqL1xyXG4gIHJlbW92ZURhdGEoc2VsZWN0ZWQsIGNhbGxiYWNrID0gKCkgPT4ge30pIHtcclxuICAgIGlmICghc2VsZWN0ZWQpIHtcclxuICAgICAgLy8gVE9ETzpcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgY2hpbGRyZW5TaGFwZXMgPSBbXVxyXG4gICAgICBzZWxlY3RlZCA9IHNlbGVjdGVkLmNvbmNhdChjaGlsZHJlblNoYXBlcylcclxuICAgICAgY2FsbGJhY2soc2VsZWN0ZWQpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRFbGVtZW50KGlkKSB7XHJcbiAgICBpZiAoaWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudHNbaWRdXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50c1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvY2VzcygpIHtcclxuICAgIGxldCByb290ID0gbnVsbFxyXG4gICAgaWYgKHRoaXMuZGVmaW5pdGlvbnMpIHtcclxuICAgICAgcm9vdCA9IHRoaXMuZGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzWzBdXHJcbiAgICAgIGRlbGV0ZSByb290LmZsb3dFbGVtZW50c1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvb3RcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiuvue9rue7hOaVsOaNrlxyXG4gICAqIEBwYXJhbSB7Kn0gZ3JvdXBcclxuICAgKiBAcGFyYW0geyp9IHNoYXBlSWRcclxuICAgKi9cclxuICBzZXRTaGFwZUdyb3Vwcyhncm91cCwgc2hhcGVJZCkge1xyXG4gICAgaWYgKCF0aGlzLmdyb3Vwc1tncm91cF0pIHtcclxuICAgICAgdGhpcy5ncm91cHNbZ3JvdXBdID0gW11cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyb3Vwc1tncm91cF0uaW5kZXhPZihzaGFwZUlkKSA8IDApIHtcclxuICAgICAgdGhpcy5ncm91cHNbZ3JvdXBdLnB1c2goc2hhcGVJZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNoYXBlQ29ubmVjdGlvbnMoaWQpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zW2lkXVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6K6+572u6L+e57q/5ZKM5Zu+5b2i5YWz6IGU5pWw5o2uXHJcbiAgICogQHBhcmFtIHsqfSBpZFxyXG4gICAqIEBwYXJhbSB7Kn0gc2hhcGVJZFxyXG4gICAqL1xyXG4gIHNldFNoYXBlQ29ubmVjdGlvbnMoaWQsIHNoYXBlSWQpIHtcclxuICAgIGlmICghdGhpcy5jb25uZWN0aW9uc1tpZF0pIHtcclxuICAgICAgdGhpcy5jb25uZWN0aW9uc1tpZF0gPSBbXVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbnNbaWRdLmluZGV4T2Yoc2hhcGVJZCkgPCAwKSB7XHJcbiAgICAgIHRoaXMuY29ubmVjdGlvbnNbaWRdLnB1c2goc2hhcGVJZClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOabtOaWsOW9oueKtlxyXG4gICAqIEBwYXJhbSB7fSBzaGFwZVxyXG4gICAqL1xyXG4gIHVwZGF0ZShlbGVtZW50KSB7XHJcbiAgICB0aGlzLnVwZGF0ZU11bHRpKFtlbGVtZW50XSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOabtOaWsOWkmuS4quW9oueKtuWumuS5iVxyXG4gICAqIEBwYXJhbSB7fSBzaGFwZXNcclxuICAgKi9cclxuICB1cGRhdGVNdWx0aShlbGVtZW50cykge1xyXG4gICAgY29uc3QgdXBkYXRlRWxlbWVudHMgPSBbXVxyXG4gICAgY29uc3Qgb3JpRWxlbWVudHMgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICBjb25zdCB7IGRhdGEsIHBsYW5lLCBzaGFwZSB9ID0gZWxlbWVudHNbaV1cclxuICAgICAgaWYgKHNoYXBlLmJwbW5OYW1lICE9PSAnU2VxdWVuY2VGbG93Jykge1xyXG4gICAgICAgIHNoYXBlLnRleHRCbG9jayA9IHNoYXBlLmdldFRleHRCbG9jaygpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZWxlbWVudHNbc2hhcGUuaWRdKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50c1tkYXRhLmlkXSA9IGNsb25lRGVlcChlbGVtZW50c1tpXSlcclxuICAgICAgICBvcmlFbGVtZW50cy5wdXNoKGNsb25lRGVlcCh0aGlzLmdldFBlcnNpc3RlbmNlQnlJZChkYXRhLmlkKSkpXHJcbiAgICAgICAgdXBkYXRlRWxlbWVudHMucHVzaChjbG9uZURlZXAoZWxlbWVudHNbaV0pKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmJ1aWxkKClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOabtOaNouWbvuW9olxyXG4gICAqIEBwYXJhbSB7fSB0YXJnZXRcclxuICAgKiBAcGFyYW0ge30gc2hhcGVOYW1lXHJcbiAgICovXHJcbiAgY2hhbmdlKHsgdGFyZ2V0LCB0eXBlIH0pIHtcclxuICAgIGNvbnN0IG5hbWUgPSBldmVudEJ1cy50cmlnZ2VyKCdpMThuJywgJ2JwbW4uJyArIHR5cGUpXHJcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnRCdXMudHJpZ2dlcignZWxlbWVudC5jcmVhdGUnLCB7XHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIHR5cGUsXHJcbiAgICAgIHByZWZpeDogJ29iaidcclxuICAgIH0pXHJcblxyXG4gICAgdGFyZ2V0LmRhdGEuJHR5cGUgPSBlbGVtZW50LmRhdGEuJHR5cGVcclxuICAgIHRhcmdldC5kYXRhLmV4dGVuc2lvbkVsZW1lbnRzLnZhbHVlcyA9IGVsZW1lbnQuZGF0YS5leHRlbnNpb25FbGVtZW50cy52YWx1ZXNcclxuICAgIHRhcmdldC5kYXRhLm5hbWUgPSBlbGVtZW50LmRhdGEubmFtZVxyXG4gICAgdGFyZ2V0LnBsYW5lLmlkID0gZWxlbWVudC5wbGFuZS5pZFxyXG4gICAgdGFyZ2V0LnNoYXBlID0gZWxlbWVudC5zaGFwZVxyXG4gICAgdGFyZ2V0LnNoYXBlLmRhdGEgPSB0YXJnZXQuZGF0YVxyXG4gICAgdGFyZ2V0LnNoYXBlLnBsYW5lID0gdGFyZ2V0LnBsYW5lXHJcblxyXG4gICAgZXZlbnRCdXMudHJpZ2dlcignc2hhcGUucmVuZGVyJywgeyB0eXBlLCBlbGVtZW50OiB0YXJnZXQgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWIoOmZpOWFqOmDqOWbvuW9olxyXG4gICAqL1xyXG4gIHJlbW92ZVNoYXBlcygpIHtcclxuICAgIGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLnNlbGVjdC5yZW1vdmUnKVxyXG4gICAgY29uc3QgZWxlbWVudHMgPSBbXVxyXG4gICAgZm9yIChsZXQga2V5IGluIHRoaXMuZWxlbWVudHMpIHtcclxuICAgICAgZWxlbWVudHMucHVzaCh0aGlzLmVsZW1lbnRzW2tleV0pXHJcbiAgICB9XHJcbiAgICBldmVudEJ1cy50cmlnZ2VyKCdzaGFwZS5yZW1vdmUnLCBlbGVtZW50cylcclxuICB9XHJcblxyXG4gIGJ1aWxkKCkge1xyXG4gICAgdGhpcy5vcmRlcnMgPSBbXVxyXG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHt9XHJcbiAgICBmb3IgKGxldCBpZCBpbiB0aGlzLmVsZW1lbnRzKSB7XHJcbiAgICAgIGNvbnN0IHsgZGF0YSwgcGxhbmUsIHNoYXBlIH0gPSB0aGlzLmVsZW1lbnRzW2lkXVxyXG4gICAgICB0aGlzLm9yZGVycy5wdXNoKHsgaWQ6IGRhdGEuaWQsIHppbmRleDogc2hhcGUuc2hhcGVTdHlsZS56aW5kZXggfSlcclxuICAgICAgaWYgKHNoYXBlLmJwbW5OYW1lID09PSAnU2VxdWVuY2VGbG93Jykge1xyXG4gICAgICAgIGlmIChkYXRhLnNvdXJjZVJlZiAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFNoYXBlQ29ubmVjdGlvbnMoZGF0YS5zb3VyY2VSZWYsIGRhdGEuaWQpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRhLnRhcmdldFJlZiAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFNoYXBlQ29ubmVjdGlvbnMoZGF0YS50YXJnZXRSZWYsIGRhdGEuaWQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChzaGFwZS5ncm91cCkge1xyXG4gICAgICAgIHRoaXMuc2V0U2hhcGVHcm91cHMoc2hhcGUuZ3JvdXAsIGRhdGEuaWQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9yZGVycy5zb3J0KChpdGVtMSwgaXRlbTIpID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW0xLnppbmRleCAtIGl0ZW0yLnppbmRleFxyXG4gICAgfSlcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vcmRlcnMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgY29uc3QgaWQgPSB0aGlzLm9yZGVyc1tpXS5pZFxyXG4gICAgICB0aGlzLiRjb250YWluZXIuZmluZCgnLnNoYXBlLWJveFtkYXRhLWlkPVwiJyArIGlkICsgJ1wiXScpLmNzcygnei1pbmRleCcsIGkpXHJcbiAgICB9XHJcbiAgICBsZXQgaW5kZXggPSAwXHJcbiAgICBpZiAodGhpcy5vcmRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBpbmRleCA9IHRoaXMub3JkZXJzW3RoaXMub3JkZXJzLmxlbmd0aCAtIDFdLnppbmRleFxyXG4gICAgfVxyXG4gICAgdGhpcy5tYXhaSW5kZXggPSBpbmRleFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Yib5bu65YWD57Sg5qih5Z6LXHJcbiAgICogQHBhcmFtIHsqfSBkYXRhXHJcbiAgICovXHJcbiAgY3JlYXRlQXR0cnMoZGF0YSwgcGxhbmUsIHNoYXBlKSB7XHJcbiAgICBjb25zdCBvYmogPSB7XHJcbiAgICAgIGRhdGE6IHt9LFxyXG4gICAgICBwbGFuZToge31cclxuICAgIH1cclxuICAgIGxldCBpZCA9IGRhdGEuaWQgfHwgJ29ial8nICsgdGhpcy5vcHRpb25zLmlkcy5uZXh0KClcclxuICAgIGlmIChkYXRhKSB7XHJcbiAgICAgIGZvciAobGV0IGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgICAgIC8vIOS4jeWkhOeQhlxyXG4gICAgICAgICAgY2FzZSAnJHR5cGUnOlxyXG4gICAgICAgICAgY2FzZSAnZmxvd0VsZW1lbnRzJzpcclxuICAgICAgICAgIGNhc2UgJ3NvdXJjZVJlZic6XHJcbiAgICAgICAgICBjYXNlICd0YXJnZXRSZWYnOlxyXG4gICAgICAgICAgY2FzZSAnaW5jb21pbmcnOlxyXG4gICAgICAgICAgY2FzZSAnb3V0Z29pbmcnOlxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgLy8g5omp5bGV5bGe5oCnXHJcbiAgICAgICAgICBjYXNlICdleHRlbnNpb25FbGVtZW50cyc6XHJcbiAgICAgICAgICAgIG9iai5kYXRhLmV4dGVuc2lvbkVsZW1lbnRzID0gdGhpcy5jcmVhdGVFeHRlbnNpb25Nb2RlbChcclxuICAgICAgICAgICAgICBkYXRhW2tleV0udmFsdWVzIHx8IFtdXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIG9iai5kYXRhW2tleV0gPSBkYXRhW2tleV1cclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChwbGFuZSkge1xyXG4gICAgICBmb3IgKGxldCBrZXkgaW4gcGxhbmUpIHtcclxuICAgICAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICAgICAgLy8g5LiN5aSE55CGXHJcbiAgICAgICAgICBjYXNlICckdHlwZSc6XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAvLyBpZOS4juaVsOaNrmlk5a+55bqUXHJcbiAgICAgICAgICBjYXNlICdpZCc6XHJcbiAgICAgICAgICAgIG9iai5wbGFuZVtrZXldID0gaWQgKyAnX2RpJ1xyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgY2FzZSAnd2F5cG9pbnQnOlxyXG4gICAgICAgICAgICBpZiAoc2hhcGUuYnBtbk5hbWUgPT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBwbGFuZVtrZXldWzBdXHJcbiAgICAgICAgICAgICAgY29uc3QgZW5kID0gcGxhbmVba2V5XVtwbGFuZVtrZXldLmxlbmd0aCAtIDFdXHJcbiAgICAgICAgICAgICAgY29uc3Qgd2F5cG9pbnQgPSBbXVxyXG4gICAgICAgICAgICAgIC8vIOaPkuWFpei1t+Wni+eCuVxyXG4gICAgICAgICAgICAgIHdheXBvaW50LnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZU1vZGVsKHtcclxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcjogJ2RjOlBvaW50JyxcclxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiBzdGFydC54LFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IHN0YXJ0LnlcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgLy8g5o+S5YWl5oqY54K5XHJcbiAgICAgICAgICAgICAgc2hhcGUucG9pbnRzLmZvckVhY2gocG9pbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgd2F5cG9pbnQucHVzaChcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVNb2RlbCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcjogJ2RjOlBvaW50JyxcclxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgeDogcG9pbnQueCxcclxuICAgICAgICAgICAgICAgICAgICAgIHk6IHBvaW50LnlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAvLyDmj5LlhaXnu5PmnZ/ngrlcclxuICAgICAgICAgICAgICB3YXlwb2ludC5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVNb2RlbCh7XHJcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3I6ICdkYzpQb2ludCcsXHJcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogZW5kLngsXHJcbiAgICAgICAgICAgICAgICAgICAgeTogZW5kLnlcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgb2JqLnBsYW5lW2tleV0gPSB3YXlwb2ludFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICBjYXNlICdib3VuZHMnOlxyXG4gICAgICAgICAgICBpZiAoc2hhcGUuYnBtbk5hbWUgIT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgeyBoZWlnaHQsIHdpZHRoLCB4LCB5IH0gPSBwbGFuZVtrZXldXHJcbiAgICAgICAgICAgICAgb2JqLnBsYW5lW2tleV0gPSB0aGlzLmNyZWF0ZU1vZGVsKHtcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3I6ICdkYzpCb3VuZHMnLFxyXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgICAgICAgICAgeCxcclxuICAgICAgICAgICAgICAgICAgeVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIG9iai5wbGFuZVtrZXldID0gcGxhbmVba2V5XVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9ialxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Yib5bu65pWw5o2uXHJcbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xyXG4gICAqL1xyXG4gIGNyZWF0ZUVsZW1lbnQoeyB0eXBlLCBwcmVmaXgsIG5hbWUsIHBvcyB9LCBjYWxsYmFjayA9ICgpID0+IHt9KSB7XHJcbiAgICBjb25zdCBpZCA9IHByZWZpeCArICdfJyArIHRoaXMub3B0aW9ucy5pZHMubmV4dCgpXHJcbiAgICAvLyDlhYPntKDmlbDmja5cclxuICAgIGNvbnN0IGRhdGEgPSBjbG9uZURlZXAoXHJcbiAgICAgIHRoaXMuY3JlYXRlTW9kZWwoe1xyXG4gICAgICAgIGRlc2NyaXB0b3I6ICdicG1uOicgKyB0eXBlLFxyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgaWQsXHJcbiAgICAgICAgICBleHRlbnNpb25FbGVtZW50czogdGhpcy5jcmVhdGVFeHRlbnNpb25Nb2RlbCgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKVxyXG5cclxuICAgIGxldCBwbGFuZSA9IHt9XHJcblxyXG4gICAgaWYgKHR5cGUgPT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgIC8vIOi/nue6v+e7mOWbvuaVsOaNrlxyXG4gICAgICBwbGFuZSA9IGNsb25lRGVlcChcclxuICAgICAgICB0aGlzLmNyZWF0ZU1vZGVsKHtcclxuICAgICAgICAgIGRlc2NyaXB0b3I6ICdicG1uZGk6QlBNTkVkZ2UnLFxyXG4gICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgaWQ6IGlkICsgJ19kaScsXHJcbiAgICAgICAgICAgIHdheXBvaW50OiBbXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIOWbvuW9oue7mOWbvuaVsOaNrlxyXG4gICAgICBwbGFuZSA9IGNsb25lRGVlcChcclxuICAgICAgICB0aGlzLmNyZWF0ZU1vZGVsKHtcclxuICAgICAgICAgIGRlc2NyaXB0b3I6ICdicG1uZGk6QlBNTlNoYXBlJyxcclxuICAgICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICAgIGJvdW5kczogdGhpcy5jcmVhdGVNb2RlbCh7XHJcbiAgICAgICAgICAgICAgZGVzY3JpcHRvcjogJ2RjOkJvdW5kcycsXHJcbiAgICAgICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgICAgICB5OiAwXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgYnBtbkVsZW1lbnQ6IGlkLFxyXG4gICAgICAgICAgICBpZDogaWQgKyAnX2RpJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICAgIGlmIChwb3MpIHtcclxuICAgICAgICBwbGFuZS5ib3VuZHMueCA9IHJlc3RvcmVTY2FsZShwb3MueCkgLSBwbGFuZS5ib3VuZHMud2lkdGhcclxuICAgICAgICBwbGFuZS5ib3VuZHMueSA9IHJlc3RvcmVTY2FsZShwb3MueSkgLSBwbGFuZS5ib3VuZHMuaGVpZ2h0XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyDlm77lvaLmlbDmja5cclxuXHJcbiAgICBsZXQgZWxlbWVudCA9IHtcclxuICAgICAgZGF0YSxcclxuICAgICAgcGxhbmVcclxuICAgIH1cclxuXHJcbiAgICBlbGVtZW50ID0gZXZlbnRCdXMudHJpZ2dlcignc2hhcGUuY3JlYXRlJywge1xyXG4gICAgICB0eXBlLFxyXG4gICAgICBlbGVtZW50XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMubWF4WkluZGV4ID0gZWxlbWVudC5zaGFwZS5zaGFwZVN0eWxlLnppbmRleCA9IHRoaXMubWF4WkluZGV4ICsgMVxyXG5cclxuICAgIGNhbGxiYWNrKGVsZW1lbnQpXHJcblxyXG4gICAgcmV0dXJuIGVsZW1lbnRcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWIm+W7uuWumuS5ieaVsOaNrlxyXG4gICAqL1xyXG4gIGNyZWF0ZURlZmluaXRpb24oKSB7XHJcbiAgICB0aGlzLmRlZmluaXRpb25zLnJvb3RFbGVtZW50cy5mb3JFYWNoKChyb290LCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBzaGFwZXMgPSB7fVxyXG4gICAgICBjb25zdCBmbG93RWxlbWVudHMgPSBbXVxyXG4gICAgICBjb25zdCBwbGFuZUVsZW1lbnQgPSBbXVxyXG4gICAgICAvLyDlhYjnlJ/miJDlm77lvaJcclxuICAgICAgZm9yIChsZXQgaWQgaW4gdGhpcy5lbGVtZW50cykge1xyXG4gICAgICAgIGNvbnN0IHsgZGF0YSwgcGxhbmUsIHNoYXBlIH0gPSB0aGlzLmVsZW1lbnRzW2lkXVxyXG4gICAgICAgIGNvbnN0IHR5cGUgPSBzaGFwZS5icG1uTmFtZVxyXG4gICAgICAgIGlmICh0eXBlICE9PSAnU2VxdWVuY2VGbG93Jykge1xyXG4gICAgICAgICAgY29uc3QgYXR0ck9iaiA9IHRoaXMuY3JlYXRlQXR0cnMoZGF0YSwgcGxhbmUsIHNoYXBlKVxyXG4gICAgICAgICAgYXR0ck9iai5kYXRhLmluY29taW5nID0gW11cclxuICAgICAgICAgIGF0dHJPYmouZGF0YS5vdXRnb2luZyA9IFtdXHJcblxyXG4gICAgICAgICAgY29uc3QgbW9kZWxEYXRhID0gdGhpcy5jcmVhdGVNb2RlbCh7XHJcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6IGRhdGEuJHR5cGUsXHJcbiAgICAgICAgICAgIGF0dHJzOiBhdHRyT2JqLmRhdGFcclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgYXR0ck9iai5wbGFuZS5icG1uRWxlbWVudCA9IG1vZGVsRGF0YVxyXG4gICAgICAgICAgY29uc3QgbW9kZWxQbGFuZSA9IHRoaXMuY3JlYXRlTW9kZWwoe1xyXG4gICAgICAgICAgICBkZXNjcmlwdG9yOiBwbGFuZS4kdHlwZSxcclxuICAgICAgICAgICAgYXR0cnM6IGF0dHJPYmoucGxhbmVcclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgc2hhcGVzW21vZGVsRGF0YS5pZF0gPSBtb2RlbERhdGFcclxuXHJcbiAgICAgICAgICBmbG93RWxlbWVudHMucHVzaChtb2RlbERhdGEpXHJcbiAgICAgICAgICBwbGFuZUVsZW1lbnQucHVzaChtb2RlbFBsYW5lKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyDlkI7nlJ/miJDov57nur9cclxuICAgICAgZm9yIChsZXQgaWQgaW4gdGhpcy5lbGVtZW50cykge1xyXG4gICAgICAgIGNvbnN0IHsgZGF0YSwgcGxhbmUsIHNoYXBlIH0gPSB0aGlzLmVsZW1lbnRzW2lkXVxyXG4gICAgICAgIGNvbnN0IHR5cGUgPSBzaGFwZS5icG1uTmFtZVxyXG4gICAgICAgIGlmICh0eXBlID09PSAnU2VxdWVuY2VGbG93Jykge1xyXG4gICAgICAgICAgY29uc3QgYXR0ck9iaiA9IHRoaXMuY3JlYXRlQXR0cnMoZGF0YSwgcGxhbmUsIHNoYXBlKVxyXG4gICAgICAgICAgYXR0ck9iai5kYXRhLnNvdXJjZVJlZiA9IHNoYXBlc1tkYXRhLnNvdXJjZVJlZl1cclxuICAgICAgICAgIGF0dHJPYmouZGF0YS50YXJnZXRSZWYgPSBzaGFwZXNbZGF0YS50YXJnZXRSZWZdXHJcblxyXG4gICAgICAgICAgY29uc3QgbW9kZWxEYXRhID0gdGhpcy5jcmVhdGVNb2RlbCh7XHJcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6IGRhdGEuJHR5cGUsXHJcbiAgICAgICAgICAgIGF0dHJzOiBhdHRyT2JqLmRhdGFcclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgaWYgKGRhdGEuc291cmNlUmVmKSB7XHJcbiAgICAgICAgICAgIHNoYXBlc1tkYXRhLnNvdXJjZVJlZl0ub3V0Z29pbmcucHVzaChtb2RlbERhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZGF0YS50YXJnZXRSZWYpIHtcclxuICAgICAgICAgICAgc2hhcGVzW2RhdGEudGFyZ2V0UmVmXS5pbmNvbWluZy5wdXNoKG1vZGVsRGF0YSlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBhdHRyT2JqLnBsYW5lLmJwbW5FbGVtZW50ID0gbW9kZWxEYXRhXHJcbiAgICAgICAgICBjb25zdCBtb2RlbFBsYW5lID0gdGhpcy5jcmVhdGVNb2RlbCh7XHJcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6IHBsYW5lLiR0eXBlLFxyXG4gICAgICAgICAgICBhdHRyczogYXR0ck9iai5wbGFuZVxyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICBmbG93RWxlbWVudHMucHVzaChtb2RlbERhdGEpXHJcbiAgICAgICAgICBwbGFuZUVsZW1lbnQucHVzaChtb2RlbFBsYW5lKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5kZWZpbml0aW9ucy5kaWFncmFtc1tpbmRleF0ucGxhbmUucGxhbmVFbGVtZW50ID0gcGxhbmVFbGVtZW50XHJcbiAgICAgIHRoaXMuZGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzW2luZGV4XSA9IHRoaXMuY3JlYXRlTW9kZWwoe1xyXG4gICAgICAgIGRlc2NyaXB0b3I6IHJvb3QuJHR5cGUsXHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGlkOiByb290LmlkIHx8IHRoaXMub3B0aW9ucy5pZHMubmV4dCgpLFxyXG4gICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHM6IHRoaXMuY3JlYXRlRXh0ZW5zaW9uTW9kZWwoXHJcbiAgICAgICAgICAgIHJvb3QuZXh0ZW5zaW9uRWxlbWVudHMudmFsdWVzIHx8IFtdXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmRlZmluaXRpb25zLnJvb3RFbGVtZW50c1tpbmRleF0uZmxvd0VsZW1lbnRzID0gZmxvd0VsZW1lbnRzXHJcbiAgICB9KVxyXG5cclxuICAgIHJldHVybiB0aGlzLmRlZmluaXRpb25zXHJcbiAgfVxyXG5cclxuICBzZXRQcm9jZXNzTW9kZWwoKSB7XHJcbiAgICBjb25zdCBpZCA9ICdwcm9jZXNzXycgKyB0aGlzLm9wdGlvbnMuaWRzLm5leHQoKVxyXG4gICAgY29uc3Qgcm9vdEVsZW1lbnRzID0gW1xyXG4gICAgICB0aGlzLmNyZWF0ZU1vZGVsKHtcclxuICAgICAgICBkZXNjcmlwdG9yOiAnYnBtbjpQcm9jZXNzJyxcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgaWQsXHJcbiAgICAgICAgICBmbG93RWxlbWVudHM6IFtdLFxyXG4gICAgICAgICAgZXh0ZW5zaW9uRWxlbWVudHM6IHRoaXMuY3JlYXRlRXh0ZW5zaW9uTW9kZWwoW10pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgXVxyXG5cclxuICAgIGNvbnN0IGRpYWdyYW1zID0gW1xyXG4gICAgICB0aGlzLmNyZWF0ZU1vZGVsKHtcclxuICAgICAgICBkZXNjcmlwdG9yOiAnYnBtbmRpOkJQTU5EaWFncmFtJyxcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgaWQ6IGlkICsgJ19kaScsXHJcbiAgICAgICAgICBwbGFuZTogdGhpcy5jcmVhdGVNb2RlbCh7XHJcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6ICdicG1uZGk6QlBNTlBsYW5lJyxcclxuICAgICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgICBpZDogaWQgKyAnX3BsJyxcclxuICAgICAgICAgICAgICBwbGFuZUVsZW1lbnQ6IFtdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgXVxyXG5cclxuICAgIHRoaXMuZGVmaW5pdGlvbnMucm9vdEVsZW1lbnRzID0gcm9vdEVsZW1lbnRzXHJcbiAgICB0aGlzLmRlZmluaXRpb25zLmRpYWdyYW1zID0gZGlhZ3JhbXNcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWIm+W7uuaooeWei+aVsOaNrlxyXG4gICAqIEBwYXJhbSB7Kn0gZGF0YVxyXG4gICAqL1xyXG4gIGNyZWF0ZU1vZGVsKGRhdGEpIHtcclxuICAgIGxldCBicG1uTW9kZWwgPSBudWxsXHJcbiAgICBldmVudEJ1cy50cmlnZ2VyKCdtb2RlbC5jcmVhdGUnLCBkYXRhLCBtb2RlbCA9PiB7XHJcbiAgICAgIGJwbW5Nb2RlbCA9IG1vZGVsXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIGJwbW5Nb2RlbFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Yib5bu65omp5bGV5bGe5oCn5qih5Z6LXHJcbiAgICogQHBhcmFtIHsqfSB2YWx1ZXNcclxuICAgKi9cclxuICBjcmVhdGVFeHRlbnNpb25Nb2RlbCh2YWx1ZXMgPSBbXSkge1xyXG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IFtdXHJcbiAgICB2YWx1ZXMuZm9yRWFjaChleHRlbnNpb24gPT4ge1xyXG4gICAgICBjb25zdCBkZXNjcmlwdG9yID0gZXh0ZW5zaW9uLiR0eXBlIHx8IGV4dGVuc2lvbi5uYW1lXHJcbiAgICAgIGNvbnN0IGF0dHJzID0gY2xvbmVEZWVwKGV4dGVuc2lvbilcclxuICAgICAgZGVsZXRlIGF0dHJzLiR0eXBlXHJcbiAgICAgIGRlbGV0ZSBhdHRycy5uYW1lXHJcbiAgICAgIGNvbnN0IGV4dGVuc2lvbk1vZGVsID0gdGhpcy5jcmVhdGVNb2RlbCh7XHJcbiAgICAgICAgZGVzY3JpcHRvcixcclxuICAgICAgICBhdHRyc1xyXG4gICAgICB9KVxyXG4gICAgICBpZiAoZXh0ZW5zaW9uTW9kZWwpIHtcclxuICAgICAgICBleHRlbnNpb25zLnB1c2goZXh0ZW5zaW9uTW9kZWwpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTW9kZWwoe1xyXG4gICAgICBkZXNjcmlwdG9yOiAnYnBtbjpFeHRlbnNpb25FbGVtZW50cycsXHJcbiAgICAgIGF0dHJzOiB7IHZhbHVlczogZXh0ZW5zaW9ucyB9XHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaW5zdGFuY2UgPSAob3B0aW9ucywgJGNvbnRhaW5lciwgZGVmaW5pdGlvbnMpID0+IHtcclxuICByZXR1cm4gbmV3IERlc2lnbmVyKG9wdGlvbnMsICRjb250YWluZXIsIGRlZmluaXRpb25zKVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBpbnN0YW5jZVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2NvcmUvZGVzaWduZXIuanMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQUtBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFJQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBakJBO0FBbUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFRQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFRQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFRQTtBQXBDQTtBQXFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFGQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFoRUE7QUFrRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFGQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQVFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQU9BO0FBQ0E7QUFUQTtBQUZBO0FBQ0E7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBRkE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFGQTtBQUNBO0FBU0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFGQTtBQUZBO0FBRkE7QUFDQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFJQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTs7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///12\n"); + +/***/ }), +/* 13 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__drawUtils__ = __webpack_require__(2);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar Operation = function () {\n function Operation() {\n _classCallCheck(this, Operation);\n\n this.state = null;\n\n this.canvasDragTimeout = null;\n }\n /**\r\n * 注销事件\r\n */\n\n\n _createClass(Operation, [{\n key: 'destroy',\n value: function destroy() {\n if (this.$container) {\n var $layout = this.$container.find('.bpd-layout');\n var $designer = this.$container.find('.bpd-designer');\n\n $designer.off('mousedown.multiselect');\n\n $layout.off('mousedown.connection').off('mousedown.createText').off('mousedown.dragCanvas');\n\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('destroy');\n }\n }\n\n /**\r\n * 只读的设计器支持链接操作\r\n */\n\n }, {\n key: 'cancel',\n value: function cancel() {\n this.destroy();\n }\n\n /**\r\n * 画布鼠标移动事件\r\n * @param {*} $this\r\n */\n\n }, {\n key: 'move',\n value: function move($this) {\n var $container = this.$container,\n designer = this.designer;\n\n if ($container) {\n var $layout = $container.find('.bpd-layout');\n var $designer = $container.find('.bpd-designer');\n if (this.state != null) {\n return;\n }\n\n this.destroy();\n\n var mousePos = __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].getRelativePos($this.pageX, $this.pageY, $container);\n var shapeData = __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].getShapeByPosition(mousePos.x, mousePos.y, $container);\n var data = {\n state: {\n state: this.state,\n reset: this.resetState.bind(this),\n change: this.changeState.bind(this)\n }\n };\n\n if (shapeData != null) {\n data.element = shapeData.element;\n data.anchor = shapeData.anchor;\n data.point = shapeData.point;\n\n if (shapeData.type === 'sequence') {\n $designer.css('cursor', 'pointer');\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.hover', data);\n\n var element = shapeData.element;\n var pointIndex = shapeData.pointIndex;\n\n if (element.shape.linkerType === 'broken' && pointIndex > 1 && pointIndex <= element.shape.points.length) {} else {\n if (element.data.sourceRef == null && element.data.targetRef == null) {\n $designer.css('cursor', 'move');\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.drag', data);\n }\n }\n } else {\n if (shapeData.type === 'sequence_point') {\n $designer.css('cursor', 'move');\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.hover', data);\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('connection.drag', data);\n } else {\n if (shapeData.type === 'sequence_text') {\n $designer.css('cursor', 'text');\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.hover', data);\n } else {\n if (shapeData.type === 'shape') {\n if (shapeData.element.shape.locked) {\n $designer.css('cursor', 'default');\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.hover', data);\n } else {\n $designer.css('cursor', 'move');\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.hover', data);\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.edit', data);\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.drag', data);\n }\n } else {\n $designer.css('cursor', 'crosshair');\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.hover', data);\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.hover', data);\n }\n if (shapeData.element.shape.parent) {\n var parent = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('element.get', shapeData.element.shape.parent);\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.show', parent);\n } else {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.show', shapeData.element);\n }\n }\n }\n }\n } else {\n $designer.css('cursor', 'default');\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('canvas.hover', data);\n }\n }\n }\n /**\r\n * 修改状态\r\n * @param {*} state\r\n */\n\n }, {\n key: 'changeState',\n value: function changeState(state) {\n this.state = state;\n }\n /**\r\n * 还愿状态\r\n */\n\n }, {\n key: 'resetState',\n value: function resetState() {\n this.state = null;\n var $designer = this.$container.find('.bpd-designer');\n $designer.css('cursor', 'default');\n }\n }]);\n\n return Operation;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Operation);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvb3BlcmF0aW9uLmpzP2JkY2EiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV2ZW50QnVzIGZyb20gJy4uL2NvcmUvZXZlbnRCdXMnXHJcbmltcG9ydCBEcmF3VXRpbHMgZnJvbSAnLi9kcmF3VXRpbHMnXHJcblxyXG5jbGFzcyBPcGVyYXRpb24ge1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5zdGF0ZSA9IG51bGxcclxuXHJcbiAgICB0aGlzLmNhbnZhc0RyYWdUaW1lb3V0ID0gbnVsbFxyXG4gIH1cclxuICAvKipcclxuICAgKiDms6jplIDkuovku7ZcclxuICAgKi9cclxuICBkZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuJGNvbnRhaW5lcikge1xyXG4gICAgICBjb25zdCAkbGF5b3V0ID0gdGhpcy4kY29udGFpbmVyLmZpbmQoJy5icGQtbGF5b3V0JylcclxuICAgICAgY29uc3QgJGRlc2lnbmVyID0gdGhpcy4kY29udGFpbmVyLmZpbmQoJy5icGQtZGVzaWduZXInKVxyXG5cclxuICAgICAgJGRlc2lnbmVyLm9mZignbW91c2Vkb3duLm11bHRpc2VsZWN0JylcclxuXHJcbiAgICAgICRsYXlvdXRcclxuICAgICAgICAub2ZmKCdtb3VzZWRvd24uY29ubmVjdGlvbicpXHJcbiAgICAgICAgLm9mZignbW91c2Vkb3duLmNyZWF0ZVRleHQnKVxyXG4gICAgICAgIC5vZmYoJ21vdXNlZG93bi5kcmFnQ2FudmFzJylcclxuXHJcbiAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2Rlc3Ryb3knKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Y+q6K+755qE6K6+6K6h5Zmo5pSv5oyB6ZO+5o6l5pON5L2cXHJcbiAgICovXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgdGhpcy5kZXN0cm95KClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOeUu+W4g+m8oOagh+enu+WKqOS6i+S7tlxyXG4gICAqIEBwYXJhbSB7Kn0gJHRoaXNcclxuICAgKi9cclxuICBtb3ZlKCR0aGlzKSB7XHJcbiAgICBjb25zdCB7ICRjb250YWluZXIsIGRlc2lnbmVyIH0gPSB0aGlzXHJcbiAgICBpZiAoJGNvbnRhaW5lcikge1xyXG4gICAgICBjb25zdCAkbGF5b3V0ID0gJGNvbnRhaW5lci5maW5kKCcuYnBkLWxheW91dCcpXHJcbiAgICAgIGNvbnN0ICRkZXNpZ25lciA9ICRjb250YWluZXIuZmluZCgnLmJwZC1kZXNpZ25lcicpXHJcbiAgICAgIGlmICh0aGlzLnN0YXRlICE9IG51bGwpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5kZXN0cm95KClcclxuXHJcbiAgICAgIGNvbnN0IG1vdXNlUG9zID0gRHJhd1V0aWxzLmdldFJlbGF0aXZlUG9zKFxyXG4gICAgICAgICR0aGlzLnBhZ2VYLFxyXG4gICAgICAgICR0aGlzLnBhZ2VZLFxyXG4gICAgICAgICRjb250YWluZXJcclxuICAgICAgKVxyXG4gICAgICBjb25zdCBzaGFwZURhdGEgPSBEcmF3VXRpbHMuZ2V0U2hhcGVCeVBvc2l0aW9uKFxyXG4gICAgICAgIG1vdXNlUG9zLngsXHJcbiAgICAgICAgbW91c2VQb3MueSxcclxuICAgICAgICAkY29udGFpbmVyXHJcbiAgICAgIClcclxuICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICBzdGF0ZToge1xyXG4gICAgICAgICAgc3RhdGU6IHRoaXMuc3RhdGUsXHJcbiAgICAgICAgICByZXNldDogdGhpcy5yZXNldFN0YXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICBjaGFuZ2U6IHRoaXMuY2hhbmdlU3RhdGUuYmluZCh0aGlzKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHNoYXBlRGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgZGF0YS5lbGVtZW50ID0gc2hhcGVEYXRhLmVsZW1lbnRcclxuICAgICAgICBkYXRhLmFuY2hvciA9IHNoYXBlRGF0YS5hbmNob3JcclxuICAgICAgICBkYXRhLnBvaW50ID0gc2hhcGVEYXRhLnBvaW50XHJcblxyXG4gICAgICAgIGlmIChzaGFwZURhdGEudHlwZSA9PT0gJ3NlcXVlbmNlJykge1xyXG4gICAgICAgICAgJGRlc2lnbmVyLmNzcygnY3Vyc29yJywgJ3BvaW50ZXInKVxyXG4gICAgICAgICAgZXZlbnRCdXMudHJpZ2dlcignc2hhcGUuaG92ZXInLCBkYXRhKVxyXG5cclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBzaGFwZURhdGEuZWxlbWVudFxyXG4gICAgICAgICAgY29uc3QgcG9pbnRJbmRleCA9IHNoYXBlRGF0YS5wb2ludEluZGV4XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBlbGVtZW50LnNoYXBlLmxpbmtlclR5cGUgPT09ICdicm9rZW4nICYmXHJcbiAgICAgICAgICAgIHBvaW50SW5kZXggPiAxICYmXHJcbiAgICAgICAgICAgIHBvaW50SW5kZXggPD0gZWxlbWVudC5zaGFwZS5wb2ludHMubGVuZ3RoXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBlbGVtZW50LmRhdGEuc291cmNlUmVmID09IG51bGwgJiZcclxuICAgICAgICAgICAgICBlbGVtZW50LmRhdGEudGFyZ2V0UmVmID09IG51bGxcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgJGRlc2lnbmVyLmNzcygnY3Vyc29yJywgJ21vdmUnKVxyXG4gICAgICAgICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLmRyYWcnLCBkYXRhKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChzaGFwZURhdGEudHlwZSA9PT0gJ3NlcXVlbmNlX3BvaW50Jykge1xyXG4gICAgICAgICAgICAkZGVzaWduZXIuY3NzKCdjdXJzb3InLCAnbW92ZScpXHJcbiAgICAgICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLmhvdmVyJywgZGF0YSlcclxuICAgICAgICAgICAgZXZlbnRCdXMudHJpZ2dlcignY29ubmVjdGlvbi5kcmFnJywgZGF0YSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChzaGFwZURhdGEudHlwZSA9PT0gJ3NlcXVlbmNlX3RleHQnKSB7XHJcbiAgICAgICAgICAgICAgJGRlc2lnbmVyLmNzcygnY3Vyc29yJywgJ3RleHQnKVxyXG4gICAgICAgICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLmhvdmVyJywgZGF0YSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoc2hhcGVEYXRhLnR5cGUgPT09ICdzaGFwZScpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzaGFwZURhdGEuZWxlbWVudC5zaGFwZS5sb2NrZWQpIHtcclxuICAgICAgICAgICAgICAgICAgJGRlc2lnbmVyLmNzcygnY3Vyc29yJywgJ2RlZmF1bHQnKVxyXG4gICAgICAgICAgICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCdzaGFwZS5ob3ZlcicsIGRhdGEpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAkZGVzaWduZXIuY3NzKCdjdXJzb3InLCAnbW92ZScpXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLmhvdmVyJywgZGF0YSlcclxuICAgICAgICAgICAgICAgICAgZXZlbnRCdXMudHJpZ2dlcignc2hhcGUuZWRpdCcsIGRhdGEpXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLmRyYWcnLCBkYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAkZGVzaWduZXIuY3NzKCdjdXJzb3InLCAnY3Jvc3NoYWlyJylcclxuICAgICAgICAgICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLmhvdmVyJywgZGF0YSlcclxuICAgICAgICAgICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2FuY2hvci5ob3ZlcicsIGRhdGEpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChzaGFwZURhdGEuZWxlbWVudC5zaGFwZS5wYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGV2ZW50QnVzLm9uKFxyXG4gICAgICAgICAgICAgICAgICAnZWxlbWVudC5nZXQnLFxyXG4gICAgICAgICAgICAgICAgICBzaGFwZURhdGEuZWxlbWVudC5zaGFwZS5wYXJlbnRcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2FuY2hvci5zaG93JywgcGFyZW50KVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCdhbmNob3Iuc2hvdycsIHNoYXBlRGF0YS5lbGVtZW50KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkZGVzaWduZXIuY3NzKCdjdXJzb3InLCAnZGVmYXVsdCcpXHJcbiAgICAgICAgZXZlbnRCdXMudHJpZ2dlcignY2FudmFzLmhvdmVyJywgZGF0YSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiDkv67mlLnnirbmgIFcclxuICAgKiBAcGFyYW0geyp9IHN0YXRlXHJcbiAgICovXHJcbiAgY2hhbmdlU3RhdGUoc3RhdGUpIHtcclxuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZVxyXG4gIH1cclxuICAvKipcclxuICAgKiDov5jmhL/nirbmgIFcclxuICAgKi9cclxuICByZXNldFN0YXRlKCkge1xyXG4gICAgdGhpcy5zdGF0ZSA9IG51bGxcclxuICAgIGNvbnN0ICRkZXNpZ25lciA9IHRoaXMuJGNvbnRhaW5lci5maW5kKCcuYnBkLWRlc2lnbmVyJylcclxuICAgICRkZXNpZ25lci5jc3MoJ2N1cnNvcicsICdkZWZhdWx0JylcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE9wZXJhdGlvblxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2RyYXcvb3BlcmF0aW9uLmpzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBREE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///13\n"); + +/***/ }), +/* 14 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_slimJQ__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__shape__ = __webpack_require__(15);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_utils__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_gradient__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__drawUtils__ = __webpack_require__(2);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\n\n\nvar DrawShape = function () {\n function DrawShape(options, $container) {\n _classCallCheck(this, DrawShape);\n\n this.options = options;\n\n this.$container = $container;\n\n Object(__WEBPACK_IMPORTED_MODULE_1__shape__[\"b\" /* init */])();\n }\n /**\r\n * 创建图形数据\r\n * @param {*} type\r\n * @param {*} data\r\n */\n\n\n _createClass(DrawShape, [{\n key: 'createShape',\n value: function createShape(type, data) {\n return new __WEBPACK_IMPORTED_MODULE_1__shape__[\"a\" /* default */][type](data, this.options.bpmnStyle[type]);\n }\n /**\r\n * 渲染\r\n * @param {*} type\r\n * @param {*} element\r\n */\n\n }, {\n key: 'render',\n value: function render(type, element) {\n if (!element.shape) {\n element.shape = this.createShape(type, element);\n }\n this.renderShape(element);\n }\n /**\r\n * 渲染图形\r\n */\n\n }, {\n key: 'renderShape',\n value: function renderShape(element) {\n var shape = element.shape,\n data = element.data,\n plane = element.plane;\n\n\n var $shape = this.$container.find('.shape-box[data-id=\"' + data.id + '\"]');\n if ($shape.length === 0) {\n $shape = Object(__WEBPACK_IMPORTED_MODULE_0__utils_slimJQ__[\"a\" /* default */])(\"
\").appendTo(this.$container.find('.bpd-designer'));\n }\n\n var _plane$bounds = plane.bounds,\n x = _plane$bounds.x,\n y = _plane$bounds.y,\n width = _plane$bounds.width,\n height = _plane$bounds.height;\n var _shape$shapeStyle = shape.shapeStyle,\n angle = _shape$shapeStyle.angle,\n zindex = _shape$shapeStyle.zindex;\n\n\n var shapeBoxSize = __WEBPACK_IMPORTED_MODULE_4__drawUtils__[\"a\" /* default */].getShapeBox(element);\n var shapeW = shapeBoxSize.width + 20;\n var shapeH = shapeBoxSize.height + 20;\n\n var $shapeCanvas = $shape.find('.shape-canvas');\n $shapeCanvas.attr({ width: shapeW, height: shapeH });\n $shape.css({\n left: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(shapeBoxSize.x - 10) + 'px',\n top: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(shapeBoxSize.y - 10) + 'px',\n width: shapeW,\n height: shapeH\n });\n\n var shape2D = $shapeCanvas[0].getContext('2d');\n shape2D.clearRect(0, 0, width + 20, height + 20);\n shape2D.scale(this.options.scale, this.options.scale);\n shape2D.translate(10, 10);\n shape2D.translate(x - shapeBoxSize.x, y - shapeBoxSize.y);\n shape2D.translate(width / 2, height / 2);\n shape2D.rotate(angle);\n shape2D.translate(-(width / 2), -(height / 2));\n shape2D.globalAlpha = shape.shapeStyle.alpha;\n shape2D.lineJoin = 'round';\n\n this.renderShapePath(shape2D, element);\n this.renderText(shape, shapeBoxSize);\n }\n /**\r\n * 渲染图形路径\r\n * @param {*} shape2D\r\n * @param {*} element\r\n */\n\n }, {\n key: 'renderShapePath',\n value: function renderShapePath(shape2D, element, xx) {\n var _element$plane$bounds = element.plane.bounds,\n width = _element$plane$bounds.width,\n height = _element$plane$bounds.height;\n\n var paths = void 0;\n if (xx && __WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"a\" /* canvasActions */].drawIcon) {\n paths = __WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"a\" /* canvasActions */].drawIcon(width, height);\n } else {\n paths = element.shape.actions;\n }\n // TODO:\n this.renderPath(shape2D, element, paths, xx);\n }\n\n /**\r\n * 渲染路径\r\n * @param {*} shape2D\r\n * @param {*} shape\r\n * @param {*} paths\r\n * @param {*} a\r\n */\n\n }, {\n key: 'renderPath',\n value: function renderPath(shape2D, element, paths, xx) {\n var data = element.data,\n plane = element.plane,\n shape = element.shape;\n\n for (var i = 0; i < paths.length; i += 1) {\n var path = paths[i];\n shape2D.save();\n shape2D.beginPath();\n\n var bpmnStyle = this.options.bpmnStyle[shape.bpmnName] || {};\n var shapeStyle = {};\n for (var _i = 0; _i < this.options.shapeStyle.length; _i += 1) {\n var elementStyle = this.options.shapeStyle[_i];\n if (elementStyle.id === data.id) {\n shapeStyle = elementStyle;\n }\n }\n var lineStyle = Object.assign({}, shape.lineStyle, path.lineStyle, bpmnStyle.lineStyle, shapeStyle.lineStyle, shape.lightStyle.lineStyle);\n\n var fillStyle = Object.assign({}, shape.fillStyle, path.fillStyle, bpmnStyle.fillStyle, shapeStyle.fillStyle, shape.lightStyle.fillStyle);\n\n if (path.fillStyle && path.lineStyle.lineWidth === 0) {\n fillStyle.color = lineStyle.lineColor;\n }\n\n for (var j = 0; j < path.actions.length; j += 1) {\n var item = path.actions[j];\n __WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"a\" /* canvasActions */][item.action](shape2D, item);\n }\n\n this.fillShape(shape2D, shape, fillStyle);\n\n // 描边\n if (lineStyle.lineWidth) {\n shape2D.lineWidth = lineStyle.lineWidth;\n shape2D.strokeStyle = 'rgb(' + lineStyle.lineColor + ')';\n if (lineStyle.lineStyle === 'dashed') {\n // TODO:\n if (xx) {\n __WEBPACK_IMPORTED_MODULE_4__drawUtils__[\"a\" /* default */].setLineDash(shape2D, [lineStyle.lineWidth * 4, lineStyle.lineWidth * 2]);\n } else {\n __WEBPACK_IMPORTED_MODULE_4__drawUtils__[\"a\" /* default */].setLineDash(shape2D, [lineStyle.lineWidth * 6, lineStyle.lineWidth * 3]);\n }\n } else {\n if (lineStyle.lineStyle === 'dot') {\n __WEBPACK_IMPORTED_MODULE_4__drawUtils__[\"a\" /* default */].setLineDash(shape2D, [lineStyle.lineWidth, lineStyle.lineWidth * 2]);\n } else {\n if (lineStyle.lineStyle === 'dashdot') {\n __WEBPACK_IMPORTED_MODULE_4__drawUtils__[\"a\" /* default */].setLineDash(shape2D, [lineStyle.lineWidth * 6, lineStyle.lineWidth * 2, lineStyle.lineWidth, lineStyle.lineWidth * 2]);\n }\n }\n }\n shape2D.stroke();\n }\n shape2D.restore();\n }\n }\n /**\r\n * 渲染文本\r\n * @param {*} shape\r\n * @param {*} shapeBoxSize\r\n */\n\n }, {\n key: 'renderText',\n value: function renderText(shape, shapeBoxSize) {\n var _shape$plane$bounds = shape.plane.bounds,\n x = _shape$plane$bounds.x,\n y = _shape$plane$bounds.y,\n width = _shape$plane$bounds.width,\n height = _shape$plane$bounds.height;\n\n var $shape = this.$container.find('.shape-box[data-id=\"' + shape.data.id + '\"]');\n var $textBox = $shape.find('.text-box[data-shape=' + shape.data.id + ']');\n if ($textBox.length === 0) {\n $textBox = Object(__WEBPACK_IMPORTED_MODULE_0__utils_slimJQ__[\"a\" /* default */])(\"\").appendTo($shape);\n // 焦点事件\n $textBox.on('focus', function () {\n Object(__WEBPACK_IMPORTED_MODULE_0__utils_slimJQ__[\"a\" /* default */])(this).blur();\n });\n }\n\n $textBox.attr('readonly', 'readonly');\n if (shape.data.name == null || shape.data.name.trim() === '') {\n $textBox.css({ height: '0px', width: '0px' }).hide();\n return;\n }\n\n var fontStyle = shape.fontStyle;\n\n $textBox.css({\n 'line-height': Math.round(fontStyle.size * 1.25) + 'px',\n 'font-size': fontStyle.size + 'px',\n 'font-family': fontStyle.fontFamily,\n 'font-weight': fontStyle.bold ? 'bold' : 'normal',\n 'font-style': fontStyle.italic ? 'italic' : 'normal',\n 'text-align': fontStyle.textAlign,\n color: 'rgb(' + fontStyle.color + ')',\n 'text-decoration': fontStyle.underline ? 'underline' : 'none',\n opacity: shape.shapeStyle.alpha\n }).show();\n\n var textBlock = shape.getTextBlock();\n if (shape.fontStyle.orientation === 'horizontal') {\n var _position = {\n x: textBlock.x + textBlock.width / 2,\n y: textBlock.y + textBlock.height / 2\n };\n textBlock.x = _position.x - textBlock.height / 2;\n textBlock.y = _position.y - textBlock.width / 2;\n textBlock.width = textBlock.height;\n textBlock.height = textBlock.width;\n }\n $textBox.css({ width: textBlock.width });\n $textBox.height(0);\n $textBox.val(shape.data.name);\n $textBox.scrollTop(99999);\n var scrollTop = $textBox.scrollTop();\n\n var top = 0;\n if (fontStyle.vAlign === 'middle') {\n top = textBlock.y + textBlock.height / 2 - scrollTop / 2;\n } else {\n if (shape.fontStyle.vAlign === 'bottom') {\n top = textBlock.y + textBlock.height - scrollTop;\n } else {\n top = textBlock.y;\n }\n }\n var position = {\n x: textBlock.x + textBlock.width / 2,\n y: top + scrollTop / 2\n };\n var angle = shape.shapeStyle.angle;\n if (angle !== 0) {\n position = __WEBPACK_IMPORTED_MODULE_4__drawUtils__[\"a\" /* default */].getRotated({ x: width / 2, y: height / 2 }, position, angle);\n }\n if (fontStyle.orientation === 'horizontal') {\n angle = (Math.PI * 1.5 + angle) % (Math.PI * 2);\n }\n var rotate = Math.round(angle / (Math.PI * 2) * 360);\n var transform = 'rotate(' + rotate + 'deg) scale(' + this.options.scale + ')';\n var textBoxWidth = textBlock.width;\n var textBoxHeight = scrollTop;\n $textBox.css({\n width: textBoxWidth,\n height: textBoxHeight,\n left: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(position.x + (x - shapeBoxSize.x) + 10) - textBoxWidth / 2,\n top: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(position.y + (y - shapeBoxSize.y) + 10) - scrollTop / 2,\n '-webkit-transform': transform,\n '-ms-transform': transform,\n '-o-transform': transform,\n '-moz-transform': transform,\n transform: transform\n });\n }\n\n /**\r\n * 填充图形\r\n * @param {*} shape2D\r\n * @param {*} shape\r\n * @param {*} fillStyle\r\n */\n\n }, {\n key: 'fillShape',\n value: function fillShape(shape2D, shape, fillStyle) {\n shape2D.save();\n if (fillStyle.type === 'solid') {\n shape2D.fillStyle = 'rgb(' + fillStyle.color + ')';\n shape2D.fill();\n } else {\n if (fillStyle.type === 'gradient') {\n var gradient = void 0;\n if (fillStyle.gradientType === 'linear') {\n gradient = __WEBPACK_IMPORTED_MODULE_3__utils_gradient__[\"a\" /* default */].createLinearGradient(shape2D, shape, fillStyle);\n } else {\n gradient = __WEBPACK_IMPORTED_MODULE_3__utils_gradient__[\"a\" /* default */].createRadialGradient(shape2D, shape, fillStyle);\n }\n shape2D.fillStyle = gradient;\n shape2D.fill();\n }\n }\n shape2D.restore();\n }\n }]);\n\n return DrawShape;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (DrawShape);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTQuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvZHJhd1NoYXBlLmpzP2Q1ZDAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICQgZnJvbSAnLi4vdXRpbHMvc2xpbUpRJ1xyXG5cclxuaW1wb3J0IFNoYXBlLCB7IGluaXQgYXMgaW5pdEdyb3VwIH0gZnJvbSAnLi9zaGFwZSdcclxuXHJcbmltcG9ydCB7IHNldFNjYWxlLCBjYW52YXNBY3Rpb25zIH0gZnJvbSAnLi4vdXRpbHMvdXRpbHMnXHJcbmltcG9ydCBHcmFkaWVudFV0aWxzIGZyb20gJy4uL3V0aWxzL2dyYWRpZW50J1xyXG5pbXBvcnQgRHJhd1V0aWxzIGZyb20gJy4vZHJhd1V0aWxzJ1xyXG5cclxuY2xhc3MgRHJhd1NoYXBlIHtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zLCAkY29udGFpbmVyKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXHJcblxyXG4gICAgdGhpcy4kY29udGFpbmVyID0gJGNvbnRhaW5lclxyXG5cclxuICAgIGluaXRHcm91cCgpXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOWIm+W7uuWbvuW9ouaVsOaNrlxyXG4gICAqIEBwYXJhbSB7Kn0gdHlwZVxyXG4gICAqIEBwYXJhbSB7Kn0gZGF0YVxyXG4gICAqL1xyXG4gIGNyZWF0ZVNoYXBlKHR5cGUsIGRhdGEpIHtcclxuICAgIHJldHVybiBuZXcgU2hhcGVbdHlwZV0oZGF0YSwgdGhpcy5vcHRpb25zLmJwbW5TdHlsZVt0eXBlXSlcclxuICB9XHJcbiAgLyoqXHJcbiAgICog5riy5p+TXHJcbiAgICogQHBhcmFtIHsqfSB0eXBlXHJcbiAgICogQHBhcmFtIHsqfSBlbGVtZW50XHJcbiAgICovXHJcbiAgcmVuZGVyKHR5cGUsIGVsZW1lbnQpIHtcclxuICAgIGlmICghZWxlbWVudC5zaGFwZSkge1xyXG4gICAgICBlbGVtZW50LnNoYXBlID0gdGhpcy5jcmVhdGVTaGFwZSh0eXBlLCBlbGVtZW50KVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJTaGFwZShlbGVtZW50KVxyXG4gIH1cclxuICAvKipcclxuICAgKiDmuLLmn5Plm77lvaJcclxuICAgKi9cclxuICByZW5kZXJTaGFwZShlbGVtZW50KSB7XHJcbiAgICBjb25zdCB7IHNoYXBlLCBkYXRhLCBwbGFuZSB9ID0gZWxlbWVudFxyXG5cclxuICAgIGxldCAkc2hhcGUgPSB0aGlzLiRjb250YWluZXIuZmluZCgnLnNoYXBlLWJveFtkYXRhLWlkPVwiJyArIGRhdGEuaWQgKyAnXCJdJylcclxuICAgIGlmICgkc2hhcGUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICRzaGFwZSA9ICQoXHJcbiAgICAgICAgXCI8ZGl2IGNsYXNzPSdzaGFwZS1ib3gnIGRhdGEtaWQ9J1wiICtcclxuICAgICAgICAgIGRhdGEuaWQgK1xyXG4gICAgICAgICAgXCInPjxjYW52YXMgY2xhc3M9J3NoYXBlLWNhbnZhcyc+PC9jYW52YXM+PC9kaXY+XCJcclxuICAgICAgKS5hcHBlbmRUbyh0aGlzLiRjb250YWluZXIuZmluZCgnLmJwZC1kZXNpZ25lcicpKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gcGxhbmUuYm91bmRzXHJcbiAgICBjb25zdCB7IGFuZ2xlLCB6aW5kZXggfSA9IHNoYXBlLnNoYXBlU3R5bGVcclxuXHJcbiAgICBjb25zdCBzaGFwZUJveFNpemUgPSBEcmF3VXRpbHMuZ2V0U2hhcGVCb3goZWxlbWVudClcclxuICAgIGNvbnN0IHNoYXBlVyA9IHNoYXBlQm94U2l6ZS53aWR0aCArIDIwXHJcbiAgICBjb25zdCBzaGFwZUggPSBzaGFwZUJveFNpemUuaGVpZ2h0ICsgMjBcclxuXHJcbiAgICBjb25zdCAkc2hhcGVDYW52YXMgPSAkc2hhcGUuZmluZCgnLnNoYXBlLWNhbnZhcycpXHJcbiAgICAkc2hhcGVDYW52YXMuYXR0cih7IHdpZHRoOiBzaGFwZVcsIGhlaWdodDogc2hhcGVIIH0pXHJcbiAgICAkc2hhcGUuY3NzKHtcclxuICAgICAgbGVmdDogc2V0U2NhbGUoc2hhcGVCb3hTaXplLnggLSAxMCkgKyAncHgnLFxyXG4gICAgICB0b3A6IHNldFNjYWxlKHNoYXBlQm94U2l6ZS55IC0gMTApICsgJ3B4JyxcclxuICAgICAgd2lkdGg6IHNoYXBlVyxcclxuICAgICAgaGVpZ2h0OiBzaGFwZUhcclxuICAgIH0pXHJcblxyXG4gICAgY29uc3Qgc2hhcGUyRCA9ICRzaGFwZUNhbnZhc1swXS5nZXRDb250ZXh0KCcyZCcpXHJcbiAgICBzaGFwZTJELmNsZWFyUmVjdCgwLCAwLCB3aWR0aCArIDIwLCBoZWlnaHQgKyAyMClcclxuICAgIHNoYXBlMkQuc2NhbGUodGhpcy5vcHRpb25zLnNjYWxlLCB0aGlzLm9wdGlvbnMuc2NhbGUpXHJcbiAgICBzaGFwZTJELnRyYW5zbGF0ZSgxMCwgMTApXHJcbiAgICBzaGFwZTJELnRyYW5zbGF0ZSh4IC0gc2hhcGVCb3hTaXplLngsIHkgLSBzaGFwZUJveFNpemUueSlcclxuICAgIHNoYXBlMkQudHJhbnNsYXRlKHdpZHRoIC8gMiwgaGVpZ2h0IC8gMilcclxuICAgIHNoYXBlMkQucm90YXRlKGFuZ2xlKVxyXG4gICAgc2hhcGUyRC50cmFuc2xhdGUoLSh3aWR0aCAvIDIpLCAtKGhlaWdodCAvIDIpKVxyXG4gICAgc2hhcGUyRC5nbG9iYWxBbHBoYSA9IHNoYXBlLnNoYXBlU3R5bGUuYWxwaGFcclxuICAgIHNoYXBlMkQubGluZUpvaW4gPSAncm91bmQnXHJcblxyXG4gICAgdGhpcy5yZW5kZXJTaGFwZVBhdGgoc2hhcGUyRCwgZWxlbWVudClcclxuICAgIHRoaXMucmVuZGVyVGV4dChzaGFwZSwgc2hhcGVCb3hTaXplKVxyXG4gIH1cclxuICAvKipcclxuICAgKiDmuLLmn5Plm77lvaLot6/lvoRcclxuICAgKiBAcGFyYW0geyp9IHNoYXBlMkRcclxuICAgKiBAcGFyYW0geyp9IGVsZW1lbnRcclxuICAgKi9cclxuICByZW5kZXJTaGFwZVBhdGgoc2hhcGUyRCwgZWxlbWVudCwgeHgpIHtcclxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZWxlbWVudC5wbGFuZS5ib3VuZHNcclxuICAgIGxldCBwYXRoc1xyXG4gICAgaWYgKHh4ICYmIGNhbnZhc0FjdGlvbnMuZHJhd0ljb24pIHtcclxuICAgICAgcGF0aHMgPSBjYW52YXNBY3Rpb25zLmRyYXdJY29uKHdpZHRoLCBoZWlnaHQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYXRocyA9IGVsZW1lbnQuc2hhcGUuYWN0aW9uc1xyXG4gICAgfVxyXG4gICAgLy8gVE9ETzpcclxuICAgIHRoaXMucmVuZGVyUGF0aChzaGFwZTJELCBlbGVtZW50LCBwYXRocywgeHgpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmuLLmn5Pot6/lvoRcclxuICAgKiBAcGFyYW0geyp9IHNoYXBlMkRcclxuICAgKiBAcGFyYW0geyp9IHNoYXBlXHJcbiAgICogQHBhcmFtIHsqfSBwYXRoc1xyXG4gICAqIEBwYXJhbSB7Kn0gYVxyXG4gICAqL1xyXG4gIHJlbmRlclBhdGgoc2hhcGUyRCwgZWxlbWVudCwgcGF0aHMsIHh4KSB7XHJcbiAgICBjb25zdCB7IGRhdGEsIHBsYW5lLCBzaGFwZSB9ID0gZWxlbWVudFxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICBjb25zdCBwYXRoID0gcGF0aHNbaV1cclxuICAgICAgc2hhcGUyRC5zYXZlKClcclxuICAgICAgc2hhcGUyRC5iZWdpblBhdGgoKVxyXG5cclxuICAgICAgbGV0IGJwbW5TdHlsZSA9IHRoaXMub3B0aW9ucy5icG1uU3R5bGVbc2hhcGUuYnBtbk5hbWVdIHx8IHt9XHJcbiAgICAgIGxldCBzaGFwZVN0eWxlID0ge31cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9wdGlvbnMuc2hhcGVTdHlsZS5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHRoaXMub3B0aW9ucy5zaGFwZVN0eWxlW2ldXHJcbiAgICAgICAgaWYgKGVsZW1lbnRTdHlsZS5pZCA9PT0gZGF0YS5pZCkge1xyXG4gICAgICAgICAgc2hhcGVTdHlsZSA9IGVsZW1lbnRTdHlsZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCBsaW5lU3R5bGUgPSBPYmplY3QuYXNzaWduKFxyXG4gICAgICAgIHt9LFxyXG4gICAgICAgIHNoYXBlLmxpbmVTdHlsZSxcclxuICAgICAgICBwYXRoLmxpbmVTdHlsZSxcclxuICAgICAgICBicG1uU3R5bGUubGluZVN0eWxlLFxyXG4gICAgICAgIHNoYXBlU3R5bGUubGluZVN0eWxlLFxyXG4gICAgICAgIHNoYXBlLmxpZ2h0U3R5bGUubGluZVN0eWxlXHJcbiAgICAgIClcclxuXHJcbiAgICAgIGNvbnN0IGZpbGxTdHlsZSA9IE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAge30sXHJcbiAgICAgICAgc2hhcGUuZmlsbFN0eWxlLFxyXG4gICAgICAgIHBhdGguZmlsbFN0eWxlLFxyXG4gICAgICAgIGJwbW5TdHlsZS5maWxsU3R5bGUsXHJcbiAgICAgICAgc2hhcGVTdHlsZS5maWxsU3R5bGUsXHJcbiAgICAgICAgc2hhcGUubGlnaHRTdHlsZS5maWxsU3R5bGVcclxuICAgICAgKVxyXG5cclxuICAgICAgaWYgKHBhdGguZmlsbFN0eWxlICYmIHBhdGgubGluZVN0eWxlLmxpbmVXaWR0aCA9PT0gMCkge1xyXG4gICAgICAgIGZpbGxTdHlsZS5jb2xvciA9IGxpbmVTdHlsZS5saW5lQ29sb3JcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBwYXRoLmFjdGlvbnMubGVuZ3RoOyBqICs9IDEpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gcGF0aC5hY3Rpb25zW2pdXHJcbiAgICAgICAgY2FudmFzQWN0aW9uc1tpdGVtLmFjdGlvbl0oc2hhcGUyRCwgaXRlbSlcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5maWxsU2hhcGUoc2hhcGUyRCwgc2hhcGUsIGZpbGxTdHlsZSlcclxuXHJcbiAgICAgIC8vIOaPj+i+uVxyXG4gICAgICBpZiAobGluZVN0eWxlLmxpbmVXaWR0aCkge1xyXG4gICAgICAgIHNoYXBlMkQubGluZVdpZHRoID0gbGluZVN0eWxlLmxpbmVXaWR0aFxyXG4gICAgICAgIHNoYXBlMkQuc3Ryb2tlU3R5bGUgPSAncmdiKCcgKyBsaW5lU3R5bGUubGluZUNvbG9yICsgJyknXHJcbiAgICAgICAgaWYgKGxpbmVTdHlsZS5saW5lU3R5bGUgPT09ICdkYXNoZWQnKSB7XHJcbiAgICAgICAgICAvLyBUT0RPOlxyXG4gICAgICAgICAgaWYgKHh4KSB7XHJcbiAgICAgICAgICAgIERyYXdVdGlscy5zZXRMaW5lRGFzaChzaGFwZTJELCBbXHJcbiAgICAgICAgICAgICAgbGluZVN0eWxlLmxpbmVXaWR0aCAqIDQsXHJcbiAgICAgICAgICAgICAgbGluZVN0eWxlLmxpbmVXaWR0aCAqIDJcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIERyYXdVdGlscy5zZXRMaW5lRGFzaChzaGFwZTJELCBbXHJcbiAgICAgICAgICAgICAgbGluZVN0eWxlLmxpbmVXaWR0aCAqIDYsXHJcbiAgICAgICAgICAgICAgbGluZVN0eWxlLmxpbmVXaWR0aCAqIDNcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGxpbmVTdHlsZS5saW5lU3R5bGUgPT09ICdkb3QnKSB7XHJcbiAgICAgICAgICAgIERyYXdVdGlscy5zZXRMaW5lRGFzaChzaGFwZTJELCBbXHJcbiAgICAgICAgICAgICAgbGluZVN0eWxlLmxpbmVXaWR0aCxcclxuICAgICAgICAgICAgICBsaW5lU3R5bGUubGluZVdpZHRoICogMlxyXG4gICAgICAgICAgICBdKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGxpbmVTdHlsZS5saW5lU3R5bGUgPT09ICdkYXNoZG90Jykge1xyXG4gICAgICAgICAgICAgIERyYXdVdGlscy5zZXRMaW5lRGFzaChzaGFwZTJELCBbXHJcbiAgICAgICAgICAgICAgICBsaW5lU3R5bGUubGluZVdpZHRoICogNixcclxuICAgICAgICAgICAgICAgIGxpbmVTdHlsZS5saW5lV2lkdGggKiAyLFxyXG4gICAgICAgICAgICAgICAgbGluZVN0eWxlLmxpbmVXaWR0aCxcclxuICAgICAgICAgICAgICAgIGxpbmVTdHlsZS5saW5lV2lkdGggKiAyXHJcbiAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBzaGFwZTJELnN0cm9rZSgpXHJcbiAgICAgIH1cclxuICAgICAgc2hhcGUyRC5yZXN0b3JlKClcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICog5riy5p+T5paH5pysXHJcbiAgICogQHBhcmFtIHsqfSBzaGFwZVxyXG4gICAqIEBwYXJhbSB7Kn0gc2hhcGVCb3hTaXplXHJcbiAgICovXHJcbiAgcmVuZGVyVGV4dChzaGFwZSwgc2hhcGVCb3hTaXplKSB7XHJcbiAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IHNoYXBlLnBsYW5lLmJvdW5kc1xyXG4gICAgY29uc3QgJHNoYXBlID0gdGhpcy4kY29udGFpbmVyLmZpbmQoXHJcbiAgICAgICcuc2hhcGUtYm94W2RhdGEtaWQ9XCInICsgc2hhcGUuZGF0YS5pZCArICdcIl0nXHJcbiAgICApXHJcbiAgICBsZXQgJHRleHRCb3ggPSAkc2hhcGUuZmluZCgnLnRleHQtYm94W2RhdGEtc2hhcGU9JyArIHNoYXBlLmRhdGEuaWQgKyAnXScpXHJcbiAgICBpZiAoJHRleHRCb3gubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICR0ZXh0Qm94ID0gJChcclxuICAgICAgICBcIjx0ZXh0YXJlYSBjbGFzcz0ndGV4dC1ib3gnIGRhdGEtc2hhcGU9J1wiICtcclxuICAgICAgICAgIHNoYXBlLmRhdGEuaWQgK1xyXG4gICAgICAgICAgXCInPjwvdGV4dGFyZWE+XCJcclxuICAgICAgKS5hcHBlbmRUbygkc2hhcGUpXHJcbiAgICAgIC8vIOeEpueCueS6i+S7tlxyXG4gICAgICAkdGV4dEJveC5vbignZm9jdXMnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAkKHRoaXMpLmJsdXIoKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgICR0ZXh0Qm94LmF0dHIoJ3JlYWRvbmx5JywgJ3JlYWRvbmx5JylcclxuICAgIGlmIChzaGFwZS5kYXRhLm5hbWUgPT0gbnVsbCB8fCBzaGFwZS5kYXRhLm5hbWUudHJpbSgpID09PSAnJykge1xyXG4gICAgICAkdGV4dEJveC5jc3MoeyBoZWlnaHQ6ICcwcHgnLCB3aWR0aDogJzBweCcgfSkuaGlkZSgpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZvbnRTdHlsZSA9IHNoYXBlLmZvbnRTdHlsZVxyXG5cclxuICAgICR0ZXh0Qm94XHJcbiAgICAgIC5jc3Moe1xyXG4gICAgICAgICdsaW5lLWhlaWdodCc6IE1hdGgucm91bmQoZm9udFN0eWxlLnNpemUgKiAxLjI1KSArICdweCcsXHJcbiAgICAgICAgJ2ZvbnQtc2l6ZSc6IGZvbnRTdHlsZS5zaXplICsgJ3B4JyxcclxuICAgICAgICAnZm9udC1mYW1pbHknOiBmb250U3R5bGUuZm9udEZhbWlseSxcclxuICAgICAgICAnZm9udC13ZWlnaHQnOiBmb250U3R5bGUuYm9sZCA/ICdib2xkJyA6ICdub3JtYWwnLFxyXG4gICAgICAgICdmb250LXN0eWxlJzogZm9udFN0eWxlLml0YWxpYyA/ICdpdGFsaWMnIDogJ25vcm1hbCcsXHJcbiAgICAgICAgJ3RleHQtYWxpZ24nOiBmb250U3R5bGUudGV4dEFsaWduLFxyXG4gICAgICAgIGNvbG9yOiAncmdiKCcgKyBmb250U3R5bGUuY29sb3IgKyAnKScsXHJcbiAgICAgICAgJ3RleHQtZGVjb3JhdGlvbic6IGZvbnRTdHlsZS51bmRlcmxpbmUgPyAndW5kZXJsaW5lJyA6ICdub25lJyxcclxuICAgICAgICBvcGFjaXR5OiBzaGFwZS5zaGFwZVN0eWxlLmFscGhhXHJcbiAgICAgIH0pXHJcbiAgICAgIC5zaG93KClcclxuXHJcbiAgICBjb25zdCB0ZXh0QmxvY2sgPSBzaGFwZS5nZXRUZXh0QmxvY2soKVxyXG4gICAgaWYgKHNoYXBlLmZvbnRTdHlsZS5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0ge1xyXG4gICAgICAgIHg6IHRleHRCbG9jay54ICsgdGV4dEJsb2NrLndpZHRoIC8gMixcclxuICAgICAgICB5OiB0ZXh0QmxvY2sueSArIHRleHRCbG9jay5oZWlnaHQgLyAyXHJcbiAgICAgIH1cclxuICAgICAgdGV4dEJsb2NrLnggPSBwb3NpdGlvbi54IC0gdGV4dEJsb2NrLmhlaWdodCAvIDJcclxuICAgICAgdGV4dEJsb2NrLnkgPSBwb3NpdGlvbi55IC0gdGV4dEJsb2NrLndpZHRoIC8gMlxyXG4gICAgICB0ZXh0QmxvY2sud2lkdGggPSB0ZXh0QmxvY2suaGVpZ2h0XHJcbiAgICAgIHRleHRCbG9jay5oZWlnaHQgPSB0ZXh0QmxvY2sud2lkdGhcclxuICAgIH1cclxuICAgICR0ZXh0Qm94LmNzcyh7IHdpZHRoOiB0ZXh0QmxvY2sud2lkdGggfSlcclxuICAgICR0ZXh0Qm94LmhlaWdodCgwKVxyXG4gICAgJHRleHRCb3gudmFsKHNoYXBlLmRhdGEubmFtZSlcclxuICAgICR0ZXh0Qm94LnNjcm9sbFRvcCg5OTk5OSlcclxuICAgIGNvbnN0IHNjcm9sbFRvcCA9ICR0ZXh0Qm94LnNjcm9sbFRvcCgpXHJcblxyXG4gICAgbGV0IHRvcCA9IDBcclxuICAgIGlmIChmb250U3R5bGUudkFsaWduID09PSAnbWlkZGxlJykge1xyXG4gICAgICB0b3AgPSB0ZXh0QmxvY2sueSArIHRleHRCbG9jay5oZWlnaHQgLyAyIC0gc2Nyb2xsVG9wIC8gMlxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHNoYXBlLmZvbnRTdHlsZS52QWxpZ24gPT09ICdib3R0b20nKSB7XHJcbiAgICAgICAgdG9wID0gdGV4dEJsb2NrLnkgKyB0ZXh0QmxvY2suaGVpZ2h0IC0gc2Nyb2xsVG9wXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdG9wID0gdGV4dEJsb2NrLnlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHBvc2l0aW9uID0ge1xyXG4gICAgICB4OiB0ZXh0QmxvY2sueCArIHRleHRCbG9jay53aWR0aCAvIDIsXHJcbiAgICAgIHk6IHRvcCArIHNjcm9sbFRvcCAvIDJcclxuICAgIH1cclxuICAgIGxldCBhbmdsZSA9IHNoYXBlLnNoYXBlU3R5bGUuYW5nbGVcclxuICAgIGlmIChhbmdsZSAhPT0gMCkge1xyXG4gICAgICBwb3NpdGlvbiA9IERyYXdVdGlscy5nZXRSb3RhdGVkKFxyXG4gICAgICAgIHsgeDogd2lkdGggLyAyLCB5OiBoZWlnaHQgLyAyIH0sXHJcbiAgICAgICAgcG9zaXRpb24sXHJcbiAgICAgICAgYW5nbGVcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgaWYgKGZvbnRTdHlsZS5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XHJcbiAgICAgIGFuZ2xlID0gKE1hdGguUEkgKiAxLjUgKyBhbmdsZSkgJSAoTWF0aC5QSSAqIDIpXHJcbiAgICB9XHJcbiAgICBjb25zdCByb3RhdGUgPSBNYXRoLnJvdW5kKChhbmdsZSAvIChNYXRoLlBJICogMikpICogMzYwKVxyXG4gICAgY29uc3QgdHJhbnNmb3JtID1cclxuICAgICAgJ3JvdGF0ZSgnICsgcm90YXRlICsgJ2RlZykgc2NhbGUoJyArIHRoaXMub3B0aW9ucy5zY2FsZSArICcpJ1xyXG4gICAgY29uc3QgdGV4dEJveFdpZHRoID0gdGV4dEJsb2NrLndpZHRoXHJcbiAgICBjb25zdCB0ZXh0Qm94SGVpZ2h0ID0gc2Nyb2xsVG9wXHJcbiAgICAkdGV4dEJveC5jc3Moe1xyXG4gICAgICB3aWR0aDogdGV4dEJveFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRleHRCb3hIZWlnaHQsXHJcbiAgICAgIGxlZnQ6IHNldFNjYWxlKHBvc2l0aW9uLnggKyAoeCAtIHNoYXBlQm94U2l6ZS54KSArIDEwKSAtIHRleHRCb3hXaWR0aCAvIDIsXHJcbiAgICAgIHRvcDogc2V0U2NhbGUocG9zaXRpb24ueSArICh5IC0gc2hhcGVCb3hTaXplLnkpICsgMTApIC0gc2Nyb2xsVG9wIC8gMixcclxuICAgICAgJy13ZWJraXQtdHJhbnNmb3JtJzogdHJhbnNmb3JtLFxyXG4gICAgICAnLW1zLXRyYW5zZm9ybSc6IHRyYW5zZm9ybSxcclxuICAgICAgJy1vLXRyYW5zZm9ybSc6IHRyYW5zZm9ybSxcclxuICAgICAgJy1tb3otdHJhbnNmb3JtJzogdHJhbnNmb3JtLFxyXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWhq+WFheWbvuW9olxyXG4gICAqIEBwYXJhbSB7Kn0gc2hhcGUyRFxyXG4gICAqIEBwYXJhbSB7Kn0gc2hhcGVcclxuICAgKiBAcGFyYW0geyp9IGZpbGxTdHlsZVxyXG4gICAqL1xyXG4gIGZpbGxTaGFwZShzaGFwZTJELCBzaGFwZSwgZmlsbFN0eWxlKSB7XHJcbiAgICBzaGFwZTJELnNhdmUoKVxyXG4gICAgaWYgKGZpbGxTdHlsZS50eXBlID09PSAnc29saWQnKSB7XHJcbiAgICAgIHNoYXBlMkQuZmlsbFN0eWxlID0gJ3JnYignICsgZmlsbFN0eWxlLmNvbG9yICsgJyknXHJcbiAgICAgIHNoYXBlMkQuZmlsbCgpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZmlsbFN0eWxlLnR5cGUgPT09ICdncmFkaWVudCcpIHtcclxuICAgICAgICBsZXQgZ3JhZGllbnRcclxuICAgICAgICBpZiAoZmlsbFN0eWxlLmdyYWRpZW50VHlwZSA9PT0gJ2xpbmVhcicpIHtcclxuICAgICAgICAgIGdyYWRpZW50ID0gR3JhZGllbnRVdGlscy5jcmVhdGVMaW5lYXJHcmFkaWVudChcclxuICAgICAgICAgICAgc2hhcGUyRCxcclxuICAgICAgICAgICAgc2hhcGUsXHJcbiAgICAgICAgICAgIGZpbGxTdHlsZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBncmFkaWVudCA9IEdyYWRpZW50VXRpbHMuY3JlYXRlUmFkaWFsR3JhZGllbnQoXHJcbiAgICAgICAgICAgIHNoYXBlMkQsXHJcbiAgICAgICAgICAgIHNoYXBlLFxyXG4gICAgICAgICAgICBmaWxsU3R5bGVcclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgICAgc2hhcGUyRC5maWxsU3R5bGUgPSBncmFkaWVudFxyXG4gICAgICAgIHNoYXBlMkQuZmlsbCgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHNoYXBlMkQucmVzdG9yZSgpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEcmF3U2hhcGVcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9kcmF3L2RyYXdTaGFwZS5qcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBWEE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFLQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQU9BO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBV0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///14\n"); + +/***/ }), +/* 15 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return init; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__EndEvent__ = __webpack_require__(16);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__StartEvent__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__UserTask__ = __webpack_require__(18);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__ServiceTask__ = __webpack_require__(19);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__TerminateEndEvent__ = __webpack_require__(20);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__ExclusiveGateway__ = __webpack_require__(21);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__InclusiveGateway__ = __webpack_require__(22);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__ParallelGateway__ = __webpack_require__(23);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__ComplexGateway__ = __webpack_require__(24);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__CallActivity__ = __webpack_require__(25);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__core_eventBus__ = __webpack_require__(0);\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar group = {\n StartEvent: ['StartEvent'],\n Task: ['UserTask', 'ServiceTask'],\n CallActivity: ['CallActivity'],\n Gateway: ['ExclusiveGateway', 'InclusiveGateway', 'ParallelGateway', 'ComplexGateway'],\n EndEvent: ['EndEvent', 'TerminateEndEvent']\n};\n\nvar init = function init() {\n __WEBPACK_IMPORTED_MODULE_10__core_eventBus__[\"a\" /* default */].on('group.get', function (groupName) {\n if (groupName) {\n return group[groupName];\n }\n return group;\n });\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n EndEvent: __WEBPACK_IMPORTED_MODULE_0__EndEvent__[\"a\" /* default */],\n StartEvent: __WEBPACK_IMPORTED_MODULE_1__StartEvent__[\"a\" /* default */],\n UserTask: __WEBPACK_IMPORTED_MODULE_2__UserTask__[\"a\" /* default */],\n ServiceTask: __WEBPACK_IMPORTED_MODULE_3__ServiceTask__[\"a\" /* default */],\n TerminateEndEvent: __WEBPACK_IMPORTED_MODULE_4__TerminateEndEvent__[\"a\" /* default */],\n ExclusiveGateway: __WEBPACK_IMPORTED_MODULE_5__ExclusiveGateway__[\"a\" /* default */],\n InclusiveGateway: __WEBPACK_IMPORTED_MODULE_6__InclusiveGateway__[\"a\" /* default */],\n ParallelGateway: __WEBPACK_IMPORTED_MODULE_7__ParallelGateway__[\"a\" /* default */],\n ComplexGateway: __WEBPACK_IMPORTED_MODULE_8__ComplexGateway__[\"a\" /* default */],\n CallActivity: __WEBPACK_IMPORTED_MODULE_9__CallActivity__[\"a\" /* default */]\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvc2hhcGUvaW5kZXguanM/NDc2NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRW5kRXZlbnQgZnJvbSAnLi9FbmRFdmVudCdcclxuaW1wb3J0IFN0YXJ0RXZlbnQgZnJvbSAnLi9TdGFydEV2ZW50J1xyXG5pbXBvcnQgVXNlclRhc2sgZnJvbSAnLi9Vc2VyVGFzaydcclxuaW1wb3J0IFNlcnZpY2VUYXNrIGZyb20gJy4vU2VydmljZVRhc2snXHJcbmltcG9ydCBUZXJtaW5hdGVFbmRFdmVudCBmcm9tICcuL1Rlcm1pbmF0ZUVuZEV2ZW50J1xyXG5pbXBvcnQgRXhjbHVzaXZlR2F0ZXdheSBmcm9tICcuL0V4Y2x1c2l2ZUdhdGV3YXknXHJcbmltcG9ydCBJbmNsdXNpdmVHYXRld2F5IGZyb20gJy4vSW5jbHVzaXZlR2F0ZXdheSdcclxuaW1wb3J0IFBhcmFsbGVsR2F0ZXdheSBmcm9tICcuL1BhcmFsbGVsR2F0ZXdheSdcclxuaW1wb3J0IENvbXBsZXhHYXRld2F5IGZyb20gJy4vQ29tcGxleEdhdGV3YXknXHJcbmltcG9ydCBDYWxsQWN0aXZpdHkgZnJvbSAnLi9DYWxsQWN0aXZpdHknXHJcblxyXG5pbXBvcnQgZXZlbnRCdXMgZnJvbSAnLi4vLi4vY29yZS9ldmVudEJ1cydcclxuXHJcbmNvbnN0IGdyb3VwID0ge1xyXG4gIFN0YXJ0RXZlbnQ6IFsnU3RhcnRFdmVudCddLFxyXG4gIFRhc2s6IFsnVXNlclRhc2snLCAnU2VydmljZVRhc2snXSxcclxuICBDYWxsQWN0aXZpdHk6IFsnQ2FsbEFjdGl2aXR5J10sXHJcbiAgR2F0ZXdheTogW1xyXG4gICAgJ0V4Y2x1c2l2ZUdhdGV3YXknLFxyXG4gICAgJ0luY2x1c2l2ZUdhdGV3YXknLFxyXG4gICAgJ1BhcmFsbGVsR2F0ZXdheScsXHJcbiAgICAnQ29tcGxleEdhdGV3YXknXHJcbiAgXSxcclxuICBFbmRFdmVudDogWydFbmRFdmVudCcsICdUZXJtaW5hdGVFbmRFdmVudCddXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBpbml0ID0gKCkgPT4ge1xyXG4gIGV2ZW50QnVzLm9uKCdncm91cC5nZXQnLCBncm91cE5hbWUgPT4ge1xyXG4gICAgaWYgKGdyb3VwTmFtZSkge1xyXG4gICAgICByZXR1cm4gZ3JvdXBbZ3JvdXBOYW1lXVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdyb3VwXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIEVuZEV2ZW50LFxyXG4gIFN0YXJ0RXZlbnQsXHJcbiAgVXNlclRhc2ssXHJcbiAgU2VydmljZVRhc2ssXHJcbiAgVGVybWluYXRlRW5kRXZlbnQsXHJcbiAgRXhjbHVzaXZlR2F0ZXdheSxcclxuICBJbmNsdXNpdmVHYXRld2F5LFxyXG4gIFBhcmFsbGVsR2F0ZXdheSxcclxuICBDb21wbGV4R2F0ZXdheSxcclxuICBDYWxsQWN0aXZpdHlcclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2RyYXcvc2hhcGUvaW5kZXguanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBVkE7QUFDQTtBQVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///15\n"); + +/***/ }), +/* 16 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Shape__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_eventBus__ = __webpack_require__(0);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\nvar EndEvent = function (_Shape) {\n _inherits(EndEvent, _Shape);\n\n function EndEvent(element) {\n var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, EndEvent);\n\n //\n var _this = _possibleConstructorReturn(this, (EndEvent.__proto__ || Object.getPrototypeOf(EndEvent)).call(this));\n\n _this.style = style;\n //\n if (element.plane && element.plane.bounds) {\n element.plane.bounds.width = element.plane.bounds.width || 40;\n element.plane.bounds.height = element.plane.bounds.height || 40;\n }\n if (!element.data.name) {\n element.data.name = __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('i18n', 'bpmn.EndEvent');\n }\n // bpmn数据\n _this.data = element.data;\n //\n _this.plane = element.plane;\n\n _this.bpmnName = 'EndEvent';\n\n _this.groupName = 'EndEvent';\n\n _this.actions = _this.getPath();\n return _this;\n }\n /**\r\n * 获取绘图路径\r\n */\n\n\n _createClass(EndEvent, [{\n key: 'getPath',\n value: function getPath() {\n var _plane$bounds = this.plane.bounds,\n height = _plane$bounds.height,\n width = _plane$bounds.width;\n\n var defaultContent = [];\n return [{\n lineStyle: {\n lineStyle: 'solid',\n lineWidth: this.lineStyle.lineWidth + 2\n },\n actions: [{ action: 'move', x: 0, y: height / 2 }, {\n action: 'curve',\n x1: 0,\n y1: -height / 6,\n x2: width,\n y2: -height / 6,\n x: width,\n y: height / 2\n }, {\n action: 'curve',\n x1: width,\n y1: height + height / 6,\n x2: 0,\n y2: height + height / 6,\n x: 0,\n y: height / 2\n }, { action: 'close' }]\n }].concat(_toConsumableArray(this.style.content || defaultContent), [{\n fillStyle: { type: 'none' },\n lineStyle: { lineWidth: 0 },\n actions: [{ action: 'move', x: 0, y: height / 2 }, {\n action: 'curve',\n x1: 0,\n y1: -height / 6,\n x2: width,\n y2: -height / 6,\n x: width,\n y: height / 2\n }, {\n action: 'curve',\n x1: width,\n y1: height + height / 6,\n x2: 0,\n y2: height + height / 6,\n x: 0,\n y: height / 2\n }, { action: 'close' }]\n }]);\n }\n\n /**\r\n * 获取文本范围\r\n */\n\n }, {\n key: 'getTextBlock',\n value: function getTextBlock() {\n var _plane$bounds2 = this.plane.bounds,\n height = _plane$bounds2.height,\n width = _plane$bounds2.width;\n\n return { x: width / 2 - 60, y: height, width: 120, height: 30 };\n }\n }]);\n\n return EndEvent;\n}(__WEBPACK_IMPORTED_MODULE_0__Shape__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (EndEvent);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvc2hhcGUvRW5kRXZlbnQuanM/YTJmNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2hhcGUgZnJvbSAnLi9TaGFwZSdcclxuaW1wb3J0IGV2ZW50QnVzIGZyb20gJy4uLy4uL2NvcmUvZXZlbnRCdXMnXHJcblxyXG5jbGFzcyBFbmRFdmVudCBleHRlbmRzIFNoYXBlIHtcclxuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBzdHlsZSA9IHt9KSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICAvL1xyXG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlXHJcbiAgICAvL1xyXG4gICAgaWYgKGVsZW1lbnQucGxhbmUgJiYgZWxlbWVudC5wbGFuZS5ib3VuZHMpIHtcclxuICAgICAgZWxlbWVudC5wbGFuZS5ib3VuZHMud2lkdGggPSBlbGVtZW50LnBsYW5lLmJvdW5kcy53aWR0aCB8fCA0MFxyXG4gICAgICBlbGVtZW50LnBsYW5lLmJvdW5kcy5oZWlnaHQgPSBlbGVtZW50LnBsYW5lLmJvdW5kcy5oZWlnaHQgfHwgNDBcclxuICAgIH1cclxuICAgIGlmICghZWxlbWVudC5kYXRhLm5hbWUpIHtcclxuICAgICAgZWxlbWVudC5kYXRhLm5hbWUgPSBldmVudEJ1cy50cmlnZ2VyKCdpMThuJywgJ2JwbW4uRW5kRXZlbnQnKVxyXG4gICAgfVxyXG4gICAgLy8gYnBtbuaVsOaNrlxyXG4gICAgdGhpcy5kYXRhID0gZWxlbWVudC5kYXRhXHJcbiAgICAvL1xyXG4gICAgdGhpcy5wbGFuZSA9IGVsZW1lbnQucGxhbmVcclxuXHJcbiAgICB0aGlzLmJwbW5OYW1lID0gJ0VuZEV2ZW50J1xyXG5cclxuICAgIHRoaXMuZ3JvdXBOYW1lID0gJ0VuZEV2ZW50J1xyXG5cclxuICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuZ2V0UGF0aCgpXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOiOt+WPlue7mOWbvui3r+W+hFxyXG4gICAqL1xyXG4gIGdldFBhdGgoKSB7XHJcbiAgICBjb25zdCB7IGhlaWdodCwgd2lkdGggfSA9IHRoaXMucGxhbmUuYm91bmRzXHJcbiAgICBjb25zdCBkZWZhdWx0Q29udGVudCA9IFtdXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbGluZVN0eWxlOiB7XHJcbiAgICAgICAgICBsaW5lU3R5bGU6ICdzb2xpZCcsXHJcbiAgICAgICAgICBsaW5lV2lkdGg6IHRoaXMubGluZVN0eWxlLmxpbmVXaWR0aCArIDJcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbW92ZScsIHg6IDAsIHk6IGhlaWdodCAvIDIgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnY3VydmUnLFxyXG4gICAgICAgICAgICB4MTogMCxcclxuICAgICAgICAgICAgeTE6IC1oZWlnaHQgLyA2LFxyXG4gICAgICAgICAgICB4Mjogd2lkdGgsXHJcbiAgICAgICAgICAgIHkyOiAtaGVpZ2h0IC8gNixcclxuICAgICAgICAgICAgeDogd2lkdGgsXHJcbiAgICAgICAgICAgIHk6IGhlaWdodCAvIDJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2N1cnZlJyxcclxuICAgICAgICAgICAgeDE6IHdpZHRoLFxyXG4gICAgICAgICAgICB5MTogaGVpZ2h0ICsgaGVpZ2h0IC8gNixcclxuICAgICAgICAgICAgeDI6IDAsXHJcbiAgICAgICAgICAgIHkyOiBoZWlnaHQgKyBoZWlnaHQgLyA2LFxyXG4gICAgICAgICAgICB4OiAwLFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgLyAyXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdjbG9zZScgfVxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgLi4uKHRoaXMuc3R5bGUuY29udGVudCB8fCBkZWZhdWx0Q29udGVudCksXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsU3R5bGU6IHsgdHlwZTogJ25vbmUnIH0sXHJcbiAgICAgICAgbGluZVN0eWxlOiB7IGxpbmVXaWR0aDogMCB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbW92ZScsIHg6IDAsIHk6IGhlaWdodCAvIDIgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnY3VydmUnLFxyXG4gICAgICAgICAgICB4MTogMCxcclxuICAgICAgICAgICAgeTE6IC1oZWlnaHQgLyA2LFxyXG4gICAgICAgICAgICB4Mjogd2lkdGgsXHJcbiAgICAgICAgICAgIHkyOiAtaGVpZ2h0IC8gNixcclxuICAgICAgICAgICAgeDogd2lkdGgsXHJcbiAgICAgICAgICAgIHk6IGhlaWdodCAvIDJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2N1cnZlJyxcclxuICAgICAgICAgICAgeDE6IHdpZHRoLFxyXG4gICAgICAgICAgICB5MTogaGVpZ2h0ICsgaGVpZ2h0IC8gNixcclxuICAgICAgICAgICAgeDI6IDAsXHJcbiAgICAgICAgICAgIHkyOiBoZWlnaHQgKyBoZWlnaHQgLyA2LFxyXG4gICAgICAgICAgICB4OiAwLFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgLyAyXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdjbG9zZScgfVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W5paH5pys6IyD5Zu0XHJcbiAgICovXHJcbiAgZ2V0VGV4dEJsb2NrKCkge1xyXG4gICAgY29uc3QgeyBoZWlnaHQsIHdpZHRoIH0gPSB0aGlzLnBsYW5lLmJvdW5kc1xyXG4gICAgcmV0dXJuIHsgeDogd2lkdGggLyAyIC0gNjAsIHk6IGhlaWdodCwgd2lkdGg6IDEyMCwgaGVpZ2h0OiAzMCB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBFbmRFdmVudFxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2RyYXcvc2hhcGUvRW5kRXZlbnQuanMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFyQkE7QUFzQkE7QUFDQTs7Ozs7OztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBaEJBO0FBOEJBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBZEE7QUEyQkE7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7OztBQS9GQTtBQUNBO0FBaUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///16\n"); + +/***/ }), +/* 17 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Shape__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_eventBus__ = __webpack_require__(0);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\nvar StartEvent = function (_Shape) {\n _inherits(StartEvent, _Shape);\n\n function StartEvent(element) {\n var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, StartEvent);\n\n //\n var _this = _possibleConstructorReturn(this, (StartEvent.__proto__ || Object.getPrototypeOf(StartEvent)).call(this));\n\n _this.style = style;\n //\n if (element.plane && element.plane.bounds) {\n element.plane.bounds.width = element.plane.bounds.width || 40;\n element.plane.bounds.height = element.plane.bounds.height || 40;\n }\n if (!element.data.name) {\n element.data.name = __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('i18n', 'bpmn.StartEvent');\n }\n // bpmn数据\n _this.data = element.data;\n //\n _this.plane = element.plane;\n\n _this.bpmnName = 'StartEvent';\n\n _this.groupName = 'StartEvent';\n\n _this.actions = _this.getPath();\n return _this;\n }\n /**\r\n * 获取绘图路径\r\n */\n\n\n _createClass(StartEvent, [{\n key: 'getPath',\n value: function getPath() {\n var _plane$bounds = this.plane.bounds,\n height = _plane$bounds.height,\n width = _plane$bounds.width;\n\n var defaultContent = [];\n return [{\n lineStyle: { lineStyle: 'solid' },\n actions: [{ action: 'move', x: 0, y: height / 2 }, {\n action: 'curve',\n x1: 0,\n y1: -height / 6,\n x2: width,\n y2: -height / 6,\n x: width,\n y: height / 2\n }, {\n action: 'curve',\n x1: width,\n y1: height + height / 6,\n x2: 0,\n y2: height + height / 6,\n x: 0,\n y: height / 2\n }, { action: 'close' }]\n }].concat(_toConsumableArray(this.style.content || defaultContent), [{\n fillStyle: { type: 'none' },\n lineStyle: { lineWidth: 0 },\n actions: [{ action: 'move', x: 0, y: height / 2 }, {\n action: 'curve',\n x1: 0,\n y1: -height / 6,\n x2: width,\n y2: -height / 6,\n x: width,\n y: height / 2\n }, {\n action: 'curve',\n x1: width,\n y1: height + height / 6,\n x2: 0,\n y2: height + height / 6,\n x: 0,\n y: height / 2\n }, { action: 'close' }]\n }]);\n }\n\n /**\r\n * 获取文本范围\r\n */\n\n }, {\n key: 'getTextBlock',\n value: function getTextBlock() {\n var _plane$bounds2 = this.plane.bounds,\n height = _plane$bounds2.height,\n width = _plane$bounds2.width;\n\n return { x: width / 2 - 60, y: height, width: 120, height: 30 };\n }\n }]);\n\n return StartEvent;\n}(__WEBPACK_IMPORTED_MODULE_0__Shape__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (StartEvent);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvc2hhcGUvU3RhcnRFdmVudC5qcz9kZDc2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTaGFwZSBmcm9tICcuL1NoYXBlJ1xyXG5pbXBvcnQgZXZlbnRCdXMgZnJvbSAnLi4vLi4vY29yZS9ldmVudEJ1cydcclxuXHJcbmNsYXNzIFN0YXJ0RXZlbnQgZXh0ZW5kcyBTaGFwZSB7XHJcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgc3R5bGUgPSB7fSkge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgLy9cclxuICAgIHRoaXMuc3R5bGUgPSBzdHlsZVxyXG4gICAgLy9cclxuICAgIGlmIChlbGVtZW50LnBsYW5lICYmIGVsZW1lbnQucGxhbmUuYm91bmRzKSB7XHJcbiAgICAgIGVsZW1lbnQucGxhbmUuYm91bmRzLndpZHRoID0gZWxlbWVudC5wbGFuZS5ib3VuZHMud2lkdGggfHwgNDBcclxuICAgICAgZWxlbWVudC5wbGFuZS5ib3VuZHMuaGVpZ2h0ID0gZWxlbWVudC5wbGFuZS5ib3VuZHMuaGVpZ2h0IHx8IDQwXHJcbiAgICB9XHJcbiAgICBpZiAoIWVsZW1lbnQuZGF0YS5uYW1lKSB7XHJcbiAgICAgIGVsZW1lbnQuZGF0YS5uYW1lID0gZXZlbnRCdXMudHJpZ2dlcignaTE4bicsICdicG1uLlN0YXJ0RXZlbnQnKVxyXG4gICAgfVxyXG4gICAgLy8gYnBtbuaVsOaNrlxyXG4gICAgdGhpcy5kYXRhID0gZWxlbWVudC5kYXRhXHJcbiAgICAvL1xyXG4gICAgdGhpcy5wbGFuZSA9IGVsZW1lbnQucGxhbmVcclxuXHJcbiAgICB0aGlzLmJwbW5OYW1lID0gJ1N0YXJ0RXZlbnQnXHJcblxyXG4gICAgdGhpcy5ncm91cE5hbWUgPSAnU3RhcnRFdmVudCdcclxuXHJcbiAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLmdldFBhdGgoKVxyXG4gIH1cclxuICAvKipcclxuICAgKiDojrflj5bnu5jlm77ot6/lvoRcclxuICAgKi9cclxuICBnZXRQYXRoKCkge1xyXG4gICAgY29uc3QgeyBoZWlnaHQsIHdpZHRoIH0gPSB0aGlzLnBsYW5lLmJvdW5kc1xyXG4gICAgY29uc3QgZGVmYXVsdENvbnRlbnQgPSBbXVxyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIGxpbmVTdHlsZTogeyBsaW5lU3R5bGU6ICdzb2xpZCcgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ21vdmUnLCB4OiAwLCB5OiBoZWlnaHQgLyAyIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2N1cnZlJyxcclxuICAgICAgICAgICAgeDE6IDAsXHJcbiAgICAgICAgICAgIHkxOiAtaGVpZ2h0IC8gNixcclxuICAgICAgICAgICAgeDI6IHdpZHRoLFxyXG4gICAgICAgICAgICB5MjogLWhlaWdodCAvIDYsXHJcbiAgICAgICAgICAgIHg6IHdpZHRoLFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgLyAyXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdjdXJ2ZScsXHJcbiAgICAgICAgICAgIHgxOiB3aWR0aCxcclxuICAgICAgICAgICAgeTE6IGhlaWdodCArIGhlaWdodCAvIDYsXHJcbiAgICAgICAgICAgIHgyOiAwLFxyXG4gICAgICAgICAgICB5MjogaGVpZ2h0ICsgaGVpZ2h0IC8gNixcclxuICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgeTogaGVpZ2h0IC8gMlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLih0aGlzLnN0eWxlLmNvbnRlbnQgfHwgZGVmYXVsdENvbnRlbnQpLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbFN0eWxlOiB7IHR5cGU6ICdub25lJyB9LFxyXG4gICAgICAgIGxpbmVTdHlsZTogeyBsaW5lV2lkdGg6IDAgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ21vdmUnLCB4OiAwLCB5OiBoZWlnaHQgLyAyIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2N1cnZlJyxcclxuICAgICAgICAgICAgeDE6IDAsXHJcbiAgICAgICAgICAgIHkxOiAtaGVpZ2h0IC8gNixcclxuICAgICAgICAgICAgeDI6IHdpZHRoLFxyXG4gICAgICAgICAgICB5MjogLWhlaWdodCAvIDYsXHJcbiAgICAgICAgICAgIHg6IHdpZHRoLFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgLyAyXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdjdXJ2ZScsXHJcbiAgICAgICAgICAgIHgxOiB3aWR0aCxcclxuICAgICAgICAgICAgeTE6IGhlaWdodCArIGhlaWdodCAvIDYsXHJcbiAgICAgICAgICAgIHgyOiAwLFxyXG4gICAgICAgICAgICB5MjogaGVpZ2h0ICsgaGVpZ2h0IC8gNixcclxuICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgeTogaGVpZ2h0IC8gMlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiOt+WPluaWh+acrOiMg+WbtFxyXG4gICAqL1xyXG4gIGdldFRleHRCbG9jaygpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0LCB3aWR0aCB9ID0gdGhpcy5wbGFuZS5ib3VuZHNcclxuICAgIHJldHVybiB7IHg6IHdpZHRoIC8gMiAtIDYwLCB5OiBoZWlnaHQsIHdpZHRoOiAxMjAsIGhlaWdodDogMzAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU3RhcnRFdmVudFxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2RyYXcvc2hhcGUvU3RhcnRFdmVudC5qcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXJCQTtBQXNCQTtBQUNBOzs7Ozs7O0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFiQTtBQTJCQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQWRBO0FBMkJBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7Ozs7QUE1RkE7QUFDQTtBQThGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///17\n"); + +/***/ }), +/* 18 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Shape__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_eventBus__ = __webpack_require__(0);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\nvar UserTask = function (_Shape) {\n _inherits(UserTask, _Shape);\n\n function UserTask(element) {\n var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, UserTask);\n\n //\n var _this = _possibleConstructorReturn(this, (UserTask.__proto__ || Object.getPrototypeOf(UserTask)).call(this));\n\n _this.style = style;\n //\n if (element.plane && element.plane.bounds) {\n element.plane.bounds.width = element.plane.bounds.width || 110;\n element.plane.bounds.height = element.plane.bounds.height || 55;\n }\n if (!element.data.name) {\n element.data.name = __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('i18n', 'bpmn.UserTask');\n }\n // bpmn数据\n _this.data = element.data;\n //\n _this.plane = element.plane;\n\n _this.bpmnName = 'UserTask';\n\n _this.groupName = 'Task';\n\n _this.actions = _this.getPath();\n return _this;\n }\n /**\r\n * 获取绘图路径\r\n */\n\n\n _createClass(UserTask, [{\n key: 'getPath',\n value: function getPath() {\n var _plane$bounds = this.plane.bounds,\n height = _plane$bounds.height,\n width = _plane$bounds.width;\n\n var defaultShape = [{ action: 'move', x: 0, y: 4 }, { action: 'quadraticCurve', x1: 0, y1: 0, x: 4, y: 0 }, { action: 'line', x: width - 4, y: 0 }, { action: 'quadraticCurve', x1: width, y1: 0, x: width, y: 4 }, { action: 'line', x: width, y: height - 4 }, {\n action: 'quadraticCurve',\n x1: width,\n y1: height,\n x: width - 4,\n y: height\n }, { action: 'line', x: 4, y: height }, { action: 'quadraticCurve', x1: 0, y1: height, x: 0, y: height - 4 }, { action: 'close' }];\n\n var defaultContent = [{\n actions: [{\n action: 'font',\n fontStyle: 'normal',\n fontVariant: 'normal',\n fontWeight: 'normal',\n fontSize: '18px',\n fontFamily: 'bpmn',\n content: '\\uE844',\n x: 4,\n y: 16\n }]\n }];\n\n return [{\n lineStyle: { lineStyle: 'solid' },\n actions: defaultShape\n }].concat(_toConsumableArray(this.style.content || defaultContent), [{\n fillStyle: { type: 'none' },\n lineStyle: { lineWidth: 0 },\n actions: defaultShape\n }]);\n }\n\n /**\r\n * 获取文本范围\r\n */\n\n }, {\n key: 'getTextBlock',\n value: function getTextBlock() {\n var _plane$bounds2 = this.plane.bounds,\n height = _plane$bounds2.height,\n width = _plane$bounds2.width;\n\n return { x: 10, y: 0, width: width - 20, height: height };\n }\n }]);\n\n return UserTask;\n}(__WEBPACK_IMPORTED_MODULE_0__Shape__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (UserTask);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTguanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvc2hhcGUvVXNlclRhc2suanM/NTFjNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2hhcGUgZnJvbSAnLi9TaGFwZSdcclxuaW1wb3J0IGV2ZW50QnVzIGZyb20gJy4uLy4uL2NvcmUvZXZlbnRCdXMnXHJcblxyXG5jbGFzcyBVc2VyVGFzayBleHRlbmRzIFNoYXBlIHtcclxuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBzdHlsZSA9IHt9KSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICAvL1xyXG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlXHJcbiAgICAvL1xyXG4gICAgaWYgKGVsZW1lbnQucGxhbmUgJiYgZWxlbWVudC5wbGFuZS5ib3VuZHMpIHtcclxuICAgICAgZWxlbWVudC5wbGFuZS5ib3VuZHMud2lkdGggPSBlbGVtZW50LnBsYW5lLmJvdW5kcy53aWR0aCB8fCAxMTBcclxuICAgICAgZWxlbWVudC5wbGFuZS5ib3VuZHMuaGVpZ2h0ID0gZWxlbWVudC5wbGFuZS5ib3VuZHMuaGVpZ2h0IHx8IDU1XHJcbiAgICB9XHJcbiAgICBpZiAoIWVsZW1lbnQuZGF0YS5uYW1lKSB7XHJcbiAgICAgIGVsZW1lbnQuZGF0YS5uYW1lID0gZXZlbnRCdXMudHJpZ2dlcignaTE4bicsICdicG1uLlVzZXJUYXNrJylcclxuICAgIH1cclxuICAgIC8vIGJwbW7mlbDmja5cclxuICAgIHRoaXMuZGF0YSA9IGVsZW1lbnQuZGF0YVxyXG4gICAgLy9cclxuICAgIHRoaXMucGxhbmUgPSBlbGVtZW50LnBsYW5lXHJcblxyXG4gICAgdGhpcy5icG1uTmFtZSA9ICdVc2VyVGFzaydcclxuXHJcbiAgICB0aGlzLmdyb3VwTmFtZSA9ICdUYXNrJ1xyXG5cclxuICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuZ2V0UGF0aCgpXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOiOt+WPlue7mOWbvui3r+W+hFxyXG4gICAqL1xyXG4gIGdldFBhdGgoKSB7XHJcbiAgICBjb25zdCB7IGhlaWdodCwgd2lkdGggfSA9IHRoaXMucGxhbmUuYm91bmRzXHJcbiAgICBjb25zdCBkZWZhdWx0U2hhcGUgPSBbXHJcbiAgICAgIHsgYWN0aW9uOiAnbW92ZScsIHg6IDAsIHk6IDQgfSxcclxuICAgICAgeyBhY3Rpb246ICdxdWFkcmF0aWNDdXJ2ZScsIHgxOiAwLCB5MTogMCwgeDogNCwgeTogMCB9LFxyXG4gICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiB3aWR0aCAtIDQsIHk6IDAgfSxcclxuICAgICAgeyBhY3Rpb246ICdxdWFkcmF0aWNDdXJ2ZScsIHgxOiB3aWR0aCwgeTE6IDAsIHg6IHdpZHRoLCB5OiA0IH0sXHJcbiAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IHdpZHRoLCB5OiBoZWlnaHQgLSA0IH0sXHJcbiAgICAgIHtcclxuICAgICAgICBhY3Rpb246ICdxdWFkcmF0aWNDdXJ2ZScsXHJcbiAgICAgICAgeDE6IHdpZHRoLFxyXG4gICAgICAgIHkxOiBoZWlnaHQsXHJcbiAgICAgICAgeDogd2lkdGggLSA0LFxyXG4gICAgICAgIHk6IGhlaWdodFxyXG4gICAgICB9LFxyXG4gICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiA0LCB5OiBoZWlnaHQgfSxcclxuICAgICAgeyBhY3Rpb246ICdxdWFkcmF0aWNDdXJ2ZScsIHgxOiAwLCB5MTogaGVpZ2h0LCB4OiAwLCB5OiBoZWlnaHQgLSA0IH0sXHJcbiAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH1cclxuICAgIF1cclxuXHJcbiAgICBjb25zdCBkZWZhdWx0Q29udGVudCA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnZm9udCcsXHJcbiAgICAgICAgICAgIGZvbnRTdHlsZTogJ25vcm1hbCcsXHJcbiAgICAgICAgICAgIGZvbnRWYXJpYW50OiAnbm9ybWFsJyxcclxuICAgICAgICAgICAgZm9udFdlaWdodDogJ25vcm1hbCcsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiAnMThweCcsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdicG1uJyxcclxuICAgICAgICAgICAgY29udGVudDogJ1xcdUU4NDQnLFxyXG4gICAgICAgICAgICB4OiA0LFxyXG4gICAgICAgICAgICB5OiAxNlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXVxyXG5cclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBsaW5lU3R5bGU6IHsgbGluZVN0eWxlOiAnc29saWQnIH0sXHJcbiAgICAgICAgYWN0aW9uczogZGVmYXVsdFNoYXBlXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLih0aGlzLnN0eWxlLmNvbnRlbnQgfHwgZGVmYXVsdENvbnRlbnQpLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbFN0eWxlOiB7IHR5cGU6ICdub25lJyB9LFxyXG4gICAgICAgIGxpbmVTdHlsZTogeyBsaW5lV2lkdGg6IDAgfSxcclxuICAgICAgICBhY3Rpb25zOiBkZWZhdWx0U2hhcGVcclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W5paH5pys6IyD5Zu0XHJcbiAgICovXHJcbiAgZ2V0VGV4dEJsb2NrKCkge1xyXG4gICAgY29uc3QgeyBoZWlnaHQsIHdpZHRoIH0gPSB0aGlzLnBsYW5lLmJvdW5kc1xyXG4gICAgcmV0dXJuIHsgeDogMTAsIHk6IDAsIHdpZHRoOiB3aWR0aCAtIDIwLCBoZWlnaHQ6IGhlaWdodCB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBVc2VyVGFza1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2RyYXcvc2hhcGUvVXNlclRhc2suanMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFyQkE7QUFzQkE7QUFDQTs7Ozs7OztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQUNBO0FBV0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBRkE7QUFDQTtBQWdCQTtBQUVBO0FBQ0E7QUFGQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7OztBQXJGQTtBQUNBO0FBdUZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///18\n"); + +/***/ }), +/* 19 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Shape__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_eventBus__ = __webpack_require__(0);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\nvar ServiceTask = function (_Shape) {\n _inherits(ServiceTask, _Shape);\n\n function ServiceTask(element) {\n var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, ServiceTask);\n\n //\n var _this = _possibleConstructorReturn(this, (ServiceTask.__proto__ || Object.getPrototypeOf(ServiceTask)).call(this));\n\n _this.style = style;\n //\n if (element.plane && element.plane.bounds) {\n element.plane.bounds.width = element.plane.bounds.width || 110;\n element.plane.bounds.height = element.plane.bounds.height || 55;\n }\n if (!element.data.name) {\n element.data.name = __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('i18n', 'bpmn.ServiceTask');\n }\n // bpmn数据\n _this.data = element.data;\n //\n _this.plane = element.plane;\n\n _this.bpmnName = 'ServiceTask';\n\n _this.groupName = 'Task';\n\n _this.actions = _this.getPath();\n return _this;\n }\n /**\r\n * 获取绘图路径\r\n */\n\n\n _createClass(ServiceTask, [{\n key: 'getPath',\n value: function getPath() {\n var _plane$bounds = this.plane.bounds,\n height = _plane$bounds.height,\n width = _plane$bounds.width;\n\n var defaultContent = [{\n actions: [{\n action: 'font',\n fontStyle: 'normal',\n fontVariant: 'normal',\n fontWeight: 'normal',\n fontSize: '18px',\n fontFamily: 'bpmn',\n content: '\\uE844',\n x: 4,\n y: 16\n }]\n }];\n return [{\n lineStyle: { lineStyle: 'solid' },\n actions: [{ action: 'move', x: 0, y: 4 }, { action: 'quadraticCurve', x1: 0, y1: 0, x: 4, y: 0 }, { action: 'line', x: width - 4, y: 0 }, { action: 'quadraticCurve', x1: width, y1: 0, x: width, y: 4 }, { action: 'line', x: width, y: height - 4 }, {\n action: 'quadraticCurve',\n x1: width,\n y1: height,\n x: width - 4,\n y: height\n }, { action: 'line', x: 4, y: height }, { action: 'quadraticCurve', x1: 0, y1: height, x: 0, y: height - 4 }, { action: 'close' }]\n }].concat(_toConsumableArray(this.style.content || defaultContent), [{\n fillStyle: { type: 'none' },\n lineStyle: { lineWidth: 0 },\n actions: [{ action: 'move', x: 0, y: 4 }, { action: 'quadraticCurve', x1: 0, y1: 0, x: 4, y: 0 }, { action: 'line', x: width - 4, y: 0 }, { action: 'quadraticCurve', x1: width, y1: 0, x: width, y: 4 }, { action: 'line', x: width, y: height - 4 }, {\n action: 'quadraticCurve',\n x1: width,\n y1: height,\n x: width - 4,\n y: height\n }, { action: 'line', x: 4, y: height }, { action: 'quadraticCurve', x1: 0, y1: height, x: 0, y: height - 4 }, { action: 'close' }]\n }]);\n }\n\n /**\r\n * 获取文本范围\r\n */\n\n }, {\n key: 'getTextBlock',\n value: function getTextBlock() {\n var _plane$bounds2 = this.plane.bounds,\n height = _plane$bounds2.height,\n width = _plane$bounds2.width;\n\n return { x: 10, y: 0, width: width - 20, height: height };\n }\n }]);\n\n return ServiceTask;\n}(__WEBPACK_IMPORTED_MODULE_0__Shape__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ServiceTask);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTkuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvc2hhcGUvU2VydmljZVRhc2suanM/ZDM5NiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2hhcGUgZnJvbSAnLi9TaGFwZSdcclxuaW1wb3J0IGV2ZW50QnVzIGZyb20gJy4uLy4uL2NvcmUvZXZlbnRCdXMnXHJcblxyXG5jbGFzcyBTZXJ2aWNlVGFzayBleHRlbmRzIFNoYXBlIHtcclxuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBzdHlsZSA9IHt9KSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICAvL1xyXG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlXHJcbiAgICAvL1xyXG4gICAgaWYgKGVsZW1lbnQucGxhbmUgJiYgZWxlbWVudC5wbGFuZS5ib3VuZHMpIHtcclxuICAgICAgZWxlbWVudC5wbGFuZS5ib3VuZHMud2lkdGggPSBlbGVtZW50LnBsYW5lLmJvdW5kcy53aWR0aCB8fCAxMTBcclxuICAgICAgZWxlbWVudC5wbGFuZS5ib3VuZHMuaGVpZ2h0ID0gZWxlbWVudC5wbGFuZS5ib3VuZHMuaGVpZ2h0IHx8IDU1XHJcbiAgICB9XHJcbiAgICBpZiAoIWVsZW1lbnQuZGF0YS5uYW1lKSB7XHJcbiAgICAgIGVsZW1lbnQuZGF0YS5uYW1lID0gZXZlbnRCdXMudHJpZ2dlcignaTE4bicsICdicG1uLlNlcnZpY2VUYXNrJylcclxuICAgIH1cclxuICAgIC8vIGJwbW7mlbDmja5cclxuICAgIHRoaXMuZGF0YSA9IGVsZW1lbnQuZGF0YVxyXG4gICAgLy9cclxuICAgIHRoaXMucGxhbmUgPSBlbGVtZW50LnBsYW5lXHJcblxyXG4gICAgdGhpcy5icG1uTmFtZSA9ICdTZXJ2aWNlVGFzaydcclxuXHJcbiAgICB0aGlzLmdyb3VwTmFtZSA9ICdUYXNrJ1xyXG5cclxuICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuZ2V0UGF0aCgpXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOiOt+WPlue7mOWbvui3r+W+hFxyXG4gICAqL1xyXG4gIGdldFBhdGgoKSB7XHJcbiAgICBjb25zdCB7IGhlaWdodCwgd2lkdGggfSA9IHRoaXMucGxhbmUuYm91bmRzXHJcbiAgICBjb25zdCBkZWZhdWx0Q29udGVudCA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnZm9udCcsXHJcbiAgICAgICAgICAgIGZvbnRTdHlsZTogJ25vcm1hbCcsXHJcbiAgICAgICAgICAgIGZvbnRWYXJpYW50OiAnbm9ybWFsJyxcclxuICAgICAgICAgICAgZm9udFdlaWdodDogJ25vcm1hbCcsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiAnMThweCcsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdicG1uJyxcclxuICAgICAgICAgICAgY29udGVudDogJ1xcdUU4NDQnLFxyXG4gICAgICAgICAgICB4OiA0LFxyXG4gICAgICAgICAgICB5OiAxNlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXVxyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIGxpbmVTdHlsZTogeyBsaW5lU3R5bGU6ICdzb2xpZCcgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ21vdmUnLCB4OiAwLCB5OiA0IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ3F1YWRyYXRpY0N1cnZlJywgeDE6IDAsIHkxOiAwLCB4OiA0LCB5OiAwIH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiB3aWR0aCAtIDQsIHk6IDAgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAncXVhZHJhdGljQ3VydmUnLCB4MTogd2lkdGgsIHkxOiAwLCB4OiB3aWR0aCwgeTogNCB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdsaW5lJywgeDogd2lkdGgsIHk6IGhlaWdodCAtIDQgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAncXVhZHJhdGljQ3VydmUnLFxyXG4gICAgICAgICAgICB4MTogd2lkdGgsXHJcbiAgICAgICAgICAgIHkxOiBoZWlnaHQsXHJcbiAgICAgICAgICAgIHg6IHdpZHRoIC0gNCxcclxuICAgICAgICAgICAgeTogaGVpZ2h0XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdsaW5lJywgeDogNCwgeTogaGVpZ2h0IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ3F1YWRyYXRpY0N1cnZlJywgeDE6IDAsIHkxOiBoZWlnaHQsIHg6IDAsIHk6IGhlaWdodCAtIDQgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLih0aGlzLnN0eWxlLmNvbnRlbnQgfHwgZGVmYXVsdENvbnRlbnQpLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbFN0eWxlOiB7IHR5cGU6ICdub25lJyB9LFxyXG4gICAgICAgIGxpbmVTdHlsZTogeyBsaW5lV2lkdGg6IDAgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ21vdmUnLCB4OiAwLCB5OiA0IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ3F1YWRyYXRpY0N1cnZlJywgeDE6IDAsIHkxOiAwLCB4OiA0LCB5OiAwIH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiB3aWR0aCAtIDQsIHk6IDAgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAncXVhZHJhdGljQ3VydmUnLCB4MTogd2lkdGgsIHkxOiAwLCB4OiB3aWR0aCwgeTogNCB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdsaW5lJywgeDogd2lkdGgsIHk6IGhlaWdodCAtIDQgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAncXVhZHJhdGljQ3VydmUnLFxyXG4gICAgICAgICAgICB4MTogd2lkdGgsXHJcbiAgICAgICAgICAgIHkxOiBoZWlnaHQsXHJcbiAgICAgICAgICAgIHg6IHdpZHRoIC0gNCxcclxuICAgICAgICAgICAgeTogaGVpZ2h0XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdsaW5lJywgeDogNCwgeTogaGVpZ2h0IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ3F1YWRyYXRpY0N1cnZlJywgeDE6IDAsIHkxOiBoZWlnaHQsIHg6IDAsIHk6IGhlaWdodCAtIDQgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiOt+WPluaWh+acrOiMg+WbtFxyXG4gICAqL1xyXG4gIGdldFRleHRCbG9jaygpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0LCB3aWR0aCB9ID0gdGhpcy5wbGFuZS5ib3VuZHNcclxuICAgIHJldHVybiB7IHg6IDEwLCB5OiAwLCB3aWR0aDogd2lkdGggLSAyMCwgaGVpZ2h0OiBoZWlnaHQgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2VydmljZVRhc2tcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9kcmF3L3NoYXBlL1NlcnZpY2VUYXNrLmpzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckJBO0FBc0JBO0FBQ0E7Ozs7Ozs7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVRBO0FBRkE7QUFnQkE7QUFFQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBUkE7QUFzQkE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBVEE7QUFzQkE7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7OztBQWxHQTtBQUNBO0FBb0dBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///19\n"); + +/***/ }), +/* 20 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Shape__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_eventBus__ = __webpack_require__(0);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\nvar EndEvent = function (_Shape) {\n _inherits(EndEvent, _Shape);\n\n function EndEvent(element) {\n var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, EndEvent);\n\n //\n var _this = _possibleConstructorReturn(this, (EndEvent.__proto__ || Object.getPrototypeOf(EndEvent)).call(this));\n\n _this.style = style;\n //\n if (element.plane && element.plane.bounds) {\n element.plane.bounds.width = element.plane.bounds.width || 40;\n element.plane.bounds.height = element.plane.bounds.height || 40;\n }\n if (!element.data.name) {\n element.data.name = __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('i18n', 'bpmn.TerminateEndEvent');\n }\n // bpmn数据\n _this.data = element.data;\n //\n _this.plane = element.plane;\n\n _this.bpmnName = 'TerminateEndEvent';\n\n _this.groupName = 'EndEvent';\n\n _this.actions = _this.getPath();\n return _this;\n }\n /**\r\n * 获取绘图路径\r\n */\n\n\n _createClass(EndEvent, [{\n key: 'getPath',\n value: function getPath() {\n var _plane$bounds = this.plane.bounds,\n height = _plane$bounds.height,\n width = _plane$bounds.width;\n var lineWidth = this.lineStyle.lineWidth;\n\n\n var defaultContent = [{\n fillStyle: { type: 'solid', color: '50,50,50' },\n lineStyle: { lineWidth: 0, lineStyle: 'solid' },\n actions: [{ action: 'move', x: width * 0.5 - width * 0.25, y: height * 0.5 }, {\n action: 'curve',\n x1: width * 0.5 - width * 0.25,\n y1: height * 0.5 - height * 2 / 3 * 0.5,\n x2: width * 0.5 + width * 0.25,\n y2: height * 0.5 - height * 2 / 3 * 0.5,\n x: width * 0.5 + width * 0.25,\n y: height * 0.5\n }, {\n action: 'curve',\n x1: width * 0.5 + width * 0.25,\n y1: height * 0.5 + height * 2 / 3 * 0.5,\n x2: width * 0.5 - width * 0.25,\n y2: height * 0.5 + height * 2 / 3 * 0.5,\n x: width * 0.5 - width * 0.25,\n y: height * 0.5\n }, { action: 'close' }]\n }];\n\n return [{\n lineStyle: { lineWidth: lineWidth + 2, lineStyle: 'solid' },\n actions: [{ action: 'move', x: 0, y: height / 2 }, {\n action: 'curve',\n x1: 0,\n y1: -height / 6,\n x2: width,\n y2: -height / 6,\n x: width,\n y: height / 2\n }, {\n action: 'curve',\n x1: width,\n y1: height + height / 6,\n x2: 0,\n y2: height + height / 6,\n x: 0,\n y: height / 2\n }, { action: 'close' }]\n }].concat(_toConsumableArray(this.style.content || defaultContent), [{\n fillStyle: { type: 'none' },\n lineStyle: { lineWidth: 0 },\n actions: [{ action: 'move', x: 0, y: height / 2 }, {\n action: 'curve',\n x1: 0,\n y1: -height / 6,\n x2: width,\n y2: -height / 6,\n x: width,\n y: height / 2\n }, {\n action: 'curve',\n x1: width,\n y1: height + height / 6,\n x2: 0,\n y2: height + height / 6,\n x: 0,\n y: height / 2\n }, { action: 'close' }]\n }]);\n }\n\n /**\r\n * 获取文本范围\r\n */\n\n }, {\n key: 'getTextBlock',\n value: function getTextBlock() {\n var _plane$bounds2 = this.plane.bounds,\n height = _plane$bounds2.height,\n width = _plane$bounds2.width;\n\n return { x: width / 2 - 60, y: height, width: 120, height: 30 };\n }\n }]);\n\n return EndEvent;\n}(__WEBPACK_IMPORTED_MODULE_0__Shape__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (EndEvent);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjAuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvc2hhcGUvVGVybWluYXRlRW5kRXZlbnQuanM/YTQ2MSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2hhcGUgZnJvbSAnLi9TaGFwZSdcclxuaW1wb3J0IGV2ZW50QnVzIGZyb20gJy4uLy4uL2NvcmUvZXZlbnRCdXMnXHJcblxyXG5jbGFzcyBFbmRFdmVudCBleHRlbmRzIFNoYXBlIHtcclxuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBzdHlsZSA9IHt9KSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICAvL1xyXG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlXHJcbiAgICAvL1xyXG4gICAgaWYgKGVsZW1lbnQucGxhbmUgJiYgZWxlbWVudC5wbGFuZS5ib3VuZHMpIHtcclxuICAgICAgZWxlbWVudC5wbGFuZS5ib3VuZHMud2lkdGggPSBlbGVtZW50LnBsYW5lLmJvdW5kcy53aWR0aCB8fCA0MFxyXG4gICAgICBlbGVtZW50LnBsYW5lLmJvdW5kcy5oZWlnaHQgPSBlbGVtZW50LnBsYW5lLmJvdW5kcy5oZWlnaHQgfHwgNDBcclxuICAgIH1cclxuICAgIGlmICghZWxlbWVudC5kYXRhLm5hbWUpIHtcclxuICAgICAgZWxlbWVudC5kYXRhLm5hbWUgPSBldmVudEJ1cy50cmlnZ2VyKCdpMThuJywgJ2JwbW4uVGVybWluYXRlRW5kRXZlbnQnKVxyXG4gICAgfVxyXG4gICAgLy8gYnBtbuaVsOaNrlxyXG4gICAgdGhpcy5kYXRhID0gZWxlbWVudC5kYXRhXHJcbiAgICAvL1xyXG4gICAgdGhpcy5wbGFuZSA9IGVsZW1lbnQucGxhbmVcclxuXHJcbiAgICB0aGlzLmJwbW5OYW1lID0gJ1Rlcm1pbmF0ZUVuZEV2ZW50J1xyXG5cclxuICAgIHRoaXMuZ3JvdXBOYW1lID0gJ0VuZEV2ZW50J1xyXG5cclxuICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuZ2V0UGF0aCgpXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOiOt+WPlue7mOWbvui3r+W+hFxyXG4gICAqL1xyXG4gIGdldFBhdGgoKSB7XHJcbiAgICBjb25zdCB7IGhlaWdodCwgd2lkdGggfSA9IHRoaXMucGxhbmUuYm91bmRzXHJcbiAgICBjb25zdCB7IGxpbmVXaWR0aCB9ID0gdGhpcy5saW5lU3R5bGVcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0Q29udGVudCA9IFtcclxuICAgICAge1xyXG4gICAgICAgIGZpbGxTdHlsZTogeyB0eXBlOiAnc29saWQnLCBjb2xvcjogJzUwLDUwLDUwJyB9LFxyXG4gICAgICAgIGxpbmVTdHlsZTogeyBsaW5lV2lkdGg6IDAsIGxpbmVTdHlsZTogJ3NvbGlkJyB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbW92ZScsIHg6IHdpZHRoICogMC41IC0gd2lkdGggKiAwLjI1LCB5OiBoZWlnaHQgKiAwLjUgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnY3VydmUnLFxyXG4gICAgICAgICAgICB4MTogd2lkdGggKiAwLjUgLSB3aWR0aCAqIDAuMjUsXHJcbiAgICAgICAgICAgIHkxOiBoZWlnaHQgKiAwLjUgLSAoKGhlaWdodCAqIDIpIC8gMykgKiAwLjUsXHJcbiAgICAgICAgICAgIHgyOiB3aWR0aCAqIDAuNSArIHdpZHRoICogMC4yNSxcclxuICAgICAgICAgICAgeTI6IGhlaWdodCAqIDAuNSAtICgoaGVpZ2h0ICogMikgLyAzKSAqIDAuNSxcclxuICAgICAgICAgICAgeDogd2lkdGggKiAwLjUgKyB3aWR0aCAqIDAuMjUsXHJcbiAgICAgICAgICAgIHk6IGhlaWdodCAqIDAuNVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnY3VydmUnLFxyXG4gICAgICAgICAgICB4MTogd2lkdGggKiAwLjUgKyB3aWR0aCAqIDAuMjUsXHJcbiAgICAgICAgICAgIHkxOiBoZWlnaHQgKiAwLjUgKyAoKGhlaWdodCAqIDIpIC8gMykgKiAwLjUsXHJcbiAgICAgICAgICAgIHgyOiB3aWR0aCAqIDAuNSAtIHdpZHRoICogMC4yNSxcclxuICAgICAgICAgICAgeTI6IGhlaWdodCAqIDAuNSArICgoaGVpZ2h0ICogMikgLyAzKSAqIDAuNSxcclxuICAgICAgICAgICAgeDogd2lkdGggKiAwLjUgLSB3aWR0aCAqIDAuMjUsXHJcbiAgICAgICAgICAgIHk6IGhlaWdodCAqIDAuNVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbGluZVN0eWxlOiB7IGxpbmVXaWR0aDogbGluZVdpZHRoICsgMiwgbGluZVN0eWxlOiAnc29saWQnIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAgeyBhY3Rpb246ICdtb3ZlJywgeDogMCwgeTogaGVpZ2h0IC8gMiB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdjdXJ2ZScsXHJcbiAgICAgICAgICAgIHgxOiAwLFxyXG4gICAgICAgICAgICB5MTogLWhlaWdodCAvIDYsXHJcbiAgICAgICAgICAgIHgyOiB3aWR0aCxcclxuICAgICAgICAgICAgeTI6IC1oZWlnaHQgLyA2LFxyXG4gICAgICAgICAgICB4OiB3aWR0aCxcclxuICAgICAgICAgICAgeTogaGVpZ2h0IC8gMlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnY3VydmUnLFxyXG4gICAgICAgICAgICB4MTogd2lkdGgsXHJcbiAgICAgICAgICAgIHkxOiBoZWlnaHQgKyBoZWlnaHQgLyA2LFxyXG4gICAgICAgICAgICB4MjogMCxcclxuICAgICAgICAgICAgeTI6IGhlaWdodCArIGhlaWdodCAvIDYsXHJcbiAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgIHk6IGhlaWdodCAvIDJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2Nsb3NlJyB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICAuLi4odGhpcy5zdHlsZS5jb250ZW50IHx8IGRlZmF1bHRDb250ZW50KSxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGxTdHlsZTogeyB0eXBlOiAnbm9uZScgfSxcclxuICAgICAgICBsaW5lU3R5bGU6IHsgbGluZVdpZHRoOiAwIH0sXHJcbiAgICAgICAgYWN0aW9uczogW1xyXG4gICAgICAgICAgeyBhY3Rpb246ICdtb3ZlJywgeDogMCwgeTogaGVpZ2h0IC8gMiB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdjdXJ2ZScsXHJcbiAgICAgICAgICAgIHgxOiAwLFxyXG4gICAgICAgICAgICB5MTogLWhlaWdodCAvIDYsXHJcbiAgICAgICAgICAgIHgyOiB3aWR0aCxcclxuICAgICAgICAgICAgeTI6IC1oZWlnaHQgLyA2LFxyXG4gICAgICAgICAgICB4OiB3aWR0aCxcclxuICAgICAgICAgICAgeTogaGVpZ2h0IC8gMlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnY3VydmUnLFxyXG4gICAgICAgICAgICB4MTogd2lkdGgsXHJcbiAgICAgICAgICAgIHkxOiBoZWlnaHQgKyBoZWlnaHQgLyA2LFxyXG4gICAgICAgICAgICB4MjogMCxcclxuICAgICAgICAgICAgeTI6IGhlaWdodCArIGhlaWdodCAvIDYsXHJcbiAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgIHk6IGhlaWdodCAvIDJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2Nsb3NlJyB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDojrflj5bmlofmnKzojIPlm7RcclxuICAgKi9cclxuICBnZXRUZXh0QmxvY2soKSB7XHJcbiAgICBjb25zdCB7IGhlaWdodCwgd2lkdGggfSA9IHRoaXMucGxhbmUuYm91bmRzXHJcbiAgICByZXR1cm4geyB4OiB3aWR0aCAvIDIgLSA2MCwgeTogaGVpZ2h0LCB3aWR0aDogMTIwLCBoZWlnaHQ6IDMwIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEVuZEV2ZW50XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZHJhdy9zaGFwZS9UZXJtaW5hdGVFbmRFdmVudC5qcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXJCQTtBQXNCQTtBQUNBOzs7Ozs7O0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBZEE7QUFDQTtBQTJCQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQWJBO0FBMkJBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBZEE7QUEyQkE7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7OztBQTFIQTtBQUNBO0FBNEhBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///20\n"); + +/***/ }), +/* 21 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Shape__ = __webpack_require__(4);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\nvar ExclusiveGateway = function (_Shape) {\n _inherits(ExclusiveGateway, _Shape);\n\n function ExclusiveGateway(element) {\n var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, ExclusiveGateway);\n\n //\n var _this = _possibleConstructorReturn(this, (ExclusiveGateway.__proto__ || Object.getPrototypeOf(ExclusiveGateway)).call(this));\n\n _this.style = style;\n //\n if (element.plane && element.plane.bounds) {\n element.plane.bounds.width = element.plane.bounds.width || 50;\n element.plane.bounds.height = element.plane.bounds.height || 50;\n }\n //\n if (!element.data.name) {\n element.data.name = '';\n }\n // bpmn数据\n _this.data = element.data;\n //\n _this.plane = element.plane;\n\n _this.bpmnName = 'ExclusiveGateway';\n\n _this.groupName = 'Gateway';\n\n _this.actions = _this.getPath();\n return _this;\n }\n /**\r\n * 获取绘图路径\r\n */\n\n\n _createClass(ExclusiveGateway, [{\n key: 'getPath',\n value: function getPath() {\n var _plane$bounds = this.plane.bounds,\n height = _plane$bounds.height,\n width = _plane$bounds.width;\n\n var defaultContent = [{\n fillStyle: { type: 'solid', color: '0, 0, 0' },\n lineStyle: { lineWidth: 0, lineStyle: 'solid' },\n actions: [{\n action: 'move',\n x: width * 0.5 + width * 0.5 * 0.4 - width * 0.02,\n y: height * 0.5 - height * 0.5 * 0.4 - height * 0.02\n }, {\n action: 'line',\n x: width * 0.5 - width * 0.5 * 0.4 - width * 0.02,\n y: height * 0.5 + height * 0.5 * 0.4 - height * 0.02\n }, {\n action: 'line',\n x: width * 0.5 - width * 0.5 * 0.4 + width * 0.02,\n y: height * 0.5 + height * 0.5 * 0.4 + height * 0.02\n }, {\n action: 'line',\n x: width * 0.5 + width * 0.5 * 0.4 + width * 0.02,\n y: height * 0.5 - height * 0.5 * 0.4 + height * 0.02\n }, {\n action: 'line',\n x: width * 0.5 + width * 0.5 * 0.4 - width * 0.02,\n y: height * 0.5 - height * 0.5 * 0.4 - height * 0.02\n }, { action: 'close' }]\n }, {\n fillStyle: { type: 'solid', color: '0, 0, 0' },\n lineStyle: { lineWidth: 0, lineStyle: 'solid' },\n actions: [{ action: 'move', x: width * 0.5, y: height * 0.5 }, {\n action: 'move',\n x: width * 0.5 - width * 0.5 * 0.4 + width * 0.02,\n y: height * 0.5 - height * 0.5 * 0.4 - height * 0.02\n }, {\n action: 'line',\n x: width * 0.5 + width * 0.5 * 0.4 + width * 0.02,\n y: height * 0.5 + height * 0.5 * 0.4 - height * 0.02\n }, {\n action: 'line',\n x: width * 0.5 + width * 0.5 * 0.4 - width * 0.02,\n y: height * 0.5 + height * 0.5 * 0.4 + height * 0.02\n }, {\n action: 'line',\n x: width * 0.5 - width * 0.5 * 0.4 - width * 0.02,\n y: height * 0.5 - height * 0.5 * 0.4 + height * 0.02\n }, { action: 'close' }]\n }];\n return [{\n lineStyle: { lineStyle: 'solid' },\n actions: [{ action: 'move', x: 0, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: 0 }, { action: 'line', x: width, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: height }, { action: 'line', x: 0, y: height * 0.5 }, { action: 'close' }]\n }].concat(_toConsumableArray(this.style.content || defaultContent), [{\n fillStyle: { type: 'none' },\n lineStyle: { lineWidth: 0 },\n actions: [{ action: 'move', x: 0, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: 0 }, { action: 'line', x: width, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: height }, { action: 'line', x: 0, y: height * 0.5 }, { action: 'close' }]\n }]);\n }\n\n /**\r\n * 获取文本范围\r\n */\n\n }, {\n key: 'getTextBlock',\n value: function getTextBlock() {\n var _plane$bounds2 = this.plane.bounds,\n height = _plane$bounds2.height,\n width = _plane$bounds2.width;\n\n return { x: width / 2 - 60, y: height, width: 120, height: 30 };\n }\n }]);\n\n return ExclusiveGateway;\n}(__WEBPACK_IMPORTED_MODULE_0__Shape__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ExclusiveGateway);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjEuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvc2hhcGUvRXhjbHVzaXZlR2F0ZXdheS5qcz9iYTJmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTaGFwZSBmcm9tICcuL1NoYXBlJ1xyXG5cclxuY2xhc3MgRXhjbHVzaXZlR2F0ZXdheSBleHRlbmRzIFNoYXBlIHtcclxuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBzdHlsZSA9IHt9KSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICAvL1xyXG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlXHJcbiAgICAvL1xyXG4gICAgaWYgKGVsZW1lbnQucGxhbmUgJiYgZWxlbWVudC5wbGFuZS5ib3VuZHMpIHtcclxuICAgICAgZWxlbWVudC5wbGFuZS5ib3VuZHMud2lkdGggPSBlbGVtZW50LnBsYW5lLmJvdW5kcy53aWR0aCB8fCA1MFxyXG4gICAgICBlbGVtZW50LnBsYW5lLmJvdW5kcy5oZWlnaHQgPSBlbGVtZW50LnBsYW5lLmJvdW5kcy5oZWlnaHQgfHwgNTBcclxuICAgIH1cclxuICAgIC8vXHJcbiAgICBpZiAoIWVsZW1lbnQuZGF0YS5uYW1lKSB7XHJcbiAgICAgIGVsZW1lbnQuZGF0YS5uYW1lID0gJydcclxuICAgIH1cclxuICAgIC8vIGJwbW7mlbDmja5cclxuICAgIHRoaXMuZGF0YSA9IGVsZW1lbnQuZGF0YVxyXG4gICAgLy9cclxuICAgIHRoaXMucGxhbmUgPSBlbGVtZW50LnBsYW5lXHJcblxyXG4gICAgdGhpcy5icG1uTmFtZSA9ICdFeGNsdXNpdmVHYXRld2F5J1xyXG5cclxuICAgIHRoaXMuZ3JvdXBOYW1lID0gJ0dhdGV3YXknXHJcblxyXG4gICAgdGhpcy5hY3Rpb25zID0gdGhpcy5nZXRQYXRoKClcclxuICB9XHJcbiAgLyoqXHJcbiAgICog6I635Y+W57uY5Zu+6Lev5b6EXHJcbiAgICovXHJcbiAgZ2V0UGF0aCgpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0LCB3aWR0aCB9ID0gdGhpcy5wbGFuZS5ib3VuZHNcclxuICAgIGNvbnN0IGRlZmF1bHRDb250ZW50ID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbFN0eWxlOiB7IHR5cGU6ICdzb2xpZCcsIGNvbG9yOiAnMCwgMCwgMCcgfSxcclxuICAgICAgICBsaW5lU3R5bGU6IHsgbGluZVdpZHRoOiAwLCBsaW5lU3R5bGU6ICdzb2xpZCcgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ21vdmUnLFxyXG4gICAgICAgICAgICB4OiB3aWR0aCAqIDAuNSArIHdpZHRoICogMC41ICogMC40IC0gd2lkdGggKiAwLjAyLFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgKiAwLjUgLSBoZWlnaHQgKiAwLjUgKiAwLjQgLSBoZWlnaHQgKiAwLjAyXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdsaW5lJyxcclxuICAgICAgICAgICAgeDogd2lkdGggKiAwLjUgLSB3aWR0aCAqIDAuNSAqIDAuNCAtIHdpZHRoICogMC4wMixcclxuICAgICAgICAgICAgeTogaGVpZ2h0ICogMC41ICsgaGVpZ2h0ICogMC41ICogMC40IC0gaGVpZ2h0ICogMC4wMlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnbGluZScsXHJcbiAgICAgICAgICAgIHg6IHdpZHRoICogMC41IC0gd2lkdGggKiAwLjUgKiAwLjQgKyB3aWR0aCAqIDAuMDIsXHJcbiAgICAgICAgICAgIHk6IGhlaWdodCAqIDAuNSArIGhlaWdodCAqIDAuNSAqIDAuNCArIGhlaWdodCAqIDAuMDJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xpbmUnLFxyXG4gICAgICAgICAgICB4OiB3aWR0aCAqIDAuNSArIHdpZHRoICogMC41ICogMC40ICsgd2lkdGggKiAwLjAyLFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgKiAwLjUgLSBoZWlnaHQgKiAwLjUgKiAwLjQgKyBoZWlnaHQgKiAwLjAyXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdsaW5lJyxcclxuICAgICAgICAgICAgeDogd2lkdGggKiAwLjUgKyB3aWR0aCAqIDAuNSAqIDAuNCAtIHdpZHRoICogMC4wMixcclxuICAgICAgICAgICAgeTogaGVpZ2h0ICogMC41IC0gaGVpZ2h0ICogMC41ICogMC40IC0gaGVpZ2h0ICogMC4wMlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsU3R5bGU6IHsgdHlwZTogJ3NvbGlkJywgY29sb3I6ICcwLCAwLCAwJyB9LFxyXG4gICAgICAgIGxpbmVTdHlsZTogeyBsaW5lV2lkdGg6IDAsIGxpbmVTdHlsZTogJ3NvbGlkJyB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbW92ZScsIHg6IHdpZHRoICogMC41LCB5OiBoZWlnaHQgKiAwLjUgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnbW92ZScsXHJcbiAgICAgICAgICAgIHg6IHdpZHRoICogMC41IC0gd2lkdGggKiAwLjUgKiAwLjQgKyB3aWR0aCAqIDAuMDIsXHJcbiAgICAgICAgICAgIHk6IGhlaWdodCAqIDAuNSAtIGhlaWdodCAqIDAuNSAqIDAuNCAtIGhlaWdodCAqIDAuMDJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xpbmUnLFxyXG4gICAgICAgICAgICB4OiB3aWR0aCAqIDAuNSArIHdpZHRoICogMC41ICogMC40ICsgd2lkdGggKiAwLjAyLFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgKiAwLjUgKyBoZWlnaHQgKiAwLjUgKiAwLjQgLSBoZWlnaHQgKiAwLjAyXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdsaW5lJyxcclxuICAgICAgICAgICAgeDogd2lkdGggKiAwLjUgKyB3aWR0aCAqIDAuNSAqIDAuNCAtIHdpZHRoICogMC4wMixcclxuICAgICAgICAgICAgeTogaGVpZ2h0ICogMC41ICsgaGVpZ2h0ICogMC41ICogMC40ICsgaGVpZ2h0ICogMC4wMlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnbGluZScsXHJcbiAgICAgICAgICAgIHg6IHdpZHRoICogMC41IC0gd2lkdGggKiAwLjUgKiAwLjQgLSB3aWR0aCAqIDAuMDIsXHJcbiAgICAgICAgICAgIHk6IGhlaWdodCAqIDAuNSAtIGhlaWdodCAqIDAuNSAqIDAuNCArIGhlaWdodCAqIDAuMDJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2Nsb3NlJyB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbGluZVN0eWxlOiB7IGxpbmVTdHlsZTogJ3NvbGlkJyB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbW92ZScsIHg6IDAsIHk6IGhlaWdodCAqIDAuNSB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdsaW5lJywgeDogd2lkdGggKiAwLjUsIHk6IDAgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IHdpZHRoLCB5OiBoZWlnaHQgKiAwLjUgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IHdpZHRoICogMC41LCB5OiBoZWlnaHQgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IDAsIHk6IGhlaWdodCAqIDAuNSB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdjbG9zZScgfVxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgLi4uKHRoaXMuc3R5bGUuY29udGVudCB8fCBkZWZhdWx0Q29udGVudCksXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsU3R5bGU6IHsgdHlwZTogJ25vbmUnIH0sXHJcbiAgICAgICAgbGluZVN0eWxlOiB7IGxpbmVXaWR0aDogMCB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbW92ZScsIHg6IDAsIHk6IGhlaWdodCAqIDAuNSB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdsaW5lJywgeDogd2lkdGggKiAwLjUsIHk6IDAgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IHdpZHRoLCB5OiBoZWlnaHQgKiAwLjUgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IHdpZHRoICogMC41LCB5OiBoZWlnaHQgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IDAsIHk6IGhlaWdodCAqIDAuNSB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdjbG9zZScgfVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W5paH5pys6IyD5Zu0XHJcbiAgICovXHJcbiAgZ2V0VGV4dEJsb2NrKCkge1xyXG4gICAgY29uc3QgeyBoZWlnaHQsIHdpZHRoIH0gPSB0aGlzLnBsYW5lLmJvdW5kc1xyXG4gICAgcmV0dXJuIHsgeDogd2lkdGggLyAyIC0gNjAsIHk6IGhlaWdodCwgd2lkdGg6IDEyMCwgaGVpZ2h0OiAzMCB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBFeGNsdXNpdmVHYXRld2F5XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZHJhdy9zaGFwZS9FeGNsdXNpdmVHYXRld2F5LmpzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF0QkE7QUF1QkE7QUFDQTs7Ozs7OztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUF4QkE7QUFpQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFwQkE7QUE2QkE7QUFFQTtBQUNBO0FBRkE7QUFhQTtBQUNBO0FBQ0E7QUFIQTtBQWFBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7Ozs7QUE5SEE7QUFDQTtBQWdJQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///21\n"); + +/***/ }), +/* 22 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Shape__ = __webpack_require__(4);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\nvar InclusiveGateway = function (_Shape) {\n _inherits(InclusiveGateway, _Shape);\n\n function InclusiveGateway(element) {\n var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, InclusiveGateway);\n\n //\n var _this = _possibleConstructorReturn(this, (InclusiveGateway.__proto__ || Object.getPrototypeOf(InclusiveGateway)).call(this));\n\n _this.style = style;\n //\n if (element.plane && element.plane.bounds) {\n element.plane.bounds.width = element.plane.bounds.width || 50;\n element.plane.bounds.height = element.plane.bounds.height || 50;\n }\n //\n if (!element.data.name) {\n element.data.name = '';\n }\n // bpmn数据\n _this.data = element.data;\n //\n _this.plane = element.plane;\n\n _this.bpmnName = 'InclusiveGateway';\n\n _this.groupName = 'Gateway';\n\n _this.actions = _this.getPath();\n return _this;\n }\n /**\r\n * 获取绘图路径\r\n */\n\n\n _createClass(InclusiveGateway, [{\n key: 'getPath',\n value: function getPath() {\n var _plane$bounds = this.plane.bounds,\n height = _plane$bounds.height,\n width = _plane$bounds.width;\n\n var defaultContent = [{\n lineStyle: { lineStyle: 'solid', lineColor: '0, 0, 0' },\n actions: [{ action: 'move', x: width * 0.5 - width * 0.25, y: height * 0.5 }, {\n action: 'curve',\n x1: width * 0.5 - width * 0.25,\n y1: height * 0.5 - height * 2 / 3 * 0.5,\n x2: width * 0.5 + width * 0.25,\n y2: height * 0.5 - height * 2 / 3 * 0.5,\n x: width * 0.5 + width * 0.25,\n y: height * 0.5\n }, {\n action: 'curve',\n x1: width * 0.5 + width * 0.25,\n y1: height * 0.5 + height * 2 / 3 * 0.5,\n x2: width * 0.5 - width * 0.25,\n y2: height * 0.5 + height * 2 / 3 * 0.5,\n x: width * 0.5 - width * 0.25,\n y: height * 0.5\n }, { action: 'close' }]\n }];\n return [{\n lineStyle: { lineStyle: 'solid' },\n actions: [{ action: 'move', x: 0, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: 0 }, { action: 'line', x: width, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: height }, { action: 'line', x: 0, y: height * 0.5 }, { action: 'close' }]\n }].concat(_toConsumableArray(this.style.content || defaultContent), [{\n fillStyle: { type: 'none' },\n lineStyle: { lineWidth: 0 },\n actions: [{ action: 'move', x: 0, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: 0 }, { action: 'line', x: width, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: height }, { action: 'line', x: 0, y: height * 0.5 }, { action: 'close' }]\n }]);\n }\n\n /**\r\n * 获取文本范围\r\n */\n\n }, {\n key: 'getTextBlock',\n value: function getTextBlock() {\n var _plane$bounds2 = this.plane.bounds,\n height = _plane$bounds2.height,\n width = _plane$bounds2.width;\n\n return { x: width / 2 - 60, y: height, width: 120, height: 30 };\n }\n }]);\n\n return InclusiveGateway;\n}(__WEBPACK_IMPORTED_MODULE_0__Shape__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (InclusiveGateway);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjIuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvc2hhcGUvSW5jbHVzaXZlR2F0ZXdheS5qcz83NDlmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTaGFwZSBmcm9tICcuL1NoYXBlJ1xyXG5cclxuY2xhc3MgSW5jbHVzaXZlR2F0ZXdheSBleHRlbmRzIFNoYXBlIHtcclxuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBzdHlsZSA9IHt9KSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICAvL1xyXG4gICAgdGhpcy5zdHlsZSA9IHN0eWxlXHJcbiAgICAvL1xyXG4gICAgaWYgKGVsZW1lbnQucGxhbmUgJiYgZWxlbWVudC5wbGFuZS5ib3VuZHMpIHtcclxuICAgICAgZWxlbWVudC5wbGFuZS5ib3VuZHMud2lkdGggPSBlbGVtZW50LnBsYW5lLmJvdW5kcy53aWR0aCB8fCA1MFxyXG4gICAgICBlbGVtZW50LnBsYW5lLmJvdW5kcy5oZWlnaHQgPSBlbGVtZW50LnBsYW5lLmJvdW5kcy5oZWlnaHQgfHwgNTBcclxuICAgIH1cclxuICAgIC8vXHJcbiAgICBpZiAoIWVsZW1lbnQuZGF0YS5uYW1lKSB7XHJcbiAgICAgIGVsZW1lbnQuZGF0YS5uYW1lID0gJydcclxuICAgIH1cclxuICAgIC8vIGJwbW7mlbDmja5cclxuICAgIHRoaXMuZGF0YSA9IGVsZW1lbnQuZGF0YVxyXG4gICAgLy9cclxuICAgIHRoaXMucGxhbmUgPSBlbGVtZW50LnBsYW5lXHJcblxyXG4gICAgdGhpcy5icG1uTmFtZSA9ICdJbmNsdXNpdmVHYXRld2F5J1xyXG5cclxuICAgIHRoaXMuZ3JvdXBOYW1lID0gJ0dhdGV3YXknXHJcblxyXG4gICAgdGhpcy5hY3Rpb25zID0gdGhpcy5nZXRQYXRoKClcclxuICB9XHJcbiAgLyoqXHJcbiAgICog6I635Y+W57uY5Zu+6Lev5b6EXHJcbiAgICovXHJcbiAgZ2V0UGF0aCgpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0LCB3aWR0aCB9ID0gdGhpcy5wbGFuZS5ib3VuZHNcclxuICAgIGNvbnN0IGRlZmF1bHRDb250ZW50ID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbGluZVN0eWxlOiB7IGxpbmVTdHlsZTogJ3NvbGlkJywgbGluZUNvbG9yOiAnMCwgMCwgMCcgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ21vdmUnLCB4OiB3aWR0aCAqIDAuNSAtIHdpZHRoICogMC4yNSwgeTogaGVpZ2h0ICogMC41IH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2N1cnZlJyxcclxuICAgICAgICAgICAgeDE6IHdpZHRoICogMC41IC0gd2lkdGggKiAwLjI1LFxyXG4gICAgICAgICAgICB5MTogaGVpZ2h0ICogMC41IC0gKChoZWlnaHQgKiAyKSAvIDMpICogMC41LFxyXG4gICAgICAgICAgICB4Mjogd2lkdGggKiAwLjUgKyB3aWR0aCAqIDAuMjUsXHJcbiAgICAgICAgICAgIHkyOiBoZWlnaHQgKiAwLjUgLSAoKGhlaWdodCAqIDIpIC8gMykgKiAwLjUsXHJcbiAgICAgICAgICAgIHg6IHdpZHRoICogMC41ICsgd2lkdGggKiAwLjI1LFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgKiAwLjVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2N1cnZlJyxcclxuICAgICAgICAgICAgeDE6IHdpZHRoICogMC41ICsgd2lkdGggKiAwLjI1LFxyXG4gICAgICAgICAgICB5MTogaGVpZ2h0ICogMC41ICsgKChoZWlnaHQgKiAyKSAvIDMpICogMC41LFxyXG4gICAgICAgICAgICB4Mjogd2lkdGggKiAwLjUgLSB3aWR0aCAqIDAuMjUsXHJcbiAgICAgICAgICAgIHkyOiBoZWlnaHQgKiAwLjUgKyAoKGhlaWdodCAqIDIpIC8gMykgKiAwLjUsXHJcbiAgICAgICAgICAgIHg6IHdpZHRoICogMC41IC0gd2lkdGggKiAwLjI1LFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgKiAwLjVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2Nsb3NlJyB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7XHJcbiAgICAgICAgbGluZVN0eWxlOiB7IGxpbmVTdHlsZTogJ3NvbGlkJyB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbW92ZScsIHg6IDAsIHk6IGhlaWdodCAqIDAuNSB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdsaW5lJywgeDogd2lkdGggKiAwLjUsIHk6IDAgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IHdpZHRoLCB5OiBoZWlnaHQgKiAwLjUgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IHdpZHRoICogMC41LCB5OiBoZWlnaHQgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IDAsIHk6IGhlaWdodCAqIDAuNSB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdjbG9zZScgfVxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAgLi4uKHRoaXMuc3R5bGUuY29udGVudCB8fCBkZWZhdWx0Q29udGVudCksXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsU3R5bGU6IHsgdHlwZTogJ25vbmUnIH0sXHJcbiAgICAgICAgbGluZVN0eWxlOiB7IGxpbmVXaWR0aDogMCB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbW92ZScsIHg6IDAsIHk6IGhlaWdodCAqIDAuNSB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdsaW5lJywgeDogd2lkdGggKiAwLjUsIHk6IDAgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IHdpZHRoLCB5OiBoZWlnaHQgKiAwLjUgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IHdpZHRoICogMC41LCB5OiBoZWlnaHQgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IDAsIHk6IGhlaWdodCAqIDAuNSB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdjbG9zZScgfVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W5paH5pys6IyD5Zu0XHJcbiAgICovXHJcbiAgZ2V0VGV4dEJsb2NrKCkge1xyXG4gICAgY29uc3QgeyBoZWlnaHQsIHdpZHRoIH0gPSB0aGlzLnBsYW5lLmJvdW5kc1xyXG4gICAgcmV0dXJuIHsgeDogd2lkdGggLyAyIC0gNjAsIHk6IGhlaWdodCwgd2lkdGg6IDEyMCwgaGVpZ2h0OiAzMCB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBJbmNsdXNpdmVHYXRld2F5XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZHJhdy9zaGFwZS9JbmNsdXNpdmVHYXRld2F5LmpzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF0QkE7QUF1QkE7QUFDQTs7Ozs7OztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVBBO0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQWJBO0FBMEJBO0FBRUE7QUFDQTtBQUZBO0FBYUE7QUFDQTtBQUNBO0FBSEE7QUFhQTtBQUNBO0FBQ0E7Ozs7OztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBM0ZBO0FBQ0E7QUE2RkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///22\n"); + +/***/ }), +/* 23 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Shape__ = __webpack_require__(4);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\nvar ParallelGateway = function (_Shape) {\n _inherits(ParallelGateway, _Shape);\n\n function ParallelGateway(element) {\n var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, ParallelGateway);\n\n //\n var _this = _possibleConstructorReturn(this, (ParallelGateway.__proto__ || Object.getPrototypeOf(ParallelGateway)).call(this));\n\n _this.style = style;\n //\n if (element.plane && element.plane.bounds) {\n element.plane.bounds.width = element.plane.bounds.width || 50;\n element.plane.bounds.height = element.plane.bounds.height || 50;\n }\n //\n if (!element.data.name) {\n element.data.name = '';\n }\n // bpmn数据\n _this.data = element.data;\n //\n _this.plane = element.plane;\n\n _this.bpmnName = 'ParallelGateway';\n\n _this.groupName = 'Gateway';\n\n _this.actions = _this.getPath();\n return _this;\n }\n /**\r\n * 获取绘图路径\r\n */\n\n\n _createClass(ParallelGateway, [{\n key: 'getPath',\n value: function getPath() {\n var _plane$bounds = this.plane.bounds,\n height = _plane$bounds.height,\n width = _plane$bounds.width;\n\n var defaultContent = [{\n fillStyle: { type: 'solid', color: '0, 0, 0' },\n lineStyle: { lineWidth: 0, lineStyle: 'solid' },\n actions: [{\n action: 'move',\n x: width * 0.5 - Math.min(width, height) * 0.04,\n y: height * 0.5 - height * 0.5 * 0.5\n }, {\n action: 'line',\n x: width * 0.5 - Math.min(width, height) * 0.04,\n y: height * 0.5 + height * 0.5 * 0.5\n }, {\n action: 'line',\n x: width * 0.5 + Math.min(width, height) * 0.04,\n y: height * 0.5 + height * 0.5 * 0.5\n }, {\n action: 'line',\n x: width * 0.5 + Math.min(width, height) * 0.04,\n y: height * 0.5 - height * 0.5 * 0.5\n }, {\n action: 'line',\n x: width * 0.5 - Math.min(width, height) * 0.04,\n y: height * 0.5 - height * 0.5 * 0.5\n }, { action: 'close' }, {\n action: 'move',\n x: width * 0.5 - width * 0.5 * 0.5,\n y: height * 0.5 - Math.min(width, height) * 0.04\n }, {\n action: 'line',\n x: width * 0.5 - width * 0.5 * 0.5,\n y: height * 0.5 + Math.min(width, height) * 0.04\n }, {\n action: 'line',\n x: width * 0.5 + width * 0.5 * 0.5,\n y: height * 0.5 + Math.min(width, height) * 0.04\n }, {\n action: 'line',\n x: width * 0.5 + width * 0.5 * 0.5,\n y: height * 0.5 - Math.min(width, height) * 0.04\n }, {\n action: 'line',\n x: width * 0.5 - width * 0.5 * 0.5,\n y: height * 0.5 - Math.min(width, height) * 0.04\n }, { action: 'close' }]\n }];\n\n return [{\n lineStyle: { lineStyle: 'solid' },\n actions: [{ action: 'move', x: 0, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: 0 }, { action: 'line', x: width, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: height }, { action: 'line', x: 0, y: height * 0.5 }, { action: 'close' }]\n }].concat(_toConsumableArray(this.style.content || defaultContent), [{\n fillStyle: { type: 'none' },\n lineStyle: { lineWidth: 0 },\n actions: [{ action: 'move', x: 0, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: 0 }, { action: 'line', x: width, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: height }, { action: 'line', x: 0, y: height * 0.5 }, { action: 'close' }]\n }]);\n }\n\n /**\r\n * 获取文本范围\r\n */\n\n }, {\n key: 'getTextBlock',\n value: function getTextBlock() {\n var _plane$bounds2 = this.plane.bounds,\n height = _plane$bounds2.height,\n width = _plane$bounds2.width;\n\n return { x: width / 2 - 60, y: height, width: 120, height: 30 };\n }\n }]);\n\n return ParallelGateway;\n}(__WEBPACK_IMPORTED_MODULE_0__Shape__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ParallelGateway);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvc2hhcGUvUGFyYWxsZWxHYXRld2F5LmpzPzQ4NzAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNoYXBlIGZyb20gJy4vU2hhcGUnXHJcblxyXG5jbGFzcyBQYXJhbGxlbEdhdGV3YXkgZXh0ZW5kcyBTaGFwZSB7XHJcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgc3R5bGUgPSB7fSkge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgLy9cclxuICAgIHRoaXMuc3R5bGUgPSBzdHlsZVxyXG4gICAgLy9cclxuICAgIGlmIChlbGVtZW50LnBsYW5lICYmIGVsZW1lbnQucGxhbmUuYm91bmRzKSB7XHJcbiAgICAgIGVsZW1lbnQucGxhbmUuYm91bmRzLndpZHRoID0gZWxlbWVudC5wbGFuZS5ib3VuZHMud2lkdGggfHwgNTBcclxuICAgICAgZWxlbWVudC5wbGFuZS5ib3VuZHMuaGVpZ2h0ID0gZWxlbWVudC5wbGFuZS5ib3VuZHMuaGVpZ2h0IHx8IDUwXHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgaWYgKCFlbGVtZW50LmRhdGEubmFtZSkge1xyXG4gICAgICBlbGVtZW50LmRhdGEubmFtZSA9ICcnXHJcbiAgICB9XHJcbiAgICAvLyBicG1u5pWw5o2uXHJcbiAgICB0aGlzLmRhdGEgPSBlbGVtZW50LmRhdGFcclxuICAgIC8vXHJcbiAgICB0aGlzLnBsYW5lID0gZWxlbWVudC5wbGFuZVxyXG5cclxuICAgIHRoaXMuYnBtbk5hbWUgPSAnUGFyYWxsZWxHYXRld2F5J1xyXG5cclxuICAgIHRoaXMuZ3JvdXBOYW1lID0gJ0dhdGV3YXknXHJcblxyXG4gICAgdGhpcy5hY3Rpb25zID0gdGhpcy5nZXRQYXRoKClcclxuICB9XHJcbiAgLyoqXHJcbiAgICog6I635Y+W57uY5Zu+6Lev5b6EXHJcbiAgICovXHJcbiAgZ2V0UGF0aCgpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0LCB3aWR0aCB9ID0gdGhpcy5wbGFuZS5ib3VuZHNcclxuICAgIGNvbnN0IGRlZmF1bHRDb250ZW50ID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbFN0eWxlOiB7IHR5cGU6ICdzb2xpZCcsIGNvbG9yOiAnMCwgMCwgMCcgfSxcclxuICAgICAgICBsaW5lU3R5bGU6IHsgbGluZVdpZHRoOiAwLCBsaW5lU3R5bGU6ICdzb2xpZCcgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ21vdmUnLFxyXG4gICAgICAgICAgICB4OiB3aWR0aCAqIDAuNSAtIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC4wNCxcclxuICAgICAgICAgICAgeTogaGVpZ2h0ICogMC41IC0gaGVpZ2h0ICogMC41ICogMC41XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdsaW5lJyxcclxuICAgICAgICAgICAgeDogd2lkdGggKiAwLjUgLSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDQsXHJcbiAgICAgICAgICAgIHk6IGhlaWdodCAqIDAuNSArIGhlaWdodCAqIDAuNSAqIDAuNVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnbGluZScsXHJcbiAgICAgICAgICAgIHg6IHdpZHRoICogMC41ICsgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjA0LFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgKiAwLjUgKyBoZWlnaHQgKiAwLjUgKiAwLjVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xpbmUnLFxyXG4gICAgICAgICAgICB4OiB3aWR0aCAqIDAuNSArIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC4wNCxcclxuICAgICAgICAgICAgeTogaGVpZ2h0ICogMC41IC0gaGVpZ2h0ICogMC41ICogMC41XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdsaW5lJyxcclxuICAgICAgICAgICAgeDogd2lkdGggKiAwLjUgLSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDQsXHJcbiAgICAgICAgICAgIHk6IGhlaWdodCAqIDAuNSAtIGhlaWdodCAqIDAuNSAqIDAuNVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ21vdmUnLFxyXG4gICAgICAgICAgICB4OiB3aWR0aCAqIDAuNSAtIHdpZHRoICogMC41ICogMC41LFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgKiAwLjUgLSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDRcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xpbmUnLFxyXG4gICAgICAgICAgICB4OiB3aWR0aCAqIDAuNSAtIHdpZHRoICogMC41ICogMC41LFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgKiAwLjUgKyBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDRcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xpbmUnLFxyXG4gICAgICAgICAgICB4OiB3aWR0aCAqIDAuNSArIHdpZHRoICogMC41ICogMC41LFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgKiAwLjUgKyBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDRcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xpbmUnLFxyXG4gICAgICAgICAgICB4OiB3aWR0aCAqIDAuNSArIHdpZHRoICogMC41ICogMC41LFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgKiAwLjUgLSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDRcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xpbmUnLFxyXG4gICAgICAgICAgICB4OiB3aWR0aCAqIDAuNSAtIHdpZHRoICogMC41ICogMC41LFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgKiAwLjUgLSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDRcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2Nsb3NlJyB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcblxyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIGxpbmVTdHlsZTogeyBsaW5lU3R5bGU6ICdzb2xpZCcgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ21vdmUnLCB4OiAwLCB5OiBoZWlnaHQgKiAwLjUgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IHdpZHRoICogMC41LCB5OiAwIH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiB3aWR0aCwgeTogaGVpZ2h0ICogMC41IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiB3aWR0aCAqIDAuNSwgeTogaGVpZ2h0IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiAwLCB5OiBoZWlnaHQgKiAwLjUgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLih0aGlzLnN0eWxlLmNvbnRlbnQgfHwgZGVmYXVsdENvbnRlbnQpLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbFN0eWxlOiB7IHR5cGU6ICdub25lJyB9LFxyXG4gICAgICAgIGxpbmVTdHlsZTogeyBsaW5lV2lkdGg6IDAgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ21vdmUnLCB4OiAwLCB5OiBoZWlnaHQgKiAwLjUgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IHdpZHRoICogMC41LCB5OiAwIH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiB3aWR0aCwgeTogaGVpZ2h0ICogMC41IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiB3aWR0aCAqIDAuNSwgeTogaGVpZ2h0IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiAwLCB5OiBoZWlnaHQgKiAwLjUgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiOt+WPluaWh+acrOiMg+WbtFxyXG4gICAqL1xyXG4gIGdldFRleHRCbG9jaygpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0LCB3aWR0aCB9ID0gdGhpcy5wbGFuZS5ib3VuZHNcclxuICAgIHJldHVybiB7IHg6IHdpZHRoIC8gMiAtIDYwLCB5OiBoZWlnaHQsIHdpZHRoOiAxMjAsIGhlaWdodDogMzAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGFyYWxsZWxHYXRld2F5XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZHJhdy9zaGFwZS9QYXJhbGxlbEdhdGV3YXkuanMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBOzs7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQXRCQTtBQXVCQTtBQUNBOzs7Ozs7O0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU9BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFsREE7QUFDQTtBQTJEQTtBQUVBO0FBQ0E7QUFGQTtBQWFBO0FBQ0E7QUFDQTtBQUhBO0FBYUE7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7OztBQTdIQTtBQUNBO0FBK0hBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///23\n"); + +/***/ }), +/* 24 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Shape__ = __webpack_require__(4);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\nvar ComplexGateway = function (_Shape) {\n _inherits(ComplexGateway, _Shape);\n\n function ComplexGateway(element) {\n var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, ComplexGateway);\n\n //\n var _this = _possibleConstructorReturn(this, (ComplexGateway.__proto__ || Object.getPrototypeOf(ComplexGateway)).call(this));\n\n _this.style = style;\n //\n if (element.plane && element.plane.bounds) {\n element.plane.bounds.width = element.plane.bounds.width || 50;\n element.plane.bounds.height = element.plane.bounds.height || 50;\n }\n //\n if (!element.data.name) {\n element.data.name = '';\n }\n // bpmn数据\n _this.data = element.data;\n //\n _this.plane = element.plane;\n\n _this.bpmnName = 'ComplexGateway';\n\n _this.groupName = 'Gateway';\n\n _this.actions = _this.getPath();\n return _this;\n }\n /**\r\n * 获取绘图路径\r\n */\n\n\n _createClass(ComplexGateway, [{\n key: 'getPath',\n value: function getPath() {\n var _plane$bounds = this.plane.bounds,\n height = _plane$bounds.height,\n width = _plane$bounds.width;\n\n var defaultContent = [{\n fillStyle: { type: 'solid', color: '0, 0, 0' },\n lineStyle: { lineWidth: 0, lineStyle: 'solid' },\n actions: [{\n action: 'move',\n x: width * 0.5 - Math.min(width, height) * 0.5 * 0.3 + Math.min(width, height) * 0.02,\n y: height * 0.5 - Math.min(width, height) * 0.5 * 0.3 - Math.min(width, height) * 0.02\n }, {\n action: 'line',\n x: width * 0.5 + Math.min(width, height) * 0.5 * 0.3 + Math.min(width, height) * 0.02,\n y: height * 0.5 + Math.min(width, height) * 0.5 * 0.3 - Math.min(width, height) * 0.03\n }, {\n action: 'line',\n x: width * 0.5 + Math.min(width, height) * 0.5 * 0.3 - Math.min(width, height) * 0.02,\n y: height * 0.5 + Math.min(width, height) * 0.5 * 0.3 + Math.min(width, height) * 0.02\n }, {\n action: 'line',\n x: width * 0.5 - Math.min(width, height) * 0.5 * 0.3 - Math.min(width, height) * 0.02,\n y: height * 0.5 - Math.min(width, height) * 0.5 * 0.3 + Math.min(width, height) * 0.02\n }, { action: 'close' }]\n }, {\n fillStyle: { type: 'solid', color: '0, 0, 0' },\n lineStyle: { lineWidth: 0, lineStyle: 'solid' },\n actions: [{\n action: 'move',\n x: width * 0.5 + Math.min(width, height) * 0.5 * 0.3 - Math.min(width, height) * 0.02,\n y: height * 0.5 - Math.min(width, height) * 0.5 * 0.3 - Math.min(width, height) * 0.02\n }, {\n action: 'line',\n x: width * 0.5 - Math.min(width, height) * 0.5 * 0.3 - Math.min(width, height) * 0.02,\n y: height * 0.5 + Math.min(width, height) * 0.5 * 0.3 - Math.min(width, height) * 0.02\n }, {\n action: 'line',\n x: width * 0.5 - Math.min(width, height) * 0.5 * 0.3 + Math.min(width, height) * 0.02,\n y: height * 0.5 + Math.min(width, height) * 0.5 * 0.3 + Math.min(width, height) * 0.02\n }, {\n action: 'line',\n x: width * 0.5 + Math.min(width, height) * 0.5 * 0.3 + Math.min(width, height) * 0.02,\n y: height * 0.5 - Math.min(width, height) * 0.5 * 0.3 + Math.min(width, height) * 0.02\n }, {\n action: 'line',\n x: width * 0.5 + Math.min(width, height) * 0.5 * 0.3 - Math.min(width, height) * 0.02,\n y: height * 0.5 - Math.min(width, height) * 0.5 * 0.3 - Math.min(width, height) * 0.02\n }, { action: 'close' }]\n }, {\n fillStyle: { type: 'solid', color: '0, 0, 0' },\n lineStyle: { lineWidth: 0, lineStyle: 'solid' },\n actions: [{\n action: 'move',\n x: width * 0.5 - Math.min(width, height) * 0.027,\n y: height * 0.5 - Math.min(width, height) * 0.5 * 0.4\n }, {\n action: 'line',\n x: width * 0.5 - Math.min(width, height) * 0.027,\n y: height * 0.5 + Math.min(width, height) * 0.5 * 0.4\n }, {\n action: 'line',\n x: width * 0.5 + Math.min(width, height) * 0.027,\n y: height * 0.5 + Math.min(width, height) * 0.5 * 0.4\n }, {\n action: 'line',\n x: width * 0.5 + Math.min(width, height) * 0.027,\n y: height * 0.5 - Math.min(width, height) * 0.5 * 0.4\n }, {\n action: 'line',\n x: width * 0.5 - Math.min(width, height) * 0.027,\n y: height * 0.5 - Math.min(width, height) * 0.5 * 0.4\n }, { action: 'close' }]\n }, {\n fillStyle: { type: 'solid', color: '0, 0, 0' },\n lineStyle: { lineWidth: 0, lineStyle: 'solid' },\n actions: [{\n action: 'move',\n x: width * 0.5 - Math.min(width, height) * 0.5 * 0.4,\n y: height * 0.5 - Math.min(width, height) * 0.027\n }, {\n action: 'line',\n x: width * 0.5 - Math.min(width, height) * 0.5 * 0.4,\n y: height * 0.5 + Math.min(width, height) * 0.027\n }, {\n action: 'line',\n x: width * 0.5 + Math.min(width, height) * 0.5 * 0.4,\n y: height * 0.5 + Math.min(width, height) * 0.027\n }, {\n action: 'line',\n x: width * 0.5 + Math.min(width, height) * 0.5 * 0.4,\n y: height * 0.5 - Math.min(width, height) * 0.027\n }, {\n action: 'line',\n x: width * 0.5 - Math.min(width, height) * 0.5 * 0.4,\n y: height * 0.5 - Math.min(width, height) * 0.027\n }, { action: 'close' }]\n }];\n return [{\n lineStyle: { lineStyle: 'solid' },\n actions: [{ action: 'move', x: 0, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: 0 }, { action: 'line', x: width, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: height }, { action: 'line', x: 0, y: height * 0.5 }, { action: 'close' }]\n }].concat(_toConsumableArray(this.style.content || defaultContent), [{\n fillStyle: { type: 'none' },\n lineStyle: { lineWidth: 0 },\n actions: [{ action: 'move', x: 0, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: 0 }, { action: 'line', x: width, y: height * 0.5 }, { action: 'line', x: width * 0.5, y: height }, { action: 'line', x: 0, y: height * 0.5 }, { action: 'close' }]\n }]);\n }\n\n /**\r\n * 获取文本范围\r\n */\n\n }, {\n key: 'getTextBlock',\n value: function getTextBlock() {\n var _plane$bounds2 = this.plane.bounds,\n height = _plane$bounds2.height,\n width = _plane$bounds2.width;\n\n return { x: width / 2 - 60, y: height, width: 120, height: 30 };\n }\n }]);\n\n return ComplexGateway;\n}(__WEBPACK_IMPORTED_MODULE_0__Shape__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ComplexGateway);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjQuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvc2hhcGUvQ29tcGxleEdhdGV3YXkuanM/YWZkZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2hhcGUgZnJvbSAnLi9TaGFwZSdcclxuXHJcbmNsYXNzIENvbXBsZXhHYXRld2F5IGV4dGVuZHMgU2hhcGUge1xyXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIHN0eWxlID0ge30pIHtcclxuICAgIHN1cGVyKClcclxuICAgIC8vXHJcbiAgICB0aGlzLnN0eWxlID0gc3R5bGVcclxuICAgIC8vXHJcbiAgICBpZiAoZWxlbWVudC5wbGFuZSAmJiBlbGVtZW50LnBsYW5lLmJvdW5kcykge1xyXG4gICAgICBlbGVtZW50LnBsYW5lLmJvdW5kcy53aWR0aCA9IGVsZW1lbnQucGxhbmUuYm91bmRzLndpZHRoIHx8IDUwXHJcbiAgICAgIGVsZW1lbnQucGxhbmUuYm91bmRzLmhlaWdodCA9IGVsZW1lbnQucGxhbmUuYm91bmRzLmhlaWdodCB8fCA1MFxyXG4gICAgfVxyXG4gICAgLy9cclxuICAgIGlmICghZWxlbWVudC5kYXRhLm5hbWUpIHtcclxuICAgICAgZWxlbWVudC5kYXRhLm5hbWUgPSAnJ1xyXG4gICAgfVxyXG4gICAgLy8gYnBtbuaVsOaNrlxyXG4gICAgdGhpcy5kYXRhID0gZWxlbWVudC5kYXRhXHJcbiAgICAvL1xyXG4gICAgdGhpcy5wbGFuZSA9IGVsZW1lbnQucGxhbmVcclxuXHJcbiAgICB0aGlzLmJwbW5OYW1lID0gJ0NvbXBsZXhHYXRld2F5J1xyXG5cclxuICAgIHRoaXMuZ3JvdXBOYW1lID0gJ0dhdGV3YXknXHJcblxyXG4gICAgdGhpcy5hY3Rpb25zID0gdGhpcy5nZXRQYXRoKClcclxuICB9XHJcbiAgLyoqXHJcbiAgICog6I635Y+W57uY5Zu+6Lev5b6EXHJcbiAgICovXHJcbiAgZ2V0UGF0aCgpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0LCB3aWR0aCB9ID0gdGhpcy5wbGFuZS5ib3VuZHNcclxuICAgIGNvbnN0IGRlZmF1bHRDb250ZW50ID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbFN0eWxlOiB7IHR5cGU6ICdzb2xpZCcsIGNvbG9yOiAnMCwgMCwgMCcgfSxcclxuICAgICAgICBsaW5lU3R5bGU6IHsgbGluZVdpZHRoOiAwLCBsaW5lU3R5bGU6ICdzb2xpZCcgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ21vdmUnLFxyXG4gICAgICAgICAgICB4OlxyXG4gICAgICAgICAgICAgIHdpZHRoICogMC41IC1cclxuICAgICAgICAgICAgICBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuNSAqIDAuMyArXHJcbiAgICAgICAgICAgICAgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjAyLFxyXG4gICAgICAgICAgICB5OlxyXG4gICAgICAgICAgICAgIGhlaWdodCAqIDAuNSAtXHJcbiAgICAgICAgICAgICAgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjUgKiAwLjMgLVxyXG4gICAgICAgICAgICAgIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC4wMlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnbGluZScsXHJcbiAgICAgICAgICAgIHg6XHJcbiAgICAgICAgICAgICAgd2lkdGggKiAwLjUgK1xyXG4gICAgICAgICAgICAgIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC41ICogMC4zICtcclxuICAgICAgICAgICAgICBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDIsXHJcbiAgICAgICAgICAgIHk6XHJcbiAgICAgICAgICAgICAgaGVpZ2h0ICogMC41ICtcclxuICAgICAgICAgICAgICBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuNSAqIDAuMyAtXHJcbiAgICAgICAgICAgICAgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjAzXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdsaW5lJyxcclxuICAgICAgICAgICAgeDpcclxuICAgICAgICAgICAgICB3aWR0aCAqIDAuNSArXHJcbiAgICAgICAgICAgICAgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjUgKiAwLjMgLVxyXG4gICAgICAgICAgICAgIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC4wMixcclxuICAgICAgICAgICAgeTpcclxuICAgICAgICAgICAgICBoZWlnaHQgKiAwLjUgK1xyXG4gICAgICAgICAgICAgIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC41ICogMC4zICtcclxuICAgICAgICAgICAgICBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xpbmUnLFxyXG4gICAgICAgICAgICB4OlxyXG4gICAgICAgICAgICAgIHdpZHRoICogMC41IC1cclxuICAgICAgICAgICAgICBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuNSAqIDAuMyAtXHJcbiAgICAgICAgICAgICAgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjAyLFxyXG4gICAgICAgICAgICB5OlxyXG4gICAgICAgICAgICAgIGhlaWdodCAqIDAuNSAtXHJcbiAgICAgICAgICAgICAgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjUgKiAwLjMgK1xyXG4gICAgICAgICAgICAgIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC4wMlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsU3R5bGU6IHsgdHlwZTogJ3NvbGlkJywgY29sb3I6ICcwLCAwLCAwJyB9LFxyXG4gICAgICAgIGxpbmVTdHlsZTogeyBsaW5lV2lkdGg6IDAsIGxpbmVTdHlsZTogJ3NvbGlkJyB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnbW92ZScsXHJcbiAgICAgICAgICAgIHg6XHJcbiAgICAgICAgICAgICAgd2lkdGggKiAwLjUgK1xyXG4gICAgICAgICAgICAgIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC41ICogMC4zIC1cclxuICAgICAgICAgICAgICBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDIsXHJcbiAgICAgICAgICAgIHk6XHJcbiAgICAgICAgICAgICAgaGVpZ2h0ICogMC41IC1cclxuICAgICAgICAgICAgICBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuNSAqIDAuMyAtXHJcbiAgICAgICAgICAgICAgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjAyXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdsaW5lJyxcclxuICAgICAgICAgICAgeDpcclxuICAgICAgICAgICAgICB3aWR0aCAqIDAuNSAtXHJcbiAgICAgICAgICAgICAgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjUgKiAwLjMgLVxyXG4gICAgICAgICAgICAgIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC4wMixcclxuICAgICAgICAgICAgeTpcclxuICAgICAgICAgICAgICBoZWlnaHQgKiAwLjUgK1xyXG4gICAgICAgICAgICAgIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC41ICogMC4zIC1cclxuICAgICAgICAgICAgICBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xpbmUnLFxyXG4gICAgICAgICAgICB4OlxyXG4gICAgICAgICAgICAgIHdpZHRoICogMC41IC1cclxuICAgICAgICAgICAgICBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuNSAqIDAuMyArXHJcbiAgICAgICAgICAgICAgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjAyLFxyXG4gICAgICAgICAgICB5OlxyXG4gICAgICAgICAgICAgIGhlaWdodCAqIDAuNSArXHJcbiAgICAgICAgICAgICAgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjUgKiAwLjMgK1xyXG4gICAgICAgICAgICAgIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC4wMlxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnbGluZScsXHJcbiAgICAgICAgICAgIHg6XHJcbiAgICAgICAgICAgICAgd2lkdGggKiAwLjUgK1xyXG4gICAgICAgICAgICAgIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC41ICogMC4zICtcclxuICAgICAgICAgICAgICBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDIsXHJcbiAgICAgICAgICAgIHk6XHJcbiAgICAgICAgICAgICAgaGVpZ2h0ICogMC41IC1cclxuICAgICAgICAgICAgICBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuNSAqIDAuMyArXHJcbiAgICAgICAgICAgICAgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjAyXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdsaW5lJyxcclxuICAgICAgICAgICAgeDpcclxuICAgICAgICAgICAgICB3aWR0aCAqIDAuNSArXHJcbiAgICAgICAgICAgICAgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjUgKiAwLjMgLVxyXG4gICAgICAgICAgICAgIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC4wMixcclxuICAgICAgICAgICAgeTpcclxuICAgICAgICAgICAgICBoZWlnaHQgKiAwLjUgLVxyXG4gICAgICAgICAgICAgIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC41ICogMC4zIC1cclxuICAgICAgICAgICAgICBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDJcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2Nsb3NlJyB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbFN0eWxlOiB7IHR5cGU6ICdzb2xpZCcsIGNvbG9yOiAnMCwgMCwgMCcgfSxcclxuICAgICAgICBsaW5lU3R5bGU6IHsgbGluZVdpZHRoOiAwLCBsaW5lU3R5bGU6ICdzb2xpZCcgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ21vdmUnLFxyXG4gICAgICAgICAgICB4OiB3aWR0aCAqIDAuNSAtIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC4wMjcsXHJcbiAgICAgICAgICAgIHk6IGhlaWdodCAqIDAuNSAtIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC41ICogMC40XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdsaW5lJyxcclxuICAgICAgICAgICAgeDogd2lkdGggKiAwLjUgLSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDI3LFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgKiAwLjUgKyBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuNSAqIDAuNFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnbGluZScsXHJcbiAgICAgICAgICAgIHg6IHdpZHRoICogMC41ICsgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjAyNyxcclxuICAgICAgICAgICAgeTogaGVpZ2h0ICogMC41ICsgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjUgKiAwLjRcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xpbmUnLFxyXG4gICAgICAgICAgICB4OiB3aWR0aCAqIDAuNSArIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC4wMjcsXHJcbiAgICAgICAgICAgIHk6IGhlaWdodCAqIDAuNSAtIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC41ICogMC40XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdsaW5lJyxcclxuICAgICAgICAgICAgeDogd2lkdGggKiAwLjUgLSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDI3LFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgKiAwLjUgLSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuNSAqIDAuNFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsU3R5bGU6IHsgdHlwZTogJ3NvbGlkJywgY29sb3I6ICcwLCAwLCAwJyB9LFxyXG4gICAgICAgIGxpbmVTdHlsZTogeyBsaW5lV2lkdGg6IDAsIGxpbmVTdHlsZTogJ3NvbGlkJyB9LFxyXG4gICAgICAgIGFjdGlvbnM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnbW92ZScsXHJcbiAgICAgICAgICAgIHg6IHdpZHRoICogMC41IC0gTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjUgKiAwLjQsXHJcbiAgICAgICAgICAgIHk6IGhlaWdodCAqIDAuNSAtIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC4wMjdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xpbmUnLFxyXG4gICAgICAgICAgICB4OiB3aWR0aCAqIDAuNSAtIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC41ICogMC40LFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgKiAwLjUgKyBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDI3XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBhY3Rpb246ICdsaW5lJyxcclxuICAgICAgICAgICAgeDogd2lkdGggKiAwLjUgKyBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuNSAqIDAuNCxcclxuICAgICAgICAgICAgeTogaGVpZ2h0ICogMC41ICsgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjAyN1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnbGluZScsXHJcbiAgICAgICAgICAgIHg6IHdpZHRoICogMC41ICsgTWF0aC5taW4od2lkdGgsIGhlaWdodCkgKiAwLjUgKiAwLjQsXHJcbiAgICAgICAgICAgIHk6IGhlaWdodCAqIDAuNSAtIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC4wMjdcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2xpbmUnLFxyXG4gICAgICAgICAgICB4OiB3aWR0aCAqIDAuNSAtIE1hdGgubWluKHdpZHRoLCBoZWlnaHQpICogMC41ICogMC40LFxyXG4gICAgICAgICAgICB5OiBoZWlnaHQgKiAwLjUgLSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIDAuMDI3XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdjbG9zZScgfVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXVxyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIGxpbmVTdHlsZTogeyBsaW5lU3R5bGU6ICdzb2xpZCcgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ21vdmUnLCB4OiAwLCB5OiBoZWlnaHQgKiAwLjUgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IHdpZHRoICogMC41LCB5OiAwIH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiB3aWR0aCwgeTogaGVpZ2h0ICogMC41IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiB3aWR0aCAqIDAuNSwgeTogaGVpZ2h0IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiAwLCB5OiBoZWlnaHQgKiAwLjUgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLih0aGlzLnN0eWxlLmNvbnRlbnQgfHwgZGVmYXVsdENvbnRlbnQpLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbFN0eWxlOiB7IHR5cGU6ICdub25lJyB9LFxyXG4gICAgICAgIGxpbmVTdHlsZTogeyBsaW5lV2lkdGg6IDAgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ21vdmUnLCB4OiAwLCB5OiBoZWlnaHQgKiAwLjUgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnbGluZScsIHg6IHdpZHRoICogMC41LCB5OiAwIH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiB3aWR0aCwgeTogaGVpZ2h0ICogMC41IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiB3aWR0aCAqIDAuNSwgeTogaGVpZ2h0IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiAwLCB5OiBoZWlnaHQgKiAwLjUgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiOt+WPluaWh+acrOiMg+WbtFxyXG4gICAqL1xyXG4gIGdldFRleHRCbG9jaygpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0LCB3aWR0aCB9ID0gdGhpcy5wbGFuZS5ib3VuZHNcclxuICAgIHJldHVybiB7IHg6IHdpZHRoIC8gMiAtIDYwLCB5OiBoZWlnaHQsIHdpZHRoOiAxMjAsIGhlaWdodDogMzAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29tcGxleEdhdGV3YXlcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9kcmF3L3NoYXBlL0NvbXBsZXhHYXRld2F5LmpzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUF0QkE7QUF1QkE7QUFDQTs7Ozs7OztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQU5BO0FBWUE7QUFDQTtBQUlBO0FBTkE7QUFZQTtBQUNBO0FBSUE7QUFOQTtBQVlBO0FBQ0E7QUFJQTtBQU5BO0FBckNBO0FBb0RBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQU5BO0FBWUE7QUFDQTtBQUlBO0FBTkE7QUFZQTtBQUNBO0FBSUE7QUFOQTtBQVlBO0FBQ0E7QUFJQTtBQU5BO0FBWUE7QUFDQTtBQUlBO0FBTkE7QUFoREE7QUErREE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQXhCQTtBQWlDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFIQTtBQU1BO0FBQ0E7QUFDQTtBQUhBO0FBeEJBO0FBaUNBO0FBRUE7QUFDQTtBQUZBO0FBYUE7QUFDQTtBQUNBO0FBSEE7QUFhQTtBQUNBO0FBQ0E7Ozs7OztBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBblBBO0FBQ0E7QUFxUEEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///24\n"); + +/***/ }), +/* 25 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Shape__ = __webpack_require__(4);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_eventBus__ = __webpack_require__(0);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\nvar CallActivity = function (_Shape) {\n _inherits(CallActivity, _Shape);\n\n function CallActivity(element) {\n var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n _classCallCheck(this, CallActivity);\n\n //\n var _this = _possibleConstructorReturn(this, (CallActivity.__proto__ || Object.getPrototypeOf(CallActivity)).call(this));\n\n _this.style = style;\n //\n if (element.plane && element.plane.bounds) {\n element.plane.bounds.width = element.plane.bounds.width || 110;\n element.plane.bounds.height = element.plane.bounds.height || 55;\n }\n if (!element.data.name) {\n element.data.name = __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].trigger('i18n', 'bpmn.CallActivity');\n }\n // bpmn数据\n _this.data = element.data;\n //\n _this.plane = element.plane;\n\n _this.bpmnName = 'CallActivity';\n\n _this.groupName = 'CallActivity';\n\n _this.actions = _this.getPath();\n return _this;\n }\n /**\r\n * 获取绘图路径\r\n */\n\n\n _createClass(CallActivity, [{\n key: 'getPath',\n value: function getPath() {\n var _plane$bounds = this.plane.bounds,\n height = _plane$bounds.height,\n width = _plane$bounds.width;\n var lineWidth = this.lineStyle.lineWidth;\n\n var defaultContent = [];\n return [{\n lineStyle: { lineWidth: lineWidth + 2, lineStyle: 'solid' },\n actions: [{ action: 'move', x: 0, y: 4 }, { action: 'quadraticCurve', x1: 0, y1: 0, x: 4, y: 0 }, { action: 'line', x: width - 4, y: 0 }, { action: 'quadraticCurve', x1: width, y1: 0, x: width, y: 4 }, { action: 'line', x: width, y: height - 4 }, {\n action: 'quadraticCurve',\n x1: width,\n y1: height,\n x: width - 4,\n y: height\n }, { action: 'line', x: 4, y: height }, { action: 'quadraticCurve', x1: 0, y1: height, x: 0, y: height - 4 }, { action: 'close' }]\n }].concat(_toConsumableArray(this.style.content || defaultContent), [{\n fillStyle: { type: 'none' },\n lineStyle: { lineWidth: 0 },\n actions: [{ action: 'move', x: 0, y: 4 }, { action: 'quadraticCurve', x1: 0, y1: 0, x: 4, y: 0 }, { action: 'line', x: width - 4, y: 0 }, { action: 'quadraticCurve', x1: width, y1: 0, x: width, y: 4 }, { action: 'line', x: width, y: height - 4 }, {\n action: 'quadraticCurve',\n x1: width,\n y1: height,\n x: width - 4,\n y: height\n }, { action: 'line', x: 4, y: height }, { action: 'quadraticCurve', x1: 0, y1: height, x: 0, y: height - 4 }, { action: 'close' }]\n }]);\n }\n\n /**\r\n * 获取文本范围\r\n */\n\n }, {\n key: 'getTextBlock',\n value: function getTextBlock() {\n var _plane$bounds2 = this.plane.bounds,\n height = _plane$bounds2.height,\n width = _plane$bounds2.width;\n\n return { x: 10, y: 0, width: width - 20, height: height };\n }\n }]);\n\n return CallActivity;\n}(__WEBPACK_IMPORTED_MODULE_0__Shape__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (CallActivity);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvc2hhcGUvQ2FsbEFjdGl2aXR5LmpzP2Y4YmQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNoYXBlIGZyb20gJy4vU2hhcGUnXHJcbmltcG9ydCBldmVudEJ1cyBmcm9tICcuLi8uLi9jb3JlL2V2ZW50QnVzJ1xyXG5cclxuY2xhc3MgQ2FsbEFjdGl2aXR5IGV4dGVuZHMgU2hhcGUge1xyXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIHN0eWxlID0ge30pIHtcclxuICAgIHN1cGVyKClcclxuICAgIC8vXHJcbiAgICB0aGlzLnN0eWxlID0gc3R5bGVcclxuICAgIC8vXHJcbiAgICBpZiAoZWxlbWVudC5wbGFuZSAmJiBlbGVtZW50LnBsYW5lLmJvdW5kcykge1xyXG4gICAgICBlbGVtZW50LnBsYW5lLmJvdW5kcy53aWR0aCA9IGVsZW1lbnQucGxhbmUuYm91bmRzLndpZHRoIHx8IDExMFxyXG4gICAgICBlbGVtZW50LnBsYW5lLmJvdW5kcy5oZWlnaHQgPSBlbGVtZW50LnBsYW5lLmJvdW5kcy5oZWlnaHQgfHwgNTVcclxuICAgIH1cclxuICAgIGlmICghZWxlbWVudC5kYXRhLm5hbWUpIHtcclxuICAgICAgZWxlbWVudC5kYXRhLm5hbWUgPSBldmVudEJ1cy50cmlnZ2VyKCdpMThuJywgJ2JwbW4uQ2FsbEFjdGl2aXR5JylcclxuICAgIH1cclxuICAgIC8vIGJwbW7mlbDmja5cclxuICAgIHRoaXMuZGF0YSA9IGVsZW1lbnQuZGF0YVxyXG4gICAgLy9cclxuICAgIHRoaXMucGxhbmUgPSBlbGVtZW50LnBsYW5lXHJcblxyXG4gICAgdGhpcy5icG1uTmFtZSA9ICdDYWxsQWN0aXZpdHknXHJcblxyXG4gICAgdGhpcy5ncm91cE5hbWUgPSAnQ2FsbEFjdGl2aXR5J1xyXG5cclxuICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuZ2V0UGF0aCgpXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOiOt+WPlue7mOWbvui3r+W+hFxyXG4gICAqL1xyXG4gIGdldFBhdGgoKSB7XHJcbiAgICBjb25zdCB7IGhlaWdodCwgd2lkdGggfSA9IHRoaXMucGxhbmUuYm91bmRzXHJcbiAgICBjb25zdCB7IGxpbmVXaWR0aCB9ID0gdGhpcy5saW5lU3R5bGVcclxuICAgIGNvbnN0IGRlZmF1bHRDb250ZW50ID0gW11cclxuICAgIHJldHVybiBbXHJcbiAgICAgIHtcclxuICAgICAgICBsaW5lU3R5bGU6IHsgbGluZVdpZHRoOiBsaW5lV2lkdGggKyAyLCBsaW5lU3R5bGU6ICdzb2xpZCcgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ21vdmUnLCB4OiAwLCB5OiA0IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ3F1YWRyYXRpY0N1cnZlJywgeDE6IDAsIHkxOiAwLCB4OiA0LCB5OiAwIH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiB3aWR0aCAtIDQsIHk6IDAgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAncXVhZHJhdGljQ3VydmUnLCB4MTogd2lkdGgsIHkxOiAwLCB4OiB3aWR0aCwgeTogNCB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdsaW5lJywgeDogd2lkdGgsIHk6IGhlaWdodCAtIDQgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAncXVhZHJhdGljQ3VydmUnLFxyXG4gICAgICAgICAgICB4MTogd2lkdGgsXHJcbiAgICAgICAgICAgIHkxOiBoZWlnaHQsXHJcbiAgICAgICAgICAgIHg6IHdpZHRoIC0gNCxcclxuICAgICAgICAgICAgeTogaGVpZ2h0XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdsaW5lJywgeDogNCwgeTogaGVpZ2h0IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ3F1YWRyYXRpY0N1cnZlJywgeDE6IDAsIHkxOiBoZWlnaHQsIHg6IDAsIHk6IGhlaWdodCAtIDQgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIC4uLih0aGlzLnN0eWxlLmNvbnRlbnQgfHwgZGVmYXVsdENvbnRlbnQpLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbFN0eWxlOiB7IHR5cGU6ICdub25lJyB9LFxyXG4gICAgICAgIGxpbmVTdHlsZTogeyBsaW5lV2lkdGg6IDAgfSxcclxuICAgICAgICBhY3Rpb25zOiBbXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ21vdmUnLCB4OiAwLCB5OiA0IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ3F1YWRyYXRpY0N1cnZlJywgeDE6IDAsIHkxOiAwLCB4OiA0LCB5OiAwIH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ2xpbmUnLCB4OiB3aWR0aCAtIDQsIHk6IDAgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAncXVhZHJhdGljQ3VydmUnLCB4MTogd2lkdGgsIHkxOiAwLCB4OiB3aWR0aCwgeTogNCB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdsaW5lJywgeDogd2lkdGgsIHk6IGhlaWdodCAtIDQgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAncXVhZHJhdGljQ3VydmUnLFxyXG4gICAgICAgICAgICB4MTogd2lkdGgsXHJcbiAgICAgICAgICAgIHkxOiBoZWlnaHQsXHJcbiAgICAgICAgICAgIHg6IHdpZHRoIC0gNCxcclxuICAgICAgICAgICAgeTogaGVpZ2h0XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgeyBhY3Rpb246ICdsaW5lJywgeDogNCwgeTogaGVpZ2h0IH0sXHJcbiAgICAgICAgICB7IGFjdGlvbjogJ3F1YWRyYXRpY0N1cnZlJywgeDE6IDAsIHkxOiBoZWlnaHQsIHg6IDAsIHk6IGhlaWdodCAtIDQgfSxcclxuICAgICAgICAgIHsgYWN0aW9uOiAnY2xvc2UnIH1cclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiOt+WPluaWh+acrOiMg+WbtFxyXG4gICAqL1xyXG4gIGdldFRleHRCbG9jaygpIHtcclxuICAgIGNvbnN0IHsgaGVpZ2h0LCB3aWR0aCB9ID0gdGhpcy5wbGFuZS5ib3VuZHNcclxuICAgIHJldHVybiB7IHg6IDEwLCB5OiAwLCB3aWR0aDogd2lkdGggLSAyMCwgaGVpZ2h0IH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IENhbGxBY3Rpdml0eVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2RyYXcvc2hhcGUvQ2FsbEFjdGl2aXR5LmpzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBckJBO0FBc0JBO0FBQ0E7Ozs7Ozs7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVJBO0FBc0JBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQVRBO0FBc0JBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFuRkE7QUFDQTtBQXFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///25\n"); + +/***/ }), +/* 26 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__drawUtils__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__shape_SequenceFlow__ = __webpack_require__(27);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_utils__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__utils_gradient__ = __webpack_require__(7);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__utils_slimJQ__ = __webpack_require__(3);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\n\n\n\n\nvar DrawConnection = function () {\n function DrawConnection(options, $container) {\n _classCallCheck(this, DrawConnection);\n\n this.options = options;\n\n this.$container = $container;\n }\n /**\r\n * 渲染\r\n * @param {*} type\r\n * @param {*} data\r\n */\n\n\n _createClass(DrawConnection, [{\n key: 'createConnection',\n value: function createConnection(data) {\n return new __WEBPACK_IMPORTED_MODULE_2__shape_SequenceFlow__[\"a\" /* default */](data);\n }\n /**\r\n * 渲染\r\n * @param {*} type\r\n * @param {*} data\r\n */\n\n }, {\n key: 'render',\n value: function render(element, rendered) {\n if (!element.shape) {\n element.shape = this.createConnection(element);\n }\n this.renderConnection(element, rendered);\n }\n /**\r\n * 渲染连线\r\n * @param {Object} connection 连线元素\r\n * @param {*} rendered\r\n */\n\n }, {\n key: 'renderConnection',\n value: function renderConnection(element, rendered) {\n var shape = element.shape,\n data = element.data,\n plane = element.plane;\n var sourceRef = data.sourceRef,\n targetRef = data.targetRef;\n var waypoint = plane.waypoint;\n\n var sourcePoint = waypoint[0];\n var targetPoint = waypoint[waypoint.length - 1];\n var selectIds = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.getIds') || [];\n var elements = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get');\n\n if (waypoint.length > 2 && shape.points.length <= 0) {\n shape.points = waypoint.filter(function (point, index) {\n if (index === 0 || index === waypoint.length - 1) {\n return false;\n } else {\n return true;\n }\n });\n }\n\n if (rendered) {\n shape.points = __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].getConnectionPoints(shape, elements);\n }\n\n if (shape.linkerType === 'curve' || shape.linkerType === 'broken') {\n if (!shape.points || shape.points.length === 0) {\n shape.points = __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].getConnectionPoints(shape, elements);\n }\n }\n\n if (sourcePoint.angle == null) {\n sourcePoint.angle = __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].getAngle(waypoint[1], waypoint[0]);\n }\n\n if (targetPoint.angle == null) {\n targetPoint.angle = __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].getAngle(waypoint[waypoint.length - 2], waypoint[waypoint.length - 1]);\n }\n\n var x1 = targetPoint.x;\n var y1 = targetPoint.y;\n var x2 = sourcePoint.x;\n var y2 = sourcePoint.y;\n if (targetPoint.x >= sourcePoint.x) {\n x1 = sourcePoint.x;\n x2 = targetPoint.x;\n }\n if (targetPoint.y >= sourcePoint.y) {\n y1 = sourcePoint.y;\n y2 = targetPoint.y;\n }\n\n shape.points.forEach(function (point, index) {\n if (point.x < x1) {\n x1 = point.x;\n } else {\n if (point.x > x2) {\n x2 = point.x;\n }\n }\n if (point.y < y1) {\n y1 = point.y;\n } else {\n if (point.y > y2) {\n y2 = point.y;\n }\n }\n });\n\n var shapeBox = { x: x1, y: y1, width: x2 - x1, height: y2 - y1 };\n\n var $shape = this.$container.find('.shape-box[data-id=\"' + data.id + '\"]');\n\n if ($shape.length === 0) {\n $shape = Object(__WEBPACK_IMPORTED_MODULE_5__utils_slimJQ__[\"a\" /* default */])(\"
\").appendTo(this.$container.find('.bpd-designer'));\n }\n\n var $shapeCanvas = $shape.find('.shape-canvas');\n var width = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(shapeBox.width + 20);\n var height = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(shapeBox.height + 20);\n $shapeCanvas.attr({ width: width, height: height });\n $shape.css({\n left: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(shapeBox.x - 10) + 'px',\n top: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(shapeBox.y - 10) + 'px',\n width: width,\n height: height\n });\n\n var shape2D = $shapeCanvas[0].getContext('2d');\n\n var bpmnStyle = this.options.bpmnStyle[shape.bpmnName] || {};\n\n var lineStyle = Object.assign({}, shape.lineStyle, bpmnStyle.lineStyle);\n\n shape2D.scale(this.options.scale, this.options.scale);\n shape2D.translate(10, 10);\n shape2D.lineWidth = lineStyle.lineWidth;\n shape2D.strokeStyle = 'rgb(' + lineStyle.lineColor + ')';\n shape2D.fillStyle = 'rgb(' + lineStyle.lineColor + ')';\n shape2D.save();\n\n if (lineStyle.lineStyle === 'dashed') {\n __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].setLineDash(shape2D, [lineStyle.lineWidth * 8, lineStyle.lineWidth * 4]);\n } else {\n if (lineStyle.lineStyle === 'dot') {\n __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].setLineDash(shape2D, [lineStyle.lineWidth, lineStyle.lineWidth * 2]);\n } else {\n if (lineStyle.lineStyle === 'dashdot') {\n __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].setLineDash(shape2D, [lineStyle.lineWidth * 8, lineStyle.lineWidth * 3, lineStyle.lineWidth, lineStyle.lineWidth * 3]);\n }\n }\n }\n\n var startPoint = {\n x: sourcePoint.x - shapeBox.x,\n y: sourcePoint.y - shapeBox.y\n };\n var endPoint = {\n x: targetPoint.x - shapeBox.x,\n y: targetPoint.y - shapeBox.y\n };\n\n shape2D.beginPath();\n shape2D.moveTo(startPoint.x, startPoint.y);\n if (shape.linkerType === 'curve') {\n var point1 = shape.points[0];\n var point2 = shape.points[1];\n shape2D.bezierCurveTo(point1.x - shapeBox.x, point1.y - shapeBox.y, point2.x - shapeBox.x, point2.y - shapeBox.y, endPoint.x, endPoint.y);\n } else {\n shape.points.forEach(function (point, index) {\n shape2D.lineTo(point.x - shapeBox.x, point.y - shapeBox.y);\n });\n shape2D.lineTo(endPoint.x, endPoint.y);\n }\n // TODO: 判断选中\n if (selectIds.indexOf(data.id) >= 0) {\n shape2D.shadowBlur = 4;\n shape2D.shadowColor = '#ec5343';\n }\n\n shape2D.stroke();\n shape2D.restore();\n\n var startAngle = __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].getEndpointAngle(shape, 'sourceRef');\n\n this.renderArrow(startPoint, startAngle, sourceRef, lineStyle.beginArrowStyle, shape, sourcePoint.angle, shape2D);\n\n var endAngle = __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].getEndpointAngle(shape, 'targetRef');\n\n this.renderArrow(endPoint, endAngle, targetRef, lineStyle.endArrowStyle, shape, targetPoint.angle, shape2D);\n\n shape2D.restore();\n this.renderConnectionText(shape);\n }\n\n /**\r\n * 渲染箭头\r\n * @param {*} startPoint\r\n * @param {*} angle\r\n * @param {*} id\r\n * @param {*} arrowStyle\r\n * @param {*} shape\r\n * @param {*} rotate\r\n * @param {*} shape2D\r\n */\n\n }, {\n key: 'renderArrow',\n value: function renderArrow(startPoint, angle, id, arrowStyle, shape, rotate, shape2D) {\n if (arrowStyle === 'solidArrow') {\n var arrowWidth = 12;\n var pi = Math.PI / 10;\n var length = arrowWidth / Math.cos(pi);\n var point1 = {\n x: startPoint.x - length * Math.cos(angle - pi),\n y: startPoint.y - length * Math.sin(angle - pi)\n };\n var point2 = {\n x: startPoint.x - length * Math.sin(Math.PI / 2 - angle - pi),\n y: startPoint.y - length * Math.cos(Math.PI / 2 - angle - pi)\n };\n shape2D.beginPath();\n shape2D.moveTo(startPoint.x, startPoint.y);\n shape2D.lineTo(point1.x, point1.y);\n shape2D.lineTo(point2.x, point2.y);\n shape2D.lineTo(startPoint.x, startPoint.y);\n shape2D.closePath();\n shape2D.fill();\n shape2D.stroke();\n }\n\n // 适应连接图形\n if (id && arrowStyle !== 'solidCircle' && arrowStyle !== 'dashedCircle') {\n var element = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get', id);\n if (element) {\n shape2D.save();\n shape2D.translate(startPoint.x, startPoint.y);\n shape2D.rotate(rotate);\n shape2D.translate(-startPoint.x, -startPoint.y);\n var x = startPoint.x - element.shape.lineStyle.lineWidth / 2;\n var y = startPoint.y - shape.lineStyle.lineWidth * 1.2;\n var lineWidth1 = shape.lineStyle.lineWidth * 2;\n var lineWidth2 = shape.lineStyle.lineWidth * 1.8;\n var step = 1;\n var pointX = x;\n while (pointX <= x + lineWidth1) {\n var pointY = y;\n while (pointY <= y + lineWidth2) {\n shape2D.clearRect(pointX, pointY, 1.5, 1.5);\n pointY += step;\n }\n pointX += step;\n }\n shape2D.restore();\n }\n }\n }\n\n /**\r\n * 渲染连线文本\r\n */\n\n }, {\n key: 'renderConnectionText',\n value: function renderConnectionText(shape) {\n var $shape = this.$container.find('.shape-box[data-id=\"' + shape.data.id + '\"]');\n var $textBox = $shape.find('.text-box[data-shape=' + shape.data.id + ']');\n if ($textBox.length === 0) {\n $textBox = Object(__WEBPACK_IMPORTED_MODULE_5__utils_slimJQ__[\"a\" /* default */])(\"
\").appendTo($shape);\n }\n\n var fontStyle = shape.fontStyle;\n var transform = 'scale(' + this.options.scale + ')';\n var style = {\n 'line-height': Math.round(fontStyle.size * 1.25) + 'px',\n 'font-size': fontStyle.size + 'px',\n 'font-family': fontStyle.fontFamily,\n 'font-weight': fontStyle.bold ? 'bold' : 'normal',\n 'font-style': fontStyle.italic ? 'italic' : 'normal',\n 'text-align': fontStyle.textAlign,\n color: 'rgb(' + fontStyle.color + ')',\n 'text-decoration': fontStyle.underline ? 'underline' : 'none',\n '-webkit-transform': transform,\n '-ms-transform': transform,\n '-o-transform': transform,\n '-moz-transform': transform,\n transform: transform\n };\n $textBox.css(style);\n\n if (shape.data.name == null || shape.data.name.trim() === '') {\n $textBox.hide();\n return;\n }\n\n $textBox.show();\n\n var text = shape.data.name;\n // 长度超过12时切割\n if (text.length > 12) {\n text = text.substr(0, 12) + '...';\n }\n // 插入内容\n $textBox.html(text);\n $textBox.attr('title', shape.data.name);\n\n var midPoint = __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].getConnectionMidpoint(shape);\n var position = $shape.position();\n $textBox.css({\n left: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(midPoint.x) - position.left - $textBox.width() / 2,\n top: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(midPoint.y) - position.top - $textBox.height() / 2\n });\n }\n\n /**\r\n *\r\n * @param {*} element\r\n * @param {*} type\r\n * @param {*} x\r\n * @param {*} y\r\n */\n\n }, {\n key: 'move',\n value: function move(element, type, x, y) {\n var data = element.data,\n plane = element.plane,\n shape = element.shape;\n\n var sourcePoint = plane.waypoint[0];\n var targetPoint = plane.waypoint[plane.waypoint.length - 1];\n var connectData = __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].getShapeByPosition(x, y, this.$container, true);\n\n var connectPos = null;\n var connectId = null;\n\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.point.hide');\n if (connectData != null) {\n var connectEle = connectData.element;\n connectId = connectEle.data.id;\n if (connectData.type === 'bounds') {\n connectPos = connectData.anchor;\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.point.show', Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(connectPos));\n } else {\n if (connectData.type === 'shape') {\n var connectPoint = void 0;\n var connectShapeId = void 0;\n if (type === 'source') {\n connectPoint = { x: targetPoint.x, y: targetPoint.y };\n connectShapeId = data.targetRef;\n } else {\n connectPoint = {\n x: sourcePoint.x,\n y: sourcePoint.y\n };\n connectShapeId = data.sourceRef;\n }\n if (connectEle.data.id === connectShapeId) {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.point.hide');\n connectPos = { x: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(x), y: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(y), angle: null };\n connectId = null;\n } else {\n var anchors = connectEle.shape.getAnchors();\n var bounds = connectEle.plane.bounds;\n var center = {\n x: bounds.x + bounds.width / 2,\n y: bounds.y + bounds.height / 2\n };\n var length = -1;\n var pos = void 0;\n for (var i = 0; i < anchors.length; i += 1) {\n var anchor = anchors[i];\n\n var point = __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].getRotated(center, { x: bounds.x + anchor.x, y: bounds.y + anchor.y }, connectEle.shape.shapeStyle.angle);\n var distance = __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].measureDistance(point, connectPoint);\n if (length === -1 || distance < length) {\n length = distance;\n pos = point;\n }\n }\n var angle = __WEBPACK_IMPORTED_MODULE_1__drawUtils__[\"a\" /* default */].getPointAngle(this.$container, connectEle.data.id, pos.x, pos.y, 7);\n connectPos = { x: pos.x, y: pos.y, angle: angle };\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.point.show', Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(connectPos));\n }\n }\n }\n } else {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.point.remove');\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.remove');\n connectPos = { x: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(x), y: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(y), angle: null };\n connectId = null;\n }\n if (type === 'source') {\n data.sourceRef = connectId;\n sourcePoint.x = connectPos.x;\n sourcePoint.y = connectPos.y;\n sourcePoint.angle = connectPos.angle;\n if (connectId == null) {\n if (connectPos.x >= targetPoint.x - 6 && connectPos.x <= targetPoint.x + 6) {\n sourcePoint.x = targetPoint.x;\n }\n if (connectPos.y >= targetPoint.y - 6 && connectPos.y <= targetPoint.y + 6) {\n sourcePoint.y = targetPoint.y;\n }\n }\n } else {\n data.targetRef = connectId;\n targetPoint.x = connectPos.x;\n targetPoint.y = connectPos.y;\n targetPoint.angle = connectPos.angle;\n if (connectId == null) {\n if (connectPos.x >= sourcePoint.x - 6 && connectPos.x <= sourcePoint.x + 6) {\n targetPoint.x = sourcePoint.x;\n }\n if (connectPos.y >= sourcePoint.y - 6 && connectPos.y <= sourcePoint.y + 6) {\n targetPoint.y = sourcePoint.y;\n }\n }\n }\n this.renderConnection(element, true);\n }\n }]);\n\n return DrawConnection;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (DrawConnection);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvZHJhd0Nvbm5lY3Rpb24uanM/ZTMwMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRCdXMgZnJvbSAnLi4vY29yZS9ldmVudEJ1cydcclxuXHJcbmltcG9ydCBEcmF3VXRpbHMgZnJvbSAnLi9kcmF3VXRpbHMnXHJcblxyXG5pbXBvcnQgQ29ubmVjdGlvbiBmcm9tICcuL3NoYXBlL1NlcXVlbmNlRmxvdydcclxuXHJcbmltcG9ydCB7IHNldFNjYWxlLCByZXN0b3JlU2NhbGUsIGNhbnZhc0FjdGlvbnMgfSBmcm9tICcuLi91dGlscy91dGlscydcclxuaW1wb3J0IEdyYWRpZW50VXRpbHMgZnJvbSAnLi4vdXRpbHMvZ3JhZGllbnQnXHJcbmltcG9ydCAkIGZyb20gJy4uL3V0aWxzL3NsaW1KUSdcclxuXHJcbmNsYXNzIERyYXdDb25uZWN0aW9uIHtcclxuICBjb25zdHJ1Y3RvcihvcHRpb25zLCAkY29udGFpbmVyKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXHJcblxyXG4gICAgdGhpcy4kY29udGFpbmVyID0gJGNvbnRhaW5lclxyXG4gIH1cclxuICAvKipcclxuICAgKiDmuLLmn5NcclxuICAgKiBAcGFyYW0geyp9IHR5cGVcclxuICAgKiBAcGFyYW0geyp9IGRhdGFcclxuICAgKi9cclxuICBjcmVhdGVDb25uZWN0aW9uKGRhdGEpIHtcclxuICAgIHJldHVybiBuZXcgQ29ubmVjdGlvbihkYXRhKVxyXG4gIH1cclxuICAvKipcclxuICAgKiDmuLLmn5NcclxuICAgKiBAcGFyYW0geyp9IHR5cGVcclxuICAgKiBAcGFyYW0geyp9IGRhdGFcclxuICAgKi9cclxuICByZW5kZXIoZWxlbWVudCwgcmVuZGVyZWQpIHtcclxuICAgIGlmICghZWxlbWVudC5zaGFwZSkge1xyXG4gICAgICBlbGVtZW50LnNoYXBlID0gdGhpcy5jcmVhdGVDb25uZWN0aW9uKGVsZW1lbnQpXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlckNvbm5lY3Rpb24oZWxlbWVudCwgcmVuZGVyZWQpXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOa4suafk+i/nue6v1xyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjb25uZWN0aW9uIOi/nue6v+WFg+e0oFxyXG4gICAqIEBwYXJhbSB7Kn0gcmVuZGVyZWRcclxuICAgKi9cclxuICByZW5kZXJDb25uZWN0aW9uKGVsZW1lbnQsIHJlbmRlcmVkKSB7XHJcbiAgICBjb25zdCB7IHNoYXBlLCBkYXRhLCBwbGFuZSB9ID0gZWxlbWVudFxyXG4gICAgY29uc3QgeyBzb3VyY2VSZWYsIHRhcmdldFJlZiB9ID0gZGF0YVxyXG4gICAgY29uc3QgeyB3YXlwb2ludCB9ID0gcGxhbmVcclxuICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gd2F5cG9pbnRbMF1cclxuICAgIGNvbnN0IHRhcmdldFBvaW50ID0gd2F5cG9pbnRbd2F5cG9pbnQubGVuZ3RoIC0gMV1cclxuICAgIGNvbnN0IHNlbGVjdElkcyA9IGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLnNlbGVjdC5nZXRJZHMnKSB8fCBbXVxyXG4gICAgY29uc3QgZWxlbWVudHMgPSBldmVudEJ1cy50cmlnZ2VyKCdlbGVtZW50LmdldCcpXHJcblxyXG4gICAgaWYgKHdheXBvaW50Lmxlbmd0aCA+IDIgJiYgc2hhcGUucG9pbnRzLmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgIHNoYXBlLnBvaW50cyA9IHdheXBvaW50LmZpbHRlcigocG9pbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKGluZGV4ID09PSAwIHx8IGluZGV4ID09PSB3YXlwb2ludC5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlbmRlcmVkKSB7XHJcbiAgICAgIHNoYXBlLnBvaW50cyA9IERyYXdVdGlscy5nZXRDb25uZWN0aW9uUG9pbnRzKHNoYXBlLCBlbGVtZW50cylcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2hhcGUubGlua2VyVHlwZSA9PT0gJ2N1cnZlJyB8fCBzaGFwZS5saW5rZXJUeXBlID09PSAnYnJva2VuJykge1xyXG4gICAgICBpZiAoIXNoYXBlLnBvaW50cyB8fCBzaGFwZS5wb2ludHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgc2hhcGUucG9pbnRzID0gRHJhd1V0aWxzLmdldENvbm5lY3Rpb25Qb2ludHMoc2hhcGUsIGVsZW1lbnRzKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNvdXJjZVBvaW50LmFuZ2xlID09IG51bGwpIHtcclxuICAgICAgc291cmNlUG9pbnQuYW5nbGUgPSBEcmF3VXRpbHMuZ2V0QW5nbGUod2F5cG9pbnRbMV0sIHdheXBvaW50WzBdKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0YXJnZXRQb2ludC5hbmdsZSA9PSBudWxsKSB7XHJcbiAgICAgIHRhcmdldFBvaW50LmFuZ2xlID0gRHJhd1V0aWxzLmdldEFuZ2xlKFxyXG4gICAgICAgIHdheXBvaW50W3dheXBvaW50Lmxlbmd0aCAtIDJdLFxyXG4gICAgICAgIHdheXBvaW50W3dheXBvaW50Lmxlbmd0aCAtIDFdXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICBsZXQgeDEgPSB0YXJnZXRQb2ludC54XHJcbiAgICBsZXQgeTEgPSB0YXJnZXRQb2ludC55XHJcbiAgICBsZXQgeDIgPSBzb3VyY2VQb2ludC54XHJcbiAgICBsZXQgeTIgPSBzb3VyY2VQb2ludC55XHJcbiAgICBpZiAodGFyZ2V0UG9pbnQueCA+PSBzb3VyY2VQb2ludC54KSB7XHJcbiAgICAgIHgxID0gc291cmNlUG9pbnQueFxyXG4gICAgICB4MiA9IHRhcmdldFBvaW50LnhcclxuICAgIH1cclxuICAgIGlmICh0YXJnZXRQb2ludC55ID49IHNvdXJjZVBvaW50LnkpIHtcclxuICAgICAgeTEgPSBzb3VyY2VQb2ludC55XHJcbiAgICAgIHkyID0gdGFyZ2V0UG9pbnQueVxyXG4gICAgfVxyXG5cclxuICAgIHNoYXBlLnBvaW50cy5mb3JFYWNoKChwb2ludCwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKHBvaW50LnggPCB4MSkge1xyXG4gICAgICAgIHgxID0gcG9pbnQueFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChwb2ludC54ID4geDIpIHtcclxuICAgICAgICAgIHgyID0gcG9pbnQueFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAocG9pbnQueSA8IHkxKSB7XHJcbiAgICAgICAgeTEgPSBwb2ludC55XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHBvaW50LnkgPiB5Mikge1xyXG4gICAgICAgICAgeTIgPSBwb2ludC55XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IHNoYXBlQm94ID0geyB4OiB4MSwgeTogeTEsIHdpZHRoOiB4MiAtIHgxLCBoZWlnaHQ6IHkyIC0geTEgfVxyXG5cclxuICAgIGxldCAkc2hhcGUgPSB0aGlzLiRjb250YWluZXIuZmluZCgnLnNoYXBlLWJveFtkYXRhLWlkPVwiJyArIGRhdGEuaWQgKyAnXCJdJylcclxuXHJcbiAgICBpZiAoJHNoYXBlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAkc2hhcGUgPSAkKFxyXG4gICAgICAgIFwiPGRpdiBjbGFzcz0nc2hhcGUtYm94JyBkYXRhLWlkPSdcIiArXHJcbiAgICAgICAgICBkYXRhLmlkICtcclxuICAgICAgICAgIFwiJz48Y2FudmFzIGNsYXNzPSdzaGFwZS1jYW52YXMnPjwvY2FudmFzPjwvZGl2PlwiXHJcbiAgICAgICkuYXBwZW5kVG8odGhpcy4kY29udGFpbmVyLmZpbmQoJy5icGQtZGVzaWduZXInKSlcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCAkc2hhcGVDYW52YXMgPSAkc2hhcGUuZmluZCgnLnNoYXBlLWNhbnZhcycpXHJcbiAgICBjb25zdCB3aWR0aCA9IHNldFNjYWxlKHNoYXBlQm94LndpZHRoICsgMjApXHJcbiAgICBjb25zdCBoZWlnaHQgPSBzZXRTY2FsZShzaGFwZUJveC5oZWlnaHQgKyAyMClcclxuICAgICRzaGFwZUNhbnZhcy5hdHRyKHsgd2lkdGgsIGhlaWdodCB9KVxyXG4gICAgJHNoYXBlLmNzcyh7XHJcbiAgICAgIGxlZnQ6IHNldFNjYWxlKHNoYXBlQm94LnggLSAxMCkgKyAncHgnLFxyXG4gICAgICB0b3A6IHNldFNjYWxlKHNoYXBlQm94LnkgLSAxMCkgKyAncHgnLFxyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0XHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IHNoYXBlMkQgPSAkc2hhcGVDYW52YXNbMF0uZ2V0Q29udGV4dCgnMmQnKVxyXG5cclxuICAgIGxldCBicG1uU3R5bGUgPSB0aGlzLm9wdGlvbnMuYnBtblN0eWxlW3NoYXBlLmJwbW5OYW1lXSB8fCB7fVxyXG5cclxuICAgIGNvbnN0IGxpbmVTdHlsZSA9IE9iamVjdC5hc3NpZ24oe30sIHNoYXBlLmxpbmVTdHlsZSwgYnBtblN0eWxlLmxpbmVTdHlsZSlcclxuXHJcbiAgICBzaGFwZTJELnNjYWxlKHRoaXMub3B0aW9ucy5zY2FsZSwgdGhpcy5vcHRpb25zLnNjYWxlKVxyXG4gICAgc2hhcGUyRC50cmFuc2xhdGUoMTAsIDEwKVxyXG4gICAgc2hhcGUyRC5saW5lV2lkdGggPSBsaW5lU3R5bGUubGluZVdpZHRoXHJcbiAgICBzaGFwZTJELnN0cm9rZVN0eWxlID0gJ3JnYignICsgbGluZVN0eWxlLmxpbmVDb2xvciArICcpJ1xyXG4gICAgc2hhcGUyRC5maWxsU3R5bGUgPSAncmdiKCcgKyBsaW5lU3R5bGUubGluZUNvbG9yICsgJyknXHJcbiAgICBzaGFwZTJELnNhdmUoKVxyXG5cclxuICAgIGlmIChsaW5lU3R5bGUubGluZVN0eWxlID09PSAnZGFzaGVkJykge1xyXG4gICAgICBEcmF3VXRpbHMuc2V0TGluZURhc2goc2hhcGUyRCwgW1xyXG4gICAgICAgIGxpbmVTdHlsZS5saW5lV2lkdGggKiA4LFxyXG4gICAgICAgIGxpbmVTdHlsZS5saW5lV2lkdGggKiA0XHJcbiAgICAgIF0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAobGluZVN0eWxlLmxpbmVTdHlsZSA9PT0gJ2RvdCcpIHtcclxuICAgICAgICBEcmF3VXRpbHMuc2V0TGluZURhc2goc2hhcGUyRCwgW1xyXG4gICAgICAgICAgbGluZVN0eWxlLmxpbmVXaWR0aCxcclxuICAgICAgICAgIGxpbmVTdHlsZS5saW5lV2lkdGggKiAyXHJcbiAgICAgICAgXSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAobGluZVN0eWxlLmxpbmVTdHlsZSA9PT0gJ2Rhc2hkb3QnKSB7XHJcbiAgICAgICAgICBEcmF3VXRpbHMuc2V0TGluZURhc2goc2hhcGUyRCwgW1xyXG4gICAgICAgICAgICBsaW5lU3R5bGUubGluZVdpZHRoICogOCxcclxuICAgICAgICAgICAgbGluZVN0eWxlLmxpbmVXaWR0aCAqIDMsXHJcbiAgICAgICAgICAgIGxpbmVTdHlsZS5saW5lV2lkdGgsXHJcbiAgICAgICAgICAgIGxpbmVTdHlsZS5saW5lV2lkdGggKiAzXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0YXJ0UG9pbnQgPSB7XHJcbiAgICAgIHg6IHNvdXJjZVBvaW50LnggLSBzaGFwZUJveC54LFxyXG4gICAgICB5OiBzb3VyY2VQb2ludC55IC0gc2hhcGVCb3gueVxyXG4gICAgfVxyXG4gICAgY29uc3QgZW5kUG9pbnQgPSB7XHJcbiAgICAgIHg6IHRhcmdldFBvaW50LnggLSBzaGFwZUJveC54LFxyXG4gICAgICB5OiB0YXJnZXRQb2ludC55IC0gc2hhcGVCb3gueVxyXG4gICAgfVxyXG5cclxuICAgIHNoYXBlMkQuYmVnaW5QYXRoKClcclxuICAgIHNoYXBlMkQubW92ZVRvKHN0YXJ0UG9pbnQueCwgc3RhcnRQb2ludC55KVxyXG4gICAgaWYgKHNoYXBlLmxpbmtlclR5cGUgPT09ICdjdXJ2ZScpIHtcclxuICAgICAgY29uc3QgcG9pbnQxID0gc2hhcGUucG9pbnRzWzBdXHJcbiAgICAgIGNvbnN0IHBvaW50MiA9IHNoYXBlLnBvaW50c1sxXVxyXG4gICAgICBzaGFwZTJELmJlemllckN1cnZlVG8oXHJcbiAgICAgICAgcG9pbnQxLnggLSBzaGFwZUJveC54LFxyXG4gICAgICAgIHBvaW50MS55IC0gc2hhcGVCb3gueSxcclxuICAgICAgICBwb2ludDIueCAtIHNoYXBlQm94LngsXHJcbiAgICAgICAgcG9pbnQyLnkgLSBzaGFwZUJveC55LFxyXG4gICAgICAgIGVuZFBvaW50LngsXHJcbiAgICAgICAgZW5kUG9pbnQueVxyXG4gICAgICApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzaGFwZS5wb2ludHMuZm9yRWFjaCgocG9pbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgc2hhcGUyRC5saW5lVG8ocG9pbnQueCAtIHNoYXBlQm94LngsIHBvaW50LnkgLSBzaGFwZUJveC55KVxyXG4gICAgICB9KVxyXG4gICAgICBzaGFwZTJELmxpbmVUbyhlbmRQb2ludC54LCBlbmRQb2ludC55KVxyXG4gICAgfVxyXG4gICAgLy8gVE9ETzog5Yik5pat6YCJ5LitXHJcbiAgICBpZiAoc2VsZWN0SWRzLmluZGV4T2YoZGF0YS5pZCkgPj0gMCkge1xyXG4gICAgICBzaGFwZTJELnNoYWRvd0JsdXIgPSA0XHJcbiAgICAgIHNoYXBlMkQuc2hhZG93Q29sb3IgPSAnI2VjNTM0MydcclxuICAgIH1cclxuXHJcbiAgICBzaGFwZTJELnN0cm9rZSgpXHJcbiAgICBzaGFwZTJELnJlc3RvcmUoKVxyXG5cclxuICAgIGNvbnN0IHN0YXJ0QW5nbGUgPSBEcmF3VXRpbHMuZ2V0RW5kcG9pbnRBbmdsZShzaGFwZSwgJ3NvdXJjZVJlZicpXHJcblxyXG4gICAgdGhpcy5yZW5kZXJBcnJvdyhcclxuICAgICAgc3RhcnRQb2ludCxcclxuICAgICAgc3RhcnRBbmdsZSxcclxuICAgICAgc291cmNlUmVmLFxyXG4gICAgICBsaW5lU3R5bGUuYmVnaW5BcnJvd1N0eWxlLFxyXG4gICAgICBzaGFwZSxcclxuICAgICAgc291cmNlUG9pbnQuYW5nbGUsXHJcbiAgICAgIHNoYXBlMkRcclxuICAgIClcclxuXHJcbiAgICBjb25zdCBlbmRBbmdsZSA9IERyYXdVdGlscy5nZXRFbmRwb2ludEFuZ2xlKHNoYXBlLCAndGFyZ2V0UmVmJylcclxuXHJcbiAgICB0aGlzLnJlbmRlckFycm93KFxyXG4gICAgICBlbmRQb2ludCxcclxuICAgICAgZW5kQW5nbGUsXHJcbiAgICAgIHRhcmdldFJlZixcclxuICAgICAgbGluZVN0eWxlLmVuZEFycm93U3R5bGUsXHJcbiAgICAgIHNoYXBlLFxyXG4gICAgICB0YXJnZXRQb2ludC5hbmdsZSxcclxuICAgICAgc2hhcGUyRFxyXG4gICAgKVxyXG5cclxuICAgIHNoYXBlMkQucmVzdG9yZSgpXHJcbiAgICB0aGlzLnJlbmRlckNvbm5lY3Rpb25UZXh0KHNoYXBlKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5riy5p+T566t5aS0XHJcbiAgICogQHBhcmFtIHsqfSBzdGFydFBvaW50XHJcbiAgICogQHBhcmFtIHsqfSBhbmdsZVxyXG4gICAqIEBwYXJhbSB7Kn0gaWRcclxuICAgKiBAcGFyYW0geyp9IGFycm93U3R5bGVcclxuICAgKiBAcGFyYW0geyp9IHNoYXBlXHJcbiAgICogQHBhcmFtIHsqfSByb3RhdGVcclxuICAgKiBAcGFyYW0geyp9IHNoYXBlMkRcclxuICAgKi9cclxuICByZW5kZXJBcnJvdyhzdGFydFBvaW50LCBhbmdsZSwgaWQsIGFycm93U3R5bGUsIHNoYXBlLCByb3RhdGUsIHNoYXBlMkQpIHtcclxuICAgIGlmIChhcnJvd1N0eWxlID09PSAnc29saWRBcnJvdycpIHtcclxuICAgICAgY29uc3QgYXJyb3dXaWR0aCA9IDEyXHJcbiAgICAgIGNvbnN0IHBpID0gTWF0aC5QSSAvIDEwXHJcbiAgICAgIGNvbnN0IGxlbmd0aCA9IGFycm93V2lkdGggLyBNYXRoLmNvcyhwaSlcclxuICAgICAgY29uc3QgcG9pbnQxID0ge1xyXG4gICAgICAgIHg6IHN0YXJ0UG9pbnQueCAtIGxlbmd0aCAqIE1hdGguY29zKGFuZ2xlIC0gcGkpLFxyXG4gICAgICAgIHk6IHN0YXJ0UG9pbnQueSAtIGxlbmd0aCAqIE1hdGguc2luKGFuZ2xlIC0gcGkpXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcG9pbnQyID0ge1xyXG4gICAgICAgIHg6IHN0YXJ0UG9pbnQueCAtIGxlbmd0aCAqIE1hdGguc2luKE1hdGguUEkgLyAyIC0gYW5nbGUgLSBwaSksXHJcbiAgICAgICAgeTogc3RhcnRQb2ludC55IC0gbGVuZ3RoICogTWF0aC5jb3MoTWF0aC5QSSAvIDIgLSBhbmdsZSAtIHBpKVxyXG4gICAgICB9XHJcbiAgICAgIHNoYXBlMkQuYmVnaW5QYXRoKClcclxuICAgICAgc2hhcGUyRC5tb3ZlVG8oc3RhcnRQb2ludC54LCBzdGFydFBvaW50LnkpXHJcbiAgICAgIHNoYXBlMkQubGluZVRvKHBvaW50MS54LCBwb2ludDEueSlcclxuICAgICAgc2hhcGUyRC5saW5lVG8ocG9pbnQyLngsIHBvaW50Mi55KVxyXG4gICAgICBzaGFwZTJELmxpbmVUbyhzdGFydFBvaW50LngsIHN0YXJ0UG9pbnQueSlcclxuICAgICAgc2hhcGUyRC5jbG9zZVBhdGgoKVxyXG4gICAgICBzaGFwZTJELmZpbGwoKVxyXG4gICAgICBzaGFwZTJELnN0cm9rZSgpXHJcbiAgICB9XHJcblxyXG4gICAgLy8g6YCC5bqU6L+e5o6l5Zu+5b2iXHJcbiAgICBpZiAoaWQgJiYgYXJyb3dTdHlsZSAhPT0gJ3NvbGlkQ2lyY2xlJyAmJiBhcnJvd1N0eWxlICE9PSAnZGFzaGVkQ2lyY2xlJykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnRCdXMudHJpZ2dlcignZWxlbWVudC5nZXQnLCBpZClcclxuICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICBzaGFwZTJELnNhdmUoKVxyXG4gICAgICAgIHNoYXBlMkQudHJhbnNsYXRlKHN0YXJ0UG9pbnQueCwgc3RhcnRQb2ludC55KVxyXG4gICAgICAgIHNoYXBlMkQucm90YXRlKHJvdGF0ZSlcclxuICAgICAgICBzaGFwZTJELnRyYW5zbGF0ZSgtc3RhcnRQb2ludC54LCAtc3RhcnRQb2ludC55KVxyXG4gICAgICAgIGNvbnN0IHggPSBzdGFydFBvaW50LnggLSBlbGVtZW50LnNoYXBlLmxpbmVTdHlsZS5saW5lV2lkdGggLyAyXHJcbiAgICAgICAgY29uc3QgeSA9IHN0YXJ0UG9pbnQueSAtIHNoYXBlLmxpbmVTdHlsZS5saW5lV2lkdGggKiAxLjJcclxuICAgICAgICBjb25zdCBsaW5lV2lkdGgxID0gc2hhcGUubGluZVN0eWxlLmxpbmVXaWR0aCAqIDJcclxuICAgICAgICBjb25zdCBsaW5lV2lkdGgyID0gc2hhcGUubGluZVN0eWxlLmxpbmVXaWR0aCAqIDEuOFxyXG4gICAgICAgIGNvbnN0IHN0ZXAgPSAxXHJcbiAgICAgICAgbGV0IHBvaW50WCA9IHhcclxuICAgICAgICB3aGlsZSAocG9pbnRYIDw9IHggKyBsaW5lV2lkdGgxKSB7XHJcbiAgICAgICAgICBsZXQgcG9pbnRZID0geVxyXG4gICAgICAgICAgd2hpbGUgKHBvaW50WSA8PSB5ICsgbGluZVdpZHRoMikge1xyXG4gICAgICAgICAgICBzaGFwZTJELmNsZWFyUmVjdChwb2ludFgsIHBvaW50WSwgMS41LCAxLjUpXHJcbiAgICAgICAgICAgIHBvaW50WSArPSBzdGVwXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBwb2ludFggKz0gc3RlcFxyXG4gICAgICAgIH1cclxuICAgICAgICBzaGFwZTJELnJlc3RvcmUoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmuLLmn5Pov57nur/mlofmnKxcclxuICAgKi9cclxuICByZW5kZXJDb25uZWN0aW9uVGV4dChzaGFwZSkge1xyXG4gICAgY29uc3QgJHNoYXBlID0gdGhpcy4kY29udGFpbmVyLmZpbmQoXHJcbiAgICAgICcuc2hhcGUtYm94W2RhdGEtaWQ9XCInICsgc2hhcGUuZGF0YS5pZCArICdcIl0nXHJcbiAgICApXHJcbiAgICBsZXQgJHRleHRCb3ggPSAkc2hhcGUuZmluZCgnLnRleHQtYm94W2RhdGEtc2hhcGU9JyArIHNoYXBlLmRhdGEuaWQgKyAnXScpXHJcbiAgICBpZiAoJHRleHRCb3gubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICR0ZXh0Qm94ID0gJChcclxuICAgICAgICBcIjxkaXYgY2xhc3M9J3RleHQtYm94IGNvbm5lY3Rpb24tdGV4dCcgZGF0YS1zaGFwZT0nXCIgK1xyXG4gICAgICAgICAgc2hhcGUuZGF0YS5pZCArXHJcbiAgICAgICAgICBcIic+PC9kaXY+XCJcclxuICAgICAgKS5hcHBlbmRUbygkc2hhcGUpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZm9udFN0eWxlID0gc2hhcGUuZm9udFN0eWxlXHJcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSAnc2NhbGUoJyArIHRoaXMub3B0aW9ucy5zY2FsZSArICcpJ1xyXG4gICAgY29uc3Qgc3R5bGUgPSB7XHJcbiAgICAgICdsaW5lLWhlaWdodCc6IE1hdGgucm91bmQoZm9udFN0eWxlLnNpemUgKiAxLjI1KSArICdweCcsXHJcbiAgICAgICdmb250LXNpemUnOiBmb250U3R5bGUuc2l6ZSArICdweCcsXHJcbiAgICAgICdmb250LWZhbWlseSc6IGZvbnRTdHlsZS5mb250RmFtaWx5LFxyXG4gICAgICAnZm9udC13ZWlnaHQnOiBmb250U3R5bGUuYm9sZCA/ICdib2xkJyA6ICdub3JtYWwnLFxyXG4gICAgICAnZm9udC1zdHlsZSc6IGZvbnRTdHlsZS5pdGFsaWMgPyAnaXRhbGljJyA6ICdub3JtYWwnLFxyXG4gICAgICAndGV4dC1hbGlnbic6IGZvbnRTdHlsZS50ZXh0QWxpZ24sXHJcbiAgICAgIGNvbG9yOiAncmdiKCcgKyBmb250U3R5bGUuY29sb3IgKyAnKScsXHJcbiAgICAgICd0ZXh0LWRlY29yYXRpb24nOiBmb250U3R5bGUudW5kZXJsaW5lID8gJ3VuZGVybGluZScgOiAnbm9uZScsXHJcbiAgICAgICctd2Via2l0LXRyYW5zZm9ybSc6IHRyYW5zZm9ybSxcclxuICAgICAgJy1tcy10cmFuc2Zvcm0nOiB0cmFuc2Zvcm0sXHJcbiAgICAgICctby10cmFuc2Zvcm0nOiB0cmFuc2Zvcm0sXHJcbiAgICAgICctbW96LXRyYW5zZm9ybSc6IHRyYW5zZm9ybSxcclxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm1cclxuICAgIH1cclxuICAgICR0ZXh0Qm94LmNzcyhzdHlsZSlcclxuXHJcbiAgICBpZiAoc2hhcGUuZGF0YS5uYW1lID09IG51bGwgfHwgc2hhcGUuZGF0YS5uYW1lLnRyaW0oKSA9PT0gJycpIHtcclxuICAgICAgJHRleHRCb3guaGlkZSgpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgICR0ZXh0Qm94LnNob3coKVxyXG5cclxuICAgIGxldCB0ZXh0ID0gc2hhcGUuZGF0YS5uYW1lXHJcbiAgICAvLyDplb/luqbotoXov4cxMuaXtuWIh+WJslxyXG4gICAgaWYgKHRleHQubGVuZ3RoID4gMTIpIHtcclxuICAgICAgdGV4dCA9IHRleHQuc3Vic3RyKDAsIDEyKSArICcuLi4nXHJcbiAgICB9XHJcbiAgICAvLyDmj5LlhaXlhoXlrrlcclxuICAgICR0ZXh0Qm94Lmh0bWwodGV4dClcclxuICAgICR0ZXh0Qm94LmF0dHIoJ3RpdGxlJywgc2hhcGUuZGF0YS5uYW1lKVxyXG5cclxuICAgIGNvbnN0IG1pZFBvaW50ID0gRHJhd1V0aWxzLmdldENvbm5lY3Rpb25NaWRwb2ludChzaGFwZSlcclxuICAgIGNvbnN0IHBvc2l0aW9uID0gJHNoYXBlLnBvc2l0aW9uKClcclxuICAgICR0ZXh0Qm94LmNzcyh7XHJcbiAgICAgIGxlZnQ6IHNldFNjYWxlKG1pZFBvaW50LngpIC0gcG9zaXRpb24ubGVmdCAtICR0ZXh0Qm94LndpZHRoKCkgLyAyLFxyXG4gICAgICB0b3A6IHNldFNjYWxlKG1pZFBvaW50LnkpIC0gcG9zaXRpb24udG9wIC0gJHRleHRCb3guaGVpZ2h0KCkgLyAyXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0geyp9IGVsZW1lbnRcclxuICAgKiBAcGFyYW0geyp9IHR5cGVcclxuICAgKiBAcGFyYW0geyp9IHhcclxuICAgKiBAcGFyYW0geyp9IHlcclxuICAgKi9cclxuICBtb3ZlKGVsZW1lbnQsIHR5cGUsIHgsIHkpIHtcclxuICAgIGNvbnN0IHsgZGF0YSwgcGxhbmUsIHNoYXBlIH0gPSBlbGVtZW50XHJcbiAgICBjb25zdCBzb3VyY2VQb2ludCA9IHBsYW5lLndheXBvaW50WzBdXHJcbiAgICBjb25zdCB0YXJnZXRQb2ludCA9IHBsYW5lLndheXBvaW50W3BsYW5lLndheXBvaW50Lmxlbmd0aCAtIDFdXHJcbiAgICBjb25zdCBjb25uZWN0RGF0YSA9IERyYXdVdGlscy5nZXRTaGFwZUJ5UG9zaXRpb24oXHJcbiAgICAgIHgsXHJcbiAgICAgIHksXHJcbiAgICAgIHRoaXMuJGNvbnRhaW5lcixcclxuICAgICAgdHJ1ZVxyXG4gICAgKVxyXG5cclxuICAgIGxldCBjb25uZWN0UG9zID0gbnVsbFxyXG4gICAgbGV0IGNvbm5lY3RJZCA9IG51bGxcclxuXHJcbiAgICBldmVudEJ1cy50cmlnZ2VyKCdhbmNob3IucG9pbnQuaGlkZScpXHJcbiAgICBpZiAoY29ubmVjdERhdGEgIT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBjb25uZWN0RWxlID0gY29ubmVjdERhdGEuZWxlbWVudFxyXG4gICAgICBjb25uZWN0SWQgPSBjb25uZWN0RWxlLmRhdGEuaWRcclxuICAgICAgaWYgKGNvbm5lY3REYXRhLnR5cGUgPT09ICdib3VuZHMnKSB7XHJcbiAgICAgICAgY29ubmVjdFBvcyA9IGNvbm5lY3REYXRhLmFuY2hvclxyXG4gICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2FuY2hvci5wb2ludC5zaG93Jywgc2V0U2NhbGUoY29ubmVjdFBvcykpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGNvbm5lY3REYXRhLnR5cGUgPT09ICdzaGFwZScpIHtcclxuICAgICAgICAgIGxldCBjb25uZWN0UG9pbnRcclxuICAgICAgICAgIGxldCBjb25uZWN0U2hhcGVJZFxyXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdzb3VyY2UnKSB7XHJcbiAgICAgICAgICAgIGNvbm5lY3RQb2ludCA9IHsgeDogdGFyZ2V0UG9pbnQueCwgeTogdGFyZ2V0UG9pbnQueSB9XHJcbiAgICAgICAgICAgIGNvbm5lY3RTaGFwZUlkID0gZGF0YS50YXJnZXRSZWZcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbm5lY3RQb2ludCA9IHtcclxuICAgICAgICAgICAgICB4OiBzb3VyY2VQb2ludC54LFxyXG4gICAgICAgICAgICAgIHk6IHNvdXJjZVBvaW50LnlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25uZWN0U2hhcGVJZCA9IGRhdGEuc291cmNlUmVmXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29ubmVjdEVsZS5kYXRhLmlkID09PSBjb25uZWN0U2hhcGVJZCkge1xyXG4gICAgICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCdhbmNob3IucG9pbnQuaGlkZScpXHJcbiAgICAgICAgICAgIGNvbm5lY3RQb3MgPSB7IHg6IHJlc3RvcmVTY2FsZSh4KSwgeTogcmVzdG9yZVNjYWxlKHkpLCBhbmdsZTogbnVsbCB9XHJcbiAgICAgICAgICAgIGNvbm5lY3RJZCA9IG51bGxcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvcnMgPSBjb25uZWN0RWxlLnNoYXBlLmdldEFuY2hvcnMoKVxyXG4gICAgICAgICAgICBjb25zdCBib3VuZHMgPSBjb25uZWN0RWxlLnBsYW5lLmJvdW5kc1xyXG4gICAgICAgICAgICBjb25zdCBjZW50ZXIgPSB7XHJcbiAgICAgICAgICAgICAgeDogYm91bmRzLnggKyBib3VuZHMud2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgIHk6IGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCAvIDJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgbGVuZ3RoID0gLTFcclxuICAgICAgICAgICAgbGV0IHBvc1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFuY2hvcnMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICAgICAgICBjb25zdCBhbmNob3IgPSBhbmNob3JzW2ldXHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gRHJhd1V0aWxzLmdldFJvdGF0ZWQoXHJcbiAgICAgICAgICAgICAgICBjZW50ZXIsXHJcbiAgICAgICAgICAgICAgICB7IHg6IGJvdW5kcy54ICsgYW5jaG9yLngsIHk6IGJvdW5kcy55ICsgYW5jaG9yLnkgfSxcclxuICAgICAgICAgICAgICAgIGNvbm5lY3RFbGUuc2hhcGUuc2hhcGVTdHlsZS5hbmdsZVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IERyYXdVdGlscy5tZWFzdXJlRGlzdGFuY2UocG9pbnQsIGNvbm5lY3RQb2ludClcclxuICAgICAgICAgICAgICBpZiAobGVuZ3RoID09PSAtMSB8fCBkaXN0YW5jZSA8IGxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gZGlzdGFuY2VcclxuICAgICAgICAgICAgICAgIHBvcyA9IHBvaW50XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gRHJhd1V0aWxzLmdldFBvaW50QW5nbGUoXHJcbiAgICAgICAgICAgICAgdGhpcy4kY29udGFpbmVyLFxyXG4gICAgICAgICAgICAgIGNvbm5lY3RFbGUuZGF0YS5pZCxcclxuICAgICAgICAgICAgICBwb3MueCxcclxuICAgICAgICAgICAgICBwb3MueSxcclxuICAgICAgICAgICAgICA3XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgY29ubmVjdFBvcyA9IHsgeDogcG9zLngsIHk6IHBvcy55LCBhbmdsZSB9XHJcbiAgICAgICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2FuY2hvci5wb2ludC5zaG93Jywgc2V0U2NhbGUoY29ubmVjdFBvcykpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBldmVudEJ1cy50cmlnZ2VyKCdhbmNob3IucG9pbnQucmVtb3ZlJylcclxuICAgICAgZXZlbnRCdXMudHJpZ2dlcignYW5jaG9yLnJlbW92ZScpXHJcbiAgICAgIGNvbm5lY3RQb3MgPSB7IHg6IHJlc3RvcmVTY2FsZSh4KSwgeTogcmVzdG9yZVNjYWxlKHkpLCBhbmdsZTogbnVsbCB9XHJcbiAgICAgIGNvbm5lY3RJZCA9IG51bGxcclxuICAgIH1cclxuICAgIGlmICh0eXBlID09PSAnc291cmNlJykge1xyXG4gICAgICBkYXRhLnNvdXJjZVJlZiA9IGNvbm5lY3RJZFxyXG4gICAgICBzb3VyY2VQb2ludC54ID0gY29ubmVjdFBvcy54XHJcbiAgICAgIHNvdXJjZVBvaW50LnkgPSBjb25uZWN0UG9zLnlcclxuICAgICAgc291cmNlUG9pbnQuYW5nbGUgPSBjb25uZWN0UG9zLmFuZ2xlXHJcbiAgICAgIGlmIChjb25uZWN0SWQgPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbm5lY3RQb3MueCA+PSB0YXJnZXRQb2ludC54IC0gNiAmJlxyXG4gICAgICAgICAgY29ubmVjdFBvcy54IDw9IHRhcmdldFBvaW50LnggKyA2XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBzb3VyY2VQb2ludC54ID0gdGFyZ2V0UG9pbnQueFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb25uZWN0UG9zLnkgPj0gdGFyZ2V0UG9pbnQueSAtIDYgJiZcclxuICAgICAgICAgIGNvbm5lY3RQb3MueSA8PSB0YXJnZXRQb2ludC55ICsgNlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgc291cmNlUG9pbnQueSA9IHRhcmdldFBvaW50LnlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRhdGEudGFyZ2V0UmVmID0gY29ubmVjdElkXHJcbiAgICAgIHRhcmdldFBvaW50LnggPSBjb25uZWN0UG9zLnhcclxuICAgICAgdGFyZ2V0UG9pbnQueSA9IGNvbm5lY3RQb3MueVxyXG4gICAgICB0YXJnZXRQb2ludC5hbmdsZSA9IGNvbm5lY3RQb3MuYW5nbGVcclxuICAgICAgaWYgKGNvbm5lY3RJZCA9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY29ubmVjdFBvcy54ID49IHNvdXJjZVBvaW50LnggLSA2ICYmXHJcbiAgICAgICAgICBjb25uZWN0UG9zLnggPD0gc291cmNlUG9pbnQueCArIDZcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRhcmdldFBvaW50LnggPSBzb3VyY2VQb2ludC54XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbm5lY3RQb3MueSA+PSBzb3VyY2VQb2ludC55IC0gNiAmJlxyXG4gICAgICAgICAgY29ubmVjdFBvcy55IDw9IHNvdXJjZVBvaW50LnkgKyA2XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0YXJnZXRQb2ludC55ID0gc291cmNlUG9pbnQueVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJDb25uZWN0aW9uKGVsZW1lbnQsIHRydWUpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEcmF3Q29ubmVjdGlvblxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2RyYXcvZHJhd0Nvbm5lY3Rpb24uanMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWJBO0FBZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBT0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///26\n"); + +/***/ }), +/* 27 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Base__ = __webpack_require__(6);\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\nvar SequenceFlow = function (_Base) {\n _inherits(SequenceFlow, _Base);\n\n function SequenceFlow(element) {\n _classCallCheck(this, SequenceFlow);\n\n // bpmn数据\n var _this = _possibleConstructorReturn(this, (SequenceFlow.__proto__ || Object.getPrototypeOf(SequenceFlow)).call(this));\n\n _this.data = element.data;\n //\n _this.plane = element.plane;\n //\n _this.bpmnName = 'SequenceFlow';\n //\n _this.groupName = 'SequenceFlow';\n // 连线类型\n _this.linkerType = 'broken';\n // 点集合\n _this.points = [];\n // 描边样式\n _this.lineStyle = {\n lineWidth: 2,\n lineColor: '50,50,50',\n lineStyle: 'solid',\n beginArrowStyle: 'none',\n endArrowStyle: 'solidArrow'\n };\n return _this;\n }\n\n return SequenceFlow;\n}(__WEBPACK_IMPORTED_MODULE_0__Base__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (SequenceFlow);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2RyYXcvc2hhcGUvU2VxdWVuY2VGbG93LmpzPzc2MmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2UgZnJvbSAnLi9CYXNlJ1xyXG5cclxuY2xhc3MgU2VxdWVuY2VGbG93IGV4dGVuZHMgQmFzZSB7XHJcbiAgY29uc3RydWN0b3IoZWxlbWVudCkge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgLy8gYnBtbuaVsOaNrlxyXG4gICAgdGhpcy5kYXRhID0gZWxlbWVudC5kYXRhXHJcbiAgICAvL1xyXG4gICAgdGhpcy5wbGFuZSA9IGVsZW1lbnQucGxhbmVcclxuICAgIC8vXHJcbiAgICB0aGlzLmJwbW5OYW1lID0gJ1NlcXVlbmNlRmxvdydcclxuICAgIC8vXHJcbiAgICB0aGlzLmdyb3VwTmFtZSA9ICdTZXF1ZW5jZUZsb3cnXHJcbiAgICAvLyDov57nur/nsbvlnotcclxuICAgIHRoaXMubGlua2VyVHlwZSA9ICdicm9rZW4nXHJcbiAgICAvLyDngrnpm4blkIhcclxuICAgIHRoaXMucG9pbnRzID0gW11cclxuICAgIC8vIOaPj+i+ueagt+W8j1xyXG4gICAgdGhpcy5saW5lU3R5bGUgPSB7XHJcbiAgICAgIGxpbmVXaWR0aDogMixcclxuICAgICAgbGluZUNvbG9yOiAnNTAsNTAsNTAnLFxyXG4gICAgICBsaW5lU3R5bGU6ICdzb2xpZCcsXHJcbiAgICAgIGJlZ2luQXJyb3dTdHlsZTogJ25vbmUnLFxyXG4gICAgICBlbmRBcnJvd1N0eWxlOiAnc29saWRBcnJvdydcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNlcXVlbmNlRmxvd1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2RyYXcvc2hhcGUvU2VxdWVuY2VGbG93LmpzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBOzs7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFMQTtBQWZBO0FBc0JBO0FBQ0E7O0FBeEJBO0FBQ0E7QUF5QkEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///27\n"); + +/***/ }), +/* 28 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\r\n * Create a new id generator / cache instance.\r\n * You may optionally provide a seed that is used internally.\r\n * @param {Seed} seed\r\n */\nvar Ids = function () {\n function Ids(seed) {\n _classCallCheck(this, Ids);\n\n if (!(this instanceof Ids)) {\n return new Ids(seed);\n }\n seed = seed || [128, 36, 1];\n this._seed = seed.length ? this.rack(seed[0], seed[1], seed[2]) : seed;\n }\n\n _createClass(Ids, [{\n key: 'createId',\n value: function createId() {\n var bits = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 128;\n var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 16;\n\n if (bits <= 0) return '0';\n\n var digits = Math.log(Math.pow(2, bits)) / Math.log(base);\n for (var i = 2; digits === Infinity; i *= 2) {\n digits = Math.log(Math.pow(2, bits / i)) / Math.log(base) * i;\n }\n\n var rem = digits - Math.floor(digits);\n\n var res = '';\n\n for (var _i = 0; _i < Math.floor(digits); _i++) {\n var x = Math.floor(Math.random() * base).toString(base);\n res = x + res;\n }\n\n if (rem) {\n var b = Math.pow(base, rem);\n var _x3 = Math.floor(Math.random() * b).toString(base);\n res = _x3 + res;\n }\n\n var parsed = parseInt(res, base);\n if (parsed !== Infinity && parsed >= Math.pow(2, bits)) {\n return this.createId(bits, base);\n } else return res;\n }\n }, {\n key: 'rack',\n value: function rack(bits, base, expandBy) {\n var fn = function fn(data) {\n var iters = 0;\n var id = void 0;\n do {\n if (iters++ > 10) {\n if (expandBy) bits += expandBy;else throw new Error('too many ID collisions, use more bits');\n }\n\n id = this.createId(bits, base);\n } while (Object.hasOwnProperty.call(hats, id));\n\n hats[id] = data;\n return id;\n };\n var hats = fn.hats = {};\n\n fn.get = function (id) {\n return fn.hats[id];\n };\n\n fn.set = function (id, value) {\n fn.hats[id] = value;\n return fn;\n };\n\n fn.bits = bits || 128;\n fn.base = base || 16;\n return fn;\n }\n\n /**\r\n * Generate a next id.\r\n * @param {Object} [element] element to bind the id to\r\n * @return {String} id\r\n */\n\n }, {\n key: 'next',\n value: function next(element) {\n return this._seed(element || true);\n }\n\n /**\r\n * Generate a next id with a given prefix.\r\n * @param {Object} [element] element to bind the id to\r\n * @return {String} id\r\n */\n\n }, {\n key: 'nextPrefixed',\n value: function nextPrefixed(prefix, element) {\n var id = void 0;\n\n do {\n id = prefix + this.next(true);\n } while (this.assigned(id));\n\n // claim {prefix}{random}\n this.claim(id, element);\n\n // return\n return id;\n }\n\n /**\r\n * Manually claim an existing id.\r\n * @param {String} id\r\n * @param {String} [element] element the id is claimed by\r\n */\n\n }, {\n key: 'claim',\n value: function claim(id, element) {\n this._seed.set(id, element || true);\n }\n\n /**\r\n * Returns true if the given id has already been assigned.\r\n * @param {String} id\r\n * @return {Boolean}\r\n */\n\n }, {\n key: 'assigned',\n value: function assigned(id) {\n return this._seed.get(id) || false;\n }\n\n /**\r\n * Unclaim an id.\r\n * @param {String} id the id to unclaim\r\n */\n\n }, {\n key: 'unclaim',\n value: function unclaim(id) {\n delete this._seed.hats[id];\n }\n\n /**\r\n * Clear all claimed ids.\r\n */\n\n }, {\n key: 'clear',\n value: function clear() {\n var hats = this._seed.hats;\n for (var id in hats) {\n this.unclaim(id);\n }\n }\n }]);\n\n return Ids;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Ids);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjguanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL3V0aWxzL2lkcy5qcz8yMTkyIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDcmVhdGUgYSBuZXcgaWQgZ2VuZXJhdG9yIC8gY2FjaGUgaW5zdGFuY2UuXHJcbiAqIFlvdSBtYXkgb3B0aW9uYWxseSBwcm92aWRlIGEgc2VlZCB0aGF0IGlzIHVzZWQgaW50ZXJuYWxseS5cclxuICogQHBhcmFtIHtTZWVkfSBzZWVkXHJcbiAqL1xyXG5jbGFzcyBJZHMge1xyXG4gIGNvbnN0cnVjdG9yKHNlZWQpIHtcclxuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJZHMpKSB7XHJcbiAgICAgIHJldHVybiBuZXcgSWRzKHNlZWQpXHJcbiAgICB9XHJcbiAgICBzZWVkID0gc2VlZCB8fCBbMTI4LCAzNiwgMV1cclxuICAgIHRoaXMuX3NlZWQgPSBzZWVkLmxlbmd0aCA/IHRoaXMucmFjayhzZWVkWzBdLCBzZWVkWzFdLCBzZWVkWzJdKSA6IHNlZWRcclxuICB9XHJcblxyXG4gIGNyZWF0ZUlkKGJpdHMgPSAxMjgsIGJhc2UgPSAxNikge1xyXG4gICAgaWYgKGJpdHMgPD0gMCkgcmV0dXJuICcwJ1xyXG5cclxuICAgIGxldCBkaWdpdHMgPSBNYXRoLmxvZyhNYXRoLnBvdygyLCBiaXRzKSkgLyBNYXRoLmxvZyhiYXNlKVxyXG4gICAgZm9yIChsZXQgaSA9IDI7IGRpZ2l0cyA9PT0gSW5maW5pdHk7IGkgKj0gMikge1xyXG4gICAgICBkaWdpdHMgPSAoTWF0aC5sb2coTWF0aC5wb3coMiwgYml0cyAvIGkpKSAvIE1hdGgubG9nKGJhc2UpKSAqIGlcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmVtID0gZGlnaXRzIC0gTWF0aC5mbG9vcihkaWdpdHMpXHJcblxyXG4gICAgbGV0IHJlcyA9ICcnXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLmZsb29yKGRpZ2l0cyk7IGkrKykge1xyXG4gICAgICBsZXQgeCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGJhc2UpLnRvU3RyaW5nKGJhc2UpXHJcbiAgICAgIHJlcyA9IHggKyByZXNcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVtKSB7XHJcbiAgICAgIGxldCBiID0gTWF0aC5wb3coYmFzZSwgcmVtKVxyXG4gICAgICBsZXQgeCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGIpLnRvU3RyaW5nKGJhc2UpXHJcbiAgICAgIHJlcyA9IHggKyByZXNcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGFyc2VkID0gcGFyc2VJbnQocmVzLCBiYXNlKVxyXG4gICAgaWYgKHBhcnNlZCAhPT0gSW5maW5pdHkgJiYgcGFyc2VkID49IE1hdGgucG93KDIsIGJpdHMpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUlkKGJpdHMsIGJhc2UpXHJcbiAgICB9IGVsc2UgcmV0dXJuIHJlc1xyXG4gIH1cclxuXHJcbiAgcmFjayhiaXRzLCBiYXNlLCBleHBhbmRCeSkge1xyXG4gICAgY29uc3QgZm4gPSBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgIGxldCBpdGVycyA9IDBcclxuICAgICAgbGV0IGlkXHJcbiAgICAgIGRvIHtcclxuICAgICAgICBpZiAoaXRlcnMrKyA+IDEwKSB7XHJcbiAgICAgICAgICBpZiAoZXhwYW5kQnkpIGJpdHMgKz0gZXhwYW5kQnlcclxuICAgICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCd0b28gbWFueSBJRCBjb2xsaXNpb25zLCB1c2UgbW9yZSBiaXRzJylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlkID0gdGhpcy5jcmVhdGVJZChiaXRzLCBiYXNlKVxyXG4gICAgICB9IHdoaWxlIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChoYXRzLCBpZCkpXHJcblxyXG4gICAgICBoYXRzW2lkXSA9IGRhdGFcclxuICAgICAgcmV0dXJuIGlkXHJcbiAgICB9XHJcbiAgICBjb25zdCBoYXRzID0gKGZuLmhhdHMgPSB7fSlcclxuXHJcbiAgICBmbi5nZXQgPSBmdW5jdGlvbihpZCkge1xyXG4gICAgICByZXR1cm4gZm4uaGF0c1tpZF1cclxuICAgIH1cclxuXHJcbiAgICBmbi5zZXQgPSBmdW5jdGlvbihpZCwgdmFsdWUpIHtcclxuICAgICAgZm4uaGF0c1tpZF0gPSB2YWx1ZVxyXG4gICAgICByZXR1cm4gZm5cclxuICAgIH1cclxuXHJcbiAgICBmbi5iaXRzID0gYml0cyB8fCAxMjhcclxuICAgIGZuLmJhc2UgPSBiYXNlIHx8IDE2XHJcbiAgICByZXR1cm4gZm5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIGEgbmV4dCBpZC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gW2VsZW1lbnRdIGVsZW1lbnQgdG8gYmluZCB0aGUgaWQgdG9cclxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGlkXHJcbiAgICovXHJcbiAgbmV4dChlbGVtZW50KSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VlZChlbGVtZW50IHx8IHRydWUpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBhIG5leHQgaWQgd2l0aCBhIGdpdmVuIHByZWZpeC5cclxuICAgKiBAcGFyYW0ge09iamVjdH0gW2VsZW1lbnRdIGVsZW1lbnQgdG8gYmluZCB0aGUgaWQgdG9cclxuICAgKiBAcmV0dXJuIHtTdHJpbmd9IGlkXHJcbiAgICovXHJcbiAgbmV4dFByZWZpeGVkKHByZWZpeCwgZWxlbWVudCkge1xyXG4gICAgbGV0IGlkXHJcblxyXG4gICAgZG8ge1xyXG4gICAgICBpZCA9IHByZWZpeCArIHRoaXMubmV4dCh0cnVlKVxyXG4gICAgfSB3aGlsZSAodGhpcy5hc3NpZ25lZChpZCkpXHJcblxyXG4gICAgLy8gY2xhaW0ge3ByZWZpeH17cmFuZG9tfVxyXG4gICAgdGhpcy5jbGFpbShpZCwgZWxlbWVudClcclxuXHJcbiAgICAvLyByZXR1cm5cclxuICAgIHJldHVybiBpZFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWFudWFsbHkgY2xhaW0gYW4gZXhpc3RpbmcgaWQuXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IGlkXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IFtlbGVtZW50XSBlbGVtZW50IHRoZSBpZCBpcyBjbGFpbWVkIGJ5XHJcbiAgICovXHJcbiAgY2xhaW0oaWQsIGVsZW1lbnQpIHtcclxuICAgIHRoaXMuX3NlZWQuc2V0KGlkLCBlbGVtZW50IHx8IHRydWUpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGlkIGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXHJcbiAgICogQHBhcmFtICB7U3RyaW5nfSBpZFxyXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XHJcbiAgICovXHJcbiAgYXNzaWduZWQoaWQpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWVkLmdldChpZCkgfHwgZmFsc2VcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuY2xhaW0gYW4gaWQuXHJcbiAgICogQHBhcmFtICB7U3RyaW5nfSBpZCB0aGUgaWQgdG8gdW5jbGFpbVxyXG4gICAqL1xyXG4gIHVuY2xhaW0oaWQpIHtcclxuICAgIGRlbGV0ZSB0aGlzLl9zZWVkLmhhdHNbaWRdXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBhbGwgY2xhaW1lZCBpZHMuXHJcbiAgICovXHJcbiAgY2xlYXIoKSB7XHJcbiAgICBjb25zdCBoYXRzID0gdGhpcy5fc2VlZC5oYXRzXHJcbiAgICBmb3IgKGxldCBpZCBpbiBoYXRzKSB7XHJcbiAgICAgIHRoaXMudW5jbGFpbShpZClcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IElkc1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL3V0aWxzL2lkcy5qcyJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7OztBQUtBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///28\n"); + +/***/ }), +/* 29 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__bpmn__ = __webpack_require__(30);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__xmlns_bpmn_json__ = __webpack_require__(42);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__xmlns_bpmn_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__xmlns_bpmn_json__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__xmlns_bpmndi_json__ = __webpack_require__(43);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__xmlns_bpmndi_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__xmlns_bpmndi_json__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__xmlns_dc_json__ = __webpack_require__(44);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__xmlns_dc_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3__xmlns_dc_json__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__xmlns_di_json__ = __webpack_require__(45);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__xmlns_di_json___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4__xmlns_di_json__);\n\n\n\n\n\n\n\nvar packages = {\n bpmn: __WEBPACK_IMPORTED_MODULE_1__xmlns_bpmn_json___default.a,\n bpmndi: __WEBPACK_IMPORTED_MODULE_2__xmlns_bpmndi_json___default.a,\n dc: __WEBPACK_IMPORTED_MODULE_3__xmlns_dc_json___default.a,\n di: __WEBPACK_IMPORTED_MODULE_4__xmlns_di_json___default.a\n};\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (function (additionalPackages, options) {\n var pks = Object.assign({}, packages, additionalPackages);\n return new __WEBPACK_IMPORTED_MODULE_0__bpmn__[\"a\" /* default */](pks, options);\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMjkuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3htbC9pbmRleC5qcz8xYTY0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCcG1uTW9kZWwgZnJvbSAnLi9icG1uJ1xyXG5cclxuaW1wb3J0IEJwbW5QYWNrYWdlIGZyb20gJy4veG1sbnMvYnBtbi5qc29uJ1xyXG5pbXBvcnQgQnBtbkRpUGFja2FnZSBmcm9tICcuL3htbG5zL2JwbW5kaS5qc29uJ1xyXG5pbXBvcnQgRGNQYWNrYWdlIGZyb20gJy4veG1sbnMvZGMuanNvbidcclxuaW1wb3J0IERpUGFja2FnZSBmcm9tICcuL3htbG5zL2RpLmpzb24nXHJcblxyXG5jb25zdCBwYWNrYWdlcyA9IHtcclxuICBicG1uOiBCcG1uUGFja2FnZSxcclxuICBicG1uZGk6IEJwbW5EaVBhY2thZ2UsXHJcbiAgZGM6IERjUGFja2FnZSxcclxuICBkaTogRGlQYWNrYWdlXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IChhZGRpdGlvbmFsUGFja2FnZXMsIG9wdGlvbnMpID0+IHtcclxuICBjb25zdCBwa3MgPSBPYmplY3QuYXNzaWduKHt9LCBwYWNrYWdlcywgYWRkaXRpb25hbFBhY2thZ2VzKVxyXG4gIHJldHVybiBuZXcgQnBtbk1vZGVsKHBrcywgb3B0aW9ucylcclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2ZlYXR1cmVzL3htbC9pbmRleC5qcyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///29\n"); + +/***/ }), +/* 30 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__model_model__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__model_xml__ = __webpack_require__(36);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n/**\r\n * A sub class of {@link Model} with support for import and export of BPMN 2.0 xml files.\r\n *\r\n * @class BpmnModel\r\n * @extends Model\r\n *\r\n * @param {Object|Array} packages to use for instantiating the model\r\n * @param {Object} [options] additional options to pass over\r\n */\n\nvar BpmnModel = function (_Model) {\n _inherits(BpmnModel, _Model);\n\n function BpmnModel(packages, options) {\n _classCallCheck(this, BpmnModel);\n\n // 导入\n var _this = _possibleConstructorReturn(this, (BpmnModel.__proto__ || Object.getPrototypeOf(BpmnModel)).call(this, packages, options));\n\n __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].on('model.import', _this.fromXML.bind(_this));\n // 导出\n __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].on('model.export', _this.toXML.bind(_this));\n // 创建\n __WEBPACK_IMPORTED_MODULE_1__core_eventBus__[\"a\" /* default */].on('model.create', _this.createModel.bind(_this));\n return _this;\n }\n /**\r\n * 创建模型数据\r\n * @param {*} data\r\n * @param {*} callback\r\n */\n\n\n _createClass(BpmnModel, [{\n key: 'createModel',\n value: function createModel(data) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n\n callback(this.create(data.descriptor, data.attrs));\n }\n /**\r\n * Instantiates a BPMN model tree from a given xml string.\r\n *\r\n * @param {String} xmlStr\r\n * @param {String} [typeName='bpmn:Definitions'] name of the root element\r\n * @param {Object} [options] options to pass to the underlying reader\r\n * @param {Function} done callback that is invoked with (err, result, parseContext)\r\n * once the import completes\r\n */\n\n }, {\n key: 'fromXML',\n value: function fromXML(xmlStr, typeName, options, done) {\n if (!(typeof typeName === 'string' && typeName.constructor === String)) {\n done = options;\n options = typeName;\n typeName = 'bpmn:Definitions';\n }\n\n if (typeof options === 'function' && options.constructor === Function) {\n done = options;\n options = {};\n }\n\n var reader = new __WEBPACK_IMPORTED_MODULE_2__model_xml__[\"a\" /* Reader */](Object.assign({ model: this, lax: true }, options));\n var rootHandler = reader.handler(typeName);\n\n reader.fromXML(xmlStr, rootHandler, done);\n }\n\n /**\r\n * Serializes a BPMN 2.0 object tree to XML.\r\n *\r\n * @param {String} element the root element, typically an instance of `bpmn:Definitions`\r\n * @param {Object} [options] to pass to the underlying writer\r\n * @param {Function} done callback invoked with (err, xmlStr) once the import completes\r\n */\n\n }, {\n key: 'toXML',\n value: function toXML(element, options, done) {\n if (typeof options === 'function' && options.constructor === Function) {\n done = options;\n options = {};\n }\n\n var writer = new __WEBPACK_IMPORTED_MODULE_2__model_xml__[\"b\" /* Writer */](options);\n\n var result;\n var err;\n\n try {\n result = writer.toXML(element);\n } catch (e) {\n err = e;\n }\n\n return done(err, result);\n }\n }, {\n key: 'test',\n value: function test(a) {\n console.log('test', a, this.a);\n }\n }]);\n\n return BpmnModel;\n}(__WEBPACK_IMPORTED_MODULE_0__model_model__[\"a\" /* default */]);\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (BpmnModel);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzAuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3htbC9icG1uLmpzP2I0YjMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1vZGVsIGZyb20gJy4vbW9kZWwvbW9kZWwnXHJcbmltcG9ydCBldmVudEJ1cyBmcm9tICcuLi8uLi9jb3JlL2V2ZW50QnVzJ1xyXG5pbXBvcnQgeyBSZWFkZXIsIFdyaXRlciB9IGZyb20gJy4vbW9kZWwteG1sJ1xyXG5cclxuLyoqXHJcbiAqIEEgc3ViIGNsYXNzIG9mIHtAbGluayBNb2RlbH0gd2l0aCBzdXBwb3J0IGZvciBpbXBvcnQgYW5kIGV4cG9ydCBvZiBCUE1OIDIuMCB4bWwgZmlsZXMuXHJcbiAqXHJcbiAqIEBjbGFzcyBCcG1uTW9kZWxcclxuICogQGV4dGVuZHMgTW9kZWxcclxuICpcclxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IHBhY2thZ2VzIHRvIHVzZSBmb3IgaW5zdGFudGlhdGluZyB0aGUgbW9kZWxcclxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBhZGRpdGlvbmFsIG9wdGlvbnMgdG8gcGFzcyBvdmVyXHJcbiAqL1xyXG5jbGFzcyBCcG1uTW9kZWwgZXh0ZW5kcyBNb2RlbCB7XHJcbiAgY29uc3RydWN0b3IocGFja2FnZXMsIG9wdGlvbnMpIHtcclxuICAgIHN1cGVyKHBhY2thZ2VzLCBvcHRpb25zKVxyXG4gICAgLy8g5a+85YWlXHJcbiAgICBldmVudEJ1cy5vbignbW9kZWwuaW1wb3J0JywgdGhpcy5mcm9tWE1MLmJpbmQodGhpcykpXHJcbiAgICAvLyDlr7zlh7pcclxuICAgIGV2ZW50QnVzLm9uKCdtb2RlbC5leHBvcnQnLCB0aGlzLnRvWE1MLmJpbmQodGhpcykpXHJcbiAgICAvLyDliJvlu7pcclxuICAgIGV2ZW50QnVzLm9uKCdtb2RlbC5jcmVhdGUnLCB0aGlzLmNyZWF0ZU1vZGVsLmJpbmQodGhpcykpXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOWIm+W7uuaooeWei+aVsOaNrlxyXG4gICAqIEBwYXJhbSB7Kn0gZGF0YVxyXG4gICAqIEBwYXJhbSB7Kn0gY2FsbGJhY2tcclxuICAgKi9cclxuICBjcmVhdGVNb2RlbChkYXRhLCBjYWxsYmFjayA9ICgpID0+IHt9KSB7XHJcbiAgICBjYWxsYmFjayh0aGlzLmNyZWF0ZShkYXRhLmRlc2NyaXB0b3IsIGRhdGEuYXR0cnMpKVxyXG4gIH1cclxuICAvKipcclxuICAgKiBJbnN0YW50aWF0ZXMgYSBCUE1OIG1vZGVsIHRyZWUgZnJvbSBhIGdpdmVuIHhtbCBzdHJpbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gICB4bWxTdHJcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gICBbdHlwZU5hbWU9J2JwbW46RGVmaW5pdGlvbnMnXSBuYW1lIG9mIHRoZSByb290IGVsZW1lbnRcclxuICAgKiBAcGFyYW0ge09iamVjdH0gICBbb3B0aW9uc10gIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyByZWFkZXJcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBkb25lICAgICAgIGNhbGxiYWNrIHRoYXQgaXMgaW52b2tlZCB3aXRoIChlcnIsIHJlc3VsdCwgcGFyc2VDb250ZXh0KVxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jZSB0aGUgaW1wb3J0IGNvbXBsZXRlc1xyXG4gICAqL1xyXG4gIGZyb21YTUwoeG1sU3RyLCB0eXBlTmFtZSwgb3B0aW9ucywgZG9uZSkge1xyXG4gICAgaWYgKCEodHlwZW9mIHR5cGVOYW1lID09PSAnc3RyaW5nJyAmJiB0eXBlTmFtZS5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSkge1xyXG4gICAgICBkb25lID0gb3B0aW9uc1xyXG4gICAgICBvcHRpb25zID0gdHlwZU5hbWVcclxuICAgICAgdHlwZU5hbWUgPSAnYnBtbjpEZWZpbml0aW9ucydcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucy5jb25zdHJ1Y3RvciA9PT0gRnVuY3Rpb24pIHtcclxuICAgICAgZG9uZSA9IG9wdGlvbnNcclxuICAgICAgb3B0aW9ucyA9IHt9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHJlYWRlciA9IG5ldyBSZWFkZXIoT2JqZWN0LmFzc2lnbih7IG1vZGVsOiB0aGlzLCBsYXg6IHRydWUgfSwgb3B0aW9ucykpXHJcbiAgICB2YXIgcm9vdEhhbmRsZXIgPSByZWFkZXIuaGFuZGxlcih0eXBlTmFtZSlcclxuXHJcbiAgICByZWFkZXIuZnJvbVhNTCh4bWxTdHIsIHJvb3RIYW5kbGVyLCBkb25lKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VyaWFsaXplcyBhIEJQTU4gMi4wIG9iamVjdCB0cmVlIHRvIFhNTC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSAgIGVsZW1lbnQgICAgdGhlIHJvb3QgZWxlbWVudCwgdHlwaWNhbGx5IGFuIGluc3RhbmNlIG9mIGBicG1uOkRlZmluaXRpb25zYFxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgIFtvcHRpb25zXSAgdG8gcGFzcyB0byB0aGUgdW5kZXJseWluZyB3cml0ZXJcclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBkb25lICAgICAgIGNhbGxiYWNrIGludm9rZWQgd2l0aCAoZXJyLCB4bWxTdHIpIG9uY2UgdGhlIGltcG9ydCBjb21wbGV0ZXNcclxuICAgKi9cclxuICB0b1hNTChlbGVtZW50LCBvcHRpb25zLCBkb25lKSB7XHJcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucy5jb25zdHJ1Y3RvciA9PT0gRnVuY3Rpb24pIHtcclxuICAgICAgZG9uZSA9IG9wdGlvbnNcclxuICAgICAgb3B0aW9ucyA9IHt9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHdyaXRlciA9IG5ldyBXcml0ZXIob3B0aW9ucylcclxuXHJcbiAgICB2YXIgcmVzdWx0XHJcbiAgICB2YXIgZXJyXHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgcmVzdWx0ID0gd3JpdGVyLnRvWE1MKGVsZW1lbnQpXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGVyciA9IGVcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZG9uZShlcnIsIHJlc3VsdClcclxuICB9XHJcblxyXG4gIHRlc3QoYSkge1xyXG4gICAgY29uc29sZS5sb2coJ3Rlc3QnLCBhLCB0aGlzLmEpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCcG1uTW9kZWxcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9mZWF0dXJlcy94bWwvYnBtbi5qcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBU0E7OztBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVFBO0FBQ0E7Ozs7Ozs7OztBQUtBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBOzs7O0FBMUVBO0FBQ0E7QUE0RUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///30\n"); + +/***/ }), +/* 31 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony export (immutable) */ __webpack_exports__[\"a\"] = Factory;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__base__ = __webpack_require__(32);\n\n\n/**\r\n * A model element factory.\r\n *\r\n * @param {Model} model\r\n * @param {Properties} properties\r\n */\nfunction Factory(model, properties) {\n this.model = model;\n this.properties = properties;\n}\n\nFactory.prototype.createType = function (descriptor) {\n var model = this.model;\n\n var props = this.properties;\n\n var prototype = Object.create(__WEBPACK_IMPORTED_MODULE_0__base__[\"a\" /* default */].prototype);\n\n // initialize default values\n descriptor.properties.forEach(function (p) {\n if (!p.isMany && p.default !== undefined) {\n prototype[p.name] = p.default;\n }\n });\n\n props.defineModel(prototype, model);\n props.defineDescriptor(prototype, descriptor);\n\n var name = descriptor.ns.name;\n\n /**\r\n * The new type constructor\r\n */\n function ModelElement(attrs) {\n props.define(this, '$type', { value: name, enumerable: true });\n props.define(this, '$attrs', { value: {} });\n props.define(this, '$parent', { writable: true });\n\n for (var key in attrs) {\n this.set(key, attrs[key]);\n }\n }\n\n ModelElement.prototype = prototype;\n\n ModelElement.hasType = prototype.$instanceOf = this.model.hasType;\n\n // static links\n props.defineModel(ModelElement, model);\n props.defineDescriptor(ModelElement, descriptor);\n\n return ModelElement;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzEuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3htbC9tb2RlbC9mYWN0b3J5LmpzP2IyYTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJhc2UgZnJvbSAnLi9iYXNlJ1xyXG5cclxuLyoqXHJcbiAqIEEgbW9kZWwgZWxlbWVudCBmYWN0b3J5LlxyXG4gKlxyXG4gKiBAcGFyYW0ge01vZGVsfSBtb2RlbFxyXG4gKiBAcGFyYW0ge1Byb3BlcnRpZXN9IHByb3BlcnRpZXNcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEZhY3RvcnkobW9kZWwsIHByb3BlcnRpZXMpIHtcclxuICB0aGlzLm1vZGVsID0gbW9kZWxcclxuICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzXHJcbn1cclxuXHJcbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZVR5cGUgPSBmdW5jdGlvbihkZXNjcmlwdG9yKSB7XHJcbiAgdmFyIG1vZGVsID0gdGhpcy5tb2RlbFxyXG5cclxuICB2YXIgcHJvcHMgPSB0aGlzLnByb3BlcnRpZXNcclxuXHJcbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQmFzZS5wcm90b3R5cGUpXHJcblxyXG4gIC8vIGluaXRpYWxpemUgZGVmYXVsdCB2YWx1ZXNcclxuICBkZXNjcmlwdG9yLnByb3BlcnRpZXMuZm9yRWFjaChwID0+IHtcclxuICAgIGlmICghcC5pc01hbnkgJiYgcC5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcHJvdG90eXBlW3AubmFtZV0gPSBwLmRlZmF1bHRcclxuICAgIH1cclxuICB9KVxyXG5cclxuICBwcm9wcy5kZWZpbmVNb2RlbChwcm90b3R5cGUsIG1vZGVsKVxyXG4gIHByb3BzLmRlZmluZURlc2NyaXB0b3IocHJvdG90eXBlLCBkZXNjcmlwdG9yKVxyXG5cclxuICB2YXIgbmFtZSA9IGRlc2NyaXB0b3IubnMubmFtZVxyXG5cclxuICAvKipcclxuICAgKiBUaGUgbmV3IHR5cGUgY29uc3RydWN0b3JcclxuICAgKi9cclxuICBmdW5jdGlvbiBNb2RlbEVsZW1lbnQoYXR0cnMpIHtcclxuICAgIHByb3BzLmRlZmluZSh0aGlzLCAnJHR5cGUnLCB7IHZhbHVlOiBuYW1lLCBlbnVtZXJhYmxlOiB0cnVlIH0pXHJcbiAgICBwcm9wcy5kZWZpbmUodGhpcywgJyRhdHRycycsIHsgdmFsdWU6IHt9IH0pXHJcbiAgICBwcm9wcy5kZWZpbmUodGhpcywgJyRwYXJlbnQnLCB7IHdyaXRhYmxlOiB0cnVlIH0pXHJcblxyXG4gICAgZm9yIChsZXQga2V5IGluIGF0dHJzKSB7XHJcbiAgICAgIHRoaXMuc2V0KGtleSwgYXR0cnNba2V5XSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIE1vZGVsRWxlbWVudC5wcm90b3R5cGUgPSBwcm90b3R5cGVcclxuXHJcbiAgTW9kZWxFbGVtZW50Lmhhc1R5cGUgPSBwcm90b3R5cGUuJGluc3RhbmNlT2YgPSB0aGlzLm1vZGVsLmhhc1R5cGVcclxuXHJcbiAgLy8gc3RhdGljIGxpbmtzXHJcbiAgcHJvcHMuZGVmaW5lTW9kZWwoTW9kZWxFbGVtZW50LCBtb2RlbClcclxuICBwcm9wcy5kZWZpbmVEZXNjcmlwdG9yKE1vZGVsRWxlbWVudCwgZGVzY3JpcHRvcilcclxuXHJcbiAgcmV0dXJuIE1vZGVsRWxlbWVudFxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZmVhdHVyZXMveG1sL21vZGVsL2ZhY3RvcnkuanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///31\n"); + +/***/ }), +/* 32 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\r\n * Model base element.\r\n */\nvar Base = function () {\n function Base() {\n _classCallCheck(this, Base);\n }\n\n _createClass(Base, [{\n key: \"get\",\n value: function get(name) {\n return this.$model.properties.get(this, name);\n }\n }, {\n key: \"set\",\n value: function set(name, value) {\n this.$model.properties.set(this, name, value);\n }\n }]);\n\n return Base;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Base);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzIuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3htbC9tb2RlbC9iYXNlLmpzPzlhNTAiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIE1vZGVsIGJhc2UgZWxlbWVudC5cclxuICovXHJcbmNsYXNzIEJhc2Uge1xyXG4gIGdldChuYW1lKSB7XHJcbiAgICByZXR1cm4gdGhpcy4kbW9kZWwucHJvcGVydGllcy5nZXQodGhpcywgbmFtZSlcclxuICB9XHJcbiAgc2V0KG5hbWUsIHZhbHVlKSB7XHJcbiAgICB0aGlzLiRtb2RlbC5wcm9wZXJ0aWVzLnNldCh0aGlzLCBuYW1lLCB2YWx1ZSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJhc2VcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9mZWF0dXJlcy94bWwvbW9kZWwvYmFzZS5qcyJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBOzs7QUFHQTs7Ozs7OztBQUNBO0FBQ0E7QUFDQTs7O0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///32\n"); + +/***/ }), +/* 33 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony export (immutable) */ __webpack_exports__[\"a\"] = Registry;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__descriptor_builder__ = __webpack_require__(34);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils__ = __webpack_require__(5);\n\n\n\n/**\r\n * A registry of Model packages.\r\n *\r\n * @param {Array} packages\r\n * @param {Properties} properties\r\n */\nfunction Registry(packages, properties) {\n var _this = this;\n\n this.packageMap = {};\n this.typeMap = {};\n\n this.packages = [];\n\n this.properties = properties;\n\n var keys = Object.keys(packages);\n keys.forEach(function (key) {\n _this.registerPackage(packages[key]);\n });\n\n // forEach(packages, this.registerPackage.bind(this))\n}\n\nRegistry.prototype.getPackage = function (uriOrPrefix) {\n return this.packageMap[uriOrPrefix];\n};\n\nRegistry.prototype.getPackages = function () {\n return this.packages;\n};\n\nRegistry.prototype.registerPackage = function (pkg) {\n var _this2 = this;\n\n // copy package\n pkg = Object.assign({}, pkg);\n\n var pkgMap = this.packageMap;\n\n ensureAvailable(pkgMap, pkg, 'prefix');\n ensureAvailable(pkgMap, pkg, 'uri');\n\n // register types\n pkg.types.forEach(function (descriptor) {\n _this2.registerType(descriptor, pkg);\n });\n\n // forEach(\n // pkg.types,\n // function(descriptor) {\n // this.registerType(descriptor, pkg)\n // }.bind(this)\n // )\n\n pkgMap[pkg.uri] = pkgMap[pkg.prefix] = pkg;\n this.packages.push(pkg);\n};\n\n/**\r\n * Register a type from a specific package with us\r\n */\nRegistry.prototype.registerType = function (type, pkg) {\n var _this3 = this;\n\n type = Object.assign({}, type, {\n superClass: (type.superClass || []).slice(),\n extends: (type.extends || []).slice(),\n properties: (type.properties || []).slice(),\n meta: Object.assign(({}, type.meta || {}))\n });\n\n var ns = Object(__WEBPACK_IMPORTED_MODULE_1__utils__[\"g\" /* parseName */])(type.name, pkg.prefix);\n\n var name = ns.name;\n\n var propertiesByName = {};\n\n // parse properties\n type.properties.forEach(function (p) {\n // namespace property names\n var propertyNs = Object(__WEBPACK_IMPORTED_MODULE_1__utils__[\"g\" /* parseName */])(p.name, ns.prefix);\n\n var propertyName = propertyNs.name;\n\n // namespace property types\n if (!Object(__WEBPACK_IMPORTED_MODULE_1__utils__[\"e\" /* isBuiltIn */])(p.type)) {\n p.type = Object(__WEBPACK_IMPORTED_MODULE_1__utils__[\"g\" /* parseName */])(p.type, propertyNs.prefix).name;\n }\n\n Object.assign(p, {\n ns: propertyNs,\n name: propertyName\n });\n\n propertiesByName[propertyName] = p;\n });\n\n // forEach(type.properties, function(p) {\n // // namespace property names\n // var propertyNs = parseNameNs(p.name, ns.prefix)\n\n // var propertyName = propertyNs.name\n\n // // namespace property types\n // if (!isBuiltInType(p.type)) {\n // p.type = parseNameNs(p.type, propertyNs.prefix).name\n // }\n\n // Object.assign(p, {\n // ns: propertyNs,\n // name: propertyName\n // })\n\n // propertiesByName[propertyName] = p\n // })\n\n // update ns + name\n Object.assign(type, {\n ns: ns,\n name: name,\n propertiesByName: propertiesByName\n });\n\n type.extends.forEach(function (extendsName) {\n var extended = _this3.typeMap[extendsName];\n\n extended.traits = extended.traits || [];\n extended.traits.push(name);\n });\n\n // link to package\n this.definePackage(type, pkg);\n\n // register\n this.typeMap[name] = type;\n};\n\n/**\r\n * Traverse the type hierarchy from bottom to top,\r\n * calling iterator with (type, inherited) for all elements in\r\n * the inheritance chain.\r\n *\r\n * @param {Object} nsName\r\n * @param {Function} iterator\r\n * @param {Boolean} [trait=false]\r\n */\nRegistry.prototype.mapTypes = function (nsName, iterator, trait) {\n var type = Object(__WEBPACK_IMPORTED_MODULE_1__utils__[\"e\" /* isBuiltIn */])(nsName.name) ? { name: nsName.name } : this.typeMap[nsName.name];\n\n var self = this;\n\n /**\r\n * Traverse the selected trait.\r\n *\r\n * @param {String} cls\r\n */\n function traverseTrait(cls) {\n return traverseSuper(cls, true);\n }\n\n /**\r\n * Traverse the selected super type or trait\r\n *\r\n * @param {String} cls\r\n * @param {Boolean} [trait=false]\r\n */\n function traverseSuper(cls, trait) {\n var parentNs = Object(__WEBPACK_IMPORTED_MODULE_1__utils__[\"g\" /* parseName */])(cls, Object(__WEBPACK_IMPORTED_MODULE_1__utils__[\"e\" /* isBuiltIn */])(cls) ? '' : nsName.prefix);\n self.mapTypes(parentNs, iterator, trait);\n }\n\n if (!type) {\n throw new Error('unknown type <' + nsName.name + '>');\n }\n\n if (type.superClass) {\n type.superClass.forEach(function (cls) {\n if (trait) {\n traverseTrait(cls);\n } else {\n traverseSuper(cls);\n }\n });\n }\n\n // call iterator with (type, inherited=!trait)\n iterator(type, !trait);\n\n if (type.traits && type.traits.length > 0) {\n type.traits.forEach(function (trait) {\n traverseTrait(trait);\n });\n }\n};\n\n/**\r\n * Returns the effective descriptor for a type.\r\n *\r\n * @param {String} type the namespaced name (ns:localName) of the type\r\n *\r\n * @return {Descriptor} the resulting effective descriptor\r\n */\nRegistry.prototype.getEffectiveDescriptor = function (name) {\n var nsName = Object(__WEBPACK_IMPORTED_MODULE_1__utils__[\"g\" /* parseName */])(name);\n\n var builder = new __WEBPACK_IMPORTED_MODULE_0__descriptor_builder__[\"a\" /* default */](nsName);\n\n this.mapTypes(nsName, function (type, inherited) {\n builder.addTrait(type, inherited);\n });\n\n var descriptor = builder.build();\n\n // define package link\n this.definePackage(descriptor, descriptor.allTypes[descriptor.allTypes.length - 1].$pkg);\n\n return descriptor;\n};\n\nRegistry.prototype.definePackage = function (target, pkg) {\n this.properties.define(target, '$pkg', { value: pkg });\n};\n\nfunction ensureAvailable(packageMap, pkg, identifierKey) {\n var value = pkg[identifierKey];\n\n if (value in packageMap) {\n throw new Error('package with ' + identifierKey + ' <' + value + '> already defined');\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3htbC9tb2RlbC9yZWdpc3RyeS5qcz85ODFlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEZXNjcmlwdG9yQnVpbGRlciBmcm9tICcuL2Rlc2NyaXB0b3ItYnVpbGRlcidcclxuaW1wb3J0IHsgaXNCdWlsdEluIGFzIGlzQnVpbHRJblR5cGUsIHBhcnNlTmFtZSBhcyBwYXJzZU5hbWVOcyB9IGZyb20gJy4uL3V0aWxzJ1xyXG5cclxuLyoqXHJcbiAqIEEgcmVnaXN0cnkgb2YgTW9kZWwgcGFja2FnZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7QXJyYXk8UGFja2FnZT59IHBhY2thZ2VzXHJcbiAqIEBwYXJhbSB7UHJvcGVydGllc30gcHJvcGVydGllc1xyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVnaXN0cnkocGFja2FnZXMsIHByb3BlcnRpZXMpIHtcclxuICB0aGlzLnBhY2thZ2VNYXAgPSB7fVxyXG4gIHRoaXMudHlwZU1hcCA9IHt9XHJcblxyXG4gIHRoaXMucGFja2FnZXMgPSBbXVxyXG5cclxuICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzXHJcblxyXG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwYWNrYWdlcylcclxuICBrZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgIHRoaXMucmVnaXN0ZXJQYWNrYWdlKHBhY2thZ2VzW2tleV0pXHJcbiAgfSlcclxuXHJcbiAgLy8gZm9yRWFjaChwYWNrYWdlcywgdGhpcy5yZWdpc3RlclBhY2thZ2UuYmluZCh0aGlzKSlcclxufVxyXG5cclxuUmVnaXN0cnkucHJvdG90eXBlLmdldFBhY2thZ2UgPSBmdW5jdGlvbih1cmlPclByZWZpeCkge1xyXG4gIHJldHVybiB0aGlzLnBhY2thZ2VNYXBbdXJpT3JQcmVmaXhdXHJcbn1cclxuXHJcblJlZ2lzdHJ5LnByb3RvdHlwZS5nZXRQYWNrYWdlcyA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiB0aGlzLnBhY2thZ2VzXHJcbn1cclxuXHJcblJlZ2lzdHJ5LnByb3RvdHlwZS5yZWdpc3RlclBhY2thZ2UgPSBmdW5jdGlvbihwa2cpIHtcclxuICAvLyBjb3B5IHBhY2thZ2VcclxuICBwa2cgPSBPYmplY3QuYXNzaWduKHt9LCBwa2cpXHJcblxyXG4gIHZhciBwa2dNYXAgPSB0aGlzLnBhY2thZ2VNYXBcclxuXHJcbiAgZW5zdXJlQXZhaWxhYmxlKHBrZ01hcCwgcGtnLCAncHJlZml4JylcclxuICBlbnN1cmVBdmFpbGFibGUocGtnTWFwLCBwa2csICd1cmknKVxyXG5cclxuICAvLyByZWdpc3RlciB0eXBlc1xyXG4gIHBrZy50eXBlcy5mb3JFYWNoKGRlc2NyaXB0b3IgPT4ge1xyXG4gICAgdGhpcy5yZWdpc3RlclR5cGUoZGVzY3JpcHRvciwgcGtnKVxyXG4gIH0pXHJcblxyXG4gIC8vIGZvckVhY2goXHJcbiAgLy8gICBwa2cudHlwZXMsXHJcbiAgLy8gICBmdW5jdGlvbihkZXNjcmlwdG9yKSB7XHJcbiAgLy8gICAgIHRoaXMucmVnaXN0ZXJUeXBlKGRlc2NyaXB0b3IsIHBrZylcclxuICAvLyAgIH0uYmluZCh0aGlzKVxyXG4gIC8vIClcclxuXHJcbiAgcGtnTWFwW3BrZy51cmldID0gcGtnTWFwW3BrZy5wcmVmaXhdID0gcGtnXHJcbiAgdGhpcy5wYWNrYWdlcy5wdXNoKHBrZylcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlZ2lzdGVyIGEgdHlwZSBmcm9tIGEgc3BlY2lmaWMgcGFja2FnZSB3aXRoIHVzXHJcbiAqL1xyXG5SZWdpc3RyeS5wcm90b3R5cGUucmVnaXN0ZXJUeXBlID0gZnVuY3Rpb24odHlwZSwgcGtnKSB7XHJcbiAgdHlwZSA9IE9iamVjdC5hc3NpZ24oe30sIHR5cGUsIHtcclxuICAgIHN1cGVyQ2xhc3M6ICh0eXBlLnN1cGVyQ2xhc3MgfHwgW10pLnNsaWNlKCksXHJcbiAgICBleHRlbmRzOiAodHlwZS5leHRlbmRzIHx8IFtdKS5zbGljZSgpLFxyXG4gICAgcHJvcGVydGllczogKHR5cGUucHJvcGVydGllcyB8fCBbXSkuc2xpY2UoKSxcclxuICAgIG1ldGE6IE9iamVjdC5hc3NpZ24oKHt9LCB0eXBlLm1ldGEgfHwge30pKVxyXG4gIH0pXHJcblxyXG4gIHZhciBucyA9IHBhcnNlTmFtZU5zKHR5cGUubmFtZSwgcGtnLnByZWZpeClcclxuXHJcbiAgdmFyIG5hbWUgPSBucy5uYW1lXHJcblxyXG4gIHZhciBwcm9wZXJ0aWVzQnlOYW1lID0ge31cclxuXHJcbiAgLy8gcGFyc2UgcHJvcGVydGllc1xyXG4gIHR5cGUucHJvcGVydGllcy5mb3JFYWNoKHAgPT4ge1xyXG4gICAgLy8gbmFtZXNwYWNlIHByb3BlcnR5IG5hbWVzXHJcbiAgICB2YXIgcHJvcGVydHlOcyA9IHBhcnNlTmFtZU5zKHAubmFtZSwgbnMucHJlZml4KVxyXG5cclxuICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5zLm5hbWVcclxuXHJcbiAgICAvLyBuYW1lc3BhY2UgcHJvcGVydHkgdHlwZXNcclxuICAgIGlmICghaXNCdWlsdEluVHlwZShwLnR5cGUpKSB7XHJcbiAgICAgIHAudHlwZSA9IHBhcnNlTmFtZU5zKHAudHlwZSwgcHJvcGVydHlOcy5wcmVmaXgpLm5hbWVcclxuICAgIH1cclxuXHJcbiAgICBPYmplY3QuYXNzaWduKHAsIHtcclxuICAgICAgbnM6IHByb3BlcnR5TnMsXHJcbiAgICAgIG5hbWU6IHByb3BlcnR5TmFtZVxyXG4gICAgfSlcclxuXHJcbiAgICBwcm9wZXJ0aWVzQnlOYW1lW3Byb3BlcnR5TmFtZV0gPSBwXHJcbiAgfSlcclxuXHJcbiAgLy8gZm9yRWFjaCh0eXBlLnByb3BlcnRpZXMsIGZ1bmN0aW9uKHApIHtcclxuICAvLyAgIC8vIG5hbWVzcGFjZSBwcm9wZXJ0eSBuYW1lc1xyXG4gIC8vICAgdmFyIHByb3BlcnR5TnMgPSBwYXJzZU5hbWVOcyhwLm5hbWUsIG5zLnByZWZpeClcclxuXHJcbiAgLy8gICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOcy5uYW1lXHJcblxyXG4gIC8vICAgLy8gbmFtZXNwYWNlIHByb3BlcnR5IHR5cGVzXHJcbiAgLy8gICBpZiAoIWlzQnVpbHRJblR5cGUocC50eXBlKSkge1xyXG4gIC8vICAgICBwLnR5cGUgPSBwYXJzZU5hbWVOcyhwLnR5cGUsIHByb3BlcnR5TnMucHJlZml4KS5uYW1lXHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgT2JqZWN0LmFzc2lnbihwLCB7XHJcbiAgLy8gICAgIG5zOiBwcm9wZXJ0eU5zLFxyXG4gIC8vICAgICBuYW1lOiBwcm9wZXJ0eU5hbWVcclxuICAvLyAgIH0pXHJcblxyXG4gIC8vICAgcHJvcGVydGllc0J5TmFtZVtwcm9wZXJ0eU5hbWVdID0gcFxyXG4gIC8vIH0pXHJcblxyXG4gIC8vIHVwZGF0ZSBucyArIG5hbWVcclxuICBPYmplY3QuYXNzaWduKHR5cGUsIHtcclxuICAgIG5zOiBucyxcclxuICAgIG5hbWU6IG5hbWUsXHJcbiAgICBwcm9wZXJ0aWVzQnlOYW1lOiBwcm9wZXJ0aWVzQnlOYW1lXHJcbiAgfSlcclxuXHJcbiAgdHlwZS5leHRlbmRzLmZvckVhY2goZXh0ZW5kc05hbWUgPT4ge1xyXG4gICAgdmFyIGV4dGVuZGVkID0gdGhpcy50eXBlTWFwW2V4dGVuZHNOYW1lXVxyXG5cclxuICAgIGV4dGVuZGVkLnRyYWl0cyA9IGV4dGVuZGVkLnRyYWl0cyB8fCBbXVxyXG4gICAgZXh0ZW5kZWQudHJhaXRzLnB1c2gobmFtZSlcclxuICB9KVxyXG5cclxuICAvLyBsaW5rIHRvIHBhY2thZ2VcclxuICB0aGlzLmRlZmluZVBhY2thZ2UodHlwZSwgcGtnKVxyXG5cclxuICAvLyByZWdpc3RlclxyXG4gIHRoaXMudHlwZU1hcFtuYW1lXSA9IHR5cGVcclxufVxyXG5cclxuLyoqXHJcbiAqIFRyYXZlcnNlIHRoZSB0eXBlIGhpZXJhcmNoeSBmcm9tIGJvdHRvbSB0byB0b3AsXHJcbiAqIGNhbGxpbmcgaXRlcmF0b3Igd2l0aCAodHlwZSwgaW5oZXJpdGVkKSBmb3IgYWxsIGVsZW1lbnRzIGluXHJcbiAqIHRoZSBpbmhlcml0YW5jZSBjaGFpbi5cclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IG5zTmFtZVxyXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvclxyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFt0cmFpdD1mYWxzZV1cclxuICovXHJcblJlZ2lzdHJ5LnByb3RvdHlwZS5tYXBUeXBlcyA9IGZ1bmN0aW9uKG5zTmFtZSwgaXRlcmF0b3IsIHRyYWl0KSB7XHJcbiAgdmFyIHR5cGUgPSBpc0J1aWx0SW5UeXBlKG5zTmFtZS5uYW1lKVxyXG4gICAgPyB7IG5hbWU6IG5zTmFtZS5uYW1lIH1cclxuICAgIDogdGhpcy50eXBlTWFwW25zTmFtZS5uYW1lXVxyXG5cclxuICB2YXIgc2VsZiA9IHRoaXNcclxuXHJcbiAgLyoqXHJcbiAgICogVHJhdmVyc2UgdGhlIHNlbGVjdGVkIHRyYWl0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNsc1xyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRyYXZlcnNlVHJhaXQoY2xzKSB7XHJcbiAgICByZXR1cm4gdHJhdmVyc2VTdXBlcihjbHMsIHRydWUpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmF2ZXJzZSB0aGUgc2VsZWN0ZWQgc3VwZXIgdHlwZSBvciB0cmFpdFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IGNsc1xyXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gW3RyYWl0PWZhbHNlXVxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRyYXZlcnNlU3VwZXIoY2xzLCB0cmFpdCkge1xyXG4gICAgdmFyIHBhcmVudE5zID0gcGFyc2VOYW1lTnMoY2xzLCBpc0J1aWx0SW5UeXBlKGNscykgPyAnJyA6IG5zTmFtZS5wcmVmaXgpXHJcbiAgICBzZWxmLm1hcFR5cGVzKHBhcmVudE5zLCBpdGVyYXRvciwgdHJhaXQpXHJcbiAgfVxyXG5cclxuICBpZiAoIXR5cGUpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biB0eXBlIDwnICsgbnNOYW1lLm5hbWUgKyAnPicpXHJcbiAgfVxyXG5cclxuICBpZiAodHlwZS5zdXBlckNsYXNzKSB7XHJcbiAgICB0eXBlLnN1cGVyQ2xhc3MuZm9yRWFjaChjbHMgPT4ge1xyXG4gICAgICBpZiAodHJhaXQpIHtcclxuICAgICAgICB0cmF2ZXJzZVRyYWl0KGNscylcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0cmF2ZXJzZVN1cGVyKGNscylcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8vIGNhbGwgaXRlcmF0b3Igd2l0aCAodHlwZSwgaW5oZXJpdGVkPSF0cmFpdClcclxuICBpdGVyYXRvcih0eXBlLCAhdHJhaXQpXHJcblxyXG4gIGlmICh0eXBlLnRyYWl0cyAmJiB0eXBlLnRyYWl0cy5sZW5ndGggPiAwKSB7XHJcbiAgICB0eXBlLnRyYWl0cy5mb3JFYWNoKHRyYWl0ID0+IHtcclxuICAgICAgdHJhdmVyc2VUcmFpdCh0cmFpdClcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgZWZmZWN0aXZlIGRlc2NyaXB0b3IgZm9yIGEgdHlwZS5cclxuICpcclxuICogQHBhcmFtICB7U3RyaW5nfSB0eXBlIHRoZSBuYW1lc3BhY2VkIG5hbWUgKG5zOmxvY2FsTmFtZSkgb2YgdGhlIHR5cGVcclxuICpcclxuICogQHJldHVybiB7RGVzY3JpcHRvcn0gdGhlIHJlc3VsdGluZyBlZmZlY3RpdmUgZGVzY3JpcHRvclxyXG4gKi9cclxuUmVnaXN0cnkucHJvdG90eXBlLmdldEVmZmVjdGl2ZURlc2NyaXB0b3IgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgdmFyIG5zTmFtZSA9IHBhcnNlTmFtZU5zKG5hbWUpXHJcblxyXG4gIHZhciBidWlsZGVyID0gbmV3IERlc2NyaXB0b3JCdWlsZGVyKG5zTmFtZSlcclxuXHJcbiAgdGhpcy5tYXBUeXBlcyhuc05hbWUsIGZ1bmN0aW9uKHR5cGUsIGluaGVyaXRlZCkge1xyXG4gICAgYnVpbGRlci5hZGRUcmFpdCh0eXBlLCBpbmhlcml0ZWQpXHJcbiAgfSlcclxuXHJcbiAgdmFyIGRlc2NyaXB0b3IgPSBidWlsZGVyLmJ1aWxkKClcclxuXHJcbiAgLy8gZGVmaW5lIHBhY2thZ2UgbGlua1xyXG4gIHRoaXMuZGVmaW5lUGFja2FnZShcclxuICAgIGRlc2NyaXB0b3IsXHJcbiAgICBkZXNjcmlwdG9yLmFsbFR5cGVzW2Rlc2NyaXB0b3IuYWxsVHlwZXMubGVuZ3RoIC0gMV0uJHBrZ1xyXG4gIClcclxuXHJcbiAgcmV0dXJuIGRlc2NyaXB0b3JcclxufVxyXG5cclxuUmVnaXN0cnkucHJvdG90eXBlLmRlZmluZVBhY2thZ2UgPSBmdW5jdGlvbih0YXJnZXQsIHBrZykge1xyXG4gIHRoaXMucHJvcGVydGllcy5kZWZpbmUodGFyZ2V0LCAnJHBrZycsIHsgdmFsdWU6IHBrZyB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiBlbnN1cmVBdmFpbGFibGUocGFja2FnZU1hcCwgcGtnLCBpZGVudGlmaWVyS2V5KSB7XHJcbiAgdmFyIHZhbHVlID0gcGtnW2lkZW50aWZpZXJLZXldXHJcblxyXG4gIGlmICh2YWx1ZSBpbiBwYWNrYWdlTWFwKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICdwYWNrYWdlIHdpdGggJyArIGlkZW50aWZpZXJLZXkgKyAnIDwnICsgdmFsdWUgKyAnPiBhbHJlYWR5IGRlZmluZWQnXHJcbiAgICApXHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZmVhdHVyZXMveG1sL21vZGVsL3JlZ2lzdHJ5LmpzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///33\n"); + +/***/ }), +/* 34 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony export (immutable) */ __webpack_exports__[\"a\"] = DescriptorBuilder;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(5);\n\n\nfunction pick(target, properties) {\n var result = {};\n\n var obj = Object(target);\n\n properties.forEach(function (prop) {\n if (prop in obj) {\n result[prop] = target[prop];\n }\n });\n\n return result;\n}\n\n/**\r\n * A utility to build element descriptors.\r\n */\nfunction DescriptorBuilder(nameNs) {\n this.ns = nameNs;\n this.name = nameNs.name;\n this.allTypes = [];\n this.allTypesByName = {};\n this.properties = [];\n this.propertiesByName = {};\n}\n\nDescriptorBuilder.prototype.build = function () {\n return pick(this, ['ns', 'name', 'allTypes', 'allTypesByName', 'properties', 'propertiesByName', 'bodyProperty', 'idProperty']);\n};\n\n/**\r\n * Add property at given index.\r\n *\r\n * @param {Object} p\r\n * @param {Number} [idx]\r\n * @param {Boolean} [validate=true]\r\n */\nDescriptorBuilder.prototype.addProperty = function (p, idx, validate) {\n if (typeof idx === 'boolean') {\n validate = idx;\n idx = undefined;\n }\n\n this.addNamedProperty(p, validate !== false);\n\n var properties = this.properties;\n\n if (idx !== undefined) {\n properties.splice(idx, 0, p);\n } else {\n properties.push(p);\n }\n};\n\nDescriptorBuilder.prototype.replaceProperty = function (oldProperty, newProperty, replace) {\n var oldNameNs = oldProperty.ns;\n\n var props = this.properties;\n\n var propertiesByName = this.propertiesByName;\n\n var rename = oldProperty.name !== newProperty.name;\n\n if (oldProperty.isId) {\n if (!newProperty.isId) {\n throw new Error('property <' + newProperty.ns.name + '> must be id property ' + 'to refine <' + oldProperty.ns.name + '>');\n }\n\n this.setIdProperty(newProperty, false);\n }\n\n if (oldProperty.isBody) {\n if (!newProperty.isBody) {\n throw new Error('property <' + newProperty.ns.name + '> must be body property ' + 'to refine <' + oldProperty.ns.name + '>');\n }\n\n // TODO: Check compatibility\n this.setBodyProperty(newProperty, false);\n }\n\n // validate existence and get location of old property\n var idx = props.indexOf(oldProperty);\n if (idx === -1) {\n throw new Error('property <' + oldNameNs.name + '> not found in property list');\n }\n\n // remove old property\n props.splice(idx, 1);\n\n // replacing the named property is intentional\n //\n // * validate only if this is a \"rename\" operation\n // * add at specific index unless we \"replace\"\n //\n this.addProperty(newProperty, replace ? undefined : idx, rename);\n\n // make new property available under old name\n propertiesByName[oldNameNs.name] = propertiesByName[oldNameNs.localName] = newProperty;\n};\n\nDescriptorBuilder.prototype.redefineProperty = function (p, targetPropertyName, replace) {\n var nsPrefix = p.ns.prefix;\n var parts = targetPropertyName.split('#');\n\n var name = Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"g\" /* parseName */])(parts[0], nsPrefix);\n var attrName = Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"g\" /* parseName */])(parts[1], name.prefix).name;\n\n var redefinedProperty = this.propertiesByName[attrName];\n if (!redefinedProperty) {\n throw new Error('refined property <' + attrName + '> not found');\n } else {\n this.replaceProperty(redefinedProperty, p, replace);\n }\n\n delete p.redefines;\n};\n\nDescriptorBuilder.prototype.addNamedProperty = function (p, validate) {\n var ns = p.ns;\n\n var propsByName = this.propertiesByName;\n\n if (validate) {\n this.assertNotDefined(p, ns.name);\n this.assertNotDefined(p, ns.localName);\n }\n\n propsByName[ns.name] = propsByName[ns.localName] = p;\n};\n\nDescriptorBuilder.prototype.removeNamedProperty = function (p) {\n var ns = p.ns;\n\n var propsByName = this.propertiesByName;\n\n delete propsByName[ns.name];\n delete propsByName[ns.localName];\n};\n\nDescriptorBuilder.prototype.setBodyProperty = function (p, validate) {\n if (validate && this.bodyProperty) {\n throw new Error('body property defined multiple times ' + '(<' + this.bodyProperty.ns.name + '>, <' + p.ns.name + '>)');\n }\n\n this.bodyProperty = p;\n};\n\nDescriptorBuilder.prototype.setIdProperty = function (p, validate) {\n if (validate && this.idProperty) {\n throw new Error('id property defined multiple times ' + '(<' + this.idProperty.ns.name + '>, <' + p.ns.name + '>)');\n }\n\n this.idProperty = p;\n};\n\nDescriptorBuilder.prototype.assertNotDefined = function (p, name) {\n var propertyName = p.name;\n\n var definedProperty = this.propertiesByName[propertyName];\n\n if (definedProperty) {\n throw new Error('property <' + propertyName + '> already defined; ' + 'override of <' + definedProperty.definedBy.ns.name + '#' + definedProperty.ns.name + '> by ' + '<' + p.definedBy.ns.name + '#' + p.ns.name + '> not allowed without redefines');\n }\n};\n\nDescriptorBuilder.prototype.hasProperty = function (name) {\n return this.propertiesByName[name];\n};\n\nDescriptorBuilder.prototype.addTrait = function (t, inherited) {\n var _this = this;\n\n var typesByName = this.allTypesByName;\n\n var types = this.allTypes;\n\n var typeName = t.name;\n\n if (typeName in typesByName) {\n return;\n }\n\n if (t.properties) {\n t.properties.forEach(function (p) {\n // clone property to allow extensions\n p = Object.assign({}, p, {\n name: p.ns.localName,\n inherited: inherited\n });\n\n Object.defineProperty(p, 'definedBy', {\n value: t\n });\n\n var replaces = p.replaces;\n\n var redefines = p.redefines;\n\n // add replace/redefine support\n if (replaces || redefines) {\n _this.redefineProperty(p, replaces || redefines, replaces);\n } else {\n if (p.isBody) {\n _this.setBodyProperty(p);\n }\n if (p.isId) {\n _this.setIdProperty(p);\n }\n _this.addProperty(p);\n }\n });\n }\n\n types.push(t);\n typesByName[typeName] = t;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzQuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3htbC9tb2RlbC9kZXNjcmlwdG9yLWJ1aWxkZXIuanM/MTUwNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXJzZU5hbWUgYXMgcGFyc2VOYW1lTnMgfSBmcm9tICcuLi91dGlscydcclxuXHJcbmZ1bmN0aW9uIHBpY2sodGFyZ2V0LCBwcm9wZXJ0aWVzKSB7XHJcbiAgdmFyIHJlc3VsdCA9IHt9XHJcblxyXG4gIHZhciBvYmogPSBPYmplY3QodGFyZ2V0KVxyXG5cclxuICBwcm9wZXJ0aWVzLmZvckVhY2gocHJvcCA9PiB7XHJcbiAgICBpZiAocHJvcCBpbiBvYmopIHtcclxuICAgICAgcmVzdWx0W3Byb3BdID0gdGFyZ2V0W3Byb3BdXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIHJlc3VsdFxyXG59XHJcblxyXG4vKipcclxuICogQSB1dGlsaXR5IHRvIGJ1aWxkIGVsZW1lbnQgZGVzY3JpcHRvcnMuXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEZXNjcmlwdG9yQnVpbGRlcihuYW1lTnMpIHtcclxuICB0aGlzLm5zID0gbmFtZU5zXHJcbiAgdGhpcy5uYW1lID0gbmFtZU5zLm5hbWVcclxuICB0aGlzLmFsbFR5cGVzID0gW11cclxuICB0aGlzLmFsbFR5cGVzQnlOYW1lID0ge31cclxuICB0aGlzLnByb3BlcnRpZXMgPSBbXVxyXG4gIHRoaXMucHJvcGVydGllc0J5TmFtZSA9IHt9XHJcbn1cclxuXHJcbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiBwaWNrKHRoaXMsIFtcclxuICAgICducycsXHJcbiAgICAnbmFtZScsXHJcbiAgICAnYWxsVHlwZXMnLFxyXG4gICAgJ2FsbFR5cGVzQnlOYW1lJyxcclxuICAgICdwcm9wZXJ0aWVzJyxcclxuICAgICdwcm9wZXJ0aWVzQnlOYW1lJyxcclxuICAgICdib2R5UHJvcGVydHknLFxyXG4gICAgJ2lkUHJvcGVydHknXHJcbiAgXSlcclxufVxyXG5cclxuLyoqXHJcbiAqIEFkZCBwcm9wZXJ0eSBhdCBnaXZlbiBpbmRleC5cclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IHBcclxuICogQHBhcmFtIHtOdW1iZXJ9IFtpZHhdXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3ZhbGlkYXRlPXRydWVdXHJcbiAqL1xyXG5EZXNjcmlwdG9yQnVpbGRlci5wcm90b3R5cGUuYWRkUHJvcGVydHkgPSBmdW5jdGlvbihwLCBpZHgsIHZhbGlkYXRlKSB7XHJcbiAgaWYgKHR5cGVvZiBpZHggPT09ICdib29sZWFuJykge1xyXG4gICAgdmFsaWRhdGUgPSBpZHhcclxuICAgIGlkeCA9IHVuZGVmaW5lZFxyXG4gIH1cclxuXHJcbiAgdGhpcy5hZGROYW1lZFByb3BlcnR5KHAsIHZhbGlkYXRlICE9PSBmYWxzZSlcclxuXHJcbiAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXNcclxuXHJcbiAgaWYgKGlkeCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICBwcm9wZXJ0aWVzLnNwbGljZShpZHgsIDAsIHApXHJcbiAgfSBlbHNlIHtcclxuICAgIHByb3BlcnRpZXMucHVzaChwKVxyXG4gIH1cclxufVxyXG5cclxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnJlcGxhY2VQcm9wZXJ0eSA9IGZ1bmN0aW9uKFxyXG4gIG9sZFByb3BlcnR5LFxyXG4gIG5ld1Byb3BlcnR5LFxyXG4gIHJlcGxhY2VcclxuKSB7XHJcbiAgdmFyIG9sZE5hbWVOcyA9IG9sZFByb3BlcnR5Lm5zXHJcblxyXG4gIHZhciBwcm9wcyA9IHRoaXMucHJvcGVydGllc1xyXG5cclxuICB2YXIgcHJvcGVydGllc0J5TmFtZSA9IHRoaXMucHJvcGVydGllc0J5TmFtZVxyXG5cclxuICB2YXIgcmVuYW1lID0gb2xkUHJvcGVydHkubmFtZSAhPT0gbmV3UHJvcGVydHkubmFtZVxyXG5cclxuICBpZiAob2xkUHJvcGVydHkuaXNJZCkge1xyXG4gICAgaWYgKCFuZXdQcm9wZXJ0eS5pc0lkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAncHJvcGVydHkgPCcgK1xyXG4gICAgICAgICAgbmV3UHJvcGVydHkubnMubmFtZSArXHJcbiAgICAgICAgICAnPiBtdXN0IGJlIGlkIHByb3BlcnR5ICcgK1xyXG4gICAgICAgICAgJ3RvIHJlZmluZSA8JyArXHJcbiAgICAgICAgICBvbGRQcm9wZXJ0eS5ucy5uYW1lICtcclxuICAgICAgICAgICc+J1xyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRJZFByb3BlcnR5KG5ld1Byb3BlcnR5LCBmYWxzZSlcclxuICB9XHJcblxyXG4gIGlmIChvbGRQcm9wZXJ0eS5pc0JvZHkpIHtcclxuICAgIGlmICghbmV3UHJvcGVydHkuaXNCb2R5KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAncHJvcGVydHkgPCcgK1xyXG4gICAgICAgICAgbmV3UHJvcGVydHkubnMubmFtZSArXHJcbiAgICAgICAgICAnPiBtdXN0IGJlIGJvZHkgcHJvcGVydHkgJyArXHJcbiAgICAgICAgICAndG8gcmVmaW5lIDwnICtcclxuICAgICAgICAgIG9sZFByb3BlcnR5Lm5zLm5hbWUgK1xyXG4gICAgICAgICAgJz4nXHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvLyBUT0RPOiBDaGVjayBjb21wYXRpYmlsaXR5XHJcbiAgICB0aGlzLnNldEJvZHlQcm9wZXJ0eShuZXdQcm9wZXJ0eSwgZmFsc2UpXHJcbiAgfVxyXG5cclxuICAvLyB2YWxpZGF0ZSBleGlzdGVuY2UgYW5kIGdldCBsb2NhdGlvbiBvZiBvbGQgcHJvcGVydHlcclxuICB2YXIgaWR4ID0gcHJvcHMuaW5kZXhPZihvbGRQcm9wZXJ0eSlcclxuICBpZiAoaWR4ID09PSAtMSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAncHJvcGVydHkgPCcgKyBvbGROYW1lTnMubmFtZSArICc+IG5vdCBmb3VuZCBpbiBwcm9wZXJ0eSBsaXN0J1xyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgLy8gcmVtb3ZlIG9sZCBwcm9wZXJ0eVxyXG4gIHByb3BzLnNwbGljZShpZHgsIDEpXHJcblxyXG4gIC8vIHJlcGxhY2luZyB0aGUgbmFtZWQgcHJvcGVydHkgaXMgaW50ZW50aW9uYWxcclxuICAvL1xyXG4gIC8vICAqIHZhbGlkYXRlIG9ubHkgaWYgdGhpcyBpcyBhIFwicmVuYW1lXCIgb3BlcmF0aW9uXHJcbiAgLy8gICogYWRkIGF0IHNwZWNpZmljIGluZGV4IHVubGVzcyB3ZSBcInJlcGxhY2VcIlxyXG4gIC8vXHJcbiAgdGhpcy5hZGRQcm9wZXJ0eShuZXdQcm9wZXJ0eSwgcmVwbGFjZSA/IHVuZGVmaW5lZCA6IGlkeCwgcmVuYW1lKVxyXG5cclxuICAvLyBtYWtlIG5ldyBwcm9wZXJ0eSBhdmFpbGFibGUgdW5kZXIgb2xkIG5hbWVcclxuICBwcm9wZXJ0aWVzQnlOYW1lW29sZE5hbWVOcy5uYW1lXSA9IHByb3BlcnRpZXNCeU5hbWVbXHJcbiAgICBvbGROYW1lTnMubG9jYWxOYW1lXHJcbiAgXSA9IG5ld1Byb3BlcnR5XHJcbn1cclxuXHJcbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5yZWRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24oXHJcbiAgcCxcclxuICB0YXJnZXRQcm9wZXJ0eU5hbWUsXHJcbiAgcmVwbGFjZVxyXG4pIHtcclxuICB2YXIgbnNQcmVmaXggPSBwLm5zLnByZWZpeFxyXG4gIHZhciBwYXJ0cyA9IHRhcmdldFByb3BlcnR5TmFtZS5zcGxpdCgnIycpXHJcblxyXG4gIHZhciBuYW1lID0gcGFyc2VOYW1lTnMocGFydHNbMF0sIG5zUHJlZml4KVxyXG4gIHZhciBhdHRyTmFtZSA9IHBhcnNlTmFtZU5zKHBhcnRzWzFdLCBuYW1lLnByZWZpeCkubmFtZVxyXG5cclxuICB2YXIgcmVkZWZpbmVkUHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXNCeU5hbWVbYXR0ck5hbWVdXHJcbiAgaWYgKCFyZWRlZmluZWRQcm9wZXJ0eSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWZpbmVkIHByb3BlcnR5IDwnICsgYXR0ck5hbWUgKyAnPiBub3QgZm91bmQnKVxyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnJlcGxhY2VQcm9wZXJ0eShyZWRlZmluZWRQcm9wZXJ0eSwgcCwgcmVwbGFjZSlcclxuICB9XHJcblxyXG4gIGRlbGV0ZSBwLnJlZGVmaW5lc1xyXG59XHJcblxyXG5EZXNjcmlwdG9yQnVpbGRlci5wcm90b3R5cGUuYWRkTmFtZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uKHAsIHZhbGlkYXRlKSB7XHJcbiAgdmFyIG5zID0gcC5uc1xyXG5cclxuICB2YXIgcHJvcHNCeU5hbWUgPSB0aGlzLnByb3BlcnRpZXNCeU5hbWVcclxuXHJcbiAgaWYgKHZhbGlkYXRlKSB7XHJcbiAgICB0aGlzLmFzc2VydE5vdERlZmluZWQocCwgbnMubmFtZSlcclxuICAgIHRoaXMuYXNzZXJ0Tm90RGVmaW5lZChwLCBucy5sb2NhbE5hbWUpXHJcbiAgfVxyXG5cclxuICBwcm9wc0J5TmFtZVtucy5uYW1lXSA9IHByb3BzQnlOYW1lW25zLmxvY2FsTmFtZV0gPSBwXHJcbn1cclxuXHJcbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5yZW1vdmVOYW1lZFByb3BlcnR5ID0gZnVuY3Rpb24ocCkge1xyXG4gIHZhciBucyA9IHAubnNcclxuXHJcbiAgdmFyIHByb3BzQnlOYW1lID0gdGhpcy5wcm9wZXJ0aWVzQnlOYW1lXHJcblxyXG4gIGRlbGV0ZSBwcm9wc0J5TmFtZVtucy5uYW1lXVxyXG4gIGRlbGV0ZSBwcm9wc0J5TmFtZVtucy5sb2NhbE5hbWVdXHJcbn1cclxuXHJcbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5zZXRCb2R5UHJvcGVydHkgPSBmdW5jdGlvbihwLCB2YWxpZGF0ZSkge1xyXG4gIGlmICh2YWxpZGF0ZSAmJiB0aGlzLmJvZHlQcm9wZXJ0eSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAnYm9keSBwcm9wZXJ0eSBkZWZpbmVkIG11bHRpcGxlIHRpbWVzICcgK1xyXG4gICAgICAgICcoPCcgK1xyXG4gICAgICAgIHRoaXMuYm9keVByb3BlcnR5Lm5zLm5hbWUgK1xyXG4gICAgICAgICc+LCA8JyArXHJcbiAgICAgICAgcC5ucy5uYW1lICtcclxuICAgICAgICAnPiknXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICB0aGlzLmJvZHlQcm9wZXJ0eSA9IHBcclxufVxyXG5cclxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLnNldElkUHJvcGVydHkgPSBmdW5jdGlvbihwLCB2YWxpZGF0ZSkge1xyXG4gIGlmICh2YWxpZGF0ZSAmJiB0aGlzLmlkUHJvcGVydHkpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgJ2lkIHByb3BlcnR5IGRlZmluZWQgbXVsdGlwbGUgdGltZXMgJyArXHJcbiAgICAgICAgJyg8JyArXHJcbiAgICAgICAgdGhpcy5pZFByb3BlcnR5Lm5zLm5hbWUgK1xyXG4gICAgICAgICc+LCA8JyArXHJcbiAgICAgICAgcC5ucy5uYW1lICtcclxuICAgICAgICAnPiknXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICB0aGlzLmlkUHJvcGVydHkgPSBwXHJcbn1cclxuXHJcbkRlc2NyaXB0b3JCdWlsZGVyLnByb3RvdHlwZS5hc3NlcnROb3REZWZpbmVkID0gZnVuY3Rpb24ocCwgbmFtZSkge1xyXG4gIHZhciBwcm9wZXJ0eU5hbWUgPSBwLm5hbWVcclxuXHJcbiAgdmFyIGRlZmluZWRQcm9wZXJ0eSA9IHRoaXMucHJvcGVydGllc0J5TmFtZVtwcm9wZXJ0eU5hbWVdXHJcblxyXG4gIGlmIChkZWZpbmVkUHJvcGVydHkpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgJ3Byb3BlcnR5IDwnICtcclxuICAgICAgICBwcm9wZXJ0eU5hbWUgK1xyXG4gICAgICAgICc+IGFscmVhZHkgZGVmaW5lZDsgJyArXHJcbiAgICAgICAgJ292ZXJyaWRlIG9mIDwnICtcclxuICAgICAgICBkZWZpbmVkUHJvcGVydHkuZGVmaW5lZEJ5Lm5zLm5hbWUgK1xyXG4gICAgICAgICcjJyArXHJcbiAgICAgICAgZGVmaW5lZFByb3BlcnR5Lm5zLm5hbWUgK1xyXG4gICAgICAgICc+IGJ5ICcgK1xyXG4gICAgICAgICc8JyArXHJcbiAgICAgICAgcC5kZWZpbmVkQnkubnMubmFtZSArXHJcbiAgICAgICAgJyMnICtcclxuICAgICAgICBwLm5zLm5hbWUgK1xyXG4gICAgICAgICc+IG5vdCBhbGxvd2VkIHdpdGhvdXQgcmVkZWZpbmVzJ1xyXG4gICAgKVxyXG4gIH1cclxufVxyXG5cclxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmhhc1Byb3BlcnR5ID0gZnVuY3Rpb24obmFtZSkge1xyXG4gIHJldHVybiB0aGlzLnByb3BlcnRpZXNCeU5hbWVbbmFtZV1cclxufVxyXG5cclxuRGVzY3JpcHRvckJ1aWxkZXIucHJvdG90eXBlLmFkZFRyYWl0ID0gZnVuY3Rpb24odCwgaW5oZXJpdGVkKSB7XHJcbiAgdmFyIHR5cGVzQnlOYW1lID0gdGhpcy5hbGxUeXBlc0J5TmFtZVxyXG5cclxuICB2YXIgdHlwZXMgPSB0aGlzLmFsbFR5cGVzXHJcblxyXG4gIHZhciB0eXBlTmFtZSA9IHQubmFtZVxyXG5cclxuICBpZiAodHlwZU5hbWUgaW4gdHlwZXNCeU5hbWUpIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuXHJcbiAgaWYgKHQucHJvcGVydGllcykge1xyXG4gICAgdC5wcm9wZXJ0aWVzLmZvckVhY2gocCA9PiB7XHJcbiAgICAgIC8vIGNsb25lIHByb3BlcnR5IHRvIGFsbG93IGV4dGVuc2lvbnNcclxuICAgICAgcCA9IE9iamVjdC5hc3NpZ24oe30sIHAsIHtcclxuICAgICAgICBuYW1lOiBwLm5zLmxvY2FsTmFtZSxcclxuICAgICAgICBpbmhlcml0ZWQ6IGluaGVyaXRlZFxyXG4gICAgICB9KVxyXG5cclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsICdkZWZpbmVkQnknLCB7XHJcbiAgICAgICAgdmFsdWU6IHRcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHZhciByZXBsYWNlcyA9IHAucmVwbGFjZXNcclxuXHJcbiAgICAgIHZhciByZWRlZmluZXMgPSBwLnJlZGVmaW5lc1xyXG5cclxuICAgICAgLy8gYWRkIHJlcGxhY2UvcmVkZWZpbmUgc3VwcG9ydFxyXG4gICAgICBpZiAocmVwbGFjZXMgfHwgcmVkZWZpbmVzKSB7XHJcbiAgICAgICAgdGhpcy5yZWRlZmluZVByb3BlcnR5KHAsIHJlcGxhY2VzIHx8IHJlZGVmaW5lcywgcmVwbGFjZXMpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHAuaXNCb2R5KSB7XHJcbiAgICAgICAgICB0aGlzLnNldEJvZHlQcm9wZXJ0eShwKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocC5pc0lkKSB7XHJcbiAgICAgICAgICB0aGlzLnNldElkUHJvcGVydHkocClcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZGRQcm9wZXJ0eShwKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdHlwZXMucHVzaCh0KVxyXG4gIHR5cGVzQnlOYW1lW3R5cGVOYW1lXSA9IHRcclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2ZlYXR1cmVzL3htbC9tb2RlbC9kZXNjcmlwdG9yLWJ1aWxkZXIuanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVUE7QUFDQTtBQUNBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQURBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///34\n"); + +/***/ }), +/* 35 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony export (immutable) */ __webpack_exports__[\"a\"] = Properties;\n/**\r\n * A utility that gets and sets properties of model elements.\r\n *\r\n * @param {Model} model\r\n */\nfunction Properties(model) {\n this.model = model;\n}\n\n/**\r\n * Sets a named property on the target element.\r\n * If the value is undefined, the property gets deleted.\r\n *\r\n * @param {Object} target\r\n * @param {String} name\r\n * @param {Object} value\r\n */\nProperties.prototype.set = function (target, name, value) {\n var property = this.model.getPropertyDescriptor(target, name);\n\n var propertyName = property && property.name;\n\n if (isUndefined(value)) {\n // unset the property, if the specified value is undefined;\n // delete from $attrs (for extensions) or the target itself\n if (property) {\n delete target[propertyName];\n } else {\n delete target.$attrs[name];\n }\n } else {\n // set the property, defining well defined properties on the fly\n // or simply updating them in target.$attrs (for extensions)\n if (property) {\n if (propertyName in target) {\n target[propertyName] = value;\n } else {\n defineProperty(target, property, value);\n }\n } else {\n target.$attrs[name] = value;\n }\n }\n};\n\n/**\r\n * Returns the named property of the given element\r\n *\r\n * @param {Object} target\r\n * @param {String} name\r\n *\r\n * @return {Object}\r\n */\nProperties.prototype.get = function (target, name) {\n var property = this.model.getPropertyDescriptor(target, name);\n\n if (!property) {\n return target.$attrs[name];\n }\n\n var propertyName = property.name;\n\n // check if access to collection property and lazily initialize it\n if (!target[propertyName] && property.isMany) {\n defineProperty(target, property, []);\n }\n\n return target[propertyName];\n};\n\n/**\r\n * Define a property on the target element\r\n *\r\n * @param {Object} target\r\n * @param {String} name\r\n * @param {Object} options\r\n */\nProperties.prototype.define = function (target, name, options) {\n Object.defineProperty(target, name, options);\n};\n\n/**\r\n * Define the descriptor for an element\r\n */\nProperties.prototype.defineDescriptor = function (target, descriptor) {\n this.define(target, '$descriptor', { value: descriptor });\n};\n\n/**\r\n * Define the model for an element\r\n */\nProperties.prototype.defineModel = function (target, model) {\n this.define(target, '$model', { value: model });\n};\n\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\nfunction defineProperty(target, property, value) {\n Object.defineProperty(target, property.name, {\n enumerable: !property.isReference,\n writable: true,\n value: value,\n configurable: true\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3htbC9tb2RlbC9wcm9wZXJ0aWVzLmpzPzkxYjEiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEEgdXRpbGl0eSB0aGF0IGdldHMgYW5kIHNldHMgcHJvcGVydGllcyBvZiBtb2RlbCBlbGVtZW50cy5cclxuICpcclxuICogQHBhcmFtIHtNb2RlbH0gbW9kZWxcclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFByb3BlcnRpZXMobW9kZWwpIHtcclxuICB0aGlzLm1vZGVsID0gbW9kZWxcclxufVxyXG5cclxuLyoqXHJcbiAqIFNldHMgYSBuYW1lZCBwcm9wZXJ0eSBvbiB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAqIElmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIHRoZSBwcm9wZXJ0eSBnZXRzIGRlbGV0ZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcclxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcclxuICogQHBhcmFtIHtPYmplY3R9IHZhbHVlXHJcbiAqL1xyXG5Qcm9wZXJ0aWVzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbih0YXJnZXQsIG5hbWUsIHZhbHVlKSB7XHJcbiAgdmFyIHByb3BlcnR5ID0gdGhpcy5tb2RlbC5nZXRQcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBuYW1lKVxyXG5cclxuICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHkgJiYgcHJvcGVydHkubmFtZVxyXG5cclxuICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7XHJcbiAgICAvLyB1bnNldCB0aGUgcHJvcGVydHksIGlmIHRoZSBzcGVjaWZpZWQgdmFsdWUgaXMgdW5kZWZpbmVkO1xyXG4gICAgLy8gZGVsZXRlIGZyb20gJGF0dHJzIChmb3IgZXh0ZW5zaW9ucykgb3IgdGhlIHRhcmdldCBpdHNlbGZcclxuICAgIGlmIChwcm9wZXJ0eSkge1xyXG4gICAgICBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5TmFtZV1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlbGV0ZSB0YXJnZXQuJGF0dHJzW25hbWVdXHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIHNldCB0aGUgcHJvcGVydHksIGRlZmluaW5nIHdlbGwgZGVmaW5lZCBwcm9wZXJ0aWVzIG9uIHRoZSBmbHlcclxuICAgIC8vIG9yIHNpbXBseSB1cGRhdGluZyB0aGVtIGluIHRhcmdldC4kYXR0cnMgKGZvciBleHRlbnNpb25zKVxyXG4gICAgaWYgKHByb3BlcnR5KSB7XHJcbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgaW4gdGFyZ2V0KSB7XHJcbiAgICAgICAgdGFyZ2V0W3Byb3BlcnR5TmFtZV0gPSB2YWx1ZVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIHZhbHVlKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0YXJnZXQuJGF0dHJzW25hbWVdID0gdmFsdWVcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIHRoZSBuYW1lZCBwcm9wZXJ0eSBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxyXG4gKlxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IHRhcmdldFxyXG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWVcclxuICpcclxuICogQHJldHVybiB7T2JqZWN0fVxyXG4gKi9cclxuUHJvcGVydGllcy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24odGFyZ2V0LCBuYW1lKSB7XHJcbiAgdmFyIHByb3BlcnR5ID0gdGhpcy5tb2RlbC5nZXRQcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBuYW1lKVxyXG5cclxuICBpZiAoIXByb3BlcnR5KSB7XHJcbiAgICByZXR1cm4gdGFyZ2V0LiRhdHRyc1tuYW1lXVxyXG4gIH1cclxuXHJcbiAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5Lm5hbWVcclxuXHJcbiAgLy8gY2hlY2sgaWYgYWNjZXNzIHRvIGNvbGxlY3Rpb24gcHJvcGVydHkgYW5kIGxhemlseSBpbml0aWFsaXplIGl0XHJcbiAgaWYgKCF0YXJnZXRbcHJvcGVydHlOYW1lXSAmJiBwcm9wZXJ0eS5pc01hbnkpIHtcclxuICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIFtdKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eU5hbWVdXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZWZpbmUgYSBwcm9wZXJ0eSBvbiB0aGUgdGFyZ2V0IGVsZW1lbnRcclxuICpcclxuICogQHBhcmFtICB7T2JqZWN0fSB0YXJnZXRcclxuICogQHBhcmFtICB7U3RyaW5nfSBuYW1lXHJcbiAqIEBwYXJhbSAge09iamVjdH0gb3B0aW9uc1xyXG4gKi9cclxuUHJvcGVydGllcy5wcm90b3R5cGUuZGVmaW5lID0gZnVuY3Rpb24odGFyZ2V0LCBuYW1lLCBvcHRpb25zKSB7XHJcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbmFtZSwgb3B0aW9ucylcclxufVxyXG5cclxuLyoqXHJcbiAqIERlZmluZSB0aGUgZGVzY3JpcHRvciBmb3IgYW4gZWxlbWVudFxyXG4gKi9cclxuUHJvcGVydGllcy5wcm90b3R5cGUuZGVmaW5lRGVzY3JpcHRvciA9IGZ1bmN0aW9uKHRhcmdldCwgZGVzY3JpcHRvcikge1xyXG4gIHRoaXMuZGVmaW5lKHRhcmdldCwgJyRkZXNjcmlwdG9yJywgeyB2YWx1ZTogZGVzY3JpcHRvciB9KVxyXG59XHJcblxyXG4vKipcclxuICogRGVmaW5lIHRoZSBtb2RlbCBmb3IgYW4gZWxlbWVudFxyXG4gKi9cclxuUHJvcGVydGllcy5wcm90b3R5cGUuZGVmaW5lTW9kZWwgPSBmdW5jdGlvbih0YXJnZXQsIG1vZGVsKSB7XHJcbiAgdGhpcy5kZWZpbmUodGFyZ2V0LCAnJG1vZGVsJywgeyB2YWx1ZTogbW9kZWwgfSlcclxufVxyXG5cclxuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XHJcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XHJcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHkubmFtZSwge1xyXG4gICAgZW51bWVyYWJsZTogIXByb3BlcnR5LmlzUmVmZXJlbmNlLFxyXG4gICAgd3JpdGFibGU6IHRydWUsXHJcbiAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICBjb25maWd1cmFibGU6IHRydWVcclxuICB9KVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZmVhdHVyZXMveG1sL21vZGVsL3Byb3BlcnRpZXMuanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///35\n"); + +/***/ }), +/* 36 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__read__ = __webpack_require__(37);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return __WEBPACK_IMPORTED_MODULE_0__read__[\"a\"]; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__write__ = __webpack_require__(41);\n/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return __WEBPACK_IMPORTED_MODULE_1__write__[\"a\"]; });\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3htbC9tb2RlbC14bWwvaW5kZXguanM/YWYzZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBSZWFkZXIgfSBmcm9tICcuL3JlYWQnXHJcblxyXG5leHBvcnQgeyBXcml0ZXIgfSBmcm9tICcuL3dyaXRlJ1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2ZlYXR1cmVzL3htbC9tb2RlbC14bWwvaW5kZXguanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///36\n"); + +/***/ }), +/* 37 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* unused harmony export Context */\n/* unused harmony export ElementHandler */\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = Reader;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_tinyStack__ = __webpack_require__(38);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils_tinyStack___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__utils_tinyStack__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_saxen__ = __webpack_require__(40);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__model_model__ = __webpack_require__(8);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils__ = __webpack_require__(5);\n\n\n\n\n\n\nvar SaxParser = __WEBPACK_IMPORTED_MODULE_1__utils_saxen__[\"a\" /* default */].Parser;\n\nfunction find(collection, matcher) {\n matcher = typeof matcher === 'function' && matcher.constructor === Function ? matcher : function (e) {\n return e === matcher;\n };\n\n var match;\n\n collection.forEach(function (val, key) {\n if (matcher(val, key)) {\n match = val;\n\n return false;\n }\n });\n\n return match;\n}\n\nfunction capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nfunction aliasToName(aliasNs, pkg) {\n if (!Object(__WEBPACK_IMPORTED_MODULE_3__utils__[\"d\" /* hasLowerCaseAlias */])(pkg)) {\n return aliasNs.name;\n }\n\n return aliasNs.prefix + ':' + capitalize(aliasNs.localName);\n}\n\nfunction prefixedToName(nameNs, pkg) {\n var name = nameNs.name;\n\n var localName = nameNs.localName;\n\n var typePrefix = pkg.xml && pkg.xml.typePrefix;\n\n if (typePrefix && localName.indexOf(typePrefix) === 0) {\n return nameNs.prefix + ':' + localName.slice(typePrefix.length);\n } else {\n return name;\n }\n}\n\nfunction normalizeXsiTypeName(name, model) {\n var nameNs = Object(__WEBPACK_IMPORTED_MODULE_3__utils__[\"g\" /* parseName */])(name);\n var pkg = model.getPackage(nameNs.prefix);\n\n return prefixedToName(nameNs, pkg);\n}\n\nfunction error(message) {\n return new Error(message);\n}\n\n/**\r\n * Get the model descriptor for a given instance or type.\r\n *\r\n * @param {ModelElement|Function} element\r\n *\r\n * @return {Object} the model descriptor\r\n */\nfunction getModelDescriptor(element) {\n return element.$descriptor;\n}\n\nfunction defer(fn) {\n setTimeout(fn, 0);\n}\n\n/**\r\n * A parse context.\r\n *\r\n * @class\r\n *\r\n * @param {Object} options\r\n * @param {ElementHandler} options.rootHandler the root handler for parsing a document\r\n * @param {boolean} [options.lax=false] whether or not to ignore invalid elements\r\n */\nfunction Context(options) {\n /**\r\n * @property {ElementHandler} rootHandler\r\n */\n\n /**\r\n * @property {Boolean} lax\r\n */\n\n Object.assign(this, options);\n\n this.elementsById = {};\n this.references = [];\n this.warnings = [];\n\n /**\r\n * Add an unresolved reference.\r\n *\r\n * @param {Object} reference\r\n */\n this.addReference = function (reference) {\n this.references.push(reference);\n };\n\n /**\r\n * Add a processed element.\r\n *\r\n * @param {ModelElement} element\r\n */\n this.addElement = function (element) {\n if (!element) {\n throw error('expected element');\n }\n\n var elementsById = this.elementsById;\n\n var descriptor = getModelDescriptor(element);\n\n var idProperty = descriptor.idProperty;\n\n var id;\n\n if (idProperty) {\n id = element.get(idProperty.name);\n\n if (id) {\n if (elementsById[id]) {\n throw error('duplicate ID <' + id + '>');\n }\n\n elementsById[id] = element;\n }\n }\n };\n\n /**\r\n * Add an import warning.\r\n *\r\n * @param {Object} warning\r\n * @param {String} warning.message\r\n * @param {Error} [warning.error]\r\n */\n this.addWarning = function (warning) {\n this.warnings.push(warning);\n };\n}\n\nfunction BaseHandler() {}\n\nBaseHandler.prototype.handleEnd = function () {};\nBaseHandler.prototype.handleText = function () {};\nBaseHandler.prototype.handleNode = function () {};\n\n/**\r\n * A simple pass through handler that does nothing except for\r\n * ignoring all input it receives.\r\n *\r\n * This is used to ignore unknown elements and\r\n * attributes.\r\n */\nfunction NoopHandler() {}\n\nNoopHandler.prototype = Object.create(BaseHandler.prototype);\n\nNoopHandler.prototype.handleNode = function () {\n return this;\n};\n\nfunction BodyHandler() {}\n\nBodyHandler.prototype = Object.create(BaseHandler.prototype);\n\nBodyHandler.prototype.handleText = function (text) {\n this.body = (this.body || '') + text;\n};\n\nfunction ReferenceHandler(property, context) {\n this.property = property;\n this.context = context;\n}\n\nReferenceHandler.prototype = Object.create(BodyHandler.prototype);\n\nReferenceHandler.prototype.handleNode = function (node) {\n if (this.element) {\n throw error('expected no sub nodes');\n } else {\n this.element = this.createReference(node);\n }\n\n return this;\n};\n\nReferenceHandler.prototype.handleEnd = function () {\n this.element.id = this.body;\n};\n\nReferenceHandler.prototype.createReference = function (node) {\n return {\n property: this.property.ns.name,\n id: ''\n };\n};\n\nfunction ValueHandler(propertyDesc, element) {\n this.element = element;\n this.propertyDesc = propertyDesc;\n}\n\nValueHandler.prototype = Object.create(BodyHandler.prototype);\n\nValueHandler.prototype.handleEnd = function () {\n var value = this.body || '';\n\n var element = this.element;\n\n var propertyDesc = this.propertyDesc;\n\n value = Object(__WEBPACK_IMPORTED_MODULE_3__utils__[\"c\" /* coerceType */])(propertyDesc.type, value);\n\n if (propertyDesc.isMany) {\n element.get(propertyDesc.name).push(value);\n } else {\n element.set(propertyDesc.name, value);\n }\n};\n\nfunction BaseElementHandler() {}\n\nBaseElementHandler.prototype = Object.create(BodyHandler.prototype);\n\nBaseElementHandler.prototype.handleNode = function (node) {\n var parser = this;\n\n var element = this.element;\n\n if (!element) {\n element = this.element = this.createElement(node);\n\n this.context.addElement(element);\n } else {\n parser = this.handleChild(node);\n }\n\n return parser;\n};\n\n/**\r\n * @class Reader.ElementHandler\r\n *\r\n */\nfunction ElementHandler(model, typeName, context) {\n this.model = model;\n this.type = model.getType(typeName);\n this.context = context;\n}\n\nElementHandler.prototype = Object.create(BaseElementHandler.prototype);\n\nElementHandler.prototype.addReference = function (reference) {\n this.context.addReference(reference);\n};\n\nElementHandler.prototype.handleText = function (text) {\n var element = this.element;\n\n var descriptor = getModelDescriptor(element);\n\n var bodyProperty = descriptor.bodyProperty;\n\n if (!bodyProperty) {\n throw error('unexpected body text <' + text + '>');\n }\n\n BodyHandler.prototype.handleText.call(this, text);\n};\n\nElementHandler.prototype.handleEnd = function () {\n var value = this.body;\n\n var element = this.element;\n\n var descriptor = getModelDescriptor(element);\n\n var bodyProperty = descriptor.bodyProperty;\n\n if (bodyProperty && value !== undefined) {\n value = Object(__WEBPACK_IMPORTED_MODULE_3__utils__[\"c\" /* coerceType */])(bodyProperty.type, value);\n element.set(bodyProperty.name, value);\n }\n};\n\n/**\r\n * Create an instance of the model from the given node.\r\n *\r\n * @param {Element} node the xml node\r\n */\nElementHandler.prototype.createElement = function (node) {\n var attributes = node.attributes;\n\n var Type = this.type;\n\n var descriptor = getModelDescriptor(Type);\n\n var context = this.context;\n\n var instance = new Type({});\n\n var model = this.model;\n\n var propNameNs;\n\n var keys = Object.keys(attributes);\n\n keys.forEach(function (key) {\n var value = attributes[key];\n var prop = descriptor.propertiesByName[key];\n\n var values;\n\n if (prop && prop.isReference) {\n if (!prop.isMany) {\n context.addReference({\n element: instance,\n property: prop.ns.name,\n id: value\n });\n } else {\n values = value.split(' ');\n values.forEach(function (v) {\n context.addReference({\n element: instance,\n property: prop.ns.name,\n id: v\n });\n });\n }\n } else {\n if (prop) {\n value = Object(__WEBPACK_IMPORTED_MODULE_3__utils__[\"c\" /* coerceType */])(prop.type, value);\n } else if (key !== 'xmlns') {\n propNameNs = Object(__WEBPACK_IMPORTED_MODULE_3__utils__[\"g\" /* parseName */])(key, descriptor.ns.prefix);\n\n // check whether attribute is defined in a well-known namespace\n // if that is the case we emit a warning to indicate potential misuse\n if (model.getPackage(propNameNs.prefix)) {\n context.addWarning({\n message: 'unknown attribute <' + key + '>',\n element: instance,\n property: key,\n value: value\n });\n }\n }\n\n instance.set(key, value);\n }\n });\n\n return instance;\n};\n\nElementHandler.prototype.getPropertyForNode = function (node) {\n var name = node.name;\n var nameNs = Object(__WEBPACK_IMPORTED_MODULE_3__utils__[\"g\" /* parseName */])(name);\n\n var type = this.type;\n\n var model = this.model;\n\n var descriptor = getModelDescriptor(type);\n\n var propertyName = nameNs.name;\n\n var property = descriptor.propertiesByName[propertyName];\n\n var elementTypeName;\n\n var elementType;\n\n // search for properties by name first\n\n if (property) {\n if (Object(__WEBPACK_IMPORTED_MODULE_3__utils__[\"i\" /* serializeAsType */])(property)) {\n elementTypeName = node.attributes[__WEBPACK_IMPORTED_MODULE_3__utils__[\"b\" /* XSI_TYPE */]];\n\n // xsi type is optional, if it does not exists the\n // default type is assumed\n if (elementTypeName) {\n // take possible type prefixes from XML\n // into account, i.e.: xsi:type=\"t{ActualType}\"\n elementTypeName = normalizeXsiTypeName(elementTypeName, model);\n\n elementType = model.getType(elementTypeName);\n\n return Object.assign({}, property, {\n effectiveType: getModelDescriptor(elementType).name\n });\n }\n }\n\n // search for properties by name first\n return property;\n }\n\n var pkg = model.getPackage(nameNs.prefix);\n\n if (pkg) {\n elementTypeName = aliasToName(nameNs, pkg);\n elementType = model.getType(elementTypeName);\n\n // search for collection members later\n property = find(descriptor.properties, function (p) {\n return !p.isVirtual && !p.isReference && !p.isAttribute && elementType.hasType(p.type);\n });\n\n if (property) {\n return Object.assign({}, property, {\n effectiveType: getModelDescriptor(elementType).name\n });\n }\n } else {\n // parse unknown element (maybe extension)\n property = find(descriptor.properties, function (p) {\n return !p.isReference && !p.isAttribute && p.type === 'Element';\n });\n\n if (property) {\n return property;\n }\n }\n\n throw error('unrecognized element <' + nameNs.name + '>');\n};\n\nElementHandler.prototype.toString = function () {\n return 'ElementDescriptor[' + getModelDescriptor(this.type).name + ']';\n};\n\nElementHandler.prototype.valueHandler = function (propertyDesc, element) {\n return new ValueHandler(propertyDesc, element);\n};\n\nElementHandler.prototype.referenceHandler = function (propertyDesc) {\n return new ReferenceHandler(propertyDesc, this.context);\n};\n\nElementHandler.prototype.handler = function (type) {\n if (type === 'Element') {\n return new GenericElementHandler(this.model, type, this.context);\n } else {\n return new ElementHandler(this.model, type, this.context);\n }\n};\n\n/**\r\n * Handle the child element parsing\r\n *\r\n * @param {Element} node the xml node\r\n */\nElementHandler.prototype.handleChild = function (node) {\n var propertyDesc, type, element, childHandler;\n\n propertyDesc = this.getPropertyForNode(node);\n element = this.element;\n\n type = propertyDesc.effectiveType || propertyDesc.type;\n\n if (Object(__WEBPACK_IMPORTED_MODULE_3__utils__[\"f\" /* isSimple */])(type)) {\n return this.valueHandler(propertyDesc, element);\n }\n\n if (propertyDesc.isReference) {\n childHandler = this.referenceHandler(propertyDesc).handleNode(node);\n } else {\n childHandler = this.handler(type).handleNode(node);\n }\n\n var newElement = childHandler.element;\n\n // child handles may decide to skip elements\n // by not returning anything\n if (newElement !== undefined) {\n if (propertyDesc.isMany) {\n element.get(propertyDesc.name).push(newElement);\n } else {\n element.set(propertyDesc.name, newElement);\n }\n\n if (propertyDesc.isReference) {\n Object.assign(newElement, {\n element: element\n });\n\n this.context.addReference(newElement);\n } else {\n // establish child -> parent relationship\n newElement.$parent = element;\n }\n }\n\n return childHandler;\n};\n\n/**\r\n * An element handler that performs special validation\r\n * to ensure the node it gets initialized with matches\r\n * the handlers type (namespace wise).\r\n *\r\n * @param {Model} model\r\n * @param {String} typeName\r\n * @param {Context} context\r\n */\nfunction RootElementHandler(model, typeName, context) {\n ElementHandler.call(this, model, typeName, context);\n}\n\nRootElementHandler.prototype = Object.create(ElementHandler.prototype);\n\nRootElementHandler.prototype.createElement = function (node) {\n var name = node.name;\n\n var nameNs = Object(__WEBPACK_IMPORTED_MODULE_3__utils__[\"g\" /* parseName */])(name);\n\n var model = this.model;\n\n var type = this.type;\n\n var pkg = model.getPackage(nameNs.prefix);\n\n var typeName = pkg && aliasToName(nameNs, pkg) || name;\n\n // verify the correct namespace if we parse\n // the first element in the handler tree\n //\n // this ensures we don't mistakenly import wrong namespace elements\n if (!type.hasType(typeName)) {\n throw error('unexpected element <' + node.originalName + '>');\n }\n\n return ElementHandler.prototype.createElement.call(this, node);\n};\n\nfunction GenericElementHandler(model, typeName, context) {\n this.model = model;\n this.context = context;\n}\n\nGenericElementHandler.prototype = Object.create(BaseElementHandler.prototype);\n\nGenericElementHandler.prototype.createElement = function (node) {\n var name = node.name;\n\n var ns = Object(__WEBPACK_IMPORTED_MODULE_3__utils__[\"g\" /* parseName */])(name);\n\n var prefix = ns.prefix;\n\n var uri = node.ns[prefix + '$uri'];\n\n var attributes = node.attributes;\n\n return this.model.createAny(name, uri, attributes);\n};\n\nGenericElementHandler.prototype.handleChild = function (node) {\n var handler = new GenericElementHandler(this.model, 'Element', this.context).handleNode(node);\n\n var element = this.element;\n\n var newElement = handler.element;\n\n var children;\n\n if (newElement !== undefined) {\n children = element.$children = element.$children || [];\n children.push(newElement);\n\n // establish child -> parent relationship\n newElement.$parent = element;\n }\n\n return handler;\n};\n\nGenericElementHandler.prototype.handleEnd = function () {\n if (this.body) {\n this.element.$body = this.body;\n }\n};\n\n/**\r\n * A reader for a meta-model\r\n *\r\n * @param {Object} options\r\n * @param {Model} options.model used to read xml files\r\n * @param {Boolean} options.lax whether to make parse errors warnings\r\n */\nfunction Reader(options) {\n if (options instanceof __WEBPACK_IMPORTED_MODULE_2__model_model__[\"a\" /* default */]) {\n options = {\n model: options\n };\n }\n\n Object.assign(this, { lax: false }, options);\n}\n\n/**\r\n * Parse the given XML into a model document tree.\r\n *\r\n * @param {String} xml\r\n * @param {ElementHandler|Object} options or rootHandler\r\n * @param {Function} done\r\n */\nReader.prototype.fromXML = function (xml, options, done) {\n var rootHandler = options.rootHandler;\n\n if (options instanceof ElementHandler) {\n // root handler passed via (xml, { rootHandler: ElementHandler }, ...)\n rootHandler = options;\n options = {};\n } else {\n if (typeof options === 'string') {\n // rootHandler passed via (xml, 'someString', ...)\n rootHandler = this.handler(options);\n options = {};\n } else if (typeof rootHandler === 'string') {\n // rootHandler passed via (xml, { rootHandler: 'someString' }, ...)\n rootHandler = this.handler(rootHandler);\n }\n }\n\n var model = this.model;\n\n var lax = this.lax;\n\n var context = new Context(Object.assign({}, options, { rootHandler: rootHandler }));\n\n var parser = new SaxParser({ proxy: true });\n\n var stack = new __WEBPACK_IMPORTED_MODULE_0__utils_tinyStack___default.a();\n\n rootHandler.context = context;\n\n // push root handler\n stack.push(rootHandler);\n\n /**\r\n * Handle error.\r\n *\r\n * @param {Error} err\r\n * @param {Function} getContext\r\n * @param {boolean} lax\r\n *\r\n * @return {boolean} true if handled\r\n */\n function handleError(err, getContext, lax) {\n var ctx = getContext();\n\n var line = ctx.line;\n\n var column = ctx.column;\n\n var data = ctx.data;\n\n // we receive the full context data here,\n // for elements trim down the information\n // to the tag name, only\n if (data.charAt(0) === '<' && data.indexOf(' ') !== -1) {\n data = data.slice(0, data.indexOf(' ')) + '>';\n }\n\n var message = 'unparsable content ' + (data ? data + ' ' : '') + 'detected\\n\\t' + 'line: ' + line + '\\n\\t' + 'column: ' + column + '\\n\\t' + 'nested error: ' + err.message;\n\n if (lax) {\n context.addWarning({\n message: message,\n error: err\n });\n\n console.warn('could not parse node');\n console.warn(err);\n\n return true;\n } else {\n console.error('could not parse document');\n console.error(err);\n\n throw error(message);\n }\n }\n\n function handleWarning(err, getContext) {\n // just like handling errors in mode\n return handleError(err, getContext, true);\n }\n\n /**\r\n * Resolve collected references on parse end.\r\n */\n function resolveReferences() {\n var elementsById = context.elementsById;\n var references = context.references;\n\n var i, r;\n\n for (i = 0; r = references[i]; i++) {\n var element = r.element;\n var reference = elementsById[r.id];\n var property = getModelDescriptor(element).propertiesByName[r.property];\n\n if (!reference) {\n context.addWarning({\n message: 'unresolved reference <' + r.id + '>',\n element: r.element,\n property: r.property,\n value: r.id\n });\n }\n\n if (property.isMany) {\n var collection = element.get(property.name);\n\n var idx = collection.indexOf(r);\n\n // we replace an existing place holder (idx != -1) or\n // append to the collection instead\n if (idx === -1) {\n idx = collection.length;\n }\n\n if (!reference) {\n // remove unresolvable reference\n collection.splice(idx, 1);\n } else {\n // add or update reference in collection\n collection[idx] = reference;\n }\n } else {\n element.set(property.name, reference);\n }\n }\n }\n\n function handleClose() {\n stack.pop().handleEnd();\n }\n\n var PREAMBLE_START_PATTERN = /^<\\?xml /i;\n\n var ENCODING_PATTERN = / encoding=\"([^\"]+)\"/i;\n\n var UTF_8_PATTERN = /^utf-8$/i;\n\n function handleQuestion(question) {\n if (!PREAMBLE_START_PATTERN.test(question)) {\n return;\n }\n\n var match = ENCODING_PATTERN.exec(question);\n var encoding = match && match[1];\n\n if (!encoding || UTF_8_PATTERN.test(encoding)) {\n return;\n }\n\n context.addWarning({\n message: 'unsupported document encoding <' + encoding + '>, ' + 'falling back to UTF-8'\n });\n }\n\n function handleOpen(node, getContext) {\n var handler = stack.peek();\n\n try {\n stack.push(handler.handleNode(node));\n } catch (err) {\n if (handleError(err, getContext, lax)) {\n stack.push(new NoopHandler());\n }\n }\n }\n\n function handleCData(text, getContext) {\n try {\n stack.peek().handleText(text);\n } catch (err) {\n handleWarning(err, getContext);\n }\n }\n\n function handleText(text, getContext) {\n // strip whitespace only nodes, i.e. before\n // sections and in between tags\n text = text.trim();\n\n if (!text) {\n return;\n }\n\n handleCData(text, getContext);\n }\n\n var uriMap = model.getPackages().reduce(function (uriMap, p) {\n uriMap[p.uri] = p.prefix;\n\n return uriMap;\n }, {});\n\n parser.ns(uriMap).on('openTag', function (obj, decodeStr, selfClosing, getContext) {\n // gracefully handle unparsable attributes (attrs=false)\n var attrs = obj.attrs || {};\n\n var decodedAttrs = Object.keys(attrs).reduce(function (d, key) {\n var value = decodeStr(attrs[key]);\n\n d[key] = value;\n\n return d;\n }, {});\n\n var node = {\n name: obj.name,\n originalName: obj.originalName,\n attributes: decodedAttrs,\n ns: obj.ns\n };\n\n handleOpen(node, getContext);\n }).on('question', handleQuestion).on('closeTag', handleClose).on('cdata', handleCData).on('text', function (text, decodeEntities, getContext) {\n handleText(decodeEntities(text), getContext);\n }).on('error', handleError).on('warn', handleWarning);\n\n // deferred parse XML to make loading really ascnchronous\n // this ensures the execution environment (node or browser)\n // is kept responsive and that certain optimization strategies\n // can kick in\n defer(function () {\n var err;\n\n try {\n parser.parse(xml);\n\n resolveReferences();\n } catch (e) {\n err = e;\n }\n\n var element = rootHandler.element;\n\n // handle the situation that we could not extract\n // the desired root element from the document\n if (!err && !element) {\n err = error('failed to parse document as <' + rootHandler.type.$descriptor.name + '>');\n }\n\n done(err, err ? undefined : element, context);\n });\n};\n\nReader.prototype.handler = function (name) {\n return new RootElementHandler(this.model, name);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3htbC9tb2RlbC14bWwvcmVhZC5qcz8wYzNkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTdGFjayBmcm9tICcuLi8uLi8uLi91dGlscy90aW55U3RhY2snXHJcbmltcG9ydCBTYXhlbiBmcm9tICcuLi8uLi8uLi91dGlscy9zYXhlbidcclxuXHJcbmltcG9ydCBNb2RlbCBmcm9tICcuLi9tb2RlbC9tb2RlbCdcclxuaW1wb3J0IHtcclxuICBjb2VyY2VUeXBlLFxyXG4gIGlzU2ltcGxlIGFzIGlzU2ltcGxlVHlwZSxcclxuICBYU0lfVFlQRSxcclxuICBzZXJpYWxpemVBc1R5cGUsXHJcbiAgaGFzTG93ZXJDYXNlQWxpYXMsXHJcbiAgcGFyc2VOYW1lIGFzIHBhcnNlTmFtZU5zXHJcbn0gZnJvbSAnLi4vdXRpbHMnXHJcblxyXG5jb25zdCBTYXhQYXJzZXIgPSBTYXhlbi5QYXJzZXJcclxuXHJcbmZ1bmN0aW9uIGZpbmQoY29sbGVjdGlvbiwgbWF0Y2hlcikge1xyXG4gIG1hdGNoZXIgPVxyXG4gICAgdHlwZW9mIG1hdGNoZXIgPT09ICdmdW5jdGlvbicgJiYgbWF0Y2hlci5jb25zdHJ1Y3RvciA9PT0gRnVuY3Rpb25cclxuICAgICAgPyBtYXRjaGVyXHJcbiAgICAgIDogZSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZSA9PT0gbWF0Y2hlclxyXG4gICAgICAgIH1cclxuXHJcbiAgdmFyIG1hdGNoXHJcblxyXG4gIGNvbGxlY3Rpb24uZm9yRWFjaCgodmFsLCBrZXkpID0+IHtcclxuICAgIGlmIChtYXRjaGVyKHZhbCwga2V5KSkge1xyXG4gICAgICBtYXRjaCA9IHZhbFxyXG5cclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIG1hdGNoXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhcGl0YWxpemUoc3RyKSB7XHJcbiAgcmV0dXJuIHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKVxyXG59XHJcblxyXG5mdW5jdGlvbiBhbGlhc1RvTmFtZShhbGlhc05zLCBwa2cpIHtcclxuICBpZiAoIWhhc0xvd2VyQ2FzZUFsaWFzKHBrZykpIHtcclxuICAgIHJldHVybiBhbGlhc05zLm5hbWVcclxuICB9XHJcblxyXG4gIHJldHVybiBhbGlhc05zLnByZWZpeCArICc6JyArIGNhcGl0YWxpemUoYWxpYXNOcy5sb2NhbE5hbWUpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByZWZpeGVkVG9OYW1lKG5hbWVOcywgcGtnKSB7XHJcbiAgdmFyIG5hbWUgPSBuYW1lTnMubmFtZVxyXG5cclxuICB2YXIgbG9jYWxOYW1lID0gbmFtZU5zLmxvY2FsTmFtZVxyXG5cclxuICB2YXIgdHlwZVByZWZpeCA9IHBrZy54bWwgJiYgcGtnLnhtbC50eXBlUHJlZml4XHJcblxyXG4gIGlmICh0eXBlUHJlZml4ICYmIGxvY2FsTmFtZS5pbmRleE9mKHR5cGVQcmVmaXgpID09PSAwKSB7XHJcbiAgICByZXR1cm4gbmFtZU5zLnByZWZpeCArICc6JyArIGxvY2FsTmFtZS5zbGljZSh0eXBlUHJlZml4Lmxlbmd0aClcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIG5hbWVcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5vcm1hbGl6ZVhzaVR5cGVOYW1lKG5hbWUsIG1vZGVsKSB7XHJcbiAgdmFyIG5hbWVOcyA9IHBhcnNlTmFtZU5zKG5hbWUpXHJcbiAgdmFyIHBrZyA9IG1vZGVsLmdldFBhY2thZ2UobmFtZU5zLnByZWZpeClcclxuXHJcbiAgcmV0dXJuIHByZWZpeGVkVG9OYW1lKG5hbWVOcywgcGtnKVxyXG59XHJcblxyXG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlKSB7XHJcbiAgcmV0dXJuIG5ldyBFcnJvcihtZXNzYWdlKVxyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBtb2RlbCBkZXNjcmlwdG9yIGZvciBhIGdpdmVuIGluc3RhbmNlIG9yIHR5cGUuXHJcbiAqXHJcbiAqIEBwYXJhbSAge01vZGVsRWxlbWVudHxGdW5jdGlvbn0gZWxlbWVudFxyXG4gKlxyXG4gKiBAcmV0dXJuIHtPYmplY3R9IHRoZSBtb2RlbCBkZXNjcmlwdG9yXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRNb2RlbERlc2NyaXB0b3IoZWxlbWVudCkge1xyXG4gIHJldHVybiBlbGVtZW50LiRkZXNjcmlwdG9yXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmVyKGZuKSB7XHJcbiAgc2V0VGltZW91dChmbiwgMClcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgcGFyc2UgY29udGV4dC5cclxuICpcclxuICogQGNsYXNzXHJcbiAqXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXHJcbiAqIEBwYXJhbSB7RWxlbWVudEhhbmRsZXJ9IG9wdGlvbnMucm9vdEhhbmRsZXIgdGhlIHJvb3QgaGFuZGxlciBmb3IgcGFyc2luZyBhIGRvY3VtZW50XHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGF4PWZhbHNlXSB3aGV0aGVyIG9yIG5vdCB0byBpZ25vcmUgaW52YWxpZCBlbGVtZW50c1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIENvbnRleHQob3B0aW9ucykge1xyXG4gIC8qKlxyXG4gICAqIEBwcm9wZXJ0eSB7RWxlbWVudEhhbmRsZXJ9IHJvb3RIYW5kbGVyXHJcbiAgICovXHJcblxyXG4gIC8qKlxyXG4gICAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gbGF4XHJcbiAgICovXHJcblxyXG4gIE9iamVjdC5hc3NpZ24odGhpcywgb3B0aW9ucylcclxuXHJcbiAgdGhpcy5lbGVtZW50c0J5SWQgPSB7fVxyXG4gIHRoaXMucmVmZXJlbmNlcyA9IFtdXHJcbiAgdGhpcy53YXJuaW5ncyA9IFtdXHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhbiB1bnJlc29sdmVkIHJlZmVyZW5jZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VcclxuICAgKi9cclxuICB0aGlzLmFkZFJlZmVyZW5jZSA9IGZ1bmN0aW9uKHJlZmVyZW5jZSkge1xyXG4gICAgdGhpcy5yZWZlcmVuY2VzLnB1c2gocmVmZXJlbmNlKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIGEgcHJvY2Vzc2VkIGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vZGVsRWxlbWVudH0gZWxlbWVudFxyXG4gICAqL1xyXG4gIHRoaXMuYWRkRWxlbWVudCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICAgIGlmICghZWxlbWVudCkge1xyXG4gICAgICB0aHJvdyBlcnJvcignZXhwZWN0ZWQgZWxlbWVudCcpXHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGVsZW1lbnRzQnlJZCA9IHRoaXMuZWxlbWVudHNCeUlkXHJcblxyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRNb2RlbERlc2NyaXB0b3IoZWxlbWVudClcclxuXHJcbiAgICB2YXIgaWRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IuaWRQcm9wZXJ0eVxyXG5cclxuICAgIHZhciBpZFxyXG5cclxuICAgIGlmIChpZFByb3BlcnR5KSB7XHJcbiAgICAgIGlkID0gZWxlbWVudC5nZXQoaWRQcm9wZXJ0eS5uYW1lKVxyXG5cclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnRzQnlJZFtpZF0pIHtcclxuICAgICAgICAgIHRocm93IGVycm9yKCdkdXBsaWNhdGUgSUQgPCcgKyBpZCArICc+JylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsZW1lbnRzQnlJZFtpZF0gPSBlbGVtZW50XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhbiBpbXBvcnQgd2FybmluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB3YXJuaW5nXHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IHdhcm5pbmcubWVzc2FnZVxyXG4gICAqIEBwYXJhbSB7RXJyb3J9IFt3YXJuaW5nLmVycm9yXVxyXG4gICAqL1xyXG4gIHRoaXMuYWRkV2FybmluZyA9IGZ1bmN0aW9uKHdhcm5pbmcpIHtcclxuICAgIHRoaXMud2FybmluZ3MucHVzaCh3YXJuaW5nKVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gQmFzZUhhbmRsZXIoKSB7fVxyXG5cclxuQmFzZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUVuZCA9IGZ1bmN0aW9uKCkge31cclxuQmFzZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZVRleHQgPSBmdW5jdGlvbigpIHt9XHJcbkJhc2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24oKSB7fVxyXG5cclxuLyoqXHJcbiAqIEEgc2ltcGxlIHBhc3MgdGhyb3VnaCBoYW5kbGVyIHRoYXQgZG9lcyBub3RoaW5nIGV4Y2VwdCBmb3JcclxuICogaWdub3JpbmcgYWxsIGlucHV0IGl0IHJlY2VpdmVzLlxyXG4gKlxyXG4gKiBUaGlzIGlzIHVzZWQgdG8gaWdub3JlIHVua25vd24gZWxlbWVudHMgYW5kXHJcbiAqIGF0dHJpYnV0ZXMuXHJcbiAqL1xyXG5mdW5jdGlvbiBOb29wSGFuZGxlcigpIHt9XHJcblxyXG5Ob29wSGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VIYW5kbGVyLnByb3RvdHlwZSlcclxuXHJcbk5vb3BIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVOb2RlID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIHRoaXNcclxufVxyXG5cclxuZnVuY3Rpb24gQm9keUhhbmRsZXIoKSB7fVxyXG5cclxuQm9keUhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlSGFuZGxlci5wcm90b3R5cGUpXHJcblxyXG5Cb2R5SGFuZGxlci5wcm90b3R5cGUuaGFuZGxlVGV4dCA9IGZ1bmN0aW9uKHRleHQpIHtcclxuICB0aGlzLmJvZHkgPSAodGhpcy5ib2R5IHx8ICcnKSArIHRleHRcclxufVxyXG5cclxuZnVuY3Rpb24gUmVmZXJlbmNlSGFuZGxlcihwcm9wZXJ0eSwgY29udGV4dCkge1xyXG4gIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eVxyXG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHRcclxufVxyXG5cclxuUmVmZXJlbmNlSGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJvZHlIYW5kbGVyLnByb3RvdHlwZSlcclxuXHJcblJlZmVyZW5jZUhhbmRsZXIucHJvdG90eXBlLmhhbmRsZU5vZGUgPSBmdW5jdGlvbihub2RlKSB7XHJcbiAgaWYgKHRoaXMuZWxlbWVudCkge1xyXG4gICAgdGhyb3cgZXJyb3IoJ2V4cGVjdGVkIG5vIHN1YiBub2RlcycpXHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMuZWxlbWVudCA9IHRoaXMuY3JlYXRlUmVmZXJlbmNlKG5vZGUpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gdGhpc1xyXG59XHJcblxyXG5SZWZlcmVuY2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFbmQgPSBmdW5jdGlvbigpIHtcclxuICB0aGlzLmVsZW1lbnQuaWQgPSB0aGlzLmJvZHlcclxufVxyXG5cclxuUmVmZXJlbmNlSGFuZGxlci5wcm90b3R5cGUuY3JlYXRlUmVmZXJlbmNlID0gZnVuY3Rpb24obm9kZSkge1xyXG4gIHJldHVybiB7XHJcbiAgICBwcm9wZXJ0eTogdGhpcy5wcm9wZXJ0eS5ucy5uYW1lLFxyXG4gICAgaWQ6ICcnXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBWYWx1ZUhhbmRsZXIocHJvcGVydHlEZXNjLCBlbGVtZW50KSB7XHJcbiAgdGhpcy5lbGVtZW50ID0gZWxlbWVudFxyXG4gIHRoaXMucHJvcGVydHlEZXNjID0gcHJvcGVydHlEZXNjXHJcbn1cclxuXHJcblZhbHVlSGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJvZHlIYW5kbGVyLnByb3RvdHlwZSlcclxuXHJcblZhbHVlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlRW5kID0gZnVuY3Rpb24oKSB7XHJcbiAgdmFyIHZhbHVlID0gdGhpcy5ib2R5IHx8ICcnXHJcblxyXG4gIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50XHJcblxyXG4gIHZhciBwcm9wZXJ0eURlc2MgPSB0aGlzLnByb3BlcnR5RGVzY1xyXG5cclxuICB2YWx1ZSA9IGNvZXJjZVR5cGUocHJvcGVydHlEZXNjLnR5cGUsIHZhbHVlKVxyXG5cclxuICBpZiAocHJvcGVydHlEZXNjLmlzTWFueSkge1xyXG4gICAgZWxlbWVudC5nZXQocHJvcGVydHlEZXNjLm5hbWUpLnB1c2godmFsdWUpXHJcbiAgfSBlbHNlIHtcclxuICAgIGVsZW1lbnQuc2V0KHByb3BlcnR5RGVzYy5uYW1lLCB2YWx1ZSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIEJhc2VFbGVtZW50SGFuZGxlcigpIHt9XHJcblxyXG5CYXNlRWxlbWVudEhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCb2R5SGFuZGxlci5wcm90b3R5cGUpXHJcblxyXG5CYXNlRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZU5vZGUgPSBmdW5jdGlvbihub2RlKSB7XHJcbiAgdmFyIHBhcnNlciA9IHRoaXNcclxuXHJcbiAgdmFyIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRcclxuXHJcbiAgaWYgKCFlbGVtZW50KSB7XHJcbiAgICBlbGVtZW50ID0gdGhpcy5lbGVtZW50ID0gdGhpcy5jcmVhdGVFbGVtZW50KG5vZGUpXHJcblxyXG4gICAgdGhpcy5jb250ZXh0LmFkZEVsZW1lbnQoZWxlbWVudClcclxuICB9IGVsc2Uge1xyXG4gICAgcGFyc2VyID0gdGhpcy5oYW5kbGVDaGlsZChub2RlKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBhcnNlclxyXG59XHJcblxyXG4vKipcclxuICogQGNsYXNzIFJlYWRlci5FbGVtZW50SGFuZGxlclxyXG4gKlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIEVsZW1lbnRIYW5kbGVyKG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dCkge1xyXG4gIHRoaXMubW9kZWwgPSBtb2RlbFxyXG4gIHRoaXMudHlwZSA9IG1vZGVsLmdldFR5cGUodHlwZU5hbWUpXHJcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxyXG59XHJcblxyXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJhc2VFbGVtZW50SGFuZGxlci5wcm90b3R5cGUpXHJcblxyXG5FbGVtZW50SGFuZGxlci5wcm90b3R5cGUuYWRkUmVmZXJlbmNlID0gZnVuY3Rpb24ocmVmZXJlbmNlKSB7XHJcbiAgdGhpcy5jb250ZXh0LmFkZFJlZmVyZW5jZShyZWZlcmVuY2UpXHJcbn1cclxuXHJcbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVUZXh0ID0gZnVuY3Rpb24odGV4dCkge1xyXG4gIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50XHJcblxyXG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0TW9kZWxEZXNjcmlwdG9yKGVsZW1lbnQpXHJcblxyXG4gIHZhciBib2R5UHJvcGVydHkgPSBkZXNjcmlwdG9yLmJvZHlQcm9wZXJ0eVxyXG5cclxuICBpZiAoIWJvZHlQcm9wZXJ0eSkge1xyXG4gICAgdGhyb3cgZXJyb3IoJ3VuZXhwZWN0ZWQgYm9keSB0ZXh0IDwnICsgdGV4dCArICc+JylcclxuICB9XHJcblxyXG4gIEJvZHlIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVUZXh0LmNhbGwodGhpcywgdGV4dClcclxufVxyXG5cclxuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUVuZCA9IGZ1bmN0aW9uKCkge1xyXG4gIHZhciB2YWx1ZSA9IHRoaXMuYm9keVxyXG5cclxuICB2YXIgZWxlbWVudCA9IHRoaXMuZWxlbWVudFxyXG5cclxuICB2YXIgZGVzY3JpcHRvciA9IGdldE1vZGVsRGVzY3JpcHRvcihlbGVtZW50KVxyXG5cclxuICB2YXIgYm9keVByb3BlcnR5ID0gZGVzY3JpcHRvci5ib2R5UHJvcGVydHlcclxuXHJcbiAgaWYgKGJvZHlQcm9wZXJ0eSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICB2YWx1ZSA9IGNvZXJjZVR5cGUoYm9keVByb3BlcnR5LnR5cGUsIHZhbHVlKVxyXG4gICAgZWxlbWVudC5zZXQoYm9keVByb3BlcnR5Lm5hbWUsIHZhbHVlKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgbW9kZWwgZnJvbSB0aGUgZ2l2ZW4gbm9kZS5cclxuICpcclxuICogQHBhcmFtICB7RWxlbWVudH0gbm9kZSB0aGUgeG1sIG5vZGVcclxuICovXHJcbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xyXG4gIHZhciBhdHRyaWJ1dGVzID0gbm9kZS5hdHRyaWJ1dGVzXHJcblxyXG4gIHZhciBUeXBlID0gdGhpcy50eXBlXHJcblxyXG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0TW9kZWxEZXNjcmlwdG9yKFR5cGUpXHJcblxyXG4gIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0XHJcblxyXG4gIHZhciBpbnN0YW5jZSA9IG5ldyBUeXBlKHt9KVxyXG5cclxuICB2YXIgbW9kZWwgPSB0aGlzLm1vZGVsXHJcblxyXG4gIHZhciBwcm9wTmFtZU5zXHJcblxyXG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKVxyXG5cclxuICBrZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgIGxldCB2YWx1ZSA9IGF0dHJpYnV0ZXNba2V5XVxyXG4gICAgdmFyIHByb3AgPSBkZXNjcmlwdG9yLnByb3BlcnRpZXNCeU5hbWVba2V5XVxyXG5cclxuICAgIHZhciB2YWx1ZXNcclxuXHJcbiAgICBpZiAocHJvcCAmJiBwcm9wLmlzUmVmZXJlbmNlKSB7XHJcbiAgICAgIGlmICghcHJvcC5pc01hbnkpIHtcclxuICAgICAgICBjb250ZXh0LmFkZFJlZmVyZW5jZSh7XHJcbiAgICAgICAgICBlbGVtZW50OiBpbnN0YW5jZSxcclxuICAgICAgICAgIHByb3BlcnR5OiBwcm9wLm5zLm5hbWUsXHJcbiAgICAgICAgICBpZDogdmFsdWVcclxuICAgICAgICB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbHVlcyA9IHZhbHVlLnNwbGl0KCcgJylcclxuICAgICAgICB2YWx1ZXMuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICAgIGNvbnRleHQuYWRkUmVmZXJlbmNlKHtcclxuICAgICAgICAgICAgZWxlbWVudDogaW5zdGFuY2UsXHJcbiAgICAgICAgICAgIHByb3BlcnR5OiBwcm9wLm5zLm5hbWUsXHJcbiAgICAgICAgICAgIGlkOiB2XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwcm9wKSB7XHJcbiAgICAgICAgdmFsdWUgPSBjb2VyY2VUeXBlKHByb3AudHlwZSwgdmFsdWUpXHJcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICE9PSAneG1sbnMnKSB7XHJcbiAgICAgICAgcHJvcE5hbWVOcyA9IHBhcnNlTmFtZU5zKGtleSwgZGVzY3JpcHRvci5ucy5wcmVmaXgpXHJcblxyXG4gICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgYXR0cmlidXRlIGlzIGRlZmluZWQgaW4gYSB3ZWxsLWtub3duIG5hbWVzcGFjZVxyXG4gICAgICAgIC8vIGlmIHRoYXQgaXMgdGhlIGNhc2Ugd2UgZW1pdCBhIHdhcm5pbmcgdG8gaW5kaWNhdGUgcG90ZW50aWFsIG1pc3VzZVxyXG4gICAgICAgIGlmIChtb2RlbC5nZXRQYWNrYWdlKHByb3BOYW1lTnMucHJlZml4KSkge1xyXG4gICAgICAgICAgY29udGV4dC5hZGRXYXJuaW5nKHtcclxuICAgICAgICAgICAgbWVzc2FnZTogJ3Vua25vd24gYXR0cmlidXRlIDwnICsga2V5ICsgJz4nLFxyXG4gICAgICAgICAgICBlbGVtZW50OiBpbnN0YW5jZSxcclxuICAgICAgICAgICAgcHJvcGVydHk6IGtleSxcclxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaW5zdGFuY2Uuc2V0KGtleSwgdmFsdWUpXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIGluc3RhbmNlXHJcbn1cclxuXHJcbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5nZXRQcm9wZXJ0eUZvck5vZGUgPSBmdW5jdGlvbihub2RlKSB7XHJcbiAgdmFyIG5hbWUgPSBub2RlLm5hbWVcclxuICB2YXIgbmFtZU5zID0gcGFyc2VOYW1lTnMobmFtZSlcclxuXHJcbiAgdmFyIHR5cGUgPSB0aGlzLnR5cGVcclxuXHJcbiAgdmFyIG1vZGVsID0gdGhpcy5tb2RlbFxyXG5cclxuICB2YXIgZGVzY3JpcHRvciA9IGdldE1vZGVsRGVzY3JpcHRvcih0eXBlKVxyXG5cclxuICB2YXIgcHJvcGVydHlOYW1lID0gbmFtZU5zLm5hbWVcclxuXHJcbiAgdmFyIHByb3BlcnR5ID0gZGVzY3JpcHRvci5wcm9wZXJ0aWVzQnlOYW1lW3Byb3BlcnR5TmFtZV1cclxuXHJcbiAgdmFyIGVsZW1lbnRUeXBlTmFtZVxyXG5cclxuICB2YXIgZWxlbWVudFR5cGVcclxuXHJcbiAgLy8gc2VhcmNoIGZvciBwcm9wZXJ0aWVzIGJ5IG5hbWUgZmlyc3RcclxuXHJcbiAgaWYgKHByb3BlcnR5KSB7XHJcbiAgICBpZiAoc2VyaWFsaXplQXNUeXBlKHByb3BlcnR5KSkge1xyXG4gICAgICBlbGVtZW50VHlwZU5hbWUgPSBub2RlLmF0dHJpYnV0ZXNbWFNJX1RZUEVdXHJcblxyXG4gICAgICAvLyB4c2kgdHlwZSBpcyBvcHRpb25hbCwgaWYgaXQgZG9lcyBub3QgZXhpc3RzIHRoZVxyXG4gICAgICAvLyBkZWZhdWx0IHR5cGUgaXMgYXNzdW1lZFxyXG4gICAgICBpZiAoZWxlbWVudFR5cGVOYW1lKSB7XHJcbiAgICAgICAgLy8gdGFrZSBwb3NzaWJsZSB0eXBlIHByZWZpeGVzIGZyb20gWE1MXHJcbiAgICAgICAgLy8gaW50byBhY2NvdW50LCBpLmUuOiB4c2k6dHlwZT1cInR7QWN0dWFsVHlwZX1cIlxyXG4gICAgICAgIGVsZW1lbnRUeXBlTmFtZSA9IG5vcm1hbGl6ZVhzaVR5cGVOYW1lKGVsZW1lbnRUeXBlTmFtZSwgbW9kZWwpXHJcblxyXG4gICAgICAgIGVsZW1lbnRUeXBlID0gbW9kZWwuZ2V0VHlwZShlbGVtZW50VHlwZU5hbWUpXHJcblxyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBwcm9wZXJ0eSwge1xyXG4gICAgICAgICAgZWZmZWN0aXZlVHlwZTogZ2V0TW9kZWxEZXNjcmlwdG9yKGVsZW1lbnRUeXBlKS5uYW1lXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHNlYXJjaCBmb3IgcHJvcGVydGllcyBieSBuYW1lIGZpcnN0XHJcbiAgICByZXR1cm4gcHJvcGVydHlcclxuICB9XHJcblxyXG4gIHZhciBwa2cgPSBtb2RlbC5nZXRQYWNrYWdlKG5hbWVOcy5wcmVmaXgpXHJcblxyXG4gIGlmIChwa2cpIHtcclxuICAgIGVsZW1lbnRUeXBlTmFtZSA9IGFsaWFzVG9OYW1lKG5hbWVOcywgcGtnKVxyXG4gICAgZWxlbWVudFR5cGUgPSBtb2RlbC5nZXRUeXBlKGVsZW1lbnRUeXBlTmFtZSlcclxuXHJcbiAgICAvLyBzZWFyY2ggZm9yIGNvbGxlY3Rpb24gbWVtYmVycyBsYXRlclxyXG4gICAgcHJvcGVydHkgPSBmaW5kKGRlc2NyaXB0b3IucHJvcGVydGllcywgZnVuY3Rpb24ocCkge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgICFwLmlzVmlydHVhbCAmJlxyXG4gICAgICAgICFwLmlzUmVmZXJlbmNlICYmXHJcbiAgICAgICAgIXAuaXNBdHRyaWJ1dGUgJiZcclxuICAgICAgICBlbGVtZW50VHlwZS5oYXNUeXBlKHAudHlwZSlcclxuICAgICAgKVxyXG4gICAgfSlcclxuXHJcbiAgICBpZiAocHJvcGVydHkpIHtcclxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHByb3BlcnR5LCB7XHJcbiAgICAgICAgZWZmZWN0aXZlVHlwZTogZ2V0TW9kZWxEZXNjcmlwdG9yKGVsZW1lbnRUeXBlKS5uYW1lXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIHBhcnNlIHVua25vd24gZWxlbWVudCAobWF5YmUgZXh0ZW5zaW9uKVxyXG4gICAgcHJvcGVydHkgPSBmaW5kKGRlc2NyaXB0b3IucHJvcGVydGllcywgZnVuY3Rpb24ocCkge1xyXG4gICAgICByZXR1cm4gIXAuaXNSZWZlcmVuY2UgJiYgIXAuaXNBdHRyaWJ1dGUgJiYgcC50eXBlID09PSAnRWxlbWVudCdcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHByb3BlcnR5KSB7XHJcbiAgICAgIHJldHVybiBwcm9wZXJ0eVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdGhyb3cgZXJyb3IoJ3VucmVjb2duaXplZCBlbGVtZW50IDwnICsgbmFtZU5zLm5hbWUgKyAnPicpXHJcbn1cclxuXHJcbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAnRWxlbWVudERlc2NyaXB0b3JbJyArIGdldE1vZGVsRGVzY3JpcHRvcih0aGlzLnR5cGUpLm5hbWUgKyAnXSdcclxufVxyXG5cclxuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLnZhbHVlSGFuZGxlciA9IGZ1bmN0aW9uKHByb3BlcnR5RGVzYywgZWxlbWVudCkge1xyXG4gIHJldHVybiBuZXcgVmFsdWVIYW5kbGVyKHByb3BlcnR5RGVzYywgZWxlbWVudClcclxufVxyXG5cclxuRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLnJlZmVyZW5jZUhhbmRsZXIgPSBmdW5jdGlvbihwcm9wZXJ0eURlc2MpIHtcclxuICByZXR1cm4gbmV3IFJlZmVyZW5jZUhhbmRsZXIocHJvcGVydHlEZXNjLCB0aGlzLmNvbnRleHQpXHJcbn1cclxuXHJcbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVyID0gZnVuY3Rpb24odHlwZSkge1xyXG4gIGlmICh0eXBlID09PSAnRWxlbWVudCcpIHtcclxuICAgIHJldHVybiBuZXcgR2VuZXJpY0VsZW1lbnRIYW5kbGVyKHRoaXMubW9kZWwsIHR5cGUsIHRoaXMuY29udGV4dClcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIG5ldyBFbGVtZW50SGFuZGxlcih0aGlzLm1vZGVsLCB0eXBlLCB0aGlzLmNvbnRleHQpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogSGFuZGxlIHRoZSBjaGlsZCBlbGVtZW50IHBhcnNpbmdcclxuICpcclxuICogQHBhcmFtICB7RWxlbWVudH0gbm9kZSB0aGUgeG1sIG5vZGVcclxuICovXHJcbkVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVDaGlsZCA9IGZ1bmN0aW9uKG5vZGUpIHtcclxuICB2YXIgcHJvcGVydHlEZXNjLCB0eXBlLCBlbGVtZW50LCBjaGlsZEhhbmRsZXJcclxuXHJcbiAgcHJvcGVydHlEZXNjID0gdGhpcy5nZXRQcm9wZXJ0eUZvck5vZGUobm9kZSlcclxuICBlbGVtZW50ID0gdGhpcy5lbGVtZW50XHJcblxyXG4gIHR5cGUgPSBwcm9wZXJ0eURlc2MuZWZmZWN0aXZlVHlwZSB8fCBwcm9wZXJ0eURlc2MudHlwZVxyXG5cclxuICBpZiAoaXNTaW1wbGVUeXBlKHR5cGUpKSB7XHJcbiAgICByZXR1cm4gdGhpcy52YWx1ZUhhbmRsZXIocHJvcGVydHlEZXNjLCBlbGVtZW50KVxyXG4gIH1cclxuXHJcbiAgaWYgKHByb3BlcnR5RGVzYy5pc1JlZmVyZW5jZSkge1xyXG4gICAgY2hpbGRIYW5kbGVyID0gdGhpcy5yZWZlcmVuY2VIYW5kbGVyKHByb3BlcnR5RGVzYykuaGFuZGxlTm9kZShub2RlKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjaGlsZEhhbmRsZXIgPSB0aGlzLmhhbmRsZXIodHlwZSkuaGFuZGxlTm9kZShub2RlKVxyXG4gIH1cclxuXHJcbiAgdmFyIG5ld0VsZW1lbnQgPSBjaGlsZEhhbmRsZXIuZWxlbWVudFxyXG5cclxuICAvLyBjaGlsZCBoYW5kbGVzIG1heSBkZWNpZGUgdG8gc2tpcCBlbGVtZW50c1xyXG4gIC8vIGJ5IG5vdCByZXR1cm5pbmcgYW55dGhpbmdcclxuICBpZiAobmV3RWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAocHJvcGVydHlEZXNjLmlzTWFueSkge1xyXG4gICAgICBlbGVtZW50LmdldChwcm9wZXJ0eURlc2MubmFtZSkucHVzaChuZXdFbGVtZW50KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWxlbWVudC5zZXQocHJvcGVydHlEZXNjLm5hbWUsIG5ld0VsZW1lbnQpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHByb3BlcnR5RGVzYy5pc1JlZmVyZW5jZSkge1xyXG4gICAgICBPYmplY3QuYXNzaWduKG5ld0VsZW1lbnQsIHtcclxuICAgICAgICBlbGVtZW50OiBlbGVtZW50XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLmNvbnRleHQuYWRkUmVmZXJlbmNlKG5ld0VsZW1lbnQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBlc3RhYmxpc2ggY2hpbGQgLT4gcGFyZW50IHJlbGF0aW9uc2hpcFxyXG4gICAgICBuZXdFbGVtZW50LiRwYXJlbnQgPSBlbGVtZW50XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY2hpbGRIYW5kbGVyXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBbiBlbGVtZW50IGhhbmRsZXIgdGhhdCBwZXJmb3JtcyBzcGVjaWFsIHZhbGlkYXRpb25cclxuICogdG8gZW5zdXJlIHRoZSBub2RlIGl0IGdldHMgaW5pdGlhbGl6ZWQgd2l0aCBtYXRjaGVzXHJcbiAqIHRoZSBoYW5kbGVycyB0eXBlIChuYW1lc3BhY2Ugd2lzZSkuXHJcbiAqXHJcbiAqIEBwYXJhbSB7TW9kZWx9IG1vZGVsXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlTmFtZVxyXG4gKiBAcGFyYW0ge0NvbnRleHR9IGNvbnRleHRcclxuICovXHJcbmZ1bmN0aW9uIFJvb3RFbGVtZW50SGFuZGxlcihtb2RlbCwgdHlwZU5hbWUsIGNvbnRleHQpIHtcclxuICBFbGVtZW50SGFuZGxlci5jYWxsKHRoaXMsIG1vZGVsLCB0eXBlTmFtZSwgY29udGV4dClcclxufVxyXG5cclxuUm9vdEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRWxlbWVudEhhbmRsZXIucHJvdG90eXBlKVxyXG5cclxuUm9vdEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xyXG4gIHZhciBuYW1lID0gbm9kZS5uYW1lXHJcblxyXG4gIHZhciBuYW1lTnMgPSBwYXJzZU5hbWVOcyhuYW1lKVxyXG5cclxuICB2YXIgbW9kZWwgPSB0aGlzLm1vZGVsXHJcblxyXG4gIHZhciB0eXBlID0gdGhpcy50eXBlXHJcblxyXG4gIHZhciBwa2cgPSBtb2RlbC5nZXRQYWNrYWdlKG5hbWVOcy5wcmVmaXgpXHJcblxyXG4gIHZhciB0eXBlTmFtZSA9IChwa2cgJiYgYWxpYXNUb05hbWUobmFtZU5zLCBwa2cpKSB8fCBuYW1lXHJcblxyXG4gIC8vIHZlcmlmeSB0aGUgY29ycmVjdCBuYW1lc3BhY2UgaWYgd2UgcGFyc2VcclxuICAvLyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgaGFuZGxlciB0cmVlXHJcbiAgLy9cclxuICAvLyB0aGlzIGVuc3VyZXMgd2UgZG9uJ3QgbWlzdGFrZW5seSBpbXBvcnQgd3JvbmcgbmFtZXNwYWNlIGVsZW1lbnRzXHJcbiAgaWYgKCF0eXBlLmhhc1R5cGUodHlwZU5hbWUpKSB7XHJcbiAgICB0aHJvdyBlcnJvcigndW5leHBlY3RlZCBlbGVtZW50IDwnICsgbm9kZS5vcmlnaW5hbE5hbWUgKyAnPicpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzLCBub2RlKVxyXG59XHJcblxyXG5mdW5jdGlvbiBHZW5lcmljRWxlbWVudEhhbmRsZXIobW9kZWwsIHR5cGVOYW1lLCBjb250ZXh0KSB7XHJcbiAgdGhpcy5tb2RlbCA9IG1vZGVsXHJcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxyXG59XHJcblxyXG5HZW5lcmljRWxlbWVudEhhbmRsZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCYXNlRWxlbWVudEhhbmRsZXIucHJvdG90eXBlKVxyXG5cclxuR2VuZXJpY0VsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xyXG4gIHZhciBuYW1lID0gbm9kZS5uYW1lXHJcblxyXG4gIHZhciBucyA9IHBhcnNlTmFtZU5zKG5hbWUpXHJcblxyXG4gIHZhciBwcmVmaXggPSBucy5wcmVmaXhcclxuXHJcbiAgdmFyIHVyaSA9IG5vZGUubnNbcHJlZml4ICsgJyR1cmknXVxyXG5cclxuICB2YXIgYXR0cmlidXRlcyA9IG5vZGUuYXR0cmlidXRlc1xyXG5cclxuICByZXR1cm4gdGhpcy5tb2RlbC5jcmVhdGVBbnkobmFtZSwgdXJpLCBhdHRyaWJ1dGVzKVxyXG59XHJcblxyXG5HZW5lcmljRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUNoaWxkID0gZnVuY3Rpb24obm9kZSkge1xyXG4gIHZhciBoYW5kbGVyID0gbmV3IEdlbmVyaWNFbGVtZW50SGFuZGxlcihcclxuICAgIHRoaXMubW9kZWwsXHJcbiAgICAnRWxlbWVudCcsXHJcbiAgICB0aGlzLmNvbnRleHRcclxuICApLmhhbmRsZU5vZGUobm9kZSlcclxuXHJcbiAgdmFyIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRcclxuXHJcbiAgdmFyIG5ld0VsZW1lbnQgPSBoYW5kbGVyLmVsZW1lbnRcclxuXHJcbiAgdmFyIGNoaWxkcmVuXHJcblxyXG4gIGlmIChuZXdFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcclxuICAgIGNoaWxkcmVuID0gZWxlbWVudC4kY2hpbGRyZW4gPSBlbGVtZW50LiRjaGlsZHJlbiB8fCBbXVxyXG4gICAgY2hpbGRyZW4ucHVzaChuZXdFbGVtZW50KVxyXG5cclxuICAgIC8vIGVzdGFibGlzaCBjaGlsZCAtPiBwYXJlbnQgcmVsYXRpb25zaGlwXHJcbiAgICBuZXdFbGVtZW50LiRwYXJlbnQgPSBlbGVtZW50XHJcbiAgfVxyXG5cclxuICByZXR1cm4gaGFuZGxlclxyXG59XHJcblxyXG5HZW5lcmljRWxlbWVudEhhbmRsZXIucHJvdG90eXBlLmhhbmRsZUVuZCA9IGZ1bmN0aW9uKCkge1xyXG4gIGlmICh0aGlzLmJvZHkpIHtcclxuICAgIHRoaXMuZWxlbWVudC4kYm9keSA9IHRoaXMuYm9keVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEEgcmVhZGVyIGZvciBhIG1ldGEtbW9kZWxcclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcclxuICogQHBhcmFtIHtNb2RlbH0gb3B0aW9ucy5tb2RlbCB1c2VkIHRvIHJlYWQgeG1sIGZpbGVzXHJcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb3B0aW9ucy5sYXggd2hldGhlciB0byBtYWtlIHBhcnNlIGVycm9ycyB3YXJuaW5nc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIFJlYWRlcihvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBNb2RlbCkge1xyXG4gICAgb3B0aW9ucyA9IHtcclxuICAgICAgbW9kZWw6IG9wdGlvbnNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIE9iamVjdC5hc3NpZ24odGhpcywgeyBsYXg6IGZhbHNlIH0sIG9wdGlvbnMpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gWE1MIGludG8gYSBtb2RlbCBkb2N1bWVudCB0cmVlLlxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30geG1sXHJcbiAqIEBwYXJhbSB7RWxlbWVudEhhbmRsZXJ8T2JqZWN0fSBvcHRpb25zIG9yIHJvb3RIYW5kbGVyXHJcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBkb25lXHJcbiAqL1xyXG5SZWFkZXIucHJvdG90eXBlLmZyb21YTUwgPSBmdW5jdGlvbih4bWwsIG9wdGlvbnMsIGRvbmUpIHtcclxuICB2YXIgcm9vdEhhbmRsZXIgPSBvcHRpb25zLnJvb3RIYW5kbGVyXHJcblxyXG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgRWxlbWVudEhhbmRsZXIpIHtcclxuICAgIC8vIHJvb3QgaGFuZGxlciBwYXNzZWQgdmlhICh4bWwsIHsgcm9vdEhhbmRsZXI6IEVsZW1lbnRIYW5kbGVyIH0sIC4uLilcclxuICAgIHJvb3RIYW5kbGVyID0gb3B0aW9uc1xyXG4gICAgb3B0aW9ucyA9IHt9XHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgLy8gcm9vdEhhbmRsZXIgcGFzc2VkIHZpYSAoeG1sLCAnc29tZVN0cmluZycsIC4uLilcclxuICAgICAgcm9vdEhhbmRsZXIgPSB0aGlzLmhhbmRsZXIob3B0aW9ucylcclxuICAgICAgb3B0aW9ucyA9IHt9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiByb290SGFuZGxlciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgLy8gcm9vdEhhbmRsZXIgcGFzc2VkIHZpYSAoeG1sLCB7IHJvb3RIYW5kbGVyOiAnc29tZVN0cmluZycgfSwgLi4uKVxyXG4gICAgICByb290SGFuZGxlciA9IHRoaXMuaGFuZGxlcihyb290SGFuZGxlcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhciBtb2RlbCA9IHRoaXMubW9kZWxcclxuXHJcbiAgdmFyIGxheCA9IHRoaXMubGF4XHJcblxyXG4gIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQoXHJcbiAgICBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7IHJvb3RIYW5kbGVyOiByb290SGFuZGxlciB9KVxyXG4gIClcclxuXHJcbiAgdmFyIHBhcnNlciA9IG5ldyBTYXhQYXJzZXIoeyBwcm94eTogdHJ1ZSB9KVxyXG5cclxuICB2YXIgc3RhY2sgPSBuZXcgU3RhY2soKVxyXG5cclxuICByb290SGFuZGxlci5jb250ZXh0ID0gY29udGV4dFxyXG5cclxuICAvLyBwdXNoIHJvb3QgaGFuZGxlclxyXG4gIHN0YWNrLnB1c2gocm9vdEhhbmRsZXIpXHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBlcnJvci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSAge0Vycm9yfSBlcnJcclxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gZ2V0Q29udGV4dFxyXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59IGxheFxyXG4gICAqXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBoYW5kbGVkXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaGFuZGxlRXJyb3IoZXJyLCBnZXRDb250ZXh0LCBsYXgpIHtcclxuICAgIHZhciBjdHggPSBnZXRDb250ZXh0KClcclxuXHJcbiAgICB2YXIgbGluZSA9IGN0eC5saW5lXHJcblxyXG4gICAgdmFyIGNvbHVtbiA9IGN0eC5jb2x1bW5cclxuXHJcbiAgICB2YXIgZGF0YSA9IGN0eC5kYXRhXHJcblxyXG4gICAgLy8gd2UgcmVjZWl2ZSB0aGUgZnVsbCBjb250ZXh0IGRhdGEgaGVyZSxcclxuICAgIC8vIGZvciBlbGVtZW50cyB0cmltIGRvd24gdGhlIGluZm9ybWF0aW9uXHJcbiAgICAvLyB0byB0aGUgdGFnIG5hbWUsIG9ubHlcclxuICAgIGlmIChkYXRhLmNoYXJBdCgwKSA9PT0gJzwnICYmIGRhdGEuaW5kZXhPZignICcpICE9PSAtMSkge1xyXG4gICAgICBkYXRhID0gZGF0YS5zbGljZSgwLCBkYXRhLmluZGV4T2YoJyAnKSkgKyAnPidcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbWVzc2FnZSA9XHJcbiAgICAgICd1bnBhcnNhYmxlIGNvbnRlbnQgJyArXHJcbiAgICAgIChkYXRhID8gZGF0YSArICcgJyA6ICcnKSArXHJcbiAgICAgICdkZXRlY3RlZFxcblxcdCcgK1xyXG4gICAgICAnbGluZTogJyArXHJcbiAgICAgIGxpbmUgK1xyXG4gICAgICAnXFxuXFx0JyArXHJcbiAgICAgICdjb2x1bW46ICcgK1xyXG4gICAgICBjb2x1bW4gK1xyXG4gICAgICAnXFxuXFx0JyArXHJcbiAgICAgICduZXN0ZWQgZXJyb3I6ICcgK1xyXG4gICAgICBlcnIubWVzc2FnZVxyXG5cclxuICAgIGlmIChsYXgpIHtcclxuICAgICAgY29udGV4dC5hZGRXYXJuaW5nKHtcclxuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxyXG4gICAgICAgIGVycm9yOiBlcnJcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGNvbnNvbGUud2FybignY291bGQgbm90IHBhcnNlIG5vZGUnKVxyXG4gICAgICBjb25zb2xlLndhcm4oZXJyKVxyXG5cclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2NvdWxkIG5vdCBwYXJzZSBkb2N1bWVudCcpXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG5cclxuICAgICAgdGhyb3cgZXJyb3IobWVzc2FnZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGhhbmRsZVdhcm5pbmcoZXJyLCBnZXRDb250ZXh0KSB7XHJcbiAgICAvLyBqdXN0IGxpa2UgaGFuZGxpbmcgZXJyb3JzIGluIDxsYXg9dHJ1ZT4gbW9kZVxyXG4gICAgcmV0dXJuIGhhbmRsZUVycm9yKGVyciwgZ2V0Q29udGV4dCwgdHJ1ZSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc29sdmUgY29sbGVjdGVkIHJlZmVyZW5jZXMgb24gcGFyc2UgZW5kLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHJlc29sdmVSZWZlcmVuY2VzKCkge1xyXG4gICAgdmFyIGVsZW1lbnRzQnlJZCA9IGNvbnRleHQuZWxlbWVudHNCeUlkXHJcbiAgICB2YXIgcmVmZXJlbmNlcyA9IGNvbnRleHQucmVmZXJlbmNlc1xyXG5cclxuICAgIHZhciBpLCByXHJcblxyXG4gICAgZm9yIChpID0gMDsgKHIgPSByZWZlcmVuY2VzW2ldKTsgaSsrKSB7XHJcbiAgICAgIHZhciBlbGVtZW50ID0gci5lbGVtZW50XHJcbiAgICAgIHZhciByZWZlcmVuY2UgPSBlbGVtZW50c0J5SWRbci5pZF1cclxuICAgICAgdmFyIHByb3BlcnR5ID0gZ2V0TW9kZWxEZXNjcmlwdG9yKGVsZW1lbnQpLnByb3BlcnRpZXNCeU5hbWVbci5wcm9wZXJ0eV1cclxuXHJcbiAgICAgIGlmICghcmVmZXJlbmNlKSB7XHJcbiAgICAgICAgY29udGV4dC5hZGRXYXJuaW5nKHtcclxuICAgICAgICAgIG1lc3NhZ2U6ICd1bnJlc29sdmVkIHJlZmVyZW5jZSA8JyArIHIuaWQgKyAnPicsXHJcbiAgICAgICAgICBlbGVtZW50OiByLmVsZW1lbnQsXHJcbiAgICAgICAgICBwcm9wZXJ0eTogci5wcm9wZXJ0eSxcclxuICAgICAgICAgIHZhbHVlOiByLmlkXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHByb3BlcnR5LmlzTWFueSkge1xyXG4gICAgICAgIHZhciBjb2xsZWN0aW9uID0gZWxlbWVudC5nZXQocHJvcGVydHkubmFtZSlcclxuXHJcbiAgICAgICAgdmFyIGlkeCA9IGNvbGxlY3Rpb24uaW5kZXhPZihyKVxyXG5cclxuICAgICAgICAvLyB3ZSByZXBsYWNlIGFuIGV4aXN0aW5nIHBsYWNlIGhvbGRlciAoaWR4ICE9IC0xKSBvclxyXG4gICAgICAgIC8vIGFwcGVuZCB0byB0aGUgY29sbGVjdGlvbiBpbnN0ZWFkXHJcbiAgICAgICAgaWYgKGlkeCA9PT0gLTEpIHtcclxuICAgICAgICAgIGlkeCA9IGNvbGxlY3Rpb24ubGVuZ3RoXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlZmVyZW5jZSkge1xyXG4gICAgICAgICAgLy8gcmVtb3ZlIHVucmVzb2x2YWJsZSByZWZlcmVuY2VcclxuICAgICAgICAgIGNvbGxlY3Rpb24uc3BsaWNlKGlkeCwgMSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gYWRkIG9yIHVwZGF0ZSByZWZlcmVuY2UgaW4gY29sbGVjdGlvblxyXG4gICAgICAgICAgY29sbGVjdGlvbltpZHhdID0gcmVmZXJlbmNlXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVsZW1lbnQuc2V0KHByb3BlcnR5Lm5hbWUsIHJlZmVyZW5jZSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XHJcbiAgICBzdGFjay5wb3AoKS5oYW5kbGVFbmQoKVxyXG4gIH1cclxuXHJcbiAgdmFyIFBSRUFNQkxFX1NUQVJUX1BBVFRFUk4gPSAvXjxcXD94bWwgL2lcclxuXHJcbiAgdmFyIEVOQ09ESU5HX1BBVFRFUk4gPSAvIGVuY29kaW5nPVwiKFteXCJdKylcIi9pXHJcblxyXG4gIHZhciBVVEZfOF9QQVRURVJOID0gL151dGYtOCQvaVxyXG5cclxuICBmdW5jdGlvbiBoYW5kbGVRdWVzdGlvbihxdWVzdGlvbikge1xyXG4gICAgaWYgKCFQUkVBTUJMRV9TVEFSVF9QQVRURVJOLnRlc3QocXVlc3Rpb24pKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIHZhciBtYXRjaCA9IEVOQ09ESU5HX1BBVFRFUk4uZXhlYyhxdWVzdGlvbilcclxuICAgIHZhciBlbmNvZGluZyA9IG1hdGNoICYmIG1hdGNoWzFdXHJcblxyXG4gICAgaWYgKCFlbmNvZGluZyB8fCBVVEZfOF9QQVRURVJOLnRlc3QoZW5jb2RpbmcpKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGNvbnRleHQuYWRkV2FybmluZyh7XHJcbiAgICAgIG1lc3NhZ2U6XHJcbiAgICAgICAgJ3Vuc3VwcG9ydGVkIGRvY3VtZW50IGVuY29kaW5nIDwnICtcclxuICAgICAgICBlbmNvZGluZyArXHJcbiAgICAgICAgJz4sICcgK1xyXG4gICAgICAgICdmYWxsaW5nIGJhY2sgdG8gVVRGLTgnXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaGFuZGxlT3Blbihub2RlLCBnZXRDb250ZXh0KSB7XHJcbiAgICB2YXIgaGFuZGxlciA9IHN0YWNrLnBlZWsoKVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHN0YWNrLnB1c2goaGFuZGxlci5oYW5kbGVOb2RlKG5vZGUpKVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGlmIChoYW5kbGVFcnJvcihlcnIsIGdldENvbnRleHQsIGxheCkpIHtcclxuICAgICAgICBzdGFjay5wdXNoKG5ldyBOb29wSGFuZGxlcigpKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBoYW5kbGVDRGF0YSh0ZXh0LCBnZXRDb250ZXh0KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBzdGFjay5wZWVrKCkuaGFuZGxlVGV4dCh0ZXh0KVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGhhbmRsZVdhcm5pbmcoZXJyLCBnZXRDb250ZXh0KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gaGFuZGxlVGV4dCh0ZXh0LCBnZXRDb250ZXh0KSB7XHJcbiAgICAvLyBzdHJpcCB3aGl0ZXNwYWNlIG9ubHkgbm9kZXMsIGkuZS4gYmVmb3JlXHJcbiAgICAvLyA8IUNEQVRBWyAuLi4gXT4gc2VjdGlvbnMgYW5kIGluIGJldHdlZW4gdGFnc1xyXG4gICAgdGV4dCA9IHRleHQudHJpbSgpXHJcblxyXG4gICAgaWYgKCF0ZXh0KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUNEYXRhKHRleHQsIGdldENvbnRleHQpXHJcbiAgfVxyXG5cclxuICB2YXIgdXJpTWFwID0gbW9kZWwuZ2V0UGFja2FnZXMoKS5yZWR1Y2UoZnVuY3Rpb24odXJpTWFwLCBwKSB7XHJcbiAgICB1cmlNYXBbcC51cmldID0gcC5wcmVmaXhcclxuXHJcbiAgICByZXR1cm4gdXJpTWFwXHJcbiAgfSwge30pXHJcblxyXG4gIHBhcnNlclxyXG4gICAgLm5zKHVyaU1hcClcclxuICAgIC5vbignb3BlblRhZycsIGZ1bmN0aW9uKG9iaiwgZGVjb2RlU3RyLCBzZWxmQ2xvc2luZywgZ2V0Q29udGV4dCkge1xyXG4gICAgICAvLyBncmFjZWZ1bGx5IGhhbmRsZSB1bnBhcnNhYmxlIGF0dHJpYnV0ZXMgKGF0dHJzPWZhbHNlKVxyXG4gICAgICB2YXIgYXR0cnMgPSBvYmouYXR0cnMgfHwge31cclxuXHJcbiAgICAgIHZhciBkZWNvZGVkQXR0cnMgPSBPYmplY3Qua2V5cyhhdHRycykucmVkdWNlKGZ1bmN0aW9uKGQsIGtleSkge1xyXG4gICAgICAgIHZhciB2YWx1ZSA9IGRlY29kZVN0cihhdHRyc1trZXldKVxyXG5cclxuICAgICAgICBkW2tleV0gPSB2YWx1ZVxyXG5cclxuICAgICAgICByZXR1cm4gZFxyXG4gICAgICB9LCB7fSlcclxuXHJcbiAgICAgIHZhciBub2RlID0ge1xyXG4gICAgICAgIG5hbWU6IG9iai5uYW1lLFxyXG4gICAgICAgIG9yaWdpbmFsTmFtZTogb2JqLm9yaWdpbmFsTmFtZSxcclxuICAgICAgICBhdHRyaWJ1dGVzOiBkZWNvZGVkQXR0cnMsXHJcbiAgICAgICAgbnM6IG9iai5uc1xyXG4gICAgICB9XHJcblxyXG4gICAgICBoYW5kbGVPcGVuKG5vZGUsIGdldENvbnRleHQpXHJcbiAgICB9KVxyXG4gICAgLm9uKCdxdWVzdGlvbicsIGhhbmRsZVF1ZXN0aW9uKVxyXG4gICAgLm9uKCdjbG9zZVRhZycsIGhhbmRsZUNsb3NlKVxyXG4gICAgLm9uKCdjZGF0YScsIGhhbmRsZUNEYXRhKVxyXG4gICAgLm9uKCd0ZXh0JywgZnVuY3Rpb24odGV4dCwgZGVjb2RlRW50aXRpZXMsIGdldENvbnRleHQpIHtcclxuICAgICAgaGFuZGxlVGV4dChkZWNvZGVFbnRpdGllcyh0ZXh0KSwgZ2V0Q29udGV4dClcclxuICAgIH0pXHJcbiAgICAub24oJ2Vycm9yJywgaGFuZGxlRXJyb3IpXHJcbiAgICAub24oJ3dhcm4nLCBoYW5kbGVXYXJuaW5nKVxyXG5cclxuICAvLyBkZWZlcnJlZCBwYXJzZSBYTUwgdG8gbWFrZSBsb2FkaW5nIHJlYWxseSBhc2NuY2hyb25vdXNcclxuICAvLyB0aGlzIGVuc3VyZXMgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCAobm9kZSBvciBicm93c2VyKVxyXG4gIC8vIGlzIGtlcHQgcmVzcG9uc2l2ZSBhbmQgdGhhdCBjZXJ0YWluIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzXHJcbiAgLy8gY2FuIGtpY2sgaW5cclxuICBkZWZlcihmdW5jdGlvbigpIHtcclxuICAgIHZhciBlcnJcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBwYXJzZXIucGFyc2UoeG1sKVxyXG5cclxuICAgICAgcmVzb2x2ZVJlZmVyZW5jZXMoKVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBlcnIgPSBlXHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGVsZW1lbnQgPSByb290SGFuZGxlci5lbGVtZW50XHJcblxyXG4gICAgLy8gaGFuZGxlIHRoZSBzaXR1YXRpb24gdGhhdCB3ZSBjb3VsZCBub3QgZXh0cmFjdFxyXG4gICAgLy8gdGhlIGRlc2lyZWQgcm9vdCBlbGVtZW50IGZyb20gdGhlIGRvY3VtZW50XHJcbiAgICBpZiAoIWVyciAmJiAhZWxlbWVudCkge1xyXG4gICAgICBlcnIgPSBlcnJvcihcclxuICAgICAgICAnZmFpbGVkIHRvIHBhcnNlIGRvY3VtZW50IGFzIDwnICtcclxuICAgICAgICAgIHJvb3RIYW5kbGVyLnR5cGUuJGRlc2NyaXB0b3IubmFtZSArXHJcbiAgICAgICAgICAnPidcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIGRvbmUoZXJyLCBlcnIgPyB1bmRlZmluZWQgOiBlbGVtZW50LCBjb250ZXh0KVxyXG4gIH0pXHJcbn1cclxuXHJcblJlYWRlci5wcm90b3R5cGUuaGFuZGxlciA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICByZXR1cm4gbmV3IFJvb3RFbGVtZW50SGFuZGxlcih0aGlzLm1vZGVsLCBuYW1lKVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZmVhdHVyZXMveG1sL21vZGVsLXhtbC9yZWFkLmpzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQVNBO0FBQ0E7Ozs7QUFJQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///37\n"); + +/***/ }), +/* 38 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +eval("/* WEBPACK VAR INJECTION */(function(global) {\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\n\n/**\r\n * Tiny stack for browser or server\r\n *\r\n * @author Jason Mulligan \r\n * @copyright 2018\r\n * @license BSD-3-Clause\r\n * @link http://avoidwork.github.io/tiny-stack\r\n * @version 1.1.0\r\n */\n;(function (global) {\n 'use strict';\n\n var TinyStack = function () {\n function TinyStack() {\n _classCallCheck(this, TinyStack);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this.data = [null].concat(args);\n this.top = this.data.length - 1;\n }\n\n _createClass(TinyStack, [{\n key: 'clear',\n value: function clear() {\n this.data.length = 1;\n this.top = 0;\n\n return this;\n }\n }, {\n key: 'empty',\n value: function empty() {\n return this.top === 0;\n }\n }, {\n key: 'length',\n value: function length() {\n return this.top;\n }\n }, {\n key: 'peek',\n value: function peek() {\n return this.data[this.top];\n }\n }, {\n key: 'pop',\n value: function pop() {\n var result = void 0;\n\n if (this.top > 0) {\n result = this.data.pop();\n this.top--;\n }\n\n return result;\n }\n }, {\n key: 'push',\n value: function push(arg) {\n this.data[++this.top] = arg;\n\n return this;\n }\n }, {\n key: 'search',\n value: function search(arg) {\n var index = this.data.indexOf(arg);\n\n return index === -1 ? -1 : this.data.length - index;\n }\n }]);\n\n return TinyStack;\n }();\n\n function factory() {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return new (Function.prototype.bind.apply(TinyStack, [null].concat(args)))();\n }\n\n // Node, AMD & window supported\n if (true) {\n module.exports = factory;\n } else if (typeof define === 'function' && define.amd !== void 0) {\n define(function () {\n return factory;\n });\n } else {\n global.stack = factory;\n }\n})(typeof window !== 'undefined' ? window : global);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(39)))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzguanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL3V0aWxzL3RpbnlTdGFjay5qcz82Yzk1Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0J1xyXG5cclxudmFyIF9jcmVhdGVDbGFzcyA9IChmdW5jdGlvbigpIHtcclxuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXVxyXG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2VcclxuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlXHJcbiAgICAgIGlmICgndmFsdWUnIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlXHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gZnVuY3Rpb24oQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XHJcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpXHJcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKVxyXG4gICAgcmV0dXJuIENvbnN0cnVjdG9yXHJcbiAgfVxyXG59KSgpXHJcblxyXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XHJcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbicpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogVGlueSBzdGFjayBmb3IgYnJvd3NlciBvciBzZXJ2ZXJcclxuICpcclxuICogQGF1dGhvciBKYXNvbiBNdWxsaWdhbiA8amFzb24ubXVsbGlnYW5AYXZvaWR3b3JrLmNvbT5cclxuICogQGNvcHlyaWdodCAyMDE4XHJcbiAqIEBsaWNlbnNlIEJTRC0zLUNsYXVzZVxyXG4gKiBAbGluayBodHRwOi8vYXZvaWR3b3JrLmdpdGh1Yi5pby90aW55LXN0YWNrXHJcbiAqIEB2ZXJzaW9uIDEuMS4wXHJcbiAqL1xyXG47KGZ1bmN0aW9uKGdsb2JhbCkge1xyXG4gICd1c2Ugc3RyaWN0J1xyXG5cclxuICB2YXIgVGlueVN0YWNrID0gKGZ1bmN0aW9uKCkge1xyXG4gICAgZnVuY3Rpb24gVGlueVN0YWNrKCkge1xyXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGlueVN0YWNrKVxyXG5cclxuICAgICAgZm9yIChcclxuICAgICAgICB2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7XHJcbiAgICAgICAgX2tleSA8IF9sZW47XHJcbiAgICAgICAgX2tleSsrXHJcbiAgICAgICkge1xyXG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5kYXRhID0gW251bGxdLmNvbmNhdChhcmdzKVxyXG4gICAgICB0aGlzLnRvcCA9IHRoaXMuZGF0YS5sZW5ndGggLSAxXHJcbiAgICB9XHJcblxyXG4gICAgX2NyZWF0ZUNsYXNzKFRpbnlTdGFjaywgW1xyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiAnY2xlYXInLFxyXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhcigpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YS5sZW5ndGggPSAxXHJcbiAgICAgICAgICB0aGlzLnRvcCA9IDBcclxuXHJcbiAgICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogJ2VtcHR5JyxcclxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW1wdHkoKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50b3AgPT09IDBcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6ICdsZW5ndGgnLFxyXG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiBsZW5ndGgoKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50b3BcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBrZXk6ICdwZWVrJyxcclxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGVlaygpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFbdGhpcy50b3BdXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiAncG9wJyxcclxuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcG9wKCkge1xyXG4gICAgICAgICAgdmFyIHJlc3VsdCA9IHZvaWQgMFxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnRvcCA+IDApIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5kYXRhLnBvcCgpXHJcbiAgICAgICAgICAgIHRoaXMudG9wLS1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAga2V5OiAncHVzaCcsXHJcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHB1c2goYXJnKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFbKyt0aGlzLnRvcF0gPSBhcmdcclxuXHJcbiAgICAgICAgICByZXR1cm4gdGhpc1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGtleTogJ3NlYXJjaCcsXHJcbiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNlYXJjaChhcmcpIHtcclxuICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMuZGF0YS5pbmRleE9mKGFyZylcclxuXHJcbiAgICAgICAgICByZXR1cm4gaW5kZXggPT09IC0xID8gLTEgOiB0aGlzLmRhdGEubGVuZ3RoIC0gaW5kZXhcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIF0pXHJcblxyXG4gICAgcmV0dXJuIFRpbnlTdGFja1xyXG4gIH0pKClcclxuXHJcbiAgZnVuY3Rpb24gZmFjdG9yeSgpIHtcclxuICAgIGZvciAoXHJcbiAgICAgIHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiksIF9rZXkyID0gMDtcclxuICAgICAgX2tleTIgPCBfbGVuMjtcclxuICAgICAgX2tleTIrK1xyXG4gICAgKSB7XHJcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KFRpbnlTdGFjaywgW251bGxdLmNvbmNhdChhcmdzKSkpKClcclxuICB9XHJcblxyXG4gIC8vIE5vZGUsIEFNRCAmIHdpbmRvdyBzdXBwb3J0ZWRcclxuICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnlcclxuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCAhPT0gdm9pZCAwKSB7XHJcbiAgICBkZWZpbmUoZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBmYWN0b3J5XHJcbiAgICB9KVxyXG4gIH0gZWxzZSB7XHJcbiAgICBnbG9iYWwuc3RhY2sgPSBmYWN0b3J5XHJcbiAgfVxyXG59KSh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy91dGlscy90aW55U3RhY2suanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFQQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFYQTtBQWNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU5BO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///38\n"); + +/***/ }), +/* 39 */ +/***/ (function(module, exports) { + +eval("var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzkuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzPzM2OTgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGc7XHJcblxyXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxyXG5nID0gKGZ1bmN0aW9uKCkge1xyXG5cdHJldHVybiB0aGlzO1xyXG59KSgpO1xyXG5cclxudHJ5IHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcclxuXHRnID0gZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsZXZhbCkoXCJ0aGlzXCIpO1xyXG59IGNhdGNoKGUpIHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxyXG5cdGlmKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpXHJcblx0XHRnID0gd2luZG93O1xyXG59XHJcblxyXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXHJcbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXHJcbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZztcclxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzXG4vLyBtb2R1bGUgaWQgPSAzOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///39\n"); + +/***/ }), +/* 40 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar fromCharCode = String.fromCharCode;\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar ENTITY_PATTERN = /&#(\\d+);|&#x([0-9a-f]+);|&(\\w+);/gi;\n\nvar ENTITY_MAPPING = {\n amp: '&',\n apos: \"'\",\n gt: '>',\n lt: '<',\n quot: '\"'\n\n // map UPPERCASE variants of supported special chars\n};Object.keys(ENTITY_MAPPING).forEach(function (k) {\n ENTITY_MAPPING[k.toUpperCase()] = ENTITY_MAPPING[k];\n});\n\nfunction replaceEntities(_, d, x, z) {\n // reserved names, i.e.  \n if (z) {\n if (hasOwnProperty.call(ENTITY_MAPPING, z)) {\n return ENTITY_MAPPING[z];\n } else {\n // fall back to original value\n return '&' + z + ';';\n }\n }\n\n // decimal encoded char\n if (d) {\n return fromCharCode(d);\n }\n\n // hex encoded char\n return fromCharCode(parseInt(x, 16));\n}\n\n/**\r\n * A basic entity decoder that can decode a minimal\r\n * sub-set of reserved names (&) as well as\r\n * hex (ય) and decimal (ӏ) encoded characters.\r\n *\r\n * @param {string} str\r\n *\r\n * @return {string} decoded string\r\n */\nfunction decodeEntities(s) {\n if (s.length > 3 && s.indexOf('&') !== -1) {\n return s.replace(ENTITY_PATTERN, replaceEntities);\n }\n\n return s;\n}\n\nvar XSI_URI = 'http://www.w3.org/2001/XMLSchema-instance';\nvar XSI_PREFIX = 'xsi';\nvar XSI_TYPE = 'xsi:type';\n\nvar NON_WHITESPACE_OUTSIDE_ROOT_NODE = 'non-whitespace outside of root node';\n\nfunction error(msg) {\n return new Error(msg);\n}\n\nfunction missingNamespaceForPrefix(prefix) {\n return 'missing namespace for prefix <' + prefix + '>';\n}\n\nfunction getter(getFn) {\n return {\n get: getFn,\n enumerable: true\n };\n}\n\nfunction cloneNsMatrix(nsMatrix) {\n var clone = {};\n\n var key;\n for (key in nsMatrix) {\n clone[key] = nsMatrix[key];\n }\n return clone;\n}\n\nfunction uriPrefix(prefix) {\n return prefix + '$uri';\n}\n\nfunction buildNsMatrix(nsUriToPrefix) {\n var nsMatrix = {};\n\n var uri;\n\n var prefix;\n\n for (uri in nsUriToPrefix) {\n prefix = nsUriToPrefix[uri];\n nsMatrix[prefix] = prefix;\n nsMatrix[uriPrefix(prefix)] = uri;\n }\n\n return nsMatrix;\n}\n\nfunction noopGetContext() {\n return { line: 0, column: 0 };\n}\n\nfunction throwFunc(err) {\n throw err;\n}\n\n/**\r\n * Creates a new parser with the given options.\r\n *\r\n * @constructor\r\n *\r\n * @param {!Object=} options\r\n */\nfunction Parser(options) {\n if (!this) {\n return new Parser(options);\n }\n\n var proxy = options && options['proxy'];\n\n var onText;\n\n var onOpenTag;\n\n var onCloseTag;\n\n var onCDATA;\n\n var onError = throwFunc;\n\n var onWarning;\n\n var onComment;\n\n var onQuestion;\n\n var onAttention;\n\n var getContext = noopGetContext;\n\n /**\r\n * Do we need to parse the current elements attributes for namespaces?\r\n *\r\n * @type {boolean}\r\n */\n var maybeNS = false;\n\n /**\r\n * Do we process namespaces at all?\r\n *\r\n * @type {boolean}\r\n */\n var isNamespace = false;\n\n /**\r\n * The caught error returned on parse end\r\n *\r\n * @type {Error}\r\n */\n var returnError = null;\n\n /**\r\n * Should we stop parsing?\r\n *\r\n * @type {boolean}\r\n */\n var parseStop = false;\n\n /**\r\n * A map of { uri: prefix } used by the parser.\r\n *\r\n * This map will ensure we can normalize prefixes during processing;\r\n * for each uri, only one prefix will be exposed to the handlers.\r\n *\r\n * @type {!Object}}\r\n */\n var nsUriToPrefix;\n\n /**\r\n * Handle parse error.\r\n *\r\n * @param {string|Error} err\r\n */\n function handleError(err) {\n if (!(err instanceof Error)) {\n err = error(err);\n }\n\n returnError = err;\n\n onError(err, getContext);\n }\n\n /**\r\n * Handle parse error.\r\n *\r\n * @param {string|Error} err\r\n */\n function handleWarning(err) {\n if (!onWarning) {\n return;\n }\n\n if (!(err instanceof Error)) {\n err = error(err);\n }\n\n onWarning(err, getContext);\n }\n\n /**\r\n * Register parse listener.\r\n *\r\n * @param {string} name\r\n * @param {Function} cb\r\n *\r\n * @return {Parser}\r\n */\n this['on'] = function (name, cb) {\n if (typeof cb !== 'function') {\n throw error('required args ');\n }\n\n switch (name) {\n case 'openTag':\n onOpenTag = cb;\n break;\n case 'text':\n onText = cb;\n break;\n case 'closeTag':\n onCloseTag = cb;\n break;\n case 'error':\n onError = cb;\n break;\n case 'warn':\n onWarning = cb;\n break;\n case 'cdata':\n onCDATA = cb;\n break;\n case 'attention':\n onAttention = cb;\n break; // \n case 'question':\n onQuestion = cb;\n break; // \n case 'comment':\n onComment = cb;\n break;\n default:\n throw error('unsupported event: ' + name);\n }\n\n return this;\n };\n\n /**\r\n * Set the namespace to prefix mapping.\r\n *\r\n * @example\r\n *\r\n * parser.ns({\r\n * 'http://foo': 'foo',\r\n * 'http://bar': 'bar'\r\n * });\r\n *\r\n * @param {!Object} nsMap\r\n *\r\n * @return {Parser}\r\n */\n this['ns'] = function (nsMap) {\n if (typeof nsMap === 'undefined') {\n nsMap = {};\n }\n\n if ((typeof nsMap === 'undefined' ? 'undefined' : _typeof(nsMap)) !== 'object') {\n throw error('required args ');\n }\n\n var _nsUriToPrefix = {};\n\n var k;\n\n for (k in nsMap) {\n _nsUriToPrefix[k] = nsMap[k];\n }\n\n // FORCE default mapping for schema instance\n _nsUriToPrefix[XSI_URI] = XSI_PREFIX;\n\n isNamespace = true;\n nsUriToPrefix = _nsUriToPrefix;\n\n return this;\n };\n\n /**\r\n * Parse xml string.\r\n *\r\n * @param {string} xml\r\n *\r\n * @return {Error} returnError, if not thrown\r\n */\n this['parse'] = function (xml) {\n if (typeof xml !== 'string') {\n throw error('required args ');\n }\n\n returnError = null;\n\n parse(xml);\n\n getContext = noopGetContext;\n parseStop = false;\n\n return returnError;\n };\n\n /**\r\n * Stop parsing.\r\n */\n this['stop'] = function () {\n parseStop = true;\n };\n\n /**\r\n * Parse string, invoking configured listeners on element.\r\n *\r\n * @param {string} xml\r\n */\n function parse(xml) {\n var nsMatrixStack = isNamespace ? [] : null;\n\n var nsMatrix = isNamespace ? buildNsMatrix(nsUriToPrefix) : null;\n\n var _nsMatrix;\n\n var nodeStack = [];\n\n var anonymousNsCount = 0;\n\n var tagStart = false;\n\n var tagEnd = false;\n\n var i = 0;\n\n var j = 0;\n\n var x;\n\n var y;\n\n var q;\n\n var w;\n\n var xmlns;\n\n var elementName;\n\n var _elementName;\n\n var elementProxy;\n\n var attrsString = '';\n\n var attrsStart = 0;\n\n var cachedAttrs; // false = parsed with errors, null = needs parsing\n\n /**\r\n * Parse attributes on demand and returns the parsed attributes.\r\n *\r\n * Return semantics: (1) `false` on attribute parse error,\r\n * (2) object hash on extracted attrs.\r\n *\r\n * @return {boolean|Object}\r\n */\n function getAttrs() {\n if (cachedAttrs !== null) {\n return cachedAttrs;\n }\n\n var nsUri;\n\n var nsUriPrefix;\n\n var nsName;\n\n var defaultAlias = isNamespace && nsMatrix['xmlns'];\n\n var attrList = isNamespace && maybeNS ? [] : null;\n\n var i = attrsStart;\n\n var s = attrsString;\n\n var l = s.length;\n\n var hasNewMatrix;\n\n var newalias;\n\n var value;\n\n var alias;\n\n var name;\n\n var attrs = {};\n\n var seenAttrs = {};\n\n var skipAttr;\n\n var w;\n\n var j;\n\n parseAttr: for (; i < l; i++) {\n skipAttr = false;\n w = s.charCodeAt(i);\n\n if (w === 32 || w < 14 && w > 8) {\n // WHITESPACE={ \\f\\n\\r\\t\\v}\n continue;\n }\n\n // wait for non whitespace character\n if (w < 65 || w > 122 || w > 90 && w < 97) {\n if (w !== 95 && w !== 58) {\n // char 95\"_\" 58\":\"\n handleWarning('illegal first char attribute name');\n skipAttr = true;\n }\n }\n\n // parse attribute name\n for (j = i + 1; j < l; j++) {\n w = s.charCodeAt(j);\n\n if (w > 96 && w < 123 || w > 64 && w < 91 || w > 47 && w < 59 || w === 46 || // '.'\n w === 45 || // '-'\n w === 95 // '_'\n ) {\n continue;\n }\n\n // unexpected whitespace\n if (w === 32 || w < 14 && w > 8) {\n // WHITESPACE\n handleWarning('missing attribute value');\n i = j;\n\n continue parseAttr;\n }\n\n // expected \"=\"\n if (w === 61) {\n // \"=\" == 61\n break;\n }\n\n handleWarning('illegal attribute name char');\n skipAttr = true;\n }\n\n name = s.substring(i, j);\n\n if (name === 'xmlns:xmlns') {\n handleWarning('illegal declaration of xmlns');\n skipAttr = true;\n }\n\n w = s.charCodeAt(j + 1);\n\n if (w === 34) {\n // '\"'\n j = s.indexOf('\"', i = j + 2);\n\n if (j === -1) {\n j = s.indexOf(\"'\", i);\n\n if (j !== -1) {\n handleWarning('attribute value quote missmatch');\n skipAttr = true;\n }\n }\n } else if (w === 39) {\n // \"'\"\n j = s.indexOf(\"'\", i = j + 2);\n\n if (j === -1) {\n j = s.indexOf('\"', i);\n\n if (j !== -1) {\n handleWarning('attribute value quote missmatch');\n skipAttr = true;\n }\n }\n } else {\n handleWarning('missing attribute value quotes');\n skipAttr = true;\n\n // skip to next space\n for (j = j + 1; j < l; j++) {\n w = s.charCodeAt(j + 1);\n\n if (w === 32 || w < 14 && w > 8) {\n // WHITESPACE\n break;\n }\n }\n }\n\n if (j === -1) {\n handleWarning('missing closing quotes');\n\n j = l;\n skipAttr = true;\n }\n\n if (!skipAttr) {\n value = s.substring(i, j);\n }\n\n i = j;\n\n // ensure SPACE follows attribute\n // skip illegal content otherwise\n // example a=\"b\"c\n for (; j + 1 < l; j++) {\n w = s.charCodeAt(j + 1);\n\n if (w === 32 || w < 14 && w > 8) {\n // WHITESPACE\n break;\n }\n\n // FIRST ILLEGAL CHAR\n if (i === j) {\n handleWarning('illegal character after attribute end');\n skipAttr = true;\n }\n }\n\n // advance cursor to next attribute\n i = j + 1;\n\n if (skipAttr) {\n continue parseAttr;\n }\n\n // check attribute re-declaration\n if (name in seenAttrs) {\n handleWarning('attribute <' + name + '> already defined');\n continue;\n }\n\n seenAttrs[name] = true;\n\n if (!isNamespace) {\n attrs[name] = value;\n continue;\n }\n\n // try to extract namespace information\n if (maybeNS) {\n newalias = name === 'xmlns' ? 'xmlns' : name.charCodeAt(0) === 120 && name.substr(0, 6) === 'xmlns:' ? name.substr(6) : null;\n\n // handle xmlns(:alias) assignment\n if (newalias !== null) {\n nsUri = decodeEntities(value);\n nsUriPrefix = uriPrefix(newalias);\n\n alias = nsUriToPrefix[nsUri];\n\n if (!alias) {\n // no prefix defined or prefix collision\n if (newalias === 'xmlns' || nsUriPrefix in nsMatrix && nsMatrix[nsUriPrefix] !== nsUri) {\n // alocate free ns prefix\n do {\n alias = 'ns' + anonymousNsCount++;\n } while (typeof nsMatrix[alias] !== 'undefined');\n } else {\n alias = newalias;\n }\n\n nsUriToPrefix[nsUri] = alias;\n }\n\n if (nsMatrix[newalias] !== alias) {\n if (!hasNewMatrix) {\n nsMatrix = cloneNsMatrix(nsMatrix);\n hasNewMatrix = true;\n }\n\n nsMatrix[newalias] = alias;\n if (newalias === 'xmlns') {\n nsMatrix[uriPrefix(alias)] = nsUri;\n defaultAlias = alias;\n }\n\n nsMatrix[nsUriPrefix] = nsUri;\n }\n\n // expose xmlns(:asd)=\"...\" in attributes\n attrs[name] = value;\n continue;\n }\n\n // collect attributes until all namespace\n // declarations are processed\n attrList.push(name, value);\n continue;\n } /** end if (maybeNs) */\n\n // handle attributes on element without\n // namespace declarations\n w = name.indexOf(':');\n if (w === -1) {\n attrs[name] = value;\n continue;\n }\n\n // normalize ns attribute name\n if (!(nsName = nsMatrix[name.substring(0, w)])) {\n handleWarning(missingNamespaceForPrefix(name.substring(0, w)));\n continue;\n }\n\n name = defaultAlias === nsName ? name.substr(w + 1) : nsName + name.substr(w);\n // end: normalize ns attribute name\n\n // normalize xsi:type ns attribute value\n if (name === XSI_TYPE) {\n w = value.indexOf(':');\n\n if (w !== -1) {\n nsName = value.substring(0, w);\n // handle default prefixes, i.e. xs:String gracefully\n nsName = nsMatrix[nsName] || nsName;\n value = nsName + value.substring(w);\n } else {\n value = defaultAlias + ':' + value;\n }\n }\n // end: normalize xsi:type ns attribute value\n\n attrs[name] = value;\n }\n\n // handle deferred, possibly namespaced attributes\n if (maybeNS) {\n // normalize captured attributes\n for (i = 0, l = attrList.length; i < l; i++) {\n name = attrList[i++];\n value = attrList[i];\n\n w = name.indexOf(':');\n\n if (w !== -1) {\n // normalize ns attribute name\n if (!(nsName = nsMatrix[name.substring(0, w)])) {\n handleWarning(missingNamespaceForPrefix(name.substring(0, w)));\n continue;\n }\n\n name = defaultAlias === nsName ? name.substr(w + 1) : nsName + name.substr(w);\n // end: normalize ns attribute name\n\n // normalize xsi:type ns attribute value\n if (name === XSI_TYPE) {\n w = value.indexOf(':');\n\n if (w !== -1) {\n nsName = value.substring(0, w);\n // handle default prefixes, i.e. xs:String gracefully\n nsName = nsMatrix[nsName] || nsName;\n value = nsName + value.substring(w);\n } else {\n value = defaultAlias + ':' + value;\n }\n }\n // end: normalize xsi:type ns attribute value\n }\n\n attrs[name] = value;\n }\n // end: normalize captured attributes\n }\n\n return cachedAttrs = attrs;\n }\n\n /**\r\n * Extract the parse context { line, column, part }\r\n * from the current parser position.\r\n *\r\n * @return {Object} parse context\r\n */\n function getParseContext() {\n var splitsRe = /(\\r\\n|\\r|\\n)/g;\n\n var line = 0;\n var column = 0;\n var startOfLine = 0;\n var endOfLine = j;\n var match;\n var data;\n\n while (i >= startOfLine) {\n match = splitsRe.exec(xml);\n\n if (!match) {\n break;\n }\n\n // end of line = (break idx + break chars)\n endOfLine = match[0].length + match.index;\n\n if (endOfLine > i) {\n break;\n }\n\n // advance to next line\n line += 1;\n\n startOfLine = endOfLine;\n }\n\n // EOF errors\n if (i === -1) {\n column = endOfLine;\n data = xml.substring(j);\n }\n // start errors\n else if (j === 0) {\n console.log(i - startOfLine);\n data = xml.substring(j, i);\n }\n // other errors\n else {\n column = i - startOfLine;\n data = j === -1 ? xml.substring(i) : xml.substring(i, j + 1);\n }\n\n return {\n data: data,\n line: line,\n column: column\n };\n }\n\n getContext = getParseContext;\n\n if (proxy) {\n elementProxy = Object.create({}, {\n name: getter(function () {\n return elementName;\n }),\n originalName: getter(function () {\n return _elementName;\n }),\n attrs: getter(getAttrs),\n ns: getter(function () {\n return nsMatrix;\n })\n });\n }\n\n // actual parse logic\n while (j !== -1) {\n if (xml.charCodeAt(j) === 60) {\n // \"<\"\n i = j;\n } else {\n i = xml.indexOf('<', j);\n }\n\n // parse end\n if (i === -1) {\n if (nodeStack.length) {\n return handleError('unexpected end of file');\n }\n\n if (j === 0) {\n return handleError('missing start tag');\n }\n\n if (j < xml.length) {\n if (xml.substring(j).trim()) {\n handleWarning(NON_WHITESPACE_OUTSIDE_ROOT_NODE);\n }\n }\n\n return;\n }\n\n // parse text\n if (j !== i) {\n if (nodeStack.length) {\n if (onText) {\n onText(xml.substring(j, i), decodeEntities, getContext);\n\n if (parseStop) {\n return;\n }\n }\n } else {\n if (xml.substring(j, i).trim()) {\n handleWarning(NON_WHITESPACE_OUTSIDE_ROOT_NODE);\n\n if (parseStop) {\n return;\n }\n }\n }\n }\n\n w = xml.charCodeAt(i + 1);\n\n // parse comments + CDATA\n if (w === 33) {\n // \"!\"\n w = xml.charCodeAt(i + 2);\n if (w === 91 && xml.substr(i + 3, 6) === 'CDATA[') {\n // 91 == \"[\"\n j = xml.indexOf(']]>', i);\n if (j === -1) {\n return handleError('unclosed cdata');\n }\n\n if (onCDATA) {\n onCDATA(xml.substring(i + 9, j), getContext);\n if (parseStop) {\n return;\n }\n }\n\n j += 3;\n continue;\n }\n\n if (w === 45 && xml.charCodeAt(i + 3) === 45) {\n // 45 == \"-\"\n j = xml.indexOf('-->', i);\n if (j === -1) {\n return handleError('unclosed comment');\n }\n\n if (onComment) {\n onComment(xml.substring(i + 4, j), decodeEntities, getContext);\n if (parseStop) {\n return;\n }\n }\n\n j += 3;\n continue;\n }\n\n j = xml.indexOf('>', i + 1);\n if (j === -1) {\n return handleError('unclosed tag');\n }\n\n if (onAttention) {\n onAttention(xml.substring(i, j + 1), decodeEntities, getContext);\n if (parseStop) {\n return;\n }\n }\n\n j += 1;\n continue;\n }\n\n if (w === 63) {\n // \"?\"\n j = xml.indexOf('?>', i);\n if (j === -1) {\n return handleError('unclosed question');\n }\n\n if (onQuestion) {\n onQuestion(xml.substring(i, j + 2), getContext);\n if (parseStop) {\n return;\n }\n }\n\n j += 2;\n continue;\n }\n\n j = xml.indexOf('>', i + 1);\n\n if (j === -1) {\n return handleError('unclosed tag');\n }\n\n // don't process attributes;\n // there are none\n cachedAttrs = {};\n\n // if (xml.charCodeAt(i+1) === 47) { // close tag match\n x = elementName = nodeStack.pop();\n q = i + 2 + x.length;\n\n if (xml.substring(i + 2, q) !== x) {\n return handleError('closing tag mismatch');\n }\n\n // verify chars in close tag\n for (; q < j; q++) {\n w = xml.charCodeAt(q);\n\n if (w === 32 || w > 8 && w < 14) {\n // \\f\\n\\r\\t\\v space\n continue;\n }\n\n return handleError('close tag');\n }\n } else {\n if (xml.charCodeAt(j - 1) === 47) {\n // .../>\n x = elementName = xml.substring(i + 1, j - 1);\n\n tagStart = true;\n tagEnd = true;\n } else {\n x = elementName = xml.substring(i + 1, j);\n\n tagStart = true;\n tagEnd = false;\n }\n\n if (!(w > 96 && w < 123 || w > 64 && w < 91 || w === 95 || w === 58)) {\n // char 95\"_\" 58\":\"\n return handleError('illegal first char nodeName');\n }\n\n for (q = 1, y = x.length; q < y; q++) {\n w = x.charCodeAt(q);\n\n if (w > 96 && w < 123 || w > 64 && w < 91 || w > 47 && w < 59 || w === 45 || w === 95 || w === 46) {\n continue;\n }\n\n if (w === 32 || w < 14 && w > 8) {\n // \\f\\n\\r\\t\\v space\n elementName = x.substring(0, q);\n // maybe there are attributes\n cachedAttrs = null;\n break;\n }\n\n return handleError('invalid nodeName');\n }\n\n if (!tagEnd) {\n nodeStack.push(elementName);\n }\n }\n\n if (isNamespace) {\n _nsMatrix = nsMatrix;\n\n if (tagStart) {\n // remember old namespace\n // unless we're self-closing\n if (!tagEnd) {\n nsMatrixStack.push(_nsMatrix);\n }\n\n if (cachedAttrs === null) {\n // quick check, whether there may be namespace\n // declarations on the node; if that is the case\n // we need to eagerly parse the node attributes\n if (maybeNS = x.indexOf('xmlns', q) !== -1) {\n attrsStart = q;\n attrsString = x;\n\n getAttrs();\n\n maybeNS = false;\n }\n }\n }\n\n _elementName = elementName;\n\n w = elementName.indexOf(':');\n if (w !== -1) {\n xmlns = nsMatrix[elementName.substring(0, w)];\n\n // prefix given; namespace must exist\n if (!xmlns) {\n return handleError('missing namespace on <' + _elementName + '>');\n }\n\n elementName = elementName.substr(w + 1);\n } else {\n xmlns = nsMatrix['xmlns'];\n\n // if no default namespace is defined,\n // we'll import the element as anonymous.\n //\n // it is up to users to correct that to the document defined\n // targetNamespace, or whatever their undersanding of the\n // XML spec mandates.\n }\n\n // adjust namespace prefixs as configured\n if (xmlns) {\n elementName = xmlns + ':' + elementName;\n }\n }\n\n if (tagStart) {\n attrsStart = q;\n attrsString = x;\n\n if (onOpenTag) {\n if (proxy) {\n onOpenTag(elementProxy, decodeEntities, tagEnd, getContext);\n } else {\n onOpenTag(elementName, getAttrs, decodeEntities, tagEnd, getContext);\n }\n\n if (parseStop) {\n return;\n }\n }\n }\n\n if (tagEnd) {\n if (onCloseTag) {\n onCloseTag(proxy ? elementProxy : elementName, decodeEntities, tagStart, getContext);\n\n if (parseStop) {\n return;\n }\n }\n\n // restore old namespace\n if (isNamespace) {\n if (!tagStart) {\n nsMatrix = nsMatrixStack.pop();\n } else {\n nsMatrix = _nsMatrix;\n }\n }\n }\n\n j += 1;\n }\n } /** end parse */\n}\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n Parser: Parser,\n decode: decodeEntities\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDAuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL3V0aWxzL3NheGVuLmpzPzc1ODgiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGVcclxuXHJcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHlcclxuXHJcbnZhciBFTlRJVFlfUEFUVEVSTiA9IC8mIyhcXGQrKTt8JiN4KFswLTlhLWZdKyk7fCYoXFx3Kyk7L2dpXHJcblxyXG52YXIgRU5USVRZX01BUFBJTkcgPSB7XHJcbiAgYW1wOiAnJicsXHJcbiAgYXBvczogXCInXCIsXHJcbiAgZ3Q6ICc+JyxcclxuICBsdDogJzwnLFxyXG4gIHF1b3Q6ICdcIidcclxufVxyXG5cclxuLy8gbWFwIFVQUEVSQ0FTRSB2YXJpYW50cyBvZiBzdXBwb3J0ZWQgc3BlY2lhbCBjaGFyc1xyXG5PYmplY3Qua2V5cyhFTlRJVFlfTUFQUElORykuZm9yRWFjaChmdW5jdGlvbihrKSB7XHJcbiAgRU5USVRZX01BUFBJTkdbay50b1VwcGVyQ2FzZSgpXSA9IEVOVElUWV9NQVBQSU5HW2tdXHJcbn0pXHJcblxyXG5mdW5jdGlvbiByZXBsYWNlRW50aXRpZXMoXywgZCwgeCwgeikge1xyXG4gIC8vIHJlc2VydmVkIG5hbWVzLCBpLmUuICZuYnNwO1xyXG4gIGlmICh6KSB7XHJcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChFTlRJVFlfTUFQUElORywgeikpIHtcclxuICAgICAgcmV0dXJuIEVOVElUWV9NQVBQSU5HW3pdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBmYWxsIGJhY2sgdG8gb3JpZ2luYWwgdmFsdWVcclxuICAgICAgcmV0dXJuICcmJyArIHogKyAnOydcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGRlY2ltYWwgZW5jb2RlZCBjaGFyXHJcbiAgaWYgKGQpIHtcclxuICAgIHJldHVybiBmcm9tQ2hhckNvZGUoZClcclxuICB9XHJcblxyXG4gIC8vIGhleCBlbmNvZGVkIGNoYXJcclxuICByZXR1cm4gZnJvbUNoYXJDb2RlKHBhcnNlSW50KHgsIDE2KSlcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgYmFzaWMgZW50aXR5IGRlY29kZXIgdGhhdCBjYW4gZGVjb2RlIGEgbWluaW1hbFxyXG4gKiBzdWItc2V0IG9mIHJlc2VydmVkIG5hbWVzICgmYW1wOykgYXMgd2VsbCBhc1xyXG4gKiBoZXggKCYjeGFhZjspIGFuZCBkZWNpbWFsICgmIzEyMzE7KSBlbmNvZGVkIGNoYXJhY3RlcnMuXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcclxuICpcclxuICogQHJldHVybiB7c3RyaW5nfSBkZWNvZGVkIHN0cmluZ1xyXG4gKi9cclxuZnVuY3Rpb24gZGVjb2RlRW50aXRpZXMocykge1xyXG4gIGlmIChzLmxlbmd0aCA+IDMgJiYgcy5pbmRleE9mKCcmJykgIT09IC0xKSB7XHJcbiAgICByZXR1cm4gcy5yZXBsYWNlKEVOVElUWV9QQVRURVJOLCByZXBsYWNlRW50aXRpZXMpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gc1xyXG59XHJcblxyXG52YXIgWFNJX1VSSSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSdcclxudmFyIFhTSV9QUkVGSVggPSAneHNpJ1xyXG52YXIgWFNJX1RZUEUgPSAneHNpOnR5cGUnXHJcblxyXG52YXIgTk9OX1dISVRFU1BBQ0VfT1VUU0lERV9ST09UX05PREUgPSAnbm9uLXdoaXRlc3BhY2Ugb3V0c2lkZSBvZiByb290IG5vZGUnXHJcblxyXG5mdW5jdGlvbiBlcnJvcihtc2cpIHtcclxuICByZXR1cm4gbmV3IEVycm9yKG1zZylcclxufVxyXG5cclxuZnVuY3Rpb24gbWlzc2luZ05hbWVzcGFjZUZvclByZWZpeChwcmVmaXgpIHtcclxuICByZXR1cm4gJ21pc3NpbmcgbmFtZXNwYWNlIGZvciBwcmVmaXggPCcgKyBwcmVmaXggKyAnPidcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0dGVyKGdldEZuKSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGdldDogZ2V0Rm4sXHJcbiAgICBlbnVtZXJhYmxlOiB0cnVlXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjbG9uZU5zTWF0cml4KG5zTWF0cml4KSB7XHJcbiAgdmFyIGNsb25lID0ge31cclxuXHJcbiAgdmFyIGtleVxyXG4gIGZvciAoa2V5IGluIG5zTWF0cml4KSB7XHJcbiAgICBjbG9uZVtrZXldID0gbnNNYXRyaXhba2V5XVxyXG4gIH1cclxuICByZXR1cm4gY2xvbmVcclxufVxyXG5cclxuZnVuY3Rpb24gdXJpUHJlZml4KHByZWZpeCkge1xyXG4gIHJldHVybiBwcmVmaXggKyAnJHVyaSdcclxufVxyXG5cclxuZnVuY3Rpb24gYnVpbGROc01hdHJpeChuc1VyaVRvUHJlZml4KSB7XHJcbiAgdmFyIG5zTWF0cml4ID0ge31cclxuXHJcbiAgdmFyIHVyaVxyXG5cclxuICB2YXIgcHJlZml4XHJcblxyXG4gIGZvciAodXJpIGluIG5zVXJpVG9QcmVmaXgpIHtcclxuICAgIHByZWZpeCA9IG5zVXJpVG9QcmVmaXhbdXJpXVxyXG4gICAgbnNNYXRyaXhbcHJlZml4XSA9IHByZWZpeFxyXG4gICAgbnNNYXRyaXhbdXJpUHJlZml4KHByZWZpeCldID0gdXJpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gbnNNYXRyaXhcclxufVxyXG5cclxuZnVuY3Rpb24gbm9vcEdldENvbnRleHQoKSB7XHJcbiAgcmV0dXJuIHsgbGluZTogMCwgY29sdW1uOiAwIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdGhyb3dGdW5jKGVycikge1xyXG4gIHRocm93IGVyclxyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIG5ldyBwYXJzZXIgd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy5cclxuICpcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSAgeyFPYmplY3Q8c3RyaW5nLCA/Pj19IG9wdGlvbnNcclxuICovXHJcbmZ1bmN0aW9uIFBhcnNlcihvcHRpb25zKSB7XHJcbiAgaWYgKCF0aGlzKSB7XHJcbiAgICByZXR1cm4gbmV3IFBhcnNlcihvcHRpb25zKVxyXG4gIH1cclxuXHJcbiAgdmFyIHByb3h5ID0gb3B0aW9ucyAmJiBvcHRpb25zWydwcm94eSddXHJcblxyXG4gIHZhciBvblRleHRcclxuXHJcbiAgdmFyIG9uT3BlblRhZ1xyXG5cclxuICB2YXIgb25DbG9zZVRhZ1xyXG5cclxuICB2YXIgb25DREFUQVxyXG5cclxuICB2YXIgb25FcnJvciA9IHRocm93RnVuY1xyXG5cclxuICB2YXIgb25XYXJuaW5nXHJcblxyXG4gIHZhciBvbkNvbW1lbnRcclxuXHJcbiAgdmFyIG9uUXVlc3Rpb25cclxuXHJcbiAgdmFyIG9uQXR0ZW50aW9uXHJcblxyXG4gIHZhciBnZXRDb250ZXh0ID0gbm9vcEdldENvbnRleHRcclxuXHJcbiAgLyoqXHJcbiAgICogRG8gd2UgbmVlZCB0byBwYXJzZSB0aGUgY3VycmVudCBlbGVtZW50cyBhdHRyaWJ1dGVzIGZvciBuYW1lc3BhY2VzP1xyXG4gICAqXHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgdmFyIG1heWJlTlMgPSBmYWxzZVxyXG5cclxuICAvKipcclxuICAgKiBEbyB3ZSBwcm9jZXNzIG5hbWVzcGFjZXMgYXQgYWxsP1xyXG4gICAqXHJcbiAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgdmFyIGlzTmFtZXNwYWNlID0gZmFsc2VcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGNhdWdodCBlcnJvciByZXR1cm5lZCBvbiBwYXJzZSBlbmRcclxuICAgKlxyXG4gICAqIEB0eXBlIHtFcnJvcn1cclxuICAgKi9cclxuICB2YXIgcmV0dXJuRXJyb3IgPSBudWxsXHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3VsZCB3ZSBzdG9wIHBhcnNpbmc/XHJcbiAgICpcclxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICB2YXIgcGFyc2VTdG9wID0gZmFsc2VcclxuXHJcbiAgLyoqXHJcbiAgICogQSBtYXAgb2YgeyB1cmk6IHByZWZpeCB9IHVzZWQgYnkgdGhlIHBhcnNlci5cclxuICAgKlxyXG4gICAqIFRoaXMgbWFwIHdpbGwgZW5zdXJlIHdlIGNhbiBub3JtYWxpemUgcHJlZml4ZXMgZHVyaW5nIHByb2Nlc3Npbmc7XHJcbiAgICogZm9yIGVhY2ggdXJpLCBvbmx5IG9uZSBwcmVmaXggd2lsbCBiZSBleHBvc2VkIHRvIHRoZSBoYW5kbGVycy5cclxuICAgKlxyXG4gICAqIEB0eXBlIHshT2JqZWN0PHN0cmluZywgc3RyaW5nPn19XHJcbiAgICovXHJcbiAgdmFyIG5zVXJpVG9QcmVmaXhcclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIHBhcnNlIGVycm9yLlxyXG4gICAqXHJcbiAgICogQHBhcmFtICB7c3RyaW5nfEVycm9yfSBlcnJcclxuICAgKi9cclxuICBmdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIpIHtcclxuICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSkge1xyXG4gICAgICBlcnIgPSBlcnJvcihlcnIpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuRXJyb3IgPSBlcnJcclxuXHJcbiAgICBvbkVycm9yKGVyciwgZ2V0Q29udGV4dClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSBwYXJzZSBlcnJvci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSAge3N0cmluZ3xFcnJvcn0gZXJyXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaGFuZGxlV2FybmluZyhlcnIpIHtcclxuICAgIGlmICghb25XYXJuaW5nKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSkge1xyXG4gICAgICBlcnIgPSBlcnJvcihlcnIpXHJcbiAgICB9XHJcblxyXG4gICAgb25XYXJuaW5nKGVyciwgZ2V0Q29udGV4dClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdGVyIHBhcnNlIGxpc3RlbmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtICB7c3RyaW5nfSAgIG5hbWVcclxuICAgKiBAcGFyYW0gIHtGdW5jdGlvbn0gY2JcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge1BhcnNlcn1cclxuICAgKi9cclxuICB0aGlzWydvbiddID0gZnVuY3Rpb24obmFtZSwgY2IpIHtcclxuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgdGhyb3cgZXJyb3IoJ3JlcXVpcmVkIGFyZ3MgPG5hbWUsIGNiPicpXHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoIChuYW1lKSB7XHJcbiAgICAgIGNhc2UgJ29wZW5UYWcnOlxyXG4gICAgICAgIG9uT3BlblRhZyA9IGNiXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAndGV4dCc6XHJcbiAgICAgICAgb25UZXh0ID0gY2JcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlICdjbG9zZVRhZyc6XHJcbiAgICAgICAgb25DbG9zZVRhZyA9IGNiXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnZXJyb3InOlxyXG4gICAgICAgIG9uRXJyb3IgPSBjYlxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ3dhcm4nOlxyXG4gICAgICAgIG9uV2FybmluZyA9IGNiXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAnY2RhdGEnOlxyXG4gICAgICAgIG9uQ0RBVEEgPSBjYlxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgJ2F0dGVudGlvbic6XHJcbiAgICAgICAgb25BdHRlbnRpb24gPSBjYlxyXG4gICAgICAgIGJyZWFrIC8vIDwhWFhYWFggenp6ej1cImVlZWVcIj5cclxuICAgICAgY2FzZSAncXVlc3Rpb24nOlxyXG4gICAgICAgIG9uUXVlc3Rpb24gPSBjYlxyXG4gICAgICAgIGJyZWFrIC8vIDw/IC4uLi4gID8+XHJcbiAgICAgIGNhc2UgJ2NvbW1lbnQnOlxyXG4gICAgICAgIG9uQ29tbWVudCA9IGNiXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBlcnJvcigndW5zdXBwb3J0ZWQgZXZlbnQ6ICcgKyBuYW1lKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIG5hbWVzcGFjZSB0byBwcmVmaXggbWFwcGluZy5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBwYXJzZXIubnMoe1xyXG4gICAqICAgJ2h0dHA6Ly9mb28nOiAnZm9vJyxcclxuICAgKiAgICdodHRwOi8vYmFyJzogJ2JhcidcclxuICAgKiB9KTtcclxuICAgKlxyXG4gICAqIEBwYXJhbSAgeyFPYmplY3Q8c3RyaW5nLCBzdHJpbmc+fSBuc01hcFxyXG4gICAqXHJcbiAgICogQHJldHVybiB7UGFyc2VyfVxyXG4gICAqL1xyXG4gIHRoaXNbJ25zJ10gPSBmdW5jdGlvbihuc01hcCkge1xyXG4gICAgaWYgKHR5cGVvZiBuc01hcCA9PT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgbnNNYXAgPSB7fVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgbnNNYXAgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgIHRocm93IGVycm9yKCdyZXF1aXJlZCBhcmdzIDxuc01hcD17fT4nKVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBfbnNVcmlUb1ByZWZpeCA9IHt9XHJcblxyXG4gICAgdmFyIGtcclxuXHJcbiAgICBmb3IgKGsgaW4gbnNNYXApIHtcclxuICAgICAgX25zVXJpVG9QcmVmaXhba10gPSBuc01hcFtrXVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEZPUkNFIGRlZmF1bHQgbWFwcGluZyBmb3Igc2NoZW1hIGluc3RhbmNlXHJcbiAgICBfbnNVcmlUb1ByZWZpeFtYU0lfVVJJXSA9IFhTSV9QUkVGSVhcclxuXHJcbiAgICBpc05hbWVzcGFjZSA9IHRydWVcclxuICAgIG5zVXJpVG9QcmVmaXggPSBfbnNVcmlUb1ByZWZpeFxyXG5cclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZSB4bWwgc3RyaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtICB7c3RyaW5nfSB4bWxcclxuICAgKlxyXG4gICAqIEByZXR1cm4ge0Vycm9yfSByZXR1cm5FcnJvciwgaWYgbm90IHRocm93blxyXG4gICAqL1xyXG4gIHRoaXNbJ3BhcnNlJ10gPSBmdW5jdGlvbih4bWwpIHtcclxuICAgIGlmICh0eXBlb2YgeG1sICE9PSAnc3RyaW5nJykge1xyXG4gICAgICB0aHJvdyBlcnJvcigncmVxdWlyZWQgYXJncyA8eG1sPXN0cmluZz4nKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybkVycm9yID0gbnVsbFxyXG5cclxuICAgIHBhcnNlKHhtbClcclxuXHJcbiAgICBnZXRDb250ZXh0ID0gbm9vcEdldENvbnRleHRcclxuICAgIHBhcnNlU3RvcCA9IGZhbHNlXHJcblxyXG4gICAgcmV0dXJuIHJldHVybkVycm9yXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdG9wIHBhcnNpbmcuXHJcbiAgICovXHJcbiAgdGhpc1snc3RvcCddID0gZnVuY3Rpb24oKSB7XHJcbiAgICBwYXJzZVN0b3AgPSB0cnVlXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZSBzdHJpbmcsIGludm9raW5nIGNvbmZpZ3VyZWQgbGlzdGVuZXJzIG9uIGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHhtbFxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHBhcnNlKHhtbCkge1xyXG4gICAgdmFyIG5zTWF0cml4U3RhY2sgPSBpc05hbWVzcGFjZSA/IFtdIDogbnVsbFxyXG5cclxuICAgIHZhciBuc01hdHJpeCA9IGlzTmFtZXNwYWNlID8gYnVpbGROc01hdHJpeChuc1VyaVRvUHJlZml4KSA6IG51bGxcclxuXHJcbiAgICB2YXIgX25zTWF0cml4XHJcblxyXG4gICAgdmFyIG5vZGVTdGFjayA9IFtdXHJcblxyXG4gICAgdmFyIGFub255bW91c05zQ291bnQgPSAwXHJcblxyXG4gICAgdmFyIHRhZ1N0YXJ0ID0gZmFsc2VcclxuXHJcbiAgICB2YXIgdGFnRW5kID0gZmFsc2VcclxuXHJcbiAgICB2YXIgaSA9IDBcclxuXHJcbiAgICB2YXIgaiA9IDBcclxuXHJcbiAgICB2YXIgeFxyXG5cclxuICAgIHZhciB5XHJcblxyXG4gICAgdmFyIHFcclxuXHJcbiAgICB2YXIgd1xyXG5cclxuICAgIHZhciB4bWxuc1xyXG5cclxuICAgIHZhciBlbGVtZW50TmFtZVxyXG5cclxuICAgIHZhciBfZWxlbWVudE5hbWVcclxuXHJcbiAgICB2YXIgZWxlbWVudFByb3h5XHJcblxyXG4gICAgdmFyIGF0dHJzU3RyaW5nID0gJydcclxuXHJcbiAgICB2YXIgYXR0cnNTdGFydCA9IDBcclxuXHJcbiAgICB2YXIgY2FjaGVkQXR0cnMgLy8gZmFsc2UgPSBwYXJzZWQgd2l0aCBlcnJvcnMsIG51bGwgPSBuZWVkcyBwYXJzaW5nXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZSBhdHRyaWJ1dGVzIG9uIGRlbWFuZCBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIGF0dHJpYnV0ZXMuXHJcbiAgICAgKlxyXG4gICAgICogUmV0dXJuIHNlbWFudGljczogKDEpIGBmYWxzZWAgb24gYXR0cmlidXRlIHBhcnNlIGVycm9yLFxyXG4gICAgICogKDIpIG9iamVjdCBoYXNoIG9uIGV4dHJhY3RlZCBhdHRycy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufE9iamVjdH1cclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gZ2V0QXR0cnMoKSB7XHJcbiAgICAgIGlmIChjYWNoZWRBdHRycyAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBjYWNoZWRBdHRyc1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2YXIgbnNVcmlcclxuXHJcbiAgICAgIHZhciBuc1VyaVByZWZpeFxyXG5cclxuICAgICAgdmFyIG5zTmFtZVxyXG5cclxuICAgICAgdmFyIGRlZmF1bHRBbGlhcyA9IGlzTmFtZXNwYWNlICYmIG5zTWF0cml4Wyd4bWxucyddXHJcblxyXG4gICAgICB2YXIgYXR0ckxpc3QgPSBpc05hbWVzcGFjZSAmJiBtYXliZU5TID8gW10gOiBudWxsXHJcblxyXG4gICAgICB2YXIgaSA9IGF0dHJzU3RhcnRcclxuXHJcbiAgICAgIHZhciBzID0gYXR0cnNTdHJpbmdcclxuXHJcbiAgICAgIHZhciBsID0gcy5sZW5ndGhcclxuXHJcbiAgICAgIHZhciBoYXNOZXdNYXRyaXhcclxuXHJcbiAgICAgIHZhciBuZXdhbGlhc1xyXG5cclxuICAgICAgdmFyIHZhbHVlXHJcblxyXG4gICAgICB2YXIgYWxpYXNcclxuXHJcbiAgICAgIHZhciBuYW1lXHJcblxyXG4gICAgICB2YXIgYXR0cnMgPSB7fVxyXG5cclxuICAgICAgdmFyIHNlZW5BdHRycyA9IHt9XHJcblxyXG4gICAgICB2YXIgc2tpcEF0dHJcclxuXHJcbiAgICAgIHZhciB3XHJcblxyXG4gICAgICB2YXIgalxyXG5cclxuICAgICAgcGFyc2VBdHRyOiBmb3IgKDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIHNraXBBdHRyID0gZmFsc2VcclxuICAgICAgICB3ID0gcy5jaGFyQ29kZUF0KGkpXHJcblxyXG4gICAgICAgIGlmICh3ID09PSAzMiB8fCAodyA8IDE0ICYmIHcgPiA4KSkge1xyXG4gICAgICAgICAgLy8gV0hJVEVTUEFDRT17IFxcZlxcblxcclxcdFxcdn1cclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB3YWl0IGZvciBub24gd2hpdGVzcGFjZSBjaGFyYWN0ZXJcclxuICAgICAgICBpZiAodyA8IDY1IHx8IHcgPiAxMjIgfHwgKHcgPiA5MCAmJiB3IDwgOTcpKSB7XHJcbiAgICAgICAgICBpZiAodyAhPT0gOTUgJiYgdyAhPT0gNTgpIHtcclxuICAgICAgICAgICAgLy8gY2hhciA5NVwiX1wiIDU4XCI6XCJcclxuICAgICAgICAgICAgaGFuZGxlV2FybmluZygnaWxsZWdhbCBmaXJzdCBjaGFyIGF0dHJpYnV0ZSBuYW1lJylcclxuICAgICAgICAgICAgc2tpcEF0dHIgPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwYXJzZSBhdHRyaWJ1dGUgbmFtZVxyXG4gICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgbDsgaisrKSB7XHJcbiAgICAgICAgICB3ID0gcy5jaGFyQ29kZUF0KGopXHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAodyA+IDk2ICYmIHcgPCAxMjMpIHx8XHJcbiAgICAgICAgICAgICh3ID4gNjQgJiYgdyA8IDkxKSB8fFxyXG4gICAgICAgICAgICAodyA+IDQ3ICYmIHcgPCA1OSkgfHxcclxuICAgICAgICAgICAgdyA9PT0gNDYgfHwgLy8gJy4nXHJcbiAgICAgICAgICAgIHcgPT09IDQ1IHx8IC8vICctJ1xyXG4gICAgICAgICAgICB3ID09PSA5NSAvLyAnXydcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgd2hpdGVzcGFjZVxyXG4gICAgICAgICAgaWYgKHcgPT09IDMyIHx8ICh3IDwgMTQgJiYgdyA+IDgpKSB7XHJcbiAgICAgICAgICAgIC8vIFdISVRFU1BBQ0VcclxuICAgICAgICAgICAgaGFuZGxlV2FybmluZygnbWlzc2luZyBhdHRyaWJ1dGUgdmFsdWUnKVxyXG4gICAgICAgICAgICBpID0galxyXG5cclxuICAgICAgICAgICAgY29udGludWUgcGFyc2VBdHRyXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gZXhwZWN0ZWQgXCI9XCJcclxuICAgICAgICAgIGlmICh3ID09PSA2MSkge1xyXG4gICAgICAgICAgICAvLyBcIj1cIiA9PSA2MVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2lsbGVnYWwgYXR0cmlidXRlIG5hbWUgY2hhcicpXHJcbiAgICAgICAgICBza2lwQXR0ciA9IHRydWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG5hbWUgPSBzLnN1YnN0cmluZyhpLCBqKVxyXG5cclxuICAgICAgICBpZiAobmFtZSA9PT0gJ3htbG5zOnhtbG5zJykge1xyXG4gICAgICAgICAgaGFuZGxlV2FybmluZygnaWxsZWdhbCBkZWNsYXJhdGlvbiBvZiB4bWxucycpXHJcbiAgICAgICAgICBza2lwQXR0ciA9IHRydWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHcgPSBzLmNoYXJDb2RlQXQoaiArIDEpXHJcblxyXG4gICAgICAgIGlmICh3ID09PSAzNCkge1xyXG4gICAgICAgICAgLy8gJ1wiJ1xyXG4gICAgICAgICAgaiA9IHMuaW5kZXhPZignXCInLCAoaSA9IGogKyAyKSlcclxuXHJcbiAgICAgICAgICBpZiAoaiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgaiA9IHMuaW5kZXhPZihcIidcIiwgaSlcclxuXHJcbiAgICAgICAgICAgIGlmIChqICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcoJ2F0dHJpYnV0ZSB2YWx1ZSBxdW90ZSBtaXNzbWF0Y2gnKVxyXG4gICAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh3ID09PSAzOSkge1xyXG4gICAgICAgICAgLy8gXCInXCJcclxuICAgICAgICAgIGogPSBzLmluZGV4T2YoXCInXCIsIChpID0gaiArIDIpKVxyXG5cclxuICAgICAgICAgIGlmIChqID09PSAtMSkge1xyXG4gICAgICAgICAgICBqID0gcy5pbmRleE9mKCdcIicsIGkpXHJcblxyXG4gICAgICAgICAgICBpZiAoaiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdhdHRyaWJ1dGUgdmFsdWUgcXVvdGUgbWlzc21hdGNoJylcclxuICAgICAgICAgICAgICBza2lwQXR0ciA9IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBoYW5kbGVXYXJuaW5nKCdtaXNzaW5nIGF0dHJpYnV0ZSB2YWx1ZSBxdW90ZXMnKVxyXG4gICAgICAgICAgc2tpcEF0dHIgPSB0cnVlXHJcblxyXG4gICAgICAgICAgLy8gc2tpcCB0byBuZXh0IHNwYWNlXHJcbiAgICAgICAgICBmb3IgKGogPSBqICsgMTsgaiA8IGw7IGorKykge1xyXG4gICAgICAgICAgICB3ID0gcy5jaGFyQ29kZUF0KGogKyAxKVxyXG5cclxuICAgICAgICAgICAgaWYgKHcgPT09IDMyIHx8ICh3IDwgMTQgJiYgdyA+IDgpKSB7XHJcbiAgICAgICAgICAgICAgLy8gV0hJVEVTUEFDRVxyXG4gICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChqID09PSAtMSkge1xyXG4gICAgICAgICAgaGFuZGxlV2FybmluZygnbWlzc2luZyBjbG9zaW5nIHF1b3RlcycpXHJcblxyXG4gICAgICAgICAgaiA9IGxcclxuICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFza2lwQXR0cikge1xyXG4gICAgICAgICAgdmFsdWUgPSBzLnN1YnN0cmluZyhpLCBqKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaSA9IGpcclxuXHJcbiAgICAgICAgLy8gZW5zdXJlIFNQQUNFIGZvbGxvd3MgYXR0cmlidXRlXHJcbiAgICAgICAgLy8gc2tpcCBpbGxlZ2FsIGNvbnRlbnQgb3RoZXJ3aXNlXHJcbiAgICAgICAgLy8gZXhhbXBsZSBhPVwiYlwiY1xyXG4gICAgICAgIGZvciAoOyBqICsgMSA8IGw7IGorKykge1xyXG4gICAgICAgICAgdyA9IHMuY2hhckNvZGVBdChqICsgMSlcclxuXHJcbiAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgKHcgPCAxNCAmJiB3ID4gOCkpIHtcclxuICAgICAgICAgICAgLy8gV0hJVEVTUEFDRVxyXG4gICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEZJUlNUIElMTEVHQUwgQ0hBUlxyXG4gICAgICAgICAgaWYgKGkgPT09IGopIHtcclxuICAgICAgICAgICAgaGFuZGxlV2FybmluZygnaWxsZWdhbCBjaGFyYWN0ZXIgYWZ0ZXIgYXR0cmlidXRlIGVuZCcpXHJcbiAgICAgICAgICAgIHNraXBBdHRyID0gdHJ1ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYWR2YW5jZSBjdXJzb3IgdG8gbmV4dCBhdHRyaWJ1dGVcclxuICAgICAgICBpID0gaiArIDFcclxuXHJcbiAgICAgICAgaWYgKHNraXBBdHRyKSB7XHJcbiAgICAgICAgICBjb250aW51ZSBwYXJzZUF0dHJcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGF0dHJpYnV0ZSByZS1kZWNsYXJhdGlvblxyXG4gICAgICAgIGlmIChuYW1lIGluIHNlZW5BdHRycykge1xyXG4gICAgICAgICAgaGFuZGxlV2FybmluZygnYXR0cmlidXRlIDwnICsgbmFtZSArICc+IGFscmVhZHkgZGVmaW5lZCcpXHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2VlbkF0dHJzW25hbWVdID0gdHJ1ZVxyXG5cclxuICAgICAgICBpZiAoIWlzTmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlXHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdHJ5IHRvIGV4dHJhY3QgbmFtZXNwYWNlIGluZm9ybWF0aW9uXHJcbiAgICAgICAgaWYgKG1heWJlTlMpIHtcclxuICAgICAgICAgIG5ld2FsaWFzID1cclxuICAgICAgICAgICAgbmFtZSA9PT0gJ3htbG5zJ1xyXG4gICAgICAgICAgICAgID8gJ3htbG5zJ1xyXG4gICAgICAgICAgICAgIDogbmFtZS5jaGFyQ29kZUF0KDApID09PSAxMjAgJiYgbmFtZS5zdWJzdHIoMCwgNikgPT09ICd4bWxuczonXHJcbiAgICAgICAgICAgICAgICA/IG5hbWUuc3Vic3RyKDYpXHJcbiAgICAgICAgICAgICAgICA6IG51bGxcclxuXHJcbiAgICAgICAgICAvLyBoYW5kbGUgeG1sbnMoOmFsaWFzKSBhc3NpZ25tZW50XHJcbiAgICAgICAgICBpZiAobmV3YWxpYXMgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgbnNVcmkgPSBkZWNvZGVFbnRpdGllcyh2YWx1ZSlcclxuICAgICAgICAgICAgbnNVcmlQcmVmaXggPSB1cmlQcmVmaXgobmV3YWxpYXMpXHJcblxyXG4gICAgICAgICAgICBhbGlhcyA9IG5zVXJpVG9QcmVmaXhbbnNVcmldXHJcblxyXG4gICAgICAgICAgICBpZiAoIWFsaWFzKSB7XHJcbiAgICAgICAgICAgICAgLy8gbm8gcHJlZml4IGRlZmluZWQgb3IgcHJlZml4IGNvbGxpc2lvblxyXG4gICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIG5ld2FsaWFzID09PSAneG1sbnMnIHx8XHJcbiAgICAgICAgICAgICAgICAobnNVcmlQcmVmaXggaW4gbnNNYXRyaXggJiYgbnNNYXRyaXhbbnNVcmlQcmVmaXhdICE9PSBuc1VyaSlcclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIC8vIGFsb2NhdGUgZnJlZSBucyBwcmVmaXhcclxuICAgICAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgICAgYWxpYXMgPSAnbnMnICsgYW5vbnltb3VzTnNDb3VudCsrXHJcbiAgICAgICAgICAgICAgICB9IHdoaWxlICh0eXBlb2YgbnNNYXRyaXhbYWxpYXNdICE9PSAndW5kZWZpbmVkJylcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWxpYXMgPSBuZXdhbGlhc1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbnNVcmlUb1ByZWZpeFtuc1VyaV0gPSBhbGlhc1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobnNNYXRyaXhbbmV3YWxpYXNdICE9PSBhbGlhcykge1xyXG4gICAgICAgICAgICAgIGlmICghaGFzTmV3TWF0cml4KSB7XHJcbiAgICAgICAgICAgICAgICBuc01hdHJpeCA9IGNsb25lTnNNYXRyaXgobnNNYXRyaXgpXHJcbiAgICAgICAgICAgICAgICBoYXNOZXdNYXRyaXggPSB0cnVlXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBuc01hdHJpeFtuZXdhbGlhc10gPSBhbGlhc1xyXG4gICAgICAgICAgICAgIGlmIChuZXdhbGlhcyA9PT0gJ3htbG5zJykge1xyXG4gICAgICAgICAgICAgICAgbnNNYXRyaXhbdXJpUHJlZml4KGFsaWFzKV0gPSBuc1VyaVxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdEFsaWFzID0gYWxpYXNcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIG5zTWF0cml4W25zVXJpUHJlZml4XSA9IG5zVXJpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGV4cG9zZSB4bWxucyg6YXNkKT1cIi4uLlwiIGluIGF0dHJpYnV0ZXNcclxuICAgICAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZVxyXG4gICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGNvbGxlY3QgYXR0cmlidXRlcyB1bnRpbCBhbGwgbmFtZXNwYWNlXHJcbiAgICAgICAgICAvLyBkZWNsYXJhdGlvbnMgYXJlIHByb2Nlc3NlZFxyXG4gICAgICAgICAgYXR0ckxpc3QucHVzaChuYW1lLCB2YWx1ZSlcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfSAvKiogZW5kIGlmIChtYXliZU5zKSAqL1xyXG5cclxuICAgICAgICAvLyBoYW5kbGUgYXR0cmlidXRlcyBvbiBlbGVtZW50IHdpdGhvdXRcclxuICAgICAgICAvLyBuYW1lc3BhY2UgZGVjbGFyYXRpb25zXHJcbiAgICAgICAgdyA9IG5hbWUuaW5kZXhPZignOicpXHJcbiAgICAgICAgaWYgKHcgPT09IC0xKSB7XHJcbiAgICAgICAgICBhdHRyc1tuYW1lXSA9IHZhbHVlXHJcbiAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbm9ybWFsaXplIG5zIGF0dHJpYnV0ZSBuYW1lXHJcbiAgICAgICAgaWYgKCEobnNOYW1lID0gbnNNYXRyaXhbbmFtZS5zdWJzdHJpbmcoMCwgdyldKSkge1xyXG4gICAgICAgICAgaGFuZGxlV2FybmluZyhtaXNzaW5nTmFtZXNwYWNlRm9yUHJlZml4KG5hbWUuc3Vic3RyaW5nKDAsIHcpKSlcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBuYW1lID1cclxuICAgICAgICAgIGRlZmF1bHRBbGlhcyA9PT0gbnNOYW1lID8gbmFtZS5zdWJzdHIodyArIDEpIDogbnNOYW1lICsgbmFtZS5zdWJzdHIodylcclxuICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSBucyBhdHRyaWJ1dGUgbmFtZVxyXG5cclxuICAgICAgICAvLyBub3JtYWxpemUgeHNpOnR5cGUgbnMgYXR0cmlidXRlIHZhbHVlXHJcbiAgICAgICAgaWYgKG5hbWUgPT09IFhTSV9UWVBFKSB7XHJcbiAgICAgICAgICB3ID0gdmFsdWUuaW5kZXhPZignOicpXHJcblxyXG4gICAgICAgICAgaWYgKHcgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIG5zTmFtZSA9IHZhbHVlLnN1YnN0cmluZygwLCB3KVxyXG4gICAgICAgICAgICAvLyBoYW5kbGUgZGVmYXVsdCBwcmVmaXhlcywgaS5lLiB4czpTdHJpbmcgZ3JhY2VmdWxseVxyXG4gICAgICAgICAgICBuc05hbWUgPSBuc01hdHJpeFtuc05hbWVdIHx8IG5zTmFtZVxyXG4gICAgICAgICAgICB2YWx1ZSA9IG5zTmFtZSArIHZhbHVlLnN1YnN0cmluZyh3KVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBkZWZhdWx0QWxpYXMgKyAnOicgKyB2YWx1ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSB4c2k6dHlwZSBucyBhdHRyaWJ1dGUgdmFsdWVcclxuXHJcbiAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBoYW5kbGUgZGVmZXJyZWQsIHBvc3NpYmx5IG5hbWVzcGFjZWQgYXR0cmlidXRlc1xyXG4gICAgICBpZiAobWF5YmVOUykge1xyXG4gICAgICAgIC8vIG5vcm1hbGl6ZSBjYXB0dXJlZCBhdHRyaWJ1dGVzXHJcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGF0dHJMaXN0Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgICAgbmFtZSA9IGF0dHJMaXN0W2krK11cclxuICAgICAgICAgIHZhbHVlID0gYXR0ckxpc3RbaV1cclxuXHJcbiAgICAgICAgICB3ID0gbmFtZS5pbmRleE9mKCc6JylcclxuXHJcbiAgICAgICAgICBpZiAodyAhPT0gLTEpIHtcclxuICAgICAgICAgICAgLy8gbm9ybWFsaXplIG5zIGF0dHJpYnV0ZSBuYW1lXHJcbiAgICAgICAgICAgIGlmICghKG5zTmFtZSA9IG5zTWF0cml4W25hbWUuc3Vic3RyaW5nKDAsIHcpXSkpIHtcclxuICAgICAgICAgICAgICBoYW5kbGVXYXJuaW5nKG1pc3NpbmdOYW1lc3BhY2VGb3JQcmVmaXgobmFtZS5zdWJzdHJpbmcoMCwgdykpKVxyXG4gICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG5hbWUgPVxyXG4gICAgICAgICAgICAgIGRlZmF1bHRBbGlhcyA9PT0gbnNOYW1lXHJcbiAgICAgICAgICAgICAgICA/IG5hbWUuc3Vic3RyKHcgKyAxKVxyXG4gICAgICAgICAgICAgICAgOiBuc05hbWUgKyBuYW1lLnN1YnN0cih3KVxyXG4gICAgICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSBucyBhdHRyaWJ1dGUgbmFtZVxyXG5cclxuICAgICAgICAgICAgLy8gbm9ybWFsaXplIHhzaTp0eXBlIG5zIGF0dHJpYnV0ZSB2YWx1ZVxyXG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gWFNJX1RZUEUpIHtcclxuICAgICAgICAgICAgICB3ID0gdmFsdWUuaW5kZXhPZignOicpXHJcblxyXG4gICAgICAgICAgICAgIGlmICh3ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbnNOYW1lID0gdmFsdWUuc3Vic3RyaW5nKDAsIHcpXHJcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgZGVmYXVsdCBwcmVmaXhlcywgaS5lLiB4czpTdHJpbmcgZ3JhY2VmdWxseVxyXG4gICAgICAgICAgICAgICAgbnNOYW1lID0gbnNNYXRyaXhbbnNOYW1lXSB8fCBuc05hbWVcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gbnNOYW1lICsgdmFsdWUuc3Vic3RyaW5nKHcpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdEFsaWFzICsgJzonICsgdmFsdWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gZW5kOiBub3JtYWxpemUgeHNpOnR5cGUgbnMgYXR0cmlidXRlIHZhbHVlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYXR0cnNbbmFtZV0gPSB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbmQ6IG5vcm1hbGl6ZSBjYXB0dXJlZCBhdHRyaWJ1dGVzXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAoY2FjaGVkQXR0cnMgPSBhdHRycylcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV4dHJhY3QgdGhlIHBhcnNlIGNvbnRleHQgeyBsaW5lLCBjb2x1bW4sIHBhcnQgfVxyXG4gICAgICogZnJvbSB0aGUgY3VycmVudCBwYXJzZXIgcG9zaXRpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBwYXJzZSBjb250ZXh0XHJcbiAgICAgKi9cclxuICAgIGZ1bmN0aW9uIGdldFBhcnNlQ29udGV4dCgpIHtcclxuICAgICAgdmFyIHNwbGl0c1JlID0gLyhcXHJcXG58XFxyfFxcbikvZ1xyXG5cclxuICAgICAgdmFyIGxpbmUgPSAwXHJcbiAgICAgIHZhciBjb2x1bW4gPSAwXHJcbiAgICAgIHZhciBzdGFydE9mTGluZSA9IDBcclxuICAgICAgdmFyIGVuZE9mTGluZSA9IGpcclxuICAgICAgdmFyIG1hdGNoXHJcbiAgICAgIHZhciBkYXRhXHJcblxyXG4gICAgICB3aGlsZSAoaSA+PSBzdGFydE9mTGluZSkge1xyXG4gICAgICAgIG1hdGNoID0gc3BsaXRzUmUuZXhlYyh4bWwpXHJcblxyXG4gICAgICAgIGlmICghbWF0Y2gpIHtcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBlbmQgb2YgbGluZSA9IChicmVhayBpZHggKyBicmVhayBjaGFycylcclxuICAgICAgICBlbmRPZkxpbmUgPSBtYXRjaFswXS5sZW5ndGggKyBtYXRjaC5pbmRleFxyXG5cclxuICAgICAgICBpZiAoZW5kT2ZMaW5lID4gaSkge1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkdmFuY2UgdG8gbmV4dCBsaW5lXHJcbiAgICAgICAgbGluZSArPSAxXHJcblxyXG4gICAgICAgIHN0YXJ0T2ZMaW5lID0gZW5kT2ZMaW5lXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEVPRiBlcnJvcnNcclxuICAgICAgaWYgKGkgPT09IC0xKSB7XHJcbiAgICAgICAgY29sdW1uID0gZW5kT2ZMaW5lXHJcbiAgICAgICAgZGF0YSA9IHhtbC5zdWJzdHJpbmcoailcclxuICAgICAgfVxyXG4gICAgICAvLyBzdGFydCBlcnJvcnNcclxuICAgICAgZWxzZSBpZiAoaiA9PT0gMCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGkgLSBzdGFydE9mTGluZSlcclxuICAgICAgICBkYXRhID0geG1sLnN1YnN0cmluZyhqLCBpKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIG90aGVyIGVycm9yc1xyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb2x1bW4gPSBpIC0gc3RhcnRPZkxpbmVcclxuICAgICAgICBkYXRhID0gaiA9PT0gLTEgPyB4bWwuc3Vic3RyaW5nKGkpIDogeG1sLnN1YnN0cmluZyhpLCBqICsgMSlcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgIGxpbmU6IGxpbmUsXHJcbiAgICAgICAgY29sdW1uOiBjb2x1bW5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldENvbnRleHQgPSBnZXRQYXJzZUNvbnRleHRcclxuXHJcbiAgICBpZiAocHJveHkpIHtcclxuICAgICAgZWxlbWVudFByb3h5ID0gT2JqZWN0LmNyZWF0ZShcclxuICAgICAgICB7fSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiBnZXR0ZXIoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50TmFtZVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBvcmlnaW5hbE5hbWU6IGdldHRlcihmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF9lbGVtZW50TmFtZVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBhdHRyczogZ2V0dGVyKGdldEF0dHJzKSxcclxuICAgICAgICAgIG5zOiBnZXR0ZXIoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuc01hdHJpeFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuICAgIH1cclxuXHJcbiAgICAvLyBhY3R1YWwgcGFyc2UgbG9naWNcclxuICAgIHdoaWxlIChqICE9PSAtMSkge1xyXG4gICAgICBpZiAoeG1sLmNoYXJDb2RlQXQoaikgPT09IDYwKSB7XHJcbiAgICAgICAgLy8gXCI8XCJcclxuICAgICAgICBpID0galxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGkgPSB4bWwuaW5kZXhPZignPCcsIGopXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHBhcnNlIGVuZFxyXG4gICAgICBpZiAoaSA9PT0gLTEpIHtcclxuICAgICAgICBpZiAobm9kZVN0YWNrLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCd1bmV4cGVjdGVkIGVuZCBvZiBmaWxlJylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChqID09PSAwKSB7XHJcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ21pc3Npbmcgc3RhcnQgdGFnJylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChqIDwgeG1sLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKHhtbC5zdWJzdHJpbmcoaikudHJpbSgpKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZVdhcm5pbmcoTk9OX1dISVRFU1BBQ0VfT1VUU0lERV9ST09UX05PREUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gcGFyc2UgdGV4dFxyXG4gICAgICBpZiAoaiAhPT0gaSkge1xyXG4gICAgICAgIGlmIChub2RlU3RhY2subGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAob25UZXh0KSB7XHJcbiAgICAgICAgICAgIG9uVGV4dCh4bWwuc3Vic3RyaW5nKGosIGkpLCBkZWNvZGVFbnRpdGllcywgZ2V0Q29udGV4dClcclxuXHJcbiAgICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcclxuICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoeG1sLnN1YnN0cmluZyhqLCBpKS50cmltKCkpIHtcclxuICAgICAgICAgICAgaGFuZGxlV2FybmluZyhOT05fV0hJVEVTUEFDRV9PVVRTSURFX1JPT1RfTk9ERSlcclxuXHJcbiAgICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcclxuICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdyA9IHhtbC5jaGFyQ29kZUF0KGkgKyAxKVxyXG5cclxuICAgICAgLy8gcGFyc2UgY29tbWVudHMgKyBDREFUQVxyXG4gICAgICBpZiAodyA9PT0gMzMpIHtcclxuICAgICAgICAvLyBcIiFcIlxyXG4gICAgICAgIHcgPSB4bWwuY2hhckNvZGVBdChpICsgMilcclxuICAgICAgICBpZiAodyA9PT0gOTEgJiYgeG1sLnN1YnN0cihpICsgMywgNikgPT09ICdDREFUQVsnKSB7XHJcbiAgICAgICAgICAvLyA5MSA9PSBcIltcIlxyXG4gICAgICAgICAgaiA9IHhtbC5pbmRleE9mKCddXT4nLCBpKVxyXG4gICAgICAgICAgaWYgKGogPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcigndW5jbG9zZWQgY2RhdGEnKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChvbkNEQVRBKSB7XHJcbiAgICAgICAgICAgIG9uQ0RBVEEoeG1sLnN1YnN0cmluZyhpICsgOSwgaiksIGdldENvbnRleHQpXHJcbiAgICAgICAgICAgIGlmIChwYXJzZVN0b3ApIHtcclxuICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGogKz0gM1xyXG4gICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh3ID09PSA0NSAmJiB4bWwuY2hhckNvZGVBdChpICsgMykgPT09IDQ1KSB7XHJcbiAgICAgICAgICAvLyA0NSA9PSBcIi1cIlxyXG4gICAgICAgICAgaiA9IHhtbC5pbmRleE9mKCctLT4nLCBpKVxyXG4gICAgICAgICAgaWYgKGogPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcigndW5jbG9zZWQgY29tbWVudCcpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKG9uQ29tbWVudCkge1xyXG4gICAgICAgICAgICBvbkNvbW1lbnQoeG1sLnN1YnN0cmluZyhpICsgNCwgaiksIGRlY29kZUVudGl0aWVzLCBnZXRDb250ZXh0KVxyXG4gICAgICAgICAgICBpZiAocGFyc2VTdG9wKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBqICs9IDNcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBqID0geG1sLmluZGV4T2YoJz4nLCBpICsgMSlcclxuICAgICAgICBpZiAoaiA9PT0gLTEpIHtcclxuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcigndW5jbG9zZWQgdGFnJylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvbkF0dGVudGlvbikge1xyXG4gICAgICAgICAgb25BdHRlbnRpb24oeG1sLnN1YnN0cmluZyhpLCBqICsgMSksIGRlY29kZUVudGl0aWVzLCBnZXRDb250ZXh0KVxyXG4gICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogKz0gMVxyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh3ID09PSA2Mykge1xyXG4gICAgICAgIC8vIFwiP1wiXHJcbiAgICAgICAgaiA9IHhtbC5pbmRleE9mKCc/PicsIGkpXHJcbiAgICAgICAgaWYgKGogPT09IC0xKSB7XHJcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ3VuY2xvc2VkIHF1ZXN0aW9uJylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvblF1ZXN0aW9uKSB7XHJcbiAgICAgICAgICBvblF1ZXN0aW9uKHhtbC5zdWJzdHJpbmcoaSwgaiArIDIpLCBnZXRDb250ZXh0KVxyXG4gICAgICAgICAgaWYgKHBhcnNlU3RvcCkge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGogKz0gMlxyXG4gICAgICAgIGNvbnRpbnVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGogPSB4bWwuaW5kZXhPZignPicsIGkgKyAxKVxyXG5cclxuICAgICAgaWYgKGogPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCd1bmNsb3NlZCB0YWcnKVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBkb24ndCBwcm9jZXNzIGF0dHJpYnV0ZXM7XHJcbiAgICAgIC8vIHRoZXJlIGFyZSBub25lXHJcbiAgICAgIGNhY2hlZEF0dHJzID0ge31cclxuXHJcbiAgICAgIC8vIGlmICh4bWwuY2hhckNvZGVBdChpKzEpID09PSA0NykgeyAvLyA8Ly4uLlxyXG4gICAgICBpZiAodyA9PT0gNDcpIHtcclxuICAgICAgICAvLyA8Ly4uLlxyXG4gICAgICAgIHRhZ1N0YXJ0ID0gZmFsc2VcclxuICAgICAgICB0YWdFbmQgPSB0cnVlXHJcblxyXG4gICAgICAgIGlmICghbm9kZVN0YWNrLmxlbmd0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCdtaXNzaW5nIG9wZW4gdGFnJylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHZlcmlmeSBvcGVuIDwtPiBjbG9zZSB0YWcgbWF0Y2hcclxuICAgICAgICB4ID0gZWxlbWVudE5hbWUgPSBub2RlU3RhY2sucG9wKClcclxuICAgICAgICBxID0gaSArIDIgKyB4Lmxlbmd0aFxyXG5cclxuICAgICAgICBpZiAoeG1sLnN1YnN0cmluZyhpICsgMiwgcSkgIT09IHgpIHtcclxuICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcignY2xvc2luZyB0YWcgbWlzbWF0Y2gnKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdmVyaWZ5IGNoYXJzIGluIGNsb3NlIHRhZ1xyXG4gICAgICAgIGZvciAoOyBxIDwgajsgcSsrKSB7XHJcbiAgICAgICAgICB3ID0geG1sLmNoYXJDb2RlQXQocSlcclxuXHJcbiAgICAgICAgICBpZiAodyA9PT0gMzIgfHwgKHcgPiA4ICYmIHcgPCAxNCkpIHtcclxuICAgICAgICAgICAgLy8gXFxmXFxuXFxyXFx0XFx2IHNwYWNlXHJcbiAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCdjbG9zZSB0YWcnKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoeG1sLmNoYXJDb2RlQXQoaiAtIDEpID09PSA0Nykge1xyXG4gICAgICAgICAgLy8gLi4uLz5cclxuICAgICAgICAgIHggPSBlbGVtZW50TmFtZSA9IHhtbC5zdWJzdHJpbmcoaSArIDEsIGogLSAxKVxyXG5cclxuICAgICAgICAgIHRhZ1N0YXJ0ID0gdHJ1ZVxyXG4gICAgICAgICAgdGFnRW5kID0gdHJ1ZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4ID0gZWxlbWVudE5hbWUgPSB4bWwuc3Vic3RyaW5nKGkgKyAxLCBqKVxyXG5cclxuICAgICAgICAgIHRhZ1N0YXJ0ID0gdHJ1ZVxyXG4gICAgICAgICAgdGFnRW5kID0gZmFsc2VcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICEoKHcgPiA5NiAmJiB3IDwgMTIzKSB8fCAodyA+IDY0ICYmIHcgPCA5MSkgfHwgdyA9PT0gOTUgfHwgdyA9PT0gNTgpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAvLyBjaGFyIDk1XCJfXCIgNThcIjpcIlxyXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCdpbGxlZ2FsIGZpcnN0IGNoYXIgbm9kZU5hbWUnKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChxID0gMSwgeSA9IHgubGVuZ3RoOyBxIDwgeTsgcSsrKSB7XHJcbiAgICAgICAgICB3ID0geC5jaGFyQ29kZUF0KHEpXHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAodyA+IDk2ICYmIHcgPCAxMjMpIHx8XHJcbiAgICAgICAgICAgICh3ID4gNjQgJiYgdyA8IDkxKSB8fFxyXG4gICAgICAgICAgICAodyA+IDQ3ICYmIHcgPCA1OSkgfHxcclxuICAgICAgICAgICAgdyA9PT0gNDUgfHxcclxuICAgICAgICAgICAgdyA9PT0gOTUgfHxcclxuICAgICAgICAgICAgdyA9PT0gNDZcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh3ID09PSAzMiB8fCAodyA8IDE0ICYmIHcgPiA4KSkge1xyXG4gICAgICAgICAgICAvLyBcXGZcXG5cXHJcXHRcXHYgc3BhY2VcclxuICAgICAgICAgICAgZWxlbWVudE5hbWUgPSB4LnN1YnN0cmluZygwLCBxKVxyXG4gICAgICAgICAgICAvLyBtYXliZSB0aGVyZSBhcmUgYXR0cmlidXRlc1xyXG4gICAgICAgICAgICBjYWNoZWRBdHRycyA9IG51bGxcclxuICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoJ2ludmFsaWQgbm9kZU5hbWUnKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0YWdFbmQpIHtcclxuICAgICAgICAgIG5vZGVTdGFjay5wdXNoKGVsZW1lbnROYW1lKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzTmFtZXNwYWNlKSB7XHJcbiAgICAgICAgX25zTWF0cml4ID0gbnNNYXRyaXhcclxuXHJcbiAgICAgICAgaWYgKHRhZ1N0YXJ0KSB7XHJcbiAgICAgICAgICAvLyByZW1lbWJlciBvbGQgbmFtZXNwYWNlXHJcbiAgICAgICAgICAvLyB1bmxlc3Mgd2UncmUgc2VsZi1jbG9zaW5nXHJcbiAgICAgICAgICBpZiAoIXRhZ0VuZCkge1xyXG4gICAgICAgICAgICBuc01hdHJpeFN0YWNrLnB1c2goX25zTWF0cml4KVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChjYWNoZWRBdHRycyA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBxdWljayBjaGVjaywgd2hldGhlciB0aGVyZSBtYXkgYmUgbmFtZXNwYWNlXHJcbiAgICAgICAgICAgIC8vIGRlY2xhcmF0aW9ucyBvbiB0aGUgbm9kZTsgaWYgdGhhdCBpcyB0aGUgY2FzZVxyXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGVhZ2VybHkgcGFyc2UgdGhlIG5vZGUgYXR0cmlidXRlc1xyXG4gICAgICAgICAgICBpZiAoKG1heWJlTlMgPSB4LmluZGV4T2YoJ3htbG5zJywgcSkgIT09IC0xKSkge1xyXG4gICAgICAgICAgICAgIGF0dHJzU3RhcnQgPSBxXHJcbiAgICAgICAgICAgICAgYXR0cnNTdHJpbmcgPSB4XHJcblxyXG4gICAgICAgICAgICAgIGdldEF0dHJzKClcclxuXHJcbiAgICAgICAgICAgICAgbWF5YmVOUyA9IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9lbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lXHJcblxyXG4gICAgICAgIHcgPSBlbGVtZW50TmFtZS5pbmRleE9mKCc6JylcclxuICAgICAgICBpZiAodyAhPT0gLTEpIHtcclxuICAgICAgICAgIHhtbG5zID0gbnNNYXRyaXhbZWxlbWVudE5hbWUuc3Vic3RyaW5nKDAsIHcpXVxyXG5cclxuICAgICAgICAgIC8vIHByZWZpeCBnaXZlbjsgbmFtZXNwYWNlIG11c3QgZXhpc3RcclxuICAgICAgICAgIGlmICgheG1sbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKCdtaXNzaW5nIG5hbWVzcGFjZSBvbiA8JyArIF9lbGVtZW50TmFtZSArICc+JylcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBlbGVtZW50TmFtZSA9IGVsZW1lbnROYW1lLnN1YnN0cih3ICsgMSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeG1sbnMgPSBuc01hdHJpeFsneG1sbnMnXVxyXG5cclxuICAgICAgICAgIC8vIGlmIG5vIGRlZmF1bHQgbmFtZXNwYWNlIGlzIGRlZmluZWQsXHJcbiAgICAgICAgICAvLyB3ZSdsbCBpbXBvcnQgdGhlIGVsZW1lbnQgYXMgYW5vbnltb3VzLlxyXG4gICAgICAgICAgLy9cclxuICAgICAgICAgIC8vIGl0IGlzIHVwIHRvIHVzZXJzIHRvIGNvcnJlY3QgdGhhdCB0byB0aGUgZG9jdW1lbnQgZGVmaW5lZFxyXG4gICAgICAgICAgLy8gdGFyZ2V0TmFtZXNwYWNlLCBvciB3aGF0ZXZlciB0aGVpciB1bmRlcnNhbmRpbmcgb2YgdGhlXHJcbiAgICAgICAgICAvLyBYTUwgc3BlYyBtYW5kYXRlcy5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkanVzdCBuYW1lc3BhY2UgcHJlZml4cyBhcyBjb25maWd1cmVkXHJcbiAgICAgICAgaWYgKHhtbG5zKSB7XHJcbiAgICAgICAgICBlbGVtZW50TmFtZSA9IHhtbG5zICsgJzonICsgZWxlbWVudE5hbWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0YWdTdGFydCkge1xyXG4gICAgICAgIGF0dHJzU3RhcnQgPSBxXHJcbiAgICAgICAgYXR0cnNTdHJpbmcgPSB4XHJcblxyXG4gICAgICAgIGlmIChvbk9wZW5UYWcpIHtcclxuICAgICAgICAgIGlmIChwcm94eSkge1xyXG4gICAgICAgICAgICBvbk9wZW5UYWcoZWxlbWVudFByb3h5LCBkZWNvZGVFbnRpdGllcywgdGFnRW5kLCBnZXRDb250ZXh0KVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgb25PcGVuVGFnKGVsZW1lbnROYW1lLCBnZXRBdHRycywgZGVjb2RlRW50aXRpZXMsIHRhZ0VuZCwgZ2V0Q29udGV4dClcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocGFyc2VTdG9wKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRhZ0VuZCkge1xyXG4gICAgICAgIGlmIChvbkNsb3NlVGFnKSB7XHJcbiAgICAgICAgICBvbkNsb3NlVGFnKFxyXG4gICAgICAgICAgICBwcm94eSA/IGVsZW1lbnRQcm94eSA6IGVsZW1lbnROYW1lLFxyXG4gICAgICAgICAgICBkZWNvZGVFbnRpdGllcyxcclxuICAgICAgICAgICAgdGFnU3RhcnQsXHJcbiAgICAgICAgICAgIGdldENvbnRleHRcclxuICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICBpZiAocGFyc2VTdG9wKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVzdG9yZSBvbGQgbmFtZXNwYWNlXHJcbiAgICAgICAgaWYgKGlzTmFtZXNwYWNlKSB7XHJcbiAgICAgICAgICBpZiAoIXRhZ1N0YXJ0KSB7XHJcbiAgICAgICAgICAgIG5zTWF0cml4ID0gbnNNYXRyaXhTdGFjay5wb3AoKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbnNNYXRyaXggPSBfbnNNYXRyaXhcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGogKz0gMVxyXG4gICAgfVxyXG4gIH0gLyoqIGVuZCBwYXJzZSAqL1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgUGFyc2VyLFxyXG4gIGRlY29kZTogZGVjb2RlRW50aXRpZXNcclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL3V0aWxzL3NheGVuLmpzIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBN0JBO0FBQ0E7QUErQkE7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQU5BO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///40\n"); + +/***/ }), +/* 41 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* unused harmony export Namespaces */\n/* harmony export (immutable) */ __webpack_exports__[\"a\"] = Writer;\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__utils__ = __webpack_require__(5);\n\n\nvar XML_PREAMBLE = '\\n';\n\nvar ESCAPE_ATTR_CHARS = /<|>|'|\"|&|\\n\\r|\\n/g;\nvar ESCAPE_CHARS = /<|>|&/g;\n\nfunction filter(collection, matcher) {\n var result = [];\n\n collection.forEach(function (val, key) {\n if (matcher(val, key)) {\n result.push(val);\n }\n });\n\n return result;\n}\n\nfunction Namespaces(parent) {\n var prefixMap = {};\n var uriMap = {};\n var used = {};\n\n var wellknown = [];\n var custom = [];\n\n // API\n\n this.byUri = function (uri) {\n return uriMap[uri] || parent && parent.byUri(uri);\n };\n\n this.add = function (ns, isWellknown) {\n uriMap[ns.uri] = ns;\n\n if (isWellknown) {\n wellknown.push(ns);\n } else {\n custom.push(ns);\n }\n\n this.mapPrefix(ns.prefix, ns.uri);\n };\n\n this.uriByPrefix = function (prefix) {\n return prefixMap[prefix || 'xmlns'];\n };\n\n this.mapPrefix = function (prefix, uri) {\n prefixMap[prefix || 'xmlns'] = uri;\n };\n\n this.logUsed = function (ns) {\n var uri = ns.uri;\n\n used[uri] = this.byUri(uri);\n };\n\n this.getUsed = function (ns) {\n function isUsed(ns) {\n return used[ns.uri];\n }\n\n var allNs = [].concat(wellknown, custom);\n\n return allNs.filter(isUsed);\n };\n}\n\nfunction lower(string) {\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\nfunction nameToAlias(name, pkg) {\n if (Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"d\" /* hasLowerCaseAlias */])(pkg)) {\n return lower(name);\n } else {\n return name;\n }\n}\n\nfunction inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n}\n\nfunction nsName(ns) {\n if (typeof ns === 'string' && ns.constructor === String) {\n return ns;\n } else {\n return (ns.prefix ? ns.prefix + ':' : '') + ns.localName;\n }\n}\n\nfunction getNsAttrs(namespaces) {\n return namespaces.getUsed().map(function (ns) {\n var name = 'xmlns' + (ns.prefix ? ':' + ns.prefix : '');\n return { name: name, value: ns.uri };\n });\n}\n\nfunction getElementNs(ns, descriptor) {\n if (descriptor.isGeneric) {\n return Object.assign({ localName: descriptor.ns.localName }, ns);\n } else {\n return Object.assign({ localName: nameToAlias(descriptor.ns.localName, descriptor.$pkg) }, ns);\n }\n}\n\nfunction getPropertyNs(ns, descriptor) {\n return Object.assign({ localName: descriptor.ns.localName }, ns);\n}\n\nfunction getSerializableProperties(element) {\n var descriptor = element.$descriptor;\n\n return filter(descriptor.properties, function (p) {\n var name = p.name;\n\n if (p.isVirtual) {\n return false;\n }\n\n // do not serialize defaults\n if (!element.hasOwnProperty(name)) {\n return false;\n }\n\n var value = element[name];\n\n // do not serialize default equals\n if (value === p.default) {\n return false;\n }\n\n // do not serialize null properties\n if (value === null) {\n return false;\n }\n\n return p.isMany ? value.length : true;\n });\n}\n\nvar ESCAPE_ATTR_MAP = {\n '\\n': '#10',\n '\\n\\r': '#10',\n '\"': '#34',\n \"'\": '#39',\n '<': '#60',\n '>': '#62',\n '&': '#38'\n};\n\nvar ESCAPE_MAP = {\n '<': 'lt',\n '>': 'gt',\n '&': 'amp'\n};\n\nfunction escape(str, charPattern, replaceMap) {\n // ensure we are handling strings here\n str = typeof str === 'string' && str.constructor === String ? str : '' + str;\n\n return str.replace(charPattern, function (s) {\n return '&' + replaceMap[s] + ';';\n });\n}\n\n/**\r\n * Escape a string attribute to not contain any bad values (line breaks, '\"', ...)\r\n *\r\n * @param {String} str the string to escape\r\n * @return {String} the escaped string\r\n */\nfunction escapeAttr(str) {\n return escape(str, ESCAPE_ATTR_CHARS, ESCAPE_ATTR_MAP);\n}\n\nfunction escapeBody(str) {\n return escape(str, ESCAPE_CHARS, ESCAPE_MAP);\n}\n\nfunction filterAttributes(props) {\n return filter(props, function (p) {\n return p.isAttr;\n });\n}\n\nfunction filterContained(props) {\n return filter(props, function (p) {\n return !p.isAttr;\n });\n}\n\nfunction ReferenceSerializer(tagName) {\n this.tagName = tagName;\n}\n\nReferenceSerializer.prototype.build = function (element) {\n this.element = element;\n return this;\n};\n\nReferenceSerializer.prototype.serializeTo = function (writer) {\n writer.appendIndent().append('<' + this.tagName + '>' + this.element.id + '').appendNewLine();\n};\n\nfunction BodySerializer() {}\n\nBodySerializer.prototype.serializeValue = BodySerializer.prototype.serializeTo = function (writer) {\n writer.append(this.escape ? escapeBody(this.value) : this.value);\n};\n\nBodySerializer.prototype.build = function (prop, value) {\n this.value = value;\n\n if (prop.type === 'String' && value.search(ESCAPE_CHARS) !== -1) {\n this.escape = true;\n }\n\n return this;\n};\n\nfunction ValueSerializer(tagName) {\n this.tagName = tagName;\n}\n\ninherits(ValueSerializer, BodySerializer);\n\nValueSerializer.prototype.serializeTo = function (writer) {\n writer.appendIndent().append('<' + this.tagName + '>');\n\n this.serializeValue(writer);\n\n writer.append('').appendNewLine();\n};\n\nfunction ElementSerializer(parent, propertyDescriptor) {\n this.body = [];\n this.attrs = [];\n\n this.parent = parent;\n this.propertyDescriptor = propertyDescriptor;\n}\n\nElementSerializer.prototype.build = function (element) {\n this.element = element;\n\n var elementDescriptor = element.$descriptor;\n\n var propertyDescriptor = this.propertyDescriptor;\n\n var otherAttrs, properties;\n\n var isGeneric = elementDescriptor.isGeneric;\n\n if (isGeneric) {\n otherAttrs = this.parseGeneric(element);\n } else {\n otherAttrs = this.parseNsAttributes(element);\n }\n\n if (propertyDescriptor) {\n this.ns = this.nsPropertyTagName(propertyDescriptor);\n } else {\n this.ns = this.nsTagName(elementDescriptor);\n }\n\n // compute tag name\n this.tagName = this.addTagName(this.ns);\n\n if (!isGeneric) {\n properties = getSerializableProperties(element);\n\n this.parseAttributes(filterAttributes(properties));\n this.parseContainments(filterContained(properties));\n }\n\n this.parseGenericAttributes(element, otherAttrs);\n\n return this;\n};\n\nElementSerializer.prototype.nsTagName = function (descriptor) {\n var effectiveNs = this.logNamespaceUsed(descriptor.ns);\n return getElementNs(effectiveNs, descriptor);\n};\n\nElementSerializer.prototype.nsPropertyTagName = function (descriptor) {\n var effectiveNs = this.logNamespaceUsed(descriptor.ns);\n return getPropertyNs(effectiveNs, descriptor);\n};\n\nElementSerializer.prototype.isLocalNs = function (ns) {\n return ns.uri === this.ns.uri;\n};\n\n/**\r\n * Get the actual ns attribute name for the given element.\r\n *\r\n * @param {Object} element\r\n * @param {Boolean} [element.inherited=false]\r\n *\r\n * @return {Object} nsName\r\n */\nElementSerializer.prototype.nsAttributeName = function (element) {\n var ns;\n\n if (typeof element === 'string' && element.constructor === String) {\n ns = Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"g\" /* parseName */])(element);\n } else {\n ns = element.ns;\n }\n\n // return just local name for inherited attributes\n if (element.inherited) {\n return { localName: ns.localName };\n }\n\n // parse + log effective ns\n var effectiveNs = this.logNamespaceUsed(ns);\n\n // LOG ACTUAL namespace use\n this.getNamespaces().logUsed(effectiveNs);\n\n // strip prefix if same namespace like parent\n if (this.isLocalNs(effectiveNs)) {\n return { localName: ns.localName };\n } else {\n return Object.assign({ localName: ns.localName }, effectiveNs);\n }\n};\n\nElementSerializer.prototype.parseGeneric = function (element) {\n var self = this;\n\n var body = this.body;\n\n var attributes = [];\n\n for (var key in element) {\n var nonNsAttr;\n\n if (key === '$body') {\n body.push(new BodySerializer().build({ type: 'String' }, element[key]));\n } else if (key === '$children') {\n val.forEach(function (child) {\n body.push(new ElementSerializer(self).build(child));\n });\n } else if (key.indexOf('$') !== 0) {\n nonNsAttr = self.parseNsAttribute(element, key, element[key]);\n\n if (nonNsAttr) {\n attributes.push({ name: key, value: element[key] });\n }\n }\n }\n\n return attributes;\n};\n\nElementSerializer.prototype.parseNsAttribute = function (element, name, value) {\n var model = element.$model;\n\n var nameNs = Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"g\" /* parseName */])(name);\n\n var ns;\n\n // parse xmlns:foo=\"http://foo.bar\"\n if (nameNs.prefix === 'xmlns') {\n ns = { prefix: nameNs.localName, uri: value };\n }\n\n // parse xmlns=\"http://foo.bar\"\n if (!nameNs.prefix && nameNs.localName === 'xmlns') {\n ns = { uri: value };\n }\n\n if (!ns) {\n return {\n name: name,\n value: value\n };\n }\n\n if (model && model.getPackage(value)) {\n // register well known namespace\n this.logNamespace(ns, true, true);\n } else {\n // log custom namespace directly as used\n var actualNs = this.logNamespaceUsed(ns, true);\n\n this.getNamespaces().logUsed(actualNs);\n }\n};\n\n/**\r\n * Parse namespaces and return a list of left over generic attributes\r\n *\r\n * @param {Object} element\r\n * @return {Array}\r\n */\nElementSerializer.prototype.parseNsAttributes = function (element, attrs) {\n var self = this;\n\n var genericAttrs = element.$attrs;\n\n var attributes = [];\n\n // parse namespace attributes first\n // and log them. push non namespace attributes to a list\n // and process them later\n\n for (var key in genericAttrs) {\n var nonNsAttr = self.parseNsAttribute(element, key, genericAttrs[key]);\n if (nonNsAttr) {\n attributes.push(nonNsAttr);\n }\n }\n\n return attributes;\n};\n\nElementSerializer.prototype.parseGenericAttributes = function (element, attributes) {\n var self = this;\n\n attributes.forEach(function (attr) {\n // do not serialize xsi:type attribute\n // it is set manually based on the actual implementation type\n if (attr.name === __WEBPACK_IMPORTED_MODULE_0__utils__[\"b\" /* XSI_TYPE */]) {\n return;\n }\n\n try {\n self.addAttribute(self.nsAttributeName(attr.name), attr.value);\n } catch (e) {\n console.warn('missing namespace information for ', attr.name, '=', attr.value, 'on', element, e);\n }\n });\n};\n\nElementSerializer.prototype.parseContainments = function (properties) {\n var self = this;\n\n var body = this.body;\n\n var element = this.element;\n\n properties.forEach(function (p) {\n var value = element.get(p.name);\n\n var isReference = p.isReference;\n\n var isMany = p.isMany;\n\n if (!isMany) {\n value = [value];\n }\n\n if (p.isBody) {\n body.push(new BodySerializer().build(p, value[0]));\n } else if (Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"f\" /* isSimple */])(p.type)) {\n value.forEach(function (v) {\n body.push(new ValueSerializer(self.addTagName(self.nsPropertyTagName(p))).build(p, v));\n });\n } else if (isReference) {\n value.forEach(function (v) {\n body.push(new ReferenceSerializer(self.addTagName(self.nsPropertyTagName(p))).build(v));\n });\n } else {\n // allow serialization via type\n // rather than element name\n var asType = Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"i\" /* serializeAsType */])(p);\n\n var asProperty = Object(__WEBPACK_IMPORTED_MODULE_0__utils__[\"h\" /* serializeAsProperty */])(p);\n\n value.forEach(function (v) {\n var serializer;\n\n if (asType) {\n serializer = new TypeSerializer(self, p);\n } else if (asProperty) {\n serializer = new ElementSerializer(self, p);\n } else {\n serializer = new ElementSerializer(self);\n }\n\n body.push(serializer.build(v));\n });\n }\n });\n};\n\nElementSerializer.prototype.getNamespaces = function (local) {\n var namespaces = this.namespaces;\n\n var parent = this.parent;\n\n var parentNamespaces;\n\n if (!namespaces) {\n parentNamespaces = parent && parent.getNamespaces();\n\n if (local || !parentNamespaces) {\n this.namespaces = namespaces = new Namespaces(parentNamespaces);\n } else {\n namespaces = parentNamespaces;\n }\n }\n\n return namespaces;\n};\n\nElementSerializer.prototype.logNamespace = function (ns, wellknown, local) {\n var namespaces = this.getNamespaces(local);\n\n var nsUri = ns.uri;\n\n var nsPrefix = ns.prefix;\n\n var existing = namespaces.byUri(nsUri);\n\n if (!existing) {\n namespaces.add(ns, wellknown);\n }\n\n namespaces.mapPrefix(nsPrefix, nsUri);\n\n return ns;\n};\n\nElementSerializer.prototype.logNamespaceUsed = function (ns, local) {\n var element = this.element;\n\n var model = element.$model;\n\n var namespaces = this.getNamespaces(local);\n\n // ns may be\n //\n // * prefix only\n // * prefix:uri\n // * localName only\n\n var prefix = ns.prefix;\n\n var uri = ns.uri;\n\n var newPrefix;\n\n var idx;\n\n var wellknownUri;\n\n // handle anonymous namespaces (elementForm=unqualified), cf. #23\n if (!prefix && !uri) {\n return { localName: ns.localName };\n }\n\n wellknownUri = __WEBPACK_IMPORTED_MODULE_0__utils__[\"a\" /* DEFAULT_NS_MAP */][prefix] || model && (model.getPackage(prefix) || {}).uri;\n\n uri = uri || wellknownUri || namespaces.uriByPrefix(prefix);\n\n if (!uri) {\n throw new Error('no namespace uri given for prefix <' + prefix + '>');\n }\n\n ns = namespaces.byUri(uri);\n\n if (!ns) {\n newPrefix = prefix;\n idx = 1;\n\n // find a prefix that is not mapped yet\n while (namespaces.uriByPrefix(newPrefix)) {\n newPrefix = prefix + '_' + idx++;\n }\n\n ns = this.logNamespace({ prefix: newPrefix, uri: uri }, wellknownUri === uri);\n }\n\n if (prefix) {\n namespaces.mapPrefix(prefix, uri);\n }\n\n return ns;\n};\n\nElementSerializer.prototype.parseAttributes = function (properties) {\n var self = this;\n\n var element = this.element;\n\n properties.forEach(function (p) {\n var value = element.get(p.name);\n\n if (p.isReference) {\n if (!p.isMany) {\n value = value.id;\n } else {\n var values = [];\n forEach(value, function (v) {\n values.push(v.id);\n });\n // IDREFS is a whitespace-separated list of references.\n value = values.join(' ');\n }\n }\n\n self.addAttribute(self.nsAttributeName(p), value);\n });\n};\n\nElementSerializer.prototype.addTagName = function (nsTagName) {\n var actualNs = this.logNamespaceUsed(nsTagName);\n\n this.getNamespaces().logUsed(actualNs);\n\n return nsName(nsTagName);\n};\n\nElementSerializer.prototype.addAttribute = function (name, value) {\n var attrs = this.attrs;\n\n if (typeof value === 'string' && value.constructor === String) {\n value = escapeAttr(value);\n }\n\n attrs.push({ name: name, value: value });\n};\n\nElementSerializer.prototype.serializeAttributes = function (writer) {\n var attrs = this.attrs;\n\n var namespaces = this.namespaces;\n\n if (namespaces) {\n attrs = getNsAttrs(namespaces).concat(attrs);\n }\n\n attrs.forEach(function (a) {\n writer.append(' ').append(nsName(a.name)).append('=\"').append(a.value).append('\"');\n });\n};\n\nElementSerializer.prototype.serializeTo = function (writer) {\n var firstBody = this.body[0];\n\n var indent = firstBody && firstBody.constructor !== BodySerializer;\n\n writer.appendIndent().append('<' + this.tagName);\n\n this.serializeAttributes(writer);\n\n writer.append(firstBody ? '>' : ' />');\n\n if (firstBody) {\n if (indent) {\n writer.appendNewLine().indent();\n }\n\n this.body.forEach(function (b) {\n b.serializeTo(writer);\n });\n\n if (indent) {\n writer.unindent().appendIndent();\n }\n\n writer.append('');\n }\n\n writer.appendNewLine();\n};\n\n/**\r\n * A serializer for types that handles serialization of data types\r\n */\nfunction TypeSerializer(parent, propertyDescriptor) {\n ElementSerializer.call(this, parent, propertyDescriptor);\n}\n\ninherits(TypeSerializer, ElementSerializer);\n\nTypeSerializer.prototype.parseNsAttributes = function (element) {\n // extracted attributes\n var attributes = ElementSerializer.prototype.parseNsAttributes.call(this, element);\n\n var descriptor = element.$descriptor;\n\n // only serialize xsi:type if necessary\n if (descriptor.name === this.propertyDescriptor.type) {\n return attributes;\n }\n\n var typeNs = this.typeNs = this.nsTagName(descriptor);\n this.getNamespaces().logUsed(this.typeNs);\n\n // add xsi:type attribute to represent the elements\n // actual type\n\n var pkg = element.$model.getPackage(typeNs.uri);\n\n var typePrefix = pkg.xml && pkg.xml.typePrefix || '';\n\n this.addAttribute(this.nsAttributeName(__WEBPACK_IMPORTED_MODULE_0__utils__[\"b\" /* XSI_TYPE */]), (typeNs.prefix ? typeNs.prefix + ':' : '') + typePrefix + descriptor.ns.localName);\n\n return attributes;\n};\n\nTypeSerializer.prototype.isLocalNs = function (ns) {\n return ns.uri === (this.typeNs || this.ns).uri;\n};\n\nfunction SavingWriter() {\n this.value = '';\n\n this.write = function (str) {\n this.value += str;\n };\n}\n\nfunction FormatingWriter(out, format) {\n var indent = [''];\n\n this.append = function (str) {\n out.write(str);\n\n return this;\n };\n\n this.appendNewLine = function () {\n if (format) {\n out.write('\\n');\n }\n\n return this;\n };\n\n this.appendIndent = function () {\n if (format) {\n out.write(indent.join(' '));\n }\n\n return this;\n };\n\n this.indent = function () {\n indent.push('');\n return this;\n };\n\n this.unindent = function () {\n indent.pop();\n return this;\n };\n}\n\n/**\r\n * A writer for meta-model backed document trees\r\n *\r\n * @param {Object} options output options to pass into the writer\r\n */\nfunction Writer(options) {\n options = Object.assign({ format: false, preamble: true }, options || {});\n\n function toXML(tree, writer) {\n var internalWriter = writer || new SavingWriter();\n var formatingWriter = new FormatingWriter(internalWriter, options.format);\n\n if (options.preamble) {\n formatingWriter.append(XML_PREAMBLE);\n }\n\n new ElementSerializer().build(tree).serializeTo(formatingWriter);\n\n if (!writer) {\n return internalWriter.value;\n }\n }\n\n return {\n toXML: toXML\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDEuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3htbC9tb2RlbC14bWwvd3JpdGUuanM/NmQ2ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGlzU2ltcGxlIGFzIGlzU2ltcGxlVHlwZSxcclxuICBoYXNMb3dlckNhc2VBbGlhcyxcclxuICBzZXJpYWxpemVBc1R5cGUsXHJcbiAgc2VyaWFsaXplQXNQcm9wZXJ0eSxcclxuICBERUZBVUxUX05TX01BUCxcclxuICBYU0lfVFlQRSxcclxuICBwYXJzZU5hbWUgYXMgcGFyc2VOYW1lTnNcclxufSBmcm9tICcuLi91dGlscydcclxuXHJcbnZhciBYTUxfUFJFQU1CTEUgPSAnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XFxuJ1xyXG5cclxudmFyIEVTQ0FQRV9BVFRSX0NIQVJTID0gLzx8PnwnfFwifCZ8XFxuXFxyfFxcbi9nXHJcbnZhciBFU0NBUEVfQ0hBUlMgPSAvPHw+fCYvZ1xyXG5cclxuZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24sIG1hdGNoZXIpIHtcclxuICBsZXQgcmVzdWx0ID0gW11cclxuXHJcbiAgY29sbGVjdGlvbi5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xyXG4gICAgaWYgKG1hdGNoZXIodmFsLCBrZXkpKSB7XHJcbiAgICAgIHJlc3VsdC5wdXNoKHZhbClcclxuICAgIH1cclxuICB9KVxyXG5cclxuICByZXR1cm4gcmVzdWx0XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBOYW1lc3BhY2VzKHBhcmVudCkge1xyXG4gIHZhciBwcmVmaXhNYXAgPSB7fVxyXG4gIHZhciB1cmlNYXAgPSB7fVxyXG4gIHZhciB1c2VkID0ge31cclxuXHJcbiAgdmFyIHdlbGxrbm93biA9IFtdXHJcbiAgdmFyIGN1c3RvbSA9IFtdXHJcblxyXG4gIC8vIEFQSVxyXG5cclxuICB0aGlzLmJ5VXJpID0gZnVuY3Rpb24odXJpKSB7XHJcbiAgICByZXR1cm4gdXJpTWFwW3VyaV0gfHwgKHBhcmVudCAmJiBwYXJlbnQuYnlVcmkodXJpKSlcclxuICB9XHJcblxyXG4gIHRoaXMuYWRkID0gZnVuY3Rpb24obnMsIGlzV2VsbGtub3duKSB7XHJcbiAgICB1cmlNYXBbbnMudXJpXSA9IG5zXHJcblxyXG4gICAgaWYgKGlzV2VsbGtub3duKSB7XHJcbiAgICAgIHdlbGxrbm93bi5wdXNoKG5zKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY3VzdG9tLnB1c2gobnMpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tYXBQcmVmaXgobnMucHJlZml4LCBucy51cmkpXHJcbiAgfVxyXG5cclxuICB0aGlzLnVyaUJ5UHJlZml4ID0gZnVuY3Rpb24ocHJlZml4KSB7XHJcbiAgICByZXR1cm4gcHJlZml4TWFwW3ByZWZpeCB8fCAneG1sbnMnXVxyXG4gIH1cclxuXHJcbiAgdGhpcy5tYXBQcmVmaXggPSBmdW5jdGlvbihwcmVmaXgsIHVyaSkge1xyXG4gICAgcHJlZml4TWFwW3ByZWZpeCB8fCAneG1sbnMnXSA9IHVyaVxyXG4gIH1cclxuXHJcbiAgdGhpcy5sb2dVc2VkID0gZnVuY3Rpb24obnMpIHtcclxuICAgIHZhciB1cmkgPSBucy51cmlcclxuXHJcbiAgICB1c2VkW3VyaV0gPSB0aGlzLmJ5VXJpKHVyaSlcclxuICB9XHJcblxyXG4gIHRoaXMuZ2V0VXNlZCA9IGZ1bmN0aW9uKG5zKSB7XHJcbiAgICBmdW5jdGlvbiBpc1VzZWQobnMpIHtcclxuICAgICAgcmV0dXJuIHVzZWRbbnMudXJpXVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBhbGxOcyA9IFtdLmNvbmNhdCh3ZWxsa25vd24sIGN1c3RvbSlcclxuXHJcbiAgICByZXR1cm4gYWxsTnMuZmlsdGVyKGlzVXNlZClcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGxvd2VyKHN0cmluZykge1xyXG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSlcclxufVxyXG5cclxuZnVuY3Rpb24gbmFtZVRvQWxpYXMobmFtZSwgcGtnKSB7XHJcbiAgaWYgKGhhc0xvd2VyQ2FzZUFsaWFzKHBrZykpIHtcclxuICAgIHJldHVybiBsb3dlcihuYW1lKVxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gbmFtZVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XHJcbiAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcclxuICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xyXG4gICAgY29uc3RydWN0b3I6IHtcclxuICAgICAgdmFsdWU6IGN0b3IsXHJcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcclxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXHJcbiAgICB9XHJcbiAgfSlcclxufVxyXG5cclxuZnVuY3Rpb24gbnNOYW1lKG5zKSB7XHJcbiAgaWYgKHR5cGVvZiBucyA9PT0gJ3N0cmluZycgJiYgbnMuY29uc3RydWN0b3IgPT09IFN0cmluZykge1xyXG4gICAgcmV0dXJuIG5zXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiAobnMucHJlZml4ID8gbnMucHJlZml4ICsgJzonIDogJycpICsgbnMubG9jYWxOYW1lXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXROc0F0dHJzKG5hbWVzcGFjZXMpIHtcclxuICByZXR1cm4gbmFtZXNwYWNlcy5nZXRVc2VkKCkubWFwKGZ1bmN0aW9uKG5zKSB7XHJcbiAgICB2YXIgbmFtZSA9ICd4bWxucycgKyAobnMucHJlZml4ID8gJzonICsgbnMucHJlZml4IDogJycpXHJcbiAgICByZXR1cm4geyBuYW1lOiBuYW1lLCB2YWx1ZTogbnMudXJpIH1cclxuICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRFbGVtZW50TnMobnMsIGRlc2NyaXB0b3IpIHtcclxuICBpZiAoZGVzY3JpcHRvci5pc0dlbmVyaWMpIHtcclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHsgbG9jYWxOYW1lOiBkZXNjcmlwdG9yLm5zLmxvY2FsTmFtZSB9LCBucylcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgIHsgbG9jYWxOYW1lOiBuYW1lVG9BbGlhcyhkZXNjcmlwdG9yLm5zLmxvY2FsTmFtZSwgZGVzY3JpcHRvci4kcGtnKSB9LFxyXG4gICAgICBuc1xyXG4gICAgKVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0UHJvcGVydHlOcyhucywgZGVzY3JpcHRvcikge1xyXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHsgbG9jYWxOYW1lOiBkZXNjcmlwdG9yLm5zLmxvY2FsTmFtZSB9LCBucylcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U2VyaWFsaXphYmxlUHJvcGVydGllcyhlbGVtZW50KSB7XHJcbiAgdmFyIGRlc2NyaXB0b3IgPSBlbGVtZW50LiRkZXNjcmlwdG9yXHJcblxyXG4gIHJldHVybiBmaWx0ZXIoZGVzY3JpcHRvci5wcm9wZXJ0aWVzLCBmdW5jdGlvbihwKSB7XHJcbiAgICB2YXIgbmFtZSA9IHAubmFtZVxyXG5cclxuICAgIGlmIChwLmlzVmlydHVhbCkge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICAvLyBkbyBub3Qgc2VyaWFsaXplIGRlZmF1bHRzXHJcbiAgICBpZiAoIWVsZW1lbnQuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHZhbHVlID0gZWxlbWVudFtuYW1lXVxyXG5cclxuICAgIC8vIGRvIG5vdCBzZXJpYWxpemUgZGVmYXVsdCBlcXVhbHNcclxuICAgIGlmICh2YWx1ZSA9PT0gcC5kZWZhdWx0KSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGRvIG5vdCBzZXJpYWxpemUgbnVsbCBwcm9wZXJ0aWVzXHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHAuaXNNYW55ID8gdmFsdWUubGVuZ3RoIDogdHJ1ZVxyXG4gIH0pXHJcbn1cclxuXHJcbnZhciBFU0NBUEVfQVRUUl9NQVAgPSB7XHJcbiAgJ1xcbic6ICcjMTAnLFxyXG4gICdcXG5cXHInOiAnIzEwJyxcclxuICAnXCInOiAnIzM0JyxcclxuICBcIidcIjogJyMzOScsXHJcbiAgJzwnOiAnIzYwJyxcclxuICAnPic6ICcjNjInLFxyXG4gICcmJzogJyMzOCdcclxufVxyXG5cclxudmFyIEVTQ0FQRV9NQVAgPSB7XHJcbiAgJzwnOiAnbHQnLFxyXG4gICc+JzogJ2d0JyxcclxuICAnJic6ICdhbXAnXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVzY2FwZShzdHIsIGNoYXJQYXR0ZXJuLCByZXBsYWNlTWFwKSB7XHJcbiAgLy8gZW5zdXJlIHdlIGFyZSBoYW5kbGluZyBzdHJpbmdzIGhlcmVcclxuICBzdHIgPSB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyAmJiBzdHIuY29uc3RydWN0b3IgPT09IFN0cmluZyA/IHN0ciA6ICcnICsgc3RyXHJcblxyXG4gIHJldHVybiBzdHIucmVwbGFjZShjaGFyUGF0dGVybiwgZnVuY3Rpb24ocykge1xyXG4gICAgcmV0dXJuICcmJyArIHJlcGxhY2VNYXBbc10gKyAnOydcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICogRXNjYXBlIGEgc3RyaW5nIGF0dHJpYnV0ZSB0byBub3QgY29udGFpbiBhbnkgYmFkIHZhbHVlcyAobGluZSBicmVha3MsICdcIicsIC4uLilcclxuICpcclxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIGVzY2FwZVxyXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHRoZSBlc2NhcGVkIHN0cmluZ1xyXG4gKi9cclxuZnVuY3Rpb24gZXNjYXBlQXR0cihzdHIpIHtcclxuICByZXR1cm4gZXNjYXBlKHN0ciwgRVNDQVBFX0FUVFJfQ0hBUlMsIEVTQ0FQRV9BVFRSX01BUClcclxufVxyXG5cclxuZnVuY3Rpb24gZXNjYXBlQm9keShzdHIpIHtcclxuICByZXR1cm4gZXNjYXBlKHN0ciwgRVNDQVBFX0NIQVJTLCBFU0NBUEVfTUFQKVxyXG59XHJcblxyXG5mdW5jdGlvbiBmaWx0ZXJBdHRyaWJ1dGVzKHByb3BzKSB7XHJcbiAgcmV0dXJuIGZpbHRlcihwcm9wcywgZnVuY3Rpb24ocCkge1xyXG4gICAgcmV0dXJuIHAuaXNBdHRyXHJcbiAgfSlcclxufVxyXG5cclxuZnVuY3Rpb24gZmlsdGVyQ29udGFpbmVkKHByb3BzKSB7XHJcbiAgcmV0dXJuIGZpbHRlcihwcm9wcywgZnVuY3Rpb24ocCkge1xyXG4gICAgcmV0dXJuICFwLmlzQXR0clxyXG4gIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIFJlZmVyZW5jZVNlcmlhbGl6ZXIodGFnTmFtZSkge1xyXG4gIHRoaXMudGFnTmFtZSA9IHRhZ05hbWVcclxufVxyXG5cclxuUmVmZXJlbmNlU2VyaWFsaXplci5wcm90b3R5cGUuYnVpbGQgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgdGhpcy5lbGVtZW50ID0gZWxlbWVudFxyXG4gIHJldHVybiB0aGlzXHJcbn1cclxuXHJcblJlZmVyZW5jZVNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZVRvID0gZnVuY3Rpb24od3JpdGVyKSB7XHJcbiAgd3JpdGVyXHJcbiAgICAuYXBwZW5kSW5kZW50KClcclxuICAgIC5hcHBlbmQoXHJcbiAgICAgICc8JyArIHRoaXMudGFnTmFtZSArICc+JyArIHRoaXMuZWxlbWVudC5pZCArICc8LycgKyB0aGlzLnRhZ05hbWUgKyAnPidcclxuICAgIClcclxuICAgIC5hcHBlbmROZXdMaW5lKClcclxufVxyXG5cclxuZnVuY3Rpb24gQm9keVNlcmlhbGl6ZXIoKSB7fVxyXG5cclxuQm9keVNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZVZhbHVlID0gQm9keVNlcmlhbGl6ZXIucHJvdG90eXBlLnNlcmlhbGl6ZVRvID0gZnVuY3Rpb24oXHJcbiAgd3JpdGVyXHJcbikge1xyXG4gIHdyaXRlci5hcHBlbmQodGhpcy5lc2NhcGUgPyBlc2NhcGVCb2R5KHRoaXMudmFsdWUpIDogdGhpcy52YWx1ZSlcclxufVxyXG5cclxuQm9keVNlcmlhbGl6ZXIucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24ocHJvcCwgdmFsdWUpIHtcclxuICB0aGlzLnZhbHVlID0gdmFsdWVcclxuXHJcbiAgaWYgKHByb3AudHlwZSA9PT0gJ1N0cmluZycgJiYgdmFsdWUuc2VhcmNoKEVTQ0FQRV9DSEFSUykgIT09IC0xKSB7XHJcbiAgICB0aGlzLmVzY2FwZSA9IHRydWVcclxuICB9XHJcblxyXG4gIHJldHVybiB0aGlzXHJcbn1cclxuXHJcbmZ1bmN0aW9uIFZhbHVlU2VyaWFsaXplcih0YWdOYW1lKSB7XHJcbiAgdGhpcy50YWdOYW1lID0gdGFnTmFtZVxyXG59XHJcblxyXG5pbmhlcml0cyhWYWx1ZVNlcmlhbGl6ZXIsIEJvZHlTZXJpYWxpemVyKVxyXG5cclxuVmFsdWVTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVUbyA9IGZ1bmN0aW9uKHdyaXRlcikge1xyXG4gIHdyaXRlci5hcHBlbmRJbmRlbnQoKS5hcHBlbmQoJzwnICsgdGhpcy50YWdOYW1lICsgJz4nKVxyXG5cclxuICB0aGlzLnNlcmlhbGl6ZVZhbHVlKHdyaXRlcilcclxuXHJcbiAgd3JpdGVyLmFwcGVuZCgnPC8nICsgdGhpcy50YWdOYW1lICsgJz4nKS5hcHBlbmROZXdMaW5lKClcclxufVxyXG5cclxuZnVuY3Rpb24gRWxlbWVudFNlcmlhbGl6ZXIocGFyZW50LCBwcm9wZXJ0eURlc2NyaXB0b3IpIHtcclxuICB0aGlzLmJvZHkgPSBbXVxyXG4gIHRoaXMuYXR0cnMgPSBbXVxyXG5cclxuICB0aGlzLnBhcmVudCA9IHBhcmVudFxyXG4gIHRoaXMucHJvcGVydHlEZXNjcmlwdG9yID0gcHJvcGVydHlEZXNjcmlwdG9yXHJcbn1cclxuXHJcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5idWlsZCA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50XHJcblxyXG4gIHZhciBlbGVtZW50RGVzY3JpcHRvciA9IGVsZW1lbnQuJGRlc2NyaXB0b3JcclxuXHJcbiAgdmFyIHByb3BlcnR5RGVzY3JpcHRvciA9IHRoaXMucHJvcGVydHlEZXNjcmlwdG9yXHJcblxyXG4gIHZhciBvdGhlckF0dHJzLCBwcm9wZXJ0aWVzXHJcblxyXG4gIHZhciBpc0dlbmVyaWMgPSBlbGVtZW50RGVzY3JpcHRvci5pc0dlbmVyaWNcclxuXHJcbiAgaWYgKGlzR2VuZXJpYykge1xyXG4gICAgb3RoZXJBdHRycyA9IHRoaXMucGFyc2VHZW5lcmljKGVsZW1lbnQpXHJcbiAgfSBlbHNlIHtcclxuICAgIG90aGVyQXR0cnMgPSB0aGlzLnBhcnNlTnNBdHRyaWJ1dGVzKGVsZW1lbnQpXHJcbiAgfVxyXG5cclxuICBpZiAocHJvcGVydHlEZXNjcmlwdG9yKSB7XHJcbiAgICB0aGlzLm5zID0gdGhpcy5uc1Byb3BlcnR5VGFnTmFtZShwcm9wZXJ0eURlc2NyaXB0b3IpXHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMubnMgPSB0aGlzLm5zVGFnTmFtZShlbGVtZW50RGVzY3JpcHRvcilcclxuICB9XHJcblxyXG4gIC8vIGNvbXB1dGUgdGFnIG5hbWVcclxuICB0aGlzLnRhZ05hbWUgPSB0aGlzLmFkZFRhZ05hbWUodGhpcy5ucylcclxuXHJcbiAgaWYgKCFpc0dlbmVyaWMpIHtcclxuICAgIHByb3BlcnRpZXMgPSBnZXRTZXJpYWxpemFibGVQcm9wZXJ0aWVzKGVsZW1lbnQpXHJcblxyXG4gICAgdGhpcy5wYXJzZUF0dHJpYnV0ZXMoZmlsdGVyQXR0cmlidXRlcyhwcm9wZXJ0aWVzKSlcclxuICAgIHRoaXMucGFyc2VDb250YWlubWVudHMoZmlsdGVyQ29udGFpbmVkKHByb3BlcnRpZXMpKVxyXG4gIH1cclxuXHJcbiAgdGhpcy5wYXJzZUdlbmVyaWNBdHRyaWJ1dGVzKGVsZW1lbnQsIG90aGVyQXR0cnMpXHJcblxyXG4gIHJldHVybiB0aGlzXHJcbn1cclxuXHJcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5uc1RhZ05hbWUgPSBmdW5jdGlvbihkZXNjcmlwdG9yKSB7XHJcbiAgdmFyIGVmZmVjdGl2ZU5zID0gdGhpcy5sb2dOYW1lc3BhY2VVc2VkKGRlc2NyaXB0b3IubnMpXHJcbiAgcmV0dXJuIGdldEVsZW1lbnROcyhlZmZlY3RpdmVOcywgZGVzY3JpcHRvcilcclxufVxyXG5cclxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLm5zUHJvcGVydHlUYWdOYW1lID0gZnVuY3Rpb24oZGVzY3JpcHRvcikge1xyXG4gIHZhciBlZmZlY3RpdmVOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChkZXNjcmlwdG9yLm5zKVxyXG4gIHJldHVybiBnZXRQcm9wZXJ0eU5zKGVmZmVjdGl2ZU5zLCBkZXNjcmlwdG9yKVxyXG59XHJcblxyXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUuaXNMb2NhbE5zID0gZnVuY3Rpb24obnMpIHtcclxuICByZXR1cm4gbnMudXJpID09PSB0aGlzLm5zLnVyaVxyXG59XHJcblxyXG4vKipcclxuICogR2V0IHRoZSBhY3R1YWwgbnMgYXR0cmlidXRlIG5hbWUgZm9yIHRoZSBnaXZlbiBlbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge09iamVjdH0gZWxlbWVudFxyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtlbGVtZW50LmluaGVyaXRlZD1mYWxzZV1cclxuICpcclxuICogQHJldHVybiB7T2JqZWN0fSBuc05hbWVcclxuICovXHJcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5uc0F0dHJpYnV0ZU5hbWUgPSBmdW5jdGlvbihlbGVtZW50KSB7XHJcbiAgdmFyIG5zXHJcblxyXG4gIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgJiYgZWxlbWVudC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSB7XHJcbiAgICBucyA9IHBhcnNlTmFtZU5zKGVsZW1lbnQpXHJcbiAgfSBlbHNlIHtcclxuICAgIG5zID0gZWxlbWVudC5uc1xyXG4gIH1cclxuXHJcbiAgLy8gcmV0dXJuIGp1c3QgbG9jYWwgbmFtZSBmb3IgaW5oZXJpdGVkIGF0dHJpYnV0ZXNcclxuICBpZiAoZWxlbWVudC5pbmhlcml0ZWQpIHtcclxuICAgIHJldHVybiB7IGxvY2FsTmFtZTogbnMubG9jYWxOYW1lIH1cclxuICB9XHJcblxyXG4gIC8vIHBhcnNlICsgbG9nIGVmZmVjdGl2ZSBuc1xyXG4gIHZhciBlZmZlY3RpdmVOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChucylcclxuXHJcbiAgLy8gTE9HIEFDVFVBTCBuYW1lc3BhY2UgdXNlXHJcbiAgdGhpcy5nZXROYW1lc3BhY2VzKCkubG9nVXNlZChlZmZlY3RpdmVOcylcclxuXHJcbiAgLy8gc3RyaXAgcHJlZml4IGlmIHNhbWUgbmFtZXNwYWNlIGxpa2UgcGFyZW50XHJcbiAgaWYgKHRoaXMuaXNMb2NhbE5zKGVmZmVjdGl2ZU5zKSkge1xyXG4gICAgcmV0dXJuIHsgbG9jYWxOYW1lOiBucy5sb2NhbE5hbWUgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7IGxvY2FsTmFtZTogbnMubG9jYWxOYW1lIH0sIGVmZmVjdGl2ZU5zKVxyXG4gIH1cclxufVxyXG5cclxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlR2VuZXJpYyA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcclxuICB2YXIgc2VsZiA9IHRoaXNcclxuXHJcbiAgdmFyIGJvZHkgPSB0aGlzLmJvZHlcclxuXHJcbiAgdmFyIGF0dHJpYnV0ZXMgPSBbXVxyXG5cclxuICBmb3IgKGxldCBrZXkgaW4gZWxlbWVudCkge1xyXG4gICAgdmFyIG5vbk5zQXR0clxyXG5cclxuICAgIGlmIChrZXkgPT09ICckYm9keScpIHtcclxuICAgICAgYm9keS5wdXNoKG5ldyBCb2R5U2VyaWFsaXplcigpLmJ1aWxkKHsgdHlwZTogJ1N0cmluZycgfSwgZWxlbWVudFtrZXldKSlcclxuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnJGNoaWxkcmVuJykge1xyXG4gICAgICB2YWwuZm9yRWFjaChjaGlsZCA9PiB7XHJcbiAgICAgICAgYm9keS5wdXNoKG5ldyBFbGVtZW50U2VyaWFsaXplcihzZWxmKS5idWlsZChjaGlsZCkpXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2UgaWYgKGtleS5pbmRleE9mKCckJykgIT09IDApIHtcclxuICAgICAgbm9uTnNBdHRyID0gc2VsZi5wYXJzZU5zQXR0cmlidXRlKGVsZW1lbnQsIGtleSwgZWxlbWVudFtrZXldKVxyXG5cclxuICAgICAgaWYgKG5vbk5zQXR0cikge1xyXG4gICAgICAgIGF0dHJpYnV0ZXMucHVzaCh7IG5hbWU6IGtleSwgdmFsdWU6IGVsZW1lbnRba2V5XSB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYXR0cmlidXRlc1xyXG59XHJcblxyXG5FbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VOc0F0dHJpYnV0ZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XHJcbiAgdmFyIG1vZGVsID0gZWxlbWVudC4kbW9kZWxcclxuXHJcbiAgdmFyIG5hbWVOcyA9IHBhcnNlTmFtZU5zKG5hbWUpXHJcblxyXG4gIHZhciBuc1xyXG5cclxuICAvLyBwYXJzZSB4bWxuczpmb289XCJodHRwOi8vZm9vLmJhclwiXHJcbiAgaWYgKG5hbWVOcy5wcmVmaXggPT09ICd4bWxucycpIHtcclxuICAgIG5zID0geyBwcmVmaXg6IG5hbWVOcy5sb2NhbE5hbWUsIHVyaTogdmFsdWUgfVxyXG4gIH1cclxuXHJcbiAgLy8gcGFyc2UgeG1sbnM9XCJodHRwOi8vZm9vLmJhclwiXHJcbiAgaWYgKCFuYW1lTnMucHJlZml4ICYmIG5hbWVOcy5sb2NhbE5hbWUgPT09ICd4bWxucycpIHtcclxuICAgIG5zID0geyB1cmk6IHZhbHVlIH1cclxuICB9XHJcblxyXG4gIGlmICghbnMpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgIHZhbHVlOiB2YWx1ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKG1vZGVsICYmIG1vZGVsLmdldFBhY2thZ2UodmFsdWUpKSB7XHJcbiAgICAvLyByZWdpc3RlciB3ZWxsIGtub3duIG5hbWVzcGFjZVxyXG4gICAgdGhpcy5sb2dOYW1lc3BhY2UobnMsIHRydWUsIHRydWUpXHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIGxvZyBjdXN0b20gbmFtZXNwYWNlIGRpcmVjdGx5IGFzIHVzZWRcclxuICAgIHZhciBhY3R1YWxOcyA9IHRoaXMubG9nTmFtZXNwYWNlVXNlZChucywgdHJ1ZSlcclxuXHJcbiAgICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKGFjdHVhbE5zKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFBhcnNlIG5hbWVzcGFjZXMgYW5kIHJldHVybiBhIGxpc3Qgb2YgbGVmdCBvdmVyIGdlbmVyaWMgYXR0cmlidXRlc1xyXG4gKlxyXG4gKiBAcGFyYW0gIHtPYmplY3R9IGVsZW1lbnRcclxuICogQHJldHVybiB7QXJyYXk8T2JqZWN0Pn1cclxuICovXHJcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5wYXJzZU5zQXR0cmlidXRlcyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGF0dHJzKSB7XHJcbiAgdmFyIHNlbGYgPSB0aGlzXHJcblxyXG4gIHZhciBnZW5lcmljQXR0cnMgPSBlbGVtZW50LiRhdHRyc1xyXG5cclxuICB2YXIgYXR0cmlidXRlcyA9IFtdXHJcblxyXG4gIC8vIHBhcnNlIG5hbWVzcGFjZSBhdHRyaWJ1dGVzIGZpcnN0XHJcbiAgLy8gYW5kIGxvZyB0aGVtLiBwdXNoIG5vbiBuYW1lc3BhY2UgYXR0cmlidXRlcyB0byBhIGxpc3RcclxuICAvLyBhbmQgcHJvY2VzcyB0aGVtIGxhdGVyXHJcblxyXG4gIGZvciAobGV0IGtleSBpbiBnZW5lcmljQXR0cnMpIHtcclxuICAgIHZhciBub25Oc0F0dHIgPSBzZWxmLnBhcnNlTnNBdHRyaWJ1dGUoZWxlbWVudCwga2V5LCBnZW5lcmljQXR0cnNba2V5XSlcclxuICAgIGlmIChub25Oc0F0dHIpIHtcclxuICAgICAgYXR0cmlidXRlcy5wdXNoKG5vbk5zQXR0cilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBhdHRyaWJ1dGVzXHJcbn1cclxuXHJcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5wYXJzZUdlbmVyaWNBdHRyaWJ1dGVzID0gZnVuY3Rpb24oXHJcbiAgZWxlbWVudCxcclxuICBhdHRyaWJ1dGVzXHJcbikge1xyXG4gIHZhciBzZWxmID0gdGhpc1xyXG5cclxuICBhdHRyaWJ1dGVzLmZvckVhY2goYXR0ciA9PiB7XHJcbiAgICAvLyBkbyBub3Qgc2VyaWFsaXplIHhzaTp0eXBlIGF0dHJpYnV0ZVxyXG4gICAgLy8gaXQgaXMgc2V0IG1hbnVhbGx5IGJhc2VkIG9uIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gdHlwZVxyXG4gICAgaWYgKGF0dHIubmFtZSA9PT0gWFNJX1RZUEUpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgc2VsZi5hZGRBdHRyaWJ1dGUoc2VsZi5uc0F0dHJpYnV0ZU5hbWUoYXR0ci5uYW1lKSwgYXR0ci52YWx1ZSlcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICdtaXNzaW5nIG5hbWVzcGFjZSBpbmZvcm1hdGlvbiBmb3IgJyxcclxuICAgICAgICBhdHRyLm5hbWUsXHJcbiAgICAgICAgJz0nLFxyXG4gICAgICAgIGF0dHIudmFsdWUsXHJcbiAgICAgICAgJ29uJyxcclxuICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgIGVcclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH0pXHJcbn1cclxuXHJcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5wYXJzZUNvbnRhaW5tZW50cyA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpIHtcclxuICB2YXIgc2VsZiA9IHRoaXNcclxuXHJcbiAgdmFyIGJvZHkgPSB0aGlzLmJvZHlcclxuXHJcbiAgdmFyIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRcclxuXHJcbiAgcHJvcGVydGllcy5mb3JFYWNoKHAgPT4ge1xyXG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC5nZXQocC5uYW1lKVxyXG5cclxuICAgIHZhciBpc1JlZmVyZW5jZSA9IHAuaXNSZWZlcmVuY2VcclxuXHJcbiAgICB2YXIgaXNNYW55ID0gcC5pc01hbnlcclxuXHJcbiAgICBpZiAoIWlzTWFueSkge1xyXG4gICAgICB2YWx1ZSA9IFt2YWx1ZV1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocC5pc0JvZHkpIHtcclxuICAgICAgYm9keS5wdXNoKG5ldyBCb2R5U2VyaWFsaXplcigpLmJ1aWxkKHAsIHZhbHVlWzBdKSlcclxuICAgIH0gZWxzZSBpZiAoaXNTaW1wbGVUeXBlKHAudHlwZSkpIHtcclxuICAgICAgdmFsdWUuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICBib2R5LnB1c2goXHJcbiAgICAgICAgICBuZXcgVmFsdWVTZXJpYWxpemVyKHNlbGYuYWRkVGFnTmFtZShzZWxmLm5zUHJvcGVydHlUYWdOYW1lKHApKSkuYnVpbGQoXHJcbiAgICAgICAgICAgIHAsXHJcbiAgICAgICAgICAgIHZcclxuICAgICAgICAgIClcclxuICAgICAgICApXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2UgaWYgKGlzUmVmZXJlbmNlKSB7XHJcbiAgICAgIHZhbHVlLmZvckVhY2godiA9PiB7XHJcbiAgICAgICAgYm9keS5wdXNoKFxyXG4gICAgICAgICAgbmV3IFJlZmVyZW5jZVNlcmlhbGl6ZXIoXHJcbiAgICAgICAgICAgIHNlbGYuYWRkVGFnTmFtZShzZWxmLm5zUHJvcGVydHlUYWdOYW1lKHApKVxyXG4gICAgICAgICAgKS5idWlsZCh2KVxyXG4gICAgICAgIClcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGFsbG93IHNlcmlhbGl6YXRpb24gdmlhIHR5cGVcclxuICAgICAgLy8gcmF0aGVyIHRoYW4gZWxlbWVudCBuYW1lXHJcbiAgICAgIHZhciBhc1R5cGUgPSBzZXJpYWxpemVBc1R5cGUocClcclxuXHJcbiAgICAgIHZhciBhc1Byb3BlcnR5ID0gc2VyaWFsaXplQXNQcm9wZXJ0eShwKVxyXG5cclxuICAgICAgdmFsdWUuZm9yRWFjaCh2ID0+IHtcclxuICAgICAgICB2YXIgc2VyaWFsaXplclxyXG5cclxuICAgICAgICBpZiAoYXNUeXBlKSB7XHJcbiAgICAgICAgICBzZXJpYWxpemVyID0gbmV3IFR5cGVTZXJpYWxpemVyKHNlbGYsIHApXHJcbiAgICAgICAgfSBlbHNlIGlmIChhc1Byb3BlcnR5KSB7XHJcbiAgICAgICAgICBzZXJpYWxpemVyID0gbmV3IEVsZW1lbnRTZXJpYWxpemVyKHNlbGYsIHApXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNlcmlhbGl6ZXIgPSBuZXcgRWxlbWVudFNlcmlhbGl6ZXIoc2VsZilcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJvZHkucHVzaChzZXJpYWxpemVyLmJ1aWxkKHYpKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH0pXHJcbn1cclxuXHJcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5nZXROYW1lc3BhY2VzID0gZnVuY3Rpb24obG9jYWwpIHtcclxuICB2YXIgbmFtZXNwYWNlcyA9IHRoaXMubmFtZXNwYWNlc1xyXG5cclxuICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnRcclxuXHJcbiAgdmFyIHBhcmVudE5hbWVzcGFjZXNcclxuXHJcbiAgaWYgKCFuYW1lc3BhY2VzKSB7XHJcbiAgICBwYXJlbnROYW1lc3BhY2VzID0gcGFyZW50ICYmIHBhcmVudC5nZXROYW1lc3BhY2VzKClcclxuXHJcbiAgICBpZiAobG9jYWwgfHwgIXBhcmVudE5hbWVzcGFjZXMpIHtcclxuICAgICAgdGhpcy5uYW1lc3BhY2VzID0gbmFtZXNwYWNlcyA9IG5ldyBOYW1lc3BhY2VzKHBhcmVudE5hbWVzcGFjZXMpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuYW1lc3BhY2VzID0gcGFyZW50TmFtZXNwYWNlc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG5hbWVzcGFjZXNcclxufVxyXG5cclxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmxvZ05hbWVzcGFjZSA9IGZ1bmN0aW9uKG5zLCB3ZWxsa25vd24sIGxvY2FsKSB7XHJcbiAgdmFyIG5hbWVzcGFjZXMgPSB0aGlzLmdldE5hbWVzcGFjZXMobG9jYWwpXHJcblxyXG4gIHZhciBuc1VyaSA9IG5zLnVyaVxyXG5cclxuICB2YXIgbnNQcmVmaXggPSBucy5wcmVmaXhcclxuXHJcbiAgdmFyIGV4aXN0aW5nID0gbmFtZXNwYWNlcy5ieVVyaShuc1VyaSlcclxuXHJcbiAgaWYgKCFleGlzdGluZykge1xyXG4gICAgbmFtZXNwYWNlcy5hZGQobnMsIHdlbGxrbm93bilcclxuICB9XHJcblxyXG4gIG5hbWVzcGFjZXMubWFwUHJlZml4KG5zUHJlZml4LCBuc1VyaSlcclxuXHJcbiAgcmV0dXJuIG5zXHJcbn1cclxuXHJcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5sb2dOYW1lc3BhY2VVc2VkID0gZnVuY3Rpb24obnMsIGxvY2FsKSB7XHJcbiAgdmFyIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRcclxuXHJcbiAgdmFyIG1vZGVsID0gZWxlbWVudC4kbW9kZWxcclxuXHJcbiAgdmFyIG5hbWVzcGFjZXMgPSB0aGlzLmdldE5hbWVzcGFjZXMobG9jYWwpXHJcblxyXG4gIC8vIG5zIG1heSBiZVxyXG4gIC8vXHJcbiAgLy8gICAqIHByZWZpeCBvbmx5XHJcbiAgLy8gICAqIHByZWZpeDp1cmlcclxuICAvLyAgICogbG9jYWxOYW1lIG9ubHlcclxuXHJcbiAgdmFyIHByZWZpeCA9IG5zLnByZWZpeFxyXG5cclxuICB2YXIgdXJpID0gbnMudXJpXHJcblxyXG4gIHZhciBuZXdQcmVmaXhcclxuXHJcbiAgdmFyIGlkeFxyXG5cclxuICB2YXIgd2VsbGtub3duVXJpXHJcblxyXG4gIC8vIGhhbmRsZSBhbm9ueW1vdXMgbmFtZXNwYWNlcyAoZWxlbWVudEZvcm09dW5xdWFsaWZpZWQpLCBjZi4gIzIzXHJcbiAgaWYgKCFwcmVmaXggJiYgIXVyaSkge1xyXG4gICAgcmV0dXJuIHsgbG9jYWxOYW1lOiBucy5sb2NhbE5hbWUgfVxyXG4gIH1cclxuXHJcbiAgd2VsbGtub3duVXJpID1cclxuICAgIERFRkFVTFRfTlNfTUFQW3ByZWZpeF0gfHwgKG1vZGVsICYmIChtb2RlbC5nZXRQYWNrYWdlKHByZWZpeCkgfHwge30pLnVyaSlcclxuXHJcbiAgdXJpID0gdXJpIHx8IHdlbGxrbm93blVyaSB8fCBuYW1lc3BhY2VzLnVyaUJ5UHJlZml4KHByZWZpeClcclxuXHJcbiAgaWYgKCF1cmkpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignbm8gbmFtZXNwYWNlIHVyaSBnaXZlbiBmb3IgcHJlZml4IDwnICsgcHJlZml4ICsgJz4nKVxyXG4gIH1cclxuXHJcbiAgbnMgPSBuYW1lc3BhY2VzLmJ5VXJpKHVyaSlcclxuXHJcbiAgaWYgKCFucykge1xyXG4gICAgbmV3UHJlZml4ID0gcHJlZml4XHJcbiAgICBpZHggPSAxXHJcblxyXG4gICAgLy8gZmluZCBhIHByZWZpeCB0aGF0IGlzIG5vdCBtYXBwZWQgeWV0XHJcbiAgICB3aGlsZSAobmFtZXNwYWNlcy51cmlCeVByZWZpeChuZXdQcmVmaXgpKSB7XHJcbiAgICAgIG5ld1ByZWZpeCA9IHByZWZpeCArICdfJyArIGlkeCsrXHJcbiAgICB9XHJcblxyXG4gICAgbnMgPSB0aGlzLmxvZ05hbWVzcGFjZShcclxuICAgICAgeyBwcmVmaXg6IG5ld1ByZWZpeCwgdXJpOiB1cmkgfSxcclxuICAgICAgd2VsbGtub3duVXJpID09PSB1cmlcclxuICAgIClcclxuICB9XHJcblxyXG4gIGlmIChwcmVmaXgpIHtcclxuICAgIG5hbWVzcGFjZXMubWFwUHJlZml4KHByZWZpeCwgdXJpKVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG5zXHJcbn1cclxuXHJcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5wYXJzZUF0dHJpYnV0ZXMgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7XHJcbiAgdmFyIHNlbGYgPSB0aGlzXHJcblxyXG4gIHZhciBlbGVtZW50ID0gdGhpcy5lbGVtZW50XHJcblxyXG4gIHByb3BlcnRpZXMuZm9yRWFjaChwID0+IHtcclxuICAgIHZhciB2YWx1ZSA9IGVsZW1lbnQuZ2V0KHAubmFtZSlcclxuXHJcbiAgICBpZiAocC5pc1JlZmVyZW5jZSkge1xyXG4gICAgICBpZiAoIXAuaXNNYW55KSB7XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5pZFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhciB2YWx1ZXMgPSBbXVxyXG4gICAgICAgIGZvckVhY2godmFsdWUsIGZ1bmN0aW9uKHYpIHtcclxuICAgICAgICAgIHZhbHVlcy5wdXNoKHYuaWQpXHJcbiAgICAgICAgfSlcclxuICAgICAgICAvLyBJRFJFRlMgaXMgYSB3aGl0ZXNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHJlZmVyZW5jZXMuXHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZXMuam9pbignICcpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZWxmLmFkZEF0dHJpYnV0ZShzZWxmLm5zQXR0cmlidXRlTmFtZShwKSwgdmFsdWUpXHJcbiAgfSlcclxufVxyXG5cclxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmFkZFRhZ05hbWUgPSBmdW5jdGlvbihuc1RhZ05hbWUpIHtcclxuICB2YXIgYWN0dWFsTnMgPSB0aGlzLmxvZ05hbWVzcGFjZVVzZWQobnNUYWdOYW1lKVxyXG5cclxuICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKGFjdHVhbE5zKVxyXG5cclxuICByZXR1cm4gbnNOYW1lKG5zVGFnTmFtZSlcclxufVxyXG5cclxuRWxlbWVudFNlcmlhbGl6ZXIucHJvdG90eXBlLmFkZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XHJcbiAgdmFyIGF0dHJzID0gdGhpcy5hdHRyc1xyXG5cclxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSB7XHJcbiAgICB2YWx1ZSA9IGVzY2FwZUF0dHIodmFsdWUpXHJcbiAgfVxyXG5cclxuICBhdHRycy5wdXNoKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlIH0pXHJcbn1cclxuXHJcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVBdHRyaWJ1dGVzID0gZnVuY3Rpb24od3JpdGVyKSB7XHJcbiAgdmFyIGF0dHJzID0gdGhpcy5hdHRyc1xyXG5cclxuICB2YXIgbmFtZXNwYWNlcyA9IHRoaXMubmFtZXNwYWNlc1xyXG5cclxuICBpZiAobmFtZXNwYWNlcykge1xyXG4gICAgYXR0cnMgPSBnZXROc0F0dHJzKG5hbWVzcGFjZXMpLmNvbmNhdChhdHRycylcclxuICB9XHJcblxyXG4gIGF0dHJzLmZvckVhY2goYSA9PiB7XHJcbiAgICB3cml0ZXJcclxuICAgICAgLmFwcGVuZCgnICcpXHJcbiAgICAgIC5hcHBlbmQobnNOYW1lKGEubmFtZSkpXHJcbiAgICAgIC5hcHBlbmQoJz1cIicpXHJcbiAgICAgIC5hcHBlbmQoYS52YWx1ZSlcclxuICAgICAgLmFwcGVuZCgnXCInKVxyXG4gIH0pXHJcbn1cclxuXHJcbkVsZW1lbnRTZXJpYWxpemVyLnByb3RvdHlwZS5zZXJpYWxpemVUbyA9IGZ1bmN0aW9uKHdyaXRlcikge1xyXG4gIHZhciBmaXJzdEJvZHkgPSB0aGlzLmJvZHlbMF1cclxuXHJcbiAgdmFyIGluZGVudCA9IGZpcnN0Qm9keSAmJiBmaXJzdEJvZHkuY29uc3RydWN0b3IgIT09IEJvZHlTZXJpYWxpemVyXHJcblxyXG4gIHdyaXRlci5hcHBlbmRJbmRlbnQoKS5hcHBlbmQoJzwnICsgdGhpcy50YWdOYW1lKVxyXG5cclxuICB0aGlzLnNlcmlhbGl6ZUF0dHJpYnV0ZXMod3JpdGVyKVxyXG5cclxuICB3cml0ZXIuYXBwZW5kKGZpcnN0Qm9keSA/ICc+JyA6ICcgLz4nKVxyXG5cclxuICBpZiAoZmlyc3RCb2R5KSB7XHJcbiAgICBpZiAoaW5kZW50KSB7XHJcbiAgICAgIHdyaXRlci5hcHBlbmROZXdMaW5lKCkuaW5kZW50KClcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJvZHkuZm9yRWFjaChiID0+IHtcclxuICAgICAgYi5zZXJpYWxpemVUbyh3cml0ZXIpXHJcbiAgICB9KVxyXG5cclxuICAgIGlmIChpbmRlbnQpIHtcclxuICAgICAgd3JpdGVyLnVuaW5kZW50KCkuYXBwZW5kSW5kZW50KClcclxuICAgIH1cclxuXHJcbiAgICB3cml0ZXIuYXBwZW5kKCc8LycgKyB0aGlzLnRhZ05hbWUgKyAnPicpXHJcbiAgfVxyXG5cclxuICB3cml0ZXIuYXBwZW5kTmV3TGluZSgpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIHNlcmlhbGl6ZXIgZm9yIHR5cGVzIHRoYXQgaGFuZGxlcyBzZXJpYWxpemF0aW9uIG9mIGRhdGEgdHlwZXNcclxuICovXHJcbmZ1bmN0aW9uIFR5cGVTZXJpYWxpemVyKHBhcmVudCwgcHJvcGVydHlEZXNjcmlwdG9yKSB7XHJcbiAgRWxlbWVudFNlcmlhbGl6ZXIuY2FsbCh0aGlzLCBwYXJlbnQsIHByb3BlcnR5RGVzY3JpcHRvcilcclxufVxyXG5cclxuaW5oZXJpdHMoVHlwZVNlcmlhbGl6ZXIsIEVsZW1lbnRTZXJpYWxpemVyKVxyXG5cclxuVHlwZVNlcmlhbGl6ZXIucHJvdG90eXBlLnBhcnNlTnNBdHRyaWJ1dGVzID0gZnVuY3Rpb24oZWxlbWVudCkge1xyXG4gIC8vIGV4dHJhY3RlZCBhdHRyaWJ1dGVzXHJcbiAgdmFyIGF0dHJpYnV0ZXMgPSBFbGVtZW50U2VyaWFsaXplci5wcm90b3R5cGUucGFyc2VOc0F0dHJpYnV0ZXMuY2FsbChcclxuICAgIHRoaXMsXHJcbiAgICBlbGVtZW50XHJcbiAgKVxyXG5cclxuICB2YXIgZGVzY3JpcHRvciA9IGVsZW1lbnQuJGRlc2NyaXB0b3JcclxuXHJcbiAgLy8gb25seSBzZXJpYWxpemUgeHNpOnR5cGUgaWYgbmVjZXNzYXJ5XHJcbiAgaWYgKGRlc2NyaXB0b3IubmFtZSA9PT0gdGhpcy5wcm9wZXJ0eURlc2NyaXB0b3IudHlwZSkge1xyXG4gICAgcmV0dXJuIGF0dHJpYnV0ZXNcclxuICB9XHJcblxyXG4gIHZhciB0eXBlTnMgPSAodGhpcy50eXBlTnMgPSB0aGlzLm5zVGFnTmFtZShkZXNjcmlwdG9yKSlcclxuICB0aGlzLmdldE5hbWVzcGFjZXMoKS5sb2dVc2VkKHRoaXMudHlwZU5zKVxyXG5cclxuICAvLyBhZGQgeHNpOnR5cGUgYXR0cmlidXRlIHRvIHJlcHJlc2VudCB0aGUgZWxlbWVudHNcclxuICAvLyBhY3R1YWwgdHlwZVxyXG5cclxuICB2YXIgcGtnID0gZWxlbWVudC4kbW9kZWwuZ2V0UGFja2FnZSh0eXBlTnMudXJpKVxyXG5cclxuICB2YXIgdHlwZVByZWZpeCA9IChwa2cueG1sICYmIHBrZy54bWwudHlwZVByZWZpeCkgfHwgJydcclxuXHJcbiAgdGhpcy5hZGRBdHRyaWJ1dGUoXHJcbiAgICB0aGlzLm5zQXR0cmlidXRlTmFtZShYU0lfVFlQRSksXHJcbiAgICAodHlwZU5zLnByZWZpeCA/IHR5cGVOcy5wcmVmaXggKyAnOicgOiAnJykgK1xyXG4gICAgICB0eXBlUHJlZml4ICtcclxuICAgICAgZGVzY3JpcHRvci5ucy5sb2NhbE5hbWVcclxuICApXHJcblxyXG4gIHJldHVybiBhdHRyaWJ1dGVzXHJcbn1cclxuXHJcblR5cGVTZXJpYWxpemVyLnByb3RvdHlwZS5pc0xvY2FsTnMgPSBmdW5jdGlvbihucykge1xyXG4gIHJldHVybiBucy51cmkgPT09ICh0aGlzLnR5cGVOcyB8fCB0aGlzLm5zKS51cmlcclxufVxyXG5cclxuZnVuY3Rpb24gU2F2aW5nV3JpdGVyKCkge1xyXG4gIHRoaXMudmFsdWUgPSAnJ1xyXG5cclxuICB0aGlzLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XHJcbiAgICB0aGlzLnZhbHVlICs9IHN0clxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gRm9ybWF0aW5nV3JpdGVyKG91dCwgZm9ybWF0KSB7XHJcbiAgdmFyIGluZGVudCA9IFsnJ11cclxuXHJcbiAgdGhpcy5hcHBlbmQgPSBmdW5jdGlvbihzdHIpIHtcclxuICAgIG91dC53cml0ZShzdHIpXHJcblxyXG4gICAgcmV0dXJuIHRoaXNcclxuICB9XHJcblxyXG4gIHRoaXMuYXBwZW5kTmV3TGluZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKGZvcm1hdCkge1xyXG4gICAgICBvdXQud3JpdGUoJ1xcbicpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXNcclxuICB9XHJcblxyXG4gIHRoaXMuYXBwZW5kSW5kZW50ID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoZm9ybWF0KSB7XHJcbiAgICAgIG91dC53cml0ZShpbmRlbnQuam9pbignICAnKSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpc1xyXG4gIH1cclxuXHJcbiAgdGhpcy5pbmRlbnQgPSBmdW5jdGlvbigpIHtcclxuICAgIGluZGVudC5wdXNoKCcnKVxyXG4gICAgcmV0dXJuIHRoaXNcclxuICB9XHJcblxyXG4gIHRoaXMudW5pbmRlbnQgPSBmdW5jdGlvbigpIHtcclxuICAgIGluZGVudC5wb3AoKVxyXG4gICAgcmV0dXJuIHRoaXNcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIHdyaXRlciBmb3IgbWV0YS1tb2RlbCBiYWNrZWQgZG9jdW1lbnQgdHJlZXNcclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgb3V0cHV0IG9wdGlvbnMgdG8gcGFzcyBpbnRvIHRoZSB3cml0ZXJcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBXcml0ZXIob3B0aW9ucykge1xyXG4gIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHsgZm9ybWF0OiBmYWxzZSwgcHJlYW1ibGU6IHRydWUgfSwgb3B0aW9ucyB8fCB7fSlcclxuXHJcbiAgZnVuY3Rpb24gdG9YTUwodHJlZSwgd3JpdGVyKSB7XHJcbiAgICB2YXIgaW50ZXJuYWxXcml0ZXIgPSB3cml0ZXIgfHwgbmV3IFNhdmluZ1dyaXRlcigpXHJcbiAgICB2YXIgZm9ybWF0aW5nV3JpdGVyID0gbmV3IEZvcm1hdGluZ1dyaXRlcihpbnRlcm5hbFdyaXRlciwgb3B0aW9ucy5mb3JtYXQpXHJcblxyXG4gICAgaWYgKG9wdGlvbnMucHJlYW1ibGUpIHtcclxuICAgICAgZm9ybWF0aW5nV3JpdGVyLmFwcGVuZChYTUxfUFJFQU1CTEUpXHJcbiAgICB9XHJcblxyXG4gICAgbmV3IEVsZW1lbnRTZXJpYWxpemVyKCkuYnVpbGQodHJlZSkuc2VyaWFsaXplVG8oZm9ybWF0aW5nV3JpdGVyKVxyXG5cclxuICAgIGlmICghd3JpdGVyKSB7XHJcbiAgICAgIHJldHVybiBpbnRlcm5hbFdyaXRlci52YWx1ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHRvWE1MOiB0b1hNTFxyXG4gIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2ZlYXR1cmVzL3htbC9tb2RlbC14bWwvd3JpdGUuanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBREE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUEE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///41\n"); + +/***/ }), +/* 42 */ +/***/ (function(module, exports) { + +eval("module.exports = {\"name\":\"BPMN20\",\"uri\":\"http://www.omg.org/spec/BPMN/20100524/MODEL\",\"associations\":[],\"types\":[{\"name\":\"Interface\",\"superClass\":[\"RootElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"operations\",\"type\":\"Operation\",\"isMany\":true},{\"name\":\"implementationRef\",\"type\":\"String\",\"isAttr\":true}]},{\"name\":\"Operation\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"inMessageRef\",\"type\":\"Message\",\"isReference\":true},{\"name\":\"outMessageRef\",\"type\":\"Message\",\"isReference\":true},{\"name\":\"errorRef\",\"type\":\"Error\",\"isMany\":true,\"isReference\":true},{\"name\":\"implementationRef\",\"type\":\"String\",\"isAttr\":true}]},{\"name\":\"EndPoint\",\"superClass\":[\"RootElement\"]},{\"name\":\"Auditing\",\"superClass\":[\"BaseElement\"]},{\"name\":\"GlobalTask\",\"superClass\":[\"CallableElement\"],\"properties\":[{\"name\":\"resources\",\"type\":\"ResourceRole\",\"isMany\":true}]},{\"name\":\"Monitoring\",\"superClass\":[\"BaseElement\"]},{\"name\":\"Performer\",\"superClass\":[\"ResourceRole\"]},{\"name\":\"Process\",\"superClass\":[\"FlowElementsContainer\",\"CallableElement\"],\"properties\":[{\"name\":\"processType\",\"type\":\"ProcessType\",\"isAttr\":true},{\"name\":\"isClosed\",\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"auditing\",\"type\":\"Auditing\"},{\"name\":\"monitoring\",\"type\":\"Monitoring\"},{\"name\":\"properties\",\"type\":\"Property\",\"isMany\":true},{\"name\":\"laneSets\",\"type\":\"LaneSet\",\"isMany\":true,\"replaces\":\"FlowElementsContainer#laneSets\"},{\"name\":\"flowElements\",\"type\":\"FlowElement\",\"isMany\":true,\"replaces\":\"FlowElementsContainer#flowElements\"},{\"name\":\"artifacts\",\"type\":\"Artifact\",\"isMany\":true},{\"name\":\"resources\",\"type\":\"ResourceRole\",\"isMany\":true},{\"name\":\"correlationSubscriptions\",\"type\":\"CorrelationSubscription\",\"isMany\":true},{\"name\":\"supports\",\"type\":\"Process\",\"isMany\":true,\"isReference\":true},{\"name\":\"definitionalCollaborationRef\",\"type\":\"Collaboration\",\"isAttr\":true,\"isReference\":true},{\"name\":\"isExecutable\",\"isAttr\":true,\"type\":\"Boolean\"}]},{\"name\":\"LaneSet\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"lanes\",\"type\":\"Lane\",\"isMany\":true},{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"Lane\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"partitionElementRef\",\"type\":\"BaseElement\",\"isAttr\":true,\"isReference\":true},{\"name\":\"partitionElement\",\"type\":\"BaseElement\"},{\"name\":\"flowNodeRef\",\"type\":\"FlowNode\",\"isMany\":true,\"isReference\":true},{\"name\":\"childLaneSet\",\"type\":\"LaneSet\",\"xml\":{\"serialize\":\"xsi:type\"}}]},{\"name\":\"GlobalManualTask\",\"superClass\":[\"GlobalTask\"]},{\"name\":\"ManualTask\",\"superClass\":[\"Task\"]},{\"name\":\"UserTask\",\"superClass\":[\"Task\"],\"properties\":[{\"name\":\"renderings\",\"type\":\"Rendering\",\"isMany\":true},{\"name\":\"implementation\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"Rendering\",\"superClass\":[\"BaseElement\"]},{\"name\":\"HumanPerformer\",\"superClass\":[\"Performer\"]},{\"name\":\"PotentialOwner\",\"superClass\":[\"HumanPerformer\"]},{\"name\":\"GlobalUserTask\",\"superClass\":[\"GlobalTask\"],\"properties\":[{\"name\":\"implementation\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"renderings\",\"type\":\"Rendering\",\"isMany\":true}]},{\"name\":\"Gateway\",\"isAbstract\":true,\"superClass\":[\"FlowNode\"],\"properties\":[{\"name\":\"gatewayDirection\",\"type\":\"GatewayDirection\",\"default\":\"Unspecified\",\"isAttr\":true}]},{\"name\":\"EventBasedGateway\",\"superClass\":[\"Gateway\"],\"properties\":[{\"name\":\"instantiate\",\"default\":false,\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"eventGatewayType\",\"type\":\"EventBasedGatewayType\",\"isAttr\":true,\"default\":\"Exclusive\"}]},{\"name\":\"ComplexGateway\",\"superClass\":[\"Gateway\"],\"properties\":[{\"name\":\"activationCondition\",\"type\":\"Expression\",\"xml\":{\"serialize\":\"xsi:type\"}},{\"name\":\"default\",\"type\":\"SequenceFlow\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"ExclusiveGateway\",\"superClass\":[\"Gateway\"],\"properties\":[{\"name\":\"default\",\"type\":\"SequenceFlow\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"InclusiveGateway\",\"superClass\":[\"Gateway\"],\"properties\":[{\"name\":\"default\",\"type\":\"SequenceFlow\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"ParallelGateway\",\"superClass\":[\"Gateway\"]},{\"name\":\"RootElement\",\"isAbstract\":true,\"superClass\":[\"BaseElement\"]},{\"name\":\"Relationship\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"type\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"direction\",\"type\":\"RelationshipDirection\",\"isAttr\":true},{\"name\":\"source\",\"isMany\":true,\"isReference\":true,\"type\":\"Element\"},{\"name\":\"target\",\"isMany\":true,\"isReference\":true,\"type\":\"Element\"}]},{\"name\":\"BaseElement\",\"isAbstract\":true,\"properties\":[{\"name\":\"id\",\"isAttr\":true,\"type\":\"String\",\"isId\":true},{\"name\":\"documentation\",\"type\":\"Documentation\",\"isMany\":true},{\"name\":\"extensionDefinitions\",\"type\":\"ExtensionDefinition\",\"isMany\":true,\"isReference\":true},{\"name\":\"extensionElements\",\"type\":\"ExtensionElements\"}]},{\"name\":\"Extension\",\"properties\":[{\"name\":\"mustUnderstand\",\"default\":false,\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"definition\",\"type\":\"ExtensionDefinition\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"ExtensionDefinition\",\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"extensionAttributeDefinitions\",\"type\":\"ExtensionAttributeDefinition\",\"isMany\":true}]},{\"name\":\"ExtensionAttributeDefinition\",\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"type\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"isReference\",\"default\":false,\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"extensionDefinition\",\"type\":\"ExtensionDefinition\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"ExtensionElements\",\"properties\":[{\"name\":\"valueRef\",\"isAttr\":true,\"isReference\":true,\"type\":\"Element\"},{\"name\":\"values\",\"type\":\"Element\",\"isMany\":true},{\"name\":\"extensionAttributeDefinition\",\"type\":\"ExtensionAttributeDefinition\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"Documentation\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"text\",\"type\":\"String\",\"isBody\":true},{\"name\":\"textFormat\",\"default\":\"text/plain\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"Event\",\"isAbstract\":true,\"superClass\":[\"FlowNode\",\"InteractionNode\"],\"properties\":[{\"name\":\"properties\",\"type\":\"Property\",\"isMany\":true}]},{\"name\":\"IntermediateCatchEvent\",\"superClass\":[\"CatchEvent\"]},{\"name\":\"IntermediateThrowEvent\",\"superClass\":[\"ThrowEvent\"]},{\"name\":\"EndEvent\",\"superClass\":[\"ThrowEvent\"]},{\"name\":\"StartEvent\",\"superClass\":[\"CatchEvent\"],\"properties\":[{\"name\":\"isInterrupting\",\"default\":true,\"isAttr\":true,\"type\":\"Boolean\"}]},{\"name\":\"ThrowEvent\",\"isAbstract\":true,\"superClass\":[\"Event\"],\"properties\":[{\"name\":\"dataInputs\",\"type\":\"DataInput\",\"isMany\":true},{\"name\":\"dataInputAssociations\",\"type\":\"DataInputAssociation\",\"isMany\":true},{\"name\":\"inputSet\",\"type\":\"InputSet\"},{\"name\":\"eventDefinitions\",\"type\":\"EventDefinition\",\"isMany\":true},{\"name\":\"eventDefinitionRef\",\"type\":\"EventDefinition\",\"isMany\":true,\"isReference\":true}]},{\"name\":\"CatchEvent\",\"isAbstract\":true,\"superClass\":[\"Event\"],\"properties\":[{\"name\":\"parallelMultiple\",\"isAttr\":true,\"type\":\"Boolean\",\"default\":false},{\"name\":\"dataOutputs\",\"type\":\"DataOutput\",\"isMany\":true},{\"name\":\"dataOutputAssociations\",\"type\":\"DataOutputAssociation\",\"isMany\":true},{\"name\":\"outputSet\",\"type\":\"OutputSet\"},{\"name\":\"eventDefinitions\",\"type\":\"EventDefinition\",\"isMany\":true},{\"name\":\"eventDefinitionRef\",\"type\":\"EventDefinition\",\"isMany\":true,\"isReference\":true}]},{\"name\":\"BoundaryEvent\",\"superClass\":[\"CatchEvent\"],\"properties\":[{\"name\":\"cancelActivity\",\"default\":true,\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"attachedToRef\",\"type\":\"Activity\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"EventDefinition\",\"isAbstract\":true,\"superClass\":[\"RootElement\"]},{\"name\":\"CancelEventDefinition\",\"superClass\":[\"EventDefinition\"]},{\"name\":\"ErrorEventDefinition\",\"superClass\":[\"EventDefinition\"],\"properties\":[{\"name\":\"errorRef\",\"type\":\"Error\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"TerminateEndEvent\",\"superClass\":[\"EventDefinition\"]},{\"name\":\"EscalationEventDefinition\",\"superClass\":[\"EventDefinition\"],\"properties\":[{\"name\":\"escalationRef\",\"type\":\"Escalation\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"Escalation\",\"properties\":[{\"name\":\"structureRef\",\"type\":\"ItemDefinition\",\"isAttr\":true,\"isReference\":true},{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"escalationCode\",\"isAttr\":true,\"type\":\"String\"}],\"superClass\":[\"RootElement\"]},{\"name\":\"CompensateEventDefinition\",\"superClass\":[\"EventDefinition\"],\"properties\":[{\"name\":\"waitForCompletion\",\"isAttr\":true,\"type\":\"Boolean\",\"default\":true},{\"name\":\"activityRef\",\"type\":\"Activity\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"TimerEventDefinition\",\"superClass\":[\"EventDefinition\"],\"properties\":[{\"name\":\"timeDate\",\"type\":\"Expression\",\"xml\":{\"serialize\":\"xsi:type\"}},{\"name\":\"timeCycle\",\"type\":\"Expression\",\"xml\":{\"serialize\":\"xsi:type\"}},{\"name\":\"timeDuration\",\"type\":\"Expression\",\"xml\":{\"serialize\":\"xsi:type\"}}]},{\"name\":\"LinkEventDefinition\",\"superClass\":[\"EventDefinition\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"target\",\"type\":\"LinkEventDefinition\",\"isAttr\":true,\"isReference\":true},{\"name\":\"source\",\"type\":\"LinkEventDefinition\",\"isMany\":true,\"isReference\":true}]},{\"name\":\"MessageEventDefinition\",\"superClass\":[\"EventDefinition\"],\"properties\":[{\"name\":\"messageRef\",\"type\":\"Message\",\"isAttr\":true,\"isReference\":true},{\"name\":\"operationRef\",\"type\":\"Operation\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"ConditionalEventDefinition\",\"superClass\":[\"EventDefinition\"],\"properties\":[{\"name\":\"condition\",\"type\":\"Expression\",\"xml\":{\"serialize\":\"xsi:type\"}}]},{\"name\":\"SignalEventDefinition\",\"superClass\":[\"EventDefinition\"],\"properties\":[{\"name\":\"signalRef\",\"type\":\"Signal\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"Signal\",\"superClass\":[\"RootElement\"],\"properties\":[{\"name\":\"structureRef\",\"type\":\"ItemDefinition\",\"isAttr\":true,\"isReference\":true},{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"ImplicitThrowEvent\",\"superClass\":[\"ThrowEvent\"]},{\"name\":\"DataState\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"ItemAwareElement\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"itemSubjectRef\",\"type\":\"ItemDefinition\",\"isAttr\":true,\"isReference\":true},{\"name\":\"dataState\",\"type\":\"DataState\"}]},{\"name\":\"DataAssociation\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"assignment\",\"type\":\"Assignment\",\"isMany\":true},{\"name\":\"sourceRef\",\"type\":\"ItemAwareElement\",\"isMany\":true,\"isReference\":true},{\"name\":\"targetRef\",\"type\":\"ItemAwareElement\",\"isReference\":true},{\"name\":\"transformation\",\"type\":\"FormalExpression\",\"xml\":{\"serialize\":\"property\"}}]},{\"name\":\"DataInput\",\"superClass\":[\"ItemAwareElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"isCollection\",\"default\":false,\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"inputSetRef\",\"type\":\"InputSet\",\"isVirtual\":true,\"isMany\":true,\"isReference\":true},{\"name\":\"inputSetWithOptional\",\"type\":\"InputSet\",\"isVirtual\":true,\"isMany\":true,\"isReference\":true},{\"name\":\"inputSetWithWhileExecuting\",\"type\":\"InputSet\",\"isVirtual\":true,\"isMany\":true,\"isReference\":true}]},{\"name\":\"DataOutput\",\"superClass\":[\"ItemAwareElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"isCollection\",\"default\":false,\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"outputSetRef\",\"type\":\"OutputSet\",\"isVirtual\":true,\"isMany\":true,\"isReference\":true},{\"name\":\"outputSetWithOptional\",\"type\":\"OutputSet\",\"isVirtual\":true,\"isMany\":true,\"isReference\":true},{\"name\":\"outputSetWithWhileExecuting\",\"type\":\"OutputSet\",\"isVirtual\":true,\"isMany\":true,\"isReference\":true}]},{\"name\":\"InputSet\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"dataInputRefs\",\"type\":\"DataInput\",\"isMany\":true,\"isReference\":true},{\"name\":\"optionalInputRefs\",\"type\":\"DataInput\",\"isMany\":true,\"isReference\":true},{\"name\":\"whileExecutingInputRefs\",\"type\":\"DataInput\",\"isMany\":true,\"isReference\":true},{\"name\":\"outputSetRefs\",\"type\":\"OutputSet\",\"isMany\":true,\"isReference\":true}]},{\"name\":\"OutputSet\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"dataOutputRefs\",\"type\":\"DataOutput\",\"isMany\":true,\"isReference\":true},{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"inputSetRefs\",\"type\":\"InputSet\",\"isMany\":true,\"isReference\":true},{\"name\":\"optionalOutputRefs\",\"type\":\"DataOutput\",\"isMany\":true,\"isReference\":true},{\"name\":\"whileExecutingOutputRefs\",\"type\":\"DataOutput\",\"isMany\":true,\"isReference\":true}]},{\"name\":\"Property\",\"superClass\":[\"ItemAwareElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"DataInputAssociation\",\"superClass\":[\"DataAssociation\"]},{\"name\":\"DataOutputAssociation\",\"superClass\":[\"DataAssociation\"]},{\"name\":\"InputOutputSpecification\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"dataInputs\",\"type\":\"DataInput\",\"isMany\":true},{\"name\":\"dataOutputs\",\"type\":\"DataOutput\",\"isMany\":true},{\"name\":\"inputSets\",\"type\":\"InputSet\",\"isMany\":true},{\"name\":\"outputSets\",\"type\":\"OutputSet\",\"isMany\":true}]},{\"name\":\"DataObject\",\"superClass\":[\"FlowElement\",\"ItemAwareElement\"],\"properties\":[{\"name\":\"isCollection\",\"default\":false,\"isAttr\":true,\"type\":\"Boolean\"}]},{\"name\":\"InputOutputBinding\",\"properties\":[{\"name\":\"inputDataRef\",\"type\":\"InputSet\",\"isAttr\":true,\"isReference\":true},{\"name\":\"outputDataRef\",\"type\":\"OutputSet\",\"isAttr\":true,\"isReference\":true},{\"name\":\"operationRef\",\"type\":\"Operation\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"Assignment\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"from\",\"type\":\"Expression\",\"xml\":{\"serialize\":\"xsi:type\"}},{\"name\":\"to\",\"type\":\"Expression\",\"xml\":{\"serialize\":\"xsi:type\"}}]},{\"name\":\"DataStore\",\"superClass\":[\"RootElement\",\"ItemAwareElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"capacity\",\"isAttr\":true,\"type\":\"Integer\"},{\"name\":\"isUnlimited\",\"default\":true,\"isAttr\":true,\"type\":\"Boolean\"}]},{\"name\":\"DataStoreReference\",\"superClass\":[\"ItemAwareElement\",\"FlowElement\"],\"properties\":[{\"name\":\"dataStoreRef\",\"type\":\"DataStore\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"DataObjectReference\",\"superClass\":[\"ItemAwareElement\",\"FlowElement\"],\"properties\":[{\"name\":\"dataObjectRef\",\"type\":\"DataObject\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"ConversationLink\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"sourceRef\",\"type\":\"InteractionNode\",\"isAttr\":true,\"isReference\":true},{\"name\":\"targetRef\",\"type\":\"InteractionNode\",\"isAttr\":true,\"isReference\":true},{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"ConversationAssociation\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"innerConversationNodeRef\",\"type\":\"ConversationNode\",\"isAttr\":true,\"isReference\":true},{\"name\":\"outerConversationNodeRef\",\"type\":\"ConversationNode\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"CallConversation\",\"superClass\":[\"ConversationNode\"],\"properties\":[{\"name\":\"calledCollaborationRef\",\"type\":\"Collaboration\",\"isAttr\":true,\"isReference\":true},{\"name\":\"participantAssociations\",\"type\":\"ParticipantAssociation\",\"isMany\":true}]},{\"name\":\"Conversation\",\"superClass\":[\"ConversationNode\"]},{\"name\":\"SubConversation\",\"superClass\":[\"ConversationNode\"],\"properties\":[{\"name\":\"conversationNodes\",\"type\":\"ConversationNode\",\"isMany\":true}]},{\"name\":\"ConversationNode\",\"isAbstract\":true,\"superClass\":[\"InteractionNode\",\"BaseElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"participantRefs\",\"type\":\"Participant\",\"isMany\":true,\"isReference\":true},{\"name\":\"messageFlowRefs\",\"type\":\"MessageFlow\",\"isMany\":true,\"isReference\":true},{\"name\":\"correlationKeys\",\"type\":\"CorrelationKey\",\"isMany\":true}]},{\"name\":\"GlobalConversation\",\"superClass\":[\"Collaboration\"]},{\"name\":\"PartnerEntity\",\"superClass\":[\"RootElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"participantRef\",\"type\":\"Participant\",\"isMany\":true,\"isReference\":true}]},{\"name\":\"PartnerRole\",\"superClass\":[\"RootElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"participantRef\",\"type\":\"Participant\",\"isMany\":true,\"isReference\":true}]},{\"name\":\"CorrelationProperty\",\"superClass\":[\"RootElement\"],\"properties\":[{\"name\":\"correlationPropertyRetrievalExpression\",\"type\":\"CorrelationPropertyRetrievalExpression\",\"isMany\":true},{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"type\",\"type\":\"ItemDefinition\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"Error\",\"superClass\":[\"RootElement\"],\"properties\":[{\"name\":\"structureRef\",\"type\":\"ItemDefinition\",\"isAttr\":true,\"isReference\":true},{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"errorCode\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"CorrelationKey\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"correlationPropertyRef\",\"type\":\"CorrelationProperty\",\"isMany\":true,\"isReference\":true},{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"Expression\",\"superClass\":[\"BaseElement\"],\"isAbstract\":false,\"properties\":[{\"name\":\"body\",\"type\":\"String\",\"isBody\":true}]},{\"name\":\"FormalExpression\",\"superClass\":[\"Expression\"],\"properties\":[{\"name\":\"language\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"evaluatesToTypeRef\",\"type\":\"ItemDefinition\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"Message\",\"superClass\":[\"RootElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"itemRef\",\"type\":\"ItemDefinition\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"ItemDefinition\",\"superClass\":[\"RootElement\"],\"properties\":[{\"name\":\"itemKind\",\"type\":\"ItemKind\",\"isAttr\":true},{\"name\":\"structureRef\",\"type\":\"String\",\"isAttr\":true},{\"name\":\"isCollection\",\"default\":false,\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"import\",\"type\":\"Import\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"FlowElement\",\"isAbstract\":true,\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"auditing\",\"type\":\"Auditing\"},{\"name\":\"monitoring\",\"type\":\"Monitoring\"},{\"name\":\"categoryValueRef\",\"type\":\"CategoryValue\",\"isMany\":true,\"isReference\":true}]},{\"name\":\"SequenceFlow\",\"superClass\":[\"FlowElement\"],\"properties\":[{\"name\":\"isImmediate\",\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"conditionExpression\",\"type\":\"Expression\",\"xml\":{\"serialize\":\"xsi:type\"}},{\"name\":\"sourceRef\",\"type\":\"FlowNode\",\"isAttr\":true,\"isReference\":true},{\"name\":\"targetRef\",\"type\":\"FlowNode\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"FlowElementsContainer\",\"isAbstract\":true,\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"laneSets\",\"type\":\"LaneSet\",\"isMany\":true},{\"name\":\"flowElements\",\"type\":\"FlowElement\",\"isMany\":true}]},{\"name\":\"CallableElement\",\"isAbstract\":true,\"superClass\":[\"RootElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"ioSpecification\",\"type\":\"InputOutputSpecification\",\"xml\":{\"serialize\":\"property\"}},{\"name\":\"supportedInterfaceRef\",\"type\":\"Interface\",\"isMany\":true,\"isReference\":true},{\"name\":\"ioBinding\",\"type\":\"InputOutputBinding\",\"isMany\":true,\"xml\":{\"serialize\":\"property\"}}]},{\"name\":\"FlowNode\",\"isAbstract\":true,\"superClass\":[\"FlowElement\"],\"properties\":[{\"name\":\"incoming\",\"type\":\"SequenceFlow\",\"isMany\":true,\"isReference\":true},{\"name\":\"outgoing\",\"type\":\"SequenceFlow\",\"isMany\":true,\"isReference\":true},{\"name\":\"lanes\",\"type\":\"Lane\",\"isVirtual\":true,\"isMany\":true,\"isReference\":true}]},{\"name\":\"CorrelationPropertyRetrievalExpression\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"messagePath\",\"type\":\"FormalExpression\"},{\"name\":\"messageRef\",\"type\":\"Message\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"CorrelationPropertyBinding\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"dataPath\",\"type\":\"FormalExpression\"},{\"name\":\"correlationPropertyRef\",\"type\":\"CorrelationProperty\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"Resource\",\"superClass\":[\"RootElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"resourceParameters\",\"type\":\"ResourceParameter\",\"isMany\":true}]},{\"name\":\"ResourceParameter\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"isRequired\",\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"type\",\"type\":\"ItemDefinition\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"CorrelationSubscription\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"correlationKeyRef\",\"type\":\"CorrelationKey\",\"isAttr\":true,\"isReference\":true},{\"name\":\"correlationPropertyBinding\",\"type\":\"CorrelationPropertyBinding\",\"isMany\":true}]},{\"name\":\"MessageFlow\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"sourceRef\",\"type\":\"InteractionNode\",\"isAttr\":true,\"isReference\":true},{\"name\":\"targetRef\",\"type\":\"InteractionNode\",\"isAttr\":true,\"isReference\":true},{\"name\":\"messageRef\",\"type\":\"Message\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"MessageFlowAssociation\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"innerMessageFlowRef\",\"type\":\"MessageFlow\",\"isAttr\":true,\"isReference\":true},{\"name\":\"outerMessageFlowRef\",\"type\":\"MessageFlow\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"InteractionNode\",\"isAbstract\":true,\"properties\":[{\"name\":\"incomingConversationLinks\",\"type\":\"ConversationLink\",\"isVirtual\":true,\"isMany\":true,\"isReference\":true},{\"name\":\"outgoingConversationLinks\",\"type\":\"ConversationLink\",\"isVirtual\":true,\"isMany\":true,\"isReference\":true}]},{\"name\":\"Participant\",\"superClass\":[\"InteractionNode\",\"BaseElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"interfaceRef\",\"type\":\"Interface\",\"isMany\":true,\"isReference\":true},{\"name\":\"participantMultiplicity\",\"type\":\"ParticipantMultiplicity\"},{\"name\":\"endPointRefs\",\"type\":\"EndPoint\",\"isMany\":true,\"isReference\":true},{\"name\":\"processRef\",\"type\":\"Process\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"ParticipantAssociation\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"innerParticipantRef\",\"type\":\"Participant\",\"isAttr\":true,\"isReference\":true},{\"name\":\"outerParticipantRef\",\"type\":\"Participant\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"ParticipantMultiplicity\",\"properties\":[{\"name\":\"minimum\",\"default\":0,\"isAttr\":true,\"type\":\"Integer\"},{\"name\":\"maximum\",\"default\":1,\"isAttr\":true,\"type\":\"Integer\"}],\"superClass\":[\"BaseElement\"]},{\"name\":\"Collaboration\",\"superClass\":[\"RootElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"isClosed\",\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"participants\",\"type\":\"Participant\",\"isMany\":true},{\"name\":\"messageFlows\",\"type\":\"MessageFlow\",\"isMany\":true},{\"name\":\"artifacts\",\"type\":\"Artifact\",\"isMany\":true},{\"name\":\"conversations\",\"type\":\"ConversationNode\",\"isMany\":true},{\"name\":\"conversationAssociations\",\"type\":\"ConversationAssociation\"},{\"name\":\"participantAssociations\",\"type\":\"ParticipantAssociation\",\"isMany\":true},{\"name\":\"messageFlowAssociations\",\"type\":\"MessageFlowAssociation\",\"isMany\":true},{\"name\":\"correlationKeys\",\"type\":\"CorrelationKey\",\"isMany\":true},{\"name\":\"choreographyRef\",\"type\":\"Choreography\",\"isMany\":true,\"isReference\":true},{\"name\":\"conversationLinks\",\"type\":\"ConversationLink\",\"isMany\":true}]},{\"name\":\"ChoreographyActivity\",\"isAbstract\":true,\"superClass\":[\"FlowNode\"],\"properties\":[{\"name\":\"participantRefs\",\"type\":\"Participant\",\"isMany\":true,\"isReference\":true},{\"name\":\"initiatingParticipantRef\",\"type\":\"Participant\",\"isAttr\":true,\"isReference\":true},{\"name\":\"correlationKeys\",\"type\":\"CorrelationKey\",\"isMany\":true},{\"name\":\"loopType\",\"type\":\"ChoreographyLoopType\",\"default\":\"None\",\"isAttr\":true}]},{\"name\":\"CallChoreography\",\"superClass\":[\"ChoreographyActivity\"],\"properties\":[{\"name\":\"calledChoreographyRef\",\"type\":\"Choreography\",\"isAttr\":true,\"isReference\":true},{\"name\":\"participantAssociations\",\"type\":\"ParticipantAssociation\",\"isMany\":true}]},{\"name\":\"SubChoreography\",\"superClass\":[\"ChoreographyActivity\",\"FlowElementsContainer\"],\"properties\":[{\"name\":\"artifacts\",\"type\":\"Artifact\",\"isMany\":true}]},{\"name\":\"ChoreographyTask\",\"superClass\":[\"ChoreographyActivity\"],\"properties\":[{\"name\":\"messageFlowRef\",\"type\":\"MessageFlow\",\"isMany\":true,\"isReference\":true}]},{\"name\":\"Choreography\",\"superClass\":[\"FlowElementsContainer\",\"Collaboration\"]},{\"name\":\"GlobalChoreographyTask\",\"superClass\":[\"Choreography\"],\"properties\":[{\"name\":\"initiatingParticipantRef\",\"type\":\"Participant\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"TextAnnotation\",\"superClass\":[\"Artifact\"],\"properties\":[{\"name\":\"text\",\"type\":\"String\"},{\"name\":\"textFormat\",\"default\":\"text/plain\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"Group\",\"superClass\":[\"Artifact\"],\"properties\":[{\"name\":\"categoryValueRef\",\"type\":\"CategoryValue\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"Association\",\"superClass\":[\"Artifact\"],\"properties\":[{\"name\":\"associationDirection\",\"type\":\"AssociationDirection\",\"isAttr\":true},{\"name\":\"sourceRef\",\"type\":\"BaseElement\",\"isAttr\":true,\"isReference\":true},{\"name\":\"targetRef\",\"type\":\"BaseElement\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"Category\",\"superClass\":[\"RootElement\"],\"properties\":[{\"name\":\"categoryValue\",\"type\":\"CategoryValue\",\"isMany\":true},{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"Artifact\",\"isAbstract\":true,\"superClass\":[\"BaseElement\"]},{\"name\":\"CategoryValue\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"categorizedFlowElements\",\"type\":\"FlowElement\",\"isVirtual\":true,\"isMany\":true,\"isReference\":true},{\"name\":\"value\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"Activity\",\"isAbstract\":true,\"superClass\":[\"FlowNode\"],\"properties\":[{\"name\":\"isForCompensation\",\"default\":false,\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"default\",\"type\":\"SequenceFlow\",\"isAttr\":true,\"isReference\":true},{\"name\":\"ioSpecification\",\"type\":\"InputOutputSpecification\",\"xml\":{\"serialize\":\"property\"}},{\"name\":\"boundaryEventRefs\",\"type\":\"BoundaryEvent\",\"isMany\":true,\"isReference\":true},{\"name\":\"properties\",\"type\":\"Property\",\"isMany\":true},{\"name\":\"dataInputAssociations\",\"type\":\"DataInputAssociation\",\"isMany\":true},{\"name\":\"dataOutputAssociations\",\"type\":\"DataOutputAssociation\",\"isMany\":true},{\"name\":\"startQuantity\",\"default\":1,\"isAttr\":true,\"type\":\"Integer\"},{\"name\":\"resources\",\"type\":\"ResourceRole\",\"isMany\":true},{\"name\":\"completionQuantity\",\"default\":1,\"isAttr\":true,\"type\":\"Integer\"},{\"name\":\"loopCharacteristics\",\"type\":\"LoopCharacteristics\"}]},{\"name\":\"ServiceTask\",\"superClass\":[\"Task\"],\"properties\":[{\"name\":\"implementation\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"operationRef\",\"type\":\"Operation\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"SubProcess\",\"superClass\":[\"Activity\",\"FlowElementsContainer\",\"InteractionNode\"],\"properties\":[{\"name\":\"triggeredByEvent\",\"default\":false,\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"artifacts\",\"type\":\"Artifact\",\"isMany\":true}]},{\"name\":\"LoopCharacteristics\",\"isAbstract\":true,\"superClass\":[\"BaseElement\"]},{\"name\":\"MultiInstanceLoopCharacteristics\",\"superClass\":[\"LoopCharacteristics\"],\"properties\":[{\"name\":\"isSequential\",\"default\":false,\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"behavior\",\"type\":\"MultiInstanceBehavior\",\"default\":\"All\",\"isAttr\":true},{\"name\":\"loopCardinality\",\"type\":\"Expression\",\"xml\":{\"serialize\":\"xsi:type\"}},{\"name\":\"loopDataInputRef\",\"type\":\"ItemAwareElement\",\"isReference\":true},{\"name\":\"loopDataOutputRef\",\"type\":\"ItemAwareElement\",\"isReference\":true},{\"name\":\"inputDataItem\",\"type\":\"DataInput\",\"xml\":{\"serialize\":\"property\"}},{\"name\":\"outputDataItem\",\"type\":\"DataOutput\",\"xml\":{\"serialize\":\"property\"}},{\"name\":\"complexBehaviorDefinition\",\"type\":\"ComplexBehaviorDefinition\",\"isMany\":true},{\"name\":\"completionCondition\",\"type\":\"Expression\",\"xml\":{\"serialize\":\"xsi:type\"}},{\"name\":\"oneBehaviorEventRef\",\"type\":\"EventDefinition\",\"isAttr\":true,\"isReference\":true},{\"name\":\"noneBehaviorEventRef\",\"type\":\"EventDefinition\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"StandardLoopCharacteristics\",\"superClass\":[\"LoopCharacteristics\"],\"properties\":[{\"name\":\"testBefore\",\"default\":false,\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"loopCondition\",\"type\":\"Expression\",\"xml\":{\"serialize\":\"xsi:type\"}},{\"name\":\"loopMaximum\",\"type\":\"Integer\",\"isAttr\":true}]},{\"name\":\"CallActivity\",\"superClass\":[\"Activity\"],\"properties\":[{\"name\":\"calledElement\",\"type\":\"String\",\"isAttr\":true}]},{\"name\":\"Task\",\"superClass\":[\"Activity\",\"InteractionNode\"]},{\"name\":\"SendTask\",\"superClass\":[\"Task\"],\"properties\":[{\"name\":\"implementation\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"operationRef\",\"type\":\"Operation\",\"isAttr\":true,\"isReference\":true},{\"name\":\"messageRef\",\"type\":\"Message\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"ReceiveTask\",\"superClass\":[\"Task\"],\"properties\":[{\"name\":\"implementation\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"instantiate\",\"default\":false,\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"operationRef\",\"type\":\"Operation\",\"isAttr\":true,\"isReference\":true},{\"name\":\"messageRef\",\"type\":\"Message\",\"isAttr\":true,\"isReference\":true}]},{\"name\":\"ScriptTask\",\"superClass\":[\"Task\"],\"properties\":[{\"name\":\"scriptFormat\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"script\",\"type\":\"String\"}]},{\"name\":\"BusinessRuleTask\",\"superClass\":[\"Task\"],\"properties\":[{\"name\":\"implementation\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"AdHocSubProcess\",\"superClass\":[\"SubProcess\"],\"properties\":[{\"name\":\"completionCondition\",\"type\":\"Expression\",\"xml\":{\"serialize\":\"xsi:type\"}},{\"name\":\"ordering\",\"type\":\"AdHocOrdering\",\"isAttr\":true},{\"name\":\"cancelRemainingInstances\",\"default\":true,\"isAttr\":true,\"type\":\"Boolean\"}]},{\"name\":\"Transaction\",\"superClass\":[\"SubProcess\"],\"properties\":[{\"name\":\"protocol\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"method\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"GlobalScriptTask\",\"superClass\":[\"GlobalTask\"],\"properties\":[{\"name\":\"scriptLanguage\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"script\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"GlobalBusinessRuleTask\",\"superClass\":[\"GlobalTask\"],\"properties\":[{\"name\":\"implementation\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"ComplexBehaviorDefinition\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"condition\",\"type\":\"FormalExpression\"},{\"name\":\"event\",\"type\":\"ImplicitThrowEvent\"}]},{\"name\":\"ResourceRole\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"resourceRef\",\"type\":\"Resource\",\"isReference\":true},{\"name\":\"resourceParameterBindings\",\"type\":\"ResourceParameterBinding\",\"isMany\":true},{\"name\":\"resourceAssignmentExpression\",\"type\":\"ResourceAssignmentExpression\"},{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"ResourceParameterBinding\",\"properties\":[{\"name\":\"expression\",\"type\":\"Expression\",\"xml\":{\"serialize\":\"xsi:type\"}},{\"name\":\"parameterRef\",\"type\":\"ResourceParameter\",\"isAttr\":true,\"isReference\":true}],\"superClass\":[\"BaseElement\"]},{\"name\":\"ResourceAssignmentExpression\",\"properties\":[{\"name\":\"expression\",\"type\":\"Expression\",\"xml\":{\"serialize\":\"xsi:type\"}}],\"superClass\":[\"BaseElement\"]},{\"name\":\"Import\",\"properties\":[{\"name\":\"importType\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"location\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"namespace\",\"isAttr\":true,\"type\":\"String\"}]},{\"name\":\"Definitions\",\"superClass\":[\"BaseElement\"],\"properties\":[{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"targetNamespace\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"expressionLanguage\",\"default\":\"http://www.w3.org/1999/XPath\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"typeLanguage\",\"default\":\"http://www.w3.org/2001/XMLSchema\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"imports\",\"type\":\"Import\",\"isMany\":true},{\"name\":\"extensions\",\"type\":\"Extension\",\"isMany\":true},{\"name\":\"rootElements\",\"type\":\"RootElement\",\"isMany\":true},{\"name\":\"diagrams\",\"isMany\":true,\"type\":\"bpmndi:BPMNDiagram\"},{\"name\":\"exporter\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"relationships\",\"type\":\"Relationship\",\"isMany\":true},{\"name\":\"exporterVersion\",\"isAttr\":true,\"type\":\"String\"}]}],\"enumerations\":[{\"name\":\"ProcessType\",\"literalValues\":[{\"name\":\"None\"},{\"name\":\"Public\"},{\"name\":\"Private\"}]},{\"name\":\"GatewayDirection\",\"literalValues\":[{\"name\":\"Unspecified\"},{\"name\":\"Converging\"},{\"name\":\"Diverging\"},{\"name\":\"Mixed\"}]},{\"name\":\"EventBasedGatewayType\",\"literalValues\":[{\"name\":\"Parallel\"},{\"name\":\"Exclusive\"}]},{\"name\":\"RelationshipDirection\",\"literalValues\":[{\"name\":\"None\"},{\"name\":\"Forward\"},{\"name\":\"Backward\"},{\"name\":\"Both\"}]},{\"name\":\"ItemKind\",\"literalValues\":[{\"name\":\"Physical\"},{\"name\":\"Information\"}]},{\"name\":\"ChoreographyLoopType\",\"literalValues\":[{\"name\":\"None\"},{\"name\":\"Standard\"},{\"name\":\"MultiInstanceSequential\"},{\"name\":\"MultiInstanceParallel\"}]},{\"name\":\"AssociationDirection\",\"literalValues\":[{\"name\":\"None\"},{\"name\":\"One\"},{\"name\":\"Both\"}]},{\"name\":\"MultiInstanceBehavior\",\"literalValues\":[{\"name\":\"None\"},{\"name\":\"One\"},{\"name\":\"All\"},{\"name\":\"Complex\"}]},{\"name\":\"AdHocOrdering\",\"literalValues\":[{\"name\":\"Parallel\"},{\"name\":\"Sequential\"}]}],\"prefix\":\"bpmn\",\"xml\":{\"tagAlias\":\"lowerCase\",\"typePrefix\":\"t\"}}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDIuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmVhdHVyZXMveG1sL3htbG5zL2JwbW4uanNvbj9kOTk4Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0ge1wibmFtZVwiOlwiQlBNTjIwXCIsXCJ1cmlcIjpcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0JQTU4vMjAxMDA1MjQvTU9ERUxcIixcImFzc29jaWF0aW9uc1wiOltdLFwidHlwZXNcIjpbe1wibmFtZVwiOlwiSW50ZXJmYWNlXCIsXCJzdXBlckNsYXNzXCI6W1wiUm9vdEVsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcIm5hbWVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwib3BlcmF0aW9uc1wiLFwidHlwZVwiOlwiT3BlcmF0aW9uXCIsXCJpc01hbnlcIjp0cnVlfSx7XCJuYW1lXCI6XCJpbXBsZW1lbnRhdGlvblJlZlwiLFwidHlwZVwiOlwiU3RyaW5nXCIsXCJpc0F0dHJcIjp0cnVlfV19LHtcIm5hbWVcIjpcIk9wZXJhdGlvblwiLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJuYW1lXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9LHtcIm5hbWVcIjpcImluTWVzc2FnZVJlZlwiLFwidHlwZVwiOlwiTWVzc2FnZVwiLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJvdXRNZXNzYWdlUmVmXCIsXCJ0eXBlXCI6XCJNZXNzYWdlXCIsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcImVycm9yUmVmXCIsXCJ0eXBlXCI6XCJFcnJvclwiLFwiaXNNYW55XCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwiaW1wbGVtZW50YXRpb25SZWZcIixcInR5cGVcIjpcIlN0cmluZ1wiLFwiaXNBdHRyXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJFbmRQb2ludFwiLFwic3VwZXJDbGFzc1wiOltcIlJvb3RFbGVtZW50XCJdfSx7XCJuYW1lXCI6XCJBdWRpdGluZ1wiLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdfSx7XCJuYW1lXCI6XCJHbG9iYWxUYXNrXCIsXCJzdXBlckNsYXNzXCI6W1wiQ2FsbGFibGVFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJyZXNvdXJjZXNcIixcInR5cGVcIjpcIlJlc291cmNlUm9sZVwiLFwiaXNNYW55XCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJNb25pdG9yaW5nXCIsXCJzdXBlckNsYXNzXCI6W1wiQmFzZUVsZW1lbnRcIl19LHtcIm5hbWVcIjpcIlBlcmZvcm1lclwiLFwic3VwZXJDbGFzc1wiOltcIlJlc291cmNlUm9sZVwiXX0se1wibmFtZVwiOlwiUHJvY2Vzc1wiLFwic3VwZXJDbGFzc1wiOltcIkZsb3dFbGVtZW50c0NvbnRhaW5lclwiLFwiQ2FsbGFibGVFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJwcm9jZXNzVHlwZVwiLFwidHlwZVwiOlwiUHJvY2Vzc1R5cGVcIixcImlzQXR0clwiOnRydWV9LHtcIm5hbWVcIjpcImlzQ2xvc2VkXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiQm9vbGVhblwifSx7XCJuYW1lXCI6XCJhdWRpdGluZ1wiLFwidHlwZVwiOlwiQXVkaXRpbmdcIn0se1wibmFtZVwiOlwibW9uaXRvcmluZ1wiLFwidHlwZVwiOlwiTW9uaXRvcmluZ1wifSx7XCJuYW1lXCI6XCJwcm9wZXJ0aWVzXCIsXCJ0eXBlXCI6XCJQcm9wZXJ0eVwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwibGFuZVNldHNcIixcInR5cGVcIjpcIkxhbmVTZXRcIixcImlzTWFueVwiOnRydWUsXCJyZXBsYWNlc1wiOlwiRmxvd0VsZW1lbnRzQ29udGFpbmVyI2xhbmVTZXRzXCJ9LHtcIm5hbWVcIjpcImZsb3dFbGVtZW50c1wiLFwidHlwZVwiOlwiRmxvd0VsZW1lbnRcIixcImlzTWFueVwiOnRydWUsXCJyZXBsYWNlc1wiOlwiRmxvd0VsZW1lbnRzQ29udGFpbmVyI2Zsb3dFbGVtZW50c1wifSx7XCJuYW1lXCI6XCJhcnRpZmFjdHNcIixcInR5cGVcIjpcIkFydGlmYWN0XCIsXCJpc01hbnlcIjp0cnVlfSx7XCJuYW1lXCI6XCJyZXNvdXJjZXNcIixcInR5cGVcIjpcIlJlc291cmNlUm9sZVwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwiY29ycmVsYXRpb25TdWJzY3JpcHRpb25zXCIsXCJ0eXBlXCI6XCJDb3JyZWxhdGlvblN1YnNjcmlwdGlvblwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwic3VwcG9ydHNcIixcInR5cGVcIjpcIlByb2Nlc3NcIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcImRlZmluaXRpb25hbENvbGxhYm9yYXRpb25SZWZcIixcInR5cGVcIjpcIkNvbGxhYm9yYXRpb25cIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcImlzRXhlY3V0YWJsZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIkJvb2xlYW5cIn1dfSx7XCJuYW1lXCI6XCJMYW5lU2V0XCIsXCJzdXBlckNsYXNzXCI6W1wiQmFzZUVsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImxhbmVzXCIsXCJ0eXBlXCI6XCJMYW5lXCIsXCJpc01hbnlcIjp0cnVlfSx7XCJuYW1lXCI6XCJuYW1lXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9XX0se1wibmFtZVwiOlwiTGFuZVwiLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJuYW1lXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9LHtcIm5hbWVcIjpcInBhcnRpdGlvbkVsZW1lbnRSZWZcIixcInR5cGVcIjpcIkJhc2VFbGVtZW50XCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJwYXJ0aXRpb25FbGVtZW50XCIsXCJ0eXBlXCI6XCJCYXNlRWxlbWVudFwifSx7XCJuYW1lXCI6XCJmbG93Tm9kZVJlZlwiLFwidHlwZVwiOlwiRmxvd05vZGVcIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcImNoaWxkTGFuZVNldFwiLFwidHlwZVwiOlwiTGFuZVNldFwiLFwieG1sXCI6e1wic2VyaWFsaXplXCI6XCJ4c2k6dHlwZVwifX1dfSx7XCJuYW1lXCI6XCJHbG9iYWxNYW51YWxUYXNrXCIsXCJzdXBlckNsYXNzXCI6W1wiR2xvYmFsVGFza1wiXX0se1wibmFtZVwiOlwiTWFudWFsVGFza1wiLFwic3VwZXJDbGFzc1wiOltcIlRhc2tcIl19LHtcIm5hbWVcIjpcIlVzZXJUYXNrXCIsXCJzdXBlckNsYXNzXCI6W1wiVGFza1wiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwicmVuZGVyaW5nc1wiLFwidHlwZVwiOlwiUmVuZGVyaW5nXCIsXCJpc01hbnlcIjp0cnVlfSx7XCJuYW1lXCI6XCJpbXBsZW1lbnRhdGlvblwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifV19LHtcIm5hbWVcIjpcIlJlbmRlcmluZ1wiLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdfSx7XCJuYW1lXCI6XCJIdW1hblBlcmZvcm1lclwiLFwic3VwZXJDbGFzc1wiOltcIlBlcmZvcm1lclwiXX0se1wibmFtZVwiOlwiUG90ZW50aWFsT3duZXJcIixcInN1cGVyQ2xhc3NcIjpbXCJIdW1hblBlcmZvcm1lclwiXX0se1wibmFtZVwiOlwiR2xvYmFsVXNlclRhc2tcIixcInN1cGVyQ2xhc3NcIjpbXCJHbG9iYWxUYXNrXCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJpbXBsZW1lbnRhdGlvblwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifSx7XCJuYW1lXCI6XCJyZW5kZXJpbmdzXCIsXCJ0eXBlXCI6XCJSZW5kZXJpbmdcIixcImlzTWFueVwiOnRydWV9XX0se1wibmFtZVwiOlwiR2F0ZXdheVwiLFwiaXNBYnN0cmFjdFwiOnRydWUsXCJzdXBlckNsYXNzXCI6W1wiRmxvd05vZGVcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImdhdGV3YXlEaXJlY3Rpb25cIixcInR5cGVcIjpcIkdhdGV3YXlEaXJlY3Rpb25cIixcImRlZmF1bHRcIjpcIlVuc3BlY2lmaWVkXCIsXCJpc0F0dHJcIjp0cnVlfV19LHtcIm5hbWVcIjpcIkV2ZW50QmFzZWRHYXRld2F5XCIsXCJzdXBlckNsYXNzXCI6W1wiR2F0ZXdheVwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiaW5zdGFudGlhdGVcIixcImRlZmF1bHRcIjpmYWxzZSxcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJCb29sZWFuXCJ9LHtcIm5hbWVcIjpcImV2ZW50R2F0ZXdheVR5cGVcIixcInR5cGVcIjpcIkV2ZW50QmFzZWRHYXRld2F5VHlwZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcImRlZmF1bHRcIjpcIkV4Y2x1c2l2ZVwifV19LHtcIm5hbWVcIjpcIkNvbXBsZXhHYXRld2F5XCIsXCJzdXBlckNsYXNzXCI6W1wiR2F0ZXdheVwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiYWN0aXZhdGlvbkNvbmRpdGlvblwiLFwidHlwZVwiOlwiRXhwcmVzc2lvblwiLFwieG1sXCI6e1wic2VyaWFsaXplXCI6XCJ4c2k6dHlwZVwifX0se1wibmFtZVwiOlwiZGVmYXVsdFwiLFwidHlwZVwiOlwiU2VxdWVuY2VGbG93XCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfV19LHtcIm5hbWVcIjpcIkV4Y2x1c2l2ZUdhdGV3YXlcIixcInN1cGVyQ2xhc3NcIjpbXCJHYXRld2F5XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJkZWZhdWx0XCIsXCJ0eXBlXCI6XCJTZXF1ZW5jZUZsb3dcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiSW5jbHVzaXZlR2F0ZXdheVwiLFwic3VwZXJDbGFzc1wiOltcIkdhdGV3YXlcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImRlZmF1bHRcIixcInR5cGVcIjpcIlNlcXVlbmNlRmxvd1wiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJQYXJhbGxlbEdhdGV3YXlcIixcInN1cGVyQ2xhc3NcIjpbXCJHYXRld2F5XCJdfSx7XCJuYW1lXCI6XCJSb290RWxlbWVudFwiLFwiaXNBYnN0cmFjdFwiOnRydWUsXCJzdXBlckNsYXNzXCI6W1wiQmFzZUVsZW1lbnRcIl19LHtcIm5hbWVcIjpcIlJlbGF0aW9uc2hpcFwiLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJ0eXBlXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9LHtcIm5hbWVcIjpcImRpcmVjdGlvblwiLFwidHlwZVwiOlwiUmVsYXRpb25zaGlwRGlyZWN0aW9uXCIsXCJpc0F0dHJcIjp0cnVlfSx7XCJuYW1lXCI6XCJzb3VyY2VcIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWUsXCJ0eXBlXCI6XCJFbGVtZW50XCJ9LHtcIm5hbWVcIjpcInRhcmdldFwiLFwiaXNNYW55XCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZSxcInR5cGVcIjpcIkVsZW1lbnRcIn1dfSx7XCJuYW1lXCI6XCJCYXNlRWxlbWVudFwiLFwiaXNBYnN0cmFjdFwiOnRydWUsXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImlkXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCIsXCJpc0lkXCI6dHJ1ZX0se1wibmFtZVwiOlwiZG9jdW1lbnRhdGlvblwiLFwidHlwZVwiOlwiRG9jdW1lbnRhdGlvblwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwiZXh0ZW5zaW9uRGVmaW5pdGlvbnNcIixcInR5cGVcIjpcIkV4dGVuc2lvbkRlZmluaXRpb25cIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcImV4dGVuc2lvbkVsZW1lbnRzXCIsXCJ0eXBlXCI6XCJFeHRlbnNpb25FbGVtZW50c1wifV19LHtcIm5hbWVcIjpcIkV4dGVuc2lvblwiLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJtdXN0VW5kZXJzdGFuZFwiLFwiZGVmYXVsdFwiOmZhbHNlLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIkJvb2xlYW5cIn0se1wibmFtZVwiOlwiZGVmaW5pdGlvblwiLFwidHlwZVwiOlwiRXh0ZW5zaW9uRGVmaW5pdGlvblwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJFeHRlbnNpb25EZWZpbml0aW9uXCIsXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcIm5hbWVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwiZXh0ZW5zaW9uQXR0cmlidXRlRGVmaW5pdGlvbnNcIixcInR5cGVcIjpcIkV4dGVuc2lvbkF0dHJpYnV0ZURlZmluaXRpb25cIixcImlzTWFueVwiOnRydWV9XX0se1wibmFtZVwiOlwiRXh0ZW5zaW9uQXR0cmlidXRlRGVmaW5pdGlvblwiLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJuYW1lXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9LHtcIm5hbWVcIjpcInR5cGVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwiaXNSZWZlcmVuY2VcIixcImRlZmF1bHRcIjpmYWxzZSxcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJCb29sZWFuXCJ9LHtcIm5hbWVcIjpcImV4dGVuc2lvbkRlZmluaXRpb25cIixcInR5cGVcIjpcIkV4dGVuc2lvbkRlZmluaXRpb25cIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiRXh0ZW5zaW9uRWxlbWVudHNcIixcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwidmFsdWVSZWZcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWUsXCJ0eXBlXCI6XCJFbGVtZW50XCJ9LHtcIm5hbWVcIjpcInZhbHVlc1wiLFwidHlwZVwiOlwiRWxlbWVudFwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwiZXh0ZW5zaW9uQXR0cmlidXRlRGVmaW5pdGlvblwiLFwidHlwZVwiOlwiRXh0ZW5zaW9uQXR0cmlidXRlRGVmaW5pdGlvblwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJEb2N1bWVudGF0aW9uXCIsXCJzdXBlckNsYXNzXCI6W1wiQmFzZUVsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcInRleHRcIixcInR5cGVcIjpcIlN0cmluZ1wiLFwiaXNCb2R5XCI6dHJ1ZX0se1wibmFtZVwiOlwidGV4dEZvcm1hdFwiLFwiZGVmYXVsdFwiOlwidGV4dC9wbGFpblwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifV19LHtcIm5hbWVcIjpcIkV2ZW50XCIsXCJpc0Fic3RyYWN0XCI6dHJ1ZSxcInN1cGVyQ2xhc3NcIjpbXCJGbG93Tm9kZVwiLFwiSW50ZXJhY3Rpb25Ob2RlXCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJwcm9wZXJ0aWVzXCIsXCJ0eXBlXCI6XCJQcm9wZXJ0eVwiLFwiaXNNYW55XCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJJbnRlcm1lZGlhdGVDYXRjaEV2ZW50XCIsXCJzdXBlckNsYXNzXCI6W1wiQ2F0Y2hFdmVudFwiXX0se1wibmFtZVwiOlwiSW50ZXJtZWRpYXRlVGhyb3dFdmVudFwiLFwic3VwZXJDbGFzc1wiOltcIlRocm93RXZlbnRcIl19LHtcIm5hbWVcIjpcIkVuZEV2ZW50XCIsXCJzdXBlckNsYXNzXCI6W1wiVGhyb3dFdmVudFwiXX0se1wibmFtZVwiOlwiU3RhcnRFdmVudFwiLFwic3VwZXJDbGFzc1wiOltcIkNhdGNoRXZlbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImlzSW50ZXJydXB0aW5nXCIsXCJkZWZhdWx0XCI6dHJ1ZSxcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJCb29sZWFuXCJ9XX0se1wibmFtZVwiOlwiVGhyb3dFdmVudFwiLFwiaXNBYnN0cmFjdFwiOnRydWUsXCJzdXBlckNsYXNzXCI6W1wiRXZlbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImRhdGFJbnB1dHNcIixcInR5cGVcIjpcIkRhdGFJbnB1dFwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwiZGF0YUlucHV0QXNzb2NpYXRpb25zXCIsXCJ0eXBlXCI6XCJEYXRhSW5wdXRBc3NvY2lhdGlvblwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwiaW5wdXRTZXRcIixcInR5cGVcIjpcIklucHV0U2V0XCJ9LHtcIm5hbWVcIjpcImV2ZW50RGVmaW5pdGlvbnNcIixcInR5cGVcIjpcIkV2ZW50RGVmaW5pdGlvblwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwiZXZlbnREZWZpbml0aW9uUmVmXCIsXCJ0eXBlXCI6XCJFdmVudERlZmluaXRpb25cIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiQ2F0Y2hFdmVudFwiLFwiaXNBYnN0cmFjdFwiOnRydWUsXCJzdXBlckNsYXNzXCI6W1wiRXZlbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcInBhcmFsbGVsTXVsdGlwbGVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJCb29sZWFuXCIsXCJkZWZhdWx0XCI6ZmFsc2V9LHtcIm5hbWVcIjpcImRhdGFPdXRwdXRzXCIsXCJ0eXBlXCI6XCJEYXRhT3V0cHV0XCIsXCJpc01hbnlcIjp0cnVlfSx7XCJuYW1lXCI6XCJkYXRhT3V0cHV0QXNzb2NpYXRpb25zXCIsXCJ0eXBlXCI6XCJEYXRhT3V0cHV0QXNzb2NpYXRpb25cIixcImlzTWFueVwiOnRydWV9LHtcIm5hbWVcIjpcIm91dHB1dFNldFwiLFwidHlwZVwiOlwiT3V0cHV0U2V0XCJ9LHtcIm5hbWVcIjpcImV2ZW50RGVmaW5pdGlvbnNcIixcInR5cGVcIjpcIkV2ZW50RGVmaW5pdGlvblwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwiZXZlbnREZWZpbml0aW9uUmVmXCIsXCJ0eXBlXCI6XCJFdmVudERlZmluaXRpb25cIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiQm91bmRhcnlFdmVudFwiLFwic3VwZXJDbGFzc1wiOltcIkNhdGNoRXZlbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImNhbmNlbEFjdGl2aXR5XCIsXCJkZWZhdWx0XCI6dHJ1ZSxcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJCb29sZWFuXCJ9LHtcIm5hbWVcIjpcImF0dGFjaGVkVG9SZWZcIixcInR5cGVcIjpcIkFjdGl2aXR5XCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfV19LHtcIm5hbWVcIjpcIkV2ZW50RGVmaW5pdGlvblwiLFwiaXNBYnN0cmFjdFwiOnRydWUsXCJzdXBlckNsYXNzXCI6W1wiUm9vdEVsZW1lbnRcIl19LHtcIm5hbWVcIjpcIkNhbmNlbEV2ZW50RGVmaW5pdGlvblwiLFwic3VwZXJDbGFzc1wiOltcIkV2ZW50RGVmaW5pdGlvblwiXX0se1wibmFtZVwiOlwiRXJyb3JFdmVudERlZmluaXRpb25cIixcInN1cGVyQ2xhc3NcIjpbXCJFdmVudERlZmluaXRpb25cIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImVycm9yUmVmXCIsXCJ0eXBlXCI6XCJFcnJvclwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJUZXJtaW5hdGVFbmRFdmVudFwiLFwic3VwZXJDbGFzc1wiOltcIkV2ZW50RGVmaW5pdGlvblwiXX0se1wibmFtZVwiOlwiRXNjYWxhdGlvbkV2ZW50RGVmaW5pdGlvblwiLFwic3VwZXJDbGFzc1wiOltcIkV2ZW50RGVmaW5pdGlvblwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiZXNjYWxhdGlvblJlZlwiLFwidHlwZVwiOlwiRXNjYWxhdGlvblwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJFc2NhbGF0aW9uXCIsXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcInN0cnVjdHVyZVJlZlwiLFwidHlwZVwiOlwiSXRlbURlZmluaXRpb25cIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcIm5hbWVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwiZXNjYWxhdGlvbkNvZGVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn1dLFwic3VwZXJDbGFzc1wiOltcIlJvb3RFbGVtZW50XCJdfSx7XCJuYW1lXCI6XCJDb21wZW5zYXRlRXZlbnREZWZpbml0aW9uXCIsXCJzdXBlckNsYXNzXCI6W1wiRXZlbnREZWZpbml0aW9uXCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJ3YWl0Rm9yQ29tcGxldGlvblwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIkJvb2xlYW5cIixcImRlZmF1bHRcIjp0cnVlfSx7XCJuYW1lXCI6XCJhY3Rpdml0eVJlZlwiLFwidHlwZVwiOlwiQWN0aXZpdHlcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiVGltZXJFdmVudERlZmluaXRpb25cIixcInN1cGVyQ2xhc3NcIjpbXCJFdmVudERlZmluaXRpb25cIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcInRpbWVEYXRlXCIsXCJ0eXBlXCI6XCJFeHByZXNzaW9uXCIsXCJ4bWxcIjp7XCJzZXJpYWxpemVcIjpcInhzaTp0eXBlXCJ9fSx7XCJuYW1lXCI6XCJ0aW1lQ3ljbGVcIixcInR5cGVcIjpcIkV4cHJlc3Npb25cIixcInhtbFwiOntcInNlcmlhbGl6ZVwiOlwieHNpOnR5cGVcIn19LHtcIm5hbWVcIjpcInRpbWVEdXJhdGlvblwiLFwidHlwZVwiOlwiRXhwcmVzc2lvblwiLFwieG1sXCI6e1wic2VyaWFsaXplXCI6XCJ4c2k6dHlwZVwifX1dfSx7XCJuYW1lXCI6XCJMaW5rRXZlbnREZWZpbml0aW9uXCIsXCJzdXBlckNsYXNzXCI6W1wiRXZlbnREZWZpbml0aW9uXCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJuYW1lXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9LHtcIm5hbWVcIjpcInRhcmdldFwiLFwidHlwZVwiOlwiTGlua0V2ZW50RGVmaW5pdGlvblwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwic291cmNlXCIsXCJ0eXBlXCI6XCJMaW5rRXZlbnREZWZpbml0aW9uXCIsXCJpc01hbnlcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfV19LHtcIm5hbWVcIjpcIk1lc3NhZ2VFdmVudERlZmluaXRpb25cIixcInN1cGVyQ2xhc3NcIjpbXCJFdmVudERlZmluaXRpb25cIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcIm1lc3NhZ2VSZWZcIixcInR5cGVcIjpcIk1lc3NhZ2VcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcIm9wZXJhdGlvblJlZlwiLFwidHlwZVwiOlwiT3BlcmF0aW9uXCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfV19LHtcIm5hbWVcIjpcIkNvbmRpdGlvbmFsRXZlbnREZWZpbml0aW9uXCIsXCJzdXBlckNsYXNzXCI6W1wiRXZlbnREZWZpbml0aW9uXCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJjb25kaXRpb25cIixcInR5cGVcIjpcIkV4cHJlc3Npb25cIixcInhtbFwiOntcInNlcmlhbGl6ZVwiOlwieHNpOnR5cGVcIn19XX0se1wibmFtZVwiOlwiU2lnbmFsRXZlbnREZWZpbml0aW9uXCIsXCJzdXBlckNsYXNzXCI6W1wiRXZlbnREZWZpbml0aW9uXCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJzaWduYWxSZWZcIixcInR5cGVcIjpcIlNpZ25hbFwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJTaWduYWxcIixcInN1cGVyQ2xhc3NcIjpbXCJSb290RWxlbWVudFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwic3RydWN0dXJlUmVmXCIsXCJ0eXBlXCI6XCJJdGVtRGVmaW5pdGlvblwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwibmFtZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifV19LHtcIm5hbWVcIjpcIkltcGxpY2l0VGhyb3dFdmVudFwiLFwic3VwZXJDbGFzc1wiOltcIlRocm93RXZlbnRcIl19LHtcIm5hbWVcIjpcIkRhdGFTdGF0ZVwiLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJuYW1lXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9XX0se1wibmFtZVwiOlwiSXRlbUF3YXJlRWxlbWVudFwiLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJpdGVtU3ViamVjdFJlZlwiLFwidHlwZVwiOlwiSXRlbURlZmluaXRpb25cIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcImRhdGFTdGF0ZVwiLFwidHlwZVwiOlwiRGF0YVN0YXRlXCJ9XX0se1wibmFtZVwiOlwiRGF0YUFzc29jaWF0aW9uXCIsXCJzdXBlckNsYXNzXCI6W1wiQmFzZUVsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImFzc2lnbm1lbnRcIixcInR5cGVcIjpcIkFzc2lnbm1lbnRcIixcImlzTWFueVwiOnRydWV9LHtcIm5hbWVcIjpcInNvdXJjZVJlZlwiLFwidHlwZVwiOlwiSXRlbUF3YXJlRWxlbWVudFwiLFwiaXNNYW55XCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwidGFyZ2V0UmVmXCIsXCJ0eXBlXCI6XCJJdGVtQXdhcmVFbGVtZW50XCIsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcInRyYW5zZm9ybWF0aW9uXCIsXCJ0eXBlXCI6XCJGb3JtYWxFeHByZXNzaW9uXCIsXCJ4bWxcIjp7XCJzZXJpYWxpemVcIjpcInByb3BlcnR5XCJ9fV19LHtcIm5hbWVcIjpcIkRhdGFJbnB1dFwiLFwic3VwZXJDbGFzc1wiOltcIkl0ZW1Bd2FyZUVsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcIm5hbWVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwiaXNDb2xsZWN0aW9uXCIsXCJkZWZhdWx0XCI6ZmFsc2UsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiQm9vbGVhblwifSx7XCJuYW1lXCI6XCJpbnB1dFNldFJlZlwiLFwidHlwZVwiOlwiSW5wdXRTZXRcIixcImlzVmlydHVhbFwiOnRydWUsXCJpc01hbnlcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJpbnB1dFNldFdpdGhPcHRpb25hbFwiLFwidHlwZVwiOlwiSW5wdXRTZXRcIixcImlzVmlydHVhbFwiOnRydWUsXCJpc01hbnlcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJpbnB1dFNldFdpdGhXaGlsZUV4ZWN1dGluZ1wiLFwidHlwZVwiOlwiSW5wdXRTZXRcIixcImlzVmlydHVhbFwiOnRydWUsXCJpc01hbnlcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfV19LHtcIm5hbWVcIjpcIkRhdGFPdXRwdXRcIixcInN1cGVyQ2xhc3NcIjpbXCJJdGVtQXdhcmVFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJuYW1lXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9LHtcIm5hbWVcIjpcImlzQ29sbGVjdGlvblwiLFwiZGVmYXVsdFwiOmZhbHNlLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIkJvb2xlYW5cIn0se1wibmFtZVwiOlwib3V0cHV0U2V0UmVmXCIsXCJ0eXBlXCI6XCJPdXRwdXRTZXRcIixcImlzVmlydHVhbFwiOnRydWUsXCJpc01hbnlcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJvdXRwdXRTZXRXaXRoT3B0aW9uYWxcIixcInR5cGVcIjpcIk91dHB1dFNldFwiLFwiaXNWaXJ0dWFsXCI6dHJ1ZSxcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcIm91dHB1dFNldFdpdGhXaGlsZUV4ZWN1dGluZ1wiLFwidHlwZVwiOlwiT3V0cHV0U2V0XCIsXCJpc1ZpcnR1YWxcIjp0cnVlLFwiaXNNYW55XCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJJbnB1dFNldFwiLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJuYW1lXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9LHtcIm5hbWVcIjpcImRhdGFJbnB1dFJlZnNcIixcInR5cGVcIjpcIkRhdGFJbnB1dFwiLFwiaXNNYW55XCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwib3B0aW9uYWxJbnB1dFJlZnNcIixcInR5cGVcIjpcIkRhdGFJbnB1dFwiLFwiaXNNYW55XCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwid2hpbGVFeGVjdXRpbmdJbnB1dFJlZnNcIixcInR5cGVcIjpcIkRhdGFJbnB1dFwiLFwiaXNNYW55XCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwib3V0cHV0U2V0UmVmc1wiLFwidHlwZVwiOlwiT3V0cHV0U2V0XCIsXCJpc01hbnlcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfV19LHtcIm5hbWVcIjpcIk91dHB1dFNldFwiLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJkYXRhT3V0cHV0UmVmc1wiLFwidHlwZVwiOlwiRGF0YU91dHB1dFwiLFwiaXNNYW55XCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwibmFtZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifSx7XCJuYW1lXCI6XCJpbnB1dFNldFJlZnNcIixcInR5cGVcIjpcIklucHV0U2V0XCIsXCJpc01hbnlcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJvcHRpb25hbE91dHB1dFJlZnNcIixcInR5cGVcIjpcIkRhdGFPdXRwdXRcIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcIndoaWxlRXhlY3V0aW5nT3V0cHV0UmVmc1wiLFwidHlwZVwiOlwiRGF0YU91dHB1dFwiLFwiaXNNYW55XCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJQcm9wZXJ0eVwiLFwic3VwZXJDbGFzc1wiOltcIkl0ZW1Bd2FyZUVsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcIm5hbWVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn1dfSx7XCJuYW1lXCI6XCJEYXRhSW5wdXRBc3NvY2lhdGlvblwiLFwic3VwZXJDbGFzc1wiOltcIkRhdGFBc3NvY2lhdGlvblwiXX0se1wibmFtZVwiOlwiRGF0YU91dHB1dEFzc29jaWF0aW9uXCIsXCJzdXBlckNsYXNzXCI6W1wiRGF0YUFzc29jaWF0aW9uXCJdfSx7XCJuYW1lXCI6XCJJbnB1dE91dHB1dFNwZWNpZmljYXRpb25cIixcInN1cGVyQ2xhc3NcIjpbXCJCYXNlRWxlbWVudFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiZGF0YUlucHV0c1wiLFwidHlwZVwiOlwiRGF0YUlucHV0XCIsXCJpc01hbnlcIjp0cnVlfSx7XCJuYW1lXCI6XCJkYXRhT3V0cHV0c1wiLFwidHlwZVwiOlwiRGF0YU91dHB1dFwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwiaW5wdXRTZXRzXCIsXCJ0eXBlXCI6XCJJbnB1dFNldFwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwib3V0cHV0U2V0c1wiLFwidHlwZVwiOlwiT3V0cHV0U2V0XCIsXCJpc01hbnlcIjp0cnVlfV19LHtcIm5hbWVcIjpcIkRhdGFPYmplY3RcIixcInN1cGVyQ2xhc3NcIjpbXCJGbG93RWxlbWVudFwiLFwiSXRlbUF3YXJlRWxlbWVudFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiaXNDb2xsZWN0aW9uXCIsXCJkZWZhdWx0XCI6ZmFsc2UsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiQm9vbGVhblwifV19LHtcIm5hbWVcIjpcIklucHV0T3V0cHV0QmluZGluZ1wiLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJpbnB1dERhdGFSZWZcIixcInR5cGVcIjpcIklucHV0U2V0XCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJvdXRwdXREYXRhUmVmXCIsXCJ0eXBlXCI6XCJPdXRwdXRTZXRcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcIm9wZXJhdGlvblJlZlwiLFwidHlwZVwiOlwiT3BlcmF0aW9uXCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfV19LHtcIm5hbWVcIjpcIkFzc2lnbm1lbnRcIixcInN1cGVyQ2xhc3NcIjpbXCJCYXNlRWxlbWVudFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiZnJvbVwiLFwidHlwZVwiOlwiRXhwcmVzc2lvblwiLFwieG1sXCI6e1wic2VyaWFsaXplXCI6XCJ4c2k6dHlwZVwifX0se1wibmFtZVwiOlwidG9cIixcInR5cGVcIjpcIkV4cHJlc3Npb25cIixcInhtbFwiOntcInNlcmlhbGl6ZVwiOlwieHNpOnR5cGVcIn19XX0se1wibmFtZVwiOlwiRGF0YVN0b3JlXCIsXCJzdXBlckNsYXNzXCI6W1wiUm9vdEVsZW1lbnRcIixcIkl0ZW1Bd2FyZUVsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcIm5hbWVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwiY2FwYWNpdHlcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJJbnRlZ2VyXCJ9LHtcIm5hbWVcIjpcImlzVW5saW1pdGVkXCIsXCJkZWZhdWx0XCI6dHJ1ZSxcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJCb29sZWFuXCJ9XX0se1wibmFtZVwiOlwiRGF0YVN0b3JlUmVmZXJlbmNlXCIsXCJzdXBlckNsYXNzXCI6W1wiSXRlbUF3YXJlRWxlbWVudFwiLFwiRmxvd0VsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImRhdGFTdG9yZVJlZlwiLFwidHlwZVwiOlwiRGF0YVN0b3JlXCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfV19LHtcIm5hbWVcIjpcIkRhdGFPYmplY3RSZWZlcmVuY2VcIixcInN1cGVyQ2xhc3NcIjpbXCJJdGVtQXdhcmVFbGVtZW50XCIsXCJGbG93RWxlbWVudFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiZGF0YU9iamVjdFJlZlwiLFwidHlwZVwiOlwiRGF0YU9iamVjdFwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJDb252ZXJzYXRpb25MaW5rXCIsXCJzdXBlckNsYXNzXCI6W1wiQmFzZUVsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcInNvdXJjZVJlZlwiLFwidHlwZVwiOlwiSW50ZXJhY3Rpb25Ob2RlXCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJ0YXJnZXRSZWZcIixcInR5cGVcIjpcIkludGVyYWN0aW9uTm9kZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwibmFtZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifV19LHtcIm5hbWVcIjpcIkNvbnZlcnNhdGlvbkFzc29jaWF0aW9uXCIsXCJzdXBlckNsYXNzXCI6W1wiQmFzZUVsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImlubmVyQ29udmVyc2F0aW9uTm9kZVJlZlwiLFwidHlwZVwiOlwiQ29udmVyc2F0aW9uTm9kZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwib3V0ZXJDb252ZXJzYXRpb25Ob2RlUmVmXCIsXCJ0eXBlXCI6XCJDb252ZXJzYXRpb25Ob2RlXCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfV19LHtcIm5hbWVcIjpcIkNhbGxDb252ZXJzYXRpb25cIixcInN1cGVyQ2xhc3NcIjpbXCJDb252ZXJzYXRpb25Ob2RlXCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJjYWxsZWRDb2xsYWJvcmF0aW9uUmVmXCIsXCJ0eXBlXCI6XCJDb2xsYWJvcmF0aW9uXCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJwYXJ0aWNpcGFudEFzc29jaWF0aW9uc1wiLFwidHlwZVwiOlwiUGFydGljaXBhbnRBc3NvY2lhdGlvblwiLFwiaXNNYW55XCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJDb252ZXJzYXRpb25cIixcInN1cGVyQ2xhc3NcIjpbXCJDb252ZXJzYXRpb25Ob2RlXCJdfSx7XCJuYW1lXCI6XCJTdWJDb252ZXJzYXRpb25cIixcInN1cGVyQ2xhc3NcIjpbXCJDb252ZXJzYXRpb25Ob2RlXCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJjb252ZXJzYXRpb25Ob2Rlc1wiLFwidHlwZVwiOlwiQ29udmVyc2F0aW9uTm9kZVwiLFwiaXNNYW55XCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJDb252ZXJzYXRpb25Ob2RlXCIsXCJpc0Fic3RyYWN0XCI6dHJ1ZSxcInN1cGVyQ2xhc3NcIjpbXCJJbnRlcmFjdGlvbk5vZGVcIixcIkJhc2VFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJuYW1lXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9LHtcIm5hbWVcIjpcInBhcnRpY2lwYW50UmVmc1wiLFwidHlwZVwiOlwiUGFydGljaXBhbnRcIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcIm1lc3NhZ2VGbG93UmVmc1wiLFwidHlwZVwiOlwiTWVzc2FnZUZsb3dcIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcImNvcnJlbGF0aW9uS2V5c1wiLFwidHlwZVwiOlwiQ29ycmVsYXRpb25LZXlcIixcImlzTWFueVwiOnRydWV9XX0se1wibmFtZVwiOlwiR2xvYmFsQ29udmVyc2F0aW9uXCIsXCJzdXBlckNsYXNzXCI6W1wiQ29sbGFib3JhdGlvblwiXX0se1wibmFtZVwiOlwiUGFydG5lckVudGl0eVwiLFwic3VwZXJDbGFzc1wiOltcIlJvb3RFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJuYW1lXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9LHtcIm5hbWVcIjpcInBhcnRpY2lwYW50UmVmXCIsXCJ0eXBlXCI6XCJQYXJ0aWNpcGFudFwiLFwiaXNNYW55XCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJQYXJ0bmVyUm9sZVwiLFwic3VwZXJDbGFzc1wiOltcIlJvb3RFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJuYW1lXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9LHtcIm5hbWVcIjpcInBhcnRpY2lwYW50UmVmXCIsXCJ0eXBlXCI6XCJQYXJ0aWNpcGFudFwiLFwiaXNNYW55XCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJDb3JyZWxhdGlvblByb3BlcnR5XCIsXCJzdXBlckNsYXNzXCI6W1wiUm9vdEVsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImNvcnJlbGF0aW9uUHJvcGVydHlSZXRyaWV2YWxFeHByZXNzaW9uXCIsXCJ0eXBlXCI6XCJDb3JyZWxhdGlvblByb3BlcnR5UmV0cmlldmFsRXhwcmVzc2lvblwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwibmFtZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifSx7XCJuYW1lXCI6XCJ0eXBlXCIsXCJ0eXBlXCI6XCJJdGVtRGVmaW5pdGlvblwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJFcnJvclwiLFwic3VwZXJDbGFzc1wiOltcIlJvb3RFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJzdHJ1Y3R1cmVSZWZcIixcInR5cGVcIjpcIkl0ZW1EZWZpbml0aW9uXCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJuYW1lXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9LHtcIm5hbWVcIjpcImVycm9yQ29kZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifV19LHtcIm5hbWVcIjpcIkNvcnJlbGF0aW9uS2V5XCIsXCJzdXBlckNsYXNzXCI6W1wiQmFzZUVsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImNvcnJlbGF0aW9uUHJvcGVydHlSZWZcIixcInR5cGVcIjpcIkNvcnJlbGF0aW9uUHJvcGVydHlcIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcIm5hbWVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn1dfSx7XCJuYW1lXCI6XCJFeHByZXNzaW9uXCIsXCJzdXBlckNsYXNzXCI6W1wiQmFzZUVsZW1lbnRcIl0sXCJpc0Fic3RyYWN0XCI6ZmFsc2UsXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImJvZHlcIixcInR5cGVcIjpcIlN0cmluZ1wiLFwiaXNCb2R5XCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJGb3JtYWxFeHByZXNzaW9uXCIsXCJzdXBlckNsYXNzXCI6W1wiRXhwcmVzc2lvblwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwibGFuZ3VhZ2VcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwiZXZhbHVhdGVzVG9UeXBlUmVmXCIsXCJ0eXBlXCI6XCJJdGVtRGVmaW5pdGlvblwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJNZXNzYWdlXCIsXCJzdXBlckNsYXNzXCI6W1wiUm9vdEVsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcIm5hbWVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwiaXRlbVJlZlwiLFwidHlwZVwiOlwiSXRlbURlZmluaXRpb25cIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiSXRlbURlZmluaXRpb25cIixcInN1cGVyQ2xhc3NcIjpbXCJSb290RWxlbWVudFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiaXRlbUtpbmRcIixcInR5cGVcIjpcIkl0ZW1LaW5kXCIsXCJpc0F0dHJcIjp0cnVlfSx7XCJuYW1lXCI6XCJzdHJ1Y3R1cmVSZWZcIixcInR5cGVcIjpcIlN0cmluZ1wiLFwiaXNBdHRyXCI6dHJ1ZX0se1wibmFtZVwiOlwiaXNDb2xsZWN0aW9uXCIsXCJkZWZhdWx0XCI6ZmFsc2UsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiQm9vbGVhblwifSx7XCJuYW1lXCI6XCJpbXBvcnRcIixcInR5cGVcIjpcIkltcG9ydFwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJGbG93RWxlbWVudFwiLFwiaXNBYnN0cmFjdFwiOnRydWUsXCJzdXBlckNsYXNzXCI6W1wiQmFzZUVsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcIm5hbWVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwiYXVkaXRpbmdcIixcInR5cGVcIjpcIkF1ZGl0aW5nXCJ9LHtcIm5hbWVcIjpcIm1vbml0b3JpbmdcIixcInR5cGVcIjpcIk1vbml0b3JpbmdcIn0se1wibmFtZVwiOlwiY2F0ZWdvcnlWYWx1ZVJlZlwiLFwidHlwZVwiOlwiQ2F0ZWdvcnlWYWx1ZVwiLFwiaXNNYW55XCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJTZXF1ZW5jZUZsb3dcIixcInN1cGVyQ2xhc3NcIjpbXCJGbG93RWxlbWVudFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiaXNJbW1lZGlhdGVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJCb29sZWFuXCJ9LHtcIm5hbWVcIjpcImNvbmRpdGlvbkV4cHJlc3Npb25cIixcInR5cGVcIjpcIkV4cHJlc3Npb25cIixcInhtbFwiOntcInNlcmlhbGl6ZVwiOlwieHNpOnR5cGVcIn19LHtcIm5hbWVcIjpcInNvdXJjZVJlZlwiLFwidHlwZVwiOlwiRmxvd05vZGVcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcInRhcmdldFJlZlwiLFwidHlwZVwiOlwiRmxvd05vZGVcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiRmxvd0VsZW1lbnRzQ29udGFpbmVyXCIsXCJpc0Fic3RyYWN0XCI6dHJ1ZSxcInN1cGVyQ2xhc3NcIjpbXCJCYXNlRWxlbWVudFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwibGFuZVNldHNcIixcInR5cGVcIjpcIkxhbmVTZXRcIixcImlzTWFueVwiOnRydWV9LHtcIm5hbWVcIjpcImZsb3dFbGVtZW50c1wiLFwidHlwZVwiOlwiRmxvd0VsZW1lbnRcIixcImlzTWFueVwiOnRydWV9XX0se1wibmFtZVwiOlwiQ2FsbGFibGVFbGVtZW50XCIsXCJpc0Fic3RyYWN0XCI6dHJ1ZSxcInN1cGVyQ2xhc3NcIjpbXCJSb290RWxlbWVudFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwibmFtZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifSx7XCJuYW1lXCI6XCJpb1NwZWNpZmljYXRpb25cIixcInR5cGVcIjpcIklucHV0T3V0cHV0U3BlY2lmaWNhdGlvblwiLFwieG1sXCI6e1wic2VyaWFsaXplXCI6XCJwcm9wZXJ0eVwifX0se1wibmFtZVwiOlwic3VwcG9ydGVkSW50ZXJmYWNlUmVmXCIsXCJ0eXBlXCI6XCJJbnRlcmZhY2VcIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcImlvQmluZGluZ1wiLFwidHlwZVwiOlwiSW5wdXRPdXRwdXRCaW5kaW5nXCIsXCJpc01hbnlcIjp0cnVlLFwieG1sXCI6e1wic2VyaWFsaXplXCI6XCJwcm9wZXJ0eVwifX1dfSx7XCJuYW1lXCI6XCJGbG93Tm9kZVwiLFwiaXNBYnN0cmFjdFwiOnRydWUsXCJzdXBlckNsYXNzXCI6W1wiRmxvd0VsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImluY29taW5nXCIsXCJ0eXBlXCI6XCJTZXF1ZW5jZUZsb3dcIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcIm91dGdvaW5nXCIsXCJ0eXBlXCI6XCJTZXF1ZW5jZUZsb3dcIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcImxhbmVzXCIsXCJ0eXBlXCI6XCJMYW5lXCIsXCJpc1ZpcnR1YWxcIjp0cnVlLFwiaXNNYW55XCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJDb3JyZWxhdGlvblByb3BlcnR5UmV0cmlldmFsRXhwcmVzc2lvblwiLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJtZXNzYWdlUGF0aFwiLFwidHlwZVwiOlwiRm9ybWFsRXhwcmVzc2lvblwifSx7XCJuYW1lXCI6XCJtZXNzYWdlUmVmXCIsXCJ0eXBlXCI6XCJNZXNzYWdlXCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfV19LHtcIm5hbWVcIjpcIkNvcnJlbGF0aW9uUHJvcGVydHlCaW5kaW5nXCIsXCJzdXBlckNsYXNzXCI6W1wiQmFzZUVsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImRhdGFQYXRoXCIsXCJ0eXBlXCI6XCJGb3JtYWxFeHByZXNzaW9uXCJ9LHtcIm5hbWVcIjpcImNvcnJlbGF0aW9uUHJvcGVydHlSZWZcIixcInR5cGVcIjpcIkNvcnJlbGF0aW9uUHJvcGVydHlcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiUmVzb3VyY2VcIixcInN1cGVyQ2xhc3NcIjpbXCJSb290RWxlbWVudFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwibmFtZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifSx7XCJuYW1lXCI6XCJyZXNvdXJjZVBhcmFtZXRlcnNcIixcInR5cGVcIjpcIlJlc291cmNlUGFyYW1ldGVyXCIsXCJpc01hbnlcIjp0cnVlfV19LHtcIm5hbWVcIjpcIlJlc291cmNlUGFyYW1ldGVyXCIsXCJzdXBlckNsYXNzXCI6W1wiQmFzZUVsZW1lbnRcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcIm5hbWVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwiaXNSZXF1aXJlZFwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIkJvb2xlYW5cIn0se1wibmFtZVwiOlwidHlwZVwiLFwidHlwZVwiOlwiSXRlbURlZmluaXRpb25cIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiQ29ycmVsYXRpb25TdWJzY3JpcHRpb25cIixcInN1cGVyQ2xhc3NcIjpbXCJCYXNlRWxlbWVudFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiY29ycmVsYXRpb25LZXlSZWZcIixcInR5cGVcIjpcIkNvcnJlbGF0aW9uS2V5XCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJjb3JyZWxhdGlvblByb3BlcnR5QmluZGluZ1wiLFwidHlwZVwiOlwiQ29ycmVsYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIixcImlzTWFueVwiOnRydWV9XX0se1wibmFtZVwiOlwiTWVzc2FnZUZsb3dcIixcInN1cGVyQ2xhc3NcIjpbXCJCYXNlRWxlbWVudFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwibmFtZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifSx7XCJuYW1lXCI6XCJzb3VyY2VSZWZcIixcInR5cGVcIjpcIkludGVyYWN0aW9uTm9kZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwidGFyZ2V0UmVmXCIsXCJ0eXBlXCI6XCJJbnRlcmFjdGlvbk5vZGVcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcIm1lc3NhZ2VSZWZcIixcInR5cGVcIjpcIk1lc3NhZ2VcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiTWVzc2FnZUZsb3dBc3NvY2lhdGlvblwiLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJpbm5lck1lc3NhZ2VGbG93UmVmXCIsXCJ0eXBlXCI6XCJNZXNzYWdlRmxvd1wiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwib3V0ZXJNZXNzYWdlRmxvd1JlZlwiLFwidHlwZVwiOlwiTWVzc2FnZUZsb3dcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiSW50ZXJhY3Rpb25Ob2RlXCIsXCJpc0Fic3RyYWN0XCI6dHJ1ZSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiaW5jb21pbmdDb252ZXJzYXRpb25MaW5rc1wiLFwidHlwZVwiOlwiQ29udmVyc2F0aW9uTGlua1wiLFwiaXNWaXJ0dWFsXCI6dHJ1ZSxcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcIm91dGdvaW5nQ29udmVyc2F0aW9uTGlua3NcIixcInR5cGVcIjpcIkNvbnZlcnNhdGlvbkxpbmtcIixcImlzVmlydHVhbFwiOnRydWUsXCJpc01hbnlcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfV19LHtcIm5hbWVcIjpcIlBhcnRpY2lwYW50XCIsXCJzdXBlckNsYXNzXCI6W1wiSW50ZXJhY3Rpb25Ob2RlXCIsXCJCYXNlRWxlbWVudFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwibmFtZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifSx7XCJuYW1lXCI6XCJpbnRlcmZhY2VSZWZcIixcInR5cGVcIjpcIkludGVyZmFjZVwiLFwiaXNNYW55XCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwicGFydGljaXBhbnRNdWx0aXBsaWNpdHlcIixcInR5cGVcIjpcIlBhcnRpY2lwYW50TXVsdGlwbGljaXR5XCJ9LHtcIm5hbWVcIjpcImVuZFBvaW50UmVmc1wiLFwidHlwZVwiOlwiRW5kUG9pbnRcIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcInByb2Nlc3NSZWZcIixcInR5cGVcIjpcIlByb2Nlc3NcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiUGFydGljaXBhbnRBc3NvY2lhdGlvblwiLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJpbm5lclBhcnRpY2lwYW50UmVmXCIsXCJ0eXBlXCI6XCJQYXJ0aWNpcGFudFwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwib3V0ZXJQYXJ0aWNpcGFudFJlZlwiLFwidHlwZVwiOlwiUGFydGljaXBhbnRcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiUGFydGljaXBhbnRNdWx0aXBsaWNpdHlcIixcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwibWluaW11bVwiLFwiZGVmYXVsdFwiOjAsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiSW50ZWdlclwifSx7XCJuYW1lXCI6XCJtYXhpbXVtXCIsXCJkZWZhdWx0XCI6MSxcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJJbnRlZ2VyXCJ9XSxcInN1cGVyQ2xhc3NcIjpbXCJCYXNlRWxlbWVudFwiXX0se1wibmFtZVwiOlwiQ29sbGFib3JhdGlvblwiLFwic3VwZXJDbGFzc1wiOltcIlJvb3RFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJuYW1lXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9LHtcIm5hbWVcIjpcImlzQ2xvc2VkXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiQm9vbGVhblwifSx7XCJuYW1lXCI6XCJwYXJ0aWNpcGFudHNcIixcInR5cGVcIjpcIlBhcnRpY2lwYW50XCIsXCJpc01hbnlcIjp0cnVlfSx7XCJuYW1lXCI6XCJtZXNzYWdlRmxvd3NcIixcInR5cGVcIjpcIk1lc3NhZ2VGbG93XCIsXCJpc01hbnlcIjp0cnVlfSx7XCJuYW1lXCI6XCJhcnRpZmFjdHNcIixcInR5cGVcIjpcIkFydGlmYWN0XCIsXCJpc01hbnlcIjp0cnVlfSx7XCJuYW1lXCI6XCJjb252ZXJzYXRpb25zXCIsXCJ0eXBlXCI6XCJDb252ZXJzYXRpb25Ob2RlXCIsXCJpc01hbnlcIjp0cnVlfSx7XCJuYW1lXCI6XCJjb252ZXJzYXRpb25Bc3NvY2lhdGlvbnNcIixcInR5cGVcIjpcIkNvbnZlcnNhdGlvbkFzc29jaWF0aW9uXCJ9LHtcIm5hbWVcIjpcInBhcnRpY2lwYW50QXNzb2NpYXRpb25zXCIsXCJ0eXBlXCI6XCJQYXJ0aWNpcGFudEFzc29jaWF0aW9uXCIsXCJpc01hbnlcIjp0cnVlfSx7XCJuYW1lXCI6XCJtZXNzYWdlRmxvd0Fzc29jaWF0aW9uc1wiLFwidHlwZVwiOlwiTWVzc2FnZUZsb3dBc3NvY2lhdGlvblwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwiY29ycmVsYXRpb25LZXlzXCIsXCJ0eXBlXCI6XCJDb3JyZWxhdGlvbktleVwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwiY2hvcmVvZ3JhcGh5UmVmXCIsXCJ0eXBlXCI6XCJDaG9yZW9ncmFwaHlcIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcImNvbnZlcnNhdGlvbkxpbmtzXCIsXCJ0eXBlXCI6XCJDb252ZXJzYXRpb25MaW5rXCIsXCJpc01hbnlcIjp0cnVlfV19LHtcIm5hbWVcIjpcIkNob3Jlb2dyYXBoeUFjdGl2aXR5XCIsXCJpc0Fic3RyYWN0XCI6dHJ1ZSxcInN1cGVyQ2xhc3NcIjpbXCJGbG93Tm9kZVwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwicGFydGljaXBhbnRSZWZzXCIsXCJ0eXBlXCI6XCJQYXJ0aWNpcGFudFwiLFwiaXNNYW55XCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwiaW5pdGlhdGluZ1BhcnRpY2lwYW50UmVmXCIsXCJ0eXBlXCI6XCJQYXJ0aWNpcGFudFwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwiY29ycmVsYXRpb25LZXlzXCIsXCJ0eXBlXCI6XCJDb3JyZWxhdGlvbktleVwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwibG9vcFR5cGVcIixcInR5cGVcIjpcIkNob3Jlb2dyYXBoeUxvb3BUeXBlXCIsXCJkZWZhdWx0XCI6XCJOb25lXCIsXCJpc0F0dHJcIjp0cnVlfV19LHtcIm5hbWVcIjpcIkNhbGxDaG9yZW9ncmFwaHlcIixcInN1cGVyQ2xhc3NcIjpbXCJDaG9yZW9ncmFwaHlBY3Rpdml0eVwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiY2FsbGVkQ2hvcmVvZ3JhcGh5UmVmXCIsXCJ0eXBlXCI6XCJDaG9yZW9ncmFwaHlcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcInBhcnRpY2lwYW50QXNzb2NpYXRpb25zXCIsXCJ0eXBlXCI6XCJQYXJ0aWNpcGFudEFzc29jaWF0aW9uXCIsXCJpc01hbnlcIjp0cnVlfV19LHtcIm5hbWVcIjpcIlN1YkNob3Jlb2dyYXBoeVwiLFwic3VwZXJDbGFzc1wiOltcIkNob3Jlb2dyYXBoeUFjdGl2aXR5XCIsXCJGbG93RWxlbWVudHNDb250YWluZXJcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImFydGlmYWN0c1wiLFwidHlwZVwiOlwiQXJ0aWZhY3RcIixcImlzTWFueVwiOnRydWV9XX0se1wibmFtZVwiOlwiQ2hvcmVvZ3JhcGh5VGFza1wiLFwic3VwZXJDbGFzc1wiOltcIkNob3Jlb2dyYXBoeUFjdGl2aXR5XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJtZXNzYWdlRmxvd1JlZlwiLFwidHlwZVwiOlwiTWVzc2FnZUZsb3dcIixcImlzTWFueVwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiQ2hvcmVvZ3JhcGh5XCIsXCJzdXBlckNsYXNzXCI6W1wiRmxvd0VsZW1lbnRzQ29udGFpbmVyXCIsXCJDb2xsYWJvcmF0aW9uXCJdfSx7XCJuYW1lXCI6XCJHbG9iYWxDaG9yZW9ncmFwaHlUYXNrXCIsXCJzdXBlckNsYXNzXCI6W1wiQ2hvcmVvZ3JhcGh5XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJpbml0aWF0aW5nUGFydGljaXBhbnRSZWZcIixcInR5cGVcIjpcIlBhcnRpY2lwYW50XCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfV19LHtcIm5hbWVcIjpcIlRleHRBbm5vdGF0aW9uXCIsXCJzdXBlckNsYXNzXCI6W1wiQXJ0aWZhY3RcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcInRleHRcIixcInR5cGVcIjpcIlN0cmluZ1wifSx7XCJuYW1lXCI6XCJ0ZXh0Rm9ybWF0XCIsXCJkZWZhdWx0XCI6XCJ0ZXh0L3BsYWluXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9XX0se1wibmFtZVwiOlwiR3JvdXBcIixcInN1cGVyQ2xhc3NcIjpbXCJBcnRpZmFjdFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiY2F0ZWdvcnlWYWx1ZVJlZlwiLFwidHlwZVwiOlwiQ2F0ZWdvcnlWYWx1ZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJBc3NvY2lhdGlvblwiLFwic3VwZXJDbGFzc1wiOltcIkFydGlmYWN0XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJhc3NvY2lhdGlvbkRpcmVjdGlvblwiLFwidHlwZVwiOlwiQXNzb2NpYXRpb25EaXJlY3Rpb25cIixcImlzQXR0clwiOnRydWV9LHtcIm5hbWVcIjpcInNvdXJjZVJlZlwiLFwidHlwZVwiOlwiQmFzZUVsZW1lbnRcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcInRhcmdldFJlZlwiLFwidHlwZVwiOlwiQmFzZUVsZW1lbnRcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiQ2F0ZWdvcnlcIixcInN1cGVyQ2xhc3NcIjpbXCJSb290RWxlbWVudFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiY2F0ZWdvcnlWYWx1ZVwiLFwidHlwZVwiOlwiQ2F0ZWdvcnlWYWx1ZVwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwibmFtZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifV19LHtcIm5hbWVcIjpcIkFydGlmYWN0XCIsXCJpc0Fic3RyYWN0XCI6dHJ1ZSxcInN1cGVyQ2xhc3NcIjpbXCJCYXNlRWxlbWVudFwiXX0se1wibmFtZVwiOlwiQ2F0ZWdvcnlWYWx1ZVwiLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJjYXRlZ29yaXplZEZsb3dFbGVtZW50c1wiLFwidHlwZVwiOlwiRmxvd0VsZW1lbnRcIixcImlzVmlydHVhbFwiOnRydWUsXCJpc01hbnlcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJ2YWx1ZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifV19LHtcIm5hbWVcIjpcIkFjdGl2aXR5XCIsXCJpc0Fic3RyYWN0XCI6dHJ1ZSxcInN1cGVyQ2xhc3NcIjpbXCJGbG93Tm9kZVwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiaXNGb3JDb21wZW5zYXRpb25cIixcImRlZmF1bHRcIjpmYWxzZSxcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJCb29sZWFuXCJ9LHtcIm5hbWVcIjpcImRlZmF1bHRcIixcInR5cGVcIjpcIlNlcXVlbmNlRmxvd1wiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwiaW9TcGVjaWZpY2F0aW9uXCIsXCJ0eXBlXCI6XCJJbnB1dE91dHB1dFNwZWNpZmljYXRpb25cIixcInhtbFwiOntcInNlcmlhbGl6ZVwiOlwicHJvcGVydHlcIn19LHtcIm5hbWVcIjpcImJvdW5kYXJ5RXZlbnRSZWZzXCIsXCJ0eXBlXCI6XCJCb3VuZGFyeUV2ZW50XCIsXCJpc01hbnlcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJwcm9wZXJ0aWVzXCIsXCJ0eXBlXCI6XCJQcm9wZXJ0eVwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwiZGF0YUlucHV0QXNzb2NpYXRpb25zXCIsXCJ0eXBlXCI6XCJEYXRhSW5wdXRBc3NvY2lhdGlvblwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwiZGF0YU91dHB1dEFzc29jaWF0aW9uc1wiLFwidHlwZVwiOlwiRGF0YU91dHB1dEFzc29jaWF0aW9uXCIsXCJpc01hbnlcIjp0cnVlfSx7XCJuYW1lXCI6XCJzdGFydFF1YW50aXR5XCIsXCJkZWZhdWx0XCI6MSxcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJJbnRlZ2VyXCJ9LHtcIm5hbWVcIjpcInJlc291cmNlc1wiLFwidHlwZVwiOlwiUmVzb3VyY2VSb2xlXCIsXCJpc01hbnlcIjp0cnVlfSx7XCJuYW1lXCI6XCJjb21wbGV0aW9uUXVhbnRpdHlcIixcImRlZmF1bHRcIjoxLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIkludGVnZXJcIn0se1wibmFtZVwiOlwibG9vcENoYXJhY3RlcmlzdGljc1wiLFwidHlwZVwiOlwiTG9vcENoYXJhY3RlcmlzdGljc1wifV19LHtcIm5hbWVcIjpcIlNlcnZpY2VUYXNrXCIsXCJzdXBlckNsYXNzXCI6W1wiVGFza1wiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiaW1wbGVtZW50YXRpb25cIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwib3BlcmF0aW9uUmVmXCIsXCJ0eXBlXCI6XCJPcGVyYXRpb25cIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XX0se1wibmFtZVwiOlwiU3ViUHJvY2Vzc1wiLFwic3VwZXJDbGFzc1wiOltcIkFjdGl2aXR5XCIsXCJGbG93RWxlbWVudHNDb250YWluZXJcIixcIkludGVyYWN0aW9uTm9kZVwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwidHJpZ2dlcmVkQnlFdmVudFwiLFwiZGVmYXVsdFwiOmZhbHNlLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIkJvb2xlYW5cIn0se1wibmFtZVwiOlwiYXJ0aWZhY3RzXCIsXCJ0eXBlXCI6XCJBcnRpZmFjdFwiLFwiaXNNYW55XCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJMb29wQ2hhcmFjdGVyaXN0aWNzXCIsXCJpc0Fic3RyYWN0XCI6dHJ1ZSxcInN1cGVyQ2xhc3NcIjpbXCJCYXNlRWxlbWVudFwiXX0se1wibmFtZVwiOlwiTXVsdGlJbnN0YW5jZUxvb3BDaGFyYWN0ZXJpc3RpY3NcIixcInN1cGVyQ2xhc3NcIjpbXCJMb29wQ2hhcmFjdGVyaXN0aWNzXCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJpc1NlcXVlbnRpYWxcIixcImRlZmF1bHRcIjpmYWxzZSxcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJCb29sZWFuXCJ9LHtcIm5hbWVcIjpcImJlaGF2aW9yXCIsXCJ0eXBlXCI6XCJNdWx0aUluc3RhbmNlQmVoYXZpb3JcIixcImRlZmF1bHRcIjpcIkFsbFwiLFwiaXNBdHRyXCI6dHJ1ZX0se1wibmFtZVwiOlwibG9vcENhcmRpbmFsaXR5XCIsXCJ0eXBlXCI6XCJFeHByZXNzaW9uXCIsXCJ4bWxcIjp7XCJzZXJpYWxpemVcIjpcInhzaTp0eXBlXCJ9fSx7XCJuYW1lXCI6XCJsb29wRGF0YUlucHV0UmVmXCIsXCJ0eXBlXCI6XCJJdGVtQXdhcmVFbGVtZW50XCIsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcImxvb3BEYXRhT3V0cHV0UmVmXCIsXCJ0eXBlXCI6XCJJdGVtQXdhcmVFbGVtZW50XCIsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcImlucHV0RGF0YUl0ZW1cIixcInR5cGVcIjpcIkRhdGFJbnB1dFwiLFwieG1sXCI6e1wic2VyaWFsaXplXCI6XCJwcm9wZXJ0eVwifX0se1wibmFtZVwiOlwib3V0cHV0RGF0YUl0ZW1cIixcInR5cGVcIjpcIkRhdGFPdXRwdXRcIixcInhtbFwiOntcInNlcmlhbGl6ZVwiOlwicHJvcGVydHlcIn19LHtcIm5hbWVcIjpcImNvbXBsZXhCZWhhdmlvckRlZmluaXRpb25cIixcInR5cGVcIjpcIkNvbXBsZXhCZWhhdmlvckRlZmluaXRpb25cIixcImlzTWFueVwiOnRydWV9LHtcIm5hbWVcIjpcImNvbXBsZXRpb25Db25kaXRpb25cIixcInR5cGVcIjpcIkV4cHJlc3Npb25cIixcInhtbFwiOntcInNlcmlhbGl6ZVwiOlwieHNpOnR5cGVcIn19LHtcIm5hbWVcIjpcIm9uZUJlaGF2aW9yRXZlbnRSZWZcIixcInR5cGVcIjpcIkV2ZW50RGVmaW5pdGlvblwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwibm9uZUJlaGF2aW9yRXZlbnRSZWZcIixcInR5cGVcIjpcIkV2ZW50RGVmaW5pdGlvblwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJTdGFuZGFyZExvb3BDaGFyYWN0ZXJpc3RpY3NcIixcInN1cGVyQ2xhc3NcIjpbXCJMb29wQ2hhcmFjdGVyaXN0aWNzXCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJ0ZXN0QmVmb3JlXCIsXCJkZWZhdWx0XCI6ZmFsc2UsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiQm9vbGVhblwifSx7XCJuYW1lXCI6XCJsb29wQ29uZGl0aW9uXCIsXCJ0eXBlXCI6XCJFeHByZXNzaW9uXCIsXCJ4bWxcIjp7XCJzZXJpYWxpemVcIjpcInhzaTp0eXBlXCJ9fSx7XCJuYW1lXCI6XCJsb29wTWF4aW11bVwiLFwidHlwZVwiOlwiSW50ZWdlclwiLFwiaXNBdHRyXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJDYWxsQWN0aXZpdHlcIixcInN1cGVyQ2xhc3NcIjpbXCJBY3Rpdml0eVwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiY2FsbGVkRWxlbWVudFwiLFwidHlwZVwiOlwiU3RyaW5nXCIsXCJpc0F0dHJcIjp0cnVlfV19LHtcIm5hbWVcIjpcIlRhc2tcIixcInN1cGVyQ2xhc3NcIjpbXCJBY3Rpdml0eVwiLFwiSW50ZXJhY3Rpb25Ob2RlXCJdfSx7XCJuYW1lXCI6XCJTZW5kVGFza1wiLFwic3VwZXJDbGFzc1wiOltcIlRhc2tcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImltcGxlbWVudGF0aW9uXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9LHtcIm5hbWVcIjpcIm9wZXJhdGlvblJlZlwiLFwidHlwZVwiOlwiT3BlcmF0aW9uXCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJtZXNzYWdlUmVmXCIsXCJ0eXBlXCI6XCJNZXNzYWdlXCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfV19LHtcIm5hbWVcIjpcIlJlY2VpdmVUYXNrXCIsXCJzdXBlckNsYXNzXCI6W1wiVGFza1wiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiaW1wbGVtZW50YXRpb25cIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwiaW5zdGFudGlhdGVcIixcImRlZmF1bHRcIjpmYWxzZSxcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJCb29sZWFuXCJ9LHtcIm5hbWVcIjpcIm9wZXJhdGlvblJlZlwiLFwidHlwZVwiOlwiT3BlcmF0aW9uXCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJtZXNzYWdlUmVmXCIsXCJ0eXBlXCI6XCJNZXNzYWdlXCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfV19LHtcIm5hbWVcIjpcIlNjcmlwdFRhc2tcIixcInN1cGVyQ2xhc3NcIjpbXCJUYXNrXCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJzY3JpcHRGb3JtYXRcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwic2NyaXB0XCIsXCJ0eXBlXCI6XCJTdHJpbmdcIn1dfSx7XCJuYW1lXCI6XCJCdXNpbmVzc1J1bGVUYXNrXCIsXCJzdXBlckNsYXNzXCI6W1wiVGFza1wiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiaW1wbGVtZW50YXRpb25cIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn1dfSx7XCJuYW1lXCI6XCJBZEhvY1N1YlByb2Nlc3NcIixcInN1cGVyQ2xhc3NcIjpbXCJTdWJQcm9jZXNzXCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJjb21wbGV0aW9uQ29uZGl0aW9uXCIsXCJ0eXBlXCI6XCJFeHByZXNzaW9uXCIsXCJ4bWxcIjp7XCJzZXJpYWxpemVcIjpcInhzaTp0eXBlXCJ9fSx7XCJuYW1lXCI6XCJvcmRlcmluZ1wiLFwidHlwZVwiOlwiQWRIb2NPcmRlcmluZ1wiLFwiaXNBdHRyXCI6dHJ1ZX0se1wibmFtZVwiOlwiY2FuY2VsUmVtYWluaW5nSW5zdGFuY2VzXCIsXCJkZWZhdWx0XCI6dHJ1ZSxcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJCb29sZWFuXCJ9XX0se1wibmFtZVwiOlwiVHJhbnNhY3Rpb25cIixcInN1cGVyQ2xhc3NcIjpbXCJTdWJQcm9jZXNzXCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJwcm90b2NvbFwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifSx7XCJuYW1lXCI6XCJtZXRob2RcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn1dfSx7XCJuYW1lXCI6XCJHbG9iYWxTY3JpcHRUYXNrXCIsXCJzdXBlckNsYXNzXCI6W1wiR2xvYmFsVGFza1wiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwic2NyaXB0TGFuZ3VhZ2VcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwic2NyaXB0XCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9XX0se1wibmFtZVwiOlwiR2xvYmFsQnVzaW5lc3NSdWxlVGFza1wiLFwic3VwZXJDbGFzc1wiOltcIkdsb2JhbFRhc2tcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImltcGxlbWVudGF0aW9uXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9XX0se1wibmFtZVwiOlwiQ29tcGxleEJlaGF2aW9yRGVmaW5pdGlvblwiLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJjb25kaXRpb25cIixcInR5cGVcIjpcIkZvcm1hbEV4cHJlc3Npb25cIn0se1wibmFtZVwiOlwiZXZlbnRcIixcInR5cGVcIjpcIkltcGxpY2l0VGhyb3dFdmVudFwifV19LHtcIm5hbWVcIjpcIlJlc291cmNlUm9sZVwiLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJyZXNvdXJjZVJlZlwiLFwidHlwZVwiOlwiUmVzb3VyY2VcIixcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwicmVzb3VyY2VQYXJhbWV0ZXJCaW5kaW5nc1wiLFwidHlwZVwiOlwiUmVzb3VyY2VQYXJhbWV0ZXJCaW5kaW5nXCIsXCJpc01hbnlcIjp0cnVlfSx7XCJuYW1lXCI6XCJyZXNvdXJjZUFzc2lnbm1lbnRFeHByZXNzaW9uXCIsXCJ0eXBlXCI6XCJSZXNvdXJjZUFzc2lnbm1lbnRFeHByZXNzaW9uXCJ9LHtcIm5hbWVcIjpcIm5hbWVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn1dfSx7XCJuYW1lXCI6XCJSZXNvdXJjZVBhcmFtZXRlckJpbmRpbmdcIixcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiZXhwcmVzc2lvblwiLFwidHlwZVwiOlwiRXhwcmVzc2lvblwiLFwieG1sXCI6e1wic2VyaWFsaXplXCI6XCJ4c2k6dHlwZVwifX0se1wibmFtZVwiOlwicGFyYW1ldGVyUmVmXCIsXCJ0eXBlXCI6XCJSZXNvdXJjZVBhcmFtZXRlclwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX1dLFwic3VwZXJDbGFzc1wiOltcIkJhc2VFbGVtZW50XCJdfSx7XCJuYW1lXCI6XCJSZXNvdXJjZUFzc2lnbm1lbnRFeHByZXNzaW9uXCIsXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImV4cHJlc3Npb25cIixcInR5cGVcIjpcIkV4cHJlc3Npb25cIixcInhtbFwiOntcInNlcmlhbGl6ZVwiOlwieHNpOnR5cGVcIn19XSxcInN1cGVyQ2xhc3NcIjpbXCJCYXNlRWxlbWVudFwiXX0se1wibmFtZVwiOlwiSW1wb3J0XCIsXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImltcG9ydFR5cGVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwibG9jYXRpb25cIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwibmFtZXNwYWNlXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9XX0se1wibmFtZVwiOlwiRGVmaW5pdGlvbnNcIixcInN1cGVyQ2xhc3NcIjpbXCJCYXNlRWxlbWVudFwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwibmFtZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifSx7XCJuYW1lXCI6XCJ0YXJnZXROYW1lc3BhY2VcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwiZXhwcmVzc2lvbkxhbmd1YWdlXCIsXCJkZWZhdWx0XCI6XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hQYXRoXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9LHtcIm5hbWVcIjpcInR5cGVMYW5ndWFnZVwiLFwiZGVmYXVsdFwiOlwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWFcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwiaW1wb3J0c1wiLFwidHlwZVwiOlwiSW1wb3J0XCIsXCJpc01hbnlcIjp0cnVlfSx7XCJuYW1lXCI6XCJleHRlbnNpb25zXCIsXCJ0eXBlXCI6XCJFeHRlbnNpb25cIixcImlzTWFueVwiOnRydWV9LHtcIm5hbWVcIjpcInJvb3RFbGVtZW50c1wiLFwidHlwZVwiOlwiUm9vdEVsZW1lbnRcIixcImlzTWFueVwiOnRydWV9LHtcIm5hbWVcIjpcImRpYWdyYW1zXCIsXCJpc01hbnlcIjp0cnVlLFwidHlwZVwiOlwiYnBtbmRpOkJQTU5EaWFncmFtXCJ9LHtcIm5hbWVcIjpcImV4cG9ydGVyXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9LHtcIm5hbWVcIjpcInJlbGF0aW9uc2hpcHNcIixcInR5cGVcIjpcIlJlbGF0aW9uc2hpcFwiLFwiaXNNYW55XCI6dHJ1ZX0se1wibmFtZVwiOlwiZXhwb3J0ZXJWZXJzaW9uXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiU3RyaW5nXCJ9XX1dLFwiZW51bWVyYXRpb25zXCI6W3tcIm5hbWVcIjpcIlByb2Nlc3NUeXBlXCIsXCJsaXRlcmFsVmFsdWVzXCI6W3tcIm5hbWVcIjpcIk5vbmVcIn0se1wibmFtZVwiOlwiUHVibGljXCJ9LHtcIm5hbWVcIjpcIlByaXZhdGVcIn1dfSx7XCJuYW1lXCI6XCJHYXRld2F5RGlyZWN0aW9uXCIsXCJsaXRlcmFsVmFsdWVzXCI6W3tcIm5hbWVcIjpcIlVuc3BlY2lmaWVkXCJ9LHtcIm5hbWVcIjpcIkNvbnZlcmdpbmdcIn0se1wibmFtZVwiOlwiRGl2ZXJnaW5nXCJ9LHtcIm5hbWVcIjpcIk1peGVkXCJ9XX0se1wibmFtZVwiOlwiRXZlbnRCYXNlZEdhdGV3YXlUeXBlXCIsXCJsaXRlcmFsVmFsdWVzXCI6W3tcIm5hbWVcIjpcIlBhcmFsbGVsXCJ9LHtcIm5hbWVcIjpcIkV4Y2x1c2l2ZVwifV19LHtcIm5hbWVcIjpcIlJlbGF0aW9uc2hpcERpcmVjdGlvblwiLFwibGl0ZXJhbFZhbHVlc1wiOlt7XCJuYW1lXCI6XCJOb25lXCJ9LHtcIm5hbWVcIjpcIkZvcndhcmRcIn0se1wibmFtZVwiOlwiQmFja3dhcmRcIn0se1wibmFtZVwiOlwiQm90aFwifV19LHtcIm5hbWVcIjpcIkl0ZW1LaW5kXCIsXCJsaXRlcmFsVmFsdWVzXCI6W3tcIm5hbWVcIjpcIlBoeXNpY2FsXCJ9LHtcIm5hbWVcIjpcIkluZm9ybWF0aW9uXCJ9XX0se1wibmFtZVwiOlwiQ2hvcmVvZ3JhcGh5TG9vcFR5cGVcIixcImxpdGVyYWxWYWx1ZXNcIjpbe1wibmFtZVwiOlwiTm9uZVwifSx7XCJuYW1lXCI6XCJTdGFuZGFyZFwifSx7XCJuYW1lXCI6XCJNdWx0aUluc3RhbmNlU2VxdWVudGlhbFwifSx7XCJuYW1lXCI6XCJNdWx0aUluc3RhbmNlUGFyYWxsZWxcIn1dfSx7XCJuYW1lXCI6XCJBc3NvY2lhdGlvbkRpcmVjdGlvblwiLFwibGl0ZXJhbFZhbHVlc1wiOlt7XCJuYW1lXCI6XCJOb25lXCJ9LHtcIm5hbWVcIjpcIk9uZVwifSx7XCJuYW1lXCI6XCJCb3RoXCJ9XX0se1wibmFtZVwiOlwiTXVsdGlJbnN0YW5jZUJlaGF2aW9yXCIsXCJsaXRlcmFsVmFsdWVzXCI6W3tcIm5hbWVcIjpcIk5vbmVcIn0se1wibmFtZVwiOlwiT25lXCJ9LHtcIm5hbWVcIjpcIkFsbFwifSx7XCJuYW1lXCI6XCJDb21wbGV4XCJ9XX0se1wibmFtZVwiOlwiQWRIb2NPcmRlcmluZ1wiLFwibGl0ZXJhbFZhbHVlc1wiOlt7XCJuYW1lXCI6XCJQYXJhbGxlbFwifSx7XCJuYW1lXCI6XCJTZXF1ZW50aWFsXCJ9XX1dLFwicHJlZml4XCI6XCJicG1uXCIsXCJ4bWxcIjp7XCJ0YWdBbGlhc1wiOlwibG93ZXJDYXNlXCIsXCJ0eXBlUHJlZml4XCI6XCJ0XCJ9fVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2ZlYXR1cmVzL3htbC94bWxucy9icG1uLmpzb25cbi8vIG1vZHVsZSBpZCA9IDQyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///42\n"); + +/***/ }), +/* 43 */ +/***/ (function(module, exports) { + +eval("module.exports = {\"name\":\"BPMNDI\",\"uri\":\"http://www.omg.org/spec/BPMN/20100524/DI\",\"types\":[{\"name\":\"BPMNDiagram\",\"properties\":[{\"name\":\"plane\",\"type\":\"BPMNPlane\",\"redefines\":\"di:Diagram#rootElement\"},{\"name\":\"labelStyle\",\"type\":\"BPMNLabelStyle\",\"isMany\":true}],\"superClass\":[\"di:Diagram\"]},{\"name\":\"BPMNPlane\",\"properties\":[{\"name\":\"bpmnElement\",\"isAttr\":true,\"isReference\":true,\"type\":\"bpmn:BaseElement\",\"redefines\":\"di:DiagramElement#modelElement\"}],\"superClass\":[\"di:Plane\"]},{\"name\":\"BPMNShape\",\"properties\":[{\"name\":\"bpmnElement\",\"isAttr\":true,\"isReference\":true,\"type\":\"bpmn:BaseElement\",\"redefines\":\"di:DiagramElement#modelElement\"},{\"name\":\"isHorizontal\",\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"isExpanded\",\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"isMarkerVisible\",\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"label\",\"type\":\"BPMNLabel\"},{\"name\":\"isMessageVisible\",\"isAttr\":true,\"type\":\"Boolean\"},{\"name\":\"participantBandKind\",\"type\":\"ParticipantBandKind\",\"isAttr\":true},{\"name\":\"choreographyActivityShape\",\"type\":\"BPMNShape\",\"isAttr\":true,\"isReference\":true}],\"superClass\":[\"di:LabeledShape\"]},{\"name\":\"BPMNEdge\",\"properties\":[{\"name\":\"label\",\"type\":\"BPMNLabel\"},{\"name\":\"bpmnElement\",\"isAttr\":true,\"isReference\":true,\"type\":\"bpmn:BaseElement\",\"redefines\":\"di:DiagramElement#modelElement\"},{\"name\":\"sourceElement\",\"isAttr\":true,\"isReference\":true,\"type\":\"di:DiagramElement\",\"redefines\":\"di:Edge#source\"},{\"name\":\"targetElement\",\"isAttr\":true,\"isReference\":true,\"type\":\"di:DiagramElement\",\"redefines\":\"di:Edge#target\"},{\"name\":\"messageVisibleKind\",\"type\":\"MessageVisibleKind\",\"isAttr\":true,\"default\":\"initiating\"}],\"superClass\":[\"di:LabeledEdge\"]},{\"name\":\"BPMNLabel\",\"properties\":[{\"name\":\"labelStyle\",\"type\":\"BPMNLabelStyle\",\"isAttr\":true,\"isReference\":true,\"redefines\":\"di:DiagramElement#style\"}],\"superClass\":[\"di:Label\"]},{\"name\":\"BPMNLabelStyle\",\"properties\":[{\"name\":\"font\",\"type\":\"dc:Font\"}],\"superClass\":[\"di:Style\"]}],\"enumerations\":[{\"name\":\"ParticipantBandKind\",\"literalValues\":[{\"name\":\"top_initiating\"},{\"name\":\"middle_initiating\"},{\"name\":\"bottom_initiating\"},{\"name\":\"top_non_initiating\"},{\"name\":\"middle_non_initiating\"},{\"name\":\"bottom_non_initiating\"}]},{\"name\":\"MessageVisibleKind\",\"literalValues\":[{\"name\":\"initiating\"},{\"name\":\"non_initiating\"}]}],\"associations\":[],\"prefix\":\"bpmndi\"}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmVhdHVyZXMveG1sL3htbG5zL2JwbW5kaS5qc29uPzJiMWUiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSB7XCJuYW1lXCI6XCJCUE1ORElcIixcInVyaVwiOlwiaHR0cDovL3d3dy5vbWcub3JnL3NwZWMvQlBNTi8yMDEwMDUyNC9ESVwiLFwidHlwZXNcIjpbe1wibmFtZVwiOlwiQlBNTkRpYWdyYW1cIixcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwicGxhbmVcIixcInR5cGVcIjpcIkJQTU5QbGFuZVwiLFwicmVkZWZpbmVzXCI6XCJkaTpEaWFncmFtI3Jvb3RFbGVtZW50XCJ9LHtcIm5hbWVcIjpcImxhYmVsU3R5bGVcIixcInR5cGVcIjpcIkJQTU5MYWJlbFN0eWxlXCIsXCJpc01hbnlcIjp0cnVlfV0sXCJzdXBlckNsYXNzXCI6W1wiZGk6RGlhZ3JhbVwiXX0se1wibmFtZVwiOlwiQlBNTlBsYW5lXCIsXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImJwbW5FbGVtZW50XCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlLFwidHlwZVwiOlwiYnBtbjpCYXNlRWxlbWVudFwiLFwicmVkZWZpbmVzXCI6XCJkaTpEaWFncmFtRWxlbWVudCNtb2RlbEVsZW1lbnRcIn1dLFwic3VwZXJDbGFzc1wiOltcImRpOlBsYW5lXCJdfSx7XCJuYW1lXCI6XCJCUE1OU2hhcGVcIixcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiYnBtbkVsZW1lbnRcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWUsXCJ0eXBlXCI6XCJicG1uOkJhc2VFbGVtZW50XCIsXCJyZWRlZmluZXNcIjpcImRpOkRpYWdyYW1FbGVtZW50I21vZGVsRWxlbWVudFwifSx7XCJuYW1lXCI6XCJpc0hvcml6b250YWxcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJCb29sZWFuXCJ9LHtcIm5hbWVcIjpcImlzRXhwYW5kZWRcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJCb29sZWFuXCJ9LHtcIm5hbWVcIjpcImlzTWFya2VyVmlzaWJsZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIkJvb2xlYW5cIn0se1wibmFtZVwiOlwibGFiZWxcIixcInR5cGVcIjpcIkJQTU5MYWJlbFwifSx7XCJuYW1lXCI6XCJpc01lc3NhZ2VWaXNpYmxlXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiQm9vbGVhblwifSx7XCJuYW1lXCI6XCJwYXJ0aWNpcGFudEJhbmRLaW5kXCIsXCJ0eXBlXCI6XCJQYXJ0aWNpcGFudEJhbmRLaW5kXCIsXCJpc0F0dHJcIjp0cnVlfSx7XCJuYW1lXCI6XCJjaG9yZW9ncmFwaHlBY3Rpdml0eVNoYXBlXCIsXCJ0eXBlXCI6XCJCUE1OU2hhcGVcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9XSxcInN1cGVyQ2xhc3NcIjpbXCJkaTpMYWJlbGVkU2hhcGVcIl19LHtcIm5hbWVcIjpcIkJQTU5FZGdlXCIsXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImxhYmVsXCIsXCJ0eXBlXCI6XCJCUE1OTGFiZWxcIn0se1wibmFtZVwiOlwiYnBtbkVsZW1lbnRcIixcImlzQXR0clwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWUsXCJ0eXBlXCI6XCJicG1uOkJhc2VFbGVtZW50XCIsXCJyZWRlZmluZXNcIjpcImRpOkRpYWdyYW1FbGVtZW50I21vZGVsRWxlbWVudFwifSx7XCJuYW1lXCI6XCJzb3VyY2VFbGVtZW50XCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlLFwidHlwZVwiOlwiZGk6RGlhZ3JhbUVsZW1lbnRcIixcInJlZGVmaW5lc1wiOlwiZGk6RWRnZSNzb3VyY2VcIn0se1wibmFtZVwiOlwidGFyZ2V0RWxlbWVudFwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZSxcInR5cGVcIjpcImRpOkRpYWdyYW1FbGVtZW50XCIsXCJyZWRlZmluZXNcIjpcImRpOkVkZ2UjdGFyZ2V0XCJ9LHtcIm5hbWVcIjpcIm1lc3NhZ2VWaXNpYmxlS2luZFwiLFwidHlwZVwiOlwiTWVzc2FnZVZpc2libGVLaW5kXCIsXCJpc0F0dHJcIjp0cnVlLFwiZGVmYXVsdFwiOlwiaW5pdGlhdGluZ1wifV0sXCJzdXBlckNsYXNzXCI6W1wiZGk6TGFiZWxlZEVkZ2VcIl19LHtcIm5hbWVcIjpcIkJQTU5MYWJlbFwiLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJsYWJlbFN0eWxlXCIsXCJ0eXBlXCI6XCJCUE1OTGFiZWxTdHlsZVwiLFwiaXNBdHRyXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZSxcInJlZGVmaW5lc1wiOlwiZGk6RGlhZ3JhbUVsZW1lbnQjc3R5bGVcIn1dLFwic3VwZXJDbGFzc1wiOltcImRpOkxhYmVsXCJdfSx7XCJuYW1lXCI6XCJCUE1OTGFiZWxTdHlsZVwiLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJmb250XCIsXCJ0eXBlXCI6XCJkYzpGb250XCJ9XSxcInN1cGVyQ2xhc3NcIjpbXCJkaTpTdHlsZVwiXX1dLFwiZW51bWVyYXRpb25zXCI6W3tcIm5hbWVcIjpcIlBhcnRpY2lwYW50QmFuZEtpbmRcIixcImxpdGVyYWxWYWx1ZXNcIjpbe1wibmFtZVwiOlwidG9wX2luaXRpYXRpbmdcIn0se1wibmFtZVwiOlwibWlkZGxlX2luaXRpYXRpbmdcIn0se1wibmFtZVwiOlwiYm90dG9tX2luaXRpYXRpbmdcIn0se1wibmFtZVwiOlwidG9wX25vbl9pbml0aWF0aW5nXCJ9LHtcIm5hbWVcIjpcIm1pZGRsZV9ub25faW5pdGlhdGluZ1wifSx7XCJuYW1lXCI6XCJib3R0b21fbm9uX2luaXRpYXRpbmdcIn1dfSx7XCJuYW1lXCI6XCJNZXNzYWdlVmlzaWJsZUtpbmRcIixcImxpdGVyYWxWYWx1ZXNcIjpbe1wibmFtZVwiOlwiaW5pdGlhdGluZ1wifSx7XCJuYW1lXCI6XCJub25faW5pdGlhdGluZ1wifV19XSxcImFzc29jaWF0aW9uc1wiOltdLFwicHJlZml4XCI6XCJicG1uZGlcIn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9mZWF0dXJlcy94bWwveG1sbnMvYnBtbmRpLmpzb25cbi8vIG1vZHVsZSBpZCA9IDQzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///43\n"); + +/***/ }), +/* 44 */ +/***/ (function(module, exports) { + +eval("module.exports = {\"name\":\"DC\",\"uri\":\"http://www.omg.org/spec/DD/20100524/DC\",\"types\":[{\"name\":\"Boolean\"},{\"name\":\"Integer\"},{\"name\":\"Real\"},{\"name\":\"String\"},{\"name\":\"Font\",\"properties\":[{\"name\":\"name\",\"type\":\"String\",\"isAttr\":true},{\"name\":\"size\",\"type\":\"Real\",\"isAttr\":true},{\"name\":\"isBold\",\"type\":\"Boolean\",\"isAttr\":true},{\"name\":\"isItalic\",\"type\":\"Boolean\",\"isAttr\":true},{\"name\":\"isUnderline\",\"type\":\"Boolean\",\"isAttr\":true},{\"name\":\"isStrikeThrough\",\"type\":\"Boolean\",\"isAttr\":true}]},{\"name\":\"Point\",\"properties\":[{\"name\":\"x\",\"type\":\"Real\",\"default\":\"0\",\"isAttr\":true},{\"name\":\"y\",\"type\":\"Real\",\"default\":\"0\",\"isAttr\":true}]},{\"name\":\"Bounds\",\"properties\":[{\"name\":\"x\",\"type\":\"Real\",\"default\":\"0\",\"isAttr\":true},{\"name\":\"y\",\"type\":\"Real\",\"default\":\"0\",\"isAttr\":true},{\"name\":\"width\",\"type\":\"Real\",\"isAttr\":true},{\"name\":\"height\",\"type\":\"Real\",\"isAttr\":true}]}],\"prefix\":\"dc\",\"associations\":[]}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDQuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmVhdHVyZXMveG1sL3htbG5zL2RjLmpzb24/NzgyNCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHtcIm5hbWVcIjpcIkRDXCIsXCJ1cmlcIjpcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0RELzIwMTAwNTI0L0RDXCIsXCJ0eXBlc1wiOlt7XCJuYW1lXCI6XCJCb29sZWFuXCJ9LHtcIm5hbWVcIjpcIkludGVnZXJcIn0se1wibmFtZVwiOlwiUmVhbFwifSx7XCJuYW1lXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwiRm9udFwiLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJuYW1lXCIsXCJ0eXBlXCI6XCJTdHJpbmdcIixcImlzQXR0clwiOnRydWV9LHtcIm5hbWVcIjpcInNpemVcIixcInR5cGVcIjpcIlJlYWxcIixcImlzQXR0clwiOnRydWV9LHtcIm5hbWVcIjpcImlzQm9sZFwiLFwidHlwZVwiOlwiQm9vbGVhblwiLFwiaXNBdHRyXCI6dHJ1ZX0se1wibmFtZVwiOlwiaXNJdGFsaWNcIixcInR5cGVcIjpcIkJvb2xlYW5cIixcImlzQXR0clwiOnRydWV9LHtcIm5hbWVcIjpcImlzVW5kZXJsaW5lXCIsXCJ0eXBlXCI6XCJCb29sZWFuXCIsXCJpc0F0dHJcIjp0cnVlfSx7XCJuYW1lXCI6XCJpc1N0cmlrZVRocm91Z2hcIixcInR5cGVcIjpcIkJvb2xlYW5cIixcImlzQXR0clwiOnRydWV9XX0se1wibmFtZVwiOlwiUG9pbnRcIixcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwieFwiLFwidHlwZVwiOlwiUmVhbFwiLFwiZGVmYXVsdFwiOlwiMFwiLFwiaXNBdHRyXCI6dHJ1ZX0se1wibmFtZVwiOlwieVwiLFwidHlwZVwiOlwiUmVhbFwiLFwiZGVmYXVsdFwiOlwiMFwiLFwiaXNBdHRyXCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJCb3VuZHNcIixcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwieFwiLFwidHlwZVwiOlwiUmVhbFwiLFwiZGVmYXVsdFwiOlwiMFwiLFwiaXNBdHRyXCI6dHJ1ZX0se1wibmFtZVwiOlwieVwiLFwidHlwZVwiOlwiUmVhbFwiLFwiZGVmYXVsdFwiOlwiMFwiLFwiaXNBdHRyXCI6dHJ1ZX0se1wibmFtZVwiOlwid2lkdGhcIixcInR5cGVcIjpcIlJlYWxcIixcImlzQXR0clwiOnRydWV9LHtcIm5hbWVcIjpcImhlaWdodFwiLFwidHlwZVwiOlwiUmVhbFwiLFwiaXNBdHRyXCI6dHJ1ZX1dfV0sXCJwcmVmaXhcIjpcImRjXCIsXCJhc3NvY2lhdGlvbnNcIjpbXX1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9mZWF0dXJlcy94bWwveG1sbnMvZGMuanNvblxuLy8gbW9kdWxlIGlkID0gNDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sIm1hcHBpbmdzIjoiQUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///44\n"); + +/***/ }), +/* 45 */ +/***/ (function(module, exports) { + +eval("module.exports = {\"name\":\"DI\",\"uri\":\"http://www.omg.org/spec/DD/20100524/DI\",\"types\":[{\"name\":\"DiagramElement\",\"isAbstract\":true,\"properties\":[{\"name\":\"id\",\"type\":\"String\",\"isAttr\":true,\"isId\":true},{\"name\":\"extension\",\"type\":\"Extension\"},{\"name\":\"owningDiagram\",\"type\":\"Diagram\",\"isReadOnly\":true,\"isVirtual\":true,\"isReference\":true},{\"name\":\"owningElement\",\"type\":\"DiagramElement\",\"isReadOnly\":true,\"isVirtual\":true,\"isReference\":true},{\"name\":\"modelElement\",\"isReadOnly\":true,\"isVirtual\":true,\"isReference\":true,\"type\":\"Element\"},{\"name\":\"style\",\"type\":\"Style\",\"isReadOnly\":true,\"isVirtual\":true,\"isReference\":true},{\"name\":\"ownedElement\",\"type\":\"DiagramElement\",\"isReadOnly\":true,\"isVirtual\":true,\"isMany\":true}]},{\"name\":\"Node\",\"isAbstract\":true,\"superClass\":[\"DiagramElement\"]},{\"name\":\"Edge\",\"isAbstract\":true,\"superClass\":[\"DiagramElement\"],\"properties\":[{\"name\":\"source\",\"type\":\"DiagramElement\",\"isReadOnly\":true,\"isVirtual\":true,\"isReference\":true},{\"name\":\"target\",\"type\":\"DiagramElement\",\"isReadOnly\":true,\"isVirtual\":true,\"isReference\":true},{\"name\":\"waypoint\",\"isUnique\":false,\"isMany\":true,\"type\":\"dc:Point\",\"xml\":{\"serialize\":\"xsi:type\"}}]},{\"name\":\"Diagram\",\"isAbstract\":true,\"properties\":[{\"name\":\"id\",\"type\":\"String\",\"isAttr\":true,\"isId\":true},{\"name\":\"rootElement\",\"type\":\"DiagramElement\",\"isReadOnly\":true,\"isVirtual\":true},{\"name\":\"name\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"documentation\",\"isAttr\":true,\"type\":\"String\"},{\"name\":\"resolution\",\"isAttr\":true,\"type\":\"Real\"},{\"name\":\"ownedStyle\",\"type\":\"Style\",\"isReadOnly\":true,\"isVirtual\":true,\"isMany\":true}]},{\"name\":\"Shape\",\"isAbstract\":true,\"superClass\":[\"Node\"],\"properties\":[{\"name\":\"bounds\",\"type\":\"dc:Bounds\"}]},{\"name\":\"Plane\",\"isAbstract\":true,\"superClass\":[\"Node\"],\"properties\":[{\"name\":\"planeElement\",\"type\":\"DiagramElement\",\"subsettedProperty\":\"DiagramElement-ownedElement\",\"isMany\":true}]},{\"name\":\"LabeledEdge\",\"isAbstract\":true,\"superClass\":[\"Edge\"],\"properties\":[{\"name\":\"ownedLabel\",\"type\":\"Label\",\"isReadOnly\":true,\"subsettedProperty\":\"DiagramElement-ownedElement\",\"isVirtual\":true,\"isMany\":true}]},{\"name\":\"LabeledShape\",\"isAbstract\":true,\"superClass\":[\"Shape\"],\"properties\":[{\"name\":\"ownedLabel\",\"type\":\"Label\",\"isReadOnly\":true,\"subsettedProperty\":\"DiagramElement-ownedElement\",\"isVirtual\":true,\"isMany\":true}]},{\"name\":\"Label\",\"isAbstract\":true,\"superClass\":[\"Node\"],\"properties\":[{\"name\":\"bounds\",\"type\":\"dc:Bounds\"}]},{\"name\":\"Style\",\"isAbstract\":true,\"properties\":[{\"name\":\"id\",\"type\":\"String\",\"isAttr\":true,\"isId\":true}]},{\"name\":\"Extension\",\"properties\":[{\"name\":\"values\",\"type\":\"Element\",\"isMany\":true}]}],\"associations\":[],\"prefix\":\"di\",\"xml\":{\"tagAlias\":\"lowerCase\"}}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvZmVhdHVyZXMveG1sL3htbG5zL2RpLmpzb24/OGZiZSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHtcIm5hbWVcIjpcIkRJXCIsXCJ1cmlcIjpcImh0dHA6Ly93d3cub21nLm9yZy9zcGVjL0RELzIwMTAwNTI0L0RJXCIsXCJ0eXBlc1wiOlt7XCJuYW1lXCI6XCJEaWFncmFtRWxlbWVudFwiLFwiaXNBYnN0cmFjdFwiOnRydWUsXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImlkXCIsXCJ0eXBlXCI6XCJTdHJpbmdcIixcImlzQXR0clwiOnRydWUsXCJpc0lkXCI6dHJ1ZX0se1wibmFtZVwiOlwiZXh0ZW5zaW9uXCIsXCJ0eXBlXCI6XCJFeHRlbnNpb25cIn0se1wibmFtZVwiOlwib3duaW5nRGlhZ3JhbVwiLFwidHlwZVwiOlwiRGlhZ3JhbVwiLFwiaXNSZWFkT25seVwiOnRydWUsXCJpc1ZpcnR1YWxcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJvd25pbmdFbGVtZW50XCIsXCJ0eXBlXCI6XCJEaWFncmFtRWxlbWVudFwiLFwiaXNSZWFkT25seVwiOnRydWUsXCJpc1ZpcnR1YWxcIjp0cnVlLFwiaXNSZWZlcmVuY2VcIjp0cnVlfSx7XCJuYW1lXCI6XCJtb2RlbEVsZW1lbnRcIixcImlzUmVhZE9ubHlcIjp0cnVlLFwiaXNWaXJ0dWFsXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZSxcInR5cGVcIjpcIkVsZW1lbnRcIn0se1wibmFtZVwiOlwic3R5bGVcIixcInR5cGVcIjpcIlN0eWxlXCIsXCJpc1JlYWRPbmx5XCI6dHJ1ZSxcImlzVmlydHVhbFwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcIm93bmVkRWxlbWVudFwiLFwidHlwZVwiOlwiRGlhZ3JhbUVsZW1lbnRcIixcImlzUmVhZE9ubHlcIjp0cnVlLFwiaXNWaXJ0dWFsXCI6dHJ1ZSxcImlzTWFueVwiOnRydWV9XX0se1wibmFtZVwiOlwiTm9kZVwiLFwiaXNBYnN0cmFjdFwiOnRydWUsXCJzdXBlckNsYXNzXCI6W1wiRGlhZ3JhbUVsZW1lbnRcIl19LHtcIm5hbWVcIjpcIkVkZ2VcIixcImlzQWJzdHJhY3RcIjp0cnVlLFwic3VwZXJDbGFzc1wiOltcIkRpYWdyYW1FbGVtZW50XCJdLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJzb3VyY2VcIixcInR5cGVcIjpcIkRpYWdyYW1FbGVtZW50XCIsXCJpc1JlYWRPbmx5XCI6dHJ1ZSxcImlzVmlydHVhbFwiOnRydWUsXCJpc1JlZmVyZW5jZVwiOnRydWV9LHtcIm5hbWVcIjpcInRhcmdldFwiLFwidHlwZVwiOlwiRGlhZ3JhbUVsZW1lbnRcIixcImlzUmVhZE9ubHlcIjp0cnVlLFwiaXNWaXJ0dWFsXCI6dHJ1ZSxcImlzUmVmZXJlbmNlXCI6dHJ1ZX0se1wibmFtZVwiOlwid2F5cG9pbnRcIixcImlzVW5pcXVlXCI6ZmFsc2UsXCJpc01hbnlcIjp0cnVlLFwidHlwZVwiOlwiZGM6UG9pbnRcIixcInhtbFwiOntcInNlcmlhbGl6ZVwiOlwieHNpOnR5cGVcIn19XX0se1wibmFtZVwiOlwiRGlhZ3JhbVwiLFwiaXNBYnN0cmFjdFwiOnRydWUsXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImlkXCIsXCJ0eXBlXCI6XCJTdHJpbmdcIixcImlzQXR0clwiOnRydWUsXCJpc0lkXCI6dHJ1ZX0se1wibmFtZVwiOlwicm9vdEVsZW1lbnRcIixcInR5cGVcIjpcIkRpYWdyYW1FbGVtZW50XCIsXCJpc1JlYWRPbmx5XCI6dHJ1ZSxcImlzVmlydHVhbFwiOnRydWV9LHtcIm5hbWVcIjpcIm5hbWVcIixcImlzQXR0clwiOnRydWUsXCJ0eXBlXCI6XCJTdHJpbmdcIn0se1wibmFtZVwiOlwiZG9jdW1lbnRhdGlvblwiLFwiaXNBdHRyXCI6dHJ1ZSxcInR5cGVcIjpcIlN0cmluZ1wifSx7XCJuYW1lXCI6XCJyZXNvbHV0aW9uXCIsXCJpc0F0dHJcIjp0cnVlLFwidHlwZVwiOlwiUmVhbFwifSx7XCJuYW1lXCI6XCJvd25lZFN0eWxlXCIsXCJ0eXBlXCI6XCJTdHlsZVwiLFwiaXNSZWFkT25seVwiOnRydWUsXCJpc1ZpcnR1YWxcIjp0cnVlLFwiaXNNYW55XCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJTaGFwZVwiLFwiaXNBYnN0cmFjdFwiOnRydWUsXCJzdXBlckNsYXNzXCI6W1wiTm9kZVwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwiYm91bmRzXCIsXCJ0eXBlXCI6XCJkYzpCb3VuZHNcIn1dfSx7XCJuYW1lXCI6XCJQbGFuZVwiLFwiaXNBYnN0cmFjdFwiOnRydWUsXCJzdXBlckNsYXNzXCI6W1wiTm9kZVwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwicGxhbmVFbGVtZW50XCIsXCJ0eXBlXCI6XCJEaWFncmFtRWxlbWVudFwiLFwic3Vic2V0dGVkUHJvcGVydHlcIjpcIkRpYWdyYW1FbGVtZW50LW93bmVkRWxlbWVudFwiLFwiaXNNYW55XCI6dHJ1ZX1dfSx7XCJuYW1lXCI6XCJMYWJlbGVkRWRnZVwiLFwiaXNBYnN0cmFjdFwiOnRydWUsXCJzdXBlckNsYXNzXCI6W1wiRWRnZVwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwib3duZWRMYWJlbFwiLFwidHlwZVwiOlwiTGFiZWxcIixcImlzUmVhZE9ubHlcIjp0cnVlLFwic3Vic2V0dGVkUHJvcGVydHlcIjpcIkRpYWdyYW1FbGVtZW50LW93bmVkRWxlbWVudFwiLFwiaXNWaXJ0dWFsXCI6dHJ1ZSxcImlzTWFueVwiOnRydWV9XX0se1wibmFtZVwiOlwiTGFiZWxlZFNoYXBlXCIsXCJpc0Fic3RyYWN0XCI6dHJ1ZSxcInN1cGVyQ2xhc3NcIjpbXCJTaGFwZVwiXSxcInByb3BlcnRpZXNcIjpbe1wibmFtZVwiOlwib3duZWRMYWJlbFwiLFwidHlwZVwiOlwiTGFiZWxcIixcImlzUmVhZE9ubHlcIjp0cnVlLFwic3Vic2V0dGVkUHJvcGVydHlcIjpcIkRpYWdyYW1FbGVtZW50LW93bmVkRWxlbWVudFwiLFwiaXNWaXJ0dWFsXCI6dHJ1ZSxcImlzTWFueVwiOnRydWV9XX0se1wibmFtZVwiOlwiTGFiZWxcIixcImlzQWJzdHJhY3RcIjp0cnVlLFwic3VwZXJDbGFzc1wiOltcIk5vZGVcIl0sXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcImJvdW5kc1wiLFwidHlwZVwiOlwiZGM6Qm91bmRzXCJ9XX0se1wibmFtZVwiOlwiU3R5bGVcIixcImlzQWJzdHJhY3RcIjp0cnVlLFwicHJvcGVydGllc1wiOlt7XCJuYW1lXCI6XCJpZFwiLFwidHlwZVwiOlwiU3RyaW5nXCIsXCJpc0F0dHJcIjp0cnVlLFwiaXNJZFwiOnRydWV9XX0se1wibmFtZVwiOlwiRXh0ZW5zaW9uXCIsXCJwcm9wZXJ0aWVzXCI6W3tcIm5hbWVcIjpcInZhbHVlc1wiLFwidHlwZVwiOlwiRWxlbWVudFwiLFwiaXNNYW55XCI6dHJ1ZX1dfV0sXCJhc3NvY2lhdGlvbnNcIjpbXSxcInByZWZpeFwiOlwiZGlcIixcInhtbFwiOntcInRhZ0FsaWFzXCI6XCJsb3dlckNhc2VcIn19XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvZmVhdHVyZXMveG1sL3htbG5zL2RpLmpzb25cbi8vIG1vZHVsZSBpZCA9IDQ1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJtYXBwaW5ncyI6IkFBQUEiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///45\n"); + +/***/ }), +/* 46 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__background__ = __webpack_require__(47);\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0__background__[\"a\" /* default */]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2JhY2tncm91bmQvaW5kZXguanM/YjI3YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFja2dyb3VuZCBmcm9tICcuL2JhY2tncm91bmQnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBCYWNrZ3JvdW5kXHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZmVhdHVyZXMvYmFja2dyb3VuZC9pbmRleC5qcyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///46\n"); + +/***/ }), +/* 47 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_utils__ = __webpack_require__(1);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\nvar DEFAULT_CONFIG = {\n show: true,\n size: 15\n};\n\nvar Background = function () {\n function Background($container, options, config) {\n _classCallCheck(this, Background);\n\n this.$container = $container;\n\n this.options = options;\n\n this.config = Object.assign({}, DEFAULT_CONFIG, config);\n\n this.renderBG();\n }\n\n _createClass(Background, [{\n key: 'renderBG',\n value: function renderBG() {\n var $container = this.$container,\n options = this.options,\n config = this.config;\n\n\n if (config.show) {\n var pageWidth = options.pageStyle.width;\n var pageHeight = options.pageStyle.height;\n\n var pageBackGroundColor = options.pageStyle.backgroundColor;\n var darkerBGColor = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getDarkerColor(pageBackGroundColor);\n var darkestBGColor = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getDarkestColor(pageBackGroundColor);\n\n var $designer = $container.find('.bpd-designer');\n\n var $bg = $designer.find('.shape-background');\n if ($bg.length === 0) {\n $bg = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])('').appendTo($designer);\n }\n\n $bg.attr({ width: pageWidth, height: pageHeight });\n var canvas2D = $bg[0].getContext('2d');\n canvas2D.clearRect(0, 0, pageWidth, pageHeight);\n\n var padding = 0;\n var contentWidth = pageWidth - padding * 2;\n var contentHeight = pageHeight - padding * 2;\n\n canvas2D.fillStyle = 'rgb(' + pageBackGroundColor + ')';\n canvas2D.beginPath();\n canvas2D.rect(padding, padding, contentWidth, contentHeight);\n canvas2D.fill();\n // 画网格\n var gridSize = Math.round(Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(config.size));\n if (gridSize < 10) {\n gridSize = 10;\n }\n\n canvas2D.translate(padding, padding);\n canvas2D.lineWidth = 1;\n canvas2D.save();\n\n var j = 0.5;\n var i = 0;\n while (j <= contentHeight) {\n canvas2D.restore();\n if (i % 4 === 0) {\n canvas2D.strokeStyle = 'rgb(' + darkestBGColor + ')';\n } else {\n canvas2D.strokeStyle = 'rgb(' + darkerBGColor + ')';\n }\n canvas2D.beginPath();\n canvas2D.moveTo(0, j);\n canvas2D.lineTo(contentWidth, j);\n j += gridSize;\n i++;\n canvas2D.stroke();\n }\n j = 0.5;\n i = 0;\n while (j <= contentWidth) {\n canvas2D.restore();\n if (i % 4 === 0) {\n canvas2D.strokeStyle = 'rgb(' + darkestBGColor + ')';\n } else {\n canvas2D.strokeStyle = 'rgb(' + darkerBGColor + ')';\n }\n canvas2D.beginPath();\n canvas2D.moveTo(j, 0);\n canvas2D.lineTo(j, contentHeight);\n j += gridSize;\n i++;\n canvas2D.stroke();\n }\n }\n }\n }]);\n\n return Background;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Background);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2JhY2tncm91bmQvYmFja2dyb3VuZC5qcz9hMDE0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBldmVudEJ1cyBmcm9tICcuLi8uLi9jb3JlL2V2ZW50QnVzJ1xyXG5pbXBvcnQgJCBmcm9tICcuLi8uLi91dGlscy9zbGltSlEnXHJcblxyXG5pbXBvcnQgRHJhd1V0aWxzIGZyb20gJy4uLy4uL2RyYXcvZHJhd1V0aWxzJ1xyXG5pbXBvcnQgeyBzZXRTY2FsZSwgcmVzdG9yZVNjYWxlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnXHJcblxyXG5jb25zdCBERUZBVUxUX0NPTkZJRyA9IHtcclxuICBzaG93OiB0cnVlLFxyXG4gIHNpemU6IDE1XHJcbn1cclxuXHJcbmNsYXNzIEJhY2tncm91bmQge1xyXG4gIGNvbnN0cnVjdG9yKCRjb250YWluZXIsIG9wdGlvbnMsIGNvbmZpZykge1xyXG4gICAgdGhpcy4kY29udGFpbmVyID0gJGNvbnRhaW5lclxyXG5cclxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcclxuXHJcbiAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLCBjb25maWcpXHJcblxyXG4gICAgdGhpcy5yZW5kZXJCRygpXHJcbiAgfVxyXG5cclxuICByZW5kZXJCRygpIHtcclxuICAgIGNvbnN0IHsgJGNvbnRhaW5lciwgb3B0aW9ucywgY29uZmlnIH0gPSB0aGlzXHJcblxyXG4gICAgaWYgKGNvbmZpZy5zaG93KSB7XHJcbiAgICAgIGNvbnN0IHBhZ2VXaWR0aCA9IG9wdGlvbnMucGFnZVN0eWxlLndpZHRoXHJcbiAgICAgIGNvbnN0IHBhZ2VIZWlnaHQgPSBvcHRpb25zLnBhZ2VTdHlsZS5oZWlnaHRcclxuXHJcbiAgICAgIGNvbnN0IHBhZ2VCYWNrR3JvdW5kQ29sb3IgPSBvcHRpb25zLnBhZ2VTdHlsZS5iYWNrZ3JvdW5kQ29sb3JcclxuICAgICAgY29uc3QgZGFya2VyQkdDb2xvciA9IERyYXdVdGlscy5nZXREYXJrZXJDb2xvcihwYWdlQmFja0dyb3VuZENvbG9yKVxyXG4gICAgICBjb25zdCBkYXJrZXN0QkdDb2xvciA9IERyYXdVdGlscy5nZXREYXJrZXN0Q29sb3IocGFnZUJhY2tHcm91bmRDb2xvcilcclxuXHJcbiAgICAgIGNvbnN0ICRkZXNpZ25lciA9ICRjb250YWluZXIuZmluZCgnLmJwZC1kZXNpZ25lcicpXHJcblxyXG4gICAgICBsZXQgJGJnID0gJGRlc2lnbmVyLmZpbmQoJy5zaGFwZS1iYWNrZ3JvdW5kJylcclxuICAgICAgaWYgKCRiZy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAkYmcgPSAkKCc8Y2FudmFzIGNsYXNzPVwic2hhcGUtYmFja2dyb3VuZFwiPjwvY2FudmFzPicpLmFwcGVuZFRvKFxyXG4gICAgICAgICAgJGRlc2lnbmVyXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcblxyXG4gICAgICAkYmcuYXR0cih7IHdpZHRoOiBwYWdlV2lkdGgsIGhlaWdodDogcGFnZUhlaWdodCB9KVxyXG4gICAgICBjb25zdCBjYW52YXMyRCA9ICRiZ1swXS5nZXRDb250ZXh0KCcyZCcpXHJcbiAgICAgIGNhbnZhczJELmNsZWFyUmVjdCgwLCAwLCBwYWdlV2lkdGgsIHBhZ2VIZWlnaHQpXHJcblxyXG4gICAgICBsZXQgcGFkZGluZyA9IDBcclxuICAgICAgbGV0IGNvbnRlbnRXaWR0aCA9IHBhZ2VXaWR0aCAtIHBhZGRpbmcgKiAyXHJcbiAgICAgIGxldCBjb250ZW50SGVpZ2h0ID0gcGFnZUhlaWdodCAtIHBhZGRpbmcgKiAyXHJcblxyXG4gICAgICBjYW52YXMyRC5maWxsU3R5bGUgPSAncmdiKCcgKyBwYWdlQmFja0dyb3VuZENvbG9yICsgJyknXHJcbiAgICAgIGNhbnZhczJELmJlZ2luUGF0aCgpXHJcbiAgICAgIGNhbnZhczJELnJlY3QocGFkZGluZywgcGFkZGluZywgY29udGVudFdpZHRoLCBjb250ZW50SGVpZ2h0KVxyXG4gICAgICBjYW52YXMyRC5maWxsKClcclxuICAgICAgLy8g55S7572R5qC8XHJcbiAgICAgIGxldCBncmlkU2l6ZSA9IE1hdGgucm91bmQoc2V0U2NhbGUoY29uZmlnLnNpemUpKVxyXG4gICAgICBpZiAoZ3JpZFNpemUgPCAxMCkge1xyXG4gICAgICAgIGdyaWRTaXplID0gMTBcclxuICAgICAgfVxyXG5cclxuICAgICAgY2FudmFzMkQudHJhbnNsYXRlKHBhZGRpbmcsIHBhZGRpbmcpXHJcbiAgICAgIGNhbnZhczJELmxpbmVXaWR0aCA9IDFcclxuICAgICAgY2FudmFzMkQuc2F2ZSgpXHJcblxyXG4gICAgICBsZXQgaiA9IDAuNVxyXG4gICAgICBsZXQgaSA9IDBcclxuICAgICAgd2hpbGUgKGogPD0gY29udGVudEhlaWdodCkge1xyXG4gICAgICAgIGNhbnZhczJELnJlc3RvcmUoKVxyXG4gICAgICAgIGlmIChpICUgNCA9PT0gMCkge1xyXG4gICAgICAgICAgY2FudmFzMkQuc3Ryb2tlU3R5bGUgPSAncmdiKCcgKyBkYXJrZXN0QkdDb2xvciArICcpJ1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjYW52YXMyRC5zdHJva2VTdHlsZSA9ICdyZ2IoJyArIGRhcmtlckJHQ29sb3IgKyAnKSdcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FudmFzMkQuYmVnaW5QYXRoKClcclxuICAgICAgICBjYW52YXMyRC5tb3ZlVG8oMCwgailcclxuICAgICAgICBjYW52YXMyRC5saW5lVG8oY29udGVudFdpZHRoLCBqKVxyXG4gICAgICAgIGogKz0gZ3JpZFNpemVcclxuICAgICAgICBpKytcclxuICAgICAgICBjYW52YXMyRC5zdHJva2UoKVxyXG4gICAgICB9XHJcbiAgICAgIGogPSAwLjVcclxuICAgICAgaSA9IDBcclxuICAgICAgd2hpbGUgKGogPD0gY29udGVudFdpZHRoKSB7XHJcbiAgICAgICAgY2FudmFzMkQucmVzdG9yZSgpXHJcbiAgICAgICAgaWYgKGkgJSA0ID09PSAwKSB7XHJcbiAgICAgICAgICBjYW52YXMyRC5zdHJva2VTdHlsZSA9ICdyZ2IoJyArIGRhcmtlc3RCR0NvbG9yICsgJyknXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNhbnZhczJELnN0cm9rZVN0eWxlID0gJ3JnYignICsgZGFya2VyQkdDb2xvciArICcpJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYW52YXMyRC5iZWdpblBhdGgoKVxyXG4gICAgICAgIGNhbnZhczJELm1vdmVUbyhqLCAwKVxyXG4gICAgICAgIGNhbnZhczJELmxpbmVUbyhqLCBjb250ZW50SGVpZ2h0KVxyXG4gICAgICAgIGogKz0gZ3JpZFNpemVcclxuICAgICAgICBpKytcclxuICAgICAgICBjYW52YXMyRC5zdHJva2UoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCYWNrZ3JvdW5kXHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZmVhdHVyZXMvYmFja2dyb3VuZC9iYWNrZ3JvdW5kLmpzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///47\n"); + +/***/ }), +/* 48 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__direction__ = __webpack_require__(49);\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0__direction__[\"a\" /* default */]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDguanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2RpcmVjdGlvbi9pbmRleC5qcz81NzIzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEaXJlY3Rpb24gZnJvbSAnLi9kaXJlY3Rpb24nXHJcblxyXG5leHBvcnQgZGVmYXVsdCBEaXJlY3Rpb25cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9mZWF0dXJlcy9kaXJlY3Rpb24vaW5kZXguanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///48\n"); + +/***/ }), +/* 49 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_utils__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__draw_drawUtils__ = __webpack_require__(2);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\nvar DEFAULT_CONFIG = {};\n\nvar Direction = function () {\n function Direction($container, config) {\n _classCallCheck(this, Direction);\n\n this.$container = $container;\n\n this.config = Object.assign({}, DEFAULT_CONFIG, config);\n\n this.interval = null;\n\n this.init();\n }\n\n _createClass(Direction, [{\n key: 'init',\n value: function init() {\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('direction.show', this.showDirection.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('direction.hide', this.hideDirection.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('select.clear', this.hideDirection.bind(this));\n }\n\n /**\r\n * 显示\r\n */\n\n }, {\n key: 'showDirection',\n value: function showDirection() {\n this.hideDirection();\n var selectIds = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.getIds');\n if (selectIds.length === 1) {\n var element = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get', selectIds[0]);\n var data = element.data,\n plane = element.plane,\n shape = element.shape;\n\n if (shape.bpmnName !== 'SequenceFlow') {\n var connections = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('connections.get', data.id);\n if (connections && connections.length) {\n var directionList = [];\n for (var i = 0; i < connections.length; i += 1) {\n var connection = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get', connections[i]);\n if (data.id !== connection.data.sourceRef || !connection.data.targetRef) {\n continue;\n }\n var length = Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(__WEBPACK_IMPORTED_MODULE_3__draw_drawUtils__[\"a\" /* default */].getConnectionLength(connection));\n var points = [];\n if (connection.shape.linkerType === 'broken') {\n var waypoint = connection.plane.waypoint;\n points.push({\n x: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(waypoint[0].x),\n y: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(waypoint[0].y),\n t: 0\n });\n for (var j = 0; j < connection.shape.points.length; j += 1) {\n var point = connection.shape.points[j];\n points.push({ x: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(point.x), y: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(point.y) });\n }\n points.push({\n x: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(waypoint[waypoint.length - 1].x),\n y: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(waypoint[waypoint.length - 1].y)\n });\n var distance = 0;\n for (var _j = 1; _j < points.length; _j += 1) {\n var point1 = points[_j - 1];\n var point2 = points[_j];\n distance += __WEBPACK_IMPORTED_MODULE_3__draw_drawUtils__[\"a\" /* default */].measureDistance(point1, point2);\n point2.t = distance / length;\n }\n }\n var step = 3 / length;\n var maxT = Math.ceil(length / 120) * 120 / length;\n var num = 0;\n while (num < length) {\n directionList.push({\n t: num / length,\n step: step,\n connection: connection,\n points: points,\n maxT: maxT\n });\n num += 120;\n }\n }\n this.playDirection(directionList);\n }\n }\n }\n }\n\n /**\r\n *\r\n * @param {*} directionList\r\n */\n\n }, {\n key: 'playDirection',\n value: function playDirection(directionList) {\n var $container = this.$container,\n options = this.options;\n\n\n var $designer = $container.find('.bpd-designer');\n\n for (var i = 0; i < directionList.length; i += 1) {\n var item = directionList[i];\n\n var _item$connection = item.connection,\n data = _item$connection.data,\n plane = _item$connection.plane,\n shape = _item$connection.shape;\n\n\n var $direction = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(\"
\").appendTo($designer);\n var lineWidth = Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(shape.lineStyle.lineWidth + 2);\n if (lineWidth < 5) {\n lineWidth = 5;\n }\n var halfWidth = lineWidth / 2;\n item.half = halfWidth;\n item.dom = $direction;\n $direction.css({\n width: lineWidth,\n height: lineWidth,\n '-webkit-border-radius': halfWidth,\n '-moz-border-radius': halfWidth,\n '-ms-border-radius': halfWidth,\n '-o-border-radius': halfWidth,\n 'border-radius': halfWidth,\n 'z-index': Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])('#' + data.id).css('z-index')\n });\n }\n this.interval = setInterval(function () {\n for (var _i = 0; _i < directionList.length; _i += 1) {\n var _item = directionList[_i];\n var _item$connection2 = _item.connection,\n _data = _item$connection2.data,\n _plane = _item$connection2.plane,\n _shape = _item$connection2.shape;\n\n if (_item.t >= _item.maxT) {\n _item.t = 0;\n _item.dom.show();\n }\n var t = _item.t;\n if (_shape.linkerType === 'broken') {\n for (var j = 1; j < _item.points.length; j++) {\n var point1 = _item.points[j - 1];\n var point2 = _item.points[j];\n if (t >= point1.t && t < point2.t) {\n var num = (t - point1.t) / (point2.t - point1.t);\n var left = (1 - num) * point1.x + num * point2.x;\n var top = (1 - num) * point1.y + num * point2.y;\n _item.dom.css({ left: left - _item.half, top: top - _item.half });\n break;\n }\n }\n } else {\n var source = _plane.waypoint[0];\n var target = _plane.waypoint[_plane.waypoint.length - 1];\n if (_shape.linkerType === 'curve') {\n var _point = _shape.points[0];\n var _point2 = _shape.points[1];\n var _left = Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(source.x) * Math.pow(1 - t, 3) + Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(_point.x) * t * Math.pow(1 - t, 2) * 3 + Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(_point2.x) * Math.pow(t, 2) * (1 - t) * 3 + Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(target.x) * Math.pow(t, 3);\n var _top = Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(source.y) * Math.pow(1 - t, 3) + Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(_point.y) * t * Math.pow(1 - t, 2) * 3 + Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(_point2.y) * Math.pow(t, 2) * (1 - t) * 3 + Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(target.y) * Math.pow(t, 3);\n _item.dom.css({ left: _left - _item.half, top: _top - _item.half });\n } else {\n var _left2 = (1 - t) * Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(source.x) + t * Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(target.x);\n var _top2 = (1 - t) * Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(source.y) + t * Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(target.y);\n _item.dom.css({ left: _left2 - _item.half, top: _top2 - _item.half });\n }\n }\n _item.t += _item.step;\n if (_item.t >= 1) {\n _item.dom.hide();\n }\n }\n }, 30);\n }\n\n /**\r\n * 隐藏\r\n */\n\n }, {\n key: 'hideDirection',\n value: function hideDirection() {\n if (this.interval) {\n clearInterval(this.interval);\n }\n this.$container.find('.connection-direction').remove();\n }\n }]);\n\n return Direction;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Direction);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNDkuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2RpcmVjdGlvbi9kaXJlY3Rpb24uanM/Y2I0NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRCdXMgZnJvbSAnLi4vLi4vY29yZS9ldmVudEJ1cydcclxuaW1wb3J0ICQgZnJvbSAnLi4vLi4vdXRpbHMvc2xpbUpRJ1xyXG5cclxuaW1wb3J0IHsgc2V0U2NhbGUsIHJlc3RvcmVTY2FsZSwgbWVyZ2VBcnJheSB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJ1xyXG5pbXBvcnQgRHJhd1V0aWxzIGZyb20gJy4uLy4uL2RyYXcvZHJhd1V0aWxzJ1xyXG5cclxuY29uc3QgREVGQVVMVF9DT05GSUcgPSB7fVxyXG5cclxuY2xhc3MgRGlyZWN0aW9uIHtcclxuICBjb25zdHJ1Y3RvcigkY29udGFpbmVyLCBjb25maWcpIHtcclxuICAgIHRoaXMuJGNvbnRhaW5lciA9ICRjb250YWluZXJcclxuXHJcbiAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLCBjb25maWcpXHJcblxyXG4gICAgdGhpcy5pbnRlcnZhbCA9IG51bGxcclxuXHJcbiAgICB0aGlzLmluaXQoKVxyXG4gIH1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIC8vXHJcbiAgICBldmVudEJ1cy5vbignZGlyZWN0aW9uLnNob3cnLCB0aGlzLnNob3dEaXJlY3Rpb24uYmluZCh0aGlzKSlcclxuICAgIC8vXHJcbiAgICBldmVudEJ1cy5vbignZGlyZWN0aW9uLmhpZGUnLCB0aGlzLmhpZGVEaXJlY3Rpb24uYmluZCh0aGlzKSlcclxuICAgIC8vXHJcbiAgICBldmVudEJ1cy5vbignc2VsZWN0LmNsZWFyJywgdGhpcy5oaWRlRGlyZWN0aW9uLmJpbmQodGhpcykpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmmL7npLpcclxuICAgKi9cclxuICBzaG93RGlyZWN0aW9uKCkge1xyXG4gICAgdGhpcy5oaWRlRGlyZWN0aW9uKClcclxuICAgIGNvbnN0IHNlbGVjdElkcyA9IGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLnNlbGVjdC5nZXRJZHMnKVxyXG4gICAgaWYgKHNlbGVjdElkcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50QnVzLnRyaWdnZXIoJ2VsZW1lbnQuZ2V0Jywgc2VsZWN0SWRzWzBdKVxyXG4gICAgICBjb25zdCB7IGRhdGEsIHBsYW5lLCBzaGFwZSB9ID0gZWxlbWVudFxyXG4gICAgICBpZiAoc2hhcGUuYnBtbk5hbWUgIT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbnMgPSBldmVudEJ1cy50cmlnZ2VyKCdjb25uZWN0aW9ucy5nZXQnLCBkYXRhLmlkKVxyXG4gICAgICAgIGlmIChjb25uZWN0aW9ucyAmJiBjb25uZWN0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbkxpc3QgPSBbXVxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25uZWN0aW9ucy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gZXZlbnRCdXMudHJpZ2dlcignZWxlbWVudC5nZXQnLCBjb25uZWN0aW9uc1tpXSlcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIGRhdGEuaWQgIT09IGNvbm5lY3Rpb24uZGF0YS5zb3VyY2VSZWYgfHxcclxuICAgICAgICAgICAgICAhY29ubmVjdGlvbi5kYXRhLnRhcmdldFJlZlxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHNldFNjYWxlKERyYXdVdGlscy5nZXRDb25uZWN0aW9uTGVuZ3RoKGNvbm5lY3Rpb24pKVxyXG4gICAgICAgICAgICBjb25zdCBwb2ludHMgPSBbXVxyXG4gICAgICAgICAgICBpZiAoY29ubmVjdGlvbi5zaGFwZS5saW5rZXJUeXBlID09PSAnYnJva2VuJykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHdheXBvaW50ID0gY29ubmVjdGlvbi5wbGFuZS53YXlwb2ludFxyXG4gICAgICAgICAgICAgIHBvaW50cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHg6IHNldFNjYWxlKHdheXBvaW50WzBdLngpLFxyXG4gICAgICAgICAgICAgICAgeTogc2V0U2NhbGUod2F5cG9pbnRbMF0ueSksXHJcbiAgICAgICAgICAgICAgICB0OiAwXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbm5lY3Rpb24uc2hhcGUucG9pbnRzLmxlbmd0aDsgaiArPSAxKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludCA9IGNvbm5lY3Rpb24uc2hhcGUucG9pbnRzW2pdXHJcbiAgICAgICAgICAgICAgICBwb2ludHMucHVzaCh7IHg6IHNldFNjYWxlKHBvaW50LngpLCB5OiBzZXRTY2FsZShwb2ludC55KSB9KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBwb2ludHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB4OiBzZXRTY2FsZSh3YXlwb2ludFt3YXlwb2ludC5sZW5ndGggLSAxXS54KSxcclxuICAgICAgICAgICAgICAgIHk6IHNldFNjYWxlKHdheXBvaW50W3dheXBvaW50Lmxlbmd0aCAtIDFdLnkpXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICBsZXQgZGlzdGFuY2UgPSAwXHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBwb2ludHMubGVuZ3RoOyBqICs9IDEpIHtcclxuICAgICAgICAgICAgICAgIHZhciBwb2ludDEgPSBwb2ludHNbaiAtIDFdXHJcbiAgICAgICAgICAgICAgICB2YXIgcG9pbnQyID0gcG9pbnRzW2pdXHJcbiAgICAgICAgICAgICAgICBkaXN0YW5jZSArPSBEcmF3VXRpbHMubWVhc3VyZURpc3RhbmNlKHBvaW50MSwgcG9pbnQyKVxyXG4gICAgICAgICAgICAgICAgcG9pbnQyLnQgPSBkaXN0YW5jZSAvIGxlbmd0aFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzdGVwID0gMyAvIGxlbmd0aFxyXG4gICAgICAgICAgICBjb25zdCBtYXhUID0gKE1hdGguY2VpbChsZW5ndGggLyAxMjApICogMTIwKSAvIGxlbmd0aFxyXG4gICAgICAgICAgICBsZXQgbnVtID0gMFxyXG4gICAgICAgICAgICB3aGlsZSAobnVtIDwgbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgZGlyZWN0aW9uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHQ6IG51bSAvIGxlbmd0aCxcclxuICAgICAgICAgICAgICAgIHN0ZXAsXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgcG9pbnRzLFxyXG4gICAgICAgICAgICAgICAgbWF4VFxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgbnVtICs9IDEyMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBsYXlEaXJlY3Rpb24oZGlyZWN0aW9uTGlzdClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsqfSBkaXJlY3Rpb25MaXN0XHJcbiAgICovXHJcbiAgcGxheURpcmVjdGlvbihkaXJlY3Rpb25MaXN0KSB7XHJcbiAgICBjb25zdCB7ICRjb250YWluZXIsIG9wdGlvbnMgfSA9IHRoaXNcclxuXHJcbiAgICBjb25zdCAkZGVzaWduZXIgPSAkY29udGFpbmVyLmZpbmQoJy5icGQtZGVzaWduZXInKVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlyZWN0aW9uTGlzdC5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICBjb25zdCBpdGVtID0gZGlyZWN0aW9uTGlzdFtpXVxyXG5cclxuICAgICAgY29uc3QgeyBkYXRhLCBwbGFuZSwgc2hhcGUgfSA9IGl0ZW0uY29ubmVjdGlvblxyXG5cclxuICAgICAgY29uc3QgJGRpcmVjdGlvbiA9ICQoXCI8ZGl2IGNsYXNzPSdjb25uZWN0aW9uLWRpcmVjdGlvbic+PC9kaXY+XCIpLmFwcGVuZFRvKFxyXG4gICAgICAgICRkZXNpZ25lclxyXG4gICAgICApXHJcbiAgICAgIGxldCBsaW5lV2lkdGggPSBzZXRTY2FsZShzaGFwZS5saW5lU3R5bGUubGluZVdpZHRoICsgMilcclxuICAgICAgaWYgKGxpbmVXaWR0aCA8IDUpIHtcclxuICAgICAgICBsaW5lV2lkdGggPSA1XHJcbiAgICAgIH1cclxuICAgICAgdmFyIGhhbGZXaWR0aCA9IGxpbmVXaWR0aCAvIDJcclxuICAgICAgaXRlbS5oYWxmID0gaGFsZldpZHRoXHJcbiAgICAgIGl0ZW0uZG9tID0gJGRpcmVjdGlvblxyXG4gICAgICAkZGlyZWN0aW9uLmNzcyh7XHJcbiAgICAgICAgd2lkdGg6IGxpbmVXaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGxpbmVXaWR0aCxcclxuICAgICAgICAnLXdlYmtpdC1ib3JkZXItcmFkaXVzJzogaGFsZldpZHRoLFxyXG4gICAgICAgICctbW96LWJvcmRlci1yYWRpdXMnOiBoYWxmV2lkdGgsXHJcbiAgICAgICAgJy1tcy1ib3JkZXItcmFkaXVzJzogaGFsZldpZHRoLFxyXG4gICAgICAgICctby1ib3JkZXItcmFkaXVzJzogaGFsZldpZHRoLFxyXG4gICAgICAgICdib3JkZXItcmFkaXVzJzogaGFsZldpZHRoLFxyXG4gICAgICAgICd6LWluZGV4JzogJCgnIycgKyBkYXRhLmlkKS5jc3MoJ3otaW5kZXgnKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpcmVjdGlvbkxpc3QubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gZGlyZWN0aW9uTGlzdFtpXVxyXG4gICAgICAgIGNvbnN0IHsgZGF0YSwgcGxhbmUsIHNoYXBlIH0gPSBpdGVtLmNvbm5lY3Rpb25cclxuICAgICAgICBpZiAoaXRlbS50ID49IGl0ZW0ubWF4VCkge1xyXG4gICAgICAgICAgaXRlbS50ID0gMFxyXG4gICAgICAgICAgaXRlbS5kb20uc2hvdygpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHQgPSBpdGVtLnRcclxuICAgICAgICBpZiAoc2hhcGUubGlua2VyVHlwZSA9PT0gJ2Jyb2tlbicpIHtcclxuICAgICAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgaXRlbS5wb2ludHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcG9pbnQxID0gaXRlbS5wb2ludHNbaiAtIDFdXHJcbiAgICAgICAgICAgIGNvbnN0IHBvaW50MiA9IGl0ZW0ucG9pbnRzW2pdXHJcbiAgICAgICAgICAgIGlmICh0ID49IHBvaW50MS50ICYmIHQgPCBwb2ludDIudCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG51bSA9ICh0IC0gcG9pbnQxLnQpIC8gKHBvaW50Mi50IC0gcG9pbnQxLnQpXHJcbiAgICAgICAgICAgICAgY29uc3QgbGVmdCA9ICgxIC0gbnVtKSAqIHBvaW50MS54ICsgbnVtICogcG9pbnQyLnhcclxuICAgICAgICAgICAgICBjb25zdCB0b3AgPSAoMSAtIG51bSkgKiBwb2ludDEueSArIG51bSAqIHBvaW50Mi55XHJcbiAgICAgICAgICAgICAgaXRlbS5kb20uY3NzKHsgbGVmdDogbGVmdCAtIGl0ZW0uaGFsZiwgdG9wOiB0b3AgLSBpdGVtLmhhbGYgfSlcclxuICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHBsYW5lLndheXBvaW50WzBdXHJcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBwbGFuZS53YXlwb2ludFtwbGFuZS53YXlwb2ludC5sZW5ndGggLSAxXVxyXG4gICAgICAgICAgaWYgKHNoYXBlLmxpbmtlclR5cGUgPT09ICdjdXJ2ZScpIHtcclxuICAgICAgICAgICAgY29uc3QgcG9pbnQxID0gc2hhcGUucG9pbnRzWzBdXHJcbiAgICAgICAgICAgIGNvbnN0IHBvaW50MiA9IHNoYXBlLnBvaW50c1sxXVxyXG4gICAgICAgICAgICBjb25zdCBsZWZ0ID1cclxuICAgICAgICAgICAgICBzZXRTY2FsZShzb3VyY2UueCkgKiBNYXRoLnBvdygxIC0gdCwgMykgK1xyXG4gICAgICAgICAgICAgIHNldFNjYWxlKHBvaW50MS54KSAqIHQgKiBNYXRoLnBvdygxIC0gdCwgMikgKiAzICtcclxuICAgICAgICAgICAgICBzZXRTY2FsZShwb2ludDIueCkgKiBNYXRoLnBvdyh0LCAyKSAqICgxIC0gdCkgKiAzICtcclxuICAgICAgICAgICAgICBzZXRTY2FsZSh0YXJnZXQueCkgKiBNYXRoLnBvdyh0LCAzKVxyXG4gICAgICAgICAgICBjb25zdCB0b3AgPVxyXG4gICAgICAgICAgICAgIHNldFNjYWxlKHNvdXJjZS55KSAqIE1hdGgucG93KDEgLSB0LCAzKSArXHJcbiAgICAgICAgICAgICAgc2V0U2NhbGUocG9pbnQxLnkpICogdCAqIE1hdGgucG93KDEgLSB0LCAyKSAqIDMgK1xyXG4gICAgICAgICAgICAgIHNldFNjYWxlKHBvaW50Mi55KSAqIE1hdGgucG93KHQsIDIpICogKDEgLSB0KSAqIDMgK1xyXG4gICAgICAgICAgICAgIHNldFNjYWxlKHRhcmdldC55KSAqIE1hdGgucG93KHQsIDMpXHJcbiAgICAgICAgICAgIGl0ZW0uZG9tLmNzcyh7IGxlZnQ6IGxlZnQgLSBpdGVtLmhhbGYsIHRvcDogdG9wIC0gaXRlbS5oYWxmIH0pXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gKDEgLSB0KSAqIHNldFNjYWxlKHNvdXJjZS54KSArIHQgKiBzZXRTY2FsZSh0YXJnZXQueClcclxuICAgICAgICAgICAgY29uc3QgdG9wID0gKDEgLSB0KSAqIHNldFNjYWxlKHNvdXJjZS55KSArIHQgKiBzZXRTY2FsZSh0YXJnZXQueSlcclxuICAgICAgICAgICAgaXRlbS5kb20uY3NzKHsgbGVmdDogbGVmdCAtIGl0ZW0uaGFsZiwgdG9wOiB0b3AgLSBpdGVtLmhhbGYgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaXRlbS50ICs9IGl0ZW0uc3RlcFxyXG4gICAgICAgIGlmIChpdGVtLnQgPj0gMSkge1xyXG4gICAgICAgICAgaXRlbS5kb20uaGlkZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCAzMClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOmakOiXj1xyXG4gICAqL1xyXG4gIGhpZGVEaXJlY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5pbnRlcnZhbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpXHJcbiAgICB9XHJcbiAgICB0aGlzLiRjb250YWluZXIuZmluZCgnLmNvbm5lY3Rpb24tZGlyZWN0aW9uJykucmVtb3ZlKClcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IERpcmVjdGlvblxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2ZlYXR1cmVzL2RpcmVjdGlvbi9kaXJlY3Rpb24uanMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQURBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFJQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFSQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///49\n"); + +/***/ }), +/* 50 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__anchor__ = __webpack_require__(51);\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0__anchor__[\"a\" /* default */]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTAuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2FuY2hvci9pbmRleC5qcz8xYTJiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTaGFwZUFuY2hvciBmcm9tICcuL2FuY2hvcidcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNoYXBlQW5jaG9yXHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZmVhdHVyZXMvYW5jaG9yL2luZGV4LmpzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///50\n"); + +/***/ }), +/* 51 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_utils__ = __webpack_require__(1);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\nvar DEFAULT_CONFIG = {\n // 尺寸\n size: 8,\n // 颜色\n color: '#ec5343'\n};\n\nvar ShapeAnchor = function () {\n function ShapeAnchor($container, config) {\n _classCallCheck(this, ShapeAnchor);\n\n this.$container = $container;\n\n this.config = Object.assign({}, DEFAULT_CONFIG, config);\n\n this.init();\n }\n\n _createClass(ShapeAnchor, [{\n key: 'init',\n value: function init() {\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('anchor.show', this.showAnchors.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('anchor.remove', this.removeAnchors.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('anchor.hover', this.hoverAnchors.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('anchor.point.show', this.showAnchorPoint.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('anchor.point.remove', this.hideAnchorPoint.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.move', this.moveAnchors.bind(this));\n // 删除图形\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.select.remove', this.removeAnchors.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('select.clear', this.removeAnchors.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('destroy', this.destroy.bind(this));\n }\n\n /**\r\n *\r\n * @param {*} i\r\n */\n\n }, {\n key: 'showAnchors',\n value: function showAnchors(element) {\n var config = this.config,\n $container = this.$container;\n var data = element.data,\n plane = element.plane,\n shape = element.shape;\n\n\n var orders = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('orders.get');\n var selectIds = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.getIds');\n\n var $layout = $container.find('.bpd-layout');\n var $designer = $container.find('.bpd-designer');\n\n var $contour = $container.find('.shape-contour[data-id=\"' + data.id + '\"]');\n if ($contour.length > 0) {\n return;\n }\n\n $contour = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(\"
\").appendTo($designer);\n\n $contour.css({\n left: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(plane.bounds.x),\n top: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(plane.bounds.y),\n 'z-index': orders.length + 1\n });\n\n if (!(selectIds.indexOf(data.id) >= 0)) {\n $contour.addClass('shape-contour-hover');\n }\n\n var size = config.size - 2;\n var style = {\n 'border-color': config.color,\n 'border-radius': config.size / 2,\n width: size,\n height: size\n };\n var anchors = shape.getAnchors();\n var center = { x: plane.bounds.width / 2, y: plane.bounds.height / 2 };\n for (var i = 0; i < anchors.length; i += 1) {\n var anchor = anchors[i];\n var $anchor = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(\"
\").appendTo($contour);\n var pos = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getRotated(center, anchor, shape.shapeStyle.angle);\n style.left = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(pos.x) - config.size / 2;\n style.top = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(pos.y) - config.size / 2;\n $anchor.css(style);\n }\n }\n /**\r\n * 移动锚点\r\n * @param {*} data\r\n */\n\n }, {\n key: 'moveAnchors',\n value: function moveAnchors(_ref) {\n var elements = _ref.elements,\n pos = _ref.pos;\n\n for (var i = 0; i < elements.length; i++) {\n var _elements$i = elements[i],\n data = _elements$i.data,\n plane = _elements$i.plane,\n shape = _elements$i.shape;\n\n if (shape.bpmnName !== 'SequenceFlow') {\n this.$container.find('.shape-contour[data-id=' + data.id + ']').css({\n left: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(plane.bounds.x),\n top: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(plane.bounds.y)\n });\n }\n }\n }\n }, {\n key: 'hideAnchors',\n value: function hideAnchors() {\n this.$container.find('.shape-contour-hover').remove();\n }\n }, {\n key: 'removeAnchors',\n value: function removeAnchors() {\n this.$container.find('.shape-contour').remove();\n }\n }, {\n key: 'hoverAnchors',\n value: function hoverAnchors(_ref2) {\n var state = _ref2.state,\n element = _ref2.element,\n anchor = _ref2.anchor;\n var config = this.config,\n $container = this.$container;\n var data = element.data,\n plane = element.plane,\n shape = element.shape;\n\n\n var $layout = $container.find('.bpd-layout');\n var $designer = $container.find('.bpd-designer');\n\n var self = this;\n\n $layout.off('mousedown.connection').on('mousedown.connection', function (e) {\n state.change('link_shape');\n var f = null;\n var connection = null;\n var anchorData = void 0;\n if (!element) {\n var mousePos = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getRelativePos(e.pageX, e.pageY, $designer);\n anchorData = {\n x: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(mousePos.x),\n y: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(mousePos.y),\n id: null,\n angle: null\n };\n } else {\n anchorData = anchor;\n anchorData.id = data.id;\n }\n $layout.on('mousemove.connection', function (e) {\n $layout.css('cursor', 'default');\n var mousePos = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getRelativePos(e.pageX, e.pageY, $designer);\n if (connection == null) {\n connection = self.createConnection(anchorData, mousePos);\n }\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('connection.move', {\n element: connection,\n type: 'target',\n x: mousePos.x,\n y: mousePos.y\n });\n\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mouseup.dropConnection').on('mouseup.dropConnection', function () {\n if (Math.abs(mousePos.x - anchorData.x) > 20 || Math.abs(mousePos.y - anchorData.y) > 20) {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.add', connection);\n if (connection.data.targetRef == null && connection.data.sourceRef != null) {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('group.connection.show', connection);\n }\n } else {\n $container.find('.shape-box[data-id=\"' + connection.data.id + '\"]').remove();\n }\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mouseup.dropConnection');\n });\n });\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).on('mouseup.connection', function () {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.point.remove');\n state.reset();\n $layout.off('mousedown.connection');\n $layout.off('mousemove.connection');\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mouseup.connection');\n });\n });\n }\n }, {\n key: 'showAnchorPoint',\n value: function showAnchorPoint(pos) {\n var config = this.config,\n $container = this.$container;\n\n var orders = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('orders.get');\n\n var $designer = $container.find('.bpd-designer');\n var $point = $designer.find('.anchor-point');\n if ($point.length === 0) {\n $point = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(\"\").appendTo($designer);\n var point2d = $point[0].getContext('2d');\n point2d.translate(1, 1);\n point2d.lineWidth = 1;\n point2d.globalAlpha = 0.3;\n point2d.strokeStyle = config.color;\n point2d.fillStyle = config.color;\n point2d.beginPath();\n point2d.moveTo(0, 15);\n point2d.bezierCurveTo(0, -5, 30, -5, 30, 15);\n point2d.bezierCurveTo(30, 35, 0, 35, 0, 15);\n point2d.closePath();\n point2d.fill();\n point2d.stroke();\n }\n $point.css({\n left: pos.x - 16,\n top: pos.y - 16,\n 'z-index': orders.length\n }).show();\n }\n }, {\n key: 'hideAnchorPoint',\n value: function hideAnchorPoint() {\n this.$container.find('.anchor-point').remove();\n }\n }, {\n key: 'createConnection',\n value: function createConnection(source, target) {\n var element = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.create', {\n name: '',\n type: 'SequenceFlow',\n prefix: 'obj'\n });\n\n var data = element.data,\n plane = element.plane;\n\n\n data.sourceRef = source.id;\n if (plane.waypoint.length > 1) {\n plane.waypoint[plane.waypoint.length - 1] = {\n $type: 'dc:Point',\n x: target.x,\n y: target.y,\n angle: null\n };\n } else {\n plane.waypoint[0] = {\n $type: 'dc:Point',\n x: source.x,\n y: source.y,\n angle: source.angle\n };\n\n plane.waypoint[1] = {\n $type: 'dc:Point',\n x: target.x,\n y: target.y,\n angle: null\n };\n }\n\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('connection.render', { element: element });\n return element;\n }\n\n /**\r\n * 销毁\r\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n this.hideAnchors();\n }\n }]);\n\n return ShapeAnchor;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ShapeAnchor);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTEuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2FuY2hvci9hbmNob3IuanM/NzM2YSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRCdXMgZnJvbSAnLi4vLi4vY29yZS9ldmVudEJ1cydcclxuaW1wb3J0ICQgZnJvbSAnLi4vLi4vdXRpbHMvc2xpbUpRJ1xyXG5cclxuaW1wb3J0IERyYXdVdGlscyBmcm9tICcuLi8uLi9kcmF3L2RyYXdVdGlscydcclxuaW1wb3J0IHsgc2V0U2NhbGUsIHJlc3RvcmVTY2FsZSB9IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJ1xyXG5cclxuY29uc3QgREVGQVVMVF9DT05GSUcgPSB7XHJcbiAgLy8g5bC65a+4XHJcbiAgc2l6ZTogOCxcclxuICAvLyDpopzoibJcclxuICBjb2xvcjogJyNlYzUzNDMnXHJcbn1cclxuXHJcbmNsYXNzIFNoYXBlQW5jaG9yIHtcclxuICBjb25zdHJ1Y3RvcigkY29udGFpbmVyLCBjb25maWcpIHtcclxuICAgIHRoaXMuJGNvbnRhaW5lciA9ICRjb250YWluZXJcclxuXHJcbiAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLCBjb25maWcpXHJcblxyXG4gICAgdGhpcy5pbml0KClcclxuICB9XHJcblxyXG4gIGluaXQoKSB7XHJcbiAgICAvL1xyXG4gICAgZXZlbnRCdXMub24oJ2FuY2hvci5zaG93JywgdGhpcy5zaG93QW5jaG9ycy5iaW5kKHRoaXMpKVxyXG4gICAgLy9cclxuICAgIGV2ZW50QnVzLm9uKCdhbmNob3IucmVtb3ZlJywgdGhpcy5yZW1vdmVBbmNob3JzLmJpbmQodGhpcykpXHJcbiAgICAvL1xyXG4gICAgZXZlbnRCdXMub24oJ2FuY2hvci5ob3ZlcicsIHRoaXMuaG92ZXJBbmNob3JzLmJpbmQodGhpcykpXHJcbiAgICAvL1xyXG4gICAgZXZlbnRCdXMub24oJ2FuY2hvci5wb2ludC5zaG93JywgdGhpcy5zaG93QW5jaG9yUG9pbnQuYmluZCh0aGlzKSlcclxuICAgIC8vXHJcbiAgICBldmVudEJ1cy5vbignYW5jaG9yLnBvaW50LnJlbW92ZScsIHRoaXMuaGlkZUFuY2hvclBvaW50LmJpbmQodGhpcykpXHJcbiAgICAvL1xyXG4gICAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUnLCB0aGlzLm1vdmVBbmNob3JzLmJpbmQodGhpcykpXHJcbiAgICAvLyDliKDpmaTlm77lvaJcclxuICAgIGV2ZW50QnVzLm9uKCdzaGFwZS5zZWxlY3QucmVtb3ZlJywgdGhpcy5yZW1vdmVBbmNob3JzLmJpbmQodGhpcykpXHJcbiAgICAvL1xyXG4gICAgZXZlbnRCdXMub24oJ3NlbGVjdC5jbGVhcicsIHRoaXMucmVtb3ZlQW5jaG9ycy5iaW5kKHRoaXMpKVxyXG4gICAgLy9cclxuICAgIGV2ZW50QnVzLm9uKCdkZXN0cm95JywgdGhpcy5kZXN0cm95LmJpbmQodGhpcykpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Kn0gaVxyXG4gICAqL1xyXG4gIHNob3dBbmNob3JzKGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IHsgY29uZmlnLCAkY29udGFpbmVyIH0gPSB0aGlzXHJcblxyXG4gICAgY29uc3QgeyBkYXRhLCBwbGFuZSwgc2hhcGUgfSA9IGVsZW1lbnRcclxuXHJcbiAgICBjb25zdCBvcmRlcnMgPSBldmVudEJ1cy50cmlnZ2VyKCdvcmRlcnMuZ2V0JylcclxuICAgIGNvbnN0IHNlbGVjdElkcyA9IGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLnNlbGVjdC5nZXRJZHMnKVxyXG5cclxuICAgIGNvbnN0ICRsYXlvdXQgPSAkY29udGFpbmVyLmZpbmQoJy5icGQtbGF5b3V0JylcclxuICAgIGNvbnN0ICRkZXNpZ25lciA9ICRjb250YWluZXIuZmluZCgnLmJwZC1kZXNpZ25lcicpXHJcblxyXG4gICAgbGV0ICRjb250b3VyID0gJGNvbnRhaW5lci5maW5kKCcuc2hhcGUtY29udG91cltkYXRhLWlkPVwiJyArIGRhdGEuaWQgKyAnXCJdJylcclxuICAgIGlmICgkY29udG91ci5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgICRjb250b3VyID0gJChcclxuICAgICAgXCI8ZGl2IGNsYXNzPSdzaGFwZS1jb250b3VyJyBkYXRhLWlkPSdcIiArIGRhdGEuaWQgKyBcIic+PC9kaXY+XCJcclxuICAgICkuYXBwZW5kVG8oJGRlc2lnbmVyKVxyXG5cclxuICAgICRjb250b3VyLmNzcyh7XHJcbiAgICAgIGxlZnQ6IHNldFNjYWxlKHBsYW5lLmJvdW5kcy54KSxcclxuICAgICAgdG9wOiBzZXRTY2FsZShwbGFuZS5ib3VuZHMueSksXHJcbiAgICAgICd6LWluZGV4Jzogb3JkZXJzLmxlbmd0aCArIDFcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKCEoc2VsZWN0SWRzLmluZGV4T2YoZGF0YS5pZCkgPj0gMCkpIHtcclxuICAgICAgJGNvbnRvdXIuYWRkQ2xhc3MoJ3NoYXBlLWNvbnRvdXItaG92ZXInKVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNpemUgPSBjb25maWcuc2l6ZSAtIDJcclxuICAgIGNvbnN0IHN0eWxlID0ge1xyXG4gICAgICAnYm9yZGVyLWNvbG9yJzogY29uZmlnLmNvbG9yLFxyXG4gICAgICAnYm9yZGVyLXJhZGl1cyc6IGNvbmZpZy5zaXplIC8gMixcclxuICAgICAgd2lkdGg6IHNpemUsXHJcbiAgICAgIGhlaWdodDogc2l6ZVxyXG4gICAgfVxyXG4gICAgY29uc3QgYW5jaG9ycyA9IHNoYXBlLmdldEFuY2hvcnMoKVxyXG4gICAgY29uc3QgY2VudGVyID0geyB4OiBwbGFuZS5ib3VuZHMud2lkdGggLyAyLCB5OiBwbGFuZS5ib3VuZHMuaGVpZ2h0IC8gMiB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFuY2hvcnMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgY29uc3QgYW5jaG9yID0gYW5jaG9yc1tpXVxyXG4gICAgICBjb25zdCAkYW5jaG9yID0gJChcIjxkaXYgY2xhc3M9J3NoYXBlLWFuY2hvcic+PC9kaXY+XCIpLmFwcGVuZFRvKCRjb250b3VyKVxyXG4gICAgICBjb25zdCBwb3MgPSBEcmF3VXRpbHMuZ2V0Um90YXRlZChjZW50ZXIsIGFuY2hvciwgc2hhcGUuc2hhcGVTdHlsZS5hbmdsZSlcclxuICAgICAgc3R5bGUubGVmdCA9IHNldFNjYWxlKHBvcy54KSAtIGNvbmZpZy5zaXplIC8gMlxyXG4gICAgICBzdHlsZS50b3AgPSBzZXRTY2FsZShwb3MueSkgLSBjb25maWcuc2l6ZSAvIDJcclxuICAgICAgJGFuY2hvci5jc3Moc3R5bGUpXHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOenu+WKqOmUmueCuVxyXG4gICAqIEBwYXJhbSB7Kn0gZGF0YVxyXG4gICAqL1xyXG4gIG1vdmVBbmNob3JzKHsgZWxlbWVudHMsIHBvcyB9KSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHsgZGF0YSwgcGxhbmUsIHNoYXBlIH0gPSBlbGVtZW50c1tpXVxyXG4gICAgICBpZiAoc2hhcGUuYnBtbk5hbWUgIT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgICAgdGhpcy4kY29udGFpbmVyLmZpbmQoJy5zaGFwZS1jb250b3VyW2RhdGEtaWQ9JyArIGRhdGEuaWQgKyAnXScpLmNzcyh7XHJcbiAgICAgICAgICBsZWZ0OiBzZXRTY2FsZShwbGFuZS5ib3VuZHMueCksXHJcbiAgICAgICAgICB0b3A6IHNldFNjYWxlKHBsYW5lLmJvdW5kcy55KVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgaGlkZUFuY2hvcnMoKSB7XHJcbiAgICB0aGlzLiRjb250YWluZXIuZmluZCgnLnNoYXBlLWNvbnRvdXItaG92ZXInKS5yZW1vdmUoKVxyXG4gIH1cclxuICByZW1vdmVBbmNob3JzKCkge1xyXG4gICAgdGhpcy4kY29udGFpbmVyLmZpbmQoJy5zaGFwZS1jb250b3VyJykucmVtb3ZlKClcclxuICB9XHJcblxyXG4gIGhvdmVyQW5jaG9ycyh7IHN0YXRlLCBlbGVtZW50LCBhbmNob3IgfSkge1xyXG4gICAgY29uc3QgeyBjb25maWcsICRjb250YWluZXIgfSA9IHRoaXNcclxuICAgIGNvbnN0IHsgZGF0YSwgcGxhbmUsIHNoYXBlIH0gPSBlbGVtZW50XHJcblxyXG4gICAgY29uc3QgJGxheW91dCA9ICRjb250YWluZXIuZmluZCgnLmJwZC1sYXlvdXQnKVxyXG4gICAgY29uc3QgJGRlc2lnbmVyID0gJGNvbnRhaW5lci5maW5kKCcuYnBkLWRlc2lnbmVyJylcclxuXHJcbiAgICBjb25zdCBzZWxmID0gdGhpc1xyXG5cclxuICAgICRsYXlvdXQub2ZmKCdtb3VzZWRvd24uY29ubmVjdGlvbicpLm9uKCdtb3VzZWRvd24uY29ubmVjdGlvbicsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgc3RhdGUuY2hhbmdlKCdsaW5rX3NoYXBlJylcclxuICAgICAgdmFyIGYgPSBudWxsXHJcbiAgICAgIGxldCBjb25uZWN0aW9uID0gbnVsbFxyXG4gICAgICBsZXQgYW5jaG9yRGF0YVxyXG4gICAgICBpZiAoIWVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBtb3VzZVBvcyA9IERyYXdVdGlscy5nZXRSZWxhdGl2ZVBvcyhlLnBhZ2VYLCBlLnBhZ2VZLCAkZGVzaWduZXIpXHJcbiAgICAgICAgYW5jaG9yRGF0YSA9IHtcclxuICAgICAgICAgIHg6IHJlc3RvcmVTY2FsZShtb3VzZVBvcy54KSxcclxuICAgICAgICAgIHk6IHJlc3RvcmVTY2FsZShtb3VzZVBvcy55KSxcclxuICAgICAgICAgIGlkOiBudWxsLFxyXG4gICAgICAgICAgYW5nbGU6IG51bGxcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYW5jaG9yRGF0YSA9IGFuY2hvclxyXG4gICAgICAgIGFuY2hvckRhdGEuaWQgPSBkYXRhLmlkXHJcbiAgICAgIH1cclxuICAgICAgJGxheW91dC5vbignbW91c2Vtb3ZlLmNvbm5lY3Rpb24nLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgJGxheW91dC5jc3MoJ2N1cnNvcicsICdkZWZhdWx0JylcclxuICAgICAgICBjb25zdCBtb3VzZVBvcyA9IERyYXdVdGlscy5nZXRSZWxhdGl2ZVBvcyhlLnBhZ2VYLCBlLnBhZ2VZLCAkZGVzaWduZXIpXHJcbiAgICAgICAgaWYgKGNvbm5lY3Rpb24gPT0gbnVsbCkge1xyXG4gICAgICAgICAgY29ubmVjdGlvbiA9IHNlbGYuY3JlYXRlQ29ubmVjdGlvbihhbmNob3JEYXRhLCBtb3VzZVBvcylcclxuICAgICAgICB9XHJcbiAgICAgICAgZXZlbnRCdXMudHJpZ2dlcignY29ubmVjdGlvbi5tb3ZlJywge1xyXG4gICAgICAgICAgZWxlbWVudDogY29ubmVjdGlvbixcclxuICAgICAgICAgIHR5cGU6ICd0YXJnZXQnLFxyXG4gICAgICAgICAgeDogbW91c2VQb3MueCxcclxuICAgICAgICAgIHk6IG1vdXNlUG9zLnlcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICAkKGRvY3VtZW50KVxyXG4gICAgICAgICAgLm9mZignbW91c2V1cC5kcm9wQ29ubmVjdGlvbicpXHJcbiAgICAgICAgICAub24oJ21vdXNldXAuZHJvcENvbm5lY3Rpb24nLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIE1hdGguYWJzKG1vdXNlUG9zLnggLSBhbmNob3JEYXRhLngpID4gMjAgfHxcclxuICAgICAgICAgICAgICBNYXRoLmFicyhtb3VzZVBvcy55IC0gYW5jaG9yRGF0YS55KSA+IDIwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2VsZW1lbnQuYWRkJywgY29ubmVjdGlvbilcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmRhdGEudGFyZ2V0UmVmID09IG51bGwgJiZcclxuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24uZGF0YS5zb3VyY2VSZWYgIT0gbnVsbFxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnRCdXMudHJpZ2dlcignZ3JvdXAuY29ubmVjdGlvbi5zaG93JywgY29ubmVjdGlvbilcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgJGNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgLmZpbmQoJy5zaGFwZS1ib3hbZGF0YS1pZD1cIicgKyBjb25uZWN0aW9uLmRhdGEuaWQgKyAnXCJdJylcclxuICAgICAgICAgICAgICAgIC5yZW1vdmUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2V1cC5kcm9wQ29ubmVjdGlvbicpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICAkKGRvY3VtZW50KS5vbignbW91c2V1cC5jb25uZWN0aW9uJywgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgZXZlbnRCdXMudHJpZ2dlcignYW5jaG9yLnBvaW50LnJlbW92ZScpXHJcbiAgICAgICAgc3RhdGUucmVzZXQoKVxyXG4gICAgICAgICRsYXlvdXQub2ZmKCdtb3VzZWRvd24uY29ubmVjdGlvbicpXHJcbiAgICAgICAgJGxheW91dC5vZmYoJ21vdXNlbW92ZS5jb25uZWN0aW9uJylcclxuICAgICAgICAkKGRvY3VtZW50KS5vZmYoJ21vdXNldXAuY29ubmVjdGlvbicpXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2hvd0FuY2hvclBvaW50KHBvcykge1xyXG4gICAgY29uc3QgeyBjb25maWcsICRjb250YWluZXIgfSA9IHRoaXNcclxuICAgIGNvbnN0IG9yZGVycyA9IGV2ZW50QnVzLnRyaWdnZXIoJ29yZGVycy5nZXQnKVxyXG5cclxuICAgIGNvbnN0ICRkZXNpZ25lciA9ICRjb250YWluZXIuZmluZCgnLmJwZC1kZXNpZ25lcicpXHJcbiAgICBsZXQgJHBvaW50ID0gJGRlc2lnbmVyLmZpbmQoJy5hbmNob3ItcG9pbnQnKVxyXG4gICAgaWYgKCRwb2ludC5sZW5ndGggPT09IDApIHtcclxuICAgICAgJHBvaW50ID0gJChcclxuICAgICAgICBcIjxjYW52YXMgY2xhc3M9J2FuY2hvci1wb2ludCcgd2lkdGg9MzIgaGVpZ2h0PTMyPjwvY2FudmFzPlwiXHJcbiAgICAgICkuYXBwZW5kVG8oJGRlc2lnbmVyKVxyXG4gICAgICBjb25zdCBwb2ludDJkID0gJHBvaW50WzBdLmdldENvbnRleHQoJzJkJylcclxuICAgICAgcG9pbnQyZC50cmFuc2xhdGUoMSwgMSlcclxuICAgICAgcG9pbnQyZC5saW5lV2lkdGggPSAxXHJcbiAgICAgIHBvaW50MmQuZ2xvYmFsQWxwaGEgPSAwLjNcclxuICAgICAgcG9pbnQyZC5zdHJva2VTdHlsZSA9IGNvbmZpZy5jb2xvclxyXG4gICAgICBwb2ludDJkLmZpbGxTdHlsZSA9IGNvbmZpZy5jb2xvclxyXG4gICAgICBwb2ludDJkLmJlZ2luUGF0aCgpXHJcbiAgICAgIHBvaW50MmQubW92ZVRvKDAsIDE1KVxyXG4gICAgICBwb2ludDJkLmJlemllckN1cnZlVG8oMCwgLTUsIDMwLCAtNSwgMzAsIDE1KVxyXG4gICAgICBwb2ludDJkLmJlemllckN1cnZlVG8oMzAsIDM1LCAwLCAzNSwgMCwgMTUpXHJcbiAgICAgIHBvaW50MmQuY2xvc2VQYXRoKClcclxuICAgICAgcG9pbnQyZC5maWxsKClcclxuICAgICAgcG9pbnQyZC5zdHJva2UoKVxyXG4gICAgfVxyXG4gICAgJHBvaW50XHJcbiAgICAgIC5jc3Moe1xyXG4gICAgICAgIGxlZnQ6IHBvcy54IC0gMTYsXHJcbiAgICAgICAgdG9wOiBwb3MueSAtIDE2LFxyXG4gICAgICAgICd6LWluZGV4Jzogb3JkZXJzLmxlbmd0aFxyXG4gICAgICB9KVxyXG4gICAgICAuc2hvdygpXHJcbiAgfVxyXG5cclxuICBoaWRlQW5jaG9yUG9pbnQoKSB7XHJcbiAgICB0aGlzLiRjb250YWluZXIuZmluZCgnLmFuY2hvci1wb2ludCcpLnJlbW92ZSgpXHJcbiAgfVxyXG5cclxuICBjcmVhdGVDb25uZWN0aW9uKHNvdXJjZSwgdGFyZ2V0KSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnRCdXMudHJpZ2dlcignZWxlbWVudC5jcmVhdGUnLCB7XHJcbiAgICAgIG5hbWU6ICcnLFxyXG4gICAgICB0eXBlOiAnU2VxdWVuY2VGbG93JyxcclxuICAgICAgcHJlZml4OiAnb2JqJ1xyXG4gICAgfSlcclxuXHJcbiAgICBjb25zdCB7IGRhdGEsIHBsYW5lIH0gPSBlbGVtZW50XHJcblxyXG4gICAgZGF0YS5zb3VyY2VSZWYgPSBzb3VyY2UuaWRcclxuICAgIGlmIChwbGFuZS53YXlwb2ludC5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHBsYW5lLndheXBvaW50W3BsYW5lLndheXBvaW50Lmxlbmd0aCAtIDFdID0ge1xyXG4gICAgICAgICR0eXBlOiAnZGM6UG9pbnQnLFxyXG4gICAgICAgIHg6IHRhcmdldC54LFxyXG4gICAgICAgIHk6IHRhcmdldC55LFxyXG4gICAgICAgIGFuZ2xlOiBudWxsXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBsYW5lLndheXBvaW50WzBdID0ge1xyXG4gICAgICAgICR0eXBlOiAnZGM6UG9pbnQnLFxyXG4gICAgICAgIHg6IHNvdXJjZS54LFxyXG4gICAgICAgIHk6IHNvdXJjZS55LFxyXG4gICAgICAgIGFuZ2xlOiBzb3VyY2UuYW5nbGVcclxuICAgICAgfVxyXG5cclxuICAgICAgcGxhbmUud2F5cG9pbnRbMV0gPSB7XHJcbiAgICAgICAgJHR5cGU6ICdkYzpQb2ludCcsXHJcbiAgICAgICAgeDogdGFyZ2V0LngsXHJcbiAgICAgICAgeTogdGFyZ2V0LnksXHJcbiAgICAgICAgYW5nbGU6IG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2Nvbm5lY3Rpb24ucmVuZGVyJywgeyBlbGVtZW50IH0pXHJcbiAgICByZXR1cm4gZWxlbWVudFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6ZSA5q+BXHJcbiAgICovXHJcbiAgZGVzdHJveSgpIHtcclxuICAgIHRoaXMuaGlkZUFuY2hvcnMoKVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2hhcGVBbmNob3JcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9mZWF0dXJlcy9hbmNob3IvYW5jaG9yLmpzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQUNBO0FBTUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUhBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQUdBO0FBSUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUFNQTs7O0FBRUE7QUFDQTtBQUNBOzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUZBO0FBQUE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7QUFDQTtBQUNBOzs7Ozs7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///51\n"); + +/***/ }), +/* 52 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Select__ = __webpack_require__(53);\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0__Select__[\"a\" /* default */]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTIuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3NlbGVjdC9pbmRleC5qcz9jYzI4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTaGFwZVNlbGVjdCBmcm9tICcuL1NlbGVjdCdcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNoYXBlU2VsZWN0XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZmVhdHVyZXMvc2VsZWN0L2luZGV4LmpzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///52\n"); + +/***/ }), +/* 53 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_utils__ = __webpack_require__(1);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__draw_drawUtils__ = __webpack_require__(2);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\nvar DEFAULT_CONFIG = {\n // 颜色\n color: '#ec5343',\n // 选中事件\n onSelected: function onSelected() {}\n};\n\nvar ShapeSelect = function () {\n function ShapeSelect($container, config) {\n _classCallCheck(this, ShapeSelect);\n\n this.$container = $container;\n\n this.config = Object.assign({}, DEFAULT_CONFIG, config);\n\n this.selectIds = [];\n\n this.init();\n }\n\n _createClass(ShapeSelect, [{\n key: 'init',\n value: function init() {\n // 选中\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.hover', this.selectable.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('canvas.hover', this.multiSelectable.bind(this));\n // 获取选中图形id\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.select.getIds', this.getSelectedIds.bind(this));\n // 获取选中图形集合\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.select.get', this.getSelected.bind(this));\n // 获取选中图形集合\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.select', this.selectShape.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.move', this.moveSelect.bind(this));\n // 删除图形\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.select.remove', this.unselect.bind(this));\n // 删除图形\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.select.check', this.isSelected.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('destroy', this.destroy.bind(this));\n }\n }, {\n key: 'selectable',\n value: function selectable(_ref) {\n var _this = this;\n\n var state = _ref.state,\n element = _ref.element;\n var $container = this.$container;\n\n\n var $layout = $container.find('.bpd-layout');\n var $designer = $container.find('.bpd-designer');\n\n $designer.on('mousedown.select', function (e) {\n state.change('select_shapes');\n var id = element.data.id;\n if (e.ctrlKey) {\n if (_this.isSelected(id)) {} else {\n _this.selectIds.push(id);\n }\n _this.unselect();\n if (_this.selectIds.length > 0) {}\n } else {\n if (!_this.isSelected(id)) {\n _this.unselect();\n _this.selectShape({ ids: id });\n }\n }\n\n if (element.shape.groupName && element.shape.groupName !== 'CallActivity') {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('group.show', _this.getSelected());\n }\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).on('mouseup.select', function () {\n state.reset();\n $designer.off('mousedown.select');\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mouseup.select');\n });\n });\n }\n }, {\n key: 'multiSelectable',\n value: function multiSelectable(_ref2) {\n var state = _ref2.state;\n var $container = this.$container,\n config = this.config;\n\n\n var $layout = $container.find('.bpd-layout');\n var $designer = $container.find('.bpd-designer');\n\n var orders = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('orders.get');\n\n var self = this;\n\n $layout.off('mousedown.multiselect').on('mousedown.multiselect', function (e) {\n var $multiSelect = null;\n if (!e.ctrlKey) {\n self.unselect();\n }\n var mouseDownPos = __WEBPACK_IMPORTED_MODULE_3__draw_drawUtils__[\"a\" /* default */].getRelativePos(e.pageX, e.pageY, $designer);\n state.change('multi_select');\n\n // 选中回调\n if (self.config.onSelected) {\n self.config.onSelected(null);\n }\n\n $layout.on('mousemove.multiselect', function (e) {\n if ($multiSelect == null) {\n $multiSelect = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(\"
\").appendTo($designer);\n }\n var mousePos = __WEBPACK_IMPORTED_MODULE_3__draw_drawUtils__[\"a\" /* default */].getRelativePos(e.pageX, e.pageY, $designer);\n var style = {\n 'z-index': orders.length,\n left: mousePos.x,\n top: mousePos.y\n };\n if (mousePos.x > mouseDownPos.x) {\n style.left = mouseDownPos.x;\n }\n if (mousePos.y > mouseDownPos.y) {\n style.top = mouseDownPos.y;\n }\n style.width = Math.abs(mousePos.x - mouseDownPos.x);\n style.height = Math.abs(mousePos.y - mouseDownPos.y);\n $multiSelect.css(style);\n });\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mouseup.multiselect').on('mouseup.multiselect', function (e) {\n if ($multiSelect != null) {\n var range = {\n x: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"i\" /* restoreScale */])($multiSelect.position().left),\n y: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"i\" /* restoreScale */])($multiSelect.position().top),\n width: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"i\" /* restoreScale */])($multiSelect.width()),\n height: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"i\" /* restoreScale */])($multiSelect.height())\n };\n var ids = __WEBPACK_IMPORTED_MODULE_3__draw_drawUtils__[\"a\" /* default */].getElementIdsByRange(range);\n if (e.ctrlKey) {\n var selectIds = self.getSelectedIds();\n Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"h\" /* mergeArray */])(ids, selectIds);\n }\n self.unselect();\n self.selectShape({ ids: ids });\n $multiSelect.remove();\n }\n state.reset();\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mouseup.multiselect');\n $layout.off('mousemove.multiselect');\n });\n $layout.off('mousedown.multiselect');\n });\n }\n\n /**\r\n * 获取选中图形id集合\r\n */\n\n }, {\n key: 'getSelectedIds',\n value: function getSelectedIds() {\n return this.selectIds;\n }\n\n /**\r\n * 获取选中图形集合\r\n */\n\n }, {\n key: 'getSelected',\n value: function getSelected() {\n var elements = [];\n for (var i = 0; i < this.selectIds.length; i += 1) {\n var id = this.selectIds[i];\n var element = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get', id);\n if (!element.shape.locked) {\n elements.push(element);\n }\n }\n return elements;\n }\n\n /**\r\n *\r\n * @param {*} h\r\n * @param {*} d\r\n */\n\n }, {\n key: 'selectShape',\n value: function selectShape(_ref3) {\n var ids = _ref3.ids,\n d = _ref3.d;\n\n if (typeof ids === 'string') {\n ids = [ids];\n }\n if (ids.length <= 0) {\n return;\n }\n var uniqueArr = Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"h\" /* mergeArray */])([], ids);\n var newIds = [];\n for (var i = 0; i < ids.length; i += 1) {\n var id = ids[i];\n var element = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get', id);\n if (element.shape.parent && element.shape.resizeDir.length === 0 && newIds.indexOf(element.shape.parent) < 0) {\n newIds.push(element.shape.parent);\n } else {\n if (newIds.indexOf(id) < 0) {\n newIds.push(id);\n }\n }\n }\n ids = newIds;\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.remove');\n this.selectIds = [];\n for (var _i = 0; _i < ids.length; _i += 1) {\n var _id = ids[_i];\n var _element = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get', _id);\n this.selectIds.push(_id);\n if (_element.shape.bpmnName === 'SequenceFlow') {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('connection.render', { element: _element });\n } else {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.show', _element);\n }\n }\n\n var selectIds = this.selectIds;\n var n = false;\n if (selectIds.length === 1) {\n var _element2 = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get', selectIds[0]);\n\n if (_element2.shape.bpmnName === 'SequenceFlow') {\n n = true;\n }\n }\n if (selectIds.length > 0 && !n) {\n this.renderSelectBox(selectIds);\n }\n\n // 选中回调\n if (this.config.onSelected) {\n if (selectIds.length === 1) {\n this.config.onSelected(Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"j\" /* setExportData */])(this.getSelected()[0]));\n } else {\n this.config.onSelected(null);\n }\n }\n\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('direction.show');\n }\n\n /**\r\n *\r\n * @param {*} selectIds\r\n */\n\n }, {\n key: 'renderSelectBox',\n value: function renderSelectBox(selectIds) {\n var $container = this.$container;\n\n\n var $layout = $container.find('.bpd-layout');\n var $designer = $container.find('.bpd-designer');\n\n var orders = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('orders.get');\n\n var $selectBox = $designer.find('.shape-select');\n\n if ($selectBox.length === 0) {\n $selectBox = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(\"
\").appendTo($designer);\n }\n $selectBox.show();\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('group.hide', $selectBox);\n\n var angle = 0;\n var data = {};\n if (selectIds.length === 1) {\n var element = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get', selectIds[0]);\n data.angle = angle = element.shape.shapeStyle.angle;\n data.zindex = element.shape.shapeStyle.zindex;\n data.height = element.plane.bounds.height;\n data.width = element.plane.bounds.width;\n data.x = element.plane.bounds.x;\n data.y = element.plane.bounds.y;\n\n if (element.shape.groupName && element.shape.groupName !== 'CallActivity') {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('group.show', this.getSelected());\n }\n } else {\n data = this.getControlBox(selectIds);\n }\n var shapeBox = __WEBPACK_IMPORTED_MODULE_3__draw_drawUtils__[\"a\" /* default */].getRotatedBox(data, angle);\n\n this.renderControlBound($selectBox, data, shapeBox, angle);\n\n $selectBox.css({\n left: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(shapeBox.x),\n top: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(shapeBox.y),\n width: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(shapeBox.width),\n height: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(shapeBox.height),\n 'z-index': orders.length,\n display: 'block'\n });\n }\n\n /**\r\n *\r\n * @param {*} $selectBox\r\n * @param {*} shapeBox\r\n * @param {*} angle\r\n */\n\n }, {\n key: 'renderControlBound',\n value: function renderControlBound($selectBox, data, shapeBox, angle) {\n var config = this.config;\n\n\n var width = Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(shapeBox.width);\n var height = Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(shapeBox.height);\n var boundW = width + 20;\n var boundH = height + 20;\n\n var $bound = $selectBox.find('.shape-bound');\n\n $bound.attr({ width: boundW, height: boundH });\n\n var bound2D = $bound[0].getContext('2d');\n bound2D.lineJoin = 'round';\n bound2D.lineWidth = 1;\n bound2D.strokeStyle = config.color;\n bound2D.globalAlpha = 0.5;\n bound2D.save();\n bound2D.clearRect(0, 0, boundW, boundH);\n bound2D.translate(boundW / 2, boundH / 2);\n bound2D.rotate(angle);\n bound2D.translate(-boundW / 2, -boundH / 2);\n bound2D.translate(9.5, 9.5);\n var rect = {\n x: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(Math.round(data.x - shapeBox.x)),\n y: Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(Math.round(data.y - shapeBox.y)),\n width: Math.floor(Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(data.width) + 1),\n heigth: Math.floor(Object(__WEBPACK_IMPORTED_MODULE_2__utils_utils__[\"k\" /* setScale */])(data.height) + 1)\n };\n bound2D.strokeRect(rect.x, rect.y, rect.width, rect.heigth);\n bound2D.restore();\n }\n\n /**\r\n *\r\n * @param {*} e\r\n */\n\n }, {\n key: 'getControlBox',\n value: function getControlBox(selectIds) {\n var size = { x1: null, y1: null, x2: null, y2: null };\n for (var i = 0; i < selectIds.length; i += 1) {\n var id = selectIds[i];\n var element = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get', id);\n var data = element.data,\n plane = element.plane,\n shape = element.shape;\n\n\n var shapeBoxSize = void 0;\n\n if (shape.bpmnName === 'SequenceFlow') {\n shapeBoxSize = __WEBPACK_IMPORTED_MODULE_3__draw_drawUtils__[\"a\" /* default */].getConnectionBox(element);\n } else {\n shapeBoxSize = __WEBPACK_IMPORTED_MODULE_3__draw_drawUtils__[\"a\" /* default */].getShapeBox(element);\n }\n if (size.x1 == null || shapeBoxSize.x < size.x1) {\n size.x1 = shapeBoxSize.x;\n }\n if (size.y1 == null || shapeBoxSize.y < size.y1) {\n size.y1 = shapeBoxSize.y;\n }\n if (size.x2 == null || shapeBoxSize.x + shapeBoxSize.width > size.x2) {\n size.x2 = shapeBoxSize.x + shapeBoxSize.width;\n }\n if (size.y2 == null || shapeBoxSize.y + shapeBoxSize.height > size.y2) {\n size.y2 = shapeBoxSize.y + shapeBoxSize.height;\n }\n }\n return {\n x: size.x1,\n y: size.y1,\n width: size.x2 - size.x1,\n height: size.y2 - size.y1\n };\n }\n }, {\n key: 'moveSelect',\n value: function moveSelect(_ref4) {\n var elements = _ref4.elements,\n pos = _ref4.pos;\n\n var ids = __WEBPACK_IMPORTED_MODULE_3__draw_drawUtils__[\"a\" /* default */].getSelectedConnectionIds();\n if (elements.length === 1 && ids.length === 1) {\n return;\n }\n if (ids.length > 0) {\n var selectIds = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.getIds');\n this.renderSelectBox(selectIds);\n } else {\n var $contour = this.$container.find('.shape-select');\n $contour.css({\n left: parseFloat($contour.css('left')) + pos.x,\n top: parseFloat($contour.css('top')) + pos.y\n });\n }\n }\n\n /**\r\n * 清空选中\r\n */\n\n }, {\n key: 'unselect',\n value: function unselect() {\n var selectIds = this.selectIds;\n this.selectIds = [];\n for (var i = 0; i < selectIds.length; i += 1) {\n var id = selectIds[i];\n var element = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get', id);\n if (element && element.shape.bpmnName === 'SequenceFlow') {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('connection.render', { element: element });\n }\n }\n this.$container.find('.shape-select').hide();\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('select.clear');\n }\n\n /**\r\n * 判断是否选中\r\n * @param {*} id\r\n */\n\n }, {\n key: 'isSelected',\n value: function isSelected(id) {\n if (this.selectIds.indexOf(id) >= 0) {\n return true;\n }\n return false;\n }\n\n /**\r\n * 销毁\r\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n var $layout = this.$container.find('.bpd-layout');\n var $designer = this.$container.find('.bpd-designer');\n $designer.off('mousedown.select');\n $layout.off('mousedown.multiselect');\n }\n }]);\n\n return ShapeSelect;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ShapeSelect);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3NlbGVjdC9TZWxlY3QuanM/YWYxMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRCdXMgZnJvbSAnLi4vLi4vY29yZS9ldmVudEJ1cydcclxuaW1wb3J0ICQgZnJvbSAnLi4vLi4vdXRpbHMvc2xpbUpRJ1xyXG5cclxuaW1wb3J0IHtcclxuICBzZXRTY2FsZSxcclxuICByZXN0b3JlU2NhbGUsXHJcbiAgbWVyZ2VBcnJheSxcclxuICBjbG9uZURlZXAsXHJcbiAgc2V0RXhwb3J0RGF0YVxyXG59IGZyb20gJy4uLy4uL3V0aWxzL3V0aWxzJ1xyXG5pbXBvcnQgRHJhd1V0aWxzIGZyb20gJy4uLy4uL2RyYXcvZHJhd1V0aWxzJ1xyXG5cclxuY29uc3QgREVGQVVMVF9DT05GSUcgPSB7XHJcbiAgLy8g6aKc6ImyXHJcbiAgY29sb3I6ICcjZWM1MzQzJyxcclxuICAvLyDpgInkuK3kuovku7ZcclxuICBvblNlbGVjdGVkOiAoKSA9PiB7fVxyXG59XHJcblxyXG5jbGFzcyBTaGFwZVNlbGVjdCB7XHJcbiAgY29uc3RydWN0b3IoJGNvbnRhaW5lciwgY29uZmlnKSB7XHJcbiAgICB0aGlzLiRjb250YWluZXIgPSAkY29udGFpbmVyXHJcblxyXG4gICAgdGhpcy5jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX0NPTkZJRywgY29uZmlnKVxyXG5cclxuICAgIHRoaXMuc2VsZWN0SWRzID0gW11cclxuXHJcbiAgICB0aGlzLmluaXQoKVxyXG4gIH1cclxuICBpbml0KCkge1xyXG4gICAgLy8g6YCJ5LitXHJcbiAgICBldmVudEJ1cy5vbignc2hhcGUuaG92ZXInLCB0aGlzLnNlbGVjdGFibGUuYmluZCh0aGlzKSlcclxuICAgIC8vXHJcbiAgICBldmVudEJ1cy5vbignY2FudmFzLmhvdmVyJywgdGhpcy5tdWx0aVNlbGVjdGFibGUuYmluZCh0aGlzKSlcclxuICAgIC8vIOiOt+WPlumAieS4reWbvuW9omlkXHJcbiAgICBldmVudEJ1cy5vbignc2hhcGUuc2VsZWN0LmdldElkcycsIHRoaXMuZ2V0U2VsZWN0ZWRJZHMuYmluZCh0aGlzKSlcclxuICAgIC8vIOiOt+WPlumAieS4reWbvuW9oumbhuWQiFxyXG4gICAgZXZlbnRCdXMub24oJ3NoYXBlLnNlbGVjdC5nZXQnLCB0aGlzLmdldFNlbGVjdGVkLmJpbmQodGhpcykpXHJcbiAgICAvLyDojrflj5bpgInkuK3lm77lvaLpm4blkIhcclxuICAgIGV2ZW50QnVzLm9uKCdzaGFwZS5zZWxlY3QnLCB0aGlzLnNlbGVjdFNoYXBlLmJpbmQodGhpcykpXHJcbiAgICAvL1xyXG4gICAgZXZlbnRCdXMub24oJ3NoYXBlLm1vdmUnLCB0aGlzLm1vdmVTZWxlY3QuYmluZCh0aGlzKSlcclxuICAgIC8vIOWIoOmZpOWbvuW9olxyXG4gICAgZXZlbnRCdXMub24oJ3NoYXBlLnNlbGVjdC5yZW1vdmUnLCB0aGlzLnVuc2VsZWN0LmJpbmQodGhpcykpXHJcbiAgICAvLyDliKDpmaTlm77lvaJcclxuICAgIGV2ZW50QnVzLm9uKCdzaGFwZS5zZWxlY3QuY2hlY2snLCB0aGlzLmlzU2VsZWN0ZWQuYmluZCh0aGlzKSlcclxuICAgIC8vXHJcbiAgICBldmVudEJ1cy5vbignZGVzdHJveScsIHRoaXMuZGVzdHJveS5iaW5kKHRoaXMpKVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0YWJsZSh7IHN0YXRlLCBlbGVtZW50IH0pIHtcclxuICAgIGNvbnN0IHsgJGNvbnRhaW5lciB9ID0gdGhpc1xyXG5cclxuICAgIGNvbnN0ICRsYXlvdXQgPSAkY29udGFpbmVyLmZpbmQoJy5icGQtbGF5b3V0JylcclxuICAgIGNvbnN0ICRkZXNpZ25lciA9ICRjb250YWluZXIuZmluZCgnLmJwZC1kZXNpZ25lcicpXHJcblxyXG4gICAgJGRlc2lnbmVyLm9uKCdtb3VzZWRvd24uc2VsZWN0JywgZSA9PiB7XHJcbiAgICAgIHN0YXRlLmNoYW5nZSgnc2VsZWN0X3NoYXBlcycpXHJcbiAgICAgIGNvbnN0IGlkID0gZWxlbWVudC5kYXRhLmlkXHJcbiAgICAgIGlmIChlLmN0cmxLZXkpIHtcclxuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKGlkKSkge1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdElkcy5wdXNoKGlkKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVuc2VsZWN0KClcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RJZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZChpZCkpIHtcclxuICAgICAgICAgIHRoaXMudW5zZWxlY3QoKVxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RTaGFwZSh7IGlkczogaWQgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBlbGVtZW50LnNoYXBlLmdyb3VwTmFtZSAmJlxyXG4gICAgICAgIGVsZW1lbnQuc2hhcGUuZ3JvdXBOYW1lICE9PSAnQ2FsbEFjdGl2aXR5J1xyXG4gICAgICApIHtcclxuICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCdncm91cC5zaG93JywgdGhpcy5nZXRTZWxlY3RlZCgpKVxyXG4gICAgICB9XHJcbiAgICAgICQoZG9jdW1lbnQpLm9uKCdtb3VzZXVwLnNlbGVjdCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHN0YXRlLnJlc2V0KClcclxuICAgICAgICAkZGVzaWduZXIub2ZmKCdtb3VzZWRvd24uc2VsZWN0JylcclxuICAgICAgICAkKGRvY3VtZW50KS5vZmYoJ21vdXNldXAuc2VsZWN0JylcclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBtdWx0aVNlbGVjdGFibGUoeyBzdGF0ZSB9KSB7XHJcbiAgICBjb25zdCB7ICRjb250YWluZXIsIGNvbmZpZyB9ID0gdGhpc1xyXG5cclxuICAgIGNvbnN0ICRsYXlvdXQgPSAkY29udGFpbmVyLmZpbmQoJy5icGQtbGF5b3V0JylcclxuICAgIGNvbnN0ICRkZXNpZ25lciA9ICRjb250YWluZXIuZmluZCgnLmJwZC1kZXNpZ25lcicpXHJcblxyXG4gICAgY29uc3Qgb3JkZXJzID0gZXZlbnRCdXMudHJpZ2dlcignb3JkZXJzLmdldCcpXHJcblxyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXNcclxuXHJcbiAgICAkbGF5b3V0XHJcbiAgICAgIC5vZmYoJ21vdXNlZG93bi5tdWx0aXNlbGVjdCcpXHJcbiAgICAgIC5vbignbW91c2Vkb3duLm11bHRpc2VsZWN0JywgZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIGxldCAkbXVsdGlTZWxlY3QgPSBudWxsXHJcbiAgICAgICAgaWYgKCFlLmN0cmxLZXkpIHtcclxuICAgICAgICAgIHNlbGYudW5zZWxlY3QoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb3VzZURvd25Qb3MgPSBEcmF3VXRpbHMuZ2V0UmVsYXRpdmVQb3MoXHJcbiAgICAgICAgICBlLnBhZ2VYLFxyXG4gICAgICAgICAgZS5wYWdlWSxcclxuICAgICAgICAgICRkZXNpZ25lclxyXG4gICAgICAgIClcclxuICAgICAgICBzdGF0ZS5jaGFuZ2UoJ211bHRpX3NlbGVjdCcpXHJcblxyXG4gICAgICAgIC8vIOmAieS4reWbnuiwg1xyXG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5vblNlbGVjdGVkKSB7XHJcbiAgICAgICAgICBzZWxmLmNvbmZpZy5vblNlbGVjdGVkKG51bGwpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkbGF5b3V0Lm9uKCdtb3VzZW1vdmUubXVsdGlzZWxlY3QnLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICBpZiAoJG11bHRpU2VsZWN0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgJG11bHRpU2VsZWN0ID0gJChcIjxkaXYgY2xhc3M9J211bHRpc2VsZWN0LWJveCc+PC9kaXY+XCIpLmFwcGVuZFRvKFxyXG4gICAgICAgICAgICAgICRkZXNpZ25lclxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBtb3VzZVBvcyA9IERyYXdVdGlscy5nZXRSZWxhdGl2ZVBvcyhlLnBhZ2VYLCBlLnBhZ2VZLCAkZGVzaWduZXIpXHJcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IHtcclxuICAgICAgICAgICAgJ3otaW5kZXgnOiBvcmRlcnMubGVuZ3RoLFxyXG4gICAgICAgICAgICBsZWZ0OiBtb3VzZVBvcy54LFxyXG4gICAgICAgICAgICB0b3A6IG1vdXNlUG9zLnlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChtb3VzZVBvcy54ID4gbW91c2VEb3duUG9zLngpIHtcclxuICAgICAgICAgICAgc3R5bGUubGVmdCA9IG1vdXNlRG93blBvcy54XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAobW91c2VQb3MueSA+IG1vdXNlRG93blBvcy55KSB7XHJcbiAgICAgICAgICAgIHN0eWxlLnRvcCA9IG1vdXNlRG93blBvcy55XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBzdHlsZS53aWR0aCA9IE1hdGguYWJzKG1vdXNlUG9zLnggLSBtb3VzZURvd25Qb3MueClcclxuICAgICAgICAgIHN0eWxlLmhlaWdodCA9IE1hdGguYWJzKG1vdXNlUG9zLnkgLSBtb3VzZURvd25Qb3MueSlcclxuICAgICAgICAgICRtdWx0aVNlbGVjdC5jc3Moc3R5bGUpXHJcbiAgICAgICAgfSlcclxuICAgICAgICAkKGRvY3VtZW50KVxyXG4gICAgICAgICAgLm9mZignbW91c2V1cC5tdWx0aXNlbGVjdCcpXHJcbiAgICAgICAgICAub24oJ21vdXNldXAubXVsdGlzZWxlY3QnLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIGlmICgkbXVsdGlTZWxlY3QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0ge1xyXG4gICAgICAgICAgICAgICAgeDogcmVzdG9yZVNjYWxlKCRtdWx0aVNlbGVjdC5wb3NpdGlvbigpLmxlZnQpLFxyXG4gICAgICAgICAgICAgICAgeTogcmVzdG9yZVNjYWxlKCRtdWx0aVNlbGVjdC5wb3NpdGlvbigpLnRvcCksXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogcmVzdG9yZVNjYWxlKCRtdWx0aVNlbGVjdC53aWR0aCgpKSxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogcmVzdG9yZVNjYWxlKCRtdWx0aVNlbGVjdC5oZWlnaHQoKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29uc3QgaWRzID0gRHJhd1V0aWxzLmdldEVsZW1lbnRJZHNCeVJhbmdlKHJhbmdlKVxyXG4gICAgICAgICAgICAgIGlmIChlLmN0cmxLZXkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdElkcyA9IHNlbGYuZ2V0U2VsZWN0ZWRJZHMoKVxyXG4gICAgICAgICAgICAgICAgbWVyZ2VBcnJheShpZHMsIHNlbGVjdElkcylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgc2VsZi51bnNlbGVjdCgpXHJcbiAgICAgICAgICAgICAgc2VsZi5zZWxlY3RTaGFwZSh7IGlkcyB9KVxyXG4gICAgICAgICAgICAgICRtdWx0aVNlbGVjdC5yZW1vdmUoKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN0YXRlLnJlc2V0KClcclxuICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKCdtb3VzZXVwLm11bHRpc2VsZWN0JylcclxuICAgICAgICAgICAgJGxheW91dC5vZmYoJ21vdXNlbW92ZS5tdWx0aXNlbGVjdCcpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICRsYXlvdXQub2ZmKCdtb3VzZWRvd24ubXVsdGlzZWxlY3QnKVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W6YCJ5Lit5Zu+5b2iaWTpm4blkIhcclxuICAgKi9cclxuICBnZXRTZWxlY3RlZElkcygpIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdElkc1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W6YCJ5Lit5Zu+5b2i6ZuG5ZCIXHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWQoKSB7XHJcbiAgICBjb25zdCBlbGVtZW50cyA9IFtdXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0SWRzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5zZWxlY3RJZHNbaV1cclxuICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50QnVzLnRyaWdnZXIoJ2VsZW1lbnQuZ2V0JywgaWQpXHJcbiAgICAgIGlmICghZWxlbWVudC5zaGFwZS5sb2NrZWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBlbGVtZW50c1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0geyp9IGhcclxuICAgKiBAcGFyYW0geyp9IGRcclxuICAgKi9cclxuICBzZWxlY3RTaGFwZSh7IGlkcywgZCB9KSB7XHJcbiAgICBpZiAodHlwZW9mIGlkcyA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgaWRzID0gW2lkc11cclxuICAgIH1cclxuICAgIGlmIChpZHMubGVuZ3RoIDw9IDApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBjb25zdCB1bmlxdWVBcnIgPSBtZXJnZUFycmF5KFtdLCBpZHMpXHJcbiAgICBjb25zdCBuZXdJZHMgPSBbXVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgY29uc3QgaWQgPSBpZHNbaV1cclxuICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50QnVzLnRyaWdnZXIoJ2VsZW1lbnQuZ2V0JywgaWQpXHJcbiAgICAgIGlmIChcclxuICAgICAgICBlbGVtZW50LnNoYXBlLnBhcmVudCAmJlxyXG4gICAgICAgIGVsZW1lbnQuc2hhcGUucmVzaXplRGlyLmxlbmd0aCA9PT0gMCAmJlxyXG4gICAgICAgIG5ld0lkcy5pbmRleE9mKGVsZW1lbnQuc2hhcGUucGFyZW50KSA8IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgbmV3SWRzLnB1c2goZWxlbWVudC5zaGFwZS5wYXJlbnQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKG5ld0lkcy5pbmRleE9mKGlkKSA8IDApIHtcclxuICAgICAgICAgIG5ld0lkcy5wdXNoKGlkKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWRzID0gbmV3SWRzXHJcbiAgICBldmVudEJ1cy50cmlnZ2VyKCdhbmNob3IucmVtb3ZlJylcclxuICAgIHRoaXMuc2VsZWN0SWRzID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIGNvbnN0IGlkID0gaWRzW2ldXHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudEJ1cy50cmlnZ2VyKCdlbGVtZW50LmdldCcsIGlkKVxyXG4gICAgICB0aGlzLnNlbGVjdElkcy5wdXNoKGlkKVxyXG4gICAgICBpZiAoZWxlbWVudC5zaGFwZS5icG1uTmFtZSA9PT0gJ1NlcXVlbmNlRmxvdycpIHtcclxuICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCdjb25uZWN0aW9uLnJlbmRlcicsIHsgZWxlbWVudCB9KVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2FuY2hvci5zaG93JywgZWxlbWVudClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBzZWxlY3RJZHMgPSB0aGlzLnNlbGVjdElkc1xyXG4gICAgdmFyIG4gPSBmYWxzZVxyXG4gICAgaWYgKHNlbGVjdElkcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50QnVzLnRyaWdnZXIoJ2VsZW1lbnQuZ2V0Jywgc2VsZWN0SWRzWzBdKVxyXG5cclxuICAgICAgaWYgKGVsZW1lbnQuc2hhcGUuYnBtbk5hbWUgPT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgICAgbiA9IHRydWVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHNlbGVjdElkcy5sZW5ndGggPiAwICYmICFuKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyU2VsZWN0Qm94KHNlbGVjdElkcylcclxuICAgIH1cclxuXHJcbiAgICAvLyDpgInkuK3lm57osINcclxuICAgIGlmICh0aGlzLmNvbmZpZy5vblNlbGVjdGVkKSB7XHJcbiAgICAgIGlmIChzZWxlY3RJZHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWcub25TZWxlY3RlZChzZXRFeHBvcnREYXRhKHRoaXMuZ2V0U2VsZWN0ZWQoKVswXSkpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jb25maWcub25TZWxlY3RlZChudWxsKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXZlbnRCdXMudHJpZ2dlcignZGlyZWN0aW9uLnNob3cnKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0geyp9IHNlbGVjdElkc1xyXG4gICAqL1xyXG4gIHJlbmRlclNlbGVjdEJveChzZWxlY3RJZHMpIHtcclxuICAgIGNvbnN0IHsgJGNvbnRhaW5lciB9ID0gdGhpc1xyXG5cclxuICAgIGNvbnN0ICRsYXlvdXQgPSAkY29udGFpbmVyLmZpbmQoJy5icGQtbGF5b3V0JylcclxuICAgIGNvbnN0ICRkZXNpZ25lciA9ICRjb250YWluZXIuZmluZCgnLmJwZC1kZXNpZ25lcicpXHJcblxyXG4gICAgY29uc3Qgb3JkZXJzID0gZXZlbnRCdXMudHJpZ2dlcignb3JkZXJzLmdldCcpXHJcblxyXG4gICAgbGV0ICRzZWxlY3RCb3ggPSAkZGVzaWduZXIuZmluZCgnLnNoYXBlLXNlbGVjdCcpXHJcblxyXG4gICAgaWYgKCRzZWxlY3RCb3gubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICRzZWxlY3RCb3ggPSAkKFxyXG4gICAgICAgIFwiPGRpdiBjbGFzcz0nc2hhcGUtc2VsZWN0Jz48Y2FudmFzIGNsYXNzPSdzaGFwZS1ib3VuZCc+PC9jYW52YXM+PC9kaXY+XCJcclxuICAgICAgKS5hcHBlbmRUbygkZGVzaWduZXIpXHJcbiAgICB9XHJcbiAgICAkc2VsZWN0Qm94LnNob3coKVxyXG4gICAgZXZlbnRCdXMudHJpZ2dlcignZ3JvdXAuaGlkZScsICRzZWxlY3RCb3gpXHJcblxyXG4gICAgbGV0IGFuZ2xlID0gMFxyXG4gICAgbGV0IGRhdGEgPSB7fVxyXG4gICAgaWYgKHNlbGVjdElkcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50QnVzLnRyaWdnZXIoJ2VsZW1lbnQuZ2V0Jywgc2VsZWN0SWRzWzBdKVxyXG4gICAgICBkYXRhLmFuZ2xlID0gYW5nbGUgPSBlbGVtZW50LnNoYXBlLnNoYXBlU3R5bGUuYW5nbGVcclxuICAgICAgZGF0YS56aW5kZXggPSBlbGVtZW50LnNoYXBlLnNoYXBlU3R5bGUuemluZGV4XHJcbiAgICAgIGRhdGEuaGVpZ2h0ID0gZWxlbWVudC5wbGFuZS5ib3VuZHMuaGVpZ2h0XHJcbiAgICAgIGRhdGEud2lkdGggPSBlbGVtZW50LnBsYW5lLmJvdW5kcy53aWR0aFxyXG4gICAgICBkYXRhLnggPSBlbGVtZW50LnBsYW5lLmJvdW5kcy54XHJcbiAgICAgIGRhdGEueSA9IGVsZW1lbnQucGxhbmUuYm91bmRzLnlcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICBlbGVtZW50LnNoYXBlLmdyb3VwTmFtZSAmJlxyXG4gICAgICAgIGVsZW1lbnQuc2hhcGUuZ3JvdXBOYW1lICE9PSAnQ2FsbEFjdGl2aXR5J1xyXG4gICAgICApIHtcclxuICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCdncm91cC5zaG93JywgdGhpcy5nZXRTZWxlY3RlZCgpKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkYXRhID0gdGhpcy5nZXRDb250cm9sQm94KHNlbGVjdElkcylcclxuICAgIH1cclxuICAgIGNvbnN0IHNoYXBlQm94ID0gRHJhd1V0aWxzLmdldFJvdGF0ZWRCb3goZGF0YSwgYW5nbGUpXHJcblxyXG4gICAgdGhpcy5yZW5kZXJDb250cm9sQm91bmQoJHNlbGVjdEJveCwgZGF0YSwgc2hhcGVCb3gsIGFuZ2xlKVxyXG5cclxuICAgICRzZWxlY3RCb3guY3NzKHtcclxuICAgICAgbGVmdDogc2V0U2NhbGUoc2hhcGVCb3gueCksXHJcbiAgICAgIHRvcDogc2V0U2NhbGUoc2hhcGVCb3gueSksXHJcbiAgICAgIHdpZHRoOiBzZXRTY2FsZShzaGFwZUJveC53aWR0aCksXHJcbiAgICAgIGhlaWdodDogc2V0U2NhbGUoc2hhcGVCb3guaGVpZ2h0KSxcclxuICAgICAgJ3otaW5kZXgnOiBvcmRlcnMubGVuZ3RoLFxyXG4gICAgICBkaXNwbGF5OiAnYmxvY2snXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0geyp9ICRzZWxlY3RCb3hcclxuICAgKiBAcGFyYW0geyp9IHNoYXBlQm94XHJcbiAgICogQHBhcmFtIHsqfSBhbmdsZVxyXG4gICAqL1xyXG4gIHJlbmRlckNvbnRyb2xCb3VuZCgkc2VsZWN0Qm94LCBkYXRhLCBzaGFwZUJveCwgYW5nbGUpIHtcclxuICAgIGNvbnN0IHsgY29uZmlnIH0gPSB0aGlzXHJcblxyXG4gICAgY29uc3Qgd2lkdGggPSBzZXRTY2FsZShzaGFwZUJveC53aWR0aClcclxuICAgIGNvbnN0IGhlaWdodCA9IHNldFNjYWxlKHNoYXBlQm94LmhlaWdodClcclxuICAgIGNvbnN0IGJvdW5kVyA9IHdpZHRoICsgMjBcclxuICAgIGNvbnN0IGJvdW5kSCA9IGhlaWdodCArIDIwXHJcblxyXG4gICAgY29uc3QgJGJvdW5kID0gJHNlbGVjdEJveC5maW5kKCcuc2hhcGUtYm91bmQnKVxyXG5cclxuICAgICRib3VuZC5hdHRyKHsgd2lkdGg6IGJvdW5kVywgaGVpZ2h0OiBib3VuZEggfSlcclxuXHJcbiAgICBjb25zdCBib3VuZDJEID0gJGJvdW5kWzBdLmdldENvbnRleHQoJzJkJylcclxuICAgIGJvdW5kMkQubGluZUpvaW4gPSAncm91bmQnXHJcbiAgICBib3VuZDJELmxpbmVXaWR0aCA9IDFcclxuICAgIGJvdW5kMkQuc3Ryb2tlU3R5bGUgPSBjb25maWcuY29sb3JcclxuICAgIGJvdW5kMkQuZ2xvYmFsQWxwaGEgPSAwLjVcclxuICAgIGJvdW5kMkQuc2F2ZSgpXHJcbiAgICBib3VuZDJELmNsZWFyUmVjdCgwLCAwLCBib3VuZFcsIGJvdW5kSClcclxuICAgIGJvdW5kMkQudHJhbnNsYXRlKGJvdW5kVyAvIDIsIGJvdW5kSCAvIDIpXHJcbiAgICBib3VuZDJELnJvdGF0ZShhbmdsZSlcclxuICAgIGJvdW5kMkQudHJhbnNsYXRlKC1ib3VuZFcgLyAyLCAtYm91bmRIIC8gMilcclxuICAgIGJvdW5kMkQudHJhbnNsYXRlKDkuNSwgOS41KVxyXG4gICAgY29uc3QgcmVjdCA9IHtcclxuICAgICAgeDogc2V0U2NhbGUoTWF0aC5yb3VuZChkYXRhLnggLSBzaGFwZUJveC54KSksXHJcbiAgICAgIHk6IHNldFNjYWxlKE1hdGgucm91bmQoZGF0YS55IC0gc2hhcGVCb3gueSkpLFxyXG4gICAgICB3aWR0aDogTWF0aC5mbG9vcihzZXRTY2FsZShkYXRhLndpZHRoKSArIDEpLFxyXG4gICAgICBoZWlndGg6IE1hdGguZmxvb3Ioc2V0U2NhbGUoZGF0YS5oZWlnaHQpICsgMSlcclxuICAgIH1cclxuICAgIGJvdW5kMkQuc3Ryb2tlUmVjdChyZWN0LngsIHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlndGgpXHJcbiAgICBib3VuZDJELnJlc3RvcmUoKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0geyp9IGVcclxuICAgKi9cclxuICBnZXRDb250cm9sQm94KHNlbGVjdElkcykge1xyXG4gICAgY29uc3Qgc2l6ZSA9IHsgeDE6IG51bGwsIHkxOiBudWxsLCB4MjogbnVsbCwgeTI6IG51bGwgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RJZHMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgY29uc3QgaWQgPSBzZWxlY3RJZHNbaV1cclxuICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50QnVzLnRyaWdnZXIoJ2VsZW1lbnQuZ2V0JywgaWQpXHJcbiAgICAgIGNvbnN0IHsgZGF0YSwgcGxhbmUsIHNoYXBlIH0gPSBlbGVtZW50XHJcblxyXG4gICAgICBsZXQgc2hhcGVCb3hTaXplXHJcblxyXG4gICAgICBpZiAoc2hhcGUuYnBtbk5hbWUgPT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgICAgc2hhcGVCb3hTaXplID0gRHJhd1V0aWxzLmdldENvbm5lY3Rpb25Cb3goZWxlbWVudClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzaGFwZUJveFNpemUgPSBEcmF3VXRpbHMuZ2V0U2hhcGVCb3goZWxlbWVudClcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2l6ZS54MSA9PSBudWxsIHx8IHNoYXBlQm94U2l6ZS54IDwgc2l6ZS54MSkge1xyXG4gICAgICAgIHNpemUueDEgPSBzaGFwZUJveFNpemUueFxyXG4gICAgICB9XHJcbiAgICAgIGlmIChzaXplLnkxID09IG51bGwgfHwgc2hhcGVCb3hTaXplLnkgPCBzaXplLnkxKSB7XHJcbiAgICAgICAgc2l6ZS55MSA9IHNoYXBlQm94U2l6ZS55XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNpemUueDIgPT0gbnVsbCB8fCBzaGFwZUJveFNpemUueCArIHNoYXBlQm94U2l6ZS53aWR0aCA+IHNpemUueDIpIHtcclxuICAgICAgICBzaXplLngyID0gc2hhcGVCb3hTaXplLnggKyBzaGFwZUJveFNpemUud2lkdGhcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2l6ZS55MiA9PSBudWxsIHx8IHNoYXBlQm94U2l6ZS55ICsgc2hhcGVCb3hTaXplLmhlaWdodCA+IHNpemUueTIpIHtcclxuICAgICAgICBzaXplLnkyID0gc2hhcGVCb3hTaXplLnkgKyBzaGFwZUJveFNpemUuaGVpZ2h0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHg6IHNpemUueDEsXHJcbiAgICAgIHk6IHNpemUueTEsXHJcbiAgICAgIHdpZHRoOiBzaXplLngyIC0gc2l6ZS54MSxcclxuICAgICAgaGVpZ2h0OiBzaXplLnkyIC0gc2l6ZS55MVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbW92ZVNlbGVjdCh7IGVsZW1lbnRzLCBwb3MgfSkge1xyXG4gICAgY29uc3QgaWRzID0gRHJhd1V0aWxzLmdldFNlbGVjdGVkQ29ubmVjdGlvbklkcygpXHJcbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAxICYmIGlkcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoaWRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3Qgc2VsZWN0SWRzID0gZXZlbnRCdXMudHJpZ2dlcignc2hhcGUuc2VsZWN0LmdldElkcycpXHJcbiAgICAgIHRoaXMucmVuZGVyU2VsZWN0Qm94KHNlbGVjdElkcylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0ICRjb250b3VyID0gdGhpcy4kY29udGFpbmVyLmZpbmQoJy5zaGFwZS1zZWxlY3QnKVxyXG4gICAgICAkY29udG91ci5jc3Moe1xyXG4gICAgICAgIGxlZnQ6IHBhcnNlRmxvYXQoJGNvbnRvdXIuY3NzKCdsZWZ0JykpICsgcG9zLngsXHJcbiAgICAgICAgdG9wOiBwYXJzZUZsb2F0KCRjb250b3VyLmNzcygndG9wJykpICsgcG9zLnlcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOa4heepuumAieS4rVxyXG4gICAqL1xyXG4gIHVuc2VsZWN0KCkge1xyXG4gICAgY29uc3Qgc2VsZWN0SWRzID0gdGhpcy5zZWxlY3RJZHNcclxuICAgIHRoaXMuc2VsZWN0SWRzID0gW11cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0SWRzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIGNvbnN0IGlkID0gc2VsZWN0SWRzW2ldXHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudEJ1cy50cmlnZ2VyKCdlbGVtZW50LmdldCcsIGlkKVxyXG4gICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LnNoYXBlLmJwbW5OYW1lID09PSAnU2VxdWVuY2VGbG93Jykge1xyXG4gICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2Nvbm5lY3Rpb24ucmVuZGVyJywgeyBlbGVtZW50IH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuJGNvbnRhaW5lci5maW5kKCcuc2hhcGUtc2VsZWN0JykuaGlkZSgpXHJcbiAgICBldmVudEJ1cy50cmlnZ2VyKCdzZWxlY3QuY2xlYXInKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Yik5pat5piv5ZCm6YCJ5LitXHJcbiAgICogQHBhcmFtIHsqfSBpZFxyXG4gICAqL1xyXG4gIGlzU2VsZWN0ZWQoaWQpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdElkcy5pbmRleE9mKGlkKSA+PSAwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOmUgOavgVxyXG4gICAqL1xyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICBjb25zdCAkbGF5b3V0ID0gdGhpcy4kY29udGFpbmVyLmZpbmQoJy5icGQtbGF5b3V0JylcclxuICAgIGNvbnN0ICRkZXNpZ25lciA9IHRoaXMuJGNvbnRhaW5lci5maW5kKCcuYnBkLWRlc2lnbmVyJylcclxuICAgICRkZXNpZ25lci5vZmYoJ21vdXNlZG93bi5zZWxlY3QnKVxyXG4gICAgJGxheW91dC5vZmYoJ21vdXNlZG93bi5tdWx0aXNlbGVjdCcpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTaGFwZVNlbGVjdFxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2ZlYXR1cmVzL3NlbGVjdC9TZWxlY3QuanMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBQ0E7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBS0E7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkE7QUFRQTtBQUNBO0FBQ0E7Ozs7Ozs7OztBQU1BO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFKQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFNQTs7O0FBRUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///53\n"); + +/***/ }), +/* 54 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__drag__ = __webpack_require__(55);\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0__drag__[\"a\" /* default */]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTQuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2RyYWcvaW5kZXguanM/NjUyZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2hhcGVEcmFnIGZyb20gJy4vZHJhZydcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNoYXBlRHJhZ1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2ZlYXR1cmVzL2RyYWcvaW5kZXguanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///54\n"); + +/***/ }), +/* 55 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_utils__ = __webpack_require__(1);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\nvar ShapeMove = function () {\n function ShapeMove(options, $container) {\n _classCallCheck(this, ShapeMove);\n\n this.options = options;\n\n this.$container = $container;\n\n this.init();\n }\n\n _createClass(ShapeMove, [{\n key: 'init',\n value: function init() {\n // 鼠标移动事件\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.drag', this.dragShape.bind(this));\n // 鼠标移动事件\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('connection.drag', this.dragConnection.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('destroy', this.destroy.bind(this));\n }\n }, {\n key: 'dragShape',\n value: function dragShape(_ref) {\n var _this = this;\n\n var state = _ref.state,\n element = _ref.element;\n var $container = this.$container,\n options = this.options;\n\n var $layout = $container.find('.bpd-layout');\n var $designer = $container.find('.bpd-designer');\n\n $designer.on('mousedown.drag', function (e) {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('direction.hide');\n\n state.change('drag_shapes');\n var pos1 = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getRelativePos(e.pageX, e.pageY, $designer);\n var selects = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.get');\n\n var drag = true;\n if (selects.length === 1 && selects[0].shape.bpmnName === 'SequenceFlow') {\n drag = false;\n }\n var bounds = null;\n if (drag) {\n bounds = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getBounding(selects);\n }\n\n var connectionIds = [];\n if (drag) {\n for (var i = 0; i < selects.length; i += 1) {\n var _selects$i = selects[i],\n data = _selects$i.data,\n shape = _selects$i.shape;\n\n if (shape.bpmnName === 'SequenceFlow') {\n if (data.sourceRef && connectionIds.indexOf(data.sourceRef) < 0) {\n connectionIds.push(data.sourceRef);\n }\n if (data.targetRef && connectionIds.indexOf(data.targetRef) < 0) {\n connectionIds.push(data.targetRef);\n }\n }\n if (connectionIds.indexOf(data.id) < 0) {\n connectionIds.push(data.id);\n }\n }\n }\n\n var connections = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getOutConnections(selects);\n selects = selects.concat(connections);\n\n $layout.on('mousemove.drag', function (e2) {\n var pos2 = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getRelativePos(e2.pageX, e2.pageY, $designer);\n var pos = {\n x: pos2.x - pos1.x,\n y: pos2.y - pos1.y\n };\n\n if (drag) {\n var newBounds = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"c\" /* cloneDeep */])(bounds);\n newBounds.x += pos.x;\n newBounds.y += pos.y;\n\n var snapLine = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.snapline.show', {\n size: newBounds,\n ids: connectionIds\n });\n\n pos = { x: newBounds.x - bounds.x, y: newBounds.y - bounds.y };\n pos2 = { x: pos1.x + pos.x, y: pos1.y + pos.y };\n bounds.x += pos.x;\n bounds.y += pos.y;\n }\n if (pos.x === 0 && pos.y === 0) {\n return;\n }\n _this.moveShape(selects, pos);\n pos1 = pos2;\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mouseup.drop').on('mouseup.drop', function () {\n // Model.updateMulti(h)\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mouseup.drop');\n });\n });\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).on('mouseup.drag', function () {\n state.reset();\n $layout.off('mousemove.drag');\n $designer.off('mousedown.drag');\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mouseup.drag');\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.snapline.hide');\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.tooltip.hide');\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('direction.show');\n });\n });\n }\n }, {\n key: 'dragConnection',\n value: function dragConnection(_ref2) {\n var _this2 = this;\n\n var state = _ref2.state,\n element = _ref2.element,\n point = _ref2.point;\n var $container = this.$container,\n options = this.options;\n\n var $layout = $container.find('.bpd-layout');\n var $designer = $container.find('.bpd-designer');\n\n $designer.on('mousedown.dragconnection', function () {\n state.change('drag_connection');\n var selectIds = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.getIds');\n var isSelect = false;\n if (selectIds.length > 1) {\n isSelect = true;\n }\n $layout.on('mousemove.dragconnection', function (e) {\n $layout.css('cursor', 'default');\n var mousePos = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getRelativePos(e.pageX, e.pageY, $designer);\n _this2.moveLinker(element, point, mousePos.x, mousePos.y);\n if (isSelect) {}\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mouseup.dropconnection').on('mouseup.dropconnection', function () {\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mouseup.dropconnection');\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.update', element);\n });\n });\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).on('mouseup.dragconnection', function () {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.point.remove');\n state.reset();\n $designer.off('mousedown.dragconnection');\n $layout.off('mousemove.dragconnection');\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mouseup.dragconnection');\n });\n });\n }\n\n /**\r\n *\r\n * @param {*} elements\r\n * @param {*} pos\r\n */\n\n }, {\n key: 'moveShape',\n value: function moveShape(elements, pos) {\n var ids = [];\n var selectIds = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.getIds');\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n ids.push(element.data.id);\n }\n var restorePos = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(pos);\n for (var _i = 0; _i < elements.length; _i++) {\n var _element = elements[_i];\n if (_element.shape.bpmnName === 'SequenceFlow') {\n var data = _element.data,\n plane = _element.plane,\n shape = _element.shape;\n\n var h = false;\n var m = false;\n if (!selectIds.indexOf(data.id) >= 0) {\n if (data.sourceRef != null && ids.indexOf(data.sourceRef) >= 0) {\n plane.waypoint[0].x += restorePos.x;\n plane.waypoint[0].y += restorePos.y;\n h = true;\n }\n if (data.targetRef != null && ids.indexOf(data.targetRef) >= 0) {\n plane.waypoint[plane.waypoint.length - 1].x += restorePos.x;\n plane.waypoint[plane.waypoint.length - 1].y += restorePos.y;\n m = true;\n }\n } else {\n if (data.sourceRef == null || ids.indexOf(data.sourceRef) >= 0) {\n plane.waypoint[0].x += restorePos.x;\n plane.waypoint[0].y += restorePos.y;\n h = true;\n }\n if (data.targetRef == null || ids.indexOf(data.targetRef) >= 0) {\n plane.waypoint[plane.waypoint.length - 1].x += restorePos.x;\n plane.waypoint[plane.waypoint.length - 1].y += restorePos.y;\n m = true;\n }\n }\n if (h && m) {\n for (var _i2 = 0; _i2 < shape.points.length; _i2 += 1) {\n var point = shape.points[_i2];\n point.x += restorePos.x;\n point.y += restorePos.y;\n }\n var $shape = this.$container.find('.shape-box[data-id=\"' + data.id + '\"]');\n var shapePos = $shape.position();\n\n $shape.css({\n left: shapePos.left += pos.x,\n top: shapePos.top += pos.y\n });\n } else {\n if (h || m) {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('connection.render', { element: _element, rendered: true });\n }\n }\n } else {\n this.moveDom(_element, restorePos, pos);\n }\n }\n\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.move', { elements: elements, pos: pos });\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.tooltip.show');\n }\n\n /**\r\n *\r\n * @param {*} connection\r\n * @param {*} type\r\n * @param {*} x\r\n * @param {*} y\r\n */\n\n }, {\n key: 'moveLinker',\n value: function moveLinker(connection, type, x, y) {\n var waypoint = connection.plane.waypoint;\n\n var sourcePoint = waypoint[0];\n var targetPoint = waypoint[waypoint.length - 1];\n var shapeData = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getShapeByPosition(x, y, this.$container, true);\n\n var point = null;\n var id = null;\n\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.point.remove');\n if (shapeData != null) {\n var element = shapeData.element;\n var data = element.data,\n plane = element.plane,\n shape = element.shape;\n\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.show', element);\n\n id = data.id;\n if (shapeData.type === 'bounds') {\n point = shapeData.anchor;\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.point.show', Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(point));\n } else {\n if (shapeData.type === 'shape') {\n var shapePoint;\n var connectionPointId;\n if (type === 'source') {\n shapePoint = { x: targetPoint.x, y: targetPoint.y };\n connectionPointId = connection.data.targetRef;\n } else {\n shapePoint = { x: sourcePoint.x, y: sourcePoint.y };\n connectionPointId = connection.data.sourceRef;\n }\n if (data.id === connectionPointId) {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.point.remove');\n point = { x: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(x), y: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(y), angle: null };\n id = null;\n } else {\n var anchors = shape.getAnchors();\n var center = {\n x: plane.bounds.x + plane.bounds.width / 2,\n y: plane.bounds.y + plane.bounds.height / 2\n };\n var num = -1;\n var pos = void 0;\n for (var i = 0; i < anchors.length; i += 1) {\n var anchor = anchors[i];\n var connectionPoint = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getRotated(center, { x: plane.bounds.x + anchor.x, y: plane.bounds.y + anchor.y }, shape.shapeStyle.angle);\n var distance = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].measureDistance(connectionPoint, shapePoint);\n if (num === -1 || distance < num) {\n num = distance;\n pos = connectionPoint;\n }\n }\n var angle = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getPointAngle(this.$container, data.id, pos.x, pos.y, 7);\n point = { x: pos.x, y: pos.y, angle: angle };\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.point.show', Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(point));\n }\n }\n }\n } else {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.point.remove');\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('anchor.remove');\n point = { x: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(x), y: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(y), angle: null };\n id = null;\n }\n\n if (type === 'source') {\n connection.data.sourceRef = id;\n sourcePoint.x = point.x;\n sourcePoint.y = point.y;\n sourcePoint.angle = point.angle;\n if (id == null) {\n if (point.x >= targetPoint.x - 6 && point.x <= targetPoint.x + 6) {\n sourcePoint.x = targetPoint.x;\n }\n if (point.y >= targetPoint.y - 6 && point.y <= targetPoint.y + 6) {\n sourcePoint.y = targetPoint.y;\n }\n }\n } else {\n connection.data.targetRef = id;\n targetPoint.x = point.x;\n targetPoint.y = point.y;\n targetPoint.angle = point.angle;\n if (id == null) {\n if (point.x >= sourcePoint.x - 6 && point.x <= sourcePoint.x + 6) {\n targetPoint.x = sourcePoint.x;\n }\n if (point.y >= sourcePoint.y - 6 && point.y <= sourcePoint.y + 6) {\n targetPoint.y = sourcePoint.y;\n }\n }\n }\n\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('connection.render', {\n element: connection,\n rendered: true\n });\n }\n }, {\n key: 'moveDom',\n value: function moveDom(element, restorePos, pos) {\n var data = element.data,\n plane = element.plane,\n shape = element.shape;\n\n\n plane.bounds.x += restorePos.x;\n plane.bounds.y += restorePos.y;\n\n var $shape = this.$container.find('.shape-box[data-id=\"' + data.id + '\"]');\n $shape.css({\n left: parseFloat($shape.css('left')) + pos.x,\n top: parseFloat($shape.css('top')) + pos.y\n });\n }\n /**\r\n * 销毁\r\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n var $designer = this.$container.find('.bpd-designer');\n $designer.off('mousedown.drag').off('mousedown.dragconnection');\n }\n }]);\n\n return ShapeMove;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (ShapeMove);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2RyYWcvZHJhZy5qcz83M2FmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBldmVudEJ1cyBmcm9tICcuLi8uLi9jb3JlL2V2ZW50QnVzJ1xyXG5pbXBvcnQgJCBmcm9tICcuLi8uLi91dGlscy9zbGltSlEnXHJcblxyXG5pbXBvcnQgRHJhd1V0aWxzIGZyb20gJy4uLy4uL2RyYXcvZHJhd1V0aWxzJ1xyXG5pbXBvcnQgeyBzZXRTY2FsZSwgY2xvbmVEZWVwLCByZXN0b3JlU2NhbGUgfSBmcm9tICcuLi8uLi91dGlscy91dGlscydcclxuXHJcbmNsYXNzIFNoYXBlTW92ZSB7XHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucywgJGNvbnRhaW5lcikge1xyXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xyXG5cclxuICAgIHRoaXMuJGNvbnRhaW5lciA9ICRjb250YWluZXJcclxuXHJcbiAgICB0aGlzLmluaXQoKVxyXG4gIH1cclxuICBpbml0KCkge1xyXG4gICAgLy8g6byg5qCH56e75Yqo5LqL5Lu2XHJcbiAgICBldmVudEJ1cy5vbignc2hhcGUuZHJhZycsIHRoaXMuZHJhZ1NoYXBlLmJpbmQodGhpcykpXHJcbiAgICAvLyDpvKDmoIfnp7vliqjkuovku7ZcclxuICAgIGV2ZW50QnVzLm9uKCdjb25uZWN0aW9uLmRyYWcnLCB0aGlzLmRyYWdDb25uZWN0aW9uLmJpbmQodGhpcykpXHJcbiAgICAvL1xyXG4gICAgZXZlbnRCdXMub24oJ2Rlc3Ryb3knLCB0aGlzLmRlc3Ryb3kuYmluZCh0aGlzKSlcclxuICB9XHJcblxyXG4gIGRyYWdTaGFwZSh7IHN0YXRlLCBlbGVtZW50IH0pIHtcclxuICAgIGNvbnN0IHsgJGNvbnRhaW5lciwgb3B0aW9ucyB9ID0gdGhpc1xyXG4gICAgY29uc3QgJGxheW91dCA9ICRjb250YWluZXIuZmluZCgnLmJwZC1sYXlvdXQnKVxyXG4gICAgY29uc3QgJGRlc2lnbmVyID0gJGNvbnRhaW5lci5maW5kKCcuYnBkLWRlc2lnbmVyJylcclxuXHJcbiAgICAkZGVzaWduZXIub24oJ21vdXNlZG93bi5kcmFnJywgZSA9PiB7XHJcbiAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2RpcmVjdGlvbi5oaWRlJylcclxuXHJcbiAgICAgIHN0YXRlLmNoYW5nZSgnZHJhZ19zaGFwZXMnKVxyXG4gICAgICBsZXQgcG9zMSA9IERyYXdVdGlscy5nZXRSZWxhdGl2ZVBvcyhlLnBhZ2VYLCBlLnBhZ2VZLCAkZGVzaWduZXIpXHJcbiAgICAgIGxldCBzZWxlY3RzID0gZXZlbnRCdXMudHJpZ2dlcignc2hhcGUuc2VsZWN0LmdldCcpXHJcblxyXG4gICAgICBsZXQgZHJhZyA9IHRydWVcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHNlbGVjdHMubGVuZ3RoID09PSAxICYmXHJcbiAgICAgICAgc2VsZWN0c1swXS5zaGFwZS5icG1uTmFtZSA9PT0gJ1NlcXVlbmNlRmxvdydcclxuICAgICAgKSB7XHJcbiAgICAgICAgZHJhZyA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgICAgbGV0IGJvdW5kcyA9IG51bGxcclxuICAgICAgaWYgKGRyYWcpIHtcclxuICAgICAgICBib3VuZHMgPSBEcmF3VXRpbHMuZ2V0Qm91bmRpbmcoc2VsZWN0cylcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY29ubmVjdGlvbklkcyA9IFtdXHJcbiAgICAgIGlmIChkcmFnKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICBjb25zdCB7IGRhdGEsIHNoYXBlIH0gPSBzZWxlY3RzW2ldXHJcbiAgICAgICAgICBpZiAoc2hhcGUuYnBtbk5hbWUgPT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLnNvdXJjZVJlZiAmJiBjb25uZWN0aW9uSWRzLmluZGV4T2YoZGF0YS5zb3VyY2VSZWYpIDwgMCkge1xyXG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25JZHMucHVzaChkYXRhLnNvdXJjZVJlZilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGF0YS50YXJnZXRSZWYgJiYgY29ubmVjdGlvbklkcy5pbmRleE9mKGRhdGEudGFyZ2V0UmVmKSA8IDApIHtcclxuICAgICAgICAgICAgICBjb25uZWN0aW9uSWRzLnB1c2goZGF0YS50YXJnZXRSZWYpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb25uZWN0aW9uSWRzLmluZGV4T2YoZGF0YS5pZCkgPCAwKSB7XHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25JZHMucHVzaChkYXRhLmlkKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY29ubmVjdGlvbnMgPSBEcmF3VXRpbHMuZ2V0T3V0Q29ubmVjdGlvbnMoc2VsZWN0cylcclxuICAgICAgc2VsZWN0cyA9IHNlbGVjdHMuY29uY2F0KGNvbm5lY3Rpb25zKVxyXG5cclxuICAgICAgJGxheW91dC5vbignbW91c2Vtb3ZlLmRyYWcnLCBlMiA9PiB7XHJcbiAgICAgICAgbGV0IHBvczIgPSBEcmF3VXRpbHMuZ2V0UmVsYXRpdmVQb3MoZTIucGFnZVgsIGUyLnBhZ2VZLCAkZGVzaWduZXIpXHJcbiAgICAgICAgbGV0IHBvcyA9IHtcclxuICAgICAgICAgIHg6IHBvczIueCAtIHBvczEueCxcclxuICAgICAgICAgIHk6IHBvczIueSAtIHBvczEueVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRyYWcpIHtcclxuICAgICAgICAgIGNvbnN0IG5ld0JvdW5kcyA9IGNsb25lRGVlcChib3VuZHMpXHJcbiAgICAgICAgICBuZXdCb3VuZHMueCArPSBwb3MueFxyXG4gICAgICAgICAgbmV3Qm91bmRzLnkgKz0gcG9zLnlcclxuXHJcbiAgICAgICAgICBjb25zdCBzbmFwTGluZSA9IGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLnNuYXBsaW5lLnNob3cnLCB7XHJcbiAgICAgICAgICAgIHNpemU6IG5ld0JvdW5kcyxcclxuICAgICAgICAgICAgaWRzOiBjb25uZWN0aW9uSWRzXHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgIHBvcyA9IHsgeDogbmV3Qm91bmRzLnggLSBib3VuZHMueCwgeTogbmV3Qm91bmRzLnkgLSBib3VuZHMueSB9XHJcbiAgICAgICAgICBwb3MyID0geyB4OiBwb3MxLnggKyBwb3MueCwgeTogcG9zMS55ICsgcG9zLnkgfVxyXG4gICAgICAgICAgYm91bmRzLnggKz0gcG9zLnhcclxuICAgICAgICAgIGJvdW5kcy55ICs9IHBvcy55XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwb3MueCA9PT0gMCAmJiBwb3MueSA9PT0gMCkge1xyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubW92ZVNoYXBlKHNlbGVjdHMsIHBvcylcclxuICAgICAgICBwb3MxID0gcG9zMlxyXG4gICAgICAgICQoZG9jdW1lbnQpXHJcbiAgICAgICAgICAub2ZmKCdtb3VzZXVwLmRyb3AnKVxyXG4gICAgICAgICAgLm9uKCdtb3VzZXVwLmRyb3AnLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgLy8gTW9kZWwudXBkYXRlTXVsdGkoaClcclxuICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKCdtb3VzZXVwLmRyb3AnKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgJChkb2N1bWVudCkub24oJ21vdXNldXAuZHJhZycsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHN0YXRlLnJlc2V0KClcclxuICAgICAgICAkbGF5b3V0Lm9mZignbW91c2Vtb3ZlLmRyYWcnKVxyXG4gICAgICAgICRkZXNpZ25lci5vZmYoJ21vdXNlZG93bi5kcmFnJylcclxuICAgICAgICAkKGRvY3VtZW50KS5vZmYoJ21vdXNldXAuZHJhZycpXHJcbiAgICAgICAgZXZlbnRCdXMudHJpZ2dlcignc2hhcGUuc25hcGxpbmUuaGlkZScpXHJcbiAgICAgICAgZXZlbnRCdXMudHJpZ2dlcignc2hhcGUudG9vbHRpcC5oaWRlJylcclxuICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCdkaXJlY3Rpb24uc2hvdycpXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZHJhZ0Nvbm5lY3Rpb24oeyBzdGF0ZSwgZWxlbWVudCwgcG9pbnQgfSkge1xyXG4gICAgY29uc3QgeyAkY29udGFpbmVyLCBvcHRpb25zIH0gPSB0aGlzXHJcbiAgICBjb25zdCAkbGF5b3V0ID0gJGNvbnRhaW5lci5maW5kKCcuYnBkLWxheW91dCcpXHJcbiAgICBjb25zdCAkZGVzaWduZXIgPSAkY29udGFpbmVyLmZpbmQoJy5icGQtZGVzaWduZXInKVxyXG5cclxuICAgICRkZXNpZ25lci5vbignbW91c2Vkb3duLmRyYWdjb25uZWN0aW9uJywgKCkgPT4ge1xyXG4gICAgICBzdGF0ZS5jaGFuZ2UoJ2RyYWdfY29ubmVjdGlvbicpXHJcbiAgICAgIGNvbnN0IHNlbGVjdElkcyA9IGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLnNlbGVjdC5nZXRJZHMnKVxyXG4gICAgICBsZXQgaXNTZWxlY3QgPSBmYWxzZVxyXG4gICAgICBpZiAoc2VsZWN0SWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBpc1NlbGVjdCA9IHRydWVcclxuICAgICAgfVxyXG4gICAgICAkbGF5b3V0Lm9uKCdtb3VzZW1vdmUuZHJhZ2Nvbm5lY3Rpb24nLCBlID0+IHtcclxuICAgICAgICAkbGF5b3V0LmNzcygnY3Vyc29yJywgJ2RlZmF1bHQnKVxyXG4gICAgICAgIGNvbnN0IG1vdXNlUG9zID0gRHJhd1V0aWxzLmdldFJlbGF0aXZlUG9zKGUucGFnZVgsIGUucGFnZVksICRkZXNpZ25lcilcclxuICAgICAgICB0aGlzLm1vdmVMaW5rZXIoZWxlbWVudCwgcG9pbnQsIG1vdXNlUG9zLngsIG1vdXNlUG9zLnkpXHJcbiAgICAgICAgaWYgKGlzU2VsZWN0KSB7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoZG9jdW1lbnQpXHJcbiAgICAgICAgICAub2ZmKCdtb3VzZXVwLmRyb3Bjb25uZWN0aW9uJylcclxuICAgICAgICAgIC5vbignbW91c2V1cC5kcm9wY29ubmVjdGlvbicsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoJ21vdXNldXAuZHJvcGNvbm5lY3Rpb24nKVxyXG4gICAgICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCdlbGVtZW50LnVwZGF0ZScsIGVsZW1lbnQpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICAkKGRvY3VtZW50KS5vbignbW91c2V1cC5kcmFnY29ubmVjdGlvbicsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2FuY2hvci5wb2ludC5yZW1vdmUnKVxyXG4gICAgICAgIHN0YXRlLnJlc2V0KClcclxuICAgICAgICAkZGVzaWduZXIub2ZmKCdtb3VzZWRvd24uZHJhZ2Nvbm5lY3Rpb24nKVxyXG4gICAgICAgICRsYXlvdXQub2ZmKCdtb3VzZW1vdmUuZHJhZ2Nvbm5lY3Rpb24nKVxyXG4gICAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2V1cC5kcmFnY29ubmVjdGlvbicpXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0geyp9IGVsZW1lbnRzXHJcbiAgICogQHBhcmFtIHsqfSBwb3NcclxuICAgKi9cclxuICBtb3ZlU2hhcGUoZWxlbWVudHMsIHBvcykge1xyXG4gICAgY29uc3QgaWRzID0gW11cclxuICAgIGNvbnN0IHNlbGVjdElkcyA9IGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLnNlbGVjdC5nZXRJZHMnKVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2ldXHJcbiAgICAgIGlkcy5wdXNoKGVsZW1lbnQuZGF0YS5pZClcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3RvcmVQb3MgPSByZXN0b3JlU2NhbGUocG9zKVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbaV1cclxuICAgICAgaWYgKGVsZW1lbnQuc2hhcGUuYnBtbk5hbWUgPT09ICdTZXF1ZW5jZUZsb3cnKSB7XHJcbiAgICAgICAgY29uc3QgeyBkYXRhLCBwbGFuZSwgc2hhcGUgfSA9IGVsZW1lbnRcclxuICAgICAgICB2YXIgaCA9IGZhbHNlXHJcbiAgICAgICAgdmFyIG0gPSBmYWxzZVxyXG4gICAgICAgIGlmICghc2VsZWN0SWRzLmluZGV4T2YoZGF0YS5pZCkgPj0gMCkge1xyXG4gICAgICAgICAgaWYgKGRhdGEuc291cmNlUmVmICE9IG51bGwgJiYgaWRzLmluZGV4T2YoZGF0YS5zb3VyY2VSZWYpID49IDApIHtcclxuICAgICAgICAgICAgcGxhbmUud2F5cG9pbnRbMF0ueCArPSByZXN0b3JlUG9zLnhcclxuICAgICAgICAgICAgcGxhbmUud2F5cG9pbnRbMF0ueSArPSByZXN0b3JlUG9zLnlcclxuICAgICAgICAgICAgaCA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkYXRhLnRhcmdldFJlZiAhPSBudWxsICYmIGlkcy5pbmRleE9mKGRhdGEudGFyZ2V0UmVmKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHBsYW5lLndheXBvaW50W3BsYW5lLndheXBvaW50Lmxlbmd0aCAtIDFdLnggKz0gcmVzdG9yZVBvcy54XHJcbiAgICAgICAgICAgIHBsYW5lLndheXBvaW50W3BsYW5lLndheXBvaW50Lmxlbmd0aCAtIDFdLnkgKz0gcmVzdG9yZVBvcy55XHJcbiAgICAgICAgICAgIG0gPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChkYXRhLnNvdXJjZVJlZiA9PSBudWxsIHx8IGlkcy5pbmRleE9mKGRhdGEuc291cmNlUmVmKSA+PSAwKSB7XHJcbiAgICAgICAgICAgIHBsYW5lLndheXBvaW50WzBdLnggKz0gcmVzdG9yZVBvcy54XHJcbiAgICAgICAgICAgIHBsYW5lLndheXBvaW50WzBdLnkgKz0gcmVzdG9yZVBvcy55XHJcbiAgICAgICAgICAgIGggPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZGF0YS50YXJnZXRSZWYgPT0gbnVsbCB8fCBpZHMuaW5kZXhPZihkYXRhLnRhcmdldFJlZikgPj0gMCkge1xyXG4gICAgICAgICAgICBwbGFuZS53YXlwb2ludFtwbGFuZS53YXlwb2ludC5sZW5ndGggLSAxXS54ICs9IHJlc3RvcmVQb3MueFxyXG4gICAgICAgICAgICBwbGFuZS53YXlwb2ludFtwbGFuZS53YXlwb2ludC5sZW5ndGggLSAxXS55ICs9IHJlc3RvcmVQb3MueVxyXG4gICAgICAgICAgICBtID0gdHJ1ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaCAmJiBtKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoYXBlLnBvaW50cy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IHNoYXBlLnBvaW50c1tpXVxyXG4gICAgICAgICAgICBwb2ludC54ICs9IHJlc3RvcmVQb3MueFxyXG4gICAgICAgICAgICBwb2ludC55ICs9IHJlc3RvcmVQb3MueVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgJHNoYXBlID0gdGhpcy4kY29udGFpbmVyLmZpbmQoXHJcbiAgICAgICAgICAgICcuc2hhcGUtYm94W2RhdGEtaWQ9XCInICsgZGF0YS5pZCArICdcIl0nXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICBjb25zdCBzaGFwZVBvcyA9ICRzaGFwZS5wb3NpdGlvbigpXHJcblxyXG4gICAgICAgICAgJHNoYXBlLmNzcyh7XHJcbiAgICAgICAgICAgIGxlZnQ6IChzaGFwZVBvcy5sZWZ0ICs9IHBvcy54KSxcclxuICAgICAgICAgICAgdG9wOiAoc2hhcGVQb3MudG9wICs9IHBvcy55KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGggfHwgbSkge1xyXG4gICAgICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCdjb25uZWN0aW9uLnJlbmRlcicsIHsgZWxlbWVudCwgcmVuZGVyZWQ6IHRydWUgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5tb3ZlRG9tKGVsZW1lbnQsIHJlc3RvcmVQb3MsIHBvcylcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLm1vdmUnLCB7IGVsZW1lbnRzLCBwb3MgfSlcclxuICAgIGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLnRvb2x0aXAuc2hvdycpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Kn0gY29ubmVjdGlvblxyXG4gICAqIEBwYXJhbSB7Kn0gdHlwZVxyXG4gICAqIEBwYXJhbSB7Kn0geFxyXG4gICAqIEBwYXJhbSB7Kn0geVxyXG4gICAqL1xyXG4gIG1vdmVMaW5rZXIoY29ubmVjdGlvbiwgdHlwZSwgeCwgeSkge1xyXG4gICAgY29uc3QgeyB3YXlwb2ludCB9ID0gY29ubmVjdGlvbi5wbGFuZVxyXG4gICAgY29uc3Qgc291cmNlUG9pbnQgPSB3YXlwb2ludFswXVxyXG4gICAgY29uc3QgdGFyZ2V0UG9pbnQgPSB3YXlwb2ludFt3YXlwb2ludC5sZW5ndGggLSAxXVxyXG4gICAgY29uc3Qgc2hhcGVEYXRhID0gRHJhd1V0aWxzLmdldFNoYXBlQnlQb3NpdGlvbih4LCB5LCB0aGlzLiRjb250YWluZXIsIHRydWUpXHJcblxyXG4gICAgbGV0IHBvaW50ID0gbnVsbFxyXG4gICAgbGV0IGlkID0gbnVsbFxyXG5cclxuICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2FuY2hvci5wb2ludC5yZW1vdmUnKVxyXG4gICAgaWYgKHNoYXBlRGF0YSAhPSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBzaGFwZURhdGEuZWxlbWVudFxyXG4gICAgICBjb25zdCB7IGRhdGEsIHBsYW5lLCBzaGFwZSB9ID0gZWxlbWVudFxyXG4gICAgICBldmVudEJ1cy50cmlnZ2VyKCdhbmNob3Iuc2hvdycsIGVsZW1lbnQpXHJcblxyXG4gICAgICBpZCA9IGRhdGEuaWRcclxuICAgICAgaWYgKHNoYXBlRGF0YS50eXBlID09PSAnYm91bmRzJykge1xyXG4gICAgICAgIHBvaW50ID0gc2hhcGVEYXRhLmFuY2hvclxyXG4gICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2FuY2hvci5wb2ludC5zaG93Jywgc2V0U2NhbGUocG9pbnQpKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChzaGFwZURhdGEudHlwZSA9PT0gJ3NoYXBlJykge1xyXG4gICAgICAgICAgdmFyIHNoYXBlUG9pbnRcclxuICAgICAgICAgIHZhciBjb25uZWN0aW9uUG9pbnRJZFxyXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdzb3VyY2UnKSB7XHJcbiAgICAgICAgICAgIHNoYXBlUG9pbnQgPSB7IHg6IHRhcmdldFBvaW50LngsIHk6IHRhcmdldFBvaW50LnkgfVxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUG9pbnRJZCA9IGNvbm5lY3Rpb24uZGF0YS50YXJnZXRSZWZcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNoYXBlUG9pbnQgPSB7IHg6IHNvdXJjZVBvaW50LngsIHk6IHNvdXJjZVBvaW50LnkgfVxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUG9pbnRJZCA9IGNvbm5lY3Rpb24uZGF0YS5zb3VyY2VSZWZcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkYXRhLmlkID09PSBjb25uZWN0aW9uUG9pbnRJZCkge1xyXG4gICAgICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCdhbmNob3IucG9pbnQucmVtb3ZlJylcclxuICAgICAgICAgICAgcG9pbnQgPSB7IHg6IHJlc3RvcmVTY2FsZSh4KSwgeTogcmVzdG9yZVNjYWxlKHkpLCBhbmdsZTogbnVsbCB9XHJcbiAgICAgICAgICAgIGlkID0gbnVsbFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgYW5jaG9ycyA9IHNoYXBlLmdldEFuY2hvcnMoKVxyXG4gICAgICAgICAgICBjb25zdCBjZW50ZXIgPSB7XHJcbiAgICAgICAgICAgICAgeDogcGxhbmUuYm91bmRzLnggKyBwbGFuZS5ib3VuZHMud2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgIHk6IHBsYW5lLmJvdW5kcy55ICsgcGxhbmUuYm91bmRzLmhlaWdodCAvIDJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgbnVtID0gLTFcclxuICAgICAgICAgICAgbGV0IHBvc1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFuY2hvcnMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICAgICAgICBjb25zdCBhbmNob3IgPSBhbmNob3JzW2ldXHJcbiAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvblBvaW50ID0gRHJhd1V0aWxzLmdldFJvdGF0ZWQoXHJcbiAgICAgICAgICAgICAgICBjZW50ZXIsXHJcbiAgICAgICAgICAgICAgICB7IHg6IHBsYW5lLmJvdW5kcy54ICsgYW5jaG9yLngsIHk6IHBsYW5lLmJvdW5kcy55ICsgYW5jaG9yLnkgfSxcclxuICAgICAgICAgICAgICAgIHNoYXBlLnNoYXBlU3R5bGUuYW5nbGVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBEcmF3VXRpbHMubWVhc3VyZURpc3RhbmNlKFxyXG4gICAgICAgICAgICAgICAgY29ubmVjdGlvblBvaW50LFxyXG4gICAgICAgICAgICAgICAgc2hhcGVQb2ludFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICBpZiAobnVtID09PSAtMSB8fCBkaXN0YW5jZSA8IG51bSkge1xyXG4gICAgICAgICAgICAgICAgbnVtID0gZGlzdGFuY2VcclxuICAgICAgICAgICAgICAgIHBvcyA9IGNvbm5lY3Rpb25Qb2ludFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBhbmdsZSA9IERyYXdVdGlscy5nZXRQb2ludEFuZ2xlKFxyXG4gICAgICAgICAgICAgIHRoaXMuJGNvbnRhaW5lcixcclxuICAgICAgICAgICAgICBkYXRhLmlkLFxyXG4gICAgICAgICAgICAgIHBvcy54LFxyXG4gICAgICAgICAgICAgIHBvcy55LFxyXG4gICAgICAgICAgICAgIDdcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBwb2ludCA9IHsgeDogcG9zLngsIHk6IHBvcy55LCBhbmdsZSB9XHJcbiAgICAgICAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2FuY2hvci5wb2ludC5zaG93Jywgc2V0U2NhbGUocG9pbnQpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXZlbnRCdXMudHJpZ2dlcignYW5jaG9yLnBvaW50LnJlbW92ZScpXHJcbiAgICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2FuY2hvci5yZW1vdmUnKVxyXG4gICAgICBwb2ludCA9IHsgeDogcmVzdG9yZVNjYWxlKHgpLCB5OiByZXN0b3JlU2NhbGUoeSksIGFuZ2xlOiBudWxsIH1cclxuICAgICAgaWQgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGUgPT09ICdzb3VyY2UnKSB7XHJcbiAgICAgIGNvbm5lY3Rpb24uZGF0YS5zb3VyY2VSZWYgPSBpZFxyXG4gICAgICBzb3VyY2VQb2ludC54ID0gcG9pbnQueFxyXG4gICAgICBzb3VyY2VQb2ludC55ID0gcG9pbnQueVxyXG4gICAgICBzb3VyY2VQb2ludC5hbmdsZSA9IHBvaW50LmFuZ2xlXHJcbiAgICAgIGlmIChpZCA9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHBvaW50LnggPj0gdGFyZ2V0UG9pbnQueCAtIDYgJiYgcG9pbnQueCA8PSB0YXJnZXRQb2ludC54ICsgNikge1xyXG4gICAgICAgICAgc291cmNlUG9pbnQueCA9IHRhcmdldFBvaW50LnhcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBvaW50LnkgPj0gdGFyZ2V0UG9pbnQueSAtIDYgJiYgcG9pbnQueSA8PSB0YXJnZXRQb2ludC55ICsgNikge1xyXG4gICAgICAgICAgc291cmNlUG9pbnQueSA9IHRhcmdldFBvaW50LnlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbm5lY3Rpb24uZGF0YS50YXJnZXRSZWYgPSBpZFxyXG4gICAgICB0YXJnZXRQb2ludC54ID0gcG9pbnQueFxyXG4gICAgICB0YXJnZXRQb2ludC55ID0gcG9pbnQueVxyXG4gICAgICB0YXJnZXRQb2ludC5hbmdsZSA9IHBvaW50LmFuZ2xlXHJcbiAgICAgIGlmIChpZCA9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHBvaW50LnggPj0gc291cmNlUG9pbnQueCAtIDYgJiYgcG9pbnQueCA8PSBzb3VyY2VQb2ludC54ICsgNikge1xyXG4gICAgICAgICAgdGFyZ2V0UG9pbnQueCA9IHNvdXJjZVBvaW50LnhcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBvaW50LnkgPj0gc291cmNlUG9pbnQueSAtIDYgJiYgcG9pbnQueSA8PSBzb3VyY2VQb2ludC55ICsgNikge1xyXG4gICAgICAgICAgdGFyZ2V0UG9pbnQueSA9IHNvdXJjZVBvaW50LnlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBldmVudEJ1cy50cmlnZ2VyKCdjb25uZWN0aW9uLnJlbmRlcicsIHtcclxuICAgICAgZWxlbWVudDogY29ubmVjdGlvbixcclxuICAgICAgcmVuZGVyZWQ6IHRydWVcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBtb3ZlRG9tKGVsZW1lbnQsIHJlc3RvcmVQb3MsIHBvcykge1xyXG4gICAgY29uc3QgeyBkYXRhLCBwbGFuZSwgc2hhcGUgfSA9IGVsZW1lbnRcclxuXHJcbiAgICBwbGFuZS5ib3VuZHMueCArPSByZXN0b3JlUG9zLnhcclxuICAgIHBsYW5lLmJvdW5kcy55ICs9IHJlc3RvcmVQb3MueVxyXG5cclxuICAgIGNvbnN0ICRzaGFwZSA9IHRoaXMuJGNvbnRhaW5lci5maW5kKCcuc2hhcGUtYm94W2RhdGEtaWQ9XCInICsgZGF0YS5pZCArICdcIl0nKVxyXG4gICAgJHNoYXBlLmNzcyh7XHJcbiAgICAgIGxlZnQ6IHBhcnNlRmxvYXQoJHNoYXBlLmNzcygnbGVmdCcpKSArIHBvcy54LFxyXG4gICAgICB0b3A6IHBhcnNlRmxvYXQoJHNoYXBlLmNzcygndG9wJykpICsgcG9zLnlcclxuICAgIH0pXHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOmUgOavgVxyXG4gICAqL1xyXG4gIGRlc3Ryb3koKSB7XHJcbiAgICBjb25zdCAkZGVzaWduZXIgPSB0aGlzLiRjb250YWluZXIuZmluZCgnLmJwZC1kZXNpZ25lcicpXHJcbiAgICAkZGVzaWduZXIub2ZmKCdtb3VzZWRvd24uZHJhZycpLm9mZignbW91c2Vkb3duLmRyYWdjb25uZWN0aW9uJylcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNoYXBlTW92ZVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2ZlYXR1cmVzL2RyYWcvZHJhZy5qcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUFBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUNBO0FBREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBT0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRkE7QUFJQTs7O0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7Ozs7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///55\n"); + +/***/ }), +/* 56 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__snapline__ = __webpack_require__(57);\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0__snapline__[\"a\" /* default */]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3NuYXBsaW5lL2luZGV4LmpzPzlkZDgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNuYXBsaW5lIGZyb20gJy4vc25hcGxpbmUnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBTbmFwbGluZVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2ZlYXR1cmVzL3NuYXBsaW5lL2luZGV4LmpzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///56\n"); + +/***/ }), +/* 57 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_utils__ = __webpack_require__(1);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\nvar DEFAULT_CONFIG = {};\n\nvar Snapline = function () {\n function Snapline($container, config) {\n _classCallCheck(this, Snapline);\n\n this.$container = $container;\n\n this.config = Object.assign({}, DEFAULT_CONFIG, config);\n\n this.init();\n }\n\n _createClass(Snapline, [{\n key: 'init',\n value: function init() {\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.snapline.show', this.showSnapLine.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.snapline.hide', this.hideSnapLine.bind(this));\n }\n\n /**\r\n *\r\n * @param {*} size\r\n * @param {*} ids\r\n * @param {*} render\r\n * @param {*} element\r\n */\n\n }, {\n key: 'renderSnapLine',\n value: function renderSnapLine(size, ids, render, element) {\n var $container = this.$container;\n\n var orders = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('orders.get');\n var $layout = $container.find('.bpd-layout');\n var $designer = $container.find('.bpd-designer');\n\n var top = size.y;\n var bottom = size.y + size.height;\n var left = size.x;\n var right = size.x + size.width;\n var centerX = size.x + size.width / 2;\n var centerY = size.y + size.height / 2;\n\n var f = 2;\n var snapData = { v: null, h: null, attach: null };\n if (!render) {\n element = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get', ids[0]);\n }\n\n if (ids.length === 1 && element.shape.groupName === 'boundaryEvent') {\n // TODO:边界事件\n }\n if (snapData.attach == null) {\n for (var i = orders.length - 1; i >= 0; i--) {\n var id = orders[i].id;\n var el = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.get', id);\n\n var data = el.data,\n plane = el.plane,\n shape = el.shape;\n\n\n if (shape.bpmnName === 'SequenceFlow' || ids.indexOf(id) >= 0 || shape.parent) {\n continue;\n }\n\n var bounds = plane.bounds;\n\n if (snapData.h == null) {\n var shapeTop = bounds.y;\n var shapeCenterY = bounds.y + bounds.height / 2;\n var shapeBottom = bounds.y + bounds.height;\n if (shapeCenterY >= centerY - f && shapeCenterY <= centerY + f) {\n snapData.h = { type: 'middle', y: shapeCenterY };\n size.y = shapeCenterY - size.height / 2;\n } else {\n if (shapeTop >= top - f && shapeTop <= top + f) {\n snapData.h = { type: 'top', y: shapeTop };\n size.y = shapeTop;\n } else {\n if (shapeBottom >= bottom - f && shapeBottom <= bottom + f) {\n snapData.h = { type: 'bottom', y: shapeBottom };\n size.y = shapeBottom - size.height;\n } else {\n if (shapeBottom >= top - f && shapeBottom <= top + f) {\n snapData.h = { type: 'top', y: shapeBottom };\n size.y = shapeBottom;\n } else {\n if (shapeTop >= bottom - f && shapeTop <= bottom + f) {\n snapData.h = { type: 'bottom', y: shapeTop };\n size.y = shapeTop - size.height;\n }\n }\n }\n }\n }\n }\n if (snapData.v == null) {\n var shapeLeft = bounds.x;\n var shapeCenterX = bounds.x + bounds.width / 2;\n var shapeRight = bounds.x + bounds.width;\n if (shapeCenterX >= centerX - f && shapeCenterX <= centerX + f) {\n snapData.v = { type: 'center', x: shapeCenterX };\n size.x = shapeCenterX - size.width / 2;\n } else {\n if (shapeLeft >= left - f && shapeLeft <= left + f) {\n snapData.v = { type: 'left', x: shapeLeft };\n size.x = shapeLeft;\n } else {\n if (shapeRight >= right - f && shapeRight <= right + f) {\n snapData.v = { type: 'right', x: shapeRight };\n size.x = shapeRight - size.width;\n } else {\n if (shapeRight >= left - f && shapeRight <= left + f) {\n snapData.v = { type: 'left', x: shapeRight };\n size.x = shapeRight;\n } else {\n if (shapeLeft >= right - f && shapeLeft <= right + f) {\n snapData.v = { type: 'right', x: shapeLeft };\n size.x = shapeLeft - size.width;\n }\n }\n }\n }\n }\n }\n if (snapData.h != null && snapData.v != null) {\n break;\n }\n }\n }\n this.hideSnapLine();\n\n if (snapData.attach != null) {\n var $snapLine = $designer.find('.snapline-attach');\n if ($snapLine.length === 0) {\n $snapLine = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(\"
\").appendTo($designer);\n }\n var x = snapData.attach;\n var a = x.lineStyle.lineWidth;\n $snapLine.css({\n width: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(x.props.w + a),\n height: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(x.props.h + a),\n left: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(x.props.x - a / 2) - 2,\n top: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(x.props.y - a / 2) - 2,\n 'z-index': Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])('#' + x.id).css('z-index')\n }).show();\n }\n\n if (snapData.h != null) {\n var $snapLineH = $designer.find('.snapline-attach-h');\n\n if ($snapLineH.length === 0) {\n $snapLineH = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(\"
\").appendTo($designer);\n }\n $snapLineH.css({\n width: $designer.width(),\n left: 0,\n top: Math.round(Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(snapData.h.y)),\n 'z-index': orders.length + 1\n }).show();\n }\n if (snapData.v != null) {\n var $snapLineV = $designer.find('.snapline-attach-v');\n if ($snapLineV.length === 0) {\n $snapLineV = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(\"
\").appendTo($designer);\n }\n $snapLineV.css({\n height: $designer.height(),\n top: 0,\n left: Math.round(Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(snapData.v.x)),\n 'z-index': orders.length + 1\n }).show();\n }\n return snapData;\n }\n }, {\n key: 'showSnapLine',\n value: function showSnapLine(_ref) {\n var size = _ref.size,\n ids = _ref.ids,\n render = _ref.render,\n element = _ref.element;\n\n this.renderSnapLine(size, ids, render, element);\n }\n }, {\n key: 'hideSnapLine',\n value: function hideSnapLine() {\n var $container = this.$container;\n\n var $designer = $container.find('.bpd-designer');\n $designer.find('.snapline-attach-h').hide();\n $designer.find('.snapline-attach-v').hide();\n $designer.find('.snapline-attach').hide();\n }\n }]);\n\n return Snapline;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Snapline);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3NuYXBsaW5lL3NuYXBsaW5lLmpzP2Q0NGEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV2ZW50QnVzIGZyb20gJy4uLy4uL2NvcmUvZXZlbnRCdXMnXHJcbmltcG9ydCAkIGZyb20gJy4uLy4uL3V0aWxzL3NsaW1KUSdcclxuXHJcbmltcG9ydCBEcmF3VXRpbHMgZnJvbSAnLi4vLi4vZHJhdy9kcmF3VXRpbHMnXHJcbmltcG9ydCB7IHNldFNjYWxlLCByZXN0b3JlU2NhbGUgfSBmcm9tICcuLi8uLi91dGlscy91dGlscydcclxuXHJcbmNvbnN0IERFRkFVTFRfQ09ORklHID0ge31cclxuXHJcbmNsYXNzIFNuYXBsaW5lIHtcclxuICBjb25zdHJ1Y3RvcigkY29udGFpbmVyLCBjb25maWcpIHtcclxuICAgIHRoaXMuJGNvbnRhaW5lciA9ICRjb250YWluZXJcclxuXHJcbiAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLCBjb25maWcpXHJcblxyXG4gICAgdGhpcy5pbml0KClcclxuICB9XHJcblxyXG4gIGluaXQoKSB7XHJcbiAgICAvL1xyXG4gICAgZXZlbnRCdXMub24oJ3NoYXBlLnNuYXBsaW5lLnNob3cnLCB0aGlzLnNob3dTbmFwTGluZS5iaW5kKHRoaXMpKVxyXG4gICAgLy9cclxuICAgIGV2ZW50QnVzLm9uKCdzaGFwZS5zbmFwbGluZS5oaWRlJywgdGhpcy5oaWRlU25hcExpbmUuYmluZCh0aGlzKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsqfSBzaXplXHJcbiAgICogQHBhcmFtIHsqfSBpZHNcclxuICAgKiBAcGFyYW0geyp9IHJlbmRlclxyXG4gICAqIEBwYXJhbSB7Kn0gZWxlbWVudFxyXG4gICAqL1xyXG4gIHJlbmRlclNuYXBMaW5lKHNpemUsIGlkcywgcmVuZGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCB7ICRjb250YWluZXIgfSA9IHRoaXNcclxuICAgIGNvbnN0IG9yZGVycyA9IGV2ZW50QnVzLnRyaWdnZXIoJ29yZGVycy5nZXQnKVxyXG4gICAgY29uc3QgJGxheW91dCA9ICRjb250YWluZXIuZmluZCgnLmJwZC1sYXlvdXQnKVxyXG4gICAgY29uc3QgJGRlc2lnbmVyID0gJGNvbnRhaW5lci5maW5kKCcuYnBkLWRlc2lnbmVyJylcclxuXHJcbiAgICBjb25zdCB0b3AgPSBzaXplLnlcclxuICAgIGNvbnN0IGJvdHRvbSA9IHNpemUueSArIHNpemUuaGVpZ2h0XHJcbiAgICBjb25zdCBsZWZ0ID0gc2l6ZS54XHJcbiAgICBjb25zdCByaWdodCA9IHNpemUueCArIHNpemUud2lkdGhcclxuICAgIGNvbnN0IGNlbnRlclggPSBzaXplLnggKyBzaXplLndpZHRoIC8gMlxyXG4gICAgY29uc3QgY2VudGVyWSA9IHNpemUueSArIHNpemUuaGVpZ2h0IC8gMlxyXG5cclxuICAgIHZhciBmID0gMlxyXG4gICAgY29uc3Qgc25hcERhdGEgPSB7IHY6IG51bGwsIGg6IG51bGwsIGF0dGFjaDogbnVsbCB9XHJcbiAgICBpZiAoIXJlbmRlcikge1xyXG4gICAgICBlbGVtZW50ID0gZXZlbnRCdXMudHJpZ2dlcignZWxlbWVudC5nZXQnLCBpZHNbMF0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlkcy5sZW5ndGggPT09IDEgJiYgZWxlbWVudC5zaGFwZS5ncm91cE5hbWUgPT09ICdib3VuZGFyeUV2ZW50Jykge1xyXG4gICAgICAvLyBUT0RPOui+ueeVjOS6i+S7tlxyXG4gICAgfVxyXG4gICAgaWYgKHNuYXBEYXRhLmF0dGFjaCA9PSBudWxsKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSBvcmRlcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICBjb25zdCBpZCA9IG9yZGVyc1tpXS5pZFxyXG4gICAgICAgIGNvbnN0IGVsID0gZXZlbnRCdXMudHJpZ2dlcignZWxlbWVudC5nZXQnLCBpZClcclxuXHJcbiAgICAgICAgY29uc3QgeyBkYXRhLCBwbGFuZSwgc2hhcGUgfSA9IGVsXHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHNoYXBlLmJwbW5OYW1lID09PSAnU2VxdWVuY2VGbG93JyB8fFxyXG4gICAgICAgICAgaWRzLmluZGV4T2YoaWQpID49IDAgfHxcclxuICAgICAgICAgIHNoYXBlLnBhcmVudFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29udGludWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJvdW5kcyA9IHBsYW5lLmJvdW5kc1xyXG5cclxuICAgICAgICBpZiAoc25hcERhdGEuaCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBjb25zdCBzaGFwZVRvcCA9IGJvdW5kcy55XHJcbiAgICAgICAgICBjb25zdCBzaGFwZUNlbnRlclkgPSBib3VuZHMueSArIGJvdW5kcy5oZWlnaHQgLyAyXHJcbiAgICAgICAgICBjb25zdCBzaGFwZUJvdHRvbSA9IGJvdW5kcy55ICsgYm91bmRzLmhlaWdodFxyXG4gICAgICAgICAgaWYgKHNoYXBlQ2VudGVyWSA+PSBjZW50ZXJZIC0gZiAmJiBzaGFwZUNlbnRlclkgPD0gY2VudGVyWSArIGYpIHtcclxuICAgICAgICAgICAgc25hcERhdGEuaCA9IHsgdHlwZTogJ21pZGRsZScsIHk6IHNoYXBlQ2VudGVyWSB9XHJcbiAgICAgICAgICAgIHNpemUueSA9IHNoYXBlQ2VudGVyWSAtIHNpemUuaGVpZ2h0IC8gMlxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHNoYXBlVG9wID49IHRvcCAtIGYgJiYgc2hhcGVUb3AgPD0gdG9wICsgZikge1xyXG4gICAgICAgICAgICAgIHNuYXBEYXRhLmggPSB7IHR5cGU6ICd0b3AnLCB5OiBzaGFwZVRvcCB9XHJcbiAgICAgICAgICAgICAgc2l6ZS55ID0gc2hhcGVUb3BcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoc2hhcGVCb3R0b20gPj0gYm90dG9tIC0gZiAmJiBzaGFwZUJvdHRvbSA8PSBib3R0b20gKyBmKSB7XHJcbiAgICAgICAgICAgICAgICBzbmFwRGF0YS5oID0geyB0eXBlOiAnYm90dG9tJywgeTogc2hhcGVCb3R0b20gfVxyXG4gICAgICAgICAgICAgICAgc2l6ZS55ID0gc2hhcGVCb3R0b20gLSBzaXplLmhlaWdodFxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhcGVCb3R0b20gPj0gdG9wIC0gZiAmJiBzaGFwZUJvdHRvbSA8PSB0b3AgKyBmKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNuYXBEYXRhLmggPSB7IHR5cGU6ICd0b3AnLCB5OiBzaGFwZUJvdHRvbSB9XHJcbiAgICAgICAgICAgICAgICAgIHNpemUueSA9IHNoYXBlQm90dG9tXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoc2hhcGVUb3AgPj0gYm90dG9tIC0gZiAmJiBzaGFwZVRvcCA8PSBib3R0b20gKyBmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc25hcERhdGEuaCA9IHsgdHlwZTogJ2JvdHRvbScsIHk6IHNoYXBlVG9wIH1cclxuICAgICAgICAgICAgICAgICAgICBzaXplLnkgPSBzaGFwZVRvcCAtIHNpemUuaGVpZ2h0XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNuYXBEYXRhLnYgPT0gbnVsbCkge1xyXG4gICAgICAgICAgY29uc3Qgc2hhcGVMZWZ0ID0gYm91bmRzLnhcclxuICAgICAgICAgIGNvbnN0IHNoYXBlQ2VudGVyWCA9IGJvdW5kcy54ICsgYm91bmRzLndpZHRoIC8gMlxyXG4gICAgICAgICAgY29uc3Qgc2hhcGVSaWdodCA9IGJvdW5kcy54ICsgYm91bmRzLndpZHRoXHJcbiAgICAgICAgICBpZiAoc2hhcGVDZW50ZXJYID49IGNlbnRlclggLSBmICYmIHNoYXBlQ2VudGVyWCA8PSBjZW50ZXJYICsgZikge1xyXG4gICAgICAgICAgICBzbmFwRGF0YS52ID0geyB0eXBlOiAnY2VudGVyJywgeDogc2hhcGVDZW50ZXJYIH1cclxuICAgICAgICAgICAgc2l6ZS54ID0gc2hhcGVDZW50ZXJYIC0gc2l6ZS53aWR0aCAvIDJcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChzaGFwZUxlZnQgPj0gbGVmdCAtIGYgJiYgc2hhcGVMZWZ0IDw9IGxlZnQgKyBmKSB7XHJcbiAgICAgICAgICAgICAgc25hcERhdGEudiA9IHsgdHlwZTogJ2xlZnQnLCB4OiBzaGFwZUxlZnQgfVxyXG4gICAgICAgICAgICAgIHNpemUueCA9IHNoYXBlTGVmdFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChzaGFwZVJpZ2h0ID49IHJpZ2h0IC0gZiAmJiBzaGFwZVJpZ2h0IDw9IHJpZ2h0ICsgZikge1xyXG4gICAgICAgICAgICAgICAgc25hcERhdGEudiA9IHsgdHlwZTogJ3JpZ2h0JywgeDogc2hhcGVSaWdodCB9XHJcbiAgICAgICAgICAgICAgICBzaXplLnggPSBzaGFwZVJpZ2h0IC0gc2l6ZS53aWR0aFxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2hhcGVSaWdodCA+PSBsZWZ0IC0gZiAmJiBzaGFwZVJpZ2h0IDw9IGxlZnQgKyBmKSB7XHJcbiAgICAgICAgICAgICAgICAgIHNuYXBEYXRhLnYgPSB7IHR5cGU6ICdsZWZ0JywgeDogc2hhcGVSaWdodCB9XHJcbiAgICAgICAgICAgICAgICAgIHNpemUueCA9IHNoYXBlUmlnaHRcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChzaGFwZUxlZnQgPj0gcmlnaHQgLSBmICYmIHNoYXBlTGVmdCA8PSByaWdodCArIGYpIHtcclxuICAgICAgICAgICAgICAgICAgICBzbmFwRGF0YS52ID0geyB0eXBlOiAncmlnaHQnLCB4OiBzaGFwZUxlZnQgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNpemUueCA9IHNoYXBlTGVmdCAtIHNpemUud2lkdGhcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc25hcERhdGEuaCAhPSBudWxsICYmIHNuYXBEYXRhLnYgIT0gbnVsbCkge1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaGlkZVNuYXBMaW5lKClcclxuXHJcbiAgICBpZiAoc25hcERhdGEuYXR0YWNoICE9IG51bGwpIHtcclxuICAgICAgbGV0ICRzbmFwTGluZSA9ICRkZXNpZ25lci5maW5kKCcuc25hcGxpbmUtYXR0YWNoJylcclxuICAgICAgaWYgKCRzbmFwTGluZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAkc25hcExpbmUgPSAkKFwiPGRpdiBjbGFzcz0nc25hcGxpbmUtYXR0YWNoJz48L2Rpdj5cIikuYXBwZW5kVG8oJGRlc2lnbmVyKVxyXG4gICAgICB9XHJcbiAgICAgIHZhciB4ID0gc25hcERhdGEuYXR0YWNoXHJcbiAgICAgIHZhciBhID0geC5saW5lU3R5bGUubGluZVdpZHRoXHJcbiAgICAgICRzbmFwTGluZVxyXG4gICAgICAgIC5jc3Moe1xyXG4gICAgICAgICAgd2lkdGg6IHNldFNjYWxlKHgucHJvcHMudyArIGEpLFxyXG4gICAgICAgICAgaGVpZ2h0OiBzZXRTY2FsZSh4LnByb3BzLmggKyBhKSxcclxuICAgICAgICAgIGxlZnQ6IHNldFNjYWxlKHgucHJvcHMueCAtIGEgLyAyKSAtIDIsXHJcbiAgICAgICAgICB0b3A6IHNldFNjYWxlKHgucHJvcHMueSAtIGEgLyAyKSAtIDIsXHJcbiAgICAgICAgICAnei1pbmRleCc6ICQoJyMnICsgeC5pZCkuY3NzKCd6LWluZGV4JylcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zaG93KClcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc25hcERhdGEuaCAhPSBudWxsKSB7XHJcbiAgICAgIGxldCAkc25hcExpbmVIID0gJGRlc2lnbmVyLmZpbmQoJy5zbmFwbGluZS1hdHRhY2gtaCcpXHJcblxyXG4gICAgICBpZiAoJHNuYXBMaW5lSC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAkc25hcExpbmVIID0gJChcIjxkaXYgY2xhc3M9J3NuYXBsaW5lLWF0dGFjaC1oJz48L2Rpdj5cIikuYXBwZW5kVG8oXHJcbiAgICAgICAgICAkZGVzaWduZXJcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgICAgJHNuYXBMaW5lSFxyXG4gICAgICAgIC5jc3Moe1xyXG4gICAgICAgICAgd2lkdGg6ICRkZXNpZ25lci53aWR0aCgpLFxyXG4gICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgIHRvcDogTWF0aC5yb3VuZChzZXRTY2FsZShzbmFwRGF0YS5oLnkpKSxcclxuICAgICAgICAgICd6LWluZGV4Jzogb3JkZXJzLmxlbmd0aCArIDFcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zaG93KClcclxuICAgIH1cclxuICAgIGlmIChzbmFwRGF0YS52ICE9IG51bGwpIHtcclxuICAgICAgbGV0ICRzbmFwTGluZVYgPSAkZGVzaWduZXIuZmluZCgnLnNuYXBsaW5lLWF0dGFjaC12JylcclxuICAgICAgaWYgKCRzbmFwTGluZVYubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgJHNuYXBMaW5lViA9ICQoXCI8ZGl2IGNsYXNzPSdzbmFwbGluZS1hdHRhY2gtdic+PC9kaXY+XCIpLmFwcGVuZFRvKFxyXG4gICAgICAgICAgJGRlc2lnbmVyXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICAgICRzbmFwTGluZVZcclxuICAgICAgICAuY3NzKHtcclxuICAgICAgICAgIGhlaWdodDogJGRlc2lnbmVyLmhlaWdodCgpLFxyXG4gICAgICAgICAgdG9wOiAwLFxyXG4gICAgICAgICAgbGVmdDogTWF0aC5yb3VuZChzZXRTY2FsZShzbmFwRGF0YS52LngpKSxcclxuICAgICAgICAgICd6LWluZGV4Jzogb3JkZXJzLmxlbmd0aCArIDFcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zaG93KClcclxuICAgIH1cclxuICAgIHJldHVybiBzbmFwRGF0YVxyXG4gIH1cclxuXHJcbiAgc2hvd1NuYXBMaW5lKHsgc2l6ZSwgaWRzLCByZW5kZXIsIGVsZW1lbnQgfSkge1xyXG4gICAgdGhpcy5yZW5kZXJTbmFwTGluZShzaXplLCBpZHMsIHJlbmRlciwgZWxlbWVudClcclxuICB9XHJcblxyXG4gIGhpZGVTbmFwTGluZSgpIHtcclxuICAgIGNvbnN0IHsgJGNvbnRhaW5lciB9ID0gdGhpc1xyXG4gICAgY29uc3QgJGRlc2lnbmVyID0gJGNvbnRhaW5lci5maW5kKCcuYnBkLWRlc2lnbmVyJylcclxuICAgICRkZXNpZ25lci5maW5kKCcuc25hcGxpbmUtYXR0YWNoLWgnKS5oaWRlKClcclxuICAgICRkZXNpZ25lci5maW5kKCcuc25hcGxpbmUtYXR0YWNoLXYnKS5oaWRlKClcclxuICAgICRkZXNpZ25lci5maW5kKCcuc25hcGxpbmUtYXR0YWNoJykuaGlkZSgpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTbmFwbGluZVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2ZlYXR1cmVzL3NuYXBsaW5lL3NuYXBsaW5lLmpzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBT0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBSUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUpBO0FBT0E7QUFDQTtBQUNBOzs7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUNBOzs7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///57\n"); + +/***/ }), +/* 58 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__tooltip__ = __webpack_require__(59);\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0__tooltip__[\"a\" /* default */]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTguanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3Rvb2x0aXAvaW5kZXguanM/MmEzOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVG9vbHRpcCBmcm9tICcuL3Rvb2x0aXAnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBUb29sdGlwXHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZmVhdHVyZXMvdG9vbHRpcC9pbmRleC5qcyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///58\n"); + +/***/ }), +/* 59 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_utils__ = __webpack_require__(1);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\nvar DEFAULT_CONFIG = {};\n\nvar Tooltip = function () {\n function Tooltip($container, config) {\n _classCallCheck(this, Tooltip);\n\n this.$container = $container;\n\n this.config = Object.assign({}, DEFAULT_CONFIG, config);\n\n this.init();\n }\n\n _createClass(Tooltip, [{\n key: 'init',\n value: function init() {\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.tooltip.show', this.showTooltip.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('shape.tooltip.hide', this.hideTooltip.bind(this));\n }\n }, {\n key: 'showTooltip',\n value: function showTooltip(html) {\n var $container = this.$container;\n\n var $designer = $container.find('.bpd-designer');\n var $select = $designer.find('.shape-select');\n var pos = $select.position();\n var orders = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('orders.get');\n\n var $tooltip = $designer.find('.shape-tooltip');\n if ($tooltip.length === 0) {\n $tooltip = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(\"
\").appendTo($designer);\n }\n\n if (!html) {\n html = 'X: ' + Math.round(Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(pos.left)) + '  Y: ' + Math.round(Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"i\" /* restoreScale */])(pos.top));\n }\n\n $tooltip.html(html);\n\n $tooltip.css({\n top: pos.top + $select.height() + 5,\n left: pos.left + $select.width() / 2 - $tooltip.outerWidth() / 2,\n 'z-index': orders.length\n }).show();\n }\n }, {\n key: 'hideTooltip',\n value: function hideTooltip() {\n this.$container.find('.shape-tooltip').hide();\n }\n }]);\n\n return Tooltip;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (Tooltip);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNTkuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL3Rvb2x0aXAvdG9vbHRpcC5qcz9lNGE1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBldmVudEJ1cyBmcm9tICcuLi8uLi9jb3JlL2V2ZW50QnVzJ1xyXG5pbXBvcnQgJCBmcm9tICcuLi8uLi91dGlscy9zbGltSlEnXHJcblxyXG5pbXBvcnQgRHJhd1V0aWxzIGZyb20gJy4uLy4uL2RyYXcvZHJhd1V0aWxzJ1xyXG5pbXBvcnQgeyBzZXRTY2FsZSwgcmVzdG9yZVNjYWxlIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnXHJcblxyXG5jb25zdCBERUZBVUxUX0NPTkZJRyA9IHt9XHJcblxyXG5jbGFzcyBUb29sdGlwIHtcclxuICBjb25zdHJ1Y3RvcigkY29udGFpbmVyLCBjb25maWcpIHtcclxuICAgIHRoaXMuJGNvbnRhaW5lciA9ICRjb250YWluZXJcclxuXHJcbiAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLCBjb25maWcpXHJcblxyXG4gICAgdGhpcy5pbml0KClcclxuICB9XHJcblxyXG4gIGluaXQoKSB7XHJcbiAgICAvL1xyXG4gICAgZXZlbnRCdXMub24oJ3NoYXBlLnRvb2x0aXAuc2hvdycsIHRoaXMuc2hvd1Rvb2x0aXAuYmluZCh0aGlzKSlcclxuICAgIC8vXHJcbiAgICBldmVudEJ1cy5vbignc2hhcGUudG9vbHRpcC5oaWRlJywgdGhpcy5oaWRlVG9vbHRpcC5iaW5kKHRoaXMpKVxyXG4gIH1cclxuXHJcbiAgc2hvd1Rvb2x0aXAoaHRtbCkge1xyXG4gICAgY29uc3QgeyAkY29udGFpbmVyIH0gPSB0aGlzXHJcbiAgICBjb25zdCAkZGVzaWduZXIgPSAkY29udGFpbmVyLmZpbmQoJy5icGQtZGVzaWduZXInKVxyXG4gICAgY29uc3QgJHNlbGVjdCA9ICRkZXNpZ25lci5maW5kKCcuc2hhcGUtc2VsZWN0JylcclxuICAgIGNvbnN0IHBvcyA9ICRzZWxlY3QucG9zaXRpb24oKVxyXG4gICAgY29uc3Qgb3JkZXJzID0gZXZlbnRCdXMudHJpZ2dlcignb3JkZXJzLmdldCcpXHJcblxyXG4gICAgbGV0ICR0b29sdGlwID0gJGRlc2lnbmVyLmZpbmQoJy5zaGFwZS10b29sdGlwJylcclxuICAgIGlmICgkdG9vbHRpcC5sZW5ndGggPT09IDApIHtcclxuICAgICAgJHRvb2x0aXAgPSAkKFwiPGRpdiBjbGFzcz0nc2hhcGUtdG9vbHRpcCc+PC9kaXY+XCIpLmFwcGVuZFRvKCRkZXNpZ25lcilcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWh0bWwpIHtcclxuICAgICAgaHRtbCA9XHJcbiAgICAgICAgJ1g6ICcgK1xyXG4gICAgICAgIE1hdGgucm91bmQocmVzdG9yZVNjYWxlKHBvcy5sZWZ0KSkgK1xyXG4gICAgICAgICcmbmJzcDsmbmJzcDtZOiAnICtcclxuICAgICAgICBNYXRoLnJvdW5kKHJlc3RvcmVTY2FsZShwb3MudG9wKSlcclxuICAgIH1cclxuXHJcbiAgICAkdG9vbHRpcC5odG1sKGh0bWwpXHJcblxyXG4gICAgJHRvb2x0aXBcclxuICAgICAgLmNzcyh7XHJcbiAgICAgICAgdG9wOiBwb3MudG9wICsgJHNlbGVjdC5oZWlnaHQoKSArIDUsXHJcbiAgICAgICAgbGVmdDogcG9zLmxlZnQgKyAkc2VsZWN0LndpZHRoKCkgLyAyIC0gJHRvb2x0aXAub3V0ZXJXaWR0aCgpIC8gMixcclxuICAgICAgICAnei1pbmRleCc6IG9yZGVycy5sZW5ndGhcclxuICAgICAgfSlcclxuICAgICAgLnNob3coKVxyXG4gIH1cclxuXHJcbiAgaGlkZVRvb2x0aXAoKSB7XHJcbiAgICB0aGlzLiRjb250YWluZXIuZmluZCgnLnNoYXBlLXRvb2x0aXAnKS5oaWRlKClcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRvb2x0aXBcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9mZWF0dXJlcy90b29sdGlwL3Rvb2x0aXAuanMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7OztBQUVBO0FBQ0E7QUFDQTs7Ozs7O0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///59\n"); + +/***/ }), +/* 60 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__groupPanel__ = __webpack_require__(61);\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0__groupPanel__[\"a\" /* default */]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjAuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2dyb3VwLXBhbmVsL2luZGV4LmpzPzdmNmEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdyb3VwUGFuZWwgZnJvbSAnLi9ncm91cFBhbmVsJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZ3JvdXBQYW5lbFxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2ZlYXR1cmVzL2dyb3VwLXBhbmVsL2luZGV4LmpzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///60\n"); + +/***/ }), +/* 61 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__ = __webpack_require__(2);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_utils__ = __webpack_require__(1);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\n\nvar DEFAULT_CONFIG = {\n width: 30,\n height: 30\n};\n\nvar ELEMENT_TEMP = {\n data: {},\n plane: {\n bounds: {}\n }\n};\n\nvar groupPanel = function () {\n function groupPanel($container, options) {\n _classCallCheck(this, groupPanel);\n\n this.$container = $container;\n\n this.bpmns = options.bpmns;\n\n this.filter = options.filter;\n\n this.config = Object.assign({}, DEFAULT_CONFIG, options.config.grouppanel);\n\n this.init();\n }\n\n _createClass(groupPanel, [{\n key: 'init',\n value: function init() {\n // 选中\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('group.show', this.showGroup.bind(this));\n // 选中\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('group.hide', this.hideGroup.bind(this));\n // 选中\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('group.connection.show', this.showConnectionGroup.bind(this));\n }\n }, {\n key: 'showGroup',\n value: function showGroup(elements) {\n if (elements.length === 1) {\n var $container = this.$container,\n bpmns = this.bpmns,\n filter = this.filter;\n\n var $designer = $container.find('.bpd-designer');\n var $selectBox = $designer.find('.shape-select');\n var _elements$ = elements[0],\n data = _elements$.data,\n plane = _elements$.plane,\n shape = _elements$.shape;\n\n\n var self = this;\n\n if ($selectBox.length > 0) {\n var $group = $selectBox.find('.group-icon');\n if ($group.length <= 0) {\n $group = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(\"
\").appendTo($selectBox);\n }\n\n var shapeGroup = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('group.get', shape.groupName) || [];\n var items = [];\n\n for (var i = 0; i < shapeGroup.length; i += 1) {\n var type = shapeGroup[i];\n\n if (Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"b\" /* checkBpmnShape */])(bpmns, filter, type)) {\n continue;\n }\n items.push(type);\n }\n\n if (items.length <= 1 && items[0] === shape.bpmnName) {\n $group.hide();\n } else {\n $group.show();\n }\n\n $group.attr('data-group', shape.groupName);\n $group.off('mousedown').on('mousedown', function (e) {\n e.stopPropagation();\n\n var groupName = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(this).attr('data-group');\n var $parent = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(this).parent();\n var pos = $parent.position();\n var width = pos.left + $parent.width();\n var height = pos.top + $parent.height() + 10;\n\n self.groupPanel(groupName, width, height, function (type) {\n if (elements[0].shape.bpmnName !== type) {\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.change', { target: elements[0], type: type });\n // eventBus.trigger('element.update', elements[0])\n }\n });\n });\n }\n }\n }\n\n /**\r\n *\r\n * @param {*} groupName\r\n * @param {*} width\r\n * @param {*} height\r\n * @param {*} callback\r\n */\n\n }, {\n key: 'groupPanel',\n value: function groupPanel(groupName, width, height, callback) {\n var $container = this.$container,\n config = this.config,\n bpmns = this.bpmns,\n filter = this.filter;\n\n var $designer = $container.find('.bpd-designer');\n\n var orders = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('orders.get');\n\n $container.find('.group-panel').hide();\n\n var $groupPanel = $container.find('.group-panel[data-group=\"' + groupName + '\"]');\n\n if ($groupPanel.length === 0) {\n $groupPanel = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])('
').appendTo($designer);\n\n var shapeGroup = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('group.get', groupName);\n\n for (var i = 0; i < shapeGroup.length; i += 1) {\n var type = shapeGroup[i];\n var element = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.create', {\n type: type,\n element: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"c\" /* cloneDeep */])(ELEMENT_TEMP)\n });\n\n if (Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"b\" /* checkBpmnShape */])(bpmns, filter, type)) {\n continue;\n }\n\n element.data.text = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('i18n', 'bpmn.' + element.shape.bpmnName);\n\n var $groupItem = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])('
').appendTo($groupPanel);\n\n this.renderItem($groupItem.children('canvas')[0], element);\n }\n $groupPanel.on('mousedown', function (e) {\n e.stopPropagation();\n });\n }\n\n $groupPanel.css({ left: width, top: height, 'z-index': orders.length + 1 }).show();\n\n $groupPanel.children('.group-item').off().on('click', function () {\n var bpmn = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(this).attr('data-shape');\n callback(bpmn);\n $groupPanel.hide();\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mousedown.group-panel');\n });\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).on('mousedown.group-panel', function () {\n $groupPanel.hide();\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mousedown.group-panel');\n });\n return $groupPanel;\n }\n }, {\n key: 'hideGroup',\n value: function hideGroup($parents) {\n var $dom = $parents || this.$container;\n $dom.find('.group-icon').hide();\n }\n\n /**\r\n *\r\n * @param {*} connection\r\n */\n\n }, {\n key: 'showConnectionGroup',\n value: function showConnectionGroup(connection) {\n var $container = this.$container,\n config = this.config,\n bpmns = this.bpmns,\n filter = this.filter;\n var data = connection.data,\n plane = connection.plane,\n shape = connection.shape;\n\n\n var self = this;\n var orders = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('orders.get');\n var $designer = $container.find('.bpd-designer');\n\n $container.find('.connection-group-panel').hide();\n var $groupPanel = $container.find('.connection-group-panel[data-group=\"bpmn\"]');\n\n if ($groupPanel.length === 0) {\n $groupPanel = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(\"
\").appendTo($designer);\n var shapeGroup = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('group.get');\n for (var key in shapeGroup) {\n var group = [];\n\n for (var i = 0; i < shapeGroup[key].length; i += 1) {\n if (!Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"b\" /* checkBpmnShape */])(bpmns, filter, shapeGroup[key][i])) {\n group.push(shapeGroup[key][i]);\n }\n }\n\n if (group.length > 0) {\n var type = shapeGroup[key][0];\n var element = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.create', {\n type: type,\n element: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"c\" /* cloneDeep */])(ELEMENT_TEMP)\n });\n element.data.text = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('i18n', 'bpmn.' + element.shape.bpmnName);\n this.renderConnectionItem(element, group, $groupPanel);\n }\n }\n\n $groupPanel.on('mousemove', function (e) {\n e.stopPropagation();\n }).on('mousedown', function (e) {\n e.stopPropagation();\n });\n }\n\n $groupPanel.css({\n left: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(plane.waypoint[plane.waypoint.length - 1].x),\n top: Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"k\" /* setScale */])(plane.waypoint[plane.waypoint.length - 1].y),\n 'z-index': orders.length\n }).show();\n $groupPanel.find('.group-icon').off().on('mousedown', function (e) {\n e.stopPropagation();\n\n var groupName = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(this).data('group');\n var itemPos = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(this).parent().position();\n var pos = $groupPanel.position();\n var width = pos.left + itemPos.left + Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(this).parent().outerWidth() - 10;\n var height = pos.top + itemPos.top + Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(this).parent().outerHeight();\n\n self.groupPanel(groupName, width, height, function (type) {\n self.renderShape(connection, type);\n $groupPanel.hide();\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mousedown.dashboard');\n });\n }).on('click', function (e) {\n e.stopPropagation();\n });\n $groupPanel.children('.group-item').off().on('click', function () {\n $groupPanel.hide();\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mousedown.dashboard');\n self.renderShape(connection, Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(this).data('shape'));\n });\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).on('mousedown.dashboard', function () {\n $groupPanel.hide();\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('mousedown.dashboard');\n });\n }\n\n /**\r\n *\r\n * @param {*} connection\r\n * @param {*} type\r\n */\n\n }, {\n key: 'renderShape',\n value: function renderShape(connection, type) {\n var waypoint = connection.plane.waypoint;\n var angle = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getEndpointAngle(connection.shape, 'targetRef');\n var quadrant = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getAngleDir(angle);\n\n var name = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('i18n', 'bpmn.' + type);\n var element = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.create', {\n name: name,\n type: type,\n prefix: 'obj'\n });\n\n var anchors = element.shape.getAnchors();\n\n var point = void 0;\n var num = null;\n\n switch (quadrant) {\n case 1:\n num = null;\n for (var i = 0; i < anchors.length; i += 1) {\n var anchor = anchors[i];\n if (num == null || anchor.y < num) {\n num = anchor.y;\n point = anchor;\n }\n }\n break;\n case 2:\n num = null;\n for (var _i = 0; _i < anchors.length; _i += 1) {\n var _anchor = anchors[_i];\n if (num == null || _anchor.x > num) {\n num = _anchor.x;\n point = _anchor;\n }\n }\n break;\n case 3:\n num = null;\n for (var _i2 = 0; _i2 < anchors.length; _i2 += 1) {\n var _anchor2 = anchors[_i2];\n if (num == null || _anchor2.y > num) {\n num = _anchor2.y;\n point = _anchor2;\n }\n }\n break;\n case 4:\n num = null;\n for (var _i3 = 0; _i3 < anchors.length; _i3 += 1) {\n var _anchor3 = anchors[_i3];\n if (num == null || _anchor3.x < num) {\n num = _anchor3.x;\n point = _anchor3;\n }\n }\n break;\n default:\n break;\n }\n\n element.plane.bounds.x = waypoint[waypoint.length - 1].x - point.x;\n element.plane.bounds.y = waypoint[waypoint.length - 1].y - point.y;\n\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.render', { type: type, element: element });\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.add', element);\n\n var targetAngle = __WEBPACK_IMPORTED_MODULE_2__draw_drawUtils__[\"a\" /* default */].getPointAngle(this.$container, element.data.id, waypoint[waypoint.length - 1].x, waypoint[waypoint.length - 1].y, 7);\n\n connection.data.targetRef = element.data.id;\n waypoint[waypoint.length - 1].angle = targetAngle;\n\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('connection.render', {\n element: connection,\n rendered: true\n });\n\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('element.update', connection);\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select.remove');\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.select', { ids: element.data.id });\n }\n\n /**\r\n *\r\n * @param {*} element\r\n * @param {*} group\r\n * @param {*} $groupPanel\r\n */\n\n }, {\n key: 'renderConnectionItem',\n value: function renderConnectionItem(element, group, $groupPanel) {\n var config = this.config;\n\n var title = __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('i18n', 'bpmn.' + element.shape.bpmnName);\n var $item = Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(\"
\").appendTo($groupPanel);\n\n this.renderItem($item.children('canvas')[0], element);\n\n if (group.length > 1) {\n $item.append(\"
\");\n }\n }\n\n /**\r\n *\r\n * @param {*} canvas\r\n * @param {*} element\r\n */\n\n }, {\n key: 'renderItem',\n value: function renderItem(canvas, element) {\n var config = this.config;\n var data = element.data,\n plane = element.plane,\n shape = element.shape;\n\n var canvas2D = canvas.getContext('2d');\n\n var bounds = {\n x: 0,\n y: 0,\n width: plane.bounds.width,\n height: plane.bounds.height\n };\n\n canvas2D.clearRect(0, 0, config.width, config.height);\n\n if (bounds.width >= config.width || bounds.height >= config.width) {\n if (plane.bounds.width >= plane.bounds.height) {\n bounds.width = config.width - shape.lineStyle.lineWidth * 2;\n bounds.height = parseInt(plane.bounds.height / plane.bounds.width * bounds.width);\n // 最小高度\n if (bounds.height < 20) {\n bounds.height = 20;\n }\n } else {\n bounds.height = config.height - shape.lineStyle.lineWidth * 2;\n bounds.width = parseInt(plane.bounds.width / plane.bounds.height * bounds.height);\n // 最小宽度\n if (bounds.width < 20) {\n bounds.width = 20;\n }\n }\n }\n\n plane.bounds = bounds;\n\n var paths = Object(__WEBPACK_IMPORTED_MODULE_3__utils_utils__[\"c\" /* cloneDeep */])(shape.getPath());\n\n var center = {\n x: bounds.x + bounds.width / 2,\n y: bounds.y + bounds.height / 2\n };\n\n for (var i = 0; i < paths.length; i += 1) {\n var path = paths[i];\n for (var j = 0; j < path.actions.length; j += 1) {\n var item = path.actions[j];\n if (item.action === 'font') {\n item.textAlign = 'center';\n item.textBaseline = 'middle';\n item.fontSize = '14px';\n item.x = center.x;\n item.y = center.y;\n }\n }\n }\n\n shape.actions = paths;\n\n canvas2D.save();\n canvas2D.lineJoin = 'round';\n canvas2D.globalAlpha = shape.shapeStyle.alpha;\n var x = (config.width - bounds.width) / 2;\n var y = (config.height - bounds.height) / 2;\n canvas2D.translate(x, y);\n canvas2D.translate(bounds.width / 2, bounds.height / 2);\n canvas2D.rotate(shape.shapeStyle.angle);\n canvas2D.translate(-(bounds.width / 2), -(bounds.height / 2));\n\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].trigger('shape.renderPath', {\n shape2D: canvas2D,\n element: element,\n render: true\n });\n\n canvas2D.restore();\n }\n }]);\n\n return groupPanel;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (groupPanel);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjEuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2dyb3VwLXBhbmVsL2dyb3VwUGFuZWwuanM/OTYxNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRCdXMgZnJvbSAnLi4vLi4vY29yZS9ldmVudEJ1cydcclxuaW1wb3J0ICQgZnJvbSAnLi4vLi4vdXRpbHMvc2xpbUpRJ1xyXG5cclxuaW1wb3J0IERyYXdVdGlscyBmcm9tICcuLi8uLi9kcmF3L2RyYXdVdGlscydcclxuaW1wb3J0IHtcclxuICBzZXRTY2FsZSxcclxuICByZXN0b3JlU2NhbGUsXHJcbiAgY2hlY2tCcG1uU2hhcGUsXHJcbiAgY2xvbmVEZWVwXHJcbn0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnXHJcblxyXG5jb25zdCBERUZBVUxUX0NPTkZJRyA9IHtcclxuICB3aWR0aDogMzAsXHJcbiAgaGVpZ2h0OiAzMFxyXG59XHJcblxyXG5jb25zdCBFTEVNRU5UX1RFTVAgPSB7XHJcbiAgZGF0YToge30sXHJcbiAgcGxhbmU6IHtcclxuICAgIGJvdW5kczoge31cclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIGdyb3VwUGFuZWwge1xyXG4gIGNvbnN0cnVjdG9yKCRjb250YWluZXIsIG9wdGlvbnMpIHtcclxuICAgIHRoaXMuJGNvbnRhaW5lciA9ICRjb250YWluZXJcclxuXHJcbiAgICB0aGlzLmJwbW5zID0gb3B0aW9ucy5icG1uc1xyXG5cclxuICAgIHRoaXMuZmlsdGVyID0gb3B0aW9ucy5maWx0ZXJcclxuXHJcbiAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQ09ORklHLCBvcHRpb25zLmNvbmZpZy5ncm91cHBhbmVsKVxyXG5cclxuICAgIHRoaXMuaW5pdCgpXHJcbiAgfVxyXG4gIGluaXQoKSB7XHJcbiAgICAvLyDpgInkuK1cclxuICAgIGV2ZW50QnVzLm9uKCdncm91cC5zaG93JywgdGhpcy5zaG93R3JvdXAuYmluZCh0aGlzKSlcclxuICAgIC8vIOmAieS4rVxyXG4gICAgZXZlbnRCdXMub24oJ2dyb3VwLmhpZGUnLCB0aGlzLmhpZGVHcm91cC5iaW5kKHRoaXMpKVxyXG4gICAgLy8g6YCJ5LitXHJcbiAgICBldmVudEJ1cy5vbignZ3JvdXAuY29ubmVjdGlvbi5zaG93JywgdGhpcy5zaG93Q29ubmVjdGlvbkdyb3VwLmJpbmQodGhpcykpXHJcbiAgfVxyXG4gIHNob3dHcm91cChlbGVtZW50cykge1xyXG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBjb25zdCB7ICRjb250YWluZXIsIGJwbW5zLCBmaWx0ZXIgfSA9IHRoaXNcclxuICAgICAgY29uc3QgJGRlc2lnbmVyID0gJGNvbnRhaW5lci5maW5kKCcuYnBkLWRlc2lnbmVyJylcclxuICAgICAgY29uc3QgJHNlbGVjdEJveCA9ICRkZXNpZ25lci5maW5kKCcuc2hhcGUtc2VsZWN0JylcclxuICAgICAgY29uc3QgeyBkYXRhLCBwbGFuZSwgc2hhcGUgfSA9IGVsZW1lbnRzWzBdXHJcblxyXG4gICAgICBjb25zdCBzZWxmID0gdGhpc1xyXG5cclxuICAgICAgaWYgKCRzZWxlY3RCb3gubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCAkZ3JvdXAgPSAkc2VsZWN0Qm94LmZpbmQoJy5ncm91cC1pY29uJylcclxuICAgICAgICBpZiAoJGdyb3VwLmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgICAgICAkZ3JvdXAgPSAkKFxyXG4gICAgICAgICAgICBcIjxkaXYgY2xhc3M9J2dyb3VwLWljb24nIGRhdGEtZ3JvdXA9J1wiICtcclxuICAgICAgICAgICAgICBzaGFwZS5ncm91cE5hbWUgK1xyXG4gICAgICAgICAgICAgIFwiJz48L2Rpdj5cIlxyXG4gICAgICAgICAgKS5hcHBlbmRUbygkc2VsZWN0Qm94KVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc2hhcGVHcm91cCA9IGV2ZW50QnVzLnRyaWdnZXIoJ2dyb3VwLmdldCcsIHNoYXBlLmdyb3VwTmFtZSkgfHwgW11cclxuICAgICAgICBjb25zdCBpdGVtcyA9IFtdXHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGVHcm91cC5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgICAgY29uc3QgdHlwZSA9IHNoYXBlR3JvdXBbaV1cclxuXHJcbiAgICAgICAgICBpZiAoY2hlY2tCcG1uU2hhcGUoYnBtbnMsIGZpbHRlciwgdHlwZSkpIHtcclxuICAgICAgICAgICAgY29udGludWVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGl0ZW1zLnB1c2godHlwZSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPD0gMSAmJiBpdGVtc1swXSA9PT0gc2hhcGUuYnBtbk5hbWUpIHtcclxuICAgICAgICAgICRncm91cC5oaWRlKClcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgJGdyb3VwLnNob3coKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJGdyb3VwLmF0dHIoJ2RhdGEtZ3JvdXAnLCBzaGFwZS5ncm91cE5hbWUpXHJcbiAgICAgICAgJGdyb3VwLm9mZignbW91c2Vkb3duJykub24oJ21vdXNlZG93bicsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcclxuXHJcbiAgICAgICAgICBjb25zdCBncm91cE5hbWUgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtZ3JvdXAnKVxyXG4gICAgICAgICAgY29uc3QgJHBhcmVudCA9ICQodGhpcykucGFyZW50KClcclxuICAgICAgICAgIGNvbnN0IHBvcyA9ICRwYXJlbnQucG9zaXRpb24oKVxyXG4gICAgICAgICAgY29uc3Qgd2lkdGggPSBwb3MubGVmdCArICRwYXJlbnQud2lkdGgoKVxyXG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gcG9zLnRvcCArICRwYXJlbnQuaGVpZ2h0KCkgKyAxMFxyXG5cclxuICAgICAgICAgIHNlbGYuZ3JvdXBQYW5lbChncm91cE5hbWUsIHdpZHRoLCBoZWlnaHQsIHR5cGUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudHNbMF0uc2hhcGUuYnBtbk5hbWUgIT09IHR5cGUpIHtcclxuICAgICAgICAgICAgICBldmVudEJ1cy50cmlnZ2VyKCdlbGVtZW50LmNoYW5nZScsIHsgdGFyZ2V0OiBlbGVtZW50c1swXSwgdHlwZSB9KVxyXG4gICAgICAgICAgICAgIC8vIGV2ZW50QnVzLnRyaWdnZXIoJ2VsZW1lbnQudXBkYXRlJywgZWxlbWVudHNbMF0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0geyp9IGdyb3VwTmFtZVxyXG4gICAqIEBwYXJhbSB7Kn0gd2lkdGhcclxuICAgKiBAcGFyYW0geyp9IGhlaWdodFxyXG4gICAqIEBwYXJhbSB7Kn0gY2FsbGJhY2tcclxuICAgKi9cclxuICBncm91cFBhbmVsKGdyb3VwTmFtZSwgd2lkdGgsIGhlaWdodCwgY2FsbGJhY2spIHtcclxuICAgIGNvbnN0IHsgJGNvbnRhaW5lciwgY29uZmlnLCBicG1ucywgZmlsdGVyIH0gPSB0aGlzXHJcbiAgICBjb25zdCAkZGVzaWduZXIgPSAkY29udGFpbmVyLmZpbmQoJy5icGQtZGVzaWduZXInKVxyXG5cclxuICAgIGNvbnN0IG9yZGVycyA9IGV2ZW50QnVzLnRyaWdnZXIoJ29yZGVycy5nZXQnKVxyXG5cclxuICAgICRjb250YWluZXIuZmluZCgnLmdyb3VwLXBhbmVsJykuaGlkZSgpXHJcblxyXG4gICAgbGV0ICRncm91cFBhbmVsID0gJGNvbnRhaW5lci5maW5kKFxyXG4gICAgICAnLmdyb3VwLXBhbmVsW2RhdGEtZ3JvdXA9XCInICsgZ3JvdXBOYW1lICsgJ1wiXSdcclxuICAgIClcclxuXHJcbiAgICBpZiAoJGdyb3VwUGFuZWwubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICRncm91cFBhbmVsID0gJChcclxuICAgICAgICAnPGRpdiBjbGFzcz1cImdyb3VwLXBhbmVsXCIgZGF0YS1ncm91cD1cIicgKyBncm91cE5hbWUgKyAnXCI+PC9kaXY+J1xyXG4gICAgICApLmFwcGVuZFRvKCRkZXNpZ25lcilcclxuXHJcbiAgICAgIGNvbnN0IHNoYXBlR3JvdXAgPSBldmVudEJ1cy50cmlnZ2VyKCdncm91cC5nZXQnLCBncm91cE5hbWUpXHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoYXBlR3JvdXAubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICBjb25zdCB0eXBlID0gc2hhcGVHcm91cFtpXVxyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudEJ1cy50cmlnZ2VyKCdzaGFwZS5jcmVhdGUnLCB7XHJcbiAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgZWxlbWVudDogY2xvbmVEZWVwKEVMRU1FTlRfVEVNUClcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBpZiAoY2hlY2tCcG1uU2hhcGUoYnBtbnMsIGZpbHRlciwgdHlwZSkpIHtcclxuICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbGVtZW50LmRhdGEudGV4dCA9IGV2ZW50QnVzLnRyaWdnZXIoXHJcbiAgICAgICAgICAnaTE4bicsXHJcbiAgICAgICAgICAnYnBtbi4nICsgZWxlbWVudC5zaGFwZS5icG1uTmFtZVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgY29uc3QgJGdyb3VwSXRlbSA9ICQoXHJcbiAgICAgICAgICAnPGRpdiBjbGFzcz1cImdyb3VwLWl0ZW1cIiBkYXRhLXR5cGU9XCInICtcclxuICAgICAgICAgICAgdHlwZSArXHJcbiAgICAgICAgICAgICdcIiBkYXRhLXNoYXBlPVwiJyArXHJcbiAgICAgICAgICAgIGVsZW1lbnQuc2hhcGUuYnBtbk5hbWUgK1xyXG4gICAgICAgICAgICAnXCI+PGNhbnZhcyB0aXRsZT1cIicgK1xyXG4gICAgICAgICAgICBlbGVtZW50LmRhdGEudGV4dCArXHJcbiAgICAgICAgICAgICdcIiB3aWR0aD1cIicgK1xyXG4gICAgICAgICAgICBjb25maWcud2lkdGggK1xyXG4gICAgICAgICAgICAnXCIgaGVpZ2h0PVwiJyArXHJcbiAgICAgICAgICAgIGNvbmZpZy5oZWlnaHQgK1xyXG4gICAgICAgICAgICAnXCI+PC9jYW52YXM+PC9kaXY+J1xyXG4gICAgICAgICkuYXBwZW5kVG8oJGdyb3VwUGFuZWwpXHJcblxyXG4gICAgICAgIHRoaXMucmVuZGVySXRlbSgkZ3JvdXBJdGVtLmNoaWxkcmVuKCdjYW52YXMnKVswXSwgZWxlbWVudClcclxuICAgICAgfVxyXG4gICAgICAkZ3JvdXBQYW5lbC5vbignbW91c2Vkb3duJywgZSA9PiB7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgICRncm91cFBhbmVsXHJcbiAgICAgIC5jc3MoeyBsZWZ0OiB3aWR0aCwgdG9wOiBoZWlnaHQsICd6LWluZGV4Jzogb3JkZXJzLmxlbmd0aCArIDEgfSlcclxuICAgICAgLnNob3coKVxyXG5cclxuICAgICRncm91cFBhbmVsXHJcbiAgICAgIC5jaGlsZHJlbignLmdyb3VwLWl0ZW0nKVxyXG4gICAgICAub2ZmKClcclxuICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IGJwbW4gPSAkKHRoaXMpLmF0dHIoJ2RhdGEtc2hhcGUnKVxyXG4gICAgICAgIGNhbGxiYWNrKGJwbW4pXHJcbiAgICAgICAgJGdyb3VwUGFuZWwuaGlkZSgpXHJcbiAgICAgICAgJChkb2N1bWVudCkub2ZmKCdtb3VzZWRvd24uZ3JvdXAtcGFuZWwnKVxyXG4gICAgICB9KVxyXG4gICAgJChkb2N1bWVudCkub24oJ21vdXNlZG93bi5ncm91cC1wYW5lbCcsICgpID0+IHtcclxuICAgICAgJGdyb3VwUGFuZWwuaGlkZSgpXHJcbiAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2Vkb3duLmdyb3VwLXBhbmVsJylcclxuICAgIH0pXHJcbiAgICByZXR1cm4gJGdyb3VwUGFuZWxcclxuICB9XHJcblxyXG4gIGhpZGVHcm91cCgkcGFyZW50cykge1xyXG4gICAgY29uc3QgJGRvbSA9ICRwYXJlbnRzIHx8IHRoaXMuJGNvbnRhaW5lclxyXG4gICAgJGRvbS5maW5kKCcuZ3JvdXAtaWNvbicpLmhpZGUoKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0geyp9IGNvbm5lY3Rpb25cclxuICAgKi9cclxuICBzaG93Q29ubmVjdGlvbkdyb3VwKGNvbm5lY3Rpb24pIHtcclxuICAgIGNvbnN0IHsgJGNvbnRhaW5lciwgY29uZmlnLCBicG1ucywgZmlsdGVyIH0gPSB0aGlzXHJcbiAgICBjb25zdCB7IGRhdGEsIHBsYW5lLCBzaGFwZSB9ID0gY29ubmVjdGlvblxyXG5cclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzXHJcbiAgICBjb25zdCBvcmRlcnMgPSBldmVudEJ1cy50cmlnZ2VyKCdvcmRlcnMuZ2V0JylcclxuICAgIGNvbnN0ICRkZXNpZ25lciA9ICRjb250YWluZXIuZmluZCgnLmJwZC1kZXNpZ25lcicpXHJcblxyXG4gICAgJGNvbnRhaW5lci5maW5kKCcuY29ubmVjdGlvbi1ncm91cC1wYW5lbCcpLmhpZGUoKVxyXG4gICAgbGV0ICRncm91cFBhbmVsID0gJGNvbnRhaW5lci5maW5kKFxyXG4gICAgICAnLmNvbm5lY3Rpb24tZ3JvdXAtcGFuZWxbZGF0YS1ncm91cD1cImJwbW5cIl0nXHJcbiAgICApXHJcblxyXG4gICAgaWYgKCRncm91cFBhbmVsLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAkZ3JvdXBQYW5lbCA9ICQoXHJcbiAgICAgICAgXCI8ZGl2IGNsYXNzPSdjb25uZWN0aW9uLWdyb3VwLXBhbmVsJyBkYXRhLWdyb3VwPSdicG1uJz48L2Rpdj5cIlxyXG4gICAgICApLmFwcGVuZFRvKCRkZXNpZ25lcilcclxuICAgICAgY29uc3Qgc2hhcGVHcm91cCA9IGV2ZW50QnVzLnRyaWdnZXIoJ2dyb3VwLmdldCcpXHJcbiAgICAgIGZvciAobGV0IGtleSBpbiBzaGFwZUdyb3VwKSB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBbXVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoYXBlR3JvdXBba2V5XS5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgICAgaWYgKCFjaGVja0JwbW5TaGFwZShicG1ucywgZmlsdGVyLCBzaGFwZUdyb3VwW2tleV1baV0pKSB7XHJcbiAgICAgICAgICAgIGdyb3VwLnB1c2goc2hhcGVHcm91cFtrZXldW2ldKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGdyb3VwLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IHR5cGUgPSBzaGFwZUdyb3VwW2tleV1bMF1cclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudEJ1cy50cmlnZ2VyKCdzaGFwZS5jcmVhdGUnLCB7XHJcbiAgICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICAgIGVsZW1lbnQ6IGNsb25lRGVlcChFTEVNRU5UX1RFTVApXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgZWxlbWVudC5kYXRhLnRleHQgPSBldmVudEJ1cy50cmlnZ2VyKFxyXG4gICAgICAgICAgICAnaTE4bicsXHJcbiAgICAgICAgICAgICdicG1uLicgKyBlbGVtZW50LnNoYXBlLmJwbW5OYW1lXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICB0aGlzLnJlbmRlckNvbm5lY3Rpb25JdGVtKGVsZW1lbnQsIGdyb3VwLCAkZ3JvdXBQYW5lbClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICRncm91cFBhbmVsXHJcbiAgICAgICAgLm9uKCdtb3VzZW1vdmUnLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICAgICAgfSlcclxuICAgICAgICAub24oJ21vdXNlZG93bicsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgICRncm91cFBhbmVsXHJcbiAgICAgIC5jc3Moe1xyXG4gICAgICAgIGxlZnQ6IHNldFNjYWxlKHBsYW5lLndheXBvaW50W3BsYW5lLndheXBvaW50Lmxlbmd0aCAtIDFdLngpLFxyXG4gICAgICAgIHRvcDogc2V0U2NhbGUocGxhbmUud2F5cG9pbnRbcGxhbmUud2F5cG9pbnQubGVuZ3RoIC0gMV0ueSksXHJcbiAgICAgICAgJ3otaW5kZXgnOiBvcmRlcnMubGVuZ3RoXHJcbiAgICAgIH0pXHJcbiAgICAgIC5zaG93KClcclxuICAgICRncm91cFBhbmVsXHJcbiAgICAgIC5maW5kKCcuZ3JvdXAtaWNvbicpXHJcbiAgICAgIC5vZmYoKVxyXG4gICAgICAub24oJ21vdXNlZG93bicsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwTmFtZSA9ICQodGhpcykuZGF0YSgnZ3JvdXAnKVxyXG4gICAgICAgIGNvbnN0IGl0ZW1Qb3MgPSAkKHRoaXMpXHJcbiAgICAgICAgICAucGFyZW50KClcclxuICAgICAgICAgIC5wb3NpdGlvbigpXHJcbiAgICAgICAgY29uc3QgcG9zID0gJGdyb3VwUGFuZWwucG9zaXRpb24oKVxyXG4gICAgICAgIGNvbnN0IHdpZHRoID1cclxuICAgICAgICAgIHBvcy5sZWZ0ICtcclxuICAgICAgICAgIGl0ZW1Qb3MubGVmdCArXHJcbiAgICAgICAgICAkKHRoaXMpXHJcbiAgICAgICAgICAgIC5wYXJlbnQoKVxyXG4gICAgICAgICAgICAub3V0ZXJXaWR0aCgpIC1cclxuICAgICAgICAgIDEwXHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID1cclxuICAgICAgICAgIHBvcy50b3AgK1xyXG4gICAgICAgICAgaXRlbVBvcy50b3AgK1xyXG4gICAgICAgICAgJCh0aGlzKVxyXG4gICAgICAgICAgICAucGFyZW50KClcclxuICAgICAgICAgICAgLm91dGVySGVpZ2h0KClcclxuXHJcbiAgICAgICAgc2VsZi5ncm91cFBhbmVsKGdyb3VwTmFtZSwgd2lkdGgsIGhlaWdodCwgdHlwZSA9PiB7XHJcbiAgICAgICAgICBzZWxmLnJlbmRlclNoYXBlKGNvbm5lY3Rpb24sIHR5cGUpXHJcbiAgICAgICAgICAkZ3JvdXBQYW5lbC5oaWRlKClcclxuICAgICAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2Vkb3duLmRhc2hib2FyZCcpXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICAgIH0pXHJcbiAgICAkZ3JvdXBQYW5lbFxyXG4gICAgICAuY2hpbGRyZW4oJy5ncm91cC1pdGVtJylcclxuICAgICAgLm9mZigpXHJcbiAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAkZ3JvdXBQYW5lbC5oaWRlKClcclxuICAgICAgICAkKGRvY3VtZW50KS5vZmYoJ21vdXNlZG93bi5kYXNoYm9hcmQnKVxyXG4gICAgICAgIHNlbGYucmVuZGVyU2hhcGUoY29ubmVjdGlvbiwgJCh0aGlzKS5kYXRhKCdzaGFwZScpKVxyXG4gICAgICB9KVxyXG4gICAgJChkb2N1bWVudCkub24oJ21vdXNlZG93bi5kYXNoYm9hcmQnLCBmdW5jdGlvbigpIHtcclxuICAgICAgJGdyb3VwUGFuZWwuaGlkZSgpXHJcbiAgICAgICQoZG9jdW1lbnQpLm9mZignbW91c2Vkb3duLmRhc2hib2FyZCcpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0geyp9IGNvbm5lY3Rpb25cclxuICAgKiBAcGFyYW0geyp9IHR5cGVcclxuICAgKi9cclxuICByZW5kZXJTaGFwZShjb25uZWN0aW9uLCB0eXBlKSB7XHJcbiAgICBjb25zdCB3YXlwb2ludCA9IGNvbm5lY3Rpb24ucGxhbmUud2F5cG9pbnRcclxuICAgIGNvbnN0IGFuZ2xlID0gRHJhd1V0aWxzLmdldEVuZHBvaW50QW5nbGUoY29ubmVjdGlvbi5zaGFwZSwgJ3RhcmdldFJlZicpXHJcbiAgICBjb25zdCBxdWFkcmFudCA9IERyYXdVdGlscy5nZXRBbmdsZURpcihhbmdsZSlcclxuXHJcbiAgICBjb25zdCBuYW1lID0gZXZlbnRCdXMudHJpZ2dlcignaTE4bicsICdicG1uLicgKyB0eXBlKVxyXG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50QnVzLnRyaWdnZXIoJ2VsZW1lbnQuY3JlYXRlJywge1xyXG4gICAgICBuYW1lLFxyXG4gICAgICB0eXBlLFxyXG4gICAgICBwcmVmaXg6ICdvYmonXHJcbiAgICB9KVxyXG5cclxuICAgIGNvbnN0IGFuY2hvcnMgPSBlbGVtZW50LnNoYXBlLmdldEFuY2hvcnMoKVxyXG5cclxuICAgIGxldCBwb2ludFxyXG4gICAgbGV0IG51bSA9IG51bGxcclxuXHJcbiAgICBzd2l0Y2ggKHF1YWRyYW50KSB7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICBudW0gPSBudWxsXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbmNob3JzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICBjb25zdCBhbmNob3IgPSBhbmNob3JzW2ldXHJcbiAgICAgICAgICBpZiAobnVtID09IG51bGwgfHwgYW5jaG9yLnkgPCBudW0pIHtcclxuICAgICAgICAgICAgbnVtID0gYW5jaG9yLnlcclxuICAgICAgICAgICAgcG9pbnQgPSBhbmNob3JcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIG51bSA9IG51bGxcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFuY2hvcnMubGVuZ3RoOyBpICs9IDEpIHtcclxuICAgICAgICAgIGNvbnN0IGFuY2hvciA9IGFuY2hvcnNbaV1cclxuICAgICAgICAgIGlmIChudW0gPT0gbnVsbCB8fCBhbmNob3IueCA+IG51bSkge1xyXG4gICAgICAgICAgICBudW0gPSBhbmNob3IueFxyXG4gICAgICAgICAgICBwb2ludCA9IGFuY2hvclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlIDM6XHJcbiAgICAgICAgbnVtID0gbnVsbFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYW5jaG9ycy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgICAgY29uc3QgYW5jaG9yID0gYW5jaG9yc1tpXVxyXG4gICAgICAgICAgaWYgKG51bSA9PSBudWxsIHx8IGFuY2hvci55ID4gbnVtKSB7XHJcbiAgICAgICAgICAgIG51bSA9IGFuY2hvci55XHJcbiAgICAgICAgICAgIHBvaW50ID0gYW5jaG9yXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrXHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICBudW0gPSBudWxsXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbmNob3JzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICBjb25zdCBhbmNob3IgPSBhbmNob3JzW2ldXHJcbiAgICAgICAgICBpZiAobnVtID09IG51bGwgfHwgYW5jaG9yLnggPCBudW0pIHtcclxuICAgICAgICAgICAgbnVtID0gYW5jaG9yLnhcclxuICAgICAgICAgICAgcG9pbnQgPSBhbmNob3JcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG5cclxuICAgIGVsZW1lbnQucGxhbmUuYm91bmRzLnggPSB3YXlwb2ludFt3YXlwb2ludC5sZW5ndGggLSAxXS54IC0gcG9pbnQueFxyXG4gICAgZWxlbWVudC5wbGFuZS5ib3VuZHMueSA9IHdheXBvaW50W3dheXBvaW50Lmxlbmd0aCAtIDFdLnkgLSBwb2ludC55XHJcblxyXG4gICAgZXZlbnRCdXMudHJpZ2dlcignc2hhcGUucmVuZGVyJywgeyB0eXBlLCBlbGVtZW50IH0pXHJcbiAgICBldmVudEJ1cy50cmlnZ2VyKCdlbGVtZW50LmFkZCcsIGVsZW1lbnQpXHJcblxyXG4gICAgY29uc3QgdGFyZ2V0QW5nbGUgPSBEcmF3VXRpbHMuZ2V0UG9pbnRBbmdsZShcclxuICAgICAgdGhpcy4kY29udGFpbmVyLFxyXG4gICAgICBlbGVtZW50LmRhdGEuaWQsXHJcbiAgICAgIHdheXBvaW50W3dheXBvaW50Lmxlbmd0aCAtIDFdLngsXHJcbiAgICAgIHdheXBvaW50W3dheXBvaW50Lmxlbmd0aCAtIDFdLnksXHJcbiAgICAgIDdcclxuICAgIClcclxuXHJcbiAgICBjb25uZWN0aW9uLmRhdGEudGFyZ2V0UmVmID0gZWxlbWVudC5kYXRhLmlkXHJcbiAgICB3YXlwb2ludFt3YXlwb2ludC5sZW5ndGggLSAxXS5hbmdsZSA9IHRhcmdldEFuZ2xlXHJcblxyXG4gICAgZXZlbnRCdXMudHJpZ2dlcignY29ubmVjdGlvbi5yZW5kZXInLCB7XHJcbiAgICAgIGVsZW1lbnQ6IGNvbm5lY3Rpb24sXHJcbiAgICAgIHJlbmRlcmVkOiB0cnVlXHJcbiAgICB9KVxyXG5cclxuICAgIGV2ZW50QnVzLnRyaWdnZXIoJ2VsZW1lbnQudXBkYXRlJywgY29ubmVjdGlvbilcclxuICAgIGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLnNlbGVjdC5yZW1vdmUnKVxyXG4gICAgZXZlbnRCdXMudHJpZ2dlcignc2hhcGUuc2VsZWN0JywgeyBpZHM6IGVsZW1lbnQuZGF0YS5pZCB9KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0geyp9IGVsZW1lbnRcclxuICAgKiBAcGFyYW0geyp9IGdyb3VwXHJcbiAgICogQHBhcmFtIHsqfSAkZ3JvdXBQYW5lbFxyXG4gICAqL1xyXG4gIHJlbmRlckNvbm5lY3Rpb25JdGVtKGVsZW1lbnQsIGdyb3VwLCAkZ3JvdXBQYW5lbCkge1xyXG4gICAgY29uc3QgeyBjb25maWcgfSA9IHRoaXNcclxuICAgIGNvbnN0IHRpdGxlID0gZXZlbnRCdXMudHJpZ2dlcignaTE4bicsICdicG1uLicgKyBlbGVtZW50LnNoYXBlLmJwbW5OYW1lKVxyXG4gICAgY29uc3QgJGl0ZW0gPSAkKFxyXG4gICAgICBcIjxkaXYgY2xhc3M9J2dyb3VwLWl0ZW0nIGRhdGEtZ3JvdXA9J1wiICtcclxuICAgICAgICBlbGVtZW50LnNoYXBlLmdyb3VwTmFtZSArXHJcbiAgICAgICAgXCInICBkYXRhLXNoYXBlPSdcIiArXHJcbiAgICAgICAgZWxlbWVudC5zaGFwZS5icG1uTmFtZSArXHJcbiAgICAgICAgXCInPjxjYW52YXMgdGl0bGU9J1wiICtcclxuICAgICAgICB0aXRsZSArXHJcbiAgICAgICAgXCInIHdpZHRoPSdcIiArXHJcbiAgICAgICAgY29uZmlnLndpZHRoICtcclxuICAgICAgICBcIicgaGVpZ2h0PSdcIiArXHJcbiAgICAgICAgY29uZmlnLmhlaWdodCArXHJcbiAgICAgICAgXCInPjwvY2FudmFzPjwvZGl2PlwiXHJcbiAgICApLmFwcGVuZFRvKCRncm91cFBhbmVsKVxyXG5cclxuICAgIHRoaXMucmVuZGVySXRlbSgkaXRlbS5jaGlsZHJlbignY2FudmFzJylbMF0sIGVsZW1lbnQpXHJcblxyXG4gICAgaWYgKGdyb3VwLmxlbmd0aCA+IDEpIHtcclxuICAgICAgJGl0ZW0uYXBwZW5kKFxyXG4gICAgICAgIFwiPGRpdiBjbGFzcz0nZ3JvdXAtaWNvbicgZGF0YS1ncm91cD0nXCIgK1xyXG4gICAgICAgICAgZWxlbWVudC5zaGFwZS5ncm91cE5hbWUgK1xyXG4gICAgICAgICAgXCInPjwvZGl2PlwiXHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHsqfSBjYW52YXNcclxuICAgKiBAcGFyYW0geyp9IGVsZW1lbnRcclxuICAgKi9cclxuICByZW5kZXJJdGVtKGNhbnZhcywgZWxlbWVudCkge1xyXG4gICAgY29uc3QgeyBjb25maWcgfSA9IHRoaXNcclxuICAgIGNvbnN0IHsgZGF0YSwgcGxhbmUsIHNoYXBlIH0gPSBlbGVtZW50XHJcbiAgICBjb25zdCBjYW52YXMyRCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpXHJcblxyXG4gICAgY29uc3QgYm91bmRzID0ge1xyXG4gICAgICB4OiAwLFxyXG4gICAgICB5OiAwLFxyXG4gICAgICB3aWR0aDogcGxhbmUuYm91bmRzLndpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHBsYW5lLmJvdW5kcy5oZWlnaHRcclxuICAgIH1cclxuXHJcbiAgICBjYW52YXMyRC5jbGVhclJlY3QoMCwgMCwgY29uZmlnLndpZHRoLCBjb25maWcuaGVpZ2h0KVxyXG5cclxuICAgIGlmIChib3VuZHMud2lkdGggPj0gY29uZmlnLndpZHRoIHx8IGJvdW5kcy5oZWlnaHQgPj0gY29uZmlnLndpZHRoKSB7XHJcbiAgICAgIGlmIChwbGFuZS5ib3VuZHMud2lkdGggPj0gcGxhbmUuYm91bmRzLmhlaWdodCkge1xyXG4gICAgICAgIGJvdW5kcy53aWR0aCA9IGNvbmZpZy53aWR0aCAtIHNoYXBlLmxpbmVTdHlsZS5saW5lV2lkdGggKiAyXHJcbiAgICAgICAgYm91bmRzLmhlaWdodCA9IHBhcnNlSW50KFxyXG4gICAgICAgICAgKHBsYW5lLmJvdW5kcy5oZWlnaHQgLyBwbGFuZS5ib3VuZHMud2lkdGgpICogYm91bmRzLndpZHRoXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC8vIOacgOWwj+mrmOW6plxyXG4gICAgICAgIGlmIChib3VuZHMuaGVpZ2h0IDwgMjApIHtcclxuICAgICAgICAgIGJvdW5kcy5oZWlnaHQgPSAyMFxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBib3VuZHMuaGVpZ2h0ID0gY29uZmlnLmhlaWdodCAtIHNoYXBlLmxpbmVTdHlsZS5saW5lV2lkdGggKiAyXHJcbiAgICAgICAgYm91bmRzLndpZHRoID0gcGFyc2VJbnQoXHJcbiAgICAgICAgICAocGxhbmUuYm91bmRzLndpZHRoIC8gcGxhbmUuYm91bmRzLmhlaWdodCkgKiBib3VuZHMuaGVpZ2h0XHJcbiAgICAgICAgKVxyXG4gICAgICAgIC8vIOacgOWwj+WuveW6plxyXG4gICAgICAgIGlmIChib3VuZHMud2lkdGggPCAyMCkge1xyXG4gICAgICAgICAgYm91bmRzLndpZHRoID0gMjBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwbGFuZS5ib3VuZHMgPSBib3VuZHNcclxuXHJcbiAgICBjb25zdCBwYXRocyA9IGNsb25lRGVlcChzaGFwZS5nZXRQYXRoKCkpXHJcblxyXG4gICAgY29uc3QgY2VudGVyID0ge1xyXG4gICAgICB4OiBib3VuZHMueCArIGJvdW5kcy53aWR0aCAvIDIsXHJcbiAgICAgIHk6IGJvdW5kcy55ICsgYm91bmRzLmhlaWdodCAvIDJcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgIGNvbnN0IHBhdGggPSBwYXRoc1tpXVxyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHBhdGguYWN0aW9ucy5sZW5ndGg7IGogKz0gMSkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBwYXRoLmFjdGlvbnNbal1cclxuICAgICAgICBpZiAoaXRlbS5hY3Rpb24gPT09ICdmb250Jykge1xyXG4gICAgICAgICAgaXRlbS50ZXh0QWxpZ24gPSAnY2VudGVyJ1xyXG4gICAgICAgICAgaXRlbS50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJ1xyXG4gICAgICAgICAgaXRlbS5mb250U2l6ZSA9ICcxNHB4J1xyXG4gICAgICAgICAgaXRlbS54ID0gY2VudGVyLnhcclxuICAgICAgICAgIGl0ZW0ueSA9IGNlbnRlci55XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2hhcGUuYWN0aW9ucyA9IHBhdGhzXHJcblxyXG4gICAgY2FudmFzMkQuc2F2ZSgpXHJcbiAgICBjYW52YXMyRC5saW5lSm9pbiA9ICdyb3VuZCdcclxuICAgIGNhbnZhczJELmdsb2JhbEFscGhhID0gc2hhcGUuc2hhcGVTdHlsZS5hbHBoYVxyXG4gICAgY29uc3QgeCA9IChjb25maWcud2lkdGggLSBib3VuZHMud2lkdGgpIC8gMlxyXG4gICAgY29uc3QgeSA9IChjb25maWcuaGVpZ2h0IC0gYm91bmRzLmhlaWdodCkgLyAyXHJcbiAgICBjYW52YXMyRC50cmFuc2xhdGUoeCwgeSlcclxuICAgIGNhbnZhczJELnRyYW5zbGF0ZShib3VuZHMud2lkdGggLyAyLCBib3VuZHMuaGVpZ2h0IC8gMilcclxuICAgIGNhbnZhczJELnJvdGF0ZShzaGFwZS5zaGFwZVN0eWxlLmFuZ2xlKVxyXG4gICAgY2FudmFzMkQudHJhbnNsYXRlKC0oYm91bmRzLndpZHRoIC8gMiksIC0oYm91bmRzLmhlaWdodCAvIDIpKVxyXG5cclxuICAgIGV2ZW50QnVzLnRyaWdnZXIoJ3NoYXBlLnJlbmRlclBhdGgnLCB7XHJcbiAgICAgIHNoYXBlMkQ6IGNhbnZhczJELFxyXG4gICAgICBlbGVtZW50LFxyXG4gICAgICByZW5kZXI6IHRydWVcclxuICAgIH0pXHJcblxyXG4gICAgY2FudmFzMkQucmVzdG9yZSgpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBncm91cFBhbmVsXHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZmVhdHVyZXMvZ3JvdXAtcGFuZWwvZ3JvdXBQYW5lbC5qcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFEQTtBQUZBO0FBQ0E7QUFNQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQWFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O0FBSUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQU9BO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQTFDQTtBQUNBO0FBNENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7QUFNQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFhQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSkE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUZBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTs7Ozs7O0FBR0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///61\n"); + +/***/ }), +/* 62 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__hotkey__ = __webpack_require__(63);\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0__hotkey__[\"a\" /* default */]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjIuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2hvdGtleS9pbmRleC5qcz8xYzdlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBIb3RLZXkgZnJvbSAnLi9ob3RrZXknXHJcblxyXG5leHBvcnQgZGVmYXVsdCBIb3RLZXlcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9mZWF0dXJlcy9ob3RrZXkvaW5kZXguanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///62\n"); + +/***/ }), +/* 63 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__keyCodes__ = __webpack_require__(64);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\n\nvar HotKey = function () {\n function HotKey() {\n _classCallCheck(this, HotKey);\n\n this.funs = {\n Ctrl: {},\n Alt: {},\n Shift: {}\n };\n\n this.init();\n this.keyEvent();\n }\n\n _createClass(HotKey, [{\n key: 'init',\n value: function init() {\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('key.bind', this.bindKey.bind(this));\n\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('key.clear', this.clearKey.bind(this));\n }\n }, {\n key: 'keyEvent',\n value: function keyEvent() {\n var _this = this;\n\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('keydown.hotkey').on('keydown.hotkey', function (e) {\n var funs = [];\n if (e.ctrlKey) {\n funs = _this.funs.Ctrl[e.keyCode] || [];\n } else if (e.altKey) {\n funs = _this.funs.Alt[e.keyCode] || [];\n } else if (e.shiftKey) {\n funs = _this.funs.Shift[e.keyCode] || [];\n } else {\n funs = _this.funs[e.keyCode] || [];\n }\n for (var i = 0; i < funs.length; i += 1) {\n funs[i](e);\n }\n if (funs.length > 0) {\n e.preventDefault();\n }\n });\n\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('keydown.hotkey', 'input,textarea,select').on('keydown.hotkey', 'input,textarea,select', function (e) {\n // 阻止冒泡\n e.stopPropagation();\n });\n }\n }, {\n key: 'bindKey',\n value: function bindKey(_ref) {\n var key = _ref.key,\n fun = _ref.fun;\n\n var keys = key.split('+');\n if (keys.length === 1) {\n if (keys[0] === 'Ctrl' || keys[0] === 'Alt' || keys[0] === 'Shift') {\n console.log('error: ' + keys[0]);\n } else {\n var keyCode = __WEBPACK_IMPORTED_MODULE_2__keyCodes__[\"a\" /* default */][keys[0]];\n if (!this.funs[keyCode]) {\n this.funs[keyCode] = [];\n }\n this.funs[keyCode].push(fun);\n }\n } else if (keys.length === 2) {\n if (keys[0] === 'Ctrl' || keys[0] === 'Alt' || keys[0] === 'Shift') {\n if (keys[1] !== 'Ctrl' && keys[1] !== 'Alt' && keys[1] !== 'Shift') {\n var obj = this.funs[keys[0]];\n var _keyCode = __WEBPACK_IMPORTED_MODULE_2__keyCodes__[\"a\" /* default */][keys[1]];\n if (!obj[_keyCode]) {\n obj[_keyCode] = [];\n }\n obj[_keyCode].push(fun);\n } else {\n console.log('组合键2错误');\n }\n } else {\n console.log('组合键1错误');\n }\n } else {\n console.log('组合键数量错误');\n }\n }\n }, {\n key: 'clearKey',\n value: function clearKey() {\n this.cancel();\n this.funs = {\n Ctrl: {},\n Alt: {},\n Shift: {}\n };\n }\n }, {\n key: 'cancel',\n value: function cancel() {\n Object(__WEBPACK_IMPORTED_MODULE_1__utils_slimJQ__[\"a\" /* default */])(document).off('keydown.hotkey');\n }\n }]);\n\n return HotKey;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (HotKey);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2hvdGtleS9ob3RrZXkuanM/MWVkNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXZlbnRCdXMgZnJvbSAnLi4vLi4vY29yZS9ldmVudEJ1cydcclxuaW1wb3J0ICQgZnJvbSAnLi4vLi4vdXRpbHMvc2xpbUpRJ1xyXG5cclxuaW1wb3J0IGtleUNvZGVzIGZyb20gJy4va2V5Q29kZXMnXHJcblxyXG5jbGFzcyBIb3RLZXkge1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5mdW5zID0ge1xyXG4gICAgICBDdHJsOiB7fSxcclxuICAgICAgQWx0OiB7fSxcclxuICAgICAgU2hpZnQ6IHt9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0KClcclxuICAgIHRoaXMua2V5RXZlbnQoKVxyXG4gIH1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIC8vXHJcbiAgICBldmVudEJ1cy5vbigna2V5LmJpbmQnLCB0aGlzLmJpbmRLZXkuYmluZCh0aGlzKSlcclxuXHJcbiAgICBldmVudEJ1cy5vbigna2V5LmNsZWFyJywgdGhpcy5jbGVhcktleS5iaW5kKHRoaXMpKVxyXG4gIH1cclxuXHJcbiAga2V5RXZlbnQoKSB7XHJcbiAgICAkKGRvY3VtZW50KVxyXG4gICAgICAub2ZmKCdrZXlkb3duLmhvdGtleScpXHJcbiAgICAgIC5vbigna2V5ZG93bi5ob3RrZXknLCBlID0+IHtcclxuICAgICAgICBsZXQgZnVucyA9IFtdXHJcbiAgICAgICAgaWYgKGUuY3RybEtleSkge1xyXG4gICAgICAgICAgZnVucyA9IHRoaXMuZnVucy5DdHJsW2Uua2V5Q29kZV0gfHwgW11cclxuICAgICAgICB9IGVsc2UgaWYgKGUuYWx0S2V5KSB7XHJcbiAgICAgICAgICBmdW5zID0gdGhpcy5mdW5zLkFsdFtlLmtleUNvZGVdIHx8IFtdXHJcbiAgICAgICAgfSBlbHNlIGlmIChlLnNoaWZ0S2V5KSB7XHJcbiAgICAgICAgICBmdW5zID0gdGhpcy5mdW5zLlNoaWZ0W2Uua2V5Q29kZV0gfHwgW11cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZnVucyA9IHRoaXMuZnVuc1tlLmtleUNvZGVdIHx8IFtdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnVucy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICAgICAgZnVuc1tpXShlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZnVucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgJChkb2N1bWVudClcclxuICAgICAgLm9mZigna2V5ZG93bi5ob3RrZXknLCAnaW5wdXQsdGV4dGFyZWEsc2VsZWN0JylcclxuICAgICAgLm9uKCdrZXlkb3duLmhvdGtleScsICdpbnB1dCx0ZXh0YXJlYSxzZWxlY3QnLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgLy8g6Zi75q2i5YaS5rOhXHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgYmluZEtleSh7IGtleSwgZnVuIH0pIHtcclxuICAgIGNvbnN0IGtleXMgPSBrZXkuc3BsaXQoJysnKVxyXG4gICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIGlmIChrZXlzWzBdID09PSAnQ3RybCcgfHwga2V5c1swXSA9PT0gJ0FsdCcgfHwga2V5c1swXSA9PT0gJ1NoaWZ0Jykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcjogJyArIGtleXNbMF0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGtleUNvZGVzW2tleXNbMF1dXHJcbiAgICAgICAgaWYgKCF0aGlzLmZ1bnNba2V5Q29kZV0pIHtcclxuICAgICAgICAgIHRoaXMuZnVuc1trZXlDb2RlXSA9IFtdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnVuc1trZXlDb2RlXS5wdXNoKGZ1bilcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChrZXlzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICBpZiAoa2V5c1swXSA9PT0gJ0N0cmwnIHx8IGtleXNbMF0gPT09ICdBbHQnIHx8IGtleXNbMF0gPT09ICdTaGlmdCcpIHtcclxuICAgICAgICBpZiAoa2V5c1sxXSAhPT0gJ0N0cmwnICYmIGtleXNbMV0gIT09ICdBbHQnICYmIGtleXNbMV0gIT09ICdTaGlmdCcpIHtcclxuICAgICAgICAgIGNvbnN0IG9iaiA9IHRoaXMuZnVuc1trZXlzWzBdXVxyXG4gICAgICAgICAgY29uc3Qga2V5Q29kZSA9IGtleUNvZGVzW2tleXNbMV1dXHJcbiAgICAgICAgICBpZiAoIW9ialtrZXlDb2RlXSkge1xyXG4gICAgICAgICAgICBvYmpba2V5Q29kZV0gPSBbXVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb2JqW2tleUNvZGVdLnB1c2goZnVuKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygn57uE5ZCI6ZSuMumUmeivrycpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCfnu4TlkIjplK4x6ZSZ6K+vJylcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ+e7hOWQiOmUruaVsOmHj+mUmeivrycpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhcktleSgpIHtcclxuICAgIHRoaXMuY2FuY2VsKClcclxuICAgIHRoaXMuZnVucyA9IHtcclxuICAgICAgQ3RybDoge30sXHJcbiAgICAgIEFsdDoge30sXHJcbiAgICAgIFNoaWZ0OiB7fVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCkge1xyXG4gICAgJChkb2N1bWVudCkub2ZmKCdrZXlkb3duLmhvdGtleScpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBIb3RLZXlcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9mZWF0dXJlcy9ob3RrZXkvaG90a2V5LmpzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFBQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQTtBQUFBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTs7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7QUFHQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///63\n"); + +/***/ }), +/* 64 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony default export */ __webpack_exports__[\"a\"] = ({\n // 数字键\n 0: 48,\n 1: 49,\n 2: 50,\n 3: 51,\n 4: 52,\n 5: 53,\n 6: 54,\n 7: 55,\n 8: 56,\n 9: 57,\n // 英文键\n A: 65,\n B: 66,\n C: 67,\n D: 68,\n E: 69,\n F: 70,\n G: 71,\n H: 72,\n I: 73,\n J: 74,\n K: 75,\n L: 76,\n M: 77,\n N: 78,\n O: 79,\n P: 80,\n Q: 81,\n R: 82,\n S: 83,\n T: 84,\n U: 85,\n V: 86,\n W: 87,\n X: 88,\n Y: 89,\n Z: 90,\n // 功能键\n Esc: 27,\n BackSpace: 8,\n Tab: 9,\n Spacebar: 32,\n Shift: 16,\n Enter: 13,\n Control: 17,\n Alt: 18,\n Left: 37,\n Up: 38,\n Right: 39,\n Down: 40,\n Insert: 45,\n Delete: 46,\n End: 35,\n Home: 36,\n PageUp: 33,\n PageDown: 34\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjQuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2hvdGtleS9rZXlDb2Rlcy5qcz9mYTNlIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcclxuICAvLyDmlbDlrZfplK5cclxuICAwOiA0OCxcclxuICAxOiA0OSxcclxuICAyOiA1MCxcclxuICAzOiA1MSxcclxuICA0OiA1MixcclxuICA1OiA1MyxcclxuICA2OiA1NCxcclxuICA3OiA1NSxcclxuICA4OiA1NixcclxuICA5OiA1NyxcclxuICAvLyDoi7HmlofplK5cclxuICBBOiA2NSxcclxuICBCOiA2NixcclxuICBDOiA2NyxcclxuICBEOiA2OCxcclxuICBFOiA2OSxcclxuICBGOiA3MCxcclxuICBHOiA3MSxcclxuICBIOiA3MixcclxuICBJOiA3MyxcclxuICBKOiA3NCxcclxuICBLOiA3NSxcclxuICBMOiA3NixcclxuICBNOiA3NyxcclxuICBOOiA3OCxcclxuICBPOiA3OSxcclxuICBQOiA4MCxcclxuICBROiA4MSxcclxuICBSOiA4MixcclxuICBTOiA4MyxcclxuICBUOiA4NCxcclxuICBVOiA4NSxcclxuICBWOiA4NixcclxuICBXOiA4NyxcclxuICBYOiA4OCxcclxuICBZOiA4OSxcclxuICBaOiA5MCxcclxuICAvLyDlip/og73plK5cclxuICBFc2M6IDI3LFxyXG4gIEJhY2tTcGFjZTogOCxcclxuICBUYWI6IDksXHJcbiAgU3BhY2ViYXI6IDMyLFxyXG4gIFNoaWZ0OiAxNixcclxuICBFbnRlcjogMTMsXHJcbiAgQ29udHJvbDogMTcsXHJcbiAgQWx0OiAxOCxcclxuICBMZWZ0OiAzNyxcclxuICBVcDogMzgsXHJcbiAgUmlnaHQ6IDM5LFxyXG4gIERvd246IDQwLFxyXG4gIEluc2VydDogNDUsXHJcbiAgRGVsZXRlOiA0NixcclxuICBFbmQ6IDM1LFxyXG4gIEhvbWU6IDM2LFxyXG4gIFBhZ2VVcDogMzMsXHJcbiAgUGFnZURvd246IDM0XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHNyYy9mZWF0dXJlcy9ob3RrZXkva2V5Q29kZXMuanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBekRBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///64\n"); + +/***/ }), +/* 65 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__i18n__ = __webpack_require__(66);\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (__WEBPACK_IMPORTED_MODULE_0__i18n__[\"a\" /* default */]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2kxOG4vaW5kZXguanM/MjFmNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgSTE4biBmcm9tICcuL2kxOG4nXHJcblxyXG5leHBvcnQgZGVmYXVsdCBJMThuXHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZmVhdHVyZXMvaTE4bi9pbmRleC5qcyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///65\n"); + +/***/ }), +/* 66 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__core_eventBus__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__languages__ = __webpack_require__(67);\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar I18n = function () {\n function I18n() {\n var local = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'zh_CN';\n\n _classCallCheck(this, I18n);\n\n // 本地化\n this.local = local;\n\n this.init();\n }\n\n _createClass(I18n, [{\n key: 'init',\n value: function init() {\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('i18n', this.t.bind(this));\n //\n __WEBPACK_IMPORTED_MODULE_0__core_eventBus__[\"a\" /* default */].on('i18n.change', this.change.bind(this));\n }\n }, {\n key: 't',\n value: function t(key) {\n var keys = key.split('.');\n var obj = __WEBPACK_IMPORTED_MODULE_1__languages__[\"a\" /* default */][this.local];\n for (var i = 0; i < keys.length; i += 1) {\n obj = obj[keys[i]];\n }\n return obj;\n }\n }, {\n key: 'change',\n value: function change() {\n var local = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'zh_CN';\n\n this.local = local;\n }\n }]);\n\n return I18n;\n}();\n\n/* harmony default export */ __webpack_exports__[\"a\"] = (I18n);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2kxOG4vaTE4bi5qcz9lZmNmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBldmVudEJ1cyBmcm9tICcuLi8uLi9jb3JlL2V2ZW50QnVzJ1xyXG5pbXBvcnQgbGFuZ3VhZ2VzIGZyb20gJy4vbGFuZ3VhZ2VzJ1xyXG5cclxuY2xhc3MgSTE4biB7XHJcbiAgY29uc3RydWN0b3IobG9jYWwgPSAnemhfQ04nKSB7XHJcbiAgICAvLyDmnKzlnLDljJZcclxuICAgIHRoaXMubG9jYWwgPSBsb2NhbFxyXG5cclxuICAgIHRoaXMuaW5pdCgpXHJcbiAgfVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgLy9cclxuICAgIGV2ZW50QnVzLm9uKCdpMThuJywgdGhpcy50LmJpbmQodGhpcykpXHJcbiAgICAvL1xyXG4gICAgZXZlbnRCdXMub24oJ2kxOG4uY2hhbmdlJywgdGhpcy5jaGFuZ2UuYmluZCh0aGlzKSlcclxuICB9XHJcblxyXG4gIHQoa2V5KSB7XHJcbiAgICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KCcuJylcclxuICAgIGxldCBvYmogPSBsYW5ndWFnZXNbdGhpcy5sb2NhbF1cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKz0gMSkge1xyXG4gICAgICBvYmogPSBvYmpba2V5c1tpXV1cclxuICAgIH1cclxuICAgIHJldHVybiBvYmpcclxuICB9XHJcblxyXG4gIGNoYW5nZShsb2NhbCA9ICd6aF9DTicpIHtcclxuICAgIHRoaXMubG9jYWwgPSBsb2NhbFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgSTE4blxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2ZlYXR1cmVzL2kxOG4vaTE4bi5qcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBO0FBQUE7QUFDQTtBQUFBO0FBQ0E7Ozs7OztBQUdBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///66\n"); + +/***/ }), +/* 67 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__zh_CN__ = __webpack_require__(68);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__zh_TW__ = __webpack_require__(69);\n\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n zh_CN: __WEBPACK_IMPORTED_MODULE_0__zh_CN__[\"a\" /* default */],\n zh_TW: __WEBPACK_IMPORTED_MODULE_1__zh_TW__[\"a\" /* default */]\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2kxOG4vbGFuZ3VhZ2VzL2luZGV4LmpzP2M4MTgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHpoQ04gZnJvbSAnLi96aF9DTidcclxuaW1wb3J0IHpoVFcgZnJvbSAnLi96aF9UVydcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICB6aF9DTjogemhDTixcclxuICB6aF9UVzogemhUV1xyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzcmMvZmVhdHVyZXMvaTE4bi9sYW5ndWFnZXMvaW5kZXguanMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFGQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///67\n"); + +/***/ }), +/* 68 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony default export */ __webpack_exports__[\"a\"] = ({\n bpmn: {\n StartEvent: '开始事件',\n MessageStartEvent: '消息开始事件',\n TimerStartEvent: '时间开始事件',\n SignalStartEvent: '信号开始事件',\n UserTask: '人工任务',\n ServiceTask: '系统任务',\n ScriptTask: '脚本任务',\n ManualTask: '手工任务',\n BusinessRuleTask: '业务规则任务',\n SendTask: '发送任务',\n ReceiveTask: '接收任务',\n ParallelGateway: '并行网关',\n InclusiveGateway: '包容网关',\n ExclusiveGateway: '排他网关',\n EventBasedGateway: '事件网关',\n ComplexGateway: '复杂网关',\n IntermediateCatchEvent: '捕获中间事件',\n TimerIntermediateCatchEvent: '捕获时间事件',\n MessageIntermediateCatchEvent: '捕获消息事件',\n SignalIntermediateCatchEvent: '捕获信号事件',\n IntermediateThrowingEvent: '抛出中间事件',\n MessageIntermediateThrowingEvent: '抛出消息事件',\n SignalIntermediateThrowingEvent: '抛出信号事件',\n CompensateIntermediateThrowingEvent: '抛出补偿事件',\n BoundaryEvent: '边界事件',\n CancelBoundaryEvent: '边界取消事件',\n CompensateBoundaryEvent: '边界补偿事件',\n ErrorBoundaryEvent: '边界错误事件',\n MessageBoundaryEvent: '边界消息事件',\n SignalBoundaryEvent: '边界信号事件',\n TimerBoundaryEvent: '边界时间事件',\n CallActivity: '调用子流程',\n SubProcess: '子流程',\n Transaction: '事务',\n TextAnnotation: '注释',\n HorizontalPool: '泳池',\n HorizontalLane: '泳道',\n VerticalPool: '泳池',\n VerticalLane: '泳道',\n EndEvent: '结束事件',\n TerminateEndEvent: '终止事件',\n MessageEndEvent: '消息结束事件',\n SignalEndEvent: '信号结束事件',\n ErrorEndEvent: '错误结束事件',\n CancelEndEvent: '结束取消事件',\n CompensateEndEvent: '结束补偿事件'\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjguanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2kxOG4vbGFuZ3VhZ2VzL3poX0NOLmpzPzQ4M2IiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xyXG4gIGJwbW46IHtcclxuICAgIFN0YXJ0RXZlbnQ6ICflvIDlp4vkuovku7YnLFxyXG4gICAgTWVzc2FnZVN0YXJ0RXZlbnQ6ICfmtojmga/lvIDlp4vkuovku7YnLFxyXG4gICAgVGltZXJTdGFydEV2ZW50OiAn5pe26Ze05byA5aeL5LqL5Lu2JyxcclxuICAgIFNpZ25hbFN0YXJ0RXZlbnQ6ICfkv6Hlj7flvIDlp4vkuovku7YnLFxyXG4gICAgVXNlclRhc2s6ICfkurrlt6Xku7vliqEnLFxyXG4gICAgU2VydmljZVRhc2s6ICfns7vnu5/ku7vliqEnLFxyXG4gICAgU2NyaXB0VGFzazogJ+iEmuacrOS7u+WKoScsXHJcbiAgICBNYW51YWxUYXNrOiAn5omL5bel5Lu75YqhJyxcclxuICAgIEJ1c2luZXNzUnVsZVRhc2s6ICfkuJrliqHop4TliJnku7vliqEnLFxyXG4gICAgU2VuZFRhc2s6ICflj5HpgIHku7vliqEnLFxyXG4gICAgUmVjZWl2ZVRhc2s6ICfmjqXmlLbku7vliqEnLFxyXG4gICAgUGFyYWxsZWxHYXRld2F5OiAn5bm26KGM572R5YWzJyxcclxuICAgIEluY2x1c2l2ZUdhdGV3YXk6ICfljIXlrrnnvZHlhbMnLFxyXG4gICAgRXhjbHVzaXZlR2F0ZXdheTogJ+aOkuS7lue9keWFsycsXHJcbiAgICBFdmVudEJhc2VkR2F0ZXdheTogJ+S6i+S7tue9keWFsycsXHJcbiAgICBDb21wbGV4R2F0ZXdheTogJ+Wkjeadgue9keWFsycsXHJcbiAgICBJbnRlcm1lZGlhdGVDYXRjaEV2ZW50OiAn5o2V6I635Lit6Ze05LqL5Lu2JyxcclxuICAgIFRpbWVySW50ZXJtZWRpYXRlQ2F0Y2hFdmVudDogJ+aNleiOt+aXtumXtOS6i+S7ticsXHJcbiAgICBNZXNzYWdlSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudDogJ+aNleiOt+a2iOaBr+S6i+S7ticsXHJcbiAgICBTaWduYWxJbnRlcm1lZGlhdGVDYXRjaEV2ZW50OiAn5o2V6I635L+h5Y+35LqL5Lu2JyxcclxuICAgIEludGVybWVkaWF0ZVRocm93aW5nRXZlbnQ6ICfmipvlh7rkuK3pl7Tkuovku7YnLFxyXG4gICAgTWVzc2FnZUludGVybWVkaWF0ZVRocm93aW5nRXZlbnQ6ICfmipvlh7rmtojmga/kuovku7YnLFxyXG4gICAgU2lnbmFsSW50ZXJtZWRpYXRlVGhyb3dpbmdFdmVudDogJ+aKm+WHuuS/oeWPt+S6i+S7ticsXHJcbiAgICBDb21wZW5zYXRlSW50ZXJtZWRpYXRlVGhyb3dpbmdFdmVudDogJ+aKm+WHuuihpeWBv+S6i+S7ticsXHJcbiAgICBCb3VuZGFyeUV2ZW50OiAn6L6555WM5LqL5Lu2JyxcclxuICAgIENhbmNlbEJvdW5kYXJ5RXZlbnQ6ICfovrnnlYzlj5bmtojkuovku7YnLFxyXG4gICAgQ29tcGVuc2F0ZUJvdW5kYXJ5RXZlbnQ6ICfovrnnlYzooaXlgb/kuovku7YnLFxyXG4gICAgRXJyb3JCb3VuZGFyeUV2ZW50OiAn6L6555WM6ZSZ6K+v5LqL5Lu2JyxcclxuICAgIE1lc3NhZ2VCb3VuZGFyeUV2ZW50OiAn6L6555WM5raI5oGv5LqL5Lu2JyxcclxuICAgIFNpZ25hbEJvdW5kYXJ5RXZlbnQ6ICfovrnnlYzkv6Hlj7fkuovku7YnLFxyXG4gICAgVGltZXJCb3VuZGFyeUV2ZW50OiAn6L6555WM5pe26Ze05LqL5Lu2JyxcclxuICAgIENhbGxBY3Rpdml0eTogJ+iwg+eUqOWtkOa1geeoiycsXHJcbiAgICBTdWJQcm9jZXNzOiAn5a2Q5rWB56iLJyxcclxuICAgIFRyYW5zYWN0aW9uOiAn5LqL5YqhJyxcclxuICAgIFRleHRBbm5vdGF0aW9uOiAn5rOo6YeKJyxcclxuICAgIEhvcml6b250YWxQb29sOiAn5rOz5rGgJyxcclxuICAgIEhvcml6b250YWxMYW5lOiAn5rOz6YGTJyxcclxuICAgIFZlcnRpY2FsUG9vbDogJ+azs+axoCcsXHJcbiAgICBWZXJ0aWNhbExhbmU6ICfms7PpgZMnLFxyXG4gICAgRW5kRXZlbnQ6ICfnu5PmnZ/kuovku7YnLFxyXG4gICAgVGVybWluYXRlRW5kRXZlbnQ6ICfnu4jmraLkuovku7YnLFxyXG4gICAgTWVzc2FnZUVuZEV2ZW50OiAn5raI5oGv57uT5p2f5LqL5Lu2JyxcclxuICAgIFNpZ25hbEVuZEV2ZW50OiAn5L+h5Y+357uT5p2f5LqL5Lu2JyxcclxuICAgIEVycm9yRW5kRXZlbnQ6ICfplJnor6/nu5PmnZ/kuovku7YnLFxyXG4gICAgQ2FuY2VsRW5kRXZlbnQ6ICfnu5PmnZ/lj5bmtojkuovku7YnLFxyXG4gICAgQ29tcGVuc2F0ZUVuZEV2ZW50OiAn57uT5p2f6KGl5YG/5LqL5Lu2J1xyXG4gIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2ZlYXR1cmVzL2kxOG4vbGFuZ3VhZ2VzL3poX0NOLmpzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE5Q0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///68\n"); + +/***/ }), +/* 69 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +eval("/* harmony default export */ __webpack_exports__[\"a\"] = ({\n bpmn: {\n StartEvent: '開始事件',\n MessageStartEvent: '消息開始事件',\n TimerStartEvent: '時間開始事件',\n SignalStartEvent: '信號開始事件',\n UserTask: '人工任務',\n ServiceTask: '系統任務',\n ScriptTask: '腳本任務',\n ManualTask: '手工任務',\n BusinessRuleTask: '業務規則任務',\n SendTask: '發送任務',\n ReceiveTask: '接收任務',\n ParallelGateway: '並行網關',\n InclusiveGateway: '包容網關',\n ExclusiveGateway: '排他網關',\n EventBasedGateway: '事件網關',\n ComplexGateway: '復雜網關',\n IntermediateCatchEvent: '捕獲中間事件',\n TimerIntermediateCatchEvent: '捕獲時間事件',\n MessageIntermediateCatchEvent: '捕獲消息事件',\n SignalIntermediateCatchEvent: '捕獲信號事件',\n IntermediateThrowingEvent: '拋出中間事件',\n MessageIntermediateThrowingEvent: '拋出消息事件',\n SignalIntermediateThrowingEvent: '拋出信號事件',\n CompensateIntermediateThrowingEvent: '拋出補償事件',\n BoundaryEvent: '邊界事件',\n CancelBoundaryEvent: '邊界取消事件',\n CompensateBoundaryEvent: '邊界補償事件',\n ErrorBoundaryEvent: '邊界錯誤事件',\n MessageBoundaryEvent: '邊界消息事件',\n SignalBoundaryEvent: '邊界信號事件',\n TimerBoundaryEvent: '邊界時間事件',\n CallActivity: '調用子流程',\n SubProcess: '子流程',\n Transaction: '事務',\n TextAnnotation: '註釋',\n HorizontalPool: '泳池',\n HorizontalLane: '泳道',\n VerticalPool: '泳池',\n VerticalLane: '泳道',\n EndEvent: '結束事件',\n TerminateEndEvent: '終止事件',\n MessageEndEvent: '消息結束事件',\n SignalEndEvent: '信號結束事件',\n ErrorEndEvent: '錯誤結束事件',\n CancelEndEvent: '結束取消事件',\n CompensateEndEvent: '結束補償事件'\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiNjkuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vc3JjL2ZlYXR1cmVzL2kxOG4vbGFuZ3VhZ2VzL3poX1RXLmpzPzc0MmYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xyXG4gIGJwbW46IHtcclxuICAgIFN0YXJ0RXZlbnQ6ICfplovlp4vkuovku7YnLFxyXG4gICAgTWVzc2FnZVN0YXJ0RXZlbnQ6ICfmtojmga/plovlp4vkuovku7YnLFxyXG4gICAgVGltZXJTdGFydEV2ZW50OiAn5pmC6ZaT6ZaL5aeL5LqL5Lu2JyxcclxuICAgIFNpZ25hbFN0YXJ0RXZlbnQ6ICfkv6HomZ/plovlp4vkuovku7YnLFxyXG4gICAgVXNlclRhc2s6ICfkurrlt6Xku7vli5knLFxyXG4gICAgU2VydmljZVRhc2s6ICfns7vntbHku7vli5knLFxyXG4gICAgU2NyaXB0VGFzazogJ+iFs+acrOS7u+WLmScsXHJcbiAgICBNYW51YWxUYXNrOiAn5omL5bel5Lu75YuZJyxcclxuICAgIEJ1c2luZXNzUnVsZVRhc2s6ICfmpa3li5nopo/liYfku7vli5knLFxyXG4gICAgU2VuZFRhc2s6ICfnmbzpgIHku7vli5knLFxyXG4gICAgUmVjZWl2ZVRhc2s6ICfmjqXmlLbku7vli5knLFxyXG4gICAgUGFyYWxsZWxHYXRld2F5OiAn5Lim6KGM57ay6ZecJyxcclxuICAgIEluY2x1c2l2ZUdhdGV3YXk6ICfljIXlrrnntrLpl5wnLFxyXG4gICAgRXhjbHVzaXZlR2F0ZXdheTogJ+aOkuS7lue2sumXnCcsXHJcbiAgICBFdmVudEJhc2VkR2F0ZXdheTogJ+S6i+S7tue2sumXnCcsXHJcbiAgICBDb21wbGV4R2F0ZXdheTogJ+W+qembnOe2sumXnCcsXHJcbiAgICBJbnRlcm1lZGlhdGVDYXRjaEV2ZW50OiAn5o2V542y5Lit6ZaT5LqL5Lu2JyxcclxuICAgIFRpbWVySW50ZXJtZWRpYXRlQ2F0Y2hFdmVudDogJ+aNleeNsuaZgumWk+S6i+S7ticsXHJcbiAgICBNZXNzYWdlSW50ZXJtZWRpYXRlQ2F0Y2hFdmVudDogJ+aNleeNsua2iOaBr+S6i+S7ticsXHJcbiAgICBTaWduYWxJbnRlcm1lZGlhdGVDYXRjaEV2ZW50OiAn5o2V542y5L+h6Jmf5LqL5Lu2JyxcclxuICAgIEludGVybWVkaWF0ZVRocm93aW5nRXZlbnQ6ICfmi4vlh7rkuK3plpPkuovku7YnLFxyXG4gICAgTWVzc2FnZUludGVybWVkaWF0ZVRocm93aW5nRXZlbnQ6ICfmi4vlh7rmtojmga/kuovku7YnLFxyXG4gICAgU2lnbmFsSW50ZXJtZWRpYXRlVGhyb3dpbmdFdmVudDogJ+aLi+WHuuS/oeiZn+S6i+S7ticsXHJcbiAgICBDb21wZW5zYXRlSW50ZXJtZWRpYXRlVGhyb3dpbmdFdmVudDogJ+aLi+WHuuijnOWEn+S6i+S7ticsXHJcbiAgICBCb3VuZGFyeUV2ZW50OiAn6YKK55WM5LqL5Lu2JyxcclxuICAgIENhbmNlbEJvdW5kYXJ5RXZlbnQ6ICfpgornlYzlj5bmtojkuovku7YnLFxyXG4gICAgQ29tcGVuc2F0ZUJvdW5kYXJ5RXZlbnQ6ICfpgornlYzoo5zlhJ/kuovku7YnLFxyXG4gICAgRXJyb3JCb3VuZGFyeUV2ZW50OiAn6YKK55WM6Yyv6Kqk5LqL5Lu2JyxcclxuICAgIE1lc3NhZ2VCb3VuZGFyeUV2ZW50OiAn6YKK55WM5raI5oGv5LqL5Lu2JyxcclxuICAgIFNpZ25hbEJvdW5kYXJ5RXZlbnQ6ICfpgornlYzkv6HomZ/kuovku7YnLFxyXG4gICAgVGltZXJCb3VuZGFyeUV2ZW50OiAn6YKK55WM5pmC6ZaT5LqL5Lu2JyxcclxuICAgIENhbGxBY3Rpdml0eTogJ+iqv+eUqOWtkOa1geeoiycsXHJcbiAgICBTdWJQcm9jZXNzOiAn5a2Q5rWB56iLJyxcclxuICAgIFRyYW5zYWN0aW9uOiAn5LqL5YuZJyxcclxuICAgIFRleHRBbm5vdGF0aW9uOiAn6Ki76YeLJyxcclxuICAgIEhvcml6b250YWxQb29sOiAn5rOz5rGgJyxcclxuICAgIEhvcml6b250YWxMYW5lOiAn5rOz6YGTJyxcclxuICAgIFZlcnRpY2FsUG9vbDogJ+azs+axoCcsXHJcbiAgICBWZXJ0aWNhbExhbmU6ICfms7PpgZMnLFxyXG4gICAgRW5kRXZlbnQ6ICfntZDmnZ/kuovku7YnLFxyXG4gICAgVGVybWluYXRlRW5kRXZlbnQ6ICfntYLmraLkuovku7YnLFxyXG4gICAgTWVzc2FnZUVuZEV2ZW50OiAn5raI5oGv57WQ5p2f5LqL5Lu2JyxcclxuICAgIFNpZ25hbEVuZEV2ZW50OiAn5L+h6Jmf57WQ5p2f5LqL5Lu2JyxcclxuICAgIEVycm9yRW5kRXZlbnQ6ICfpjK/oqqTntZDmnZ/kuovku7YnLFxyXG4gICAgQ2FuY2VsRW5kRXZlbnQ6ICfntZDmnZ/lj5bmtojkuovku7YnLFxyXG4gICAgQ29tcGVuc2F0ZUVuZEV2ZW50OiAn57WQ5p2f6KOc5YSf5LqL5Lu2J1xyXG4gIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc3JjL2ZlYXR1cmVzL2kxOG4vbGFuZ3VhZ2VzL3poX1RXLmpzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUE5Q0E7QUFEQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///69\n"); + +/***/ }) +/******/ ]); +}); \ No newline at end of file diff --git a/src/draw/draw.js b/src/draw/draw.js index 9ed2859..291b1d1 100644 --- a/src/draw/draw.js +++ b/src/draw/draw.js @@ -105,9 +105,8 @@ class Draw extends Operation { if (plane.id === element.id + '_di') { const data = cloneDeep(element) if (element.extensionElements) { - data.extensionElements.values = setExportExtensions( + data.extensionElements.values = element.extensionElements.values || [] - ) } const type = getBpmnNameByType(element.$type) if (type !== 'SequenceFlow') {