From 1888cac37bac2a44000664aba29cdc072b69179d Mon Sep 17 00:00:00 2001 From: devowhippit Date: Tue, 21 Nov 2017 13:56:08 -0500 Subject: [PATCH] v0.0.3 adding browsersync and concurrent for start process that includes watching and reloading --- TODO.md | 3 + dist/charts.html | 2 +- dist/colors.html | 2 +- dist/components.html | 2 +- dist/index.html | 2 +- dist/scripts/nyco.dist.js | 4 +- dist/scripts/o-charts.js | 23219 ---------------- dist/team-site.html | 2 +- package-lock.json | 1193 +- package.json | 18 +- serve.js | 2 +- src/views/charts.slm | 2 +- src/views/colors.slm | 2 +- src/views/components.slm | 6 +- src/views/index.slm | 2 +- src/views/partials/head.mixin.slm | 10 +- ...{c-table-content.slm => table-content.slm} | 0 src/views/team-site.slm | 2 +- 18 files changed, 1176 insertions(+), 23297 deletions(-) delete mode 100644 dist/scripts/o-charts.js rename src/views/partials/{c-table-content.slm => table-content.slm} (100%) diff --git a/TODO.md b/TODO.md index 43ee0046..ee9342d2 100644 --- a/TODO.md +++ b/TODO.md @@ -1,3 +1,6 @@ +# Tests +- [ ] Investigate testing tool + # Organization - [x] bundle/.. The bundled style and script files diff --git a/dist/charts.html b/dist/charts.html index 81b9188f..9f9c4312 100644 --- a/dist/charts.html +++ b/dist/charts.html @@ -1,4 +1,4 @@ -Chart Object | NYC Opportunity Patterns

Chart Object

U.S. Official and NYCgov Poverty Rates 2005–2015

Employment/Population Ratios 2008, 2010–2015

Chart Object

U.S. Official and NYCgov Poverty Rates 2005–2015

Employment/Population Ratios 2008, 2010–2015

Colors

Utility Usage

Backrounds .bg-primary-blue

Color .c-primary-blue

Borders .b-primary-blue

Swatches

base-black
#333333
base-white
#FFFFFF
primary-navy
#2F334F
primary-navy-70t
#6E7085
primary-navy-50t
#9698A7
primary-navy-30t
#C0C2CA
primary-blue
#3155A6
primary-blue-70t
#6C88C1
primary-blue-50t
#96ABD2
primary-blue-30t
#C0CCE3
primary-red
#F2695D
primary-red-70t
#F6958D
primary-red-50t
#F8B2AD
primary-red-30t
#FBD1CE
secondary-grey
#ACAEB9
secondary-grey-70t
#C4C6CD
secondary-grey-50t
#D5D6DC
secondary-grey-30t
#E8E7E9
secondary-white
#F3F3F3
secondary-white-70t
#F6F6F6
secondary-white-50t
#F9F9FA
secondary-white-30t
#FBFCFC
secondary-orange
#F9A137
secondary-orange-70t
#FFA133
secondary-orange-50t
#FED09A
secondary-orange-30t
#FFE3C2
secondary-pink
#EBBCD8
secondary-pink-70t
#F2D0E3
secondary-pink-50t
#F7DDEB
secondary-pink-30t
#FDEBF3
\ No newline at end of file diff --git a/dist/components.html b/dist/components.html index d7442189..9cfc03fb 100644 --- a/dist/components.html +++ b/dist/components.html @@ -1 +1 @@ -CSS Components | NYC Opportunity Patterns

Components

Tables

src/scss/_c-tables.scss

Percentile20082010201120122013201420152008–20152014–2015
2013,73610,13110,42310,33311,06311,73412,870-6.3%9.7%
2520,60517,03416,61416,70117,45818,25219,024-7.7%4.2%
3028,05122,97222,54622,90423,55823,96325,325-9.7%5.7%
3535,13729,49228,50129,22629,87030,49431,497-10.4%3.3%
4042,21035,95034,18134,93435,94336,48738,305-9.3%5.0%
4549,37142,58641,53141,69343,23743,69445,661-7.5%4.5%
5056,60449,29748,43648,83850,62951,84253,758-5.0%3.7%
        
Average Percentage Change
-8.0%5.2%
Percentage Point Change
% Families with No Earnings21.222.422.322.221.922.021.40.2(0.7)

Small Table

Percentile20082010201120122013201420152008–20152014–2015
2013,73610,13110,42310,33311,06311,73412,870-6.3%9.7%
2520,60517,03416,61416,70117,45818,25219,024-7.7%4.2%
3028,05122,97222,54622,90423,55823,96325,325-9.7%5.7%
3535,13729,49228,50129,22629,87030,49431,497-10.4%3.3%
4042,21035,95034,18134,93435,94336,48738,305-9.3%5.0%
4549,37142,58641,53141,69343,23743,69445,661-7.5%4.5%
5056,60449,29748,43648,83850,62951,84253,758-5.0%3.7%
        
Average Percentage Change
-8.0%5.2%
Percentage Point Change
% Families with No Earnings21.222.422.322.221.922.021.40.2(0.7)

Asides

src/scss/_c-asides.scss

\ No newline at end of file +CSS Components | NYC Opportunity Patterns

Components

Tables

src/scss/_c-tables.scss

Percentile20082010201120122013201420152008–20152014–2015
2013,73610,13110,42310,33311,06311,73412,870-6.3%9.7%
2520,60517,03416,61416,70117,45818,25219,024-7.7%4.2%
3028,05122,97222,54622,90423,55823,96325,325-9.7%5.7%
3535,13729,49228,50129,22629,87030,49431,497-10.4%3.3%
4042,21035,95034,18134,93435,94336,48738,305-9.3%5.0%
4549,37142,58641,53141,69343,23743,69445,661-7.5%4.5%
5056,60449,29748,43648,83850,62951,84253,758-5.0%3.7%
        
Average Percentage Change
-8.0%5.2%
Percentage Point Change
% Families with No Earnings21.222.422.322.221.922.021.40.2(0.7)

Small Table

Percentile20082010201120122013201420152008–20152014–2015
2013,73610,13110,42310,33311,06311,73412,870-6.3%9.7%
2520,60517,03416,61416,70117,45818,25219,024-7.7%4.2%
3028,05122,97222,54622,90423,55823,96325,325-9.7%5.7%
3535,13729,49228,50129,22629,87030,49431,497-10.4%3.3%
4042,21035,95034,18134,93435,94336,48738,305-9.3%5.0%
4549,37142,58641,53141,69343,23743,69445,661-7.5%4.5%
5056,60449,29748,43648,83850,62951,84253,758-5.0%3.7%
        
Average Percentage Change
-8.0%5.2%
Percentage Point Change
% Families with No Earnings21.222.422.322.221.922.021.40.2(0.7)

Asides

src/scss/_c-asides.scss

\ No newline at end of file diff --git a/dist/index.html b/dist/index.html index e56bebb0..01ecd7c2 100644 --- a/dist/index.html +++ b/dist/index.html @@ -1 +1 @@ -NYC Opportunity Patterns

Agency patterns for the Mayor's Office for Economic Opportunity

\ No newline at end of file +NYC Opportunity Patterns

Agency patterns for the Mayor's Office for Economic Opportunity

\ No newline at end of file diff --git a/dist/scripts/nyco.dist.js b/dist/scripts/nyco.dist.js index b36dbc21..d9f8772b 100644 --- a/dist/scripts/nyco.dist.js +++ b/dist/scripts/nyco.dist.js @@ -1,2 +1,2 @@ -var nyco=function(){"use strict";function t(t){return function(n,e){return ti(t(n),e)}}function n(t,n,e){var r=(n-t)/Math.max(0,e),i=Math.floor(Math.log(r)/Math.LN10),o=r/Math.pow(10,i);return i>=0?(o>=ri?10:o>=ii?5:o>=oi?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=ri?10:o>=ii?5:o>=oi?2:1)}function e(t,n,e){var r=Math.abs(n-t)/Math.max(0,e),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=ri?i*=10:o>=ii?i*=5:o>=oi&&(i*=2),n=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})}function p(t,n){for(var e,r=0,i=t.length;r=0&&(n=t.slice(e+1),t=t.slice(0,e)),{type:t,name:n}})}function w(t){return function(){var n=this.__on;if(n){for(var e,r=0,i=-1,o=n.length;rn?1:t>=n?0:NaN}function C(t){return function(){this.removeAttribute(t)}}function S(t){return function(){this.removeAttributeNS(t.space,t.local)}}function D(t,n){return function(){this.setAttribute(t,n)}}function E(t,n){return function(){this.setAttributeNS(t.space,t.local,n)}}function U(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttribute(t):this.setAttribute(t,e)}}function P(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,e)}}function F(t){return function(){this.style.removeProperty(t)}}function H(t,n,e){return function(){this.style.setProperty(t,n,e)}}function L(t,n,e){return function(){var r=n.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,e)}}function Y(t,n){return t.style.getPropertyValue(n)||Vi(t).getComputedStyle(t,null).getPropertyValue(n)}function O(t){return function(){delete this[t]}}function j(t,n){return function(){this[t]=n}}function z(t,n){return function(){var e=n.apply(this,arguments);null==e?delete this[t]:this[t]=e}}function I(t){return t.trim().split(/^|\s+/)}function q(t){return t.classList||new $(t)}function $(t){this._node=t,this._names=I(t.getAttribute("class")||"")}function X(t,n){for(var e=q(t),r=-1,i=n.length;++r>8&15|n>>4&240,n>>4&15|240&n,(15&n)<<4|15&n,1)):(n=_o.exec(t))?pt(parseInt(n[1],16)):(n=vo.exec(t))?new vt(n[1],n[2],n[3],1):(n=yo.exec(t))?new vt(255*n[1]/100,255*n[2]/100,255*n[3]/100,1):(n=mo.exec(t))?dt(n[1],n[2],n[3],n[4]):(n=wo.exec(t))?dt(255*n[1]/100,255*n[2]/100,255*n[3]/100,n[4]):(n=xo.exec(t))?yt(n[1],n[2]/100,n[3]/100,1):(n=bo.exec(t))?yt(n[1],n[2]/100,n[3]/100,n[4]):Mo.hasOwnProperty(t)?pt(Mo[t]):"transparent"===t?new vt(NaN,NaN,NaN,0):null}function pt(t){return new vt(t>>16&255,t>>8&255,255&t,1)}function dt(t,n,e,r){return r<=0&&(t=n=e=NaN),new vt(t,n,e,r)}function gt(t){return t instanceof ht||(t=ft(t)),t?(t=t.rgb(),new vt(t.r,t.g,t.b,t.opacity)):new vt}function _t(t,n,e,r){return 1===arguments.length?gt(t):new vt(t,n,e,null==r?1:r)}function vt(t,n,e,r){this.r=+t,this.g=+n,this.b=+e,this.opacity=+r}function yt(t,n,e,r){return r<=0?t=n=e=NaN:e<=0||e>=1?t=n=NaN:n<=0&&(t=NaN),new xt(t,n,e,r)}function mt(t){if(t instanceof xt)return new xt(t.h,t.s,t.l,t.opacity);if(t instanceof ht||(t=ft(t)),!t)return new xt;if(t instanceof xt)return t;var n=(t=t.rgb()).r/255,e=t.g/255,r=t.b/255,i=Math.min(n,e,r),o=Math.max(n,e,r),a=NaN,u=o-i,s=(o+i)/2;return u?(a=n===o?(e-r)/u+6*(e0&&s<1?0:a,new xt(a,u,s,t.opacity)}function wt(t,n,e,r){return 1===arguments.length?mt(t):new xt(t,n,e,null==r?1:r)}function xt(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function bt(t,n,e){return 255*(t<60?n+(e-n)*t/60:t<180?e:t<240?n+(e-n)*(240-t)/60:n)}function Mt(t){if(t instanceof kt)return new kt(t.l,t.a,t.b,t.opacity);if(t instanceof Ut){var n=t.h*Ao;return new kt(t.l,Math.cos(n)*t.c,Math.sin(n)*t.c,t.opacity)}t instanceof vt||(t=gt(t));var e=St(t.r),r=St(t.g),i=St(t.b),o=Nt((.4124564*e+.3575761*r+.1804375*i)/No),a=Nt((.2126729*e+.7151522*r+.072175*i)/To);return new kt(116*a-16,500*(o-a),200*(a-Nt((.0193339*e+.119192*r+.9503041*i)/Co)),t.opacity)}function At(t,n,e,r){return 1===arguments.length?Mt(t):new kt(t,n,e,null==r?1:r)}function kt(t,n,e,r){this.l=+t,this.a=+n,this.b=+e,this.opacity=+r}function Nt(t){return t>Uo?Math.pow(t,1/3):t/Eo+So}function Tt(t){return t>Do?t*t*t:Eo*(t-So)}function Ct(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function St(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Dt(t){if(t instanceof Ut)return new Ut(t.h,t.c,t.l,t.opacity);t instanceof kt||(t=Mt(t));var n=Math.atan2(t.b,t.a)*ko;return new Ut(n<0?n+360:n,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function Et(t,n,e,r){return 1===arguments.length?Dt(t):new Ut(t,n,e,null==r?1:r)}function Ut(t,n,e,r){this.h=+t,this.c=+n,this.l=+e,this.opacity=+r}function Pt(t){if(t instanceof Ht)return new Ht(t.h,t.s,t.l,t.opacity);t instanceof vt||(t=gt(t));var n=t.r/255,e=t.g/255,r=t.b/255,i=(zo*r+Oo*n-jo*e)/(zo+Oo-jo),o=r-i,a=(Yo*(e-i)-Ho*o)/Lo,u=Math.sqrt(a*a+o*o)/(Yo*i*(1-i)),s=u?Math.atan2(a,o)*ko-120:NaN;return new Ht(s<0?s+360:s,u,i,t.opacity)}function Ft(t,n,e,r){return 1===arguments.length?Pt(t):new Ht(t,n,e,null==r?1:r)}function Ht(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function Lt(t,n){return function(e){return t+e*n}}function Yt(t,n,e){return t=Math.pow(t,e),n=Math.pow(n,e)-t,e=1/e,function(r){return Math.pow(t+r*n,e)}}function Ot(t,n){var e=n-t;return e?Lt(t,e>180||e<-180?e-360*Math.round(e/360):e):Bo(isNaN(t)?n:t)}function jt(t){return 1==(t=+t)?zt:function(n,e){return e-n?Yt(n,e,t):Bo(isNaN(n)?e:n)}}function zt(t,n){var e=n-t;return e?Lt(t,e):Bo(isNaN(t)?n:t)}function It(t){return function(){return t}}function qt(t){return function(n){return t(n)+""}}function $t(t){return"none"===t?ra:(Io||(Io=document.createElement("DIV"),qo=document.documentElement,$o=document.defaultView),Io.style.transform=t,t=$o.getComputedStyle(qo.appendChild(Io),null).getPropertyValue("transform"),qo.removeChild(Io),t=t.slice(7,-1).split(","),ia(+t[0],+t[1],+t[2],+t[3],+t[4],+t[5]))}function Xt(t){return null==t?ra:(Xo||(Xo=document.createElementNS("http://www.w3.org/2000/svg","g")),Xo.setAttribute("transform",t),(t=Xo.transform.baseVal.consolidate())?(t=t.matrix,ia(t.a,t.b,t.c,t.d,t.e,t.f)):ra)}function Bt(t,n,e,r){function i(t){return t.length?t.pop()+" ":""}function o(t,r,i,o,a,u){if(t!==i||r!==o){var s=a.push("translate(",null,n,null,e);u.push({i:s-4,x:Vo(t,i)},{i:s-2,x:Vo(r,o)})}else(i||o)&&a.push("translate("+i+n+o+e)}function a(t,n,e,o){t!==n?(t-n>180?n+=360:n-t>180&&(t+=360),o.push({i:e.push(i(e)+"rotate(",null,r)-2,x:Vo(t,n)})):n&&e.push(i(e)+"rotate("+n+r)}function u(t,n,e,o){t!==n?o.push({i:e.push(i(e)+"skewX(",null,r)-2,x:Vo(t,n)}):n&&e.push(i(e)+"skewX("+n+r)}function s(t,n,e,r,o,a){if(t!==e||n!==r){var u=o.push(i(o)+"scale(",null,",",null,")");a.push({i:u-4,x:Vo(t,e)},{i:u-2,x:Vo(n,r)})}else 1===e&&1===r||o.push(i(o)+"scale("+e+","+r+")")}return function(n,e){var r=[],i=[];return n=t(n),e=t(e),o(n.translateX,n.translateY,e.translateX,e.translateY,r,i),a(n.rotate,e.rotate,r,i),u(n.skewX,e.skewX,r,i),s(n.scaleX,n.scaleY,e.scaleX,e.scaleY,r,i),n=e=null,function(t){for(var n,e=-1,o=i.length;++e=0&&n._call.call(null,t),n=n._next;--la}function Qt(){ga=(da=va.now())+_a,la=ha=0;try{Jt()}finally{la=0,tn(),ga=0}}function Kt(){var t=va.now(),n=t-da;n>pa&&(_a-=n,da=t)}function tn(){for(var t,n,e=ua,r=1/0;e;)e._call?(r>e._time&&(r=e._time),t=e,e=e._next):(n=e._next,e._next=null,e=t?t._next=n:ua=n);sa=t,nn(r)}function nn(t){if(!la){ha&&(ha=clearTimeout(ha));var n=t-ga;n>24?(t<1/0&&(ha=setTimeout(Qt,n)),fa&&(fa=clearInterval(fa))):(fa||(da=ga,fa=setInterval(Kt,pa)),la=1,ya(Qt))}}function en(t,n){var e=t.__transition;if(!e||!(e=e[n])||e.state>ba)throw new Error("too late");return e}function rn(t,n){var e=t.__transition;if(!e||!(e=e[n])||e.state>Aa)throw new Error("too late");return e}function on(t,n){var e=t.__transition;if(!e||!(e=e[n]))throw new Error("too late");return e}function an(t,n,e){function r(t){e.state=Ma,e.timer.restart(i,e.delay,e.time),e.delay<=t&&i(t-e.delay)}function i(r){var c,l,h,f;if(e.state!==Ma)return a();for(c in s)if((f=s[c]).name===e.name){if(f.state===ka)return ma(i);f.state===Na?(f.state=Ca,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete s[c]):+c=0&&(t=t.slice(0,n)),!t||"start"===t})}function An(t,n,e){var r,i,o=Mn(n)?en:rn;return function(){var a=o(this,t),u=a.on;u!==r&&(i=(r=u).copy()).on(n,e),a.on=i}}function kn(t){return function(){var n=this.parentNode;for(var e in this.__transition)if(+e!==t)return;n&&n.removeChild(this)}}function Nn(t,n){var e,r,i;return function(){var o=Y(this,t),a=(this.style.removeProperty(t),Y(this,t));return o===a?null:o===e&&a===r?i:i=n(e=o,r=a)}}function Tn(t){return function(){this.style.removeProperty(t)}}function Cn(t,n,e){var r,i;return function(){var o=Y(this,t);return o===e?null:o===r?i:i=n(r=o,e)}}function Sn(t,n,e){var r,i,o;return function(){var a=Y(this,t),u=e(this);return null==u&&(this.style.removeProperty(t),u=Y(this,t)),a===u?null:a===r&&u===i?o:o=n(r=a,i=u)}}function Dn(t,n,e){function r(){var r=this,i=n.apply(r,arguments);return i&&function(n){r.style.setProperty(t,i(n),e)}}return r._value=n,r}function En(t){return function(){this.textContent=t}}function Un(t){return function(){var n=t(this);this.textContent=null==n?"":n}}function Pn(t,n,e,r){this._groups=t,this._parents=n,this._name=e,this._id=r}function Fn(t){return ct().transition(t)}function Hn(){return++Ja}function Ln(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}function Yn(t,n){for(var e;!(e=t.__transition)||!(e=e[n]);)if(!(t=t.parentNode))return tu.time=Wt(),tu;return e}function On(t){return{type:t}}function jn(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function zn(){return new jn}function In(){}function qn(t,n){var e=new In;if(t instanceof In)t.each(function(t,n){e.set(n,t)});else if(Array.isArray(t)){var r,i=-1,o=t.length;if(null==n)for(;++i=(o=(g+v)/2))?g=o:v=o,(l=e>=(a=(_+y)/2))?_=a:y=a,i=p,!(p=p[h=l<<1|c]))return i[h]=d,t;if(u=+t._x.call(null,p.data),s=+t._y.call(null,p.data),n===u&&e===s)return d.next=p,i?i[h]=d:t._root=d,t;do{i=i?i[h]=new Array(4):t._root=new Array(4),(c=n>=(o=(g+v)/2))?g=o:v=o,(l=e>=(a=(_+y)/2))?_=a:y=a}while((h=l<<1|c)==(f=(s>=a)<<1|u>=o));return i[f]=p,i[h]=d,t}function Vn(t){var n,e,r,i,o=t.length,a=new Array(o),u=new Array(o),s=1/0,c=1/0,l=-1/0,h=-1/0;for(e=0;el&&(l=r),ih&&(h=i));for(l",i=n[3]||"-",o=n[4]||"",a=!!n[5],u=n[6]&&+n[6],s=!!n[7],c=n[8]&&+n[8].slice(1),l=n[9]||"";"n"===l?(s=!0,l="g"):Tu[l]||(l=""),(a||"0"===e&&"="===r)&&(a=!0,e="0",r="="),this.fill=e,this.align=r,this.sign=i,this.symbol=o,this.zero=a,this.width=u,this.comma=s,this.precision=c,this.type=l}function ie(){this.reset()}function oe(t,n,e){var r=t.s=n+e,i=r-n,o=r-i;t.t=n-o+(e-i)}function ae(t){return t>1?0:t<-1?zu:Math.acos(t)}function ue(t){return t>1?Iu:t<-1?-Iu:Math.asin(t)}function se(t){return function(n,e){var r=Xu(n),i=Xu(e),o=t(r*i);return[o*i*Bu(n),o*Bu(e)]}}function ce(t){return function(n,e){var r=Ru(n*n+e*e),i=t(r),o=Bu(i),a=Xu(i);return[$u(n*o,r*a),ue(r&&e*o/r)]}}function le(t){var n=0,e=t.children,r=e&&e.length;if(r)for(;--r>=0;)n+=e[r].value;else n=1;t.value=n}function he(t,n){if(t===n)return t;var e=t.ancestors(),r=n.ancestors(),i=null;for(t=e.pop(),n=r.pop();t===n;)i=t,t=e.pop(),n=r.pop();return i}function fe(t,n){var e,r,i,o,a,u=new ve(t),s=+t.value&&(u.value=t.value),c=[u];for(null==n&&(n=de);e=c.pop();)if(s&&(e.value=+e.data.value),(i=n(e.data))&&(a=i.length))for(e.children=new Array(a),o=a-1;o>=0;--o)c.push(r=e.children[o]=new ve(i[o])),r.parent=e,r.depth=e.depth+1;return u.eachBefore(_e)}function pe(){return fe(this).eachBefore(ge)}function de(t){return t.children}function ge(t){t.data=t.data.data}function _e(t){var n=0;do{t.height=n}while((t=t.parent)&&t.height<++n)}function ve(t){this.data=t,this.depth=this.height=0,this.parent=null}function ye(t,n){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=n}function me(t){if(!t._start)try{we(t)}catch(n){if(t._tasks[t._ended+t._active-1])be(t,n);else if(!t._data)throw n}}function we(t){for(;t._start=t._waiting&&t._active=0;)if((e=t._tasks[r])&&(t._tasks[r]=null,e.abort))try{e.abort()}catch(n){}t._active=NaN,Me(t)}function Me(t){if(!t._active&&t._call){var n=t._data;t._data=void 0,t._call(t._error,n)}}function Ae(t,n){return(n-=t=+t)?function(e){return(e-t)/n}:ss(n)}function ke(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=n?0:t>=e?1:r(t)}}}function Ne(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=0?n:t>=1?e:r(t)}}}function Te(t,n,e,r){var i=t[0],o=t[1],a=n[0],u=n[1];return o2?Ce:Te,o=a=null,r}function r(n){return(o||(o=i(u,s,l?ke(t):t,c)))(+n)}var i,o,a,u=ls,s=ls,c=ta,l=!1;return r.invert=function(t){return(a||(a=i(s,u,Ae,l?Ne(n):n)))(+t)},r.domain=function(t){return arguments.length?(u=as.call(t,cs),e()):u.slice()},r.range=function(t){return arguments.length?(s=us.call(t),e()):s.slice()},r.rangeRound=function(t){return s=us.call(t),c=na,e()},r.clamp=function(t){return arguments.length?(l=!!t,e()):l},r.interpolate=function(t){return arguments.length?(c=t,e()):c},e()}function Ee(t){var e=t.domain;return t.ticks=function(t){var n=e();return ai(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){return hs(e(),t,n)},t.nice=function(r){null==r&&(r=10);var i,o=e(),a=0,u=o.length-1,s=o[a],c=o[u];return c0?i=n(s=Math.floor(s/i)*i,c=Math.ceil(c/i)*i,r):i<0&&(i=n(s=Math.ceil(s*i)/i,c=Math.floor(c*i)/i,r)),i>0?(o[a]=Math.floor(s/i)*i,o[u]=Math.ceil(c/i)*i,e(o)):i<0&&(o[a]=Math.ceil(s*i)/i,o[u]=Math.floor(c*i)/i,e(o)),t},t}function Ue(){var t=De(Ae,Vo);return t.copy=function(){return Se(t,Ue())},Ee(t)}function Pe(t,n,e,r){function i(n){return t(n=new Date(+n)),n}return i.floor=i,i.ceil=function(e){return t(e=new Date(e-1)),n(e,1),t(e),e},i.round=function(t){var n=i(t),e=i.ceil(t);return t-n0))return a;do{a.push(new Date(+e))}while(n(e,o),t(e),e=n)for(;t(n),!e(n);)n.setTime(n-1)},function(t,r){if(t>=t)for(;--r>=0;)for(;n(t,1),!e(t););})},e&&(i.count=function(n,r){return ps.setTime(+n),ds.setTime(+r),t(ps),t(ds),Math.floor(e(ps,ds))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(n){return r(n)%t==0}:function(n){return i.count(0,n)%t==0}):i:null}),i}function Fe(t){return Pe(function(n){n.setDate(n.getDate()-(n.getDay()+7-t)%7),n.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+7*n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*_s)/vs})}function He(t){return Pe(function(n){n.setUTCDate(n.getUTCDate()-(n.getUTCDay()+7-t)%7),n.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+7*n)},function(t,n){return(n-t)/vs})}function Le(t){if(0<=t.y&&t.y<100){var n=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return n.setFullYear(t.y),n}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Ye(t){if(0<=t.y&&t.y<100){var n=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return n.setUTCFullYear(t.y),n}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Oe(t){return{y:t,m:0,d:1,H:0,M:0,S:0,L:0}}function je(t){function n(t,n){return function(e){var r,i,o,a=[],u=-1,s=0,c=t.length;for(e instanceof Date||(e=new Date(+e));++u=s)return-1;if(37===(i=n.charCodeAt(a++))){if(i=n.charAt(a++),!(o=q[i in Hs?n.charAt(a++):i])||(r=o(t,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function i(t,n,e){var r=D.exec(n.slice(e));return r?(t.p=E[r[0].toLowerCase()],e+r[0].length):-1}function o(t,n,e){var r=F.exec(n.slice(e));return r?(t.w=H[r[0].toLowerCase()],e+r[0].length):-1}function a(t,n,e){var r=U.exec(n.slice(e));return r?(t.w=P[r[0].toLowerCase()],e+r[0].length):-1}function u(t,n,e){var r=O.exec(n.slice(e));return r?(t.m=j[r[0].toLowerCase()],e+r[0].length):-1}function s(t,n,e){var r=L.exec(n.slice(e));return r?(t.m=Y[r[0].toLowerCase()],e+r[0].length):-1}function c(t,n,e){return r(t,b,n,e)}function l(t,n,e){return r(t,M,n,e)}function h(t,n,e){return r(t,A,n,e)}function f(t){return T[t.getDay()]}function p(t){return N[t.getDay()]}function d(t){return S[t.getMonth()]}function g(t){return C[t.getMonth()]}function _(t){return k[+(t.getHours()>=12)]}function v(t){return T[t.getUTCDay()]}function y(t){return N[t.getUTCDay()]}function m(t){return S[t.getUTCMonth()]}function w(t){return C[t.getUTCMonth()]}function x(t){return k[+(t.getUTCHours()>=12)]}var b=t.dateTime,M=t.date,A=t.time,k=t.periods,N=t.days,T=t.shortDays,C=t.months,S=t.shortMonths,D=qe(k),E=$e(k),U=qe(N),P=$e(N),F=qe(T),H=$e(T),L=qe(C),Y=$e(C),O=qe(S),j=$e(S),z={a:f,A:p,b:d,B:g,c:null,d:ir,e:ir,H:or,I:ar,j:ur,L:sr,m:cr,M:lr,p:_,S:hr,U:fr,w:pr,W:dr,x:null,X:null,y:gr,Y:_r,Z:vr,"%":Ur},I={a:v,A:y,b:m,B:w,c:null,d:yr,e:yr,H:mr,I:wr,j:xr,L:br,m:Mr,M:Ar,p:x,S:kr,U:Nr,w:Tr,W:Cr,x:null,X:null,y:Sr,Y:Dr,Z:Er,"%":Ur},q={a:o,A:a,b:u,B:s,c:c,d:Je,e:Je,H:Ke,I:Ke,j:Qe,L:er,m:Ge,M:tr,p:i,S:nr,U:Be,w:Xe,W:Re,x:l,X:h,y:Ze,Y:We,Z:Ve,"%":rr};return z.x=n(M,z),z.X=n(A,z),z.c=n(b,z),I.x=n(M,I),I.X=n(A,I),I.c=n(b,I),{format:function(t){var e=n(t+="",z);return e.toString=function(){return t},e},parse:function(t){var n=e(t+="",Le);return n.toString=function(){return t},n},utcFormat:function(t){var e=n(t+="",I);return e.toString=function(){return t},e},utcParse:function(t){var n=e(t,Ye);return n.toString=function(){return t},n}}}function ze(t,n,e){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o68?1900:2e3),e+r[0].length):-1}function Ve(t,n,e){var r=/^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(n.slice(e,e+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),e+r[0].length):-1}function Ge(t,n,e){var r=Ls.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function Je(t,n,e){var r=Ls.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function Qe(t,n,e){var r=Ls.exec(n.slice(e,e+3));return r?(t.m=0,t.d=+r[0],e+r[0].length):-1}function Ke(t,n,e){var r=Ls.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function tr(t,n,e){var r=Ls.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function nr(t,n,e){var r=Ls.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function er(t,n,e){var r=Ls.exec(n.slice(e,e+3));return r?(t.L=+r[0],e+r[0].length):-1}function rr(t,n,e){var r=Ys.exec(n.slice(e,e+1));return r?e+r[0].length:-1}function ir(t,n){return ze(t.getDate(),n,2)}function or(t,n){return ze(t.getHours(),n,2)}function ar(t,n){return ze(t.getHours()%12||12,n,2)}function ur(t,n){return ze(1+xs.count(ks(t),t),n,3)}function sr(t,n){return ze(t.getMilliseconds(),n,3)}function cr(t,n){return ze(t.getMonth()+1,n,2)}function lr(t,n){return ze(t.getMinutes(),n,2)}function hr(t,n){return ze(t.getSeconds(),n,2)}function fr(t,n){return ze(bs.count(ks(t),t),n,2)}function pr(t){return t.getDay()}function dr(t,n){return ze(Ms.count(ks(t),t),n,2)}function gr(t,n){return ze(t.getFullYear()%100,n,2)}function _r(t,n){return ze(t.getFullYear()%1e4,n,4)}function vr(t){var n=t.getTimezoneOffset();return(n>0?"-":(n*=-1,"+"))+ze(n/60|0,"0",2)+ze(n%60,"0",2)}function yr(t,n){return ze(t.getUTCDate(),n,2)}function mr(t,n){return ze(t.getUTCHours(),n,2)}function wr(t,n){return ze(t.getUTCHours()%12||12,n,2)}function xr(t,n){return ze(1+Ns.count(Ss(t),t),n,3)}function br(t,n){return ze(t.getUTCMilliseconds(),n,3)}function Mr(t,n){return ze(t.getUTCMonth()+1,n,2)}function Ar(t,n){return ze(t.getUTCMinutes(),n,2)}function kr(t,n){return ze(t.getUTCSeconds(),n,2)}function Nr(t,n){return ze(Ts.count(Ss(t),t),n,2)}function Tr(t){return t.getUTCDay()}function Cr(t,n){return ze(Cs.count(Ss(t),t),n,2)}function Sr(t,n){return ze(t.getUTCFullYear()%100,n,2)}function Dr(t,n){return ze(t.getUTCFullYear()%1e4,n,4)}function Er(){return"+0000"}function Ur(){return"%"}function Pr(t){return t.toISOString()}function Fr(t){var n=new Date(t);return isNaN(n)?null:n}function Hr(t){return new Date(t)}function Lr(t){return t instanceof Date?+t:+new Date(+t)}function Yr(t,n,r,i,o,a,u,s,c){function l(e){return(u(e)n?1:t>=n?0:NaN},ni=function(n){return 1===n.length&&(n=t(n)),{left:function(t,e,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;n(t[o],e)<0?r=o+1:i=o}return r},right:function(t,e,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;n(t[o],e)>0?i=o:r=o+1}return r}}},ei=ni(ti).right,ri=Math.sqrt(50),ii=Math.sqrt(10),oi=Math.sqrt(2),ai=function(t,e,r){var i,o,a,u=e0)for(t=Math.ceil(t/a),e=Math.floor(e/a),o=new Array(i=Math.ceil(e-t+1));++s=e)for(r=e;++or&&(r=e)}else for(;++o=e)for(r=e;++or&&(r=e);return r},si=function(t,n){var e,r,i=t.length,o=-1;if(null==n){for(;++o=e)for(r=e;++oe&&(r=e)}else for(;++o=e)for(r=e;++oe&&(r=e);return r},ci=Array.prototype.slice,li=function(t){return t},hi=1,fi=2,pi=3,di=4,gi=1e-6,_i={value:function(){}};h.prototype=l.prototype={constructor:h,on:function(t,n){var e,r=this._,i=f(t+"",r),o=-1,a=i.length;{if(!(arguments.length<2)){if(null!=n&&"function"!=typeof n)throw new Error("invalid callback: "+n);for(;++o0)for(var e,r,i=new Array(e),o=0;o=0&&"xmlns"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),yi.hasOwnProperty(n)?{space:yi[n],local:t}:t},wi=function(t){var n=mi(t);return(n.local?_:g)(n)},xi=function(t){return function(){return this.matches(t)}};if("undefined"!=typeof document){var bi=document.documentElement;if(!bi.matches){var Mi=bi.webkitMatchesSelector||bi.msMatchesSelector||bi.mozMatchesSelector||bi.oMatchesSelector;xi=function(t){return function(){return Mi.call(this,t)}}}}var Ai=xi,ki={},Ni=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(ki={mouseenter:"mouseover",mouseleave:"mouseout"}));var Ti=function(t,n,e){var r,i,o=m(t+""),a=o.length;{if(!(arguments.length<2)){for(u=n?x:w,null==e&&(e=!1),r=0;r=w&&(w=m+1);!(y=_[w])&&++w=0;)(r=i[o])&&(a&&a!==r.nextSibling&&a.parentNode.insertBefore(r,a),a=r);return this},Ii=function(t){function n(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}t||(t=T);for(var e=this._groups,r=e.length,i=new Array(r),o=0;o1?this.each((null==n?F:"function"==typeof n?L:H)(t,n,null==e?"":e)):Y(this.node(),t)},Ji=function(t,n){return arguments.length>1?this.each((null==n?O:"function"==typeof n?z:j)(t,n)):this.node()[t]};$.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var n=this._names.indexOf(t);n>=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Qi=function(t,n){var e=I(t+"");if(arguments.length<2){for(var r=q(this.node()),i=-1,o=e.length;++i=240?t-240:t+120,i,r),bt(t,i,r),bt(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var Ao=Math.PI/180,ko=180/Math.PI,No=.95047,To=1,Co=1.08883,So=4/29,Do=6/29,Eo=3*Do*Do,Uo=Do*Do*Do;lo(kt,At,lt(ht,{brighter:function(t){return new kt(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new kt(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,n=isNaN(this.a)?t:t+this.a/500,e=isNaN(this.b)?t:t-this.b/200;return t=To*Tt(t),n=No*Tt(n),e=Co*Tt(e),new vt(Ct(3.2404542*n-1.5371385*t-.4985314*e),Ct(-.969266*n+1.8760108*t+.041556*e),Ct(.0556434*n-.2040259*t+1.0572252*e),this.opacity)}})),lo(Ut,Et,lt(ht,{brighter:function(t){return new Ut(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new Ut(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return Mt(this).rgb()}}));var Po=-.14861,Fo=1.78277,Ho=-.29227,Lo=-.90649,Yo=1.97294,Oo=Yo*Lo,jo=Yo*Fo,zo=Fo*Ho-Lo*Po;lo(Ht,Ft,lt(ht,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Ht(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Ht(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*Ao,n=+this.l,e=isNaN(this.s)?0:this.s*n*(1-n),r=Math.cos(t),i=Math.sin(t);return new vt(255*(n+e*(Po*r+Fo*i)),255*(n+e*(Ho*r+Lo*i)),255*(n+e*(Yo*r)),this.opacity)}}));var Io,qo,$o,Xo,Bo=function(t){return function(){return t}},Ro=function t(n){function e(t,n){var e=r((t=_t(t)).r,(n=_t(n)).r),i=r(t.g,n.g),o=r(t.b,n.b),a=zt(t.opacity,n.opacity);return function(n){return t.r=e(n),t.g=i(n),t.b=o(n),t.opacity=a(n),t+""}}var r=jt(n);return e.gamma=t,e}(1),Wo=function(t,n){var e,r=n?n.length:0,i=t?Math.min(r,t.length):0,o=new Array(r),a=new Array(r);for(e=0;eo&&(i=n.slice(o,i),u[a]?u[a]+=i:u[++a]=i),(e=e[0])===(r=r[0])?u[a]?u[a]+=r:u[++a]=r:(u[++a]=null,s.push({i:a,x:Vo(e,r)})),o=Qo.lastIndex;return oAa&&e.state1e-6)if(Math.abs(l*u-s*c)>1e-6&&i){var f=e-o,p=r-a,d=u*u+s*s,g=f*f+p*p,_=Math.sqrt(d),v=Math.sqrt(h),y=i*Math.tan((eu-Math.acos((d+h-g)/(2*_*v)))/2),m=y/v,w=y/_;Math.abs(m-1)>1e-6&&(this._+="L"+(t+m*c)+","+(n+m*l)),this._+="A"+i+","+i+",0,0,"+ +(l*f>c*p)+","+(this._x1=t+w*u)+","+(this._y1=n+w*s)}else this._+="L"+(this._x1=t)+","+(this._y1=n);else;},arc:function(t,n,e,r,i,o){t=+t,n=+n;var a=(e=+e)*Math.cos(r),u=e*Math.sin(r),s=t+a,c=n+u,l=1^o,h=o?r-i:i-r;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+s+","+c:(Math.abs(this._x1-s)>1e-6||Math.abs(this._y1-c)>1e-6)&&(this._+="L"+s+","+c),e&&(h<0&&(h=h%ru+ru),h>iu?this._+="A"+e+","+e+",0,1,"+l+","+(t-a)+","+(n-u)+"A"+e+","+e+",0,1,"+l+","+(this._x1=s)+","+(this._y1=c):h>1e-6&&(this._+="A"+e+","+e+",0,"+ +(h>=eu)+","+l+","+(this._x1=t+e*Math.cos(i))+","+(this._y1=n+e*Math.sin(i))))},rect:function(t,n,e,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +e+"v"+ +r+"h"+-e+"Z"},toString:function(){return this._}};In.prototype=qn.prototype={constructor:In,has:function(t){return"$"+t in this},get:function(t){return this["$"+t]},set:function(t,n){return this["$"+t]=n,this},remove:function(t){var n="$"+t;return n in this&&delete this[n]},clear:function(){for(var t in this)"$"===t[0]&&delete this[t]},keys:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(n.slice(1));return t},values:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(this[n]);return t},entries:function(){var t=[];for(var n in this)"$"===n[0]&&t.push({key:n.slice(1),value:this[n]});return t},size:function(){var t=0;for(var n in this)"$"===n[0]&&++t;return t},empty:function(){for(var t in this)if("$"===t[0])return!1;return!0},each:function(t){for(var n in this)"$"===n[0]&&t(this[n],n.slice(1),this)}};var ou=qn.prototype;$n.prototype=Xn.prototype={constructor:$n,has:ou.has,add:function(t){return t+="",this["$"+t]=t,this},remove:ou.remove,clear:ou.clear,values:ou.keys,size:ou.size,empty:ou.empty,each:ou.each};var au=function(t){function n(t,n){var r,i,o=e(t,function(t,e){if(r)return r(t,e-1);i=t,r=n?Rn(t,n):Bn(t)});return o.columns=i,o}function e(t,n){function e(){if(l>=c)return a;if(i)return i=!1,o;var n,e=l;if(34===t.charCodeAt(e)){for(var r=e;r++t||t>i||r>n||n>o))return this;var a,u,s=i-e,c=this._root;switch(u=(n<(r+o)/2)<<1|t<(e+i)/2){case 0:do{a=new Array(4),a[u]=c,c=a}while(s*=2,i=e+s,o=r+s,t>i||n>o);break;case 1:do{a=new Array(4),a[u]=c,c=a}while(s*=2,e=i-s,o=r+s,e>t||n>o);break;case 2:do{a=new Array(4),a[u]=c,c=a}while(s*=2,i=e+s,r=o-s,t>i||r>n);break;case 3:do{a=new Array(4),a[u]=c,c=a}while(s*=2,e=i-s,r=o-s,e>t||r>n)}this._root&&this._root.length&&(this._root=c)}return this._x0=e,this._y0=r,this._x1=i,this._y1=o,this},cu=function(){var t=[];return this.visit(function(n){if(!n.length)do{t.push(n.data)}while(n=n.next)}),t},lu=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},hu=function(t,n,e,r,i){this.node=t,this.x0=n,this.y0=e,this.x1=r,this.y1=i},fu=function(t,n,e){var r,i,o,a,u,s,c,l=this._x0,h=this._y0,f=this._x1,p=this._y1,d=[],g=this._root;for(g&&d.push(new hu(g,l,h,f,p)),null==e?e=1/0:(l=t-e,h=n-e,f=t+e,p=n+e,e*=e);s=d.pop();)if(!(!(g=s.node)||(i=s.x0)>f||(o=s.y0)>p||(a=s.x1)=v)<<1|t>=_)&&(s=d[d.length-1],d[d.length-1]=d[d.length-1-c],d[d.length-1-c]=s)}else{var y=t-+this._x.call(null,g.data),m=n-+this._y.call(null,g.data),w=y*y+m*m;if(w=(u=(d+_)/2))?d=u:_=u,(l=a>=(s=(g+v)/2))?g=s:v=s,n=p,!(p=p[h=l<<1|c]))return this;if(!p.length)break;(n[h+1&3]||n[h+2&3]||n[h+3&3])&&(e=n,f=h)}for(;p.data!==t;)if(r=p,!(p=p.next))return this;return(i=p.next)&&delete p.next,r?(i?r.next=i:delete r.next,this):n?(i?n[h]=i:delete n[h],(p=n[0]||n[1]||n[2]||n[3])&&p===(n[3]||n[2]||n[1]||n[0])&&!p.length&&(e?e[f]=p:this._root=p),this):(this._root=i,this)},du=function(){return this._root},gu=function(){var t=0;return this.visit(function(n){if(!n.length)do{++t}while(n=n.next)}),t},_u=function(t){var n,e,r,i,o,a,u=[],s=this._root;for(s&&u.push(new hu(s,this._x0,this._y0,this._x1,this._y1));n=u.pop();)if(!t(s=n.node,r=n.x0,i=n.y0,o=n.x1,a=n.y1)&&s.length){var c=(r+o)/2,l=(i+a)/2;(e=s[3])&&u.push(new hu(e,c,l,o,a)),(e=s[2])&&u.push(new hu(e,r,l,c,a)),(e=s[1])&&u.push(new hu(e,c,i,o,l)),(e=s[0])&&u.push(new hu(e,r,i,c,l))}return this},vu=function(t){var n,e=[],r=[];for(this._root&&e.push(new hu(this._root,this._x0,this._y0,this._x1,this._y1));n=e.pop();){var i=n.node;if(i.length){var o,a=n.x0,u=n.y0,s=n.x1,c=n.y1,l=(a+s)/2,h=(u+c)/2;(o=i[0])&&e.push(new hu(o,a,u,l,h)),(o=i[1])&&e.push(new hu(o,l,u,s,h)),(o=i[2])&&e.push(new hu(o,a,h,l,c)),(o=i[3])&&e.push(new hu(o,l,h,s,c))}r.push(n)}for(;n=r.pop();)t(n.node,n.x0,n.y0,n.x1,n.y1);return this},yu=function(t){return arguments.length?(this._x=t,this):this._x},mu=function(t){return arguments.length?(this._y=t,this):this._y},wu=Kn.prototype=te.prototype;wu.copy=function(){var t,n,e=new te(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return e;if(!r.length)return e._root=ne(r),e;for(t=[{source:r,target:e._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(n=r.source[i])&&(n.length?t.push({source:n,target:r.target[i]=new Array(4)}):r.target[i]=ne(n));return e},wu.add=uu,wu.addAll=Vn,wu.cover=su,wu.data=cu,wu.extent=lu,wu.find=fu,wu.remove=pu,wu.removeAll=Gn,wu.root=du,wu.size=gu,wu.visit=_u,wu.visitAfter=vu,wu.x=yu,wu.y=mu;var xu,bu=function(t,n){if((e=(t=n?t.toExponential(n-1):t.toExponential()).indexOf("e"))<0)return null;var e,r=t.slice(0,e);return[r.length>1?r[0]+r.slice(2):r,+t.slice(e+1)]},Mu=function(t){return t=bu(Math.abs(t)),t?t[1]:NaN},Au=function(t,n){return function(e,r){for(var i=e.length,o=[],a=0,u=t[0],s=0;i>0&&u>0&&(s+u+1>r&&(u=Math.max(1,r-s)),o.push(e.substring(i-=u,i+u)),!((s+=u+1)>r));)u=t[a=(a+1)%t.length];return o.reverse().join(n)}},ku=function(t){return function(n){return n.replace(/[0-9]/g,function(n){return t[+n]})}},Nu=function(t,n){var e=bu(t,n);if(!e)return t+"";var r=e[0],i=e[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")},Tu={"":function(t,n){t:for(var e,r=(t=t.toPrecision(n)).length,i=1,o=-1;i0&&(o=0)}return o>0?t.slice(0,o)+t.slice(e+1):t},"%":function(t,n){return(100*t).toFixed(n)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},g:function(t,n){return t.toPrecision(n)},o:function(t){return Math.round(t).toString(8)},p:function(t,n){return Nu(100*t,n)},r:Nu,s:function(t,n){var e=bu(t,n);if(!e)return t+"";var r=e[0],i=e[1],o=i-(xu=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+bu(t,Math.max(0,n+o-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},Cu=/^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;ee.prototype=re.prototype,re.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+this.type};var Su,Du,Eu,Uu=function(t){return t},Pu=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],Fu=function(t){function n(t){function n(t){var n,i,u,l=_,w=v;if("c"===g)w=y(t)+w,t="";else{var x=(t=+t)<0;if(t=y(Math.abs(t),d),x&&0==+t&&(x=!1),l=(x?"("===c?c:"-":"-"===c||"("===c?"":c)+l,w=w+("s"===g?Pu[8+xu/3]:"")+(x&&"("===c?")":""),m)for(n=-1,i=t.length;++n(u=t.charCodeAt(n))||u>57){w=(46===u?o+t.slice(n+1):t.slice(n))+w,t=t.slice(0,n);break}}p&&!h&&(t=r(t,1/0));var b=l.length+t.length+w.length,M=b>1)+l+t+w+M.slice(b);break;default:t=M+l+t+w}return a(t)}var e=(t=ee(t)).fill,s=t.align,c=t.sign,l=t.symbol,h=t.zero,f=t.width,p=t.comma,d=t.precision,g=t.type,_="$"===l?i[0]:"#"===l&&/[boxX]/.test(g)?"0"+g.toLowerCase():"",v="$"===l?i[1]:/[%p]/.test(g)?u:"",y=Tu[g],m=!g||/[defgprs%]/.test(g);return d=null==d?g?6:12:/[gprs]/.test(g)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),n.toString=function(){return t+""},n}function e(t,e){var r=n((t=ee(t),t.type="f",t)),i=3*Math.max(-8,Math.min(8,Math.floor(Mu(e)/3))),o=Math.pow(10,-i),a=Pu[8+i/3];return function(t){return r(o*t)+a}}var r=t.grouping&&t.thousands?Au(t.grouping,t.thousands):Uu,i=t.currency,o=t.decimal,a=t.numerals?ku(t.numerals):Uu,u=t.percent||"%";return{format:n,formatPrefix:e}};!function(t){Su=Fu(t),Du=Su.format,Eu=Su.formatPrefix}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Hu=function(t){return Math.max(0,-Mu(Math.abs(t)))},Lu=function(t,n){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Mu(n)/3)))-Mu(Math.abs(t)))},Yu=function(t,n){return t=Math.abs(t),n=Math.abs(n)-t,Math.max(0,Mu(n)-Mu(t))+1},Ou=function(){return new ie};ie.prototype={constructor:ie,reset:function(){this.s=this.t=0},add:function(t){oe(ju,t,this.t),oe(this,ju.s,this.s),this.s?this.t+=ju.t:this.s=ju.t},valueOf:function(){return this.s}};var ju=new ie,zu=Math.PI,Iu=zu/2,qu=zu/180,$u=(Math.abs,Math.atan2),Xu=Math.cos,Bu=Math.sin,Ru=Math.sqrt;Ou(),Ou(),Ou(),Ou(),Ou(),Ou(),Ou(),Ou(),Xu(30*qu);se(function(t){return Ru(2/(1+t))}).invert=ce(function(t){return 2*ue(t/2)}),se(function(t){return(t=ae(t))&&t/Bu(t)}).invert=ce(function(t){return t});var Wu=function(){return this.eachAfter(le)},Zu=function(t){var n,e,r,i,o=this,a=[o];do{for(n=a.reverse(),a=[];o=n.pop();)if(t(o),e=o.children)for(r=0,i=e.length;r=0;--e)i.push(n[e]);return this},Gu=function(t){for(var n,e,r,i=this,o=[i],a=[];i=o.pop();)if(a.push(i),n=i.children)for(e=0,r=n.length;e=0;)e+=r[i].value;n.value=e})},Qu=function(t){return this.eachBefore(function(n){n.children&&n.children.sort(t)})},Ku=function(t){for(var n=this,e=he(n,t),r=[n];n!==e;)n=n.parent,r.push(n);for(var i=r.length;t!==e;)r.splice(i,0,t),t=t.parent;return r},ts=function(){for(var t=this,n=[t];t=t.parent;)n.push(t);return n},ns=function(){var t=[];return this.each(function(n){t.push(n)}),t},es=function(){var t=[];return this.eachBefore(function(n){n.children||t.push(n)}),t},rs=function(){var t=this,n=[];return t.each(function(e){e!==t&&n.push({source:e.parent,target:e})}),n};ve.prototype=fe.prototype={constructor:ve,count:Wu,each:Zu,eachAfter:Gu,eachBefore:Vu,sum:Ju,sort:Qu,path:Ku,ancestors:ts,descendants:ns,leaves:es,links:rs,copy:pe};ye.prototype=Object.create(ve.prototype);var is={},os=Array.prototype,as=os.map,us=os.slice,ss=function(t){return function(){return t}},cs=function(t){return+t},ls=[0,1],hs=function(t,n,r){var i,o=t[0],a=t[t.length-1],u=e(o,a,null==n?10:n);switch((r=ee(null==r?",f":r)).type){case"s":var s=Math.max(Math.abs(o),Math.abs(a));return null!=r.precision||isNaN(i=Lu(u,s))||(r.precision=i),Eu(r,s);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=Yu(u,Math.max(Math.abs(o),Math.abs(a))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=Hu(u))||(r.precision=i-2*("%"===r.type))}return Du(r)},fs=function(t,n){var e,r=0,i=(t=t.slice()).length-1,o=t[r],a=t[i];return a0?t>1?Pe(function(n){n.setTime(Math.floor(n/t)*t)},function(n,e){n.setTime(+n+e*t)},function(n,e){return(e-n)/t}):gs:null};var _s=6e4,vs=6048e5,ys=Pe(function(t){t.setTime(1e3*Math.floor(t/1e3))},function(t,n){t.setTime(+t+1e3*n)},function(t,n){return(n-t)/1e3},function(t){return t.getUTCSeconds()}),ms=Pe(function(t){t.setTime(Math.floor(t/_s)*_s)},function(t,n){t.setTime(+t+n*_s)},function(t,n){return(n-t)/_s},function(t){return t.getMinutes()}),ws=Pe(function(t){var n=t.getTimezoneOffset()*_s%36e5;n<0&&(n+=36e5),t.setTime(36e5*Math.floor((+t-n)/36e5)+n)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getHours()}),xs=Pe(function(t){t.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*_s)/864e5},function(t){return t.getDate()-1}),bs=Fe(0),Ms=Fe(1),As=(Fe(2),Fe(3),Fe(4),Fe(5),Fe(6),Pe(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,n){t.setMonth(t.getMonth()+n)},function(t,n){return n.getMonth()-t.getMonth()+12*(n.getFullYear()-t.getFullYear())},function(t){return t.getMonth()})),ks=Pe(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n)},function(t,n){return n.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});ks.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Pe(function(n){n.setFullYear(Math.floor(n.getFullYear()/t)*t),n.setMonth(0,1),n.setHours(0,0,0,0)},function(n,e){n.setFullYear(n.getFullYear()+e*t)}):null};Pe(function(t){t.setUTCSeconds(0,0)},function(t,n){t.setTime(+t+n*_s)},function(t,n){return(n-t)/_s},function(t){return t.getUTCMinutes()}),Pe(function(t){t.setUTCMinutes(0,0,0)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getUTCHours()});var Ns=Pe(function(t){t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+n)},function(t,n){return(n-t)/864e5},function(t){return t.getUTCDate()-1}),Ts=He(0),Cs=He(1),Ss=(He(2),He(3),He(4),He(5),He(6),Pe(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCMonth(t.getUTCMonth()+n)},function(t,n){return n.getUTCMonth()-t.getUTCMonth()+12*(n.getUTCFullYear()-t.getUTCFullYear())},function(t){return t.getUTCMonth()}),Pe(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n)},function(t,n){return n.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()}));Ss.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Pe(function(n){n.setUTCFullYear(Math.floor(n.getUTCFullYear()/t)*t),n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0)},function(n,e){n.setUTCFullYear(n.getUTCFullYear()+e*t)}):null};var Ds,Es,Us,Ps,Fs,Hs={"-":"",_:" ",0:"0"},Ls=/^\s*\d+/,Ys=/^%/,Os=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;!function(t){Ds=je(t),Es=Ds.format,Us=Ds.parse,Ps=Ds.utcFormat,Fs=Ds.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Date.prototype.toISOString||Ps("%Y-%m-%dT%H:%M:%S.%LZ"),+new Date("2000-01-01T00:00:00.000Z")||Fs("%Y-%m-%dT%H:%M:%S.%LZ");var js=1e3,zs=60*js,Is=60*zs,qs=24*Is,$s=7*qs,Xs=30*qs,Bs=365*qs,Rs=function(){return Yr(ks,As,bs,xs,ws,ms,ys,gs,Es).domain([new Date(2e3,0,1),new Date(2e3,0,2)])},Ws=function(t){return t.match(/.{6}/g).map(function(t){return"#"+t})};Ws("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),Ws("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6"),Ws("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9"),Ws("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5"),ca(Ft(300,.5,0),Ft(-240,.5,1));ca(Ft(-100,.75,.35),Ft(80,1.5,.8)),ca(Ft(260,.75,.35),Ft(80,1.5,.8)),Ft();var Zs=function(t){return function(){return t}};Or.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:this._context.lineTo(t,n)}}};var Vs=function(t){return new Or(t)},Gs=function(){function t(t){var u,s,c,l=t.length,h=!1;for(null==i&&(a=o(c=zn())),u=0;u<=l;++u)!(u0&&(a=As.offset(a,-1),u=As.offset(u,1));var s=r(n,1),c=i(n,1);return t.scales.x.domain([a,u]).nice(),t.scales.y.domain([s,c]).nice(),t}},{key:"plots",value:function(t,n,e){function r(n,e,r){return{plot:["o-chart__plot","o-chart__plot--"+s.slug(e,"-"),"o-chart__plot--"+s.slug(r,"-")],line:["o-chart__line","stroke-"+s.slug(r,"-")],dots:["o-chart__dot","fill-"+s.slug(r,"-"),"stroke-"+t.colors.background],bar:["o-chart__bar","fill-"+s.slug(r,"-")]}[n].join(" ")}function i(){return n.g.selectAll(".o-chart__plot").remove(),n.plots=n.g.selectAll(".o-chart__plot").data(e).enter().append("g").attr("class",function(){var t=co(this).data()[0];return s.plots.classes("plot",t.label,t.label)}),n.plots.each(function(t){s.plots[t.type](co(this))}),n}function o(n){n.append("path").attr("class",function(t){return s.plots.classes("line","",t.color)}).attr("d",function(n){return t.plots.line(n.data)}),n.selectAll(".o-chart__dot").data(function(t){return t.data}).enter().append("circle").attrs({cx:t.plots.line.x(),cy:t.plots.line.y(),r:tc.DOTS_RADIUS}).attr("class",function(t){var t=co(this.parentNode).data()[0];return s.plots.classes("dots","",t.color)})}function a(n){var r=e.filter(function(t){return"bar"===t.type}),i=n.data()[0],o=Math.max(0,i.data.length),a=t.right/o*tc.BAR_GAP/r.length,u=s.plots.classes("bar","",i.color),c=a*(r.map(function(t){return t.label}).indexOf(i.label)+1)-a*r.length/2;n.selectAll(".o-chart__bar").data(function(t){return i.data}).enter().append("rect").attrs({class:u,width:a,x:function(n){return t.scales.x(s.timeParse(n[0]))-c},y:function(n){return t.scales.y(Math.max(0,n[1]))},height:function(n){return Math.abs(Math.min(t.scales.y(0),t.bottom)-t.scales.y(n[1]))}})}function u(){return s.plots.create()}var s=this;return s.plots.create=i,s.plots.line=o,s.plots.bar=a,s.plots.update=u,s.plots.classes=r,s.plots}},{key:"axis",value:function(t,n){function e(n){return{axis_top:["o-chart__axis","o-chart__axis--x","o-chart__axis--top"],axis_bottom:["o-chart__axis","o-chart__axis--x","o-chart__axis--bottom"],axis_left:["o-chart__axis","o-chart__axis--y","o-chart__axis--left"],axis_right:["o-chart__axis","o-chart__axis--y","o-chart__axis--right"],label_top:["fill-"+t.colors.labels,"o-chart__label","o-chart__label--x","o-chart__label--top"],label_bottom:["fill-"+t.colors.labels,"o-chart__label","o-chart__label--x","o-chart__label--bottom"],label_left:["fill-"+t.colors.labels,"o-chart__label","o-chart__label--y","o-chart__label--left"],label_right:["fill-"+t.colors.labels,"o-chart__label","o-chart__label--y","o-chart__label--right"],ticks:["tick","fill-"+t.colors.axis],line_x:["o-chart__axis-gap--x","stroke-"+t.colors.axis],line_y:["o-chart__axis-gap--y","stroke-"+t.colors.axis]}[n].join(" ")}function r(){return n.axis={},n.axis.x=n.g.append("g").attr("class",s.axis.classes("axis_bottom")),n.axis.y=n.g.append("g").attr("class",s.axis.classes("axis_left")),s.axis.update(),s.axis.modify(),s.axis.labels()}function i(){return n.axis.x.call(t.axis.x).attr("transform",s.translate(0,t.innerHeight)),n.axis.y.call(t.axis.y),n.axis.x.select(".o-chart__axis-gap--x").attrs({x1:0,y1:0,y2:0,x2:t.innerWidth}),n.axis.y.select(".o-chart__axis-gap--y").attrs({x1:0,y1:0,x2:0,y2:t.innerHeight}),n.g.selectAll(".tick").attr("class",s.axis.classes("ticks")),n.g.select(".o-chart__label--x").attr("transform",function(){var n=co(this).select("text"),e=t.left+t.innerWidth/2,r=t.height-n.node().getBBox().height;return s.translate(e,r)}),n.g.select(".o-chart__label--y").attr("transform",function(){var n=0-t.margin[3]+co(this).node().getBBox().height,e=t.innerHeight/2;return[s.translate(n,e),"rotate(-90)"].join(" ")}),n}function o(){return n.axis.x.label=n.g.append("g").attr("class",s.axis.classes("label_bottom")),n.axis.x.label.append("text").attrs({"text-anchor":"middle"}),n.axis.y.label=n.g.append("g").attr("class",s.axis.classes("label_left")),n.axis.y.label.append("text").attrs({"text-anchor":"middle"}),s.axis.text(),n}function a(){n.g.select(".o-chart__label--x").select("text").text(t.labels.axis.x),n.g.select(".o-chart__label--y").select("text").text(t.labels.axis.y),s.axis.update()}function u(){n.axis.x.append("line").attrs({x1:0,y1:0,y2:0,x2:t.innerWidth,class:s.axis.classes("line_x")}),n.axis.x.select(".domain").attr("display","none"),n.axis.y.append("line").attrs({x1:0,y1:0,x2:0,y2:t.innerHeight,class:s.axis.classes("line_y")}),n.axis.y.select(".domain").attr("display","none")}var s=this;return s.axis.create=r,s.axis.update=i,s.axis.labels=o,s.axis.text=a,s.axis.modify=u,s.axis.classes=e,s.axis}}]),t}();return function(){function t(){nc(this,t)}return ec(t,[{key:"charts",value:function(t,n){return console.log("Here"),new rc(t,n).init()}}]),t}()}(); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnljby5kaXN0LmpzIiwic291cmNlcyI6WyIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdG9yLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aWNrcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9heGlzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9kaXNwYXRjaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yQWxsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VudGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdGEuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hdHRyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3N0eWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3Byb3BlcnR5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NsYXNzZWQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9odG1sLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JhaXNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2xvd2VyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luc2VydC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yZW1vdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2xhYi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY3ViZWhlbGl4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvc3RyaW5nLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vcGFyc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY3ViZWhlbGl4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NjaGVkdWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHdlZW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9hdHRyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0clR3ZWVuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZGVsYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kdXJhdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2Vhc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9vbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3JlbW92ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9jdWJpYy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vdHJhbnNpdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvYnJ1c2guanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvcGF0aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9tYXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvc2V0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvZHN2LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9hZGQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3JlbW92ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMveC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMveS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcXVhZHRyZWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRTcGVjaWZpZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9hZGRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2F6aW11dGhhbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9jb3VudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9wYXRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWV1ZS9zcmMvcXVldWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xpbmVhci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9pbnRlcnZhbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy93ZWVrLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y1dlZWsuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaXNvRm9ybWF0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pc29QYXJzZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGltZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbGluZWFyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wb2ludC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbW9ub3RvbmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uLW11bHRpL3NyYy9zZWxlY3Rpb24vYXR0cnMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uLW11bHRpL3NyYy9zZWxlY3Rpb24vc3R5bGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi1tdWx0aS9zcmMvc2VsZWN0aW9uL3Byb3BlcnRpZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tYXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21pbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9hcnJheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9pZGVudGl0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tYXRjaGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RBbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZmlsdGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NwYXJzZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2V4aXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbWVyZ2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb3JkZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2FsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2Rlcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2RlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NpemUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW1wdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZWFjaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3dpbmRvdy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hcHBlbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0dW0uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL21hdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yZ2IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2FycmF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9kYXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL29iamVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdmFsdWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vZGVjb21wb3NlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lb3V0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL2ludGVycnVwdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vaW50ZXJydXB0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW50ZXJwb2xhdGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9maWx0ZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9tZXJnZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RyYW5zaXRpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvcG9seS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9iYWNrLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2VsYXN0aWMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9tYXRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvY3N2LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvdHN2LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9jb3Zlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZGF0YS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZXh0ZW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9xdWFkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9maW5kLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9yb290LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9zaXplLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy92aXNpdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvdmlzaXRBZnRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdERlY2ltYWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRQcmVmaXhBdXRvLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZXhwb25lbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRHcm91cC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0Um91bmRlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFR5cGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0RGVmYXVsdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2lkZW50aXR5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvbkZpeGVkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUHJlZml4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUm91bmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9hcmVhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvYm91bmRzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcG9seWdvbkNvbnRhaW5zLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbGVuZ3RoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9hcmVhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9tZWFzdXJlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9yZXNhbXBsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYXppbXV0aGFsRXF1YWxBcmVhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hemltdXRoYWxFcXVpZGlzdGFudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9lYWNoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hCZWZvcmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvZWFjaEFmdGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L3N1bS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zb3J0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2FuY2VzdG9ycy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9kZXNjZW5kYW50cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9sZWF2ZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvbGlua3MuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL3NsaWNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9hcnJheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY29uc3RhbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL251bWJlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGlja0Zvcm1hdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbmljZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9taWxsaXNlY29uZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kdXJhdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9zZWNvbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWludXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2hvdXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZGF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21vbnRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3llYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjTWludXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y0hvdXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjRGF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y1llYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjTW9udGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2RlZmF1bHRMb2NhbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbG9ycy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY2F0ZWdvcnkxMC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY2F0ZWdvcnkyMGIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NhdGVnb3J5MjBjLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jYXRlZ29yeTIwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jdWJlaGVsaXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3JhaW5ib3cuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL0RpYWdyYW0uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uLW11bHRpL2luZGV4LmpzIiwiLi4vLi4vc3JjL2pzL21vZHVsZXMvby1jaGFydHMuY29uc3RhbnRzLmpzIiwiLi4vLi4vc3JjL2pzL21vZHVsZXMvby1jaGFydHMuanMiLCIuLi8uLi9zcmMvanMvbnljby5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIGlmIChjb21wYXJlLmxlbmd0aCA9PT0gMSkgY29tcGFyZSA9IGFzY2VuZGluZ0NvbXBhcmF0b3IoY29tcGFyZSk7XG4gIHJldHVybiB7XG4gICAgbGVmdDogZnVuY3Rpb24oYSwgeCwgbG8sIGhpKSB7XG4gICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xuICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsbztcbiAgICB9LFxuICAgIHJpZ2h0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHtcbiAgICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XG4gICAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpID4gMCkgaGkgPSBtaWQ7XG4gICAgICAgIGVsc2UgbG8gPSBtaWQgKyAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nQ29tcGFyYXRvcihmKSB7XG4gIHJldHVybiBmdW5jdGlvbihkLCB4KSB7XG4gICAgcmV0dXJuIGFzY2VuZGluZyhmKGQpLCB4KTtcbiAgfTtcbn1cbiIsInZhciBlMTAgPSBNYXRoLnNxcnQoNTApLFxuICAgIGU1ID0gTWF0aC5zcXJ0KDEwKSxcbiAgICBlMiA9IE1hdGguc3FydCgyKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHZhciByZXZlcnNlID0gc3RvcCA8IHN0YXJ0LFxuICAgICAgaSA9IC0xLFxuICAgICAgbixcbiAgICAgIHRpY2tzLFxuICAgICAgc3RlcDtcblxuICBpZiAocmV2ZXJzZSkgbiA9IHN0YXJ0LCBzdGFydCA9IHN0b3AsIHN0b3AgPSBuO1xuXG4gIGlmICgoc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSkgPT09IDAgfHwgIWlzRmluaXRlKHN0ZXApKSByZXR1cm4gW107XG5cbiAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgLyBzdGVwKTtcbiAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wIC8gc3RlcCk7XG4gICAgdGlja3MgPSBuZXcgQXJyYXkobiA9IE1hdGguY2VpbChzdG9wIC0gc3RhcnQgKyAxKSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHN0YXJ0ICsgaSkgKiBzdGVwO1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAqIHN0ZXApO1xuICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAqIHN0ZXApO1xuICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSBNYXRoLmNlaWwoc3RhcnQgLSBzdG9wICsgMSkpO1xuICAgIHdoaWxlICgrK2kgPCBuKSB0aWNrc1tpXSA9IChzdGFydCAtIGkpIC8gc3RlcDtcbiAgfVxuXG4gIGlmIChyZXZlcnNlKSB0aWNrcy5yZXZlcnNlKCk7XG5cbiAgcmV0dXJuIHRpY2tzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHBvd2VyID0gTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwKSAvIE1hdGguTE4xMCksXG4gICAgICBlcnJvciA9IHN0ZXAgLyBNYXRoLnBvdygxMCwgcG93ZXIpO1xuICByZXR1cm4gcG93ZXIgPj0gMFxuICAgICAgPyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKSAqIE1hdGgucG93KDEwLCBwb3dlcilcbiAgICAgIDogLU1hdGgucG93KDEwLCAtcG93ZXIpIC8gKGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAwID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHN0ZXAxID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2coc3RlcDApIC8gTWF0aC5MTjEwKSksXG4gICAgICBlcnJvciA9IHN0ZXAwIC8gc3RlcDE7XG4gIGlmIChlcnJvciA+PSBlMTApIHN0ZXAxICo9IDEwO1xuICBlbHNlIGlmIChlcnJvciA+PSBlNSkgc3RlcDEgKj0gNTtcbiAgZWxzZSBpZiAoZXJyb3IgPj0gZTIpIHN0ZXAxICo9IDI7XG4gIHJldHVybiBzdG9wIDwgc3RhcnQgPyAtc3RlcDEgOiBzdGVwMTtcbn1cbiIsImltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHlcIjtcblxudmFyIHRvcCA9IDEsXG4gICAgcmlnaHQgPSAyLFxuICAgIGJvdHRvbSA9IDMsXG4gICAgbGVmdCA9IDQsXG4gICAgZXBzaWxvbiA9IDFlLTY7XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVgoeCkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyAoeCArIDAuNSkgKyBcIiwwKVwiO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVZKHkpIHtcbiAgcmV0dXJuIFwidHJhbnNsYXRlKDAsXCIgKyAoeSArIDAuNSkgKyBcIilcIjtcbn1cblxuZnVuY3Rpb24gY2VudGVyKHNjYWxlKSB7XG4gIHZhciBvZmZzZXQgPSBNYXRoLm1heCgwLCBzY2FsZS5iYW5kd2lkdGgoKSAtIDEpIC8gMjsgLy8gQWRqdXN0IGZvciAwLjVweCBvZmZzZXQuXG4gIGlmIChzY2FsZS5yb3VuZCgpKSBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG4gIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuIHNjYWxlKGQpICsgb2Zmc2V0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBlbnRlcmluZygpIHtcbiAgcmV0dXJuICF0aGlzLl9fYXhpcztcbn1cblxuZnVuY3Rpb24gYXhpcyhvcmllbnQsIHNjYWxlKSB7XG4gIHZhciB0aWNrQXJndW1lbnRzID0gW10sXG4gICAgICB0aWNrVmFsdWVzID0gbnVsbCxcbiAgICAgIHRpY2tGb3JtYXQgPSBudWxsLFxuICAgICAgdGlja1NpemVJbm5lciA9IDYsXG4gICAgICB0aWNrU2l6ZU91dGVyID0gNixcbiAgICAgIHRpY2tQYWRkaW5nID0gMyxcbiAgICAgIGsgPSBvcmllbnQgPT09IHRvcCB8fCBvcmllbnQgPT09IGxlZnQgPyAtMSA6IDEsXG4gICAgICB4ID0gb3JpZW50ID09PSBsZWZ0IHx8IG9yaWVudCA9PT0gcmlnaHQgPyBcInhcIiA6IFwieVwiLFxuICAgICAgdHJhbnNmb3JtID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBib3R0b20gPyB0cmFuc2xhdGVYIDogdHJhbnNsYXRlWTtcblxuICBmdW5jdGlvbiBheGlzKGNvbnRleHQpIHtcbiAgICB2YXIgdmFsdWVzID0gdGlja1ZhbHVlcyA9PSBudWxsID8gKHNjYWxlLnRpY2tzID8gc2NhbGUudGlja3MuYXBwbHkoc2NhbGUsIHRpY2tBcmd1bWVudHMpIDogc2NhbGUuZG9tYWluKCkpIDogdGlja1ZhbHVlcyxcbiAgICAgICAgZm9ybWF0ID0gdGlja0Zvcm1hdCA9PSBudWxsID8gKHNjYWxlLnRpY2tGb3JtYXQgPyBzY2FsZS50aWNrRm9ybWF0LmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IGlkZW50aXR5KSA6IHRpY2tGb3JtYXQsXG4gICAgICAgIHNwYWNpbmcgPSBNYXRoLm1heCh0aWNrU2l6ZUlubmVyLCAwKSArIHRpY2tQYWRkaW5nLFxuICAgICAgICByYW5nZSA9IHNjYWxlLnJhbmdlKCksXG4gICAgICAgIHJhbmdlMCA9IHJhbmdlWzBdICsgMC41LFxuICAgICAgICByYW5nZTEgPSByYW5nZVtyYW5nZS5sZW5ndGggLSAxXSArIDAuNSxcbiAgICAgICAgcG9zaXRpb24gPSAoc2NhbGUuYmFuZHdpZHRoID8gY2VudGVyIDogaWRlbnRpdHkpKHNjYWxlLmNvcHkoKSksXG4gICAgICAgIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQsXG4gICAgICAgIHBhdGggPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLmRvbWFpblwiKS5kYXRhKFtudWxsXSksXG4gICAgICAgIHRpY2sgPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLnRpY2tcIikuZGF0YSh2YWx1ZXMsIHNjYWxlKS5vcmRlcigpLFxuICAgICAgICB0aWNrRXhpdCA9IHRpY2suZXhpdCgpLFxuICAgICAgICB0aWNrRW50ZXIgPSB0aWNrLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0aWNrXCIpLFxuICAgICAgICBsaW5lID0gdGljay5zZWxlY3QoXCJsaW5lXCIpLFxuICAgICAgICB0ZXh0ID0gdGljay5zZWxlY3QoXCJ0ZXh0XCIpO1xuXG4gICAgcGF0aCA9IHBhdGgubWVyZ2UocGF0aC5lbnRlcigpLmluc2VydChcInBhdGhcIiwgXCIudGlja1wiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZG9tYWluXCIpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiIzAwMFwiKSk7XG5cbiAgICB0aWNrID0gdGljay5tZXJnZSh0aWNrRW50ZXIpO1xuXG4gICAgbGluZSA9IGxpbmUubWVyZ2UodGlja0VudGVyLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCIjMDAwXCIpXG4gICAgICAgIC5hdHRyKHggKyBcIjJcIiwgayAqIHRpY2tTaXplSW5uZXIpKTtcblxuICAgIHRleHQgPSB0ZXh0Lm1lcmdlKHRpY2tFbnRlci5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIiMwMDBcIilcbiAgICAgICAgLmF0dHIoeCwgayAqIHNwYWNpbmcpXG4gICAgICAgIC5hdHRyKFwiZHlcIiwgb3JpZW50ID09PSB0b3AgPyBcIjBlbVwiIDogb3JpZW50ID09PSBib3R0b20gPyBcIjAuNzFlbVwiIDogXCIwLjMyZW1cIikpO1xuXG4gICAgaWYgKGNvbnRleHQgIT09IHNlbGVjdGlvbikge1xuICAgICAgcGF0aCA9IHBhdGgudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIHRpY2sgPSB0aWNrLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICBsaW5lID0gbGluZS50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgdGV4dCA9IHRleHQudHJhbnNpdGlvbihjb250ZXh0KTtcblxuICAgICAgdGlja0V4aXQgPSB0aWNrRXhpdC50cmFuc2l0aW9uKGNvbnRleHQpXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gaXNGaW5pdGUoZCA9IHBvc2l0aW9uKGQpKSA/IHRyYW5zZm9ybShkKSA6IHRoaXMuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpOyB9KTtcblxuICAgICAgdGlja0VudGVyXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyB2YXIgcCA9IHRoaXMucGFyZW50Tm9kZS5fX2F4aXM7IHJldHVybiB0cmFuc2Zvcm0ocCAmJiBpc0Zpbml0ZShwID0gcChkKSkgPyBwIDogcG9zaXRpb24oZCkpOyB9KTtcbiAgICB9XG5cbiAgICB0aWNrRXhpdC5yZW1vdmUoKTtcblxuICAgIHBhdGhcbiAgICAgICAgLmF0dHIoXCJkXCIsIG9yaWVudCA9PT0gbGVmdCB8fCBvcmllbnQgPT0gcmlnaHRcbiAgICAgICAgICAgID8gXCJNXCIgKyBrICogdGlja1NpemVPdXRlciArIFwiLFwiICsgcmFuZ2UwICsgXCJIMC41VlwiICsgcmFuZ2UxICsgXCJIXCIgKyBrICogdGlja1NpemVPdXRlclxuICAgICAgICAgICAgOiBcIk1cIiArIHJhbmdlMCArIFwiLFwiICsgayAqIHRpY2tTaXplT3V0ZXIgKyBcIlYwLjVIXCIgKyByYW5nZTEgKyBcIlZcIiArIGsgKiB0aWNrU2l6ZU91dGVyKTtcblxuICAgIHRpY2tcbiAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIDEpXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIHRyYW5zZm9ybShwb3NpdGlvbihkKSk7IH0pO1xuXG4gICAgbGluZVxuICAgICAgICAuYXR0cih4ICsgXCIyXCIsIGsgKiB0aWNrU2l6ZUlubmVyKTtcblxuICAgIHRleHRcbiAgICAgICAgLmF0dHIoeCwgayAqIHNwYWNpbmcpXG4gICAgICAgIC50ZXh0KGZvcm1hdCk7XG5cbiAgICBzZWxlY3Rpb24uZmlsdGVyKGVudGVyaW5nKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJub25lXCIpXG4gICAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIDEwKVxuICAgICAgICAuYXR0cihcImZvbnQtZmFtaWx5XCIsIFwic2Fucy1zZXJpZlwiKVxuICAgICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIG9yaWVudCA9PT0gcmlnaHQgPyBcInN0YXJ0XCIgOiBvcmllbnQgPT09IGxlZnQgPyBcImVuZFwiIDogXCJtaWRkbGVcIik7XG5cbiAgICBzZWxlY3Rpb25cbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7IHRoaXMuX19heGlzID0gcG9zaXRpb247IH0pO1xuICB9XG5cbiAgYXhpcy5zY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzY2FsZSA9IF8sIGF4aXMpIDogc2NhbGU7XG4gIH07XG5cbiAgYXhpcy50aWNrcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aWNrQXJndW1lbnRzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpLCBheGlzO1xuICB9O1xuXG4gIGF4aXMudGlja0FyZ3VtZW50cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrQXJndW1lbnRzID0gXyA9PSBudWxsID8gW10gOiBzbGljZS5jYWxsKF8pLCBheGlzKSA6IHRpY2tBcmd1bWVudHMuc2xpY2UoKTtcbiAgfTtcblxuICBheGlzLnRpY2tWYWx1ZXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1ZhbHVlcyA9IF8gPT0gbnVsbCA/IG51bGwgOiBzbGljZS5jYWxsKF8pLCBheGlzKSA6IHRpY2tWYWx1ZXMgJiYgdGlja1ZhbHVlcy5zbGljZSgpO1xuICB9O1xuXG4gIGF4aXMudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrRm9ybWF0ID0gXywgYXhpcykgOiB0aWNrRm9ybWF0O1xuICB9O1xuXG4gIGF4aXMudGlja1NpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1NpemVJbm5lciA9IHRpY2tTaXplT3V0ZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyO1xuICB9O1xuXG4gIGF4aXMudGlja1NpemVJbm5lciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZUlubmVyID0gK18sIGF4aXMpIDogdGlja1NpemVJbm5lcjtcbiAgfTtcblxuICBheGlzLnRpY2tTaXplT3V0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1NpemVPdXRlciA9ICtfLCBheGlzKSA6IHRpY2tTaXplT3V0ZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrUGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrUGFkZGluZyA9ICtfLCBheGlzKSA6IHRpY2tQYWRkaW5nO1xuICB9O1xuXG4gIHJldHVybiBheGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc1RvcChzY2FsZSkge1xuICByZXR1cm4gYXhpcyh0b3AsIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNSaWdodChzY2FsZSkge1xuICByZXR1cm4gYXhpcyhyaWdodCwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc0JvdHRvbShzY2FsZSkge1xuICByZXR1cm4gYXhpcyhib3R0b20sIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNMZWZ0KHNjYWxlKSB7XG4gIHJldHVybiBheGlzKGxlZnQsIHNjYWxlKTtcbn1cbiIsInZhciBub29wID0ge3ZhbHVlOiBmdW5jdGlvbigpIHt9fTtcblxuZnVuY3Rpb24gZGlzcGF0Y2goKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aCwgXyA9IHt9LCB0OyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEodCA9IGFyZ3VtZW50c1tpXSArIFwiXCIpIHx8ICh0IGluIF8pKSB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIHR5cGU6IFwiICsgdCk7XG4gICAgX1t0XSA9IFtdO1xuICB9XG4gIHJldHVybiBuZXcgRGlzcGF0Y2goXyk7XG59XG5cbmZ1bmN0aW9uIERpc3BhdGNoKF8pIHtcbiAgdGhpcy5fID0gXztcbn1cblxuZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzLCB0eXBlcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgaWYgKHQgJiYgIXR5cGVzLmhhc093blByb3BlcnR5KHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdCk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbkRpc3BhdGNoLnByb3RvdHlwZSA9IGRpc3BhdGNoLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IERpc3BhdGNoLFxuICBvbjogZnVuY3Rpb24odHlwZW5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIF8gPSB0aGlzLl8sXG4gICAgICAgIFQgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIsIF8pLFxuICAgICAgICB0LFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIG4gPSBULmxlbmd0aDtcblxuICAgIC8vIElmIG5vIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIHJldHVybiB0aGUgY2FsbGJhY2sgb2YgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgJiYgKHQgPSBnZXQoX1t0XSwgdHlwZW5hbWUubmFtZSkpKSByZXR1cm4gdDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBhIHR5cGUgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgLy8gT3RoZXJ3aXNlLCBpZiBhIG51bGwgY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmVtb3ZlIGNhbGxiYWNrcyBvZiB0aGUgZ2l2ZW4gbmFtZS5cbiAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjYWxsYmFjazogXCIgKyBjYWxsYmFjayk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBjYWxsYmFjayk7XG4gICAgICBlbHNlIGlmIChjYWxsYmFjayA9PSBudWxsKSBmb3IgKHQgaW4gXykgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgY29weTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNvcHkgPSB7fSwgXyA9IHRoaXMuXztcbiAgICBmb3IgKHZhciB0IGluIF8pIGNvcHlbdF0gPSBfW3RdLnNsaWNlKCk7XG4gICAgcmV0dXJuIG5ldyBEaXNwYXRjaChjb3B5KTtcbiAgfSxcbiAgY2FsbDogZnVuY3Rpb24odHlwZSwgdGhhdCkge1xuICAgIGlmICgobiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyKSA+IDApIGZvciAodmFyIGFyZ3MgPSBuZXcgQXJyYXkobiksIGkgPSAwLCBuLCB0OyBpIDwgbjsgKytpKSBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uKHR5cGUsIHRoYXQsIGFyZ3MpIHtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodmFyIHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldCh0eXBlLCBuYW1lKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGgsIGM7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoKGMgPSB0eXBlW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYy52YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0KHR5cGUsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAodHlwZVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICB0eXBlW2ldID0gbm9vcCwgdHlwZSA9IHR5cGUuc2xpY2UoMCwgaSkuY29uY2F0KHR5cGUuc2xpY2UoaSArIDEpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgdHlwZS5wdXNoKHtuYW1lOiBuYW1lLCB2YWx1ZTogY2FsbGJhY2t9KTtcbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRpc3BhdGNoO1xuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi9uYW1lc3BhY2VcIjtcbmltcG9ydCB7eGh0bWx9IGZyb20gXCIuL25hbWVzcGFjZXNcIjtcblxuZnVuY3Rpb24gY3JlYXRvckluaGVyaXQobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy5vd25lckRvY3VtZW50LFxuICAgICAgICB1cmkgPSB0aGlzLm5hbWVzcGFjZVVSSTtcbiAgICByZXR1cm4gdXJpID09PSB4aHRtbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJID09PSB4aHRtbFxuICAgICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSlcbiAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModXJpLCBuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRvckZpeGVkKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIChmdWxsbmFtZS5sb2NhbFxuICAgICAgPyBjcmVhdG9yRml4ZWRcbiAgICAgIDogY3JlYXRvckluaGVyaXQpKGZ1bGxuYW1lKTtcbn1cbiIsInZhciBmaWx0ZXJFdmVudHMgPSB7fTtcblxuZXhwb3J0IHZhciBldmVudCA9IG51bGw7XG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIGlmICghKFwib25tb3VzZWVudGVyXCIgaW4gZWxlbWVudCkpIHtcbiAgICBmaWx0ZXJFdmVudHMgPSB7bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIiwgbW91c2VsZWF2ZTogXCJtb3VzZW91dFwifTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJDb250ZXh0TGlzdGVuZXIobGlzdGVuZXIsIGluZGV4LCBncm91cCkge1xuICBsaXN0ZW5lciA9IGNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lciwgaW5kZXgsIGdyb3VwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgIGlmICghcmVsYXRlZCB8fCAocmVsYXRlZCAhPT0gdGhpcyAmJiAhKHJlbGF0ZWQuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykgJiA4KSkpIHtcbiAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50MSkge1xuICAgIHZhciBldmVudDAgPSBldmVudDsgLy8gRXZlbnRzIGNhbiBiZSByZWVudHJhbnQgKGUuZy4sIGZvY3VzKS5cbiAgICBldmVudCA9IGV2ZW50MTtcbiAgICB0cnkge1xuICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCB0aGlzLl9fZGF0YV9fLCBpbmRleCwgZ3JvdXApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBldmVudCA9IGV2ZW50MDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLmNhcHR1cmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIGNhcHR1cmUpIHtcbiAgdmFyIHdyYXAgPSBmaWx0ZXJFdmVudHMuaGFzT3duUHJvcGVydHkodHlwZW5hbWUudHlwZSkgPyBmaWx0ZXJDb250ZXh0TGlzdGVuZXIgOiBjb250ZXh0TGlzdGVuZXI7XG4gIHJldHVybiBmdW5jdGlvbihkLCBpLCBncm91cCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSB3cmFwKHZhbHVlLCBpLCBncm91cCk7XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgICAgaWYgKChvID0gb25bal0pLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8uY2FwdHVyZSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIgPSBsaXN0ZW5lciwgby5jYXB0dXJlID0gY2FwdHVyZSk7XG4gICAgICAgIG8udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZW5hbWUudHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgIG8gPSB7dHlwZTogdHlwZW5hbWUudHlwZSwgbmFtZTogdHlwZW5hbWUubmFtZSwgdmFsdWU6IHZhbHVlLCBsaXN0ZW5lcjogbGlzdGVuZXIsIGNhcHR1cmU6IGNhcHR1cmV9O1xuICAgIGlmICghb24pIHRoaXMuX19vbiA9IFtvXTtcbiAgICBlbHNlIG9uLnB1c2gobyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHR5cGVuYW1lLCB2YWx1ZSwgY2FwdHVyZSkge1xuICB2YXIgdHlwZW5hbWVzID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiKSwgaSwgbiA9IHR5cGVuYW1lcy5sZW5ndGgsIHQ7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIG9uID0gdGhpcy5ub2RlKCkuX19vbjtcbiAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICBmb3IgKGkgPSAwLCBvID0gb25bal07IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKCh0ID0gdHlwZW5hbWVzW2ldKS50eXBlID09PSBvLnR5cGUgJiYgdC5uYW1lID09PSBvLm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gby52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBvbiA9IHZhbHVlID8gb25BZGQgOiBvblJlbW92ZTtcbiAgaWYgKGNhcHR1cmUgPT0gbnVsbCkgY2FwdHVyZSA9IGZhbHNlO1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB0aGlzLmVhY2gob24odHlwZW5hbWVzW2ldLCB2YWx1ZSwgY2FwdHVyZSkpO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbUV2ZW50KGV2ZW50MSwgbGlzdGVuZXIsIHRoYXQsIGFyZ3MpIHtcbiAgdmFyIGV2ZW50MCA9IGV2ZW50O1xuICBldmVudDEuc291cmNlRXZlbnQgPSBldmVudDtcbiAgZXZlbnQgPSBldmVudDE7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9IGZpbmFsbHkge1xuICAgIGV2ZW50ID0gZXZlbnQwO1xuICB9XG59XG4iLCJmdW5jdGlvbiBub25lKCkge31cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBub25lIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gIH07XG59XG4iLCJmdW5jdGlvbiBlbXB0eSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IGVtcHR5IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gIH07XG59XG4iLCJpbXBvcnQgc3BhcnNlIGZyb20gXCIuL3NwYXJzZVwiO1xuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9lbnRlciB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRW50ZXJOb2RlKHBhcmVudCwgZGF0dW0pIHtcbiAgdGhpcy5vd25lckRvY3VtZW50ID0gcGFyZW50Lm93bmVyRG9jdW1lbnQ7XG4gIHRoaXMubmFtZXNwYWNlVVJJID0gcGFyZW50Lm5hbWVzcGFjZVVSSTtcbiAgdGhpcy5fbmV4dCA9IG51bGw7XG4gIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5fX2RhdGFfXyA9IGRhdHVtO1xufVxuXG5FbnRlck5vZGUucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRW50ZXJOb2RlLFxuICBhcHBlbmRDaGlsZDogZnVuY3Rpb24oY2hpbGQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIHRoaXMuX25leHQpOyB9LFxuICBpbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKGNoaWxkLCBuZXh0KSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCBuZXh0KTsgfSxcbiAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsgfSxcbiAgcXVlcnlTZWxlY3RvckFsbDogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsgfVxufTtcbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHtFbnRlck5vZGV9IGZyb20gXCIuL2VudGVyXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4uL2NvbnN0YW50XCI7XG5cbnZhciBrZXlQcmVmaXggPSBcIiRcIjsgLy8gUHJvdGVjdCBhZ2FpbnN0IGtleXMgbGlrZSDigJxfX3Byb3RvX1/igJ0uXG5cbmZ1bmN0aW9uIGJpbmRJbmRleChwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhKSB7XG4gIHZhciBpID0gMCxcbiAgICAgIG5vZGUsXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZml0IGludG8gdXBkYXRlLlxuICAvLyBQdXQgYW55IG51bGwgbm9kZXMgaW50byBlbnRlci5cbiAgLy8gUHV0IGFueSByZW1haW5pbmcgZGF0YSBpbnRvIGVudGVyLlxuICBmb3IgKDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGRvbuKAmXQgZml0IGludG8gZXhpdC5cbiAgZm9yICg7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRLZXkocGFyZW50LCBncm91cCwgZW50ZXIsIHVwZGF0ZSwgZXhpdCwgZGF0YSwga2V5KSB7XG4gIHZhciBpLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVCeUtleVZhbHVlID0ge30sXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgIGtleVZhbHVlcyA9IG5ldyBBcnJheShncm91cExlbmd0aCksXG4gICAgICBrZXlWYWx1ZTtcblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggbm9kZS5cbiAgLy8gSWYgbXVsdGlwbGUgbm9kZXMgaGF2ZSB0aGUgc2FtZSBrZXksIHRoZSBkdXBsaWNhdGVzIGFyZSBhZGRlZCB0byBleGl0LlxuICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIGtleVZhbHVlc1tpXSA9IGtleVZhbHVlID0ga2V5UHJlZml4ICsga2V5LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgICAgaWYgKGtleVZhbHVlIGluIG5vZGVCeUtleVZhbHVlKSB7XG4gICAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggZGF0dW0uXG4gIC8vIElmIHRoZXJlIGEgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXksIGpvaW4gYW5kIGFkZCBpdCB0byB1cGRhdGUuXG4gIC8vIElmIHRoZXJlIGlzIG5vdCAob3IgdGhlIGtleSBpcyBhIGR1cGxpY2F0ZSksIGFkZCBpdCB0byBlbnRlci5cbiAgZm9yIChpID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGtleVZhbHVlID0ga2V5UHJlZml4ICsga2V5LmNhbGwocGFyZW50LCBkYXRhW2ldLCBpLCBkYXRhKTtcbiAgICBpZiAobm9kZSA9IG5vZGVCeUtleVZhbHVlW2tleVZhbHVlXSkge1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGFueSByZW1haW5pbmcgbm9kZXMgdGhhdCB3ZXJlIG5vdCBib3VuZCB0byBkYXRhIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZXNbaV1dID09PSBub2RlKSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIGRhdGEgPSBuZXcgQXJyYXkodGhpcy5zaXplKCkpLCBqID0gLTE7XG4gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKGQpIHsgZGF0YVsrK2pdID0gZDsgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgYmluZCA9IGtleSA/IGJpbmRLZXkgOiBiaW5kSW5kZXgsXG4gICAgICBwYXJlbnRzID0gdGhpcy5fcGFyZW50cyxcbiAgICAgIGdyb3VwcyA9IHRoaXMuX2dyb3VwcztcblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHZhbHVlID0gY29uc3RhbnQodmFsdWUpO1xuXG4gIGZvciAodmFyIG0gPSBncm91cHMubGVuZ3RoLCB1cGRhdGUgPSBuZXcgQXJyYXkobSksIGVudGVyID0gbmV3IEFycmF5KG0pLCBleGl0ID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIHZhciBwYXJlbnQgPSBwYXJlbnRzW2pdLFxuICAgICAgICBncm91cCA9IGdyb3Vwc1tqXSxcbiAgICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICAgIGRhdGEgPSB2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cyksXG4gICAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgZW50ZXJHcm91cCA9IGVudGVyW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICB1cGRhdGVHcm91cCA9IHVwZGF0ZVtqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgZXhpdEdyb3VwID0gZXhpdFtqXSA9IG5ldyBBcnJheShncm91cExlbmd0aCk7XG5cbiAgICBiaW5kKHBhcmVudCwgZ3JvdXAsIGVudGVyR3JvdXAsIHVwZGF0ZUdyb3VwLCBleGl0R3JvdXAsIGRhdGEsIGtleSk7XG5cbiAgICAvLyBOb3cgY29ubmVjdCB0aGUgZW50ZXIgbm9kZXMgdG8gdGhlaXIgZm9sbG93aW5nIHVwZGF0ZSBub2RlLCBzdWNoIHRoYXRcbiAgICAvLyBhcHBlbmRDaGlsZCBjYW4gaW5zZXJ0IHRoZSBtYXRlcmlhbGl6ZWQgZW50ZXIgbm9kZSBiZWZvcmUgdGhpcyBub2RlLFxuICAgIC8vIHJhdGhlciB0aGFuIGF0IHRoZSBlbmQgb2YgdGhlIHBhcmVudCBub2RlLlxuICAgIGZvciAodmFyIGkwID0gMCwgaTEgPSAwLCBwcmV2aW91cywgbmV4dDsgaTAgPCBkYXRhTGVuZ3RoOyArK2kwKSB7XG4gICAgICBpZiAocHJldmlvdXMgPSBlbnRlckdyb3VwW2kwXSkge1xuICAgICAgICBpZiAoaTAgPj0gaTEpIGkxID0gaTAgKyAxO1xuICAgICAgICB3aGlsZSAoIShuZXh0ID0gdXBkYXRlR3JvdXBbaTFdKSAmJiArK2kxIDwgZGF0YUxlbmd0aCk7XG4gICAgICAgIHByZXZpb3VzLl9uZXh0ID0gbmV4dCB8fCBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZSA9IG5ldyBTZWxlY3Rpb24odXBkYXRlLCBwYXJlbnRzKTtcbiAgdXBkYXRlLl9lbnRlciA9IGVudGVyO1xuICB1cGRhdGUuX2V4aXQgPSBleGl0O1xuICByZXR1cm4gdXBkYXRlO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVOb2RlKGEsIGIpIHtcbiAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzb3J0Z3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzb3J0Z3JvdXBbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0Z3JvdXAuc29ydChjb21wYXJlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzb3J0Z3JvdXBzLCB0aGlzLl9wYXJlbnRzKS5vcmRlcigpO1xufVxuXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuLi9uYW1lc3BhY2VcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7XG4gICAgcmV0dXJuIGZ1bGxuYW1lLmxvY2FsXG4gICAgICAgID8gbm9kZS5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpXG4gICAgICAgIDogbm9kZS5nZXRBdHRyaWJ1dGUoZnVsbG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbilcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKSkoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvd1wiO1xuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gICAgZWxzZSB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHYsIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgICAgPyB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgICAgICAgID8gc3R5bGVSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyBzdHlsZUZ1bmN0aW9uXG4gICAgICAgICAgICA6IHN0eWxlQ29uc3RhbnQpKG5hbWUsIHZhbHVlLCBwcmlvcml0eSA9PSBudWxsID8gXCJcIiA6IHByaW9yaXR5KSlcbiAgICAgIDogc3R5bGVWYWx1ZSh0aGlzLm5vZGUoKSwgbmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHlsZVZhbHVlKG5vZGUsIG5hbWUpIHtcbiAgcmV0dXJuIG5vZGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKVxuICAgICAgfHwgZGVmYXVsdFZpZXcobm9kZSkuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpO1xufVxuIiwiZnVuY3Rpb24gcHJvcGVydHlSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZGVsZXRlIHRoaXNbbmFtZV07XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5Q29uc3RhbnQobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXNbbmFtZV0gPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIGRlbGV0ZSB0aGlzW25hbWVdO1xuICAgIGVsc2UgdGhpc1tuYW1lXSA9IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgICAgPyB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IHByb3BlcnR5UmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHByb3BlcnR5RnVuY3Rpb25cbiAgICAgICAgICA6IHByb3BlcnR5Q29uc3RhbnQpKG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKClbbmFtZV07XG59XG4iLCJmdW5jdGlvbiBjbGFzc0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnRyaW0oKS5zcGxpdCgvXnxcXHMrLyk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzTGlzdChub2RlKSB7XG4gIHJldHVybiBub2RlLmNsYXNzTGlzdCB8fCBuZXcgQ2xhc3NMaXN0KG5vZGUpO1xufVxuXG5mdW5jdGlvbiBDbGFzc0xpc3Qobm9kZSkge1xuICB0aGlzLl9ub2RlID0gbm9kZTtcbiAgdGhpcy5fbmFtZXMgPSBjbGFzc0FycmF5KG5vZGUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIik7XG59XG5cbkNsYXNzTGlzdC5wcm90b3R5cGUgPSB7XG4gIGFkZDogZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICBpZiAoaSA8IDApIHtcbiAgICAgIHRoaXMuX25hbWVzLnB1c2gobmFtZSk7XG4gICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcbiAgICB9XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5zcGxpY2UoaSwgMSk7XG4gICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcbiAgICB9XG4gIH0sXG4gIGNvbnRhaW5zOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSkgPj0gMDtcbiAgfVxufTtcblxuZnVuY3Rpb24gY2xhc3NlZEFkZChub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5hZGQobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkUmVtb3ZlKG5vZGUsIG5hbWVzKSB7XG4gIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBsaXN0LnJlbW92ZShuYW1lc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRUcnVlKG5hbWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjbGFzc2VkQWRkKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZEZhbHNlKG5hbWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjbGFzc2VkUmVtb3ZlKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZEZ1bmN0aW9uKG5hbWVzLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgKHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgPyBjbGFzc2VkQWRkIDogY2xhc3NlZFJlbW92ZSkodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgbmFtZXMgPSBjbGFzc0FycmF5KG5hbWUgKyBcIlwiKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgbGlzdCA9IGNsYXNzTGlzdCh0aGlzLm5vZGUoKSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFsaXN0LmNvbnRhaW5zKG5hbWVzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gY2xhc3NlZEZ1bmN0aW9uIDogdmFsdWVcbiAgICAgID8gY2xhc3NlZFRydWVcbiAgICAgIDogY2xhc3NlZEZhbHNlKShuYW1lcywgdmFsdWUpKTtcbn1cbiIsImZ1bmN0aW9uIHRleHRSZW1vdmUoKSB7XG4gIHRoaXMudGV4dENvbnRlbnQgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiB0ZXh0Q29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGV4dEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHYgPT0gbnVsbCA/IFwiXCIgOiB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gdGV4dFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gdGV4dEZ1bmN0aW9uXG4gICAgICAgICAgOiB0ZXh0Q29uc3RhbnQpKHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKCkudGV4dENvbnRlbnQ7XG59XG4iLCJmdW5jdGlvbiBodG1sUmVtb3ZlKCkge1xuICB0aGlzLmlubmVySFRNTCA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGh0bWxDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pbm5lckhUTUwgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaHRtbEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdGhpcy5pbm5lckhUTUwgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IGh0bWxSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGh0bWxGdW5jdGlvblxuICAgICAgICAgIDogaHRtbENvbnN0YW50KSh2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpLmlubmVySFRNTDtcbn1cbiIsImZ1bmN0aW9uIHJhaXNlKCkge1xuICBpZiAodGhpcy5uZXh0U2libGluZykgdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyYWlzZSk7XG59XG4iLCJmdW5jdGlvbiBsb3dlcigpIHtcbiAgaWYgKHRoaXMucHJldmlvdXNTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsIHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gobG93ZXIpO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3JcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3JcIjtcblxuZnVuY3Rpb24gY29uc3RhbnROdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgYmVmb3JlKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSksXG4gICAgICBzZWxlY3QgPSBiZWZvcmUgPT0gbnVsbCA/IGNvbnN0YW50TnVsbCA6IHR5cGVvZiBiZWZvcmUgPT09IFwiZnVuY3Rpb25cIiA/IGJlZm9yZSA6IHNlbGVjdG9yKGJlZm9yZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyZW1vdmUpO1xufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3dcIjtcblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChub2RlLCB0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIHdpbmRvdyA9IGRlZmF1bHRWaWV3KG5vZGUpLFxuICAgICAgZXZlbnQgPSB3aW5kb3cuQ3VzdG9tRXZlbnQ7XG5cbiAgaWYgKHR5cGVvZiBldmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZXZlbnQgPSBuZXcgZXZlbnQodHlwZSwgcGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBldmVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgIGlmIChwYXJhbXMpIGV2ZW50LmluaXRFdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUpLCBldmVudC5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICAgIGVsc2UgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaENvbnN0YW50KHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hGdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBkaXNwYXRjaEZ1bmN0aW9uXG4gICAgICA6IGRpc3BhdGNoQ29uc3RhbnQpKHR5cGUsIHBhcmFtcykpO1xufVxuIiwiaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdEFsbCBmcm9tIFwiLi9zZWxlY3RBbGxcIjtcbmltcG9ydCBzZWxlY3Rpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlclwiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXRhIGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW50ZXIgZnJvbSBcIi4vZW50ZXJcIjtcbmltcG9ydCBzZWxlY3Rpb25fZXhpdCBmcm9tIFwiLi9leGl0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29yZGVyIGZyb20gXCIuL29yZGVyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NvcnQgZnJvbSBcIi4vc29ydFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9jYWxsIGZyb20gXCIuL2NhbGxcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZXMgZnJvbSBcIi4vbm9kZXNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZSBmcm9tIFwiLi9ub2RlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NpemUgZnJvbSBcIi4vc2l6ZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbXB0eSBmcm9tIFwiLi9lbXB0eVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lYWNoIGZyb20gXCIuL2VhY2hcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXR0ciBmcm9tIFwiLi9hdHRyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3N0eWxlIGZyb20gXCIuL3N0eWxlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3Byb3BlcnR5IGZyb20gXCIuL3Byb3BlcnR5XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NsYXNzZWQgZnJvbSBcIi4vY2xhc3NlZFwiO1xuaW1wb3J0IHNlbGVjdGlvbl90ZXh0IGZyb20gXCIuL3RleHRcIjtcbmltcG9ydCBzZWxlY3Rpb25faHRtbCBmcm9tIFwiLi9odG1sXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JhaXNlIGZyb20gXCIuL3JhaXNlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2xvd2VyIGZyb20gXCIuL2xvd2VyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2FwcGVuZCBmcm9tIFwiLi9hcHBlbmRcIjtcbmltcG9ydCBzZWxlY3Rpb25faW5zZXJ0IGZyb20gXCIuL2luc2VydFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdHVtIGZyb20gXCIuL2RhdHVtXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29uIGZyb20gXCIuL29uXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2Rpc3BhdGNoIGZyb20gXCIuL2Rpc3BhdGNoXCI7XG5cbmV4cG9ydCB2YXIgcm9vdCA9IFtudWxsXTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdGlvbihncm91cHMsIHBhcmVudHMpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLCByb290KTtcbn1cblxuU2VsZWN0aW9uLnByb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBTZWxlY3Rpb24sXG4gIHNlbGVjdDogc2VsZWN0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiBzZWxlY3Rpb25fc2VsZWN0QWxsLFxuICBmaWx0ZXI6IHNlbGVjdGlvbl9maWx0ZXIsXG4gIGRhdGE6IHNlbGVjdGlvbl9kYXRhLFxuICBlbnRlcjogc2VsZWN0aW9uX2VudGVyLFxuICBleGl0OiBzZWxlY3Rpb25fZXhpdCxcbiAgbWVyZ2U6IHNlbGVjdGlvbl9tZXJnZSxcbiAgb3JkZXI6IHNlbGVjdGlvbl9vcmRlcixcbiAgc29ydDogc2VsZWN0aW9uX3NvcnQsXG4gIGNhbGw6IHNlbGVjdGlvbl9jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX25vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fbm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3NpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9lYWNoLFxuICBhdHRyOiBzZWxlY3Rpb25fYXR0cixcbiAgc3R5bGU6IHNlbGVjdGlvbl9zdHlsZSxcbiAgcHJvcGVydHk6IHNlbGVjdGlvbl9wcm9wZXJ0eSxcbiAgY2xhc3NlZDogc2VsZWN0aW9uX2NsYXNzZWQsXG4gIHRleHQ6IHNlbGVjdGlvbl90ZXh0LFxuICBodG1sOiBzZWxlY3Rpb25faHRtbCxcbiAgcmFpc2U6IHNlbGVjdGlvbl9yYWlzZSxcbiAgbG93ZXI6IHNlbGVjdGlvbl9sb3dlcixcbiAgYXBwZW5kOiBzZWxlY3Rpb25fYXBwZW5kLFxuICBpbnNlcnQ6IHNlbGVjdGlvbl9pbnNlcnQsXG4gIHJlbW92ZTogc2VsZWN0aW9uX3JlbW92ZSxcbiAgZGF0dW06IHNlbGVjdGlvbl9kYXR1bSxcbiAgb246IHNlbGVjdGlvbl9vbixcbiAgZGlzcGF0Y2g6IHNlbGVjdGlvbl9kaXNwYXRjaFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0aW9uO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29uc3RydWN0b3IsIGZhY3RvcnksIHByb3RvdHlwZSkge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBmYWN0b3J5LnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgcHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQocGFyZW50LCBkZWZpbml0aW9uKSB7XG4gIHZhciBwcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHBhcmVudC5wcm90b3R5cGUpO1xuICBmb3IgKHZhciBrZXkgaW4gZGVmaW5pdGlvbikgcHJvdG90eXBlW2tleV0gPSBkZWZpbml0aW9uW2tleV07XG4gIHJldHVybiBwcm90b3R5cGU7XG59XG4iLCJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmVcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIENvbG9yKCkge31cblxuZXhwb3J0IHZhciBkYXJrZXIgPSAwLjc7XG5leHBvcnQgdmFyIGJyaWdodGVyID0gMSAvIGRhcmtlcjtcblxudmFyIHJlSSA9IFwiXFxcXHMqKFsrLV0/XFxcXGQrKVxcXFxzKlwiLFxuICAgIHJlTiA9IFwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pXFxcXHMqXCIsXG4gICAgcmVQID0gXCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPyklXFxcXHMqXCIsXG4gICAgcmVIZXgzID0gL14jKFswLTlhLWZdezN9KSQvLFxuICAgIHJlSGV4NiA9IC9eIyhbMC05YS1mXXs2fSkkLyxcbiAgICByZVJnYkludGVnZXIgPSBuZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIgKyBbcmVJLCByZUksIHJlSV0gKyBcIlxcXFwpJFwiKSxcbiAgICByZVJnYlBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIgKyBbcmVQLCByZVAsIHJlUF0gKyBcIlxcXFwpJFwiKSxcbiAgICByZVJnYmFJbnRlZ2VyID0gbmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIiArIFtyZUksIHJlSSwgcmVJLCByZU5dICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JhUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIgKyBbcmVQLCByZVAsIHJlUCwgcmVOXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlSHNsUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJeaHNsXFxcXChcIiArIFtyZU4sIHJlUCwgcmVQXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlSHNsYVBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXmhzbGFcXFxcKFwiICsgW3JlTiwgcmVQLCByZVAsIHJlTl0gKyBcIlxcXFwpJFwiKTtcblxudmFyIG5hbWVkID0ge1xuICBhbGljZWJsdWU6IDB4ZjBmOGZmLFxuICBhbnRpcXVld2hpdGU6IDB4ZmFlYmQ3LFxuICBhcXVhOiAweDAwZmZmZixcbiAgYXF1YW1hcmluZTogMHg3ZmZmZDQsXG4gIGF6dXJlOiAweGYwZmZmZixcbiAgYmVpZ2U6IDB4ZjVmNWRjLFxuICBiaXNxdWU6IDB4ZmZlNGM0LFxuICBibGFjazogMHgwMDAwMDAsXG4gIGJsYW5jaGVkYWxtb25kOiAweGZmZWJjZCxcbiAgYmx1ZTogMHgwMDAwZmYsXG4gIGJsdWV2aW9sZXQ6IDB4OGEyYmUyLFxuICBicm93bjogMHhhNTJhMmEsXG4gIGJ1cmx5d29vZDogMHhkZWI4ODcsXG4gIGNhZGV0Ymx1ZTogMHg1ZjllYTAsXG4gIGNoYXJ0cmV1c2U6IDB4N2ZmZjAwLFxuICBjaG9jb2xhdGU6IDB4ZDI2OTFlLFxuICBjb3JhbDogMHhmZjdmNTAsXG4gIGNvcm5mbG93ZXJibHVlOiAweDY0OTVlZCxcbiAgY29ybnNpbGs6IDB4ZmZmOGRjLFxuICBjcmltc29uOiAweGRjMTQzYyxcbiAgY3lhbjogMHgwMGZmZmYsXG4gIGRhcmtibHVlOiAweDAwMDA4YixcbiAgZGFya2N5YW46IDB4MDA4YjhiLFxuICBkYXJrZ29sZGVucm9kOiAweGI4ODYwYixcbiAgZGFya2dyYXk6IDB4YTlhOWE5LFxuICBkYXJrZ3JlZW46IDB4MDA2NDAwLFxuICBkYXJrZ3JleTogMHhhOWE5YTksXG4gIGRhcmtraGFraTogMHhiZGI3NmIsXG4gIGRhcmttYWdlbnRhOiAweDhiMDA4YixcbiAgZGFya29saXZlZ3JlZW46IDB4NTU2YjJmLFxuICBkYXJrb3JhbmdlOiAweGZmOGMwMCxcbiAgZGFya29yY2hpZDogMHg5OTMyY2MsXG4gIGRhcmtyZWQ6IDB4OGIwMDAwLFxuICBkYXJrc2FsbW9uOiAweGU5OTY3YSxcbiAgZGFya3NlYWdyZWVuOiAweDhmYmM4ZixcbiAgZGFya3NsYXRlYmx1ZTogMHg0ODNkOGIsXG4gIGRhcmtzbGF0ZWdyYXk6IDB4MmY0ZjRmLFxuICBkYXJrc2xhdGVncmV5OiAweDJmNGY0ZixcbiAgZGFya3R1cnF1b2lzZTogMHgwMGNlZDEsXG4gIGRhcmt2aW9sZXQ6IDB4OTQwMGQzLFxuICBkZWVwcGluazogMHhmZjE0OTMsXG4gIGRlZXBza3libHVlOiAweDAwYmZmZixcbiAgZGltZ3JheTogMHg2OTY5NjksXG4gIGRpbWdyZXk6IDB4Njk2OTY5LFxuICBkb2RnZXJibHVlOiAweDFlOTBmZixcbiAgZmlyZWJyaWNrOiAweGIyMjIyMixcbiAgZmxvcmFsd2hpdGU6IDB4ZmZmYWYwLFxuICBmb3Jlc3RncmVlbjogMHgyMjhiMjIsXG4gIGZ1Y2hzaWE6IDB4ZmYwMGZmLFxuICBnYWluc2Jvcm86IDB4ZGNkY2RjLFxuICBnaG9zdHdoaXRlOiAweGY4ZjhmZixcbiAgZ29sZDogMHhmZmQ3MDAsXG4gIGdvbGRlbnJvZDogMHhkYWE1MjAsXG4gIGdyYXk6IDB4ODA4MDgwLFxuICBncmVlbjogMHgwMDgwMDAsXG4gIGdyZWVueWVsbG93OiAweGFkZmYyZixcbiAgZ3JleTogMHg4MDgwODAsXG4gIGhvbmV5ZGV3OiAweGYwZmZmMCxcbiAgaG90cGluazogMHhmZjY5YjQsXG4gIGluZGlhbnJlZDogMHhjZDVjNWMsXG4gIGluZGlnbzogMHg0YjAwODIsXG4gIGl2b3J5OiAweGZmZmZmMCxcbiAga2hha2k6IDB4ZjBlNjhjLFxuICBsYXZlbmRlcjogMHhlNmU2ZmEsXG4gIGxhdmVuZGVyYmx1c2g6IDB4ZmZmMGY1LFxuICBsYXduZ3JlZW46IDB4N2NmYzAwLFxuICBsZW1vbmNoaWZmb246IDB4ZmZmYWNkLFxuICBsaWdodGJsdWU6IDB4YWRkOGU2LFxuICBsaWdodGNvcmFsOiAweGYwODA4MCxcbiAgbGlnaHRjeWFuOiAweGUwZmZmZixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IDB4ZmFmYWQyLFxuICBsaWdodGdyYXk6IDB4ZDNkM2QzLFxuICBsaWdodGdyZWVuOiAweDkwZWU5MCxcbiAgbGlnaHRncmV5OiAweGQzZDNkMyxcbiAgbGlnaHRwaW5rOiAweGZmYjZjMSxcbiAgbGlnaHRzYWxtb246IDB4ZmZhMDdhLFxuICBsaWdodHNlYWdyZWVuOiAweDIwYjJhYSxcbiAgbGlnaHRza3libHVlOiAweDg3Y2VmYSxcbiAgbGlnaHRzbGF0ZWdyYXk6IDB4Nzc4ODk5LFxuICBsaWdodHNsYXRlZ3JleTogMHg3Nzg4OTksXG4gIGxpZ2h0c3RlZWxibHVlOiAweGIwYzRkZSxcbiAgbGlnaHR5ZWxsb3c6IDB4ZmZmZmUwLFxuICBsaW1lOiAweDAwZmYwMCxcbiAgbGltZWdyZWVuOiAweDMyY2QzMixcbiAgbGluZW46IDB4ZmFmMGU2LFxuICBtYWdlbnRhOiAweGZmMDBmZixcbiAgbWFyb29uOiAweDgwMDAwMCxcbiAgbWVkaXVtYXF1YW1hcmluZTogMHg2NmNkYWEsXG4gIG1lZGl1bWJsdWU6IDB4MDAwMGNkLFxuICBtZWRpdW1vcmNoaWQ6IDB4YmE1NWQzLFxuICBtZWRpdW1wdXJwbGU6IDB4OTM3MGRiLFxuICBtZWRpdW1zZWFncmVlbjogMHgzY2IzNzEsXG4gIG1lZGl1bXNsYXRlYmx1ZTogMHg3YjY4ZWUsXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiAweDAwZmE5YSxcbiAgbWVkaXVtdHVycXVvaXNlOiAweDQ4ZDFjYyxcbiAgbWVkaXVtdmlvbGV0cmVkOiAweGM3MTU4NSxcbiAgbWlkbmlnaHRibHVlOiAweDE5MTk3MCxcbiAgbWludGNyZWFtOiAweGY1ZmZmYSxcbiAgbWlzdHlyb3NlOiAweGZmZTRlMSxcbiAgbW9jY2FzaW46IDB4ZmZlNGI1LFxuICBuYXZham93aGl0ZTogMHhmZmRlYWQsXG4gIG5hdnk6IDB4MDAwMDgwLFxuICBvbGRsYWNlOiAweGZkZjVlNixcbiAgb2xpdmU6IDB4ODA4MDAwLFxuICBvbGl2ZWRyYWI6IDB4NmI4ZTIzLFxuICBvcmFuZ2U6IDB4ZmZhNTAwLFxuICBvcmFuZ2VyZWQ6IDB4ZmY0NTAwLFxuICBvcmNoaWQ6IDB4ZGE3MGQ2LFxuICBwYWxlZ29sZGVucm9kOiAweGVlZThhYSxcbiAgcGFsZWdyZWVuOiAweDk4ZmI5OCxcbiAgcGFsZXR1cnF1b2lzZTogMHhhZmVlZWUsXG4gIHBhbGV2aW9sZXRyZWQ6IDB4ZGI3MDkzLFxuICBwYXBheWF3aGlwOiAweGZmZWZkNSxcbiAgcGVhY2hwdWZmOiAweGZmZGFiOSxcbiAgcGVydTogMHhjZDg1M2YsXG4gIHBpbms6IDB4ZmZjMGNiLFxuICBwbHVtOiAweGRkYTBkZCxcbiAgcG93ZGVyYmx1ZTogMHhiMGUwZTYsXG4gIHB1cnBsZTogMHg4MDAwODAsXG4gIHJlYmVjY2FwdXJwbGU6IDB4NjYzMzk5LFxuICByZWQ6IDB4ZmYwMDAwLFxuICByb3N5YnJvd246IDB4YmM4ZjhmLFxuICByb3lhbGJsdWU6IDB4NDE2OWUxLFxuICBzYWRkbGVicm93bjogMHg4YjQ1MTMsXG4gIHNhbG1vbjogMHhmYTgwNzIsXG4gIHNhbmR5YnJvd246IDB4ZjRhNDYwLFxuICBzZWFncmVlbjogMHgyZThiNTcsXG4gIHNlYXNoZWxsOiAweGZmZjVlZSxcbiAgc2llbm5hOiAweGEwNTIyZCxcbiAgc2lsdmVyOiAweGMwYzBjMCxcbiAgc2t5Ymx1ZTogMHg4N2NlZWIsXG4gIHNsYXRlYmx1ZTogMHg2YTVhY2QsXG4gIHNsYXRlZ3JheTogMHg3MDgwOTAsXG4gIHNsYXRlZ3JleTogMHg3MDgwOTAsXG4gIHNub3c6IDB4ZmZmYWZhLFxuICBzcHJpbmdncmVlbjogMHgwMGZmN2YsXG4gIHN0ZWVsYmx1ZTogMHg0NjgyYjQsXG4gIHRhbjogMHhkMmI0OGMsXG4gIHRlYWw6IDB4MDA4MDgwLFxuICB0aGlzdGxlOiAweGQ4YmZkOCxcbiAgdG9tYXRvOiAweGZmNjM0NyxcbiAgdHVycXVvaXNlOiAweDQwZTBkMCxcbiAgdmlvbGV0OiAweGVlODJlZSxcbiAgd2hlYXQ6IDB4ZjVkZWIzLFxuICB3aGl0ZTogMHhmZmZmZmYsXG4gIHdoaXRlc21va2U6IDB4ZjVmNWY1LFxuICB5ZWxsb3c6IDB4ZmZmZjAwLFxuICB5ZWxsb3dncmVlbjogMHg5YWNkMzJcbn07XG5cbmRlZmluZShDb2xvciwgY29sb3IsIHtcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCk7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKSArIFwiXCI7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb2xvcihmb3JtYXQpIHtcbiAgdmFyIG07XG4gIGZvcm1hdCA9IChmb3JtYXQgKyBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIChtID0gcmVIZXgzLmV4ZWMoZm9ybWF0KSkgPyAobSA9IHBhcnNlSW50KG1bMV0sIDE2KSwgbmV3IFJnYigobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweDBmMCksIChtID4+IDQgJiAweGYpIHwgKG0gJiAweGYwKSwgKChtICYgMHhmKSA8PCA0KSB8IChtICYgMHhmKSwgMSkpIC8vICNmMDBcbiAgICAgIDogKG0gPSByZUhleDYuZXhlYyhmb3JtYXQpKSA/IHJnYm4ocGFyc2VJbnQobVsxXSwgMTYpKSAvLyAjZmYwMDAwXG4gICAgICA6IChtID0gcmVSZ2JJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0sIG1bMl0sIG1bM10sIDEpIC8vIHJnYigyNTUsIDAsIDApXG4gICAgICA6IChtID0gcmVSZ2JQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIDEpIC8vIHJnYigxMDAlLCAwJSwgMCUpXG4gICAgICA6IChtID0gcmVSZ2JhSW50ZWdlci5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdLCBtWzJdLCBtWzNdLCBtWzRdKSAvLyByZ2JhKDI1NSwgMCwgMCwgMSlcbiAgICAgIDogKG0gPSByZVJnYmFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIG1bNF0pIC8vIHJnYigxMDAlLCAwJSwgMCUsIDEpXG4gICAgICA6IChtID0gcmVIc2xQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIDEpIC8vIGhzbCgxMjAsIDUwJSwgNTAlKVxuICAgICAgOiAobSA9IHJlSHNsYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgbVs0XSkgLy8gaHNsYSgxMjAsIDUwJSwgNTAlLCAxKVxuICAgICAgOiBuYW1lZC5oYXNPd25Qcm9wZXJ0eShmb3JtYXQpID8gcmdibihuYW1lZFtmb3JtYXRdKVxuICAgICAgOiBmb3JtYXQgPT09IFwidHJhbnNwYXJlbnRcIiA/IG5ldyBSZ2IoTmFOLCBOYU4sIE5hTiwgMClcbiAgICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gcmdibihuKSB7XG4gIHJldHVybiBuZXcgUmdiKG4gPj4gMTYgJiAweGZmLCBuID4+IDggJiAweGZmLCBuICYgMHhmZiwgMSk7XG59XG5cbmZ1bmN0aW9uIHJnYmEociwgZywgYiwgYSkge1xuICBpZiAoYSA8PSAwKSByID0gZyA9IGIgPSBOYU47XG4gIHJldHVybiBuZXcgUmdiKHIsIGcsIGIsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiQ29udmVydChvKSB7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcbiAgaWYgKCFvKSByZXR1cm4gbmV3IFJnYjtcbiAgbyA9IG8ucmdiKCk7XG4gIHJldHVybiBuZXcgUmdiKG8uciwgby5nLCBvLmIsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IHJnYkNvbnZlcnQocikgOiBuZXcgUmdiKHIsIGcsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMuciA9ICtyO1xuICB0aGlzLmcgPSArZztcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoUmdiLCByZ2IsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgwIDw9IHRoaXMuciAmJiB0aGlzLnIgPD0gMjU1KVxuICAgICAgICAmJiAoMCA8PSB0aGlzLmcgJiYgdGhpcy5nIDw9IDI1NSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5iICYmIHRoaXMuYiA8PSAyNTUpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSA9IHRoaXMub3BhY2l0eTsgYSA9IGlzTmFOKGEpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcbiAgICByZXR1cm4gKGEgPT09IDEgPyBcInJnYihcIiA6IFwicmdiYShcIilcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5yKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5nKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5iKSB8fCAwKSlcbiAgICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbiAgfVxufSkpO1xuXG5mdW5jdGlvbiBoc2xhKGgsIHMsIGwsIGEpIHtcbiAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xuICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgZWxzZSBpZiAocyA8PSAwKSBoID0gTmFOO1xuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG5ldyBIc2woby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgSHNsO1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG87XG4gIG8gPSBvLnJnYigpO1xuICB2YXIgciA9IG8uciAvIDI1NSxcbiAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICBiID0gby5iIC8gMjU1LFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGggPSBOYU4sXG4gICAgICBzID0gbWF4IC0gbWluLFxuICAgICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKHMpIHtcbiAgICBpZiAociA9PT0gbWF4KSBoID0gKGcgLSBiKSAvIHMgKyAoZyA8IGIpICogNjtcbiAgICBlbHNlIGlmIChnID09PSBtYXgpIGggPSAoYiAtIHIpIC8gcyArIDI7XG4gICAgZWxzZSBoID0gKHIgLSBnKSAvIHMgKyA0O1xuICAgIHMgLz0gbCA8IDAuNSA/IG1heCArIG1pbiA6IDIgLSBtYXggLSBtaW47XG4gICAgaCAqPSA2MDtcbiAgfSBlbHNlIHtcbiAgICBzID0gbCA+IDAgJiYgbCA8IDEgPyAwIDogaDtcbiAgfVxuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoc2xDb252ZXJ0KGgpIDogbmV3IEhzbChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIEhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSHNsLCBoc2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGggPSB0aGlzLmggJSAzNjAgKyAodGhpcy5oIDwgMCkgKiAzNjAsXG4gICAgICAgIHMgPSBpc05hTihoKSB8fCBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyxcbiAgICAgICAgbCA9IHRoaXMubCxcbiAgICAgICAgbTIgPSBsICsgKGwgPCAwLjUgPyBsIDogMSAtIGwpICogcyxcbiAgICAgICAgbTEgPSAyICogbCAtIG0yO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgaHNsMnJnYihoID49IDI0MCA/IGggLSAyNDAgOiBoICsgMTIwLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoIDwgMTIwID8gaCArIDI0MCA6IGggLSAxMjAsIG0xLCBtMiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgwIDw9IHRoaXMucyAmJiB0aGlzLnMgPD0gMSB8fCBpc05hTih0aGlzLnMpKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLmwgJiYgdGhpcy5sIDw9IDEpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH1cbn0pKTtcblxuLyogRnJvbSBGdkQgMTMuMzcsIENTUyBDb2xvciBNb2R1bGUgTGV2ZWwgMyAqL1xuZnVuY3Rpb24gaHNsMnJnYihoLCBtMSwgbTIpIHtcbiAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MFxuICAgICAgOiBoIDwgMTgwID8gbTJcbiAgICAgIDogaCA8IDI0MCA/IG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjBcbiAgICAgIDogbTEpICogMjU1O1xufVxuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2J9IGZyb20gXCIuL2NvbG9yXCI7XG5pbXBvcnQge2RlZzJyYWQsIHJhZDJkZWd9IGZyb20gXCIuL21hdGhcIjtcblxudmFyIEtuID0gMTgsXG4gICAgWG4gPSAwLjk1MDQ3MCwgLy8gRDY1IHN0YW5kYXJkIHJlZmVyZW50XG4gICAgWW4gPSAxLFxuICAgIFpuID0gMS4wODg4MzAsXG4gICAgdDAgPSA0IC8gMjksXG4gICAgdDEgPSA2IC8gMjksXG4gICAgdDIgPSAzICogdDEgKiB0MSxcbiAgICB0MyA9IHQxICogdDEgKiB0MTtcblxuZnVuY3Rpb24gbGFiQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgTGFiKSByZXR1cm4gbmV3IExhYihvLmwsIG8uYSwgby5iLCBvLm9wYWNpdHkpO1xuICBpZiAobyBpbnN0YW5jZW9mIEhjbCkge1xuICAgIHZhciBoID0gby5oICogZGVnMnJhZDtcbiAgICByZXR1cm4gbmV3IExhYihvLmwsIE1hdGguY29zKGgpICogby5jLCBNYXRoLnNpbihoKSAqIG8uYywgby5vcGFjaXR5KTtcbiAgfVxuICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XG4gIHZhciBiID0gcmdiMnh5eihvLnIpLFxuICAgICAgYSA9IHJnYjJ4eXooby5nKSxcbiAgICAgIGwgPSByZ2IyeHl6KG8uYiksXG4gICAgICB4ID0geHl6MmxhYigoMC40MTI0NTY0ICogYiArIDAuMzU3NTc2MSAqIGEgKyAwLjE4MDQzNzUgKiBsKSAvIFhuKSxcbiAgICAgIHkgPSB4eXoybGFiKCgwLjIxMjY3MjkgKiBiICsgMC43MTUxNTIyICogYSArIDAuMDcyMTc1MCAqIGwpIC8gWW4pLFxuICAgICAgeiA9IHh5ejJsYWIoKDAuMDE5MzMzOSAqIGIgKyAwLjExOTE5MjAgKiBhICsgMC45NTAzMDQxICogbCkgLyBabik7XG4gIHJldHVybiBuZXcgTGFiKDExNiAqIHkgLSAxNiwgNTAwICogKHggLSB5KSwgMjAwICogKHkgLSB6KSwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBsYWJDb252ZXJ0KGwpIDogbmV3IExhYihsLCBhLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMYWIobCwgYSwgYiwgb3BhY2l0eSkge1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5hID0gK2E7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKExhYiwgbGFiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgKyBLbiAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgLSBLbiAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB5ID0gKHRoaXMubCArIDE2KSAvIDExNixcbiAgICAgICAgeCA9IGlzTmFOKHRoaXMuYSkgPyB5IDogeSArIHRoaXMuYSAvIDUwMCxcbiAgICAgICAgeiA9IGlzTmFOKHRoaXMuYikgPyB5IDogeSAtIHRoaXMuYiAvIDIwMDtcbiAgICB5ID0gWW4gKiBsYWIyeHl6KHkpO1xuICAgIHggPSBYbiAqIGxhYjJ4eXooeCk7XG4gICAgeiA9IFpuICogbGFiMnh5eih6KTtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIHh5ejJyZ2IoIDMuMjQwNDU0MiAqIHggLSAxLjUzNzEzODUgKiB5IC0gMC40OTg1MzE0ICogeiksIC8vIEQ2NSAtPiBzUkdCXG4gICAgICB4eXoycmdiKC0wLjk2OTI2NjAgKiB4ICsgMS44NzYwMTA4ICogeSArIDAuMDQxNTU2MCAqIHopLFxuICAgICAgeHl6MnJnYiggMC4wNTU2NDM0ICogeCAtIDAuMjA0MDI1OSAqIHkgKyAxLjA1NzIyNTIgKiB6KSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcblxuZnVuY3Rpb24geHl6MmxhYih0KSB7XG4gIHJldHVybiB0ID4gdDMgPyBNYXRoLnBvdyh0LCAxIC8gMykgOiB0IC8gdDIgKyB0MDtcbn1cblxuZnVuY3Rpb24gbGFiMnh5eih0KSB7XG4gIHJldHVybiB0ID4gdDEgPyB0ICogdCAqIHQgOiB0MiAqICh0IC0gdDApO1xufVxuXG5mdW5jdGlvbiB4eXoycmdiKHgpIHtcbiAgcmV0dXJuIDI1NSAqICh4IDw9IDAuMDAzMTMwOCA/IDEyLjkyICogeCA6IDEuMDU1ICogTWF0aC5wb3coeCwgMSAvIDIuNCkgLSAwLjA1NSk7XG59XG5cbmZ1bmN0aW9uIHJnYjJ4eXooeCkge1xuICByZXR1cm4gKHggLz0gMjU1KSA8PSAwLjA0MDQ1ID8geCAvIDEyLjkyIDogTWF0aC5wb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn1cblxuZnVuY3Rpb24gaGNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSGNsKSByZXR1cm4gbmV3IEhjbChvLmgsIG8uYywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgTGFiKSkgbyA9IGxhYkNvbnZlcnQobyk7XG4gIHZhciBoID0gTWF0aC5hdGFuMihvLmIsIG8uYSkgKiByYWQyZGVnO1xuICByZXR1cm4gbmV3IEhjbChoIDwgMCA/IGggKyAzNjAgOiBoLCBNYXRoLnNxcnQoby5hICogby5hICsgby5iICogby5iKSwgby5sLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGNsKGgsIGMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGgpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICB0aGlzLmggPSAraDtcbiAgdGhpcy5jID0gK2M7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKEhjbCwgaGNsLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sICsgS24gKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sIC0gS24gKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBsYWJDb252ZXJ0KHRoaXMpLnJnYigpO1xuICB9XG59KSk7XG4iLCJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmVcIjtcbmltcG9ydCB7Q29sb3IsIHJnYkNvbnZlcnQsIFJnYiwgZGFya2VyLCBicmlnaHRlcn0gZnJvbSBcIi4vY29sb3JcIjtcbmltcG9ydCB7ZGVnMnJhZCwgcmFkMmRlZ30gZnJvbSBcIi4vbWF0aFwiO1xuXG52YXIgQSA9IC0wLjE0ODYxLFxuICAgIEIgPSArMS43ODI3NyxcbiAgICBDID0gLTAuMjkyMjcsXG4gICAgRCA9IC0wLjkwNjQ5LFxuICAgIEUgPSArMS45NzI5NCxcbiAgICBFRCA9IEUgKiBELFxuICAgIEVCID0gRSAqIEIsXG4gICAgQkNfREEgPSBCICogQyAtIEQgKiBBO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXhDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBDdWJlaGVsaXgpIHJldHVybiBuZXcgQ3ViZWhlbGl4KG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICBnID0gby5nIC8gMjU1LFxuICAgICAgYiA9IG8uYiAvIDI1NSxcbiAgICAgIGwgPSAoQkNfREEgKiBiICsgRUQgKiByIC0gRUIgKiBnKSAvIChCQ19EQSArIEVEIC0gRUIpLFxuICAgICAgYmwgPSBiIC0gbCxcbiAgICAgIGsgPSAoRSAqIChnIC0gbCkgLSBDICogYmwpIC8gRCxcbiAgICAgIHMgPSBNYXRoLnNxcnQoayAqIGsgKyBibCAqIGJsKSAvIChFICogbCAqICgxIC0gbCkpLCAvLyBOYU4gaWYgbD0wIG9yIGw9MVxuICAgICAgaCA9IHMgPyBNYXRoLmF0YW4yKGssIGJsKSAqIHJhZDJkZWcgLSAxMjAgOiBOYU47XG4gIHJldHVybiBuZXcgQ3ViZWhlbGl4KGggPCAwID8gaCArIDM2MCA6IGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY3ViZWhlbGl4Q29udmVydChoKSA6IG5ldyBDdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShDdWJlaGVsaXgsIGN1YmVoZWxpeCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgQ3ViZWhlbGl4KHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IEN1YmVoZWxpeCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaCA9IGlzTmFOKHRoaXMuaCkgPyAwIDogKHRoaXMuaCArIDEyMCkgKiBkZWcycmFkLFxuICAgICAgICBsID0gK3RoaXMubCxcbiAgICAgICAgYSA9IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zICogbCAqICgxIC0gbCksXG4gICAgICAgIGNvc2ggPSBNYXRoLmNvcyhoKSxcbiAgICAgICAgc2luaCA9IE1hdGguc2luKGgpO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgMjU1ICogKGwgKyBhICogKEEgKiBjb3NoICsgQiAqIHNpbmgpKSxcbiAgICAgIDI1NSAqIChsICsgYSAqIChDICogY29zaCArIEQgKiBzaW5oKSksXG4gICAgICAyNTUgKiAobCArIGEgKiAoRSAqIGNvc2gpKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcbiIsImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuXG5mdW5jdGlvbiBsaW5lYXIoYSwgZCkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgdCAqIGQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGV4cG9uZW50aWFsKGEsIGIsIHkpIHtcbiAgcmV0dXJuIGEgPSBNYXRoLnBvdyhhLCB5KSwgYiA9IE1hdGgucG93KGIsIHkpIC0gYSwgeSA9IDEgLyB5LCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KGEgKyB0ICogYiwgeSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBodWUoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2FtbWEoeSkge1xuICByZXR1cm4gKHkgPSAreSkgPT09IDEgPyBub2dhbW1hIDogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiIC0gYSA/IGV4cG9uZW50aWFsKGEsIGIsIHkpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vZ2FtbWEoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXJcIjtcblxudmFyIHJlQSA9IC9bLStdPyg/OlxcZCtcXC4/XFxkKnxcXC4/XFxkKykoPzpbZUVdWy0rXT9cXGQrKT8vZyxcbiAgICByZUIgPSBuZXcgUmVnRXhwKHJlQS5zb3VyY2UsIFwiZ1wiKTtcblxuZnVuY3Rpb24gemVybyhiKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gb25lKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYih0KSArIFwiXCI7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGJpID0gcmVBLmxhc3RJbmRleCA9IHJlQi5sYXN0SW5kZXggPSAwLCAvLyBzY2FuIGluZGV4IGZvciBuZXh0IG51bWJlciBpbiBiXG4gICAgICBhbSwgLy8gY3VycmVudCBtYXRjaCBpbiBhXG4gICAgICBibSwgLy8gY3VycmVudCBtYXRjaCBpbiBiXG4gICAgICBicywgLy8gc3RyaW5nIHByZWNlZGluZyBjdXJyZW50IG51bWJlciBpbiBiLCBpZiBhbnlcbiAgICAgIGkgPSAtMSwgLy8gaW5kZXggaW4gc1xuICAgICAgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcblxuICAvLyBDb2VyY2UgaW5wdXRzIHRvIHN0cmluZ3MuXG4gIGEgPSBhICsgXCJcIiwgYiA9IGIgKyBcIlwiO1xuXG4gIC8vIEludGVycG9sYXRlIHBhaXJzIG9mIG51bWJlcnMgaW4gYSAmIGIuXG4gIHdoaWxlICgoYW0gPSByZUEuZXhlYyhhKSlcbiAgICAgICYmIChibSA9IHJlQi5leGVjKGIpKSkge1xuICAgIGlmICgoYnMgPSBibS5pbmRleCkgPiBiaSkgeyAvLyBhIHN0cmluZyBwcmVjZWRlcyB0aGUgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYnMgPSBiLnNsaWNlKGJpLCBicyk7XG4gICAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gICAgfVxuICAgIGlmICgoYW0gPSBhbVswXSkgPT09IChibSA9IGJtWzBdKSkgeyAvLyBudW1iZXJzIGluIGEgJiBiIG1hdGNoXG4gICAgICBpZiAoc1tpXSkgc1tpXSArPSBibTsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICAgIGVsc2Ugc1srK2ldID0gYm07XG4gICAgfSBlbHNlIHsgLy8gaW50ZXJwb2xhdGUgbm9uLW1hdGNoaW5nIG51bWJlcnNcbiAgICAgIHNbKytpXSA9IG51bGw7XG4gICAgICBxLnB1c2goe2k6IGksIHg6IG51bWJlcihhbSwgYm0pfSk7XG4gICAgfVxuICAgIGJpID0gcmVCLmxhc3RJbmRleDtcbiAgfVxuXG4gIC8vIEFkZCByZW1haW5zIG9mIGIuXG4gIGlmIChiaSA8IGIubGVuZ3RoKSB7XG4gICAgYnMgPSBiLnNsaWNlKGJpKTtcbiAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICBlbHNlIHNbKytpXSA9IGJzO1xuICB9XG5cbiAgLy8gU3BlY2lhbCBvcHRpbWl6YXRpb24gZm9yIG9ubHkgYSBzaW5nbGUgbWF0Y2guXG4gIC8vIE90aGVyd2lzZSwgaW50ZXJwb2xhdGUgZWFjaCBvZiB0aGUgbnVtYmVycyBhbmQgcmVqb2luIHRoZSBzdHJpbmcuXG4gIHJldHVybiBzLmxlbmd0aCA8IDIgPyAocVswXVxuICAgICAgPyBvbmUocVswXS54KVxuICAgICAgOiB6ZXJvKGIpKVxuICAgICAgOiAoYiA9IHEubGVuZ3RoLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG87IGkgPCBiOyArK2kpIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcbiAgICAgICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xuICAgICAgICB9KTtcbn1cbiIsImltcG9ydCBkZWNvbXBvc2UsIHtpZGVudGl0eX0gZnJvbSBcIi4vZGVjb21wb3NlXCI7XG5cbnZhciBjc3NOb2RlLFxuICAgIGNzc1Jvb3QsXG4gICAgY3NzVmlldyxcbiAgICBzdmdOb2RlO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDc3ModmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBcIm5vbmVcIikgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoIWNzc05vZGUpIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpLCBjc3NSb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBjc3NWaWV3ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gIGNzc05vZGUuc3R5bGUudHJhbnNmb3JtID0gdmFsdWU7XG4gIHZhbHVlID0gY3NzVmlldy5nZXRDb21wdXRlZFN0eWxlKGNzc1Jvb3QuYXBwZW5kQ2hpbGQoY3NzTm9kZSksIG51bGwpLmdldFByb3BlcnR5VmFsdWUoXCJ0cmFuc2Zvcm1cIik7XG4gIGNzc1Jvb3QucmVtb3ZlQ2hpbGQoY3NzTm9kZSk7XG4gIHZhbHVlID0gdmFsdWUuc2xpY2UoNywgLTEpLnNwbGl0KFwiLFwiKTtcbiAgcmV0dXJuIGRlY29tcG9zZSgrdmFsdWVbMF0sICt2YWx1ZVsxXSwgK3ZhbHVlWzJdLCArdmFsdWVbM10sICt2YWx1ZVs0XSwgK3ZhbHVlWzVdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3ZnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gaWRlbnRpdHk7XG4gIGlmICghc3ZnTm9kZSkgc3ZnTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwiZ1wiKTtcbiAgc3ZnTm9kZS5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgdmFsdWUpO1xuICBpZiAoISh2YWx1ZSA9IHN2Z05vZGUudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSkpIHJldHVybiBpZGVudGl0eTtcbiAgdmFsdWUgPSB2YWx1ZS5tYXRyaXg7XG4gIHJldHVybiBkZWNvbXBvc2UodmFsdWUuYSwgdmFsdWUuYiwgdmFsdWUuYywgdmFsdWUuZCwgdmFsdWUuZSwgdmFsdWUuZik7XG59XG4iLCJpbXBvcnQgbnVtYmVyIGZyb20gXCIuLi9udW1iZXJcIjtcbmltcG9ydCB7cGFyc2VDc3MsIHBhcnNlU3ZnfSBmcm9tIFwiLi9wYXJzZVwiO1xuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZSwgcHhDb21tYSwgcHhQYXJlbiwgZGVnUGFyZW4pIHtcblxuICBmdW5jdGlvbiBwb3Aocykge1xuICAgIHJldHVybiBzLmxlbmd0aCA/IHMucG9wKCkgKyBcIiBcIiA6IFwiXCI7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2xhdGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2goXCJ0cmFuc2xhdGUoXCIsIG51bGwsIHB4Q29tbWEsIG51bGwsIHB4UGFyZW4pO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiB8fCB5Yikge1xuICAgICAgcy5wdXNoKFwidHJhbnNsYXRlKFwiICsgeGIgKyBweENvbW1hICsgeWIgKyBweFBhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByb3RhdGUoYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBpZiAoYSAtIGIgPiAxODApIGIgKz0gMzYwOyBlbHNlIGlmIChiIC0gYSA+IDE4MCkgYSArPSAzNjA7IC8vIHNob3J0ZXN0IHBhdGhcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2tld1goYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY2FsZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiLCBudWxsLCBcIixcIiwgbnVsbCwgXCIpXCIpO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiAhPT0gMSB8fCB5YiAhPT0gMSkge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIgKyB4YiArIFwiLFwiICsgeWIgKyBcIilcIik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuICAgIGEgPSBwYXJzZShhKSwgYiA9IHBhcnNlKGIpO1xuICAgIHRyYW5zbGF0ZShhLnRyYW5zbGF0ZVgsIGEudHJhbnNsYXRlWSwgYi50cmFuc2xhdGVYLCBiLnRyYW5zbGF0ZVksIHMsIHEpO1xuICAgIHJvdGF0ZShhLnJvdGF0ZSwgYi5yb3RhdGUsIHMsIHEpO1xuICAgIHNrZXdYKGEuc2tld1gsIGIuc2tld1gsIHMsIHEpO1xuICAgIHNjYWxlKGEuc2NhbGVYLCBhLnNjYWxlWSwgYi5zY2FsZVgsIGIuc2NhbGVZLCBzLCBxKTtcbiAgICBhID0gYiA9IG51bGw7IC8vIGdjXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBpID0gLTEsIG4gPSBxLmxlbmd0aCwgbztcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MgPSBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZUNzcywgXCJweCwgXCIsIFwicHgpXCIsIFwiZGVnKVwiKTtcbmV4cG9ydCB2YXIgaW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmcgPSBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZVN2ZywgXCIsIFwiLCBcIilcIiwgXCIpXCIpO1xuIiwiaW1wb3J0IHtjdWJlaGVsaXggYXMgY29sb3JDdWJlaGVsaXh9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGNvbG9yLCB7aHVlfSBmcm9tIFwiLi9jb2xvclwiO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXgoaHVlKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gY3ViZWhlbGl4R2FtbWEoeSkge1xuICAgIHkgPSAreTtcblxuICAgIGZ1bmN0aW9uIGN1YmVoZWxpeChzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgaCA9IGh1ZSgoc3RhcnQgPSBjb2xvckN1YmVoZWxpeChzdGFydCkpLmgsIChlbmQgPSBjb2xvckN1YmVoZWxpeChlbmQpKS5oKSxcbiAgICAgICAgICBzID0gY29sb3Ioc3RhcnQucywgZW5kLnMpLFxuICAgICAgICAgIGwgPSBjb2xvcihzdGFydC5sLCBlbmQubCksXG4gICAgICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgIHN0YXJ0LmggPSBoKHQpO1xuICAgICAgICBzdGFydC5zID0gcyh0KTtcbiAgICAgICAgc3RhcnQubCA9IGwoTWF0aC5wb3codCwgeSkpO1xuICAgICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY3ViZWhlbGl4LmdhbW1hID0gY3ViZWhlbGl4R2FtbWE7XG5cbiAgICByZXR1cm4gY3ViZWhlbGl4O1xuICB9KSgxKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3ViZWhlbGl4KGh1ZSk7XG5leHBvcnQgdmFyIGN1YmVoZWxpeExvbmcgPSBjdWJlaGVsaXgoY29sb3IpO1xuIiwidmFyIGZyYW1lID0gMCwgLy8gaXMgYW4gYW5pbWF0aW9uIGZyYW1lIHBlbmRpbmc/XG4gICAgdGltZW91dCA9IDAsIC8vIGlzIGEgdGltZW91dCBwZW5kaW5nP1xuICAgIGludGVydmFsID0gMCwgLy8gYXJlIGFueSB0aW1lcnMgYWN0aXZlP1xuICAgIHBva2VEZWxheSA9IDEwMDAsIC8vIGhvdyBmcmVxdWVudGx5IHdlIGNoZWNrIGZvciBjbG9jayBza2V3XG4gICAgdGFza0hlYWQsXG4gICAgdGFza1RhaWwsXG4gICAgY2xvY2tMYXN0ID0gMCxcbiAgICBjbG9ja05vdyA9IDAsXG4gICAgY2xvY2tTa2V3ID0gMCxcbiAgICBjbG9jayA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gXCJvYmplY3RcIiAmJiBwZXJmb3JtYW5jZS5ub3cgPyBwZXJmb3JtYW5jZSA6IERhdGUsXG4gICAgc2V0RnJhbWUgPSB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSBcImZ1bmN0aW9uXCIgPyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgOiBmdW5jdGlvbihmKSB7IHNldFRpbWVvdXQoZiwgMTcpOyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gbm93KCkge1xuICByZXR1cm4gY2xvY2tOb3cgfHwgKHNldEZyYW1lKGNsZWFyTm93KSwgY2xvY2tOb3cgPSBjbG9jay5ub3coKSArIGNsb2NrU2tldyk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyTm93KCkge1xuICBjbG9ja05vdyA9IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lcigpIHtcbiAgdGhpcy5fY2FsbCA9XG4gIHRoaXMuX3RpbWUgPVxuICB0aGlzLl9uZXh0ID0gbnVsbDtcbn1cblxuVGltZXIucHJvdG90eXBlID0gdGltZXIucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVGltZXIsXG4gIHJlc3RhcnQ6IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgIHRpbWUgPSAodGltZSA9PSBudWxsID8gbm93KCkgOiArdGltZSkgKyAoZGVsYXkgPT0gbnVsbCA/IDAgOiArZGVsYXkpO1xuICAgIGlmICghdGhpcy5fbmV4dCAmJiB0YXNrVGFpbCAhPT0gdGhpcykge1xuICAgICAgaWYgKHRhc2tUYWlsKSB0YXNrVGFpbC5fbmV4dCA9IHRoaXM7XG4gICAgICBlbHNlIHRhc2tIZWFkID0gdGhpcztcbiAgICAgIHRhc2tUYWlsID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5fY2FsbCA9IGNhbGxiYWNrO1xuICAgIHRoaXMuX3RpbWUgPSB0aW1lO1xuICAgIHNsZWVwKCk7XG4gIH0sXG4gIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9jYWxsKSB7XG4gICAgICB0aGlzLl9jYWxsID0gbnVsbDtcbiAgICAgIHRoaXMuX3RpbWUgPSBJbmZpbml0eTtcbiAgICAgIHNsZWVwKCk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdGltZXIoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICB0LnJlc3RhcnQoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lckZsdXNoKCkge1xuICBub3coKTsgLy8gR2V0IHRoZSBjdXJyZW50IHRpbWUsIGlmIG5vdCBhbHJlYWR5IHNldC5cbiAgKytmcmFtZTsgLy8gUHJldGVuZCB3ZeKAmXZlIHNldCBhbiBhbGFybSwgaWYgd2UgaGF2ZW7igJl0IGFscmVhZHkuXG4gIHZhciB0ID0gdGFza0hlYWQsIGU7XG4gIHdoaWxlICh0KSB7XG4gICAgaWYgKChlID0gY2xvY2tOb3cgLSB0Ll90aW1lKSA+PSAwKSB0Ll9jYWxsLmNhbGwobnVsbCwgZSk7XG4gICAgdCA9IHQuX25leHQ7XG4gIH1cbiAgLS1mcmFtZTtcbn1cblxuZnVuY3Rpb24gd2FrZSgpIHtcbiAgY2xvY2tOb3cgPSAoY2xvY2tMYXN0ID0gY2xvY2subm93KCkpICsgY2xvY2tTa2V3O1xuICBmcmFtZSA9IHRpbWVvdXQgPSAwO1xuICB0cnkge1xuICAgIHRpbWVyRmx1c2goKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBmcmFtZSA9IDA7XG4gICAgbmFwKCk7XG4gICAgY2xvY2tOb3cgPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBva2UoKSB7XG4gIHZhciBub3cgPSBjbG9jay5ub3coKSwgZGVsYXkgPSBub3cgLSBjbG9ja0xhc3Q7XG4gIGlmIChkZWxheSA+IHBva2VEZWxheSkgY2xvY2tTa2V3IC09IGRlbGF5LCBjbG9ja0xhc3QgPSBub3c7XG59XG5cbmZ1bmN0aW9uIG5hcCgpIHtcbiAgdmFyIHQwLCB0MSA9IHRhc2tIZWFkLCB0MiwgdGltZSA9IEluZmluaXR5O1xuICB3aGlsZSAodDEpIHtcbiAgICBpZiAodDEuX2NhbGwpIHtcbiAgICAgIGlmICh0aW1lID4gdDEuX3RpbWUpIHRpbWUgPSB0MS5fdGltZTtcbiAgICAgIHQwID0gdDEsIHQxID0gdDEuX25leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHQyID0gdDEuX25leHQsIHQxLl9uZXh0ID0gbnVsbDtcbiAgICAgIHQxID0gdDAgPyB0MC5fbmV4dCA9IHQyIDogdGFza0hlYWQgPSB0MjtcbiAgICB9XG4gIH1cbiAgdGFza1RhaWwgPSB0MDtcbiAgc2xlZXAodGltZSk7XG59XG5cbmZ1bmN0aW9uIHNsZWVwKHRpbWUpIHtcbiAgaWYgKGZyYW1lKSByZXR1cm47IC8vIFNvb25lc3QgYWxhcm0gYWxyZWFkeSBzZXQsIG9yIHdpbGwgYmUuXG4gIGlmICh0aW1lb3V0KSB0aW1lb3V0ID0gY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB2YXIgZGVsYXkgPSB0aW1lIC0gY2xvY2tOb3c7XG4gIGlmIChkZWxheSA+IDI0KSB7XG4gICAgaWYgKHRpbWUgPCBJbmZpbml0eSkgdGltZW91dCA9IHNldFRpbWVvdXQod2FrZSwgZGVsYXkpO1xuICAgIGlmIChpbnRlcnZhbCkgaW50ZXJ2YWwgPSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWludGVydmFsKSBjbG9ja0xhc3QgPSBjbG9ja05vdywgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChwb2tlLCBwb2tlRGVsYXkpO1xuICAgIGZyYW1lID0gMSwgc2V0RnJhbWUod2FrZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHt0aW1lciwgdGltZW91dH0gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBlbXB0eU9uID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImVuZFwiLCBcImludGVycnVwdFwiKTtcbnZhciBlbXB0eVR3ZWVuID0gW107XG5cbmV4cG9ydCB2YXIgQ1JFQVRFRCA9IDA7XG5leHBvcnQgdmFyIFNDSEVEVUxFRCA9IDE7XG5leHBvcnQgdmFyIFNUQVJUSU5HID0gMjtcbmV4cG9ydCB2YXIgU1RBUlRFRCA9IDM7XG5leHBvcnQgdmFyIFJVTk5JTkcgPSA0O1xuZXhwb3J0IHZhciBFTkRJTkcgPSA1O1xuZXhwb3J0IHZhciBFTkRFRCA9IDY7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGlkLCBpbmRleCwgZ3JvdXAsIHRpbWluZykge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGVzKSBub2RlLl9fdHJhbnNpdGlvbiA9IHt9O1xuICBlbHNlIGlmIChpZCBpbiBzY2hlZHVsZXMpIHJldHVybjtcbiAgY3JlYXRlKG5vZGUsIGlkLCB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBpbmRleDogaW5kZXgsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBncm91cDogZ3JvdXAsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBvbjogZW1wdHlPbixcbiAgICB0d2VlbjogZW1wdHlUd2VlbixcbiAgICB0aW1lOiB0aW1pbmcudGltZSxcbiAgICBkZWxheTogdGltaW5nLmRlbGF5LFxuICAgIGR1cmF0aW9uOiB0aW1pbmcuZHVyYXRpb24sXG4gICAgZWFzZTogdGltaW5nLmVhc2UsXG4gICAgdGltZXI6IG51bGwsXG4gICAgc3RhdGU6IENSRUFURURcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlIHx8ICEoc2NoZWR1bGUgPSBzY2hlZHVsZVtpZF0pIHx8IHNjaGVkdWxlLnN0YXRlID4gQ1JFQVRFRCkgdGhyb3cgbmV3IEVycm9yKFwidG9vIGxhdGVcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZSB8fCAhKHNjaGVkdWxlID0gc2NoZWR1bGVbaWRdKSB8fCBzY2hlZHVsZS5zdGF0ZSA+IFNUQVJUSU5HKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZVwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlIHx8ICEoc2NoZWR1bGUgPSBzY2hlZHVsZVtpZF0pKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZVwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGUobm9kZSwgaWQsIHNlbGYpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgdHdlZW47XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgc2VsZiB0aW1lciB3aGVuIHRoZSB0cmFuc2l0aW9uIGlzIGNyZWF0ZWQuXG4gIC8vIE5vdGUgdGhlIGFjdHVhbCBkZWxheSBpcyBub3Qga25vd24gdW50aWwgdGhlIGZpcnN0IGNhbGxiYWNrIVxuICBzY2hlZHVsZXNbaWRdID0gc2VsZjtcbiAgc2VsZi50aW1lciA9IHRpbWVyKHNjaGVkdWxlLCAwLCBzZWxmLnRpbWUpO1xuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlKGVsYXBzZWQpIHtcbiAgICBzZWxmLnN0YXRlID0gU0NIRURVTEVEO1xuICAgIHNlbGYudGltZXIucmVzdGFydChzdGFydCwgc2VsZi5kZWxheSwgc2VsZi50aW1lKTtcblxuICAgIC8vIElmIHRoZSBlbGFwc2VkIGRlbGF5IGlzIGxlc3MgdGhhbiBvdXIgZmlyc3Qgc2xlZXAsIHN0YXJ0IGltbWVkaWF0ZWx5LlxuICAgIGlmIChzZWxmLmRlbGF5IDw9IGVsYXBzZWQpIHN0YXJ0KGVsYXBzZWQgLSBzZWxmLmRlbGF5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0KGVsYXBzZWQpIHtcbiAgICB2YXIgaSwgaiwgbiwgbztcblxuICAgIC8vIElmIHRoZSBzdGF0ZSBpcyBub3QgU0NIRURVTEVELCB0aGVuIHdlIHByZXZpb3VzbHkgZXJyb3JlZCBvbiBzdGFydC5cbiAgICBpZiAoc2VsZi5zdGF0ZSAhPT0gU0NIRURVTEVEKSByZXR1cm4gc3RvcCgpO1xuXG4gICAgZm9yIChpIGluIHNjaGVkdWxlcykge1xuICAgICAgbyA9IHNjaGVkdWxlc1tpXTtcbiAgICAgIGlmIChvLm5hbWUgIT09IHNlbGYubmFtZSkgY29udGludWU7XG5cbiAgICAgIC8vIFdoaWxlIHRoaXMgZWxlbWVudCBhbHJlYWR5IGhhcyBhIHN0YXJ0aW5nIHRyYW5zaXRpb24gZHVyaW5nIHRoaXMgZnJhbWUsXG4gICAgICAvLyBkZWZlciBzdGFydGluZyBhbiBpbnRlcnJ1cHRpbmcgdHJhbnNpdGlvbiB1bnRpbCB0aGF0IHRyYW5zaXRpb24gaGFzIGFcbiAgICAgIC8vIGNoYW5jZSB0byB0aWNrIChhbmQgcG9zc2libHkgZW5kKTsgc2VlIGQzL2QzLXRyYW5zaXRpb24jNTQhXG4gICAgICBpZiAoby5zdGF0ZSA9PT0gU1RBUlRFRCkgcmV0dXJuIHRpbWVvdXQoc3RhcnQpO1xuXG4gICAgICAvLyBJbnRlcnJ1cHQgdGhlIGFjdGl2ZSB0cmFuc2l0aW9uLCBpZiBhbnkuXG4gICAgICAvLyBEaXNwYXRjaCB0aGUgaW50ZXJydXB0IGV2ZW50LlxuICAgICAgaWYgKG8uc3RhdGUgPT09IFJVTk5JTkcpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgby5vbi5jYWxsKFwiaW50ZXJydXB0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIG8uaW5kZXgsIG8uZ3JvdXApO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgYW55IHByZS1lbXB0ZWQgdHJhbnNpdGlvbnMuIE5vIGludGVycnVwdCBldmVudCBpcyBkaXNwYXRjaGVkXG4gICAgICAvLyBiZWNhdXNlIHRoZSBjYW5jZWxsZWQgdHJhbnNpdGlvbnMgbmV2ZXIgc3RhcnRlZC4gTm90ZSB0aGF0IHRoaXMgYWxzb1xuICAgICAgLy8gcmVtb3ZlcyB0aGlzIHRyYW5zaXRpb24gZnJvbSB0aGUgcGVuZGluZyBsaXN0IVxuICAgICAgZWxzZSBpZiAoK2kgPCBpZCkge1xuICAgICAgICBvLnN0YXRlID0gRU5ERUQ7XG4gICAgICAgIG8udGltZXIuc3RvcCgpO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERlZmVyIHRoZSBmaXJzdCB0aWNrIHRvIGVuZCBvZiB0aGUgY3VycmVudCBmcmFtZTsgc2VlIGQzL2QzIzE1NzYuXG4gICAgLy8gTm90ZSB0aGUgdHJhbnNpdGlvbiBtYXkgYmUgY2FuY2VsZWQgYWZ0ZXIgc3RhcnQgYW5kIGJlZm9yZSB0aGUgZmlyc3QgdGljayFcbiAgICAvLyBOb3RlIHRoaXMgbXVzdCBiZSBzY2hlZHVsZWQgYmVmb3JlIHRoZSBzdGFydCBldmVudDsgc2VlIGQzL2QzLXRyYW5zaXRpb24jMTYhXG4gICAgLy8gQXNzdW1pbmcgdGhpcyBpcyBzdWNjZXNzZnVsLCBzdWJzZXF1ZW50IGNhbGxiYWNrcyBnbyBzdHJhaWdodCB0byB0aWNrLlxuICAgIHRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gU1RBUlRFRCkge1xuICAgICAgICBzZWxmLnN0YXRlID0gUlVOTklORztcbiAgICAgICAgc2VsZi50aW1lci5yZXN0YXJ0KHRpY2ssIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG4gICAgICAgIHRpY2soZWxhcHNlZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBEaXNwYXRjaCB0aGUgc3RhcnQgZXZlbnQuXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIHR3ZWVuIGFyZSBpbml0aWFsaXplZC5cbiAgICBzZWxmLnN0YXRlID0gU1RBUlRJTkc7XG4gICAgc2VsZi5vbi5jYWxsKFwic3RhcnRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNUQVJUSU5HKSByZXR1cm47IC8vIGludGVycnVwdGVkXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJURUQ7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSB0d2VlbiwgZGVsZXRpbmcgbnVsbCB0d2Vlbi5cbiAgICB0d2VlbiA9IG5ldyBBcnJheShuID0gc2VsZi50d2Vlbi5sZW5ndGgpO1xuICAgIGZvciAoaSA9IDAsIGogPSAtMTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG8gPSBzZWxmLnR3ZWVuW2ldLnZhbHVlLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCkpIHtcbiAgICAgICAgdHdlZW5bKytqXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIHR3ZWVuLmxlbmd0aCA9IGogKyAxO1xuICB9XG5cbiAgZnVuY3Rpb24gdGljayhlbGFwc2VkKSB7XG4gICAgdmFyIHQgPSBlbGFwc2VkIDwgc2VsZi5kdXJhdGlvbiA/IHNlbGYuZWFzZS5jYWxsKG51bGwsIGVsYXBzZWQgLyBzZWxmLmR1cmF0aW9uKSA6IChzZWxmLnRpbWVyLnJlc3RhcnQoc3RvcCksIHNlbGYuc3RhdGUgPSBFTkRJTkcsIDEpLFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIG4gPSB0d2Vlbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgdHdlZW5baV0uY2FsbChudWxsLCB0KTtcbiAgICB9XG5cbiAgICAvLyBEaXNwYXRjaCB0aGUgZW5kIGV2ZW50LlxuICAgIGlmIChzZWxmLnN0YXRlID09PSBFTkRJTkcpIHtcbiAgICAgIHNlbGYub24uY2FsbChcImVuZFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKTtcbiAgICAgIHN0b3AoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdG9wKCkge1xuICAgIHNlbGYuc3RhdGUgPSBFTkRFRDtcbiAgICBzZWxmLnRpbWVyLnN0b3AoKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2lkXTtcbiAgICBmb3IgKHZhciBpIGluIHNjaGVkdWxlcykgcmV0dXJuOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgZGVsZXRlIG5vZGUuX190cmFuc2l0aW9uO1xuICB9XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5mdW5jdGlvbiB0d2VlblJlbW92ZShpZCwgbmFtZSkge1xuICB2YXIgdHdlZW4wLCB0d2VlbjE7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gdHdlZW4wID0gdHdlZW47XG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xID0gdHdlZW4xLnNsaWNlKCk7XG4gICAgICAgICAgdHdlZW4xLnNwbGljZShpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0d2VlbkZ1bmN0aW9uKGlkLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgdHdlZW4wLCB0d2VlbjE7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgdHdlZW4gPSBzY2hlZHVsZS50d2VlbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgdHdlZW4gd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgdHdlZW4gYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKHR3ZWVuICE9PSB0d2VlbjApIHtcbiAgICAgIHR3ZWVuMSA9ICh0d2VlbjAgPSB0d2Vlbikuc2xpY2UoKTtcbiAgICAgIGZvciAodmFyIHQgPSB7bmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlfSwgaSA9IDAsIG4gPSB0d2VlbjEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICh0d2VlbjFbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIHR3ZWVuMVtpXSA9IHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpID09PSBuKSB0d2VlbjEucHVzaCh0KTtcbiAgICB9XG5cbiAgICBzY2hlZHVsZS50d2VlbiA9IHR3ZWVuMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgbmFtZSArPSBcIlwiO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciB0d2VlbiA9IGdldCh0aGlzLm5vZGUoKSwgaWQpLnR3ZWVuO1xuICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4ubGVuZ3RoLCB0OyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKHQgPSB0d2VlbltpXSkubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gdC52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsID8gdHdlZW5SZW1vdmUgOiB0d2VlbkZ1bmN0aW9uKShpZCwgbmFtZSwgdmFsdWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR3ZWVuVmFsdWUodHJhbnNpdGlvbiwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIGlkID0gdHJhbnNpdGlvbi5faWQ7XG5cbiAgdHJhbnNpdGlvbi5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCk7XG4gICAgKHNjaGVkdWxlLnZhbHVlIHx8IChzY2hlZHVsZS52YWx1ZSA9IHt9KSlbbmFtZV0gPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBnZXQobm9kZSwgaWQpLnZhbHVlW25hbWVdO1xuICB9O1xufVxuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2VlblwiO1xuaW1wb3J0IGludGVycG9sYXRlIGZyb20gXCIuL2ludGVycG9sYXRlXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICByZXR1cm4gdmFsdWUwID09PSB2YWx1ZTEgPyBudWxsXG4gICAgICAgIDogdmFsdWUwID09PSB2YWx1ZTAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUodmFsdWUwMCA9IHZhbHVlMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHZhbHVlMDAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHJldHVybiB2YWx1ZTAgPT09IHZhbHVlMSA/IG51bGxcbiAgICAgICAgOiB2YWx1ZTAgPT09IHZhbHVlMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciB2YWx1ZTAwLFxuICAgICAgdmFsdWUxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgdmFsdWUwID0gdGhpcy5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCAmJiB2YWx1ZTEgPT09IHZhbHVlMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEwID0gdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIHZhbHVlMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICB2YWx1ZTAgPSB0aGlzLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCAmJiB2YWx1ZTEgPT09IHZhbHVlMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEwID0gdmFsdWUxKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpLCBpID0gZnVsbG5hbWUgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdGhpcy5hdHRyVHdlZW4obmFtZSwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pKGZ1bGxuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwiYXR0ci5cIiArIG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdmFsdWUgPT0gbnVsbCA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpKGZ1bGxuYW1lKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkoZnVsbG5hbWUsIGksIHZhbHVlICsgXCJcIikpO1xufVxuIiwiaW1wb3J0IHtuYW1lc3BhY2V9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxuZnVuY3Rpb24gYXR0clR3ZWVuTlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBub2RlID0gdGhpcywgaSA9IHZhbHVlLmFwcGx5KG5vZGUsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGkgJiYgZnVuY3Rpb24odCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIGkodCkpO1xuICAgIH07XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuKG5hbWUsIHZhbHVlKSB7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBub2RlID0gdGhpcywgaSA9IHZhbHVlLmFwcGx5KG5vZGUsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGkgJiYgZnVuY3Rpb24odCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgaSh0KSk7XG4gICAgfTtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJhdHRyLlwiICsgbmFtZTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgKGZ1bGxuYW1lLmxvY2FsID8gYXR0clR3ZWVuTlMgOiBhdHRyVHdlZW4pKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtnZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmZ1bmN0aW9uIGRlbGF5RnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkZWxheUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGRlbGF5RnVuY3Rpb25cbiAgICAgICAgICA6IGRlbGF5Q29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmRlbGF5O1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZnVuY3Rpb24gZHVyYXRpb25GdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Db25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGR1cmF0aW9uRnVuY3Rpb25cbiAgICAgICAgICA6IGR1cmF0aW9uQ29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmR1cmF0aW9uO1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZnVuY3Rpb24gZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZWFzZSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmVhc2U7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5mdW5jdGlvbiBzdGFydChuYW1lKSB7XG4gIHJldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4gIXQgfHwgdCA9PT0gXCJzdGFydFwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG9uMCwgb24xLCBzaXQgPSBzdGFydChuYW1lKSA/IGluaXQgOiBzZXQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzaXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKG5hbWUsIGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgID8gZ2V0KHRoaXMubm9kZSgpLCBpZCkub24ub24obmFtZSlcbiAgICAgIDogdGhpcy5lYWNoKG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihpZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuX190cmFuc2l0aW9uKSBpZiAoK2kgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub24oXCJlbmQucmVtb3ZlXCIsIHJlbW92ZUZ1bmN0aW9uKHRoaXMuX2lkKSk7XG59XG4iLCJpbXBvcnQge2ludGVycG9sYXRlVHJhbnNmb3JtQ3NzIGFzIGludGVycG9sYXRlVHJhbnNmb3JtfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7c3R5bGV9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW5cIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZVwiO1xuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZShuYW1lLCBpbnRlcnBvbGF0ZSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIHZhbHVlMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUwID0gc3R5bGUodGhpcywgbmFtZSksXG4gICAgICAgIHZhbHVlMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCAmJiB2YWx1ZTEgPT09IHZhbHVlMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEwID0gdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVSZW1vdmVFbmQobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciB2YWx1ZTAwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMCA9IHN0eWxlKHRoaXMsIG5hbWUpO1xuICAgIHJldHVybiB2YWx1ZTAgPT09IHZhbHVlMSA/IG51bGxcbiAgICAgICAgOiB2YWx1ZTAgPT09IHZhbHVlMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIHZhbHVlMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUwID0gc3R5bGUodGhpcywgbmFtZSksXG4gICAgICAgIHZhbHVlMSA9IHZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgdmFsdWUxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gdmFsdWUwID09PSB2YWx1ZTEgPyBudWxsXG4gICAgICAgIDogdmFsdWUwID09PSB2YWx1ZTAwICYmIHZhbHVlMSA9PT0gdmFsdWUxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHZhbHVlMDAgPSB2YWx1ZTAsIHZhbHVlMTAgPSB2YWx1ZTEpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGkgPSAobmFtZSArPSBcIlwiKSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGludGVycG9sYXRlVHJhbnNmb3JtIDogaW50ZXJwb2xhdGU7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gdGhpc1xuICAgICAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlUmVtb3ZlKG5hbWUsIGkpKVxuICAgICAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIHN0eWxlUmVtb3ZlRW5kKG5hbWUpKVxuICAgICAgOiB0aGlzLnN0eWxlVHdlZW4obmFtZSwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHN0eWxlRnVuY3Rpb24obmFtZSwgaSwgdHdlZW5WYWx1ZSh0aGlzLCBcInN0eWxlLlwiICsgbmFtZSwgdmFsdWUpKVxuICAgICAgICAgIDogc3R5bGVDb25zdGFudChuYW1lLCBpLCB2YWx1ZSArIFwiXCIpLCBwcmlvcml0eSk7XG59XG4iLCJmdW5jdGlvbiBzdHlsZVR3ZWVuKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMsIGkgPSB2YWx1ZS5hcHBseShub2RlLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBpICYmIGZ1bmN0aW9uKHQpIHtcbiAgICAgIG5vZGUuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgaSh0KSwgcHJpb3JpdHkpO1xuICAgIH07XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBrZXkgPSBcInN0eWxlLlwiICsgKG5hbWUgKz0gXCJcIik7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgcmV0dXJuIChrZXkgPSB0aGlzLnR3ZWVuKGtleSkpICYmIGtleS5fdmFsdWU7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcy50d2VlbihrZXksIG51bGwpO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBzdHlsZVR3ZWVuKG5hbWUsIHZhbHVlLCBwcmlvcml0eSA9PSBudWxsID8gXCJcIiA6IHByaW9yaXR5KSk7XG59XG4iLCJpbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuXCI7XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTEgPSB2YWx1ZSh0aGlzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWUxID09IG51bGwgPyBcIlwiIDogdmFsdWUxO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdGhpcy50d2VlbihcInRleHRcIiwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gdGV4dEZ1bmN0aW9uKHR3ZWVuVmFsdWUodGhpcywgXCJ0ZXh0XCIsIHZhbHVlKSlcbiAgICAgIDogdGV4dENvbnN0YW50KHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiKSk7XG59XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0ciBmcm9tIFwiLi9hdHRyXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9hdHRyVHdlZW4gZnJvbSBcIi4vYXR0clR3ZWVuXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9kZWxheSBmcm9tIFwiLi9kZWxheVwiO1xuaW1wb3J0IHRyYW5zaXRpb25fZHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX2Vhc2UgZnJvbSBcIi4vZWFzZVwiO1xuaW1wb3J0IHRyYW5zaXRpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlclwiO1xuaW1wb3J0IHRyYW5zaXRpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2VcIjtcbmltcG9ydCB0cmFuc2l0aW9uX29uIGZyb20gXCIuL29uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0XCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3Rpb24gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZVwiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGVUd2VlbiBmcm9tIFwiLi9zdHlsZVR3ZWVuXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90ZXh0IGZyb20gXCIuL3RleHRcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fdHdlZW4gZnJvbSBcIi4vdHdlZW5cIjtcblxudmFyIGlkID0gMDtcblxuZXhwb3J0IGZ1bmN0aW9uIFRyYW5zaXRpb24oZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCkge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xuICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgdGhpcy5faWQgPSBpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNpdGlvbihuYW1lKSB7XG4gIHJldHVybiBzZWxlY3Rpb24oKS50cmFuc2l0aW9uKG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3SWQoKSB7XG4gIHJldHVybiArK2lkO1xufVxuXG52YXIgc2VsZWN0aW9uX3Byb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGU7XG5cblRyYW5zaXRpb24ucHJvdG90eXBlID0gdHJhbnNpdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2l0aW9uLFxuICBzZWxlY3Q6IHRyYW5zaXRpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHRyYW5zaXRpb25fc2VsZWN0QWxsLFxuICBmaWx0ZXI6IHRyYW5zaXRpb25fZmlsdGVyLFxuICBtZXJnZTogdHJhbnNpdGlvbl9tZXJnZSxcbiAgc2VsZWN0aW9uOiB0cmFuc2l0aW9uX3NlbGVjdGlvbixcbiAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbl90cmFuc2l0aW9uLFxuICBjYWxsOiBzZWxlY3Rpb25fcHJvdG90eXBlLmNhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGUsXG4gIHNpemU6IHNlbGVjdGlvbl9wcm90b3R5cGUuc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9wcm90b3R5cGUuZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9wcm90b3R5cGUuZWFjaCxcbiAgb246IHRyYW5zaXRpb25fb24sXG4gIGF0dHI6IHRyYW5zaXRpb25fYXR0cixcbiAgYXR0clR3ZWVuOiB0cmFuc2l0aW9uX2F0dHJUd2VlbixcbiAgc3R5bGU6IHRyYW5zaXRpb25fc3R5bGUsXG4gIHN0eWxlVHdlZW46IHRyYW5zaXRpb25fc3R5bGVUd2VlbixcbiAgdGV4dDogdHJhbnNpdGlvbl90ZXh0LFxuICByZW1vdmU6IHRyYW5zaXRpb25fcmVtb3ZlLFxuICB0d2VlbjogdHJhbnNpdGlvbl90d2VlbixcbiAgZGVsYXk6IHRyYW5zaXRpb25fZGVsYXksXG4gIGR1cmF0aW9uOiB0cmFuc2l0aW9uX2R1cmF0aW9uLFxuICBlYXNlOiB0cmFuc2l0aW9uX2Vhc2Vcbn07XG4iLCJleHBvcnQgZnVuY3Rpb24gY3ViaWNJbih0KSB7XG4gIHJldHVybiB0ICogdCAqIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdWJpY091dCh0KSB7XG4gIHJldHVybiAtLXQgKiB0ICogdCArIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdWJpY0luT3V0KHQpIHtcbiAgcmV0dXJuICgodCAqPSAyKSA8PSAxID8gdCAqIHQgKiB0IDogKHQgLT0gMikgKiB0ICogdCArIDIpIC8gMjtcbn1cbiIsImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuLi90cmFuc2l0aW9uL2luZGV4XCI7XG5pbXBvcnQgc2NoZWR1bGUgZnJvbSBcIi4uL3RyYW5zaXRpb24vc2NoZWR1bGVcIjtcbmltcG9ydCB7ZWFzZUN1YmljSW5PdXR9IGZyb20gXCJkMy1lYXNlXCI7XG5pbXBvcnQge25vd30gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBkZWZhdWx0VGltaW5nID0ge1xuICB0aW1lOiBudWxsLCAvLyBTZXQgb24gdXNlLlxuICBkZWxheTogMCxcbiAgZHVyYXRpb246IDI1MCxcbiAgZWFzZTogZWFzZUN1YmljSW5PdXRcbn07XG5cbmZ1bmN0aW9uIGluaGVyaXQobm9kZSwgaWQpIHtcbiAgdmFyIHRpbWluZztcbiAgd2hpbGUgKCEodGltaW5nID0gbm9kZS5fX3RyYW5zaXRpb24pIHx8ICEodGltaW5nID0gdGltaW5nW2lkXSkpIHtcbiAgICBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRUaW1pbmcudGltZSA9IG5vdygpLCBkZWZhdWx0VGltaW5nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGltaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBpZCxcbiAgICAgIHRpbWluZztcblxuICBpZiAobmFtZSBpbnN0YW5jZW9mIFRyYW5zaXRpb24pIHtcbiAgICBpZCA9IG5hbWUuX2lkLCBuYW1lID0gbmFtZS5fbmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IG5ld0lkKCksICh0aW1pbmcgPSBkZWZhdWx0VGltaW5nKS50aW1lID0gbm93KCksIG5hbWUgPSBuYW1lID09IG51bGwgPyBudWxsIDogbmFtZSArIFwiXCI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZCwgaSwgZ3JvdXAsIHRpbWluZyB8fCBpbmhlcml0KG5vZGUsIGlkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKGdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge2RyYWdEaXNhYmxlLCBkcmFnRW5hYmxlfSBmcm9tIFwiZDMtZHJhZ1wiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge2N1c3RvbUV2ZW50LCBldmVudCwgbW91c2UsIHNlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtpbnRlcnJ1cHR9IGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCBCcnVzaEV2ZW50IGZyb20gXCIuL2V2ZW50XCI7XG5pbXBvcnQgbm9ldmVudCwge25vcHJvcGFnYXRpb259IGZyb20gXCIuL25vZXZlbnRcIjtcblxudmFyIE1PREVfRFJBRyA9IHtuYW1lOiBcImRyYWdcIn0sXG4gICAgTU9ERV9TUEFDRSA9IHtuYW1lOiBcInNwYWNlXCJ9LFxuICAgIE1PREVfSEFORExFID0ge25hbWU6IFwiaGFuZGxlXCJ9LFxuICAgIE1PREVfQ0VOVEVSID0ge25hbWU6IFwiY2VudGVyXCJ9O1xuXG52YXIgWCA9IHtcbiAgbmFtZTogXCJ4XCIsXG4gIGhhbmRsZXM6IFtcImVcIiwgXCJ3XCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHgsIGUpIHsgcmV0dXJuIHggJiYgW1t4WzBdLCBlWzBdWzFdXSwgW3hbMV0sIGVbMV1bMV1dXTsgfSxcbiAgb3V0cHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHkgJiYgW3h5WzBdWzBdLCB4eVsxXVswXV07IH1cbn07XG5cbnZhciBZID0ge1xuICBuYW1lOiBcInlcIixcbiAgaGFuZGxlczogW1wiblwiLCBcInNcIl0ubWFwKHR5cGUpLFxuICBpbnB1dDogZnVuY3Rpb24oeSwgZSkgeyByZXR1cm4geSAmJiBbW2VbMF1bMF0sIHlbMF1dLCBbZVsxXVswXSwgeVsxXV1dOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSAmJiBbeHlbMF1bMV0sIHh5WzFdWzFdXTsgfVxufTtcblxudmFyIFhZID0ge1xuICBuYW1lOiBcInh5XCIsXG4gIGhhbmRsZXM6IFtcIm5cIiwgXCJlXCIsIFwic1wiLCBcIndcIiwgXCJud1wiLCBcIm5lXCIsIFwic2VcIiwgXCJzd1wiXS5tYXAodHlwZSksXG4gIGlucHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHk7IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5OyB9XG59O1xuXG52YXIgY3Vyc29ycyA9IHtcbiAgb3ZlcmxheTogXCJjcm9zc2hhaXJcIixcbiAgc2VsZWN0aW9uOiBcIm1vdmVcIixcbiAgbjogXCJucy1yZXNpemVcIixcbiAgZTogXCJldy1yZXNpemVcIixcbiAgczogXCJucy1yZXNpemVcIixcbiAgdzogXCJldy1yZXNpemVcIixcbiAgbnc6IFwibndzZS1yZXNpemVcIixcbiAgbmU6IFwibmVzdy1yZXNpemVcIixcbiAgc2U6IFwibndzZS1yZXNpemVcIixcbiAgc3c6IFwibmVzdy1yZXNpemVcIlxufTtcblxudmFyIGZsaXBYID0ge1xuICBlOiBcIndcIixcbiAgdzogXCJlXCIsXG4gIG53OiBcIm5lXCIsXG4gIG5lOiBcIm53XCIsXG4gIHNlOiBcInN3XCIsXG4gIHN3OiBcInNlXCJcbn07XG5cbnZhciBmbGlwWSA9IHtcbiAgbjogXCJzXCIsXG4gIHM6IFwiblwiLFxuICBudzogXCJzd1wiLFxuICBuZTogXCJzZVwiLFxuICBzZTogXCJuZVwiLFxuICBzdzogXCJud1wiXG59O1xuXG52YXIgc2lnbnNYID0ge1xuICBvdmVybGF5OiArMSxcbiAgc2VsZWN0aW9uOiArMSxcbiAgbjogbnVsbCxcbiAgZTogKzEsXG4gIHM6IG51bGwsXG4gIHc6IC0xLFxuICBudzogLTEsXG4gIG5lOiArMSxcbiAgc2U6ICsxLFxuICBzdzogLTFcbn07XG5cbnZhciBzaWduc1kgPSB7XG4gIG92ZXJsYXk6ICsxLFxuICBzZWxlY3Rpb246ICsxLFxuICBuOiAtMSxcbiAgZTogbnVsbCxcbiAgczogKzEsXG4gIHc6IG51bGwsXG4gIG53OiAtMSxcbiAgbmU6IC0xLFxuICBzZTogKzEsXG4gIHN3OiArMVxufTtcblxuZnVuY3Rpb24gdHlwZSh0KSB7XG4gIHJldHVybiB7dHlwZTogdH07XG59XG5cbi8vIElnbm9yZSByaWdodC1jbGljaywgc2luY2UgdGhhdCBzaG91bGQgb3BlbiB0aGUgY29udGV4dCBtZW51LlxuZnVuY3Rpb24gZGVmYXVsdEZpbHRlcigpIHtcbiAgcmV0dXJuICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFeHRlbnQoKSB7XG4gIHZhciBzdmcgPSB0aGlzLm93bmVyU1ZHRWxlbWVudCB8fCB0aGlzO1xuICByZXR1cm4gW1swLCAwXSwgW3N2Zy53aWR0aC5iYXNlVmFsLnZhbHVlLCBzdmcuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTtcbn1cblxuLy8gTGlrZSBkMy5sb2NhbCwgYnV0IHdpdGggdGhlIG5hbWUg4oCcX19icnVzaOKAnSByYXRoZXIgdGhhbiBhdXRvLWdlbmVyYXRlZC5cbmZ1bmN0aW9uIGxvY2FsKG5vZGUpIHtcbiAgd2hpbGUgKCFub2RlLl9fYnJ1c2gpIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSByZXR1cm47XG4gIHJldHVybiBub2RlLl9fYnJ1c2g7XG59XG5cbmZ1bmN0aW9uIGVtcHR5KGV4dGVudCkge1xuICByZXR1cm4gZXh0ZW50WzBdWzBdID09PSBleHRlbnRbMV1bMF1cbiAgICAgIHx8IGV4dGVudFswXVsxXSA9PT0gZXh0ZW50WzFdWzFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hTZWxlY3Rpb24obm9kZSkge1xuICB2YXIgc3RhdGUgPSBub2RlLl9fYnJ1c2g7XG4gIHJldHVybiBzdGF0ZSA/IHN0YXRlLmRpbS5vdXRwdXQoc3RhdGUuc2VsZWN0aW9uKSA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFgoKSB7XG4gIHJldHVybiBicnVzaChYKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoWSgpIHtcbiAgcmV0dXJuIGJydXNoKFkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGJydXNoKFhZKTtcbn1cblxuZnVuY3Rpb24gYnJ1c2goZGltKSB7XG4gIHZhciBleHRlbnQgPSBkZWZhdWx0RXh0ZW50LFxuICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcixcbiAgICAgIGxpc3RlbmVycyA9IGRpc3BhdGNoKGJydXNoLCBcInN0YXJ0XCIsIFwiYnJ1c2hcIiwgXCJlbmRcIiksXG4gICAgICBoYW5kbGVTaXplID0gNixcbiAgICAgIHRvdWNoZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGJydXNoKGdyb3VwKSB7XG4gICAgdmFyIG92ZXJsYXkgPSBncm91cFxuICAgICAgICAucHJvcGVydHkoXCJfX2JydXNoXCIsIGluaXRpYWxpemUpXG4gICAgICAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgIC5kYXRhKFt0eXBlKFwib3ZlcmxheVwiKV0pO1xuXG4gICAgb3ZlcmxheS5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpXG4gICAgICAubWVyZ2Uob3ZlcmxheSlcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGV4dGVudCA9IGxvY2FsKHRoaXMpLmV4dGVudDtcbiAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGV4dGVudFswXVswXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4dGVudFswXVsxXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBleHRlbnRbMV1bMF0gLSBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGV4dGVudFsxXVsxXSAtIGV4dGVudFswXVsxXSk7XG4gICAgICAgIH0pO1xuXG4gICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgLmRhdGEoW3R5cGUoXCJzZWxlY3Rpb25cIildKVxuICAgICAgLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwic2VsZWN0aW9uXCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCIjNzc3XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsIDAuMylcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCIjZmZmXCIpXG4gICAgICAgIC5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsIFwiY3Jpc3BFZGdlc1wiKTtcblxuICAgIHZhciBoYW5kbGUgPSBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAuZGF0YShkaW0uaGFuZGxlcywgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlOyB9KTtcblxuICAgIGhhbmRsZS5leGl0KCkucmVtb3ZlKCk7XG5cbiAgICBoYW5kbGUuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gXCJoYW5kbGUgaGFuZGxlLS1cIiArIGQudHlwZTsgfSlcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gY3Vyc29yc1tkLnR5cGVdOyB9KTtcblxuICAgIGdyb3VwXG4gICAgICAgIC5lYWNoKHJlZHJhdylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwiYWxsXCIpXG4gICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIilcbiAgICAgICAgLm9uKFwibW91c2Vkb3duLmJydXNoIHRvdWNoc3RhcnQuYnJ1c2hcIiwgc3RhcnRlZCk7XG4gIH1cblxuICBicnVzaC5tb3ZlID0gZnVuY3Rpb24oZ3JvdXAsIHNlbGVjdGlvbikge1xuICAgIGlmIChncm91cC5zZWxlY3Rpb24pIHtcbiAgICAgIGdyb3VwXG4gICAgICAgICAgLm9uKFwic3RhcnQuYnJ1c2hcIiwgZnVuY3Rpb24oKSB7IGVtaXR0ZXIodGhpcywgYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCk7IH0pXG4gICAgICAgICAgLm9uKFwiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaFwiLCBmdW5jdGlvbigpIHsgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLmVuZCgpOyB9KVxuICAgICAgICAgIC50d2VlbihcImJydXNoXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIHN0YXRlID0gdGhhdC5fX2JydXNoLFxuICAgICAgICAgICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMCA9IHN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24xID0gZGltLmlucHV0KHR5cGVvZiBzZWxlY3Rpb24gPT09IFwiZnVuY3Rpb25cIiA/IHNlbGVjdGlvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogc2VsZWN0aW9uLCBzdGF0ZS5leHRlbnQpLFxuICAgICAgICAgICAgICAgIGkgPSBpbnRlcnBvbGF0ZShzZWxlY3Rpb24wLCBzZWxlY3Rpb24xKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gdHdlZW4odCkge1xuICAgICAgICAgICAgICBzdGF0ZS5zZWxlY3Rpb24gPSB0ID09PSAxICYmIGVtcHR5KHNlbGVjdGlvbjEpID8gbnVsbCA6IGkodCk7XG4gICAgICAgICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24wICYmIHNlbGVjdGlvbjEgPyB0d2VlbiA6IHR3ZWVuKDEpO1xuICAgICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cFxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB0aGF0Ll9fYnJ1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhhdCwgYXJncykgOiBzZWxlY3Rpb24sIHN0YXRlLmV4dGVudCksXG4gICAgICAgICAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJncykuYmVmb3Jlc3RhcnQoKTtcblxuICAgICAgICAgICAgaW50ZXJydXB0KHRoYXQpO1xuICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uMSA9PSBudWxsIHx8IGVtcHR5KHNlbGVjdGlvbjEpID8gbnVsbCA6IHNlbGVjdGlvbjE7XG4gICAgICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgICAgIGVtaXQuc3RhcnQoKS5icnVzaCgpLmVuZCgpO1xuICAgICAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiByZWRyYXcoKSB7XG4gICAgdmFyIGdyb3VwID0gc2VsZWN0KHRoaXMpLFxuICAgICAgICBzZWxlY3Rpb24gPSBsb2NhbCh0aGlzKS5zZWxlY3Rpb247XG5cbiAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuc2VsZWN0aW9uXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBzZWxlY3Rpb25bMF1bMF0pXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIHNlbGVjdGlvblswXVsxXSlcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHNlbGVjdGlvblsxXVswXSAtIHNlbGVjdGlvblswXVswXSlcbiAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBzZWxlY3Rpb25bMV1bMV0gLSBzZWxlY3Rpb25bMF1bMV0pO1xuXG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGVbZC50eXBlLmxlbmd0aCAtIDFdID09PSBcImVcIiA/IHNlbGVjdGlvblsxXVswXSAtIGhhbmRsZVNpemUgLyAyIDogc2VsZWN0aW9uWzBdWzBdIC0gaGFuZGxlU2l6ZSAvIDI7IH0pXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZVswXSA9PT0gXCJzXCIgPyBzZWxlY3Rpb25bMV1bMV0gLSBoYW5kbGVTaXplIC8gMiA6IHNlbGVjdGlvblswXVsxXSAtIGhhbmRsZVNpemUgLyAyOyB9KVxuICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlID09PSBcIm5cIiB8fCBkLnR5cGUgPT09IFwic1wiID8gc2VsZWN0aW9uWzFdWzBdIC0gc2VsZWN0aW9uWzBdWzBdICsgaGFuZGxlU2l6ZSA6IGhhbmRsZVNpemU7IH0pXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlID09PSBcImVcIiB8fCBkLnR5cGUgPT09IFwid1wiID8gc2VsZWN0aW9uWzFdWzFdIC0gc2VsZWN0aW9uWzBdWzFdICsgaGFuZGxlU2l6ZSA6IGhhbmRsZVNpemU7IH0pO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvbiwuaGFuZGxlXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBcIm5vbmVcIilcbiAgICAgICAgICAuYXR0cihcInhcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdHRlcih0aGF0LCBhcmdzKSB7XG4gICAgcmV0dXJuIHRoYXQuX19icnVzaC5lbWl0dGVyIHx8IG5ldyBFbWl0dGVyKHRoYXQsIGFyZ3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gRW1pdHRlcih0aGF0LCBhcmdzKSB7XG4gICAgdGhpcy50aGF0ID0gdGhhdDtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMuc3RhdGUgPSB0aGF0Ll9fYnJ1c2g7XG4gICAgdGhpcy5hY3RpdmUgPSAwO1xuICB9XG5cbiAgRW1pdHRlci5wcm90b3R5cGUgPSB7XG4gICAgYmVmb3Jlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHRoaXMuc3RhdGUuZW1pdHRlciA9IHRoaXMsIHRoaXMuc3RhcnRpbmcgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5zdGFydGluZykgdGhpcy5zdGFydGluZyA9IGZhbHNlLCB0aGlzLmVtaXQoXCJzdGFydFwiKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgYnJ1c2g6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5lbWl0KFwiYnJ1c2hcIik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVuZDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aGlzLmFjdGl2ZSA9PT0gMCkgZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlciwgdGhpcy5lbWl0KFwiZW5kXCIpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICBjdXN0b21FdmVudChuZXcgQnJ1c2hFdmVudChicnVzaCwgdHlwZSwgZGltLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLCBsaXN0ZW5lcnMuYXBwbHksIGxpc3RlbmVycywgW3R5cGUsIHRoaXMudGhhdCwgdGhpcy5hcmdzXSk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHN0YXJ0ZWQoKSB7XG4gICAgaWYgKGV2ZW50LnRvdWNoZXMpIHsgaWYgKGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCA8IGV2ZW50LnRvdWNoZXMubGVuZ3RoKSByZXR1cm4gbm9ldmVudCgpOyB9XG4gICAgZWxzZSBpZiAodG91Y2hlbmRpbmcpIHJldHVybjtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG5cbiAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHR5cGUgPSBldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxcbiAgICAgICAgbW9kZSA9IChldmVudC5tZXRhS2V5ID8gdHlwZSA9IFwib3ZlcmxheVwiIDogdHlwZSkgPT09IFwic2VsZWN0aW9uXCIgPyBNT0RFX0RSQUcgOiAoZXZlbnQuYWx0S2V5ID8gTU9ERV9DRU5URVIgOiBNT0RFX0hBTkRMRSksXG4gICAgICAgIHNpZ25YID0gZGltID09PSBZID8gbnVsbCA6IHNpZ25zWFt0eXBlXSxcbiAgICAgICAgc2lnblkgPSBkaW0gPT09IFggPyBudWxsIDogc2lnbnNZW3R5cGVdLFxuICAgICAgICBzdGF0ZSA9IGxvY2FsKHRoYXQpLFxuICAgICAgICBleHRlbnQgPSBzdGF0ZS5leHRlbnQsXG4gICAgICAgIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgVyA9IGV4dGVudFswXVswXSwgdzAsIHcxLFxuICAgICAgICBOID0gZXh0ZW50WzBdWzFdLCBuMCwgbjEsXG4gICAgICAgIEUgPSBleHRlbnRbMV1bMF0sIGUwLCBlMSxcbiAgICAgICAgUyA9IGV4dGVudFsxXVsxXSwgczAsIHMxLFxuICAgICAgICBkeCxcbiAgICAgICAgZHksXG4gICAgICAgIG1vdmluZyxcbiAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWSAmJiBldmVudC5zaGlmdEtleSxcbiAgICAgICAgbG9ja1gsXG4gICAgICAgIGxvY2tZLFxuICAgICAgICBwb2ludDAgPSBtb3VzZSh0aGF0KSxcbiAgICAgICAgcG9pbnQgPSBwb2ludDAsXG4gICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKTtcblxuICAgIGlmICh0eXBlID09PSBcIm92ZXJsYXlcIikge1xuICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uID0gW1xuICAgICAgICBbdzAgPSBkaW0gPT09IFkgPyBXIDogcG9pbnQwWzBdLCBuMCA9IGRpbSA9PT0gWCA/IE4gOiBwb2ludDBbMV1dLFxuICAgICAgICBbZTAgPSBkaW0gPT09IFkgPyBFIDogdzAsIHMwID0gZGltID09PSBYID8gUyA6IG4wXVxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdzAgPSBzZWxlY3Rpb25bMF1bMF07XG4gICAgICBuMCA9IHNlbGVjdGlvblswXVsxXTtcbiAgICAgIGUwID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgczAgPSBzZWxlY3Rpb25bMV1bMV07XG4gICAgfVxuXG4gICAgdzEgPSB3MDtcbiAgICBuMSA9IG4wO1xuICAgIGUxID0gZTA7XG4gICAgczEgPSBzMDtcblxuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGF0KVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcblxuICAgIHZhciBvdmVybGF5ID0gZ3JvdXAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG5cbiAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAub24oXCJ0b3VjaG1vdmUuYnJ1c2hcIiwgbW92ZWQsIHRydWUpXG4gICAgICAgICAgLm9uKFwidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2hcIiwgZW5kZWQsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdmlldyA9IHNlbGVjdChldmVudC52aWV3KVxuICAgICAgICAgIC5vbihcImtleWRvd24uYnJ1c2hcIiwga2V5ZG93bmVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcImtleXVwLmJydXNoXCIsIGtleXVwcGVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcIm1vdXNlbW92ZS5icnVzaFwiLCBtb3ZlZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJtb3VzZXVwLmJydXNoXCIsIGVuZGVkLCB0cnVlKTtcblxuICAgICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgfVxuXG4gICAgbm9wcm9wYWdhdGlvbigpO1xuICAgIGludGVycnVwdCh0aGF0KTtcbiAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICBlbWl0LnN0YXJ0KCk7XG5cbiAgICBmdW5jdGlvbiBtb3ZlZCgpIHtcbiAgICAgIHZhciBwb2ludDEgPSBtb3VzZSh0aGF0KTtcbiAgICAgIGlmIChzaGlmdGluZyAmJiAhbG9ja1ggJiYgIWxvY2tZKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhwb2ludDFbMF0gLSBwb2ludFswXSkgPiBNYXRoLmFicyhwb2ludDFbMV0gLSBwb2ludFsxXSkpIGxvY2tZID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBsb2NrWCA9IHRydWU7XG4gICAgICB9XG4gICAgICBwb2ludCA9IHBvaW50MTtcbiAgICAgIG1vdmluZyA9IHRydWU7XG4gICAgICBub2V2ZW50KCk7XG4gICAgICBtb3ZlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW92ZSgpIHtcbiAgICAgIHZhciB0O1xuXG4gICAgICBkeCA9IHBvaW50WzBdIC0gcG9pbnQwWzBdO1xuICAgICAgZHkgPSBwb2ludFsxXSAtIHBvaW50MFsxXTtcblxuICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgIGNhc2UgTU9ERV9TUEFDRTpcbiAgICAgICAgY2FzZSBNT0RFX0RSQUc6IHtcbiAgICAgICAgICBpZiAoc2lnblgpIGR4ID0gTWF0aC5tYXgoVyAtIHcwLCBNYXRoLm1pbihFIC0gZTAsIGR4KSksIHcxID0gdzAgKyBkeCwgZTEgPSBlMCArIGR4O1xuICAgICAgICAgIGlmIChzaWduWSkgZHkgPSBNYXRoLm1heChOIC0gbjAsIE1hdGgubWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0hBTkRMRToge1xuICAgICAgICAgIGlmIChzaWduWCA8IDApIGR4ID0gTWF0aC5tYXgoVyAtIHcwLCBNYXRoLm1pbihFIC0gdzAsIGR4KSksIHcxID0gdzAgKyBkeCwgZTEgPSBlMDtcbiAgICAgICAgICBlbHNlIGlmIChzaWduWCA+IDApIGR4ID0gTWF0aC5tYXgoVyAtIGUwLCBNYXRoLm1pbihFIC0gZTAsIGR4KSksIHcxID0gdzAsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkgPCAwKSBkeSA9IE1hdGgubWF4KE4gLSBuMCwgTWF0aC5taW4oUyAtIG4wLCBkeSkpLCBuMSA9IG4wICsgZHksIHMxID0gczA7XG4gICAgICAgICAgZWxzZSBpZiAoc2lnblkgPiAwKSBkeSA9IE1hdGgubWF4KE4gLSBzMCwgTWF0aC5taW4oUyAtIHMwLCBkeSkpLCBuMSA9IG4wLCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0NFTlRFUjoge1xuICAgICAgICAgIGlmIChzaWduWCkgdzEgPSBNYXRoLm1heChXLCBNYXRoLm1pbihFLCB3MCAtIGR4ICogc2lnblgpKSwgZTEgPSBNYXRoLm1heChXLCBNYXRoLm1pbihFLCBlMCArIGR4ICogc2lnblgpKTtcbiAgICAgICAgICBpZiAoc2lnblkpIG4xID0gTWF0aC5tYXgoTiwgTWF0aC5taW4oUywgbjAgLSBkeSAqIHNpZ25ZKSksIHMxID0gTWF0aC5tYXgoTiwgTWF0aC5taW4oUywgczAgKyBkeSAqIHNpZ25ZKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGUxIDwgdzEpIHtcbiAgICAgICAgc2lnblggKj0gLTE7XG4gICAgICAgIHQgPSB3MCwgdzAgPSBlMCwgZTAgPSB0O1xuICAgICAgICB0ID0gdzEsIHcxID0gZTEsIGUxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFgpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWFt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoczEgPCBuMSkge1xuICAgICAgICBzaWduWSAqPSAtMTtcbiAgICAgICAgdCA9IG4wLCBuMCA9IHMwLCBzMCA9IHQ7XG4gICAgICAgIHQgPSBuMSwgbjEgPSBzMSwgczEgPSB0O1xuICAgICAgICBpZiAodHlwZSBpbiBmbGlwWSkgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnNbdHlwZSA9IGZsaXBZW3R5cGVdXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIVxuICAgICAgaWYgKGxvY2tYKSB3MSA9IHNlbGVjdGlvblswXVswXSwgZTEgPSBzZWxlY3Rpb25bMV1bMF07XG4gICAgICBpZiAobG9ja1kpIG4xID0gc2VsZWN0aW9uWzBdWzFdLCBzMSA9IHNlbGVjdGlvblsxXVsxXTtcblxuICAgICAgaWYgKHNlbGVjdGlvblswXVswXSAhPT0gdzFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMF1bMV0gIT09IG4xXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzFdWzBdICE9PSBlMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVsxXSAhPT0gczEpIHtcbiAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gW1t3MSwgbjFdLCBbZTEsIHMxXV07XG4gICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kZWQoKSB7XG4gICAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgICAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgICAgICBncm91cC5vbihcInRvdWNobW92ZS5icnVzaCB0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaFwiLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYWdFbmFibGUoZXZlbnQudmlldywgbW92aW5nKTtcbiAgICAgICAgdmlldy5vbihcImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2hcIiwgbnVsbCk7XG4gICAgICB9XG4gICAgICBncm91cC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJhbGxcIik7XG4gICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5vdmVybGF5KTtcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIChvbiBzdGFydCkhXG4gICAgICBpZiAoZW1wdHkoc2VsZWN0aW9uKSkgc3RhdGUuc2VsZWN0aW9uID0gbnVsbCwgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICBlbWl0LmVuZCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleWRvd25lZCgpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICBjYXNlIDE2OiB7IC8vIFNISUZUXG4gICAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDE4OiB7IC8vIEFMVFxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX0hBTkRMRSkge1xuICAgICAgICAgICAgaWYgKHNpZ25YKSBlMCA9IGUxIC0gZHggKiBzaWduWCwgdzAgPSB3MSArIGR4ICogc2lnblg7XG4gICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIG1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzMjogeyAvLyBTUEFDRTsgdGFrZXMgcHJpb3JpdHkgb3ZlciBBTFRcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9IQU5ETEUgfHwgbW9kZSA9PT0gTU9ERV9DRU5URVIpIHtcbiAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTEgLSBkeDsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxIC0gZHg7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxIC0gZHk7IGVsc2UgaWYgKHNpZ25ZID4gMCkgbjAgPSBuMSAtIGR5O1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfU1BBQ0U7XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga2V5dXBwZWQoKSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgY2FzZSAxNjogeyAvLyBTSElGVFxuICAgICAgICAgIGlmIChzaGlmdGluZykge1xuICAgICAgICAgICAgbG9ja1ggPSBsb2NrWSA9IHNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxOyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzE7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0VcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9TUEFDRSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZKSBzMCA9IHMxIC0gZHkgKiBzaWduWSwgbjAgPSBuMSArIGR5ICogc2lnblk7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTE7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MTtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMTsgZWxzZSBpZiAoc2lnblkgPiAwKSBuMCA9IG4xO1xuICAgICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX19icnVzaCB8fCB7c2VsZWN0aW9uOiBudWxsfTtcbiAgICBzdGF0ZS5leHRlbnQgPSBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBzdGF0ZS5kaW0gPSBkaW07XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgYnJ1c2guZXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGV4dGVudCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoW1srX1swXVswXSwgK19bMF1bMV1dLCBbK19bMV1bMF0sICtfWzFdWzFdXV0pLCBicnVzaCkgOiBleHRlbnQ7XG4gIH07XG5cbiAgYnJ1c2guZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgYnJ1c2gpIDogZmlsdGVyO1xuICB9O1xuXG4gIGJydXNoLmhhbmRsZVNpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaGFuZGxlU2l6ZSA9ICtfLCBicnVzaCkgOiBoYW5kbGVTaXplO1xuICB9O1xuXG4gIGJydXNoLm9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlID0gbGlzdGVuZXJzLm9uLmFwcGx5KGxpc3RlbmVycywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IGxpc3RlbmVycyA/IGJydXNoIDogdmFsdWU7XG4gIH07XG5cbiAgcmV0dXJuIGJydXNoO1xufVxuIiwidmFyIHBpID0gTWF0aC5QSSxcbiAgICB0YXUgPSAyICogcGksXG4gICAgZXBzaWxvbiA9IDFlLTYsXG4gICAgdGF1RXBzaWxvbiA9IHRhdSAtIGVwc2lsb247XG5cbmZ1bmN0aW9uIFBhdGgoKSB7XG4gIHRoaXMuX3gwID0gdGhpcy5feTAgPSAvLyBzdGFydCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5feDEgPSB0aGlzLl95MSA9IG51bGw7IC8vIGVuZCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5fID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIG5ldyBQYXRoO1xufVxuXG5QYXRoLnByb3RvdHlwZSA9IHBhdGgucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogUGF0aCxcbiAgbW92ZVRvOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBjbG9zZVBhdGg6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl94MSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5feDEgPSB0aGlzLl94MCwgdGhpcy5feTEgPSB0aGlzLl95MDtcbiAgICAgIHRoaXMuXyArPSBcIlpcIjtcbiAgICB9XG4gIH0sXG4gIGxpbmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBxdWFkcmF0aWNDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJRXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkNcIiArICgreDEpICsgXCIsXCIgKyAoK3kxKSArIFwiLFwiICsgKCt4MikgKyBcIixcIiArICgreTIpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYXJjVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCByKSB7XG4gICAgeDEgPSAreDEsIHkxID0gK3kxLCB4MiA9ICt4MiwgeTIgPSAreTIsIHIgPSArcjtcbiAgICB2YXIgeDAgPSB0aGlzLl94MSxcbiAgICAgICAgeTAgPSB0aGlzLl95MSxcbiAgICAgICAgeDIxID0geDIgLSB4MSxcbiAgICAgICAgeTIxID0geTIgLSB5MSxcbiAgICAgICAgeDAxID0geDAgLSB4MSxcbiAgICAgICAgeTAxID0geTAgLSB5MSxcbiAgICAgICAgbDAxXzIgPSB4MDEgKiB4MDEgKyB5MDEgKiB5MDE7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDEseTEpLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4MCx5MCk/IERvIG5vdGhpbmcuXG4gICAgZWxzZSBpZiAoIShsMDFfMiA+IGVwc2lsb24pKSB7fVxuXG4gICAgLy8gT3IsIGFyZSAoeDAseTApLCAoeDEseTEpIGFuZCAoeDIseTIpIGNvbGxpbmVhcj9cbiAgICAvLyBFcXVpdmFsZW50bHksIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4Mix5Mik/XG4gICAgLy8gT3IsIGlzIHRoZSByYWRpdXMgemVybz8gTGluZSB0byAoeDEseTEpLlxuICAgIGVsc2UgaWYgKCEoTWF0aC5hYnMoeTAxICogeDIxIC0geTIxICogeDAxKSA+IGVwc2lsb24pIHx8ICFyKSB7XG4gICAgICB0aGlzLl8gKz0gXCJMXCIgKyAodGhpcy5feDEgPSB4MSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxKTtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIGRyYXcgYW4gYXJjIVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHgyMCA9IHgyIC0geDAsXG4gICAgICAgICAgeTIwID0geTIgLSB5MCxcbiAgICAgICAgICBsMjFfMiA9IHgyMSAqIHgyMSArIHkyMSAqIHkyMSxcbiAgICAgICAgICBsMjBfMiA9IHgyMCAqIHgyMCArIHkyMCAqIHkyMCxcbiAgICAgICAgICBsMjEgPSBNYXRoLnNxcnQobDIxXzIpLFxuICAgICAgICAgIGwwMSA9IE1hdGguc3FydChsMDFfMiksXG4gICAgICAgICAgbCA9IHIgKiBNYXRoLnRhbigocGkgLSBNYXRoLmFjb3MoKGwyMV8yICsgbDAxXzIgLSBsMjBfMikgLyAoMiAqIGwyMSAqIGwwMSkpKSAvIDIpLFxuICAgICAgICAgIHQwMSA9IGwgLyBsMDEsXG4gICAgICAgICAgdDIxID0gbCAvIGwyMTtcblxuICAgICAgLy8gSWYgdGhlIHN0YXJ0IHRhbmdlbnQgaXMgbm90IGNvaW5jaWRlbnQgd2l0aCAoeDAseTApLCBsaW5lIHRvLlxuICAgICAgaWYgKE1hdGguYWJzKHQwMSAtIDEpID4gZXBzaWxvbikge1xuICAgICAgICB0aGlzLl8gKz0gXCJMXCIgKyAoeDEgKyB0MDEgKiB4MDEpICsgXCIsXCIgKyAoeTEgKyB0MDEgKiB5MDEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwwLFwiICsgKCsoeTAxICogeDIwID4geDAxICogeTIwKSkgKyBcIixcIiArICh0aGlzLl94MSA9IHgxICsgdDIxICogeDIxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEgKyB0MjEgKiB5MjEpO1xuICAgIH1cbiAgfSxcbiAgYXJjOiBmdW5jdGlvbih4LCB5LCByLCBhMCwgYTEsIGNjdykge1xuICAgIHggPSAreCwgeSA9ICt5LCByID0gK3I7XG4gICAgdmFyIGR4ID0gciAqIE1hdGguY29zKGEwKSxcbiAgICAgICAgZHkgPSByICogTWF0aC5zaW4oYTApLFxuICAgICAgICB4MCA9IHggKyBkeCxcbiAgICAgICAgeTAgPSB5ICsgZHksXG4gICAgICAgIGN3ID0gMSBeIGNjdyxcbiAgICAgICAgZGEgPSBjY3cgPyBhMCAtIGExIDogYTEgLSBhMDtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKFwibmVnYXRpdmUgcmFkaXVzOiBcIiArIHIpO1xuXG4gICAgLy8gSXMgdGhpcyBwYXRoIGVtcHR5PyBNb3ZlIHRvICh4MCx5MCkuXG4gICAgaWYgKHRoaXMuX3gxID09PSBudWxsKSB7XG4gICAgICB0aGlzLl8gKz0gXCJNXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MCx5MCkgbm90IGNvaW5jaWRlbnQgd2l0aCB0aGUgcHJldmlvdXMgcG9pbnQ/IExpbmUgdG8gKHgwLHkwKS5cbiAgICBlbHNlIGlmIChNYXRoLmFicyh0aGlzLl94MSAtIHgwKSA+IGVwc2lsb24gfHwgTWF0aC5hYnModGhpcy5feTEgLSB5MCkgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJMXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgZW1wdHk/IFdl4oCZcmUgZG9uZS5cbiAgICBpZiAoIXIpIHJldHVybjtcblxuICAgIC8vIERvZXMgdGhlIGFuZ2xlIGdvIHRoZSB3cm9uZyB3YXk/IEZsaXAgdGhlIGRpcmVjdGlvbi5cbiAgICBpZiAoZGEgPCAwKSBkYSA9IGRhICUgdGF1ICsgdGF1O1xuXG4gICAgLy8gSXMgdGhpcyBhIGNvbXBsZXRlIGNpcmNsZT8gRHJhdyB0d28gYXJjcyB0byBjb21wbGV0ZSB0aGUgY2lyY2xlLlxuICAgIGlmIChkYSA+IHRhdUVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDEsXCIgKyBjdyArIFwiLFwiICsgKHggLSBkeCkgKyBcIixcIiArICh5IC0gZHkpICsgXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh0aGlzLl94MSA9IHgwKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTApO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIG5vbi1lbXB0eT8gRHJhdyBhbiBhcmMhXG4gICAgZWxzZSBpZiAoZGEgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCxcIiArICgrKGRhID49IHBpKSkgKyBcIixcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4ICsgciAqIE1hdGguY29zKGExKSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkgKyByICogTWF0aC5zaW4oYTEpKTtcbiAgICB9XG4gIH0sXG4gIHJlY3Q6IGZ1bmN0aW9uKHgsIHksIHcsIGgpIHtcbiAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDAgPSB0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kwID0gdGhpcy5feTEgPSAreSkgKyBcImhcIiArICgrdykgKyBcInZcIiArICgraCkgKyBcImhcIiArICgtdykgKyBcIlpcIjtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl87XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHBhdGg7XG4iLCJleHBvcnQgdmFyIHByZWZpeCA9IFwiJFwiO1xuXG5mdW5jdGlvbiBNYXAoKSB7fVxuXG5NYXAucHJvdG90eXBlID0gbWFwLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IE1hcCxcbiAgaGFzOiBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gKHByZWZpeCArIGtleSkgaW4gdGhpcztcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gdGhpc1twcmVmaXggKyBrZXldO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcbiAgICB0aGlzW3ByZWZpeCArIGtleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbihrZXkpIHtcbiAgICB2YXIgcHJvcGVydHkgPSBwcmVmaXggKyBrZXk7XG4gICAgcmV0dXJuIHByb3BlcnR5IGluIHRoaXMgJiYgZGVsZXRlIHRoaXNbcHJvcGVydHldO1xuICB9LFxuICBjbGVhcjogZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGRlbGV0ZSB0aGlzW3Byb3BlcnR5XTtcbiAgfSxcbiAga2V5czogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkga2V5cy5wdXNoKHByb3BlcnR5LnNsaWNlKDEpKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfSxcbiAgdmFsdWVzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIHZhbHVlcy5wdXNoKHRoaXNbcHJvcGVydHldKTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9LFxuICBlbnRyaWVzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZW50cmllcyA9IFtdO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSBlbnRyaWVzLnB1c2goe2tleTogcHJvcGVydHkuc2xpY2UoMSksIHZhbHVlOiB0aGlzW3Byb3BlcnR5XX0pO1xuICAgIHJldHVybiBlbnRyaWVzO1xuICB9LFxuICBzaXplOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2l6ZSA9IDA7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpICsrc2l6ZTtcbiAgICByZXR1cm4gc2l6ZTtcbiAgfSxcbiAgZW1wdHk6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGVhY2g6IGZ1bmN0aW9uKGYpIHtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgZih0aGlzW3Byb3BlcnR5XSwgcHJvcGVydHkuc2xpY2UoMSksIHRoaXMpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBtYXAob2JqZWN0LCBmKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwO1xuXG4gIC8vIENvcHkgY29uc3RydWN0b3IuXG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBNYXApIG9iamVjdC5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsgbWFwLnNldChrZXksIHZhbHVlKTsgfSk7XG5cbiAgLy8gSW5kZXggYXJyYXkgYnkgbnVtZXJpYyBpbmRleCBvciBzcGVjaWZpZWQga2V5IGZ1bmN0aW9uLlxuICBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICB2YXIgaSA9IC0xLFxuICAgICAgICBuID0gb2JqZWN0Lmxlbmd0aCxcbiAgICAgICAgbztcblxuICAgIGlmIChmID09IG51bGwpIHdoaWxlICgrK2kgPCBuKSBtYXAuc2V0KGksIG9iamVjdFtpXSk7XG4gICAgZWxzZSB3aGlsZSAoKytpIDwgbikgbWFwLnNldChmKG8gPSBvYmplY3RbaV0sIGksIG9iamVjdCksIG8pO1xuICB9XG5cbiAgLy8gQ29udmVydCBvYmplY3QgdG8gbWFwLlxuICBlbHNlIGlmIChvYmplY3QpIGZvciAodmFyIGtleSBpbiBvYmplY3QpIG1hcC5zZXQoa2V5LCBvYmplY3Rba2V5XSk7XG5cbiAgcmV0dXJuIG1hcDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwO1xuIiwiaW1wb3J0IHtkZWZhdWx0IGFzIG1hcCwgcHJlZml4fSBmcm9tIFwiLi9tYXBcIjtcblxuZnVuY3Rpb24gU2V0KCkge31cblxudmFyIHByb3RvID0gbWFwLnByb3RvdHlwZTtcblxuU2V0LnByb3RvdHlwZSA9IHNldC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBTZXQsXG4gIGhhczogcHJvdG8uaGFzLFxuICBhZGQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFsdWUgKz0gXCJcIjtcbiAgICB0aGlzW3ByZWZpeCArIHZhbHVlXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZW1vdmU6IHByb3RvLnJlbW92ZSxcbiAgY2xlYXI6IHByb3RvLmNsZWFyLFxuICB2YWx1ZXM6IHByb3RvLmtleXMsXG4gIHNpemU6IHByb3RvLnNpemUsXG4gIGVtcHR5OiBwcm90by5lbXB0eSxcbiAgZWFjaDogcHJvdG8uZWFjaFxufTtcblxuZnVuY3Rpb24gc2V0KG9iamVjdCwgZikge1xuICB2YXIgc2V0ID0gbmV3IFNldDtcblxuICAvLyBDb3B5IGNvbnN0cnVjdG9yLlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2V0KSBvYmplY3QuZWFjaChmdW5jdGlvbih2YWx1ZSkgeyBzZXQuYWRkKHZhbHVlKTsgfSk7XG5cbiAgLy8gT3RoZXJ3aXNlLCBhc3N1bWUgaXTigJlzIGFuIGFycmF5LlxuICBlbHNlIGlmIChvYmplY3QpIHtcbiAgICB2YXIgaSA9IC0xLCBuID0gb2JqZWN0Lmxlbmd0aDtcbiAgICBpZiAoZiA9PSBudWxsKSB3aGlsZSAoKytpIDwgbikgc2V0LmFkZChvYmplY3RbaV0pO1xuICAgIGVsc2Ugd2hpbGUgKCsraSA8IG4pIHNldC5hZGQoZihvYmplY3RbaV0sIGksIG9iamVjdCkpO1xuICB9XG5cbiAgcmV0dXJuIHNldDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0O1xuIiwiZnVuY3Rpb24gb2JqZWN0Q29udmVydGVyKGNvbHVtbnMpIHtcbiAgcmV0dXJuIG5ldyBGdW5jdGlvbihcImRcIiwgXCJyZXR1cm4ge1wiICsgY29sdW1ucy5tYXAoZnVuY3Rpb24obmFtZSwgaSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShuYW1lKSArIFwiOiBkW1wiICsgaSArIFwiXVwiO1xuICB9KS5qb2luKFwiLFwiKSArIFwifVwiKTtcbn1cblxuZnVuY3Rpb24gY3VzdG9tQ29udmVydGVyKGNvbHVtbnMsIGYpIHtcbiAgdmFyIG9iamVjdCA9IG9iamVjdENvbnZlcnRlcihjb2x1bW5zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHJvdywgaSkge1xuICAgIHJldHVybiBmKG9iamVjdChyb3cpLCBpLCBjb2x1bW5zKTtcbiAgfTtcbn1cblxuLy8gQ29tcHV0ZSB1bmlxdWUgY29sdW1ucyBpbiBvcmRlciBvZiBkaXNjb3ZlcnkuXG5mdW5jdGlvbiBpbmZlckNvbHVtbnMocm93cykge1xuICB2YXIgY29sdW1uU2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgIGNvbHVtbnMgPSBbXTtcblxuICByb3dzLmZvckVhY2goZnVuY3Rpb24ocm93KSB7XG4gICAgZm9yICh2YXIgY29sdW1uIGluIHJvdykge1xuICAgICAgaWYgKCEoY29sdW1uIGluIGNvbHVtblNldCkpIHtcbiAgICAgICAgY29sdW1ucy5wdXNoKGNvbHVtblNldFtjb2x1bW5dID0gY29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkZWxpbWl0ZXIpIHtcbiAgdmFyIHJlRm9ybWF0ID0gbmV3IFJlZ0V4cChcIltcXFwiXCIgKyBkZWxpbWl0ZXIgKyBcIlxcblxccl1cIiksXG4gICAgICBkZWxpbWl0ZXJDb2RlID0gZGVsaW1pdGVyLmNoYXJDb2RlQXQoMCk7XG5cbiAgZnVuY3Rpb24gcGFyc2UodGV4dCwgZikge1xuICAgIHZhciBjb252ZXJ0LCBjb2x1bW5zLCByb3dzID0gcGFyc2VSb3dzKHRleHQsIGZ1bmN0aW9uKHJvdywgaSkge1xuICAgICAgaWYgKGNvbnZlcnQpIHJldHVybiBjb252ZXJ0KHJvdywgaSAtIDEpO1xuICAgICAgY29sdW1ucyA9IHJvdywgY29udmVydCA9IGYgPyBjdXN0b21Db252ZXJ0ZXIocm93LCBmKSA6IG9iamVjdENvbnZlcnRlcihyb3cpO1xuICAgIH0pO1xuICAgIHJvd3MuY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgcmV0dXJuIHJvd3M7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVJvd3ModGV4dCwgZikge1xuICAgIHZhciBFT0wgPSB7fSwgLy8gc2VudGluZWwgdmFsdWUgZm9yIGVuZC1vZi1saW5lXG4gICAgICAgIEVPRiA9IHt9LCAvLyBzZW50aW5lbCB2YWx1ZSBmb3IgZW5kLW9mLWZpbGVcbiAgICAgICAgcm93cyA9IFtdLCAvLyBvdXRwdXQgcm93c1xuICAgICAgICBOID0gdGV4dC5sZW5ndGgsXG4gICAgICAgIEkgPSAwLCAvLyBjdXJyZW50IGNoYXJhY3RlciBpbmRleFxuICAgICAgICBuID0gMCwgLy8gdGhlIGN1cnJlbnQgbGluZSBudW1iZXJcbiAgICAgICAgdCwgLy8gdGhlIGN1cnJlbnQgdG9rZW5cbiAgICAgICAgZW9sOyAvLyBpcyB0aGUgY3VycmVudCB0b2tlbiBmb2xsb3dlZCBieSBFT0w/XG5cbiAgICBmdW5jdGlvbiB0b2tlbigpIHtcbiAgICAgIGlmIChJID49IE4pIHJldHVybiBFT0Y7IC8vIHNwZWNpYWwgY2FzZTogZW5kIG9mIGZpbGVcbiAgICAgIGlmIChlb2wpIHJldHVybiBlb2wgPSBmYWxzZSwgRU9MOyAvLyBzcGVjaWFsIGNhc2U6IGVuZCBvZiBsaW5lXG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogcXVvdGVzXG4gICAgICB2YXIgaiA9IEksIGM7XG4gICAgICBpZiAodGV4dC5jaGFyQ29kZUF0KGopID09PSAzNCkge1xuICAgICAgICB2YXIgaSA9IGo7XG4gICAgICAgIHdoaWxlIChpKysgPCBOKSB7XG4gICAgICAgICAgaWYgKHRleHQuY2hhckNvZGVBdChpKSA9PT0gMzQpIHtcbiAgICAgICAgICAgIGlmICh0ZXh0LmNoYXJDb2RlQXQoaSArIDEpICE9PSAzNCkgYnJlYWs7XG4gICAgICAgICAgICArK2k7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEkgPSBpICsgMjtcbiAgICAgICAgYyA9IHRleHQuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICAgIGlmIChjID09PSAxMykge1xuICAgICAgICAgIGVvbCA9IHRydWU7XG4gICAgICAgICAgaWYgKHRleHQuY2hhckNvZGVBdChpICsgMikgPT09IDEwKSArK0k7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gMTApIHtcbiAgICAgICAgICBlb2wgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0LnNsaWNlKGogKyAxLCBpKS5yZXBsYWNlKC9cIlwiL2csIFwiXFxcIlwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gY29tbW9uIGNhc2U6IGZpbmQgbmV4dCBkZWxpbWl0ZXIgb3IgbmV3bGluZVxuICAgICAgd2hpbGUgKEkgPCBOKSB7XG4gICAgICAgIHZhciBrID0gMTtcbiAgICAgICAgYyA9IHRleHQuY2hhckNvZGVBdChJKyspO1xuICAgICAgICBpZiAoYyA9PT0gMTApIGVvbCA9IHRydWU7IC8vIFxcblxuICAgICAgICBlbHNlIGlmIChjID09PSAxMykgeyBlb2wgPSB0cnVlOyBpZiAodGV4dC5jaGFyQ29kZUF0KEkpID09PSAxMCkgKytJLCArK2s7IH0gLy8gXFxyfFxcclxcblxuICAgICAgICBlbHNlIGlmIChjICE9PSBkZWxpbWl0ZXJDb2RlKSBjb250aW51ZTtcbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2UoaiwgSSAtIGspO1xuICAgICAgfVxuXG4gICAgICAvLyBzcGVjaWFsIGNhc2U6IGxhc3QgdG9rZW4gYmVmb3JlIEVPRlxuICAgICAgcmV0dXJuIHRleHQuc2xpY2Uoaik7XG4gICAgfVxuXG4gICAgd2hpbGUgKCh0ID0gdG9rZW4oKSkgIT09IEVPRikge1xuICAgICAgdmFyIGEgPSBbXTtcbiAgICAgIHdoaWxlICh0ICE9PSBFT0wgJiYgdCAhPT0gRU9GKSB7XG4gICAgICAgIGEucHVzaCh0KTtcbiAgICAgICAgdCA9IHRva2VuKCk7XG4gICAgICB9XG4gICAgICBpZiAoZiAmJiAoYSA9IGYoYSwgbisrKSkgPT0gbnVsbCkgY29udGludWU7XG4gICAgICByb3dzLnB1c2goYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3M7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXQocm93cywgY29sdW1ucykge1xuICAgIGlmIChjb2x1bW5zID09IG51bGwpIGNvbHVtbnMgPSBpbmZlckNvbHVtbnMocm93cyk7XG4gICAgcmV0dXJuIFtjb2x1bW5zLm1hcChmb3JtYXRWYWx1ZSkuam9pbihkZWxpbWl0ZXIpXS5jb25jYXQocm93cy5tYXAoZnVuY3Rpb24ocm93KSB7XG4gICAgICByZXR1cm4gY29sdW1ucy5tYXAoZnVuY3Rpb24oY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRWYWx1ZShyb3dbY29sdW1uXSk7XG4gICAgICB9KS5qb2luKGRlbGltaXRlcik7XG4gICAgfSkpLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRSb3dzKHJvd3MpIHtcbiAgICByZXR1cm4gcm93cy5tYXAoZm9ybWF0Um93KS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0Um93KHJvdykge1xuICAgIHJldHVybiByb3cubWFwKGZvcm1hdFZhbHVlKS5qb2luKGRlbGltaXRlcik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRWYWx1ZSh0ZXh0KSB7XG4gICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/IFwiXCJcbiAgICAgICAgOiByZUZvcm1hdC50ZXN0KHRleHQgKz0gXCJcIikgPyBcIlxcXCJcIiArIHRleHQucmVwbGFjZSgvXFxcIi9nLCBcIlxcXCJcXFwiXCIpICsgXCJcXFwiXCJcbiAgICAgICAgOiB0ZXh0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXJzZTogcGFyc2UsXG4gICAgcGFyc2VSb3dzOiBwYXJzZVJvd3MsXG4gICAgZm9ybWF0OiBmb3JtYXQsXG4gICAgZm9ybWF0Um93czogZm9ybWF0Um93c1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZCkge1xuICB2YXIgeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCksXG4gICAgICB5ID0gK3RoaXMuX3kuY2FsbChudWxsLCBkKTtcbiAgcmV0dXJuIGFkZCh0aGlzLmNvdmVyKHgsIHkpLCB4LCB5LCBkKTtcbn1cblxuZnVuY3Rpb24gYWRkKHRyZWUsIHgsIHksIGQpIHtcbiAgaWYgKGlzTmFOKHgpIHx8IGlzTmFOKHkpKSByZXR1cm4gdHJlZTsgLy8gaWdub3JlIGludmFsaWQgcG9pbnRzXG5cbiAgdmFyIHBhcmVudCxcbiAgICAgIG5vZGUgPSB0cmVlLl9yb290LFxuICAgICAgbGVhZiA9IHtkYXRhOiBkfSxcbiAgICAgIHgwID0gdHJlZS5feDAsXG4gICAgICB5MCA9IHRyZWUuX3kwLFxuICAgICAgeDEgPSB0cmVlLl94MSxcbiAgICAgIHkxID0gdHJlZS5feTEsXG4gICAgICB4bSxcbiAgICAgIHltLFxuICAgICAgeHAsXG4gICAgICB5cCxcbiAgICAgIHJpZ2h0LFxuICAgICAgYm90dG9tLFxuICAgICAgaSxcbiAgICAgIGo7XG5cbiAgLy8gSWYgdGhlIHRyZWUgaXMgZW1wdHksIGluaXRpYWxpemUgdGhlIHJvb3QgYXMgYSBsZWFmLlxuICBpZiAoIW5vZGUpIHJldHVybiB0cmVlLl9yb290ID0gbGVhZiwgdHJlZTtcblxuICAvLyBGaW5kIHRoZSBleGlzdGluZyBsZWFmIGZvciB0aGUgbmV3IHBvaW50LCBvciBhZGQgaXQuXG4gIHdoaWxlIChub2RlLmxlbmd0aCkge1xuICAgIGlmIChyaWdodCA9IHggPj0gKHhtID0gKHgwICsgeDEpIC8gMikpIHgwID0geG07IGVsc2UgeDEgPSB4bTtcbiAgICBpZiAoYm90dG9tID0geSA+PSAoeW0gPSAoeTAgKyB5MSkgLyAyKSkgeTAgPSB5bTsgZWxzZSB5MSA9IHltO1xuICAgIGlmIChwYXJlbnQgPSBub2RlLCAhKG5vZGUgPSBub2RlW2kgPSBib3R0b20gPDwgMSB8IHJpZ2h0XSkpIHJldHVybiBwYXJlbnRbaV0gPSBsZWFmLCB0cmVlO1xuICB9XG5cbiAgLy8gSXMgdGhlIG5ldyBwb2ludCBpcyBleGFjdGx5IGNvaW5jaWRlbnQgd2l0aCB0aGUgZXhpc3RpbmcgcG9pbnQ/XG4gIHhwID0gK3RyZWUuX3guY2FsbChudWxsLCBub2RlLmRhdGEpO1xuICB5cCA9ICt0cmVlLl95LmNhbGwobnVsbCwgbm9kZS5kYXRhKTtcbiAgaWYgKHggPT09IHhwICYmIHkgPT09IHlwKSByZXR1cm4gbGVhZi5uZXh0ID0gbm9kZSwgcGFyZW50ID8gcGFyZW50W2ldID0gbGVhZiA6IHRyZWUuX3Jvb3QgPSBsZWFmLCB0cmVlO1xuXG4gIC8vIE90aGVyd2lzZSwgc3BsaXQgdGhlIGxlYWYgbm9kZSB1bnRpbCB0aGUgb2xkIGFuZCBuZXcgcG9pbnQgYXJlIHNlcGFyYXRlZC5cbiAgZG8ge1xuICAgIHBhcmVudCA9IHBhcmVudCA/IHBhcmVudFtpXSA9IG5ldyBBcnJheSg0KSA6IHRyZWUuX3Jvb3QgPSBuZXcgQXJyYXkoNCk7XG4gICAgaWYgKHJpZ2h0ID0geCA+PSAoeG0gPSAoeDAgKyB4MSkgLyAyKSkgeDAgPSB4bTsgZWxzZSB4MSA9IHhtO1xuICAgIGlmIChib3R0b20gPSB5ID49ICh5bSA9ICh5MCArIHkxKSAvIDIpKSB5MCA9IHltOyBlbHNlIHkxID0geW07XG4gIH0gd2hpbGUgKChpID0gYm90dG9tIDw8IDEgfCByaWdodCkgPT09IChqID0gKHlwID49IHltKSA8PCAxIHwgKHhwID49IHhtKSkpO1xuICByZXR1cm4gcGFyZW50W2pdID0gbm9kZSwgcGFyZW50W2ldID0gbGVhZiwgdHJlZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEFsbChkYXRhKSB7XG4gIHZhciBkLCBpLCBuID0gZGF0YS5sZW5ndGgsXG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHh6ID0gbmV3IEFycmF5KG4pLFxuICAgICAgeXogPSBuZXcgQXJyYXkobiksXG4gICAgICB4MCA9IEluZmluaXR5LFxuICAgICAgeTAgPSBJbmZpbml0eSxcbiAgICAgIHgxID0gLUluZmluaXR5LFxuICAgICAgeTEgPSAtSW5maW5pdHk7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgcG9pbnRzIGFuZCB0aGVpciBleHRlbnQuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoaXNOYU4oeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCA9IGRhdGFbaV0pKSB8fCBpc05hTih5ID0gK3RoaXMuX3kuY2FsbChudWxsLCBkKSkpIGNvbnRpbnVlO1xuICAgIHh6W2ldID0geDtcbiAgICB5eltpXSA9IHk7XG4gICAgaWYgKHggPCB4MCkgeDAgPSB4O1xuICAgIGlmICh4ID4geDEpIHgxID0geDtcbiAgICBpZiAoeSA8IHkwKSB5MCA9IHk7XG4gICAgaWYgKHkgPiB5MSkgeTEgPSB5O1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgd2VyZSBubyAodmFsaWQpIHBvaW50cywgaW5oZXJpdCB0aGUgZXhpc3RpbmcgZXh0ZW50LlxuICBpZiAoeDEgPCB4MCkgeDAgPSB0aGlzLl94MCwgeDEgPSB0aGlzLl94MTtcbiAgaWYgKHkxIDwgeTApIHkwID0gdGhpcy5feTAsIHkxID0gdGhpcy5feTE7XG5cbiAgLy8gRXhwYW5kIHRoZSB0cmVlIHRvIGNvdmVyIHRoZSBuZXcgcG9pbnRzLlxuICB0aGlzLmNvdmVyKHgwLCB5MCkuY292ZXIoeDEsIHkxKTtcblxuICAvLyBBZGQgdGhlIG5ldyBwb2ludHMuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICBhZGQodGhpcywgeHpbaV0sIHl6W2ldLCBkYXRhW2ldKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZCkge1xuICBpZiAoaXNOYU4oeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCkpIHx8IGlzTmFOKHkgPSArdGhpcy5feS5jYWxsKG51bGwsIGQpKSkgcmV0dXJuIHRoaXM7IC8vIGlnbm9yZSBpbnZhbGlkIHBvaW50c1xuXG4gIHZhciBwYXJlbnQsXG4gICAgICBub2RlID0gdGhpcy5fcm9vdCxcbiAgICAgIHJldGFpbmVyLFxuICAgICAgcHJldmlvdXMsXG4gICAgICBuZXh0LFxuICAgICAgeDAgPSB0aGlzLl94MCxcbiAgICAgIHkwID0gdGhpcy5feTAsXG4gICAgICB4MSA9IHRoaXMuX3gxLFxuICAgICAgeTEgPSB0aGlzLl95MSxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgeG0sXG4gICAgICB5bSxcbiAgICAgIHJpZ2h0LFxuICAgICAgYm90dG9tLFxuICAgICAgaSxcbiAgICAgIGo7XG5cbiAgLy8gSWYgdGhlIHRyZWUgaXMgZW1wdHksIGluaXRpYWxpemUgdGhlIHJvb3QgYXMgYSBsZWFmLlxuICBpZiAoIW5vZGUpIHJldHVybiB0aGlzO1xuXG4gIC8vIEZpbmQgdGhlIGxlYWYgbm9kZSBmb3IgdGhlIHBvaW50LlxuICAvLyBXaGlsZSBkZXNjZW5kaW5nLCBhbHNvIHJldGFpbiB0aGUgZGVlcGVzdCBwYXJlbnQgd2l0aCBhIG5vbi1yZW1vdmVkIHNpYmxpbmcuXG4gIGlmIChub2RlLmxlbmd0aCkgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAocmlnaHQgPSB4ID49ICh4bSA9ICh4MCArIHgxKSAvIDIpKSB4MCA9IHhtOyBlbHNlIHgxID0geG07XG4gICAgaWYgKGJvdHRvbSA9IHkgPj0gKHltID0gKHkwICsgeTEpIC8gMikpIHkwID0geW07IGVsc2UgeTEgPSB5bTtcbiAgICBpZiAoIShwYXJlbnQgPSBub2RlLCBub2RlID0gbm9kZVtpID0gYm90dG9tIDw8IDEgfCByaWdodF0pKSByZXR1cm4gdGhpcztcbiAgICBpZiAoIW5vZGUubGVuZ3RoKSBicmVhaztcbiAgICBpZiAocGFyZW50WyhpICsgMSkgJiAzXSB8fCBwYXJlbnRbKGkgKyAyKSAmIDNdIHx8IHBhcmVudFsoaSArIDMpICYgM10pIHJldGFpbmVyID0gcGFyZW50LCBqID0gaTtcbiAgfVxuXG4gIC8vIEZpbmQgdGhlIHBvaW50IHRvIHJlbW92ZS5cbiAgd2hpbGUgKG5vZGUuZGF0YSAhPT0gZCkgaWYgKCEocHJldmlvdXMgPSBub2RlLCBub2RlID0gbm9kZS5uZXh0KSkgcmV0dXJuIHRoaXM7XG4gIGlmIChuZXh0ID0gbm9kZS5uZXh0KSBkZWxldGUgbm9kZS5uZXh0O1xuXG4gIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb2luY2lkZW50IHBvaW50cywgcmVtb3ZlIGp1c3QgdGhlIHBvaW50LlxuICBpZiAocHJldmlvdXMpIHJldHVybiAobmV4dCA/IHByZXZpb3VzLm5leHQgPSBuZXh0IDogZGVsZXRlIHByZXZpb3VzLm5leHQpLCB0aGlzO1xuXG4gIC8vIElmIHRoaXMgaXMgdGhlIHJvb3QgcG9pbnQsIHJlbW92ZSBpdC5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiB0aGlzLl9yb290ID0gbmV4dCwgdGhpcztcblxuICAvLyBSZW1vdmUgdGhpcyBsZWFmLlxuICBuZXh0ID8gcGFyZW50W2ldID0gbmV4dCA6IGRlbGV0ZSBwYXJlbnRbaV07XG5cbiAgLy8gSWYgdGhlIHBhcmVudCBub3cgY29udGFpbnMgZXhhY3RseSBvbmUgbGVhZiwgY29sbGFwc2Ugc3VwZXJmbHVvdXMgcGFyZW50cy5cbiAgaWYgKChub2RlID0gcGFyZW50WzBdIHx8IHBhcmVudFsxXSB8fCBwYXJlbnRbMl0gfHwgcGFyZW50WzNdKVxuICAgICAgJiYgbm9kZSA9PT0gKHBhcmVudFszXSB8fCBwYXJlbnRbMl0gfHwgcGFyZW50WzFdIHx8IHBhcmVudFswXSlcbiAgICAgICYmICFub2RlLmxlbmd0aCkge1xuICAgIGlmIChyZXRhaW5lcikgcmV0YWluZXJbal0gPSBub2RlO1xuICAgIGVsc2UgdGhpcy5fcm9vdCA9IG5vZGU7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUFsbChkYXRhKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gZGF0YS5sZW5ndGg7IGkgPCBuOyArK2kpIHRoaXMucmVtb3ZlKGRhdGFbaV0pO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0WChkKSB7XG4gIHJldHVybiBkWzBdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihfKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRoaXMuX3ggPSBfLCB0aGlzKSA6IHRoaXMuX3g7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZGVmYXVsdFkoZCkge1xuICByZXR1cm4gZFsxXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oXykge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aGlzLl95ID0gXywgdGhpcykgOiB0aGlzLl95O1xufVxuIiwiaW1wb3J0IHRyZWVfYWRkLCB7YWRkQWxsIGFzIHRyZWVfYWRkQWxsfSBmcm9tIFwiLi9hZGRcIjtcbmltcG9ydCB0cmVlX2NvdmVyIGZyb20gXCIuL2NvdmVyXCI7XG5pbXBvcnQgdHJlZV9kYXRhIGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCB0cmVlX2V4dGVudCBmcm9tIFwiLi9leHRlbnRcIjtcbmltcG9ydCB0cmVlX2ZpbmQgZnJvbSBcIi4vZmluZFwiO1xuaW1wb3J0IHRyZWVfcmVtb3ZlLCB7cmVtb3ZlQWxsIGFzIHRyZWVfcmVtb3ZlQWxsfSBmcm9tIFwiLi9yZW1vdmVcIjtcbmltcG9ydCB0cmVlX3Jvb3QgZnJvbSBcIi4vcm9vdFwiO1xuaW1wb3J0IHRyZWVfc2l6ZSBmcm9tIFwiLi9zaXplXCI7XG5pbXBvcnQgdHJlZV92aXNpdCBmcm9tIFwiLi92aXNpdFwiO1xuaW1wb3J0IHRyZWVfdmlzaXRBZnRlciBmcm9tIFwiLi92aXNpdEFmdGVyXCI7XG5pbXBvcnQgdHJlZV94LCB7ZGVmYXVsdFh9IGZyb20gXCIuL3hcIjtcbmltcG9ydCB0cmVlX3ksIHtkZWZhdWx0WX0gZnJvbSBcIi4veVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWFkdHJlZShub2RlcywgeCwgeSkge1xuICB2YXIgdHJlZSA9IG5ldyBRdWFkdHJlZSh4ID09IG51bGwgPyBkZWZhdWx0WCA6IHgsIHkgPT0gbnVsbCA/IGRlZmF1bHRZIDogeSwgTmFOLCBOYU4sIE5hTiwgTmFOKTtcbiAgcmV0dXJuIG5vZGVzID09IG51bGwgPyB0cmVlIDogdHJlZS5hZGRBbGwobm9kZXMpO1xufVxuXG5mdW5jdGlvbiBRdWFkdHJlZSh4LCB5LCB4MCwgeTAsIHgxLCB5MSkge1xuICB0aGlzLl94ID0geDtcbiAgdGhpcy5feSA9IHk7XG4gIHRoaXMuX3gwID0geDA7XG4gIHRoaXMuX3kwID0geTA7XG4gIHRoaXMuX3gxID0geDE7XG4gIHRoaXMuX3kxID0geTE7XG4gIHRoaXMuX3Jvb3QgPSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGxlYWZfY29weShsZWFmKSB7XG4gIHZhciBjb3B5ID0ge2RhdGE6IGxlYWYuZGF0YX0sIG5leHQgPSBjb3B5O1xuICB3aGlsZSAobGVhZiA9IGxlYWYubmV4dCkgbmV4dCA9IG5leHQubmV4dCA9IHtkYXRhOiBsZWFmLmRhdGF9O1xuICByZXR1cm4gY29weTtcbn1cblxudmFyIHRyZWVQcm90byA9IHF1YWR0cmVlLnByb3RvdHlwZSA9IFF1YWR0cmVlLnByb3RvdHlwZTtcblxudHJlZVByb3RvLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvcHkgPSBuZXcgUXVhZHRyZWUodGhpcy5feCwgdGhpcy5feSwgdGhpcy5feDAsIHRoaXMuX3kwLCB0aGlzLl94MSwgdGhpcy5feTEpLFxuICAgICAgbm9kZSA9IHRoaXMuX3Jvb3QsXG4gICAgICBub2RlcyxcbiAgICAgIGNoaWxkO1xuXG4gIGlmICghbm9kZSkgcmV0dXJuIGNvcHk7XG5cbiAgaWYgKCFub2RlLmxlbmd0aCkgcmV0dXJuIGNvcHkuX3Jvb3QgPSBsZWFmX2NvcHkobm9kZSksIGNvcHk7XG5cbiAgbm9kZXMgPSBbe3NvdXJjZTogbm9kZSwgdGFyZ2V0OiBjb3B5Ll9yb290ID0gbmV3IEFycmF5KDQpfV07XG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgaWYgKGNoaWxkID0gbm9kZS5zb3VyY2VbaV0pIHtcbiAgICAgICAgaWYgKGNoaWxkLmxlbmd0aCkgbm9kZXMucHVzaCh7c291cmNlOiBjaGlsZCwgdGFyZ2V0OiBub2RlLnRhcmdldFtpXSA9IG5ldyBBcnJheSg0KX0pO1xuICAgICAgICBlbHNlIG5vZGUudGFyZ2V0W2ldID0gbGVhZl9jb3B5KGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29weTtcbn07XG5cbnRyZWVQcm90by5hZGQgPSB0cmVlX2FkZDtcbnRyZWVQcm90by5hZGRBbGwgPSB0cmVlX2FkZEFsbDtcbnRyZWVQcm90by5jb3ZlciA9IHRyZWVfY292ZXI7XG50cmVlUHJvdG8uZGF0YSA9IHRyZWVfZGF0YTtcbnRyZWVQcm90by5leHRlbnQgPSB0cmVlX2V4dGVudDtcbnRyZWVQcm90by5maW5kID0gdHJlZV9maW5kO1xudHJlZVByb3RvLnJlbW92ZSA9IHRyZWVfcmVtb3ZlO1xudHJlZVByb3RvLnJlbW92ZUFsbCA9IHRyZWVfcmVtb3ZlQWxsO1xudHJlZVByb3RvLnJvb3QgPSB0cmVlX3Jvb3Q7XG50cmVlUHJvdG8uc2l6ZSA9IHRyZWVfc2l6ZTtcbnRyZWVQcm90by52aXNpdCA9IHRyZWVfdmlzaXQ7XG50cmVlUHJvdG8udmlzaXRBZnRlciA9IHRyZWVfdmlzaXRBZnRlcjtcbnRyZWVQcm90by54ID0gdHJlZV94O1xudHJlZVByb3RvLnkgPSB0cmVlX3k7XG4iLCJpbXBvcnQgZm9ybWF0VHlwZXMgZnJvbSBcIi4vZm9ybWF0VHlwZXNcIjtcblxuLy8gW1tmaWxsXWFsaWduXVtzaWduXVtzeW1ib2xdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt0eXBlXVxudmFyIHJlID0gL14oPzooLik/KFs8Pj1eXSkpPyhbK1xcLVxcKCBdKT8oWyQjXSk/KDApPyhcXGQrKT8oLCk/KFxcLlxcZCspPyhbYS16JV0pPyQvaTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICByZXR1cm4gbmV3IEZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpO1xufVxuXG5mb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlID0gRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZTsgLy8gaW5zdGFuY2VvZlxuXG5mdW5jdGlvbiBGb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gIGlmICghKG1hdGNoID0gcmUuZXhlYyhzcGVjaWZpZXIpKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBmb3JtYXQ6IFwiICsgc3BlY2lmaWVyKTtcblxuICB2YXIgbWF0Y2gsXG4gICAgICBmaWxsID0gbWF0Y2hbMV0gfHwgXCIgXCIsXG4gICAgICBhbGlnbiA9IG1hdGNoWzJdIHx8IFwiPlwiLFxuICAgICAgc2lnbiA9IG1hdGNoWzNdIHx8IFwiLVwiLFxuICAgICAgc3ltYm9sID0gbWF0Y2hbNF0gfHwgXCJcIixcbiAgICAgIHplcm8gPSAhIW1hdGNoWzVdLFxuICAgICAgd2lkdGggPSBtYXRjaFs2XSAmJiArbWF0Y2hbNl0sXG4gICAgICBjb21tYSA9ICEhbWF0Y2hbN10sXG4gICAgICBwcmVjaXNpb24gPSBtYXRjaFs4XSAmJiArbWF0Y2hbOF0uc2xpY2UoMSksXG4gICAgICB0eXBlID0gbWF0Y2hbOV0gfHwgXCJcIjtcblxuICAvLyBUaGUgXCJuXCIgdHlwZSBpcyBhbiBhbGlhcyBmb3IgXCIsZ1wiLlxuICBpZiAodHlwZSA9PT0gXCJuXCIpIGNvbW1hID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gIC8vIE1hcCBpbnZhbGlkIHR5cGVzIHRvIHRoZSBkZWZhdWx0IGZvcm1hdC5cbiAgZWxzZSBpZiAoIWZvcm1hdFR5cGVzW3R5cGVdKSB0eXBlID0gXCJcIjtcblxuICAvLyBJZiB6ZXJvIGZpbGwgaXMgc3BlY2lmaWVkLCBwYWRkaW5nIGdvZXMgYWZ0ZXIgc2lnbiBhbmQgYmVmb3JlIGRpZ2l0cy5cbiAgaWYgKHplcm8gfHwgKGZpbGwgPT09IFwiMFwiICYmIGFsaWduID09PSBcIj1cIikpIHplcm8gPSB0cnVlLCBmaWxsID0gXCIwXCIsIGFsaWduID0gXCI9XCI7XG5cbiAgdGhpcy5maWxsID0gZmlsbDtcbiAgdGhpcy5hbGlnbiA9IGFsaWduO1xuICB0aGlzLnNpZ24gPSBzaWduO1xuICB0aGlzLnN5bWJvbCA9IHN5bWJvbDtcbiAgdGhpcy56ZXJvID0gemVybztcbiAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICB0aGlzLmNvbW1hID0gY29tbWE7XG4gIHRoaXMucHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xufVxuXG5Gb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmZpbGxcbiAgICAgICsgdGhpcy5hbGlnblxuICAgICAgKyB0aGlzLnNpZ25cbiAgICAgICsgdGhpcy5zeW1ib2xcbiAgICAgICsgKHRoaXMuemVybyA/IFwiMFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMud2lkdGggPT0gbnVsbCA/IFwiXCIgOiBNYXRoLm1heCgxLCB0aGlzLndpZHRoIHwgMCkpXG4gICAgICArICh0aGlzLmNvbW1hID8gXCIsXCIgOiBcIlwiKVxuICAgICAgKyAodGhpcy5wcmVjaXNpb24gPT0gbnVsbCA/IFwiXCIgOiBcIi5cIiArIE1hdGgubWF4KDAsIHRoaXMucHJlY2lzaW9uIHwgMCkpXG4gICAgICArIHRoaXMudHlwZTtcbn07XG4iLCIvLyBBZGRzIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgd2l0aCB0d2ljZSB0aGUgbm9ybWFsIHByZWNpc2lvbi5cbi8vIFJlZmVyZW5jZTogSi4gUi4gU2hld2NodWssIEFkYXB0aXZlIFByZWNpc2lvbiBGbG9hdGluZy1Qb2ludCBBcml0aG1ldGljIGFuZFxuLy8gRmFzdCBSb2J1c3QgR2VvbWV0cmljIFByZWRpY2F0ZXMsIERpc2NyZXRlICYgQ29tcHV0YXRpb25hbCBHZW9tZXRyeSAxOCgzKVxuLy8gMzA14oCTMzYzICgxOTk3KS5cbi8vIENvZGUgYWRhcHRlZCBmcm9tIEdlb2dyYXBoaWNMaWIgYnkgQ2hhcmxlcyBGLiBGLiBLYXJuZXksXG4vLyBodHRwOi8vZ2VvZ3JhcGhpY2xpYi5zb3VyY2Vmb3JnZS5uZXQvXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IEFkZGVyO1xufVxuXG5mdW5jdGlvbiBBZGRlcigpIHtcbiAgdGhpcy5yZXNldCgpO1xufVxuXG5BZGRlci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBBZGRlcixcbiAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucyA9IC8vIHJvdW5kZWQgdmFsdWVcbiAgICB0aGlzLnQgPSAwOyAvLyBleGFjdCBlcnJvclxuICB9LFxuICBhZGQ6IGZ1bmN0aW9uKHkpIHtcbiAgICBhZGQodGVtcCwgeSwgdGhpcy50KTtcbiAgICBhZGQodGhpcywgdGVtcC5zLCB0aGlzLnMpO1xuICAgIGlmICh0aGlzLnMpIHRoaXMudCArPSB0ZW1wLnQ7XG4gICAgZWxzZSB0aGlzLnMgPSB0ZW1wLnQ7XG4gIH0sXG4gIHZhbHVlT2Y6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnM7XG4gIH1cbn07XG5cbnZhciB0ZW1wID0gbmV3IEFkZGVyO1xuXG5mdW5jdGlvbiBhZGQoYWRkZXIsIGEsIGIpIHtcbiAgdmFyIHggPSBhZGRlci5zID0gYSArIGIsXG4gICAgICBidiA9IHggLSBhLFxuICAgICAgYXYgPSB4IC0gYnY7XG4gIGFkZGVyLnQgPSAoYSAtIGF2KSArIChiIC0gYnYpO1xufVxuIiwiZXhwb3J0IHZhciBlcHNpbG9uID0gMWUtNjtcbmV4cG9ydCB2YXIgZXBzaWxvbjIgPSAxZS0xMjtcbmV4cG9ydCB2YXIgcGkgPSBNYXRoLlBJO1xuZXhwb3J0IHZhciBoYWxmUGkgPSBwaSAvIDI7XG5leHBvcnQgdmFyIHF1YXJ0ZXJQaSA9IHBpIC8gNDtcbmV4cG9ydCB2YXIgdGF1ID0gcGkgKiAyO1xuXG5leHBvcnQgdmFyIGRlZ3JlZXMgPSAxODAgLyBwaTtcbmV4cG9ydCB2YXIgcmFkaWFucyA9IHBpIC8gMTgwO1xuXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzO1xuZXhwb3J0IHZhciBhdGFuID0gTWF0aC5hdGFuO1xuZXhwb3J0IHZhciBhdGFuMiA9IE1hdGguYXRhbjI7XG5leHBvcnQgdmFyIGNvcyA9IE1hdGguY29zO1xuZXhwb3J0IHZhciBjZWlsID0gTWF0aC5jZWlsO1xuZXhwb3J0IHZhciBleHAgPSBNYXRoLmV4cDtcbmV4cG9ydCB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuZXhwb3J0IHZhciBsb2cgPSBNYXRoLmxvZztcbmV4cG9ydCB2YXIgcG93ID0gTWF0aC5wb3c7XG5leHBvcnQgdmFyIHNpbiA9IE1hdGguc2luO1xuZXhwb3J0IHZhciBzaWduID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggPiAwID8gMSA6IHggPCAwID8gLTEgOiAwOyB9O1xuZXhwb3J0IHZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xuZXhwb3J0IHZhciB0YW4gPSBNYXRoLnRhbjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFjb3MoeCkge1xuICByZXR1cm4geCA+IDEgPyAwIDogeCA8IC0xID8gcGkgOiBNYXRoLmFjb3MoeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc2luKHgpIHtcbiAgcmV0dXJuIHggPiAxID8gaGFsZlBpIDogeCA8IC0xID8gLWhhbGZQaSA6IE1hdGguYXNpbih4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhdmVyc2luKHgpIHtcbiAgcmV0dXJuICh4ID0gc2luKHggLyAyKSkgKiB4O1xufVxuIiwiaW1wb3J0IHthc2luLCBhdGFuMiwgY29zLCBzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhemltdXRoYWxSYXcoc2NhbGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgY3ggPSBjb3MoeCksXG4gICAgICAgIGN5ID0gY29zKHkpLFxuICAgICAgICBrID0gc2NhbGUoY3ggKiBjeSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIGsgKiBjeSAqIHNpbih4KSxcbiAgICAgIGsgKiBzaW4oeSlcbiAgICBdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhemltdXRoYWxJbnZlcnQoYW5nbGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgeiA9IHNxcnQoeCAqIHggKyB5ICogeSksXG4gICAgICAgIGMgPSBhbmdsZSh6KSxcbiAgICAgICAgc2MgPSBzaW4oYyksXG4gICAgICAgIGNjID0gY29zKGMpO1xuICAgIHJldHVybiBbXG4gICAgICBhdGFuMih4ICogc2MsIHogKiBjYyksXG4gICAgICBhc2luKHogJiYgeSAqIHNjIC8geilcbiAgICBdO1xuICB9XG59XG4iLCJmdW5jdGlvbiBjb3VudChub2RlKSB7XG4gIHZhciBzdW0gPSAwLFxuICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLFxuICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgaWYgKCFpKSBzdW0gPSAxO1xuICBlbHNlIHdoaWxlICgtLWkgPj0gMCkgc3VtICs9IGNoaWxkcmVuW2ldLnZhbHVlO1xuICBub2RlLnZhbHVlID0gc3VtO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEFmdGVyKGNvdW50KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGVuZCkge1xuICB2YXIgc3RhcnQgPSB0aGlzLFxuICAgICAgYW5jZXN0b3IgPSBsZWFzdENvbW1vbkFuY2VzdG9yKHN0YXJ0LCBlbmQpLFxuICAgICAgbm9kZXMgPSBbc3RhcnRdO1xuICB3aGlsZSAoc3RhcnQgIT09IGFuY2VzdG9yKSB7XG4gICAgc3RhcnQgPSBzdGFydC5wYXJlbnQ7XG4gICAgbm9kZXMucHVzaChzdGFydCk7XG4gIH1cbiAgdmFyIGsgPSBub2Rlcy5sZW5ndGg7XG4gIHdoaWxlIChlbmQgIT09IGFuY2VzdG9yKSB7XG4gICAgbm9kZXMuc3BsaWNlKGssIDAsIGVuZCk7XG4gICAgZW5kID0gZW5kLnBhcmVudDtcbiAgfVxuICByZXR1cm4gbm9kZXM7XG59XG5cbmZ1bmN0aW9uIGxlYXN0Q29tbW9uQW5jZXN0b3IoYSwgYikge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIGE7XG4gIHZhciBhTm9kZXMgPSBhLmFuY2VzdG9ycygpLFxuICAgICAgYk5vZGVzID0gYi5hbmNlc3RvcnMoKSxcbiAgICAgIGMgPSBudWxsO1xuICBhID0gYU5vZGVzLnBvcCgpO1xuICBiID0gYk5vZGVzLnBvcCgpO1xuICB3aGlsZSAoYSA9PT0gYikge1xuICAgIGMgPSBhO1xuICAgIGEgPSBhTm9kZXMucG9wKCk7XG4gICAgYiA9IGJOb2Rlcy5wb3AoKTtcbiAgfVxuICByZXR1cm4gYztcbn1cbiIsImltcG9ydCBub2RlX2NvdW50IGZyb20gXCIuL2NvdW50XCI7XG5pbXBvcnQgbm9kZV9lYWNoIGZyb20gXCIuL2VhY2hcIjtcbmltcG9ydCBub2RlX2VhY2hCZWZvcmUgZnJvbSBcIi4vZWFjaEJlZm9yZVwiO1xuaW1wb3J0IG5vZGVfZWFjaEFmdGVyIGZyb20gXCIuL2VhY2hBZnRlclwiO1xuaW1wb3J0IG5vZGVfc3VtIGZyb20gXCIuL3N1bVwiO1xuaW1wb3J0IG5vZGVfc29ydCBmcm9tIFwiLi9zb3J0XCI7XG5pbXBvcnQgbm9kZV9wYXRoIGZyb20gXCIuL3BhdGhcIjtcbmltcG9ydCBub2RlX2FuY2VzdG9ycyBmcm9tIFwiLi9hbmNlc3RvcnNcIjtcbmltcG9ydCBub2RlX2Rlc2NlbmRhbnRzIGZyb20gXCIuL2Rlc2NlbmRhbnRzXCI7XG5pbXBvcnQgbm9kZV9sZWF2ZXMgZnJvbSBcIi4vbGVhdmVzXCI7XG5pbXBvcnQgbm9kZV9saW5rcyBmcm9tIFwiLi9saW5rc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoaWVyYXJjaHkoZGF0YSwgY2hpbGRyZW4pIHtcbiAgdmFyIHJvb3QgPSBuZXcgTm9kZShkYXRhKSxcbiAgICAgIHZhbHVlZCA9ICtkYXRhLnZhbHVlICYmIChyb290LnZhbHVlID0gZGF0YS52YWx1ZSksXG4gICAgICBub2RlLFxuICAgICAgbm9kZXMgPSBbcm9vdF0sXG4gICAgICBjaGlsZCxcbiAgICAgIGNoaWxkcyxcbiAgICAgIGksXG4gICAgICBuO1xuXG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSBjaGlsZHJlbiA9IGRlZmF1bHRDaGlsZHJlbjtcblxuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgaWYgKHZhbHVlZCkgbm9kZS52YWx1ZSA9ICtub2RlLmRhdGEudmFsdWU7XG4gICAgaWYgKChjaGlsZHMgPSBjaGlsZHJlbihub2RlLmRhdGEpKSAmJiAobiA9IGNoaWxkcy5sZW5ndGgpKSB7XG4gICAgICBub2RlLmNoaWxkcmVuID0gbmV3IEFycmF5KG4pO1xuICAgICAgZm9yIChpID0gbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIG5vZGVzLnB1c2goY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldID0gbmV3IE5vZGUoY2hpbGRzW2ldKSk7XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG5vZGU7XG4gICAgICAgIGNoaWxkLmRlcHRoID0gbm9kZS5kZXB0aCArIDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3QuZWFjaEJlZm9yZShjb21wdXRlSGVpZ2h0KTtcbn1cblxuZnVuY3Rpb24gbm9kZV9jb3B5KCkge1xuICByZXR1cm4gaGllcmFyY2h5KHRoaXMpLmVhY2hCZWZvcmUoY29weURhdGEpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q2hpbGRyZW4oZCkge1xuICByZXR1cm4gZC5jaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY29weURhdGEobm9kZSkge1xuICBub2RlLmRhdGEgPSBub2RlLmRhdGEuZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVIZWlnaHQobm9kZSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgZG8gbm9kZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50KSAmJiAobm9kZS5oZWlnaHQgPCArK2hlaWdodCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTm9kZShkYXRhKSB7XG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMuZGVwdGggPVxuICB0aGlzLmhlaWdodCA9IDA7XG4gIHRoaXMucGFyZW50ID0gbnVsbDtcbn1cblxuTm9kZS5wcm90b3R5cGUgPSBoaWVyYXJjaHkucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogTm9kZSxcbiAgY291bnQ6IG5vZGVfY291bnQsXG4gIGVhY2g6IG5vZGVfZWFjaCxcbiAgZWFjaEFmdGVyOiBub2RlX2VhY2hBZnRlcixcbiAgZWFjaEJlZm9yZTogbm9kZV9lYWNoQmVmb3JlLFxuICBzdW06IG5vZGVfc3VtLFxuICBzb3J0OiBub2RlX3NvcnQsXG4gIHBhdGg6IG5vZGVfcGF0aCxcbiAgYW5jZXN0b3JzOiBub2RlX2FuY2VzdG9ycyxcbiAgZGVzY2VuZGFudHM6IG5vZGVfZGVzY2VuZGFudHMsXG4gIGxlYXZlczogbm9kZV9sZWF2ZXMsXG4gIGxpbmtzOiBub2RlX2xpbmtzLFxuICBjb3B5OiBub2RlX2NvcHlcbn07XG4iLCJpbXBvcnQge05vZGV9IGZyb20gXCIuL2hpZXJhcmNoeS9pbmRleFwiO1xuXG5mdW5jdGlvbiBkZWZhdWx0U2VwYXJhdGlvbihhLCBiKSB7XG4gIHJldHVybiBhLnBhcmVudCA9PT0gYi5wYXJlbnQgPyAxIDogMjtcbn1cblxuLy8gZnVuY3Rpb24gcmFkaWFsU2VwYXJhdGlvbihhLCBiKSB7XG4vLyAgIHJldHVybiAoYS5wYXJlbnQgPT09IGIucGFyZW50ID8gMSA6IDIpIC8gYS5kZXB0aDtcbi8vIH1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRyYXZlcnNlIHRoZSBsZWZ0IGNvbnRvdXIgb2YgYSBzdWJ0cmVlIChvclxuLy8gc3ViZm9yZXN0KS4gSXQgcmV0dXJucyB0aGUgc3VjY2Vzc29yIG9mIHYgb24gdGhpcyBjb250b3VyLiBUaGlzIHN1Y2Nlc3NvciBpc1xuLy8gZWl0aGVyIGdpdmVuIGJ5IHRoZSBsZWZ0bW9zdCBjaGlsZCBvZiB2IG9yIGJ5IHRoZSB0aHJlYWQgb2Ygdi4gVGhlIGZ1bmN0aW9uXG4vLyByZXR1cm5zIG51bGwgaWYgYW5kIG9ubHkgaWYgdiBpcyBvbiB0aGUgaGlnaGVzdCBsZXZlbCBvZiBpdHMgc3VidHJlZS5cbmZ1bmN0aW9uIG5leHRMZWZ0KHYpIHtcbiAgdmFyIGNoaWxkcmVuID0gdi5jaGlsZHJlbjtcbiAgcmV0dXJuIGNoaWxkcmVuID8gY2hpbGRyZW5bMF0gOiB2LnQ7XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gd29ya3MgYW5hbG9nb3VzbHkgdG8gbmV4dExlZnQuXG5mdW5jdGlvbiBuZXh0UmlnaHQodikge1xuICB2YXIgY2hpbGRyZW4gPSB2LmNoaWxkcmVuO1xuICByZXR1cm4gY2hpbGRyZW4gPyBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXSA6IHYudDtcbn1cblxuLy8gU2hpZnRzIHRoZSBjdXJyZW50IHN1YnRyZWUgcm9vdGVkIGF0IHcrLiBUaGlzIGlzIGRvbmUgYnkgaW5jcmVhc2luZ1xuLy8gcHJlbGltKHcrKSBhbmQgbW9kKHcrKSBieSBzaGlmdC5cbmZ1bmN0aW9uIG1vdmVTdWJ0cmVlKHdtLCB3cCwgc2hpZnQpIHtcbiAgdmFyIGNoYW5nZSA9IHNoaWZ0IC8gKHdwLmkgLSB3bS5pKTtcbiAgd3AuYyAtPSBjaGFuZ2U7XG4gIHdwLnMgKz0gc2hpZnQ7XG4gIHdtLmMgKz0gY2hhbmdlO1xuICB3cC56ICs9IHNoaWZ0O1xuICB3cC5tICs9IHNoaWZ0O1xufVxuXG4vLyBBbGwgb3RoZXIgc2hpZnRzLCBhcHBsaWVkIHRvIHRoZSBzbWFsbGVyIHN1YnRyZWVzIGJldHdlZW4gdy0gYW5kIHcrLCBhcmVcbi8vIHBlcmZvcm1lZCBieSB0aGlzIGZ1bmN0aW9uLiBUbyBwcmVwYXJlIHRoZSBzaGlmdHMsIHdlIGhhdmUgdG8gYWRqdXN0XG4vLyBjaGFuZ2UodyspLCBzaGlmdCh3KyksIGFuZCBjaGFuZ2Uody0pLlxuZnVuY3Rpb24gZXhlY3V0ZVNoaWZ0cyh2KSB7XG4gIHZhciBzaGlmdCA9IDAsXG4gICAgICBjaGFuZ2UgPSAwLFxuICAgICAgY2hpbGRyZW4gPSB2LmNoaWxkcmVuLFxuICAgICAgaSA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgIHc7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIHcgPSBjaGlsZHJlbltpXTtcbiAgICB3LnogKz0gc2hpZnQ7XG4gICAgdy5tICs9IHNoaWZ0O1xuICAgIHNoaWZ0ICs9IHcucyArIChjaGFuZ2UgKz0gdy5jKTtcbiAgfVxufVxuXG4vLyBJZiB2aS3igJlzIGFuY2VzdG9yIGlzIGEgc2libGluZyBvZiB2LCByZXR1cm5zIHZpLeKAmXMgYW5jZXN0b3IuIE90aGVyd2lzZSxcbi8vIHJldHVybnMgdGhlIHNwZWNpZmllZCAoZGVmYXVsdCkgYW5jZXN0b3IuXG5mdW5jdGlvbiBuZXh0QW5jZXN0b3IodmltLCB2LCBhbmNlc3Rvcikge1xuICByZXR1cm4gdmltLmEucGFyZW50ID09PSB2LnBhcmVudCA/IHZpbS5hIDogYW5jZXN0b3I7XG59XG5cbmZ1bmN0aW9uIFRyZWVOb2RlKG5vZGUsIGkpIHtcbiAgdGhpcy5fID0gbm9kZTtcbiAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5BID0gbnVsbDsgLy8gZGVmYXVsdCBhbmNlc3RvclxuICB0aGlzLmEgPSB0aGlzOyAvLyBhbmNlc3RvclxuICB0aGlzLnogPSAwOyAvLyBwcmVsaW1cbiAgdGhpcy5tID0gMDsgLy8gbW9kXG4gIHRoaXMuYyA9IDA7IC8vIGNoYW5nZVxuICB0aGlzLnMgPSAwOyAvLyBzaGlmdFxuICB0aGlzLnQgPSBudWxsOyAvLyB0aHJlYWRcbiAgdGhpcy5pID0gaTsgLy8gbnVtYmVyXG59XG5cblRyZWVOb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTm9kZS5wcm90b3R5cGUpO1xuXG5mdW5jdGlvbiB0cmVlUm9vdChyb290KSB7XG4gIHZhciB0cmVlID0gbmV3IFRyZWVOb2RlKHJvb3QsIDApLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVzID0gW3RyZWVdLFxuICAgICAgY2hpbGQsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGksXG4gICAgICBuO1xuXG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBpZiAoY2hpbGRyZW4gPSBub2RlLl8uY2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBuZXcgQXJyYXkobiA9IGNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgbm9kZXMucHVzaChjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV0gPSBuZXcgVHJlZU5vZGUoY2hpbGRyZW5baV0sIGkpKTtcbiAgICAgICAgY2hpbGQucGFyZW50ID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAodHJlZS5wYXJlbnQgPSBuZXcgVHJlZU5vZGUobnVsbCwgMCkpLmNoaWxkcmVuID0gW3RyZWVdO1xuICByZXR1cm4gdHJlZTtcbn1cblxuLy8gTm9kZS1saW5rIHRyZWUgZGlhZ3JhbSB1c2luZyB0aGUgUmVpbmdvbGQtVGlsZm9yZCBcInRpZHlcIiBhbGdvcml0aG1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2VwYXJhdGlvbiA9IGRlZmF1bHRTZXBhcmF0aW9uLFxuICAgICAgZHggPSAxLFxuICAgICAgZHkgPSAxLFxuICAgICAgbm9kZVNpemUgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHRyZWUocm9vdCkge1xuICAgIHZhciB0ID0gdHJlZVJvb3Qocm9vdCk7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBsYXlvdXQgdXNpbmcgQnVjaGhlaW0gZXQgYWwu4oCZcyBhbGdvcml0aG0uXG4gICAgdC5lYWNoQWZ0ZXIoZmlyc3RXYWxrKSwgdC5wYXJlbnQubSA9IC10Lno7XG4gICAgdC5lYWNoQmVmb3JlKHNlY29uZFdhbGspO1xuXG4gICAgLy8gSWYgYSBmaXhlZCBub2RlIHNpemUgaXMgc3BlY2lmaWVkLCBzY2FsZSB4IGFuZCB5LlxuICAgIGlmIChub2RlU2l6ZSkgcm9vdC5lYWNoQmVmb3JlKHNpemVOb2RlKTtcblxuICAgIC8vIElmIGEgZml4ZWQgdHJlZSBzaXplIGlzIHNwZWNpZmllZCwgc2NhbGUgeCBhbmQgeSBiYXNlZCBvbiB0aGUgZXh0ZW50LlxuICAgIC8vIENvbXB1dGUgdGhlIGxlZnQtbW9zdCwgcmlnaHQtbW9zdCwgYW5kIGRlcHRoLW1vc3Qgbm9kZXMgZm9yIGV4dGVudHMuXG4gICAgZWxzZSB7XG4gICAgICB2YXIgbGVmdCA9IHJvb3QsXG4gICAgICAgICAgcmlnaHQgPSByb290LFxuICAgICAgICAgIGJvdHRvbSA9IHJvb3Q7XG4gICAgICByb290LmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS54IDwgbGVmdC54KSBsZWZ0ID0gbm9kZTtcbiAgICAgICAgaWYgKG5vZGUueCA+IHJpZ2h0LngpIHJpZ2h0ID0gbm9kZTtcbiAgICAgICAgaWYgKG5vZGUuZGVwdGggPiBib3R0b20uZGVwdGgpIGJvdHRvbSA9IG5vZGU7XG4gICAgICB9KTtcbiAgICAgIHZhciBzID0gbGVmdCA9PT0gcmlnaHQgPyAxIDogc2VwYXJhdGlvbihsZWZ0LCByaWdodCkgLyAyLFxuICAgICAgICAgIHR4ID0gcyAtIGxlZnQueCxcbiAgICAgICAgICBreCA9IGR4IC8gKHJpZ2h0LnggKyBzICsgdHgpLFxuICAgICAgICAgIGt5ID0gZHkgLyAoYm90dG9tLmRlcHRoIHx8IDEpO1xuICAgICAgcm9vdC5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgbm9kZS54ID0gKG5vZGUueCArIHR4KSAqIGt4O1xuICAgICAgICBub2RlLnkgPSBub2RlLmRlcHRoICoga3k7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIC8vIENvbXB1dGVzIGEgcHJlbGltaW5hcnkgeC1jb29yZGluYXRlIGZvciB2LiBCZWZvcmUgdGhhdCwgRklSU1QgV0FMSyBpc1xuICAvLyBhcHBsaWVkIHJlY3Vyc2l2ZWx5IHRvIHRoZSBjaGlsZHJlbiBvZiB2LCBhcyB3ZWxsIGFzIHRoZSBmdW5jdGlvblxuICAvLyBBUFBPUlRJT04uIEFmdGVyIHNwYWNpbmcgb3V0IHRoZSBjaGlsZHJlbiBieSBjYWxsaW5nIEVYRUNVVEUgU0hJRlRTLCB0aGVcbiAgLy8gbm9kZSB2IGlzIHBsYWNlZCB0byB0aGUgbWlkcG9pbnQgb2YgaXRzIG91dGVybW9zdCBjaGlsZHJlbi5cbiAgZnVuY3Rpb24gZmlyc3RXYWxrKHYpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB2LmNoaWxkcmVuLFxuICAgICAgICBzaWJsaW5ncyA9IHYucGFyZW50LmNoaWxkcmVuLFxuICAgICAgICB3ID0gdi5pID8gc2libGluZ3Nbdi5pIC0gMV0gOiBudWxsO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgZXhlY3V0ZVNoaWZ0cyh2KTtcbiAgICAgIHZhciBtaWRwb2ludCA9IChjaGlsZHJlblswXS56ICsgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0ueikgLyAyO1xuICAgICAgaWYgKHcpIHtcbiAgICAgICAgdi56ID0gdy56ICsgc2VwYXJhdGlvbih2Ll8sIHcuXyk7XG4gICAgICAgIHYubSA9IHYueiAtIG1pZHBvaW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdi56ID0gbWlkcG9pbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh3KSB7XG4gICAgICB2LnogPSB3LnogKyBzZXBhcmF0aW9uKHYuXywgdy5fKTtcbiAgICB9XG4gICAgdi5wYXJlbnQuQSA9IGFwcG9ydGlvbih2LCB3LCB2LnBhcmVudC5BIHx8IHNpYmxpbmdzWzBdKTtcbiAgfVxuXG4gIC8vIENvbXB1dGVzIGFsbCByZWFsIHgtY29vcmRpbmF0ZXMgYnkgc3VtbWluZyB1cCB0aGUgbW9kaWZpZXJzIHJlY3Vyc2l2ZWx5LlxuICBmdW5jdGlvbiBzZWNvbmRXYWxrKHYpIHtcbiAgICB2Ll8ueCA9IHYueiArIHYucGFyZW50Lm07XG4gICAgdi5tICs9IHYucGFyZW50Lm07XG4gIH1cblxuICAvLyBUaGUgY29yZSBvZiB0aGUgYWxnb3JpdGhtLiBIZXJlLCBhIG5ldyBzdWJ0cmVlIGlzIGNvbWJpbmVkIHdpdGggdGhlXG4gIC8vIHByZXZpb3VzIHN1YnRyZWVzLiBUaHJlYWRzIGFyZSB1c2VkIHRvIHRyYXZlcnNlIHRoZSBpbnNpZGUgYW5kIG91dHNpZGVcbiAgLy8gY29udG91cnMgb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IHN1YnRyZWUgdXAgdG8gdGhlIGhpZ2hlc3QgY29tbW9uIGxldmVsLiBUaGVcbiAgLy8gdmVydGljZXMgdXNlZCBmb3IgdGhlIHRyYXZlcnNhbHMgYXJlIHZpKywgdmktLCB2by0sIGFuZCB2byssIHdoZXJlIHRoZVxuICAvLyBzdXBlcnNjcmlwdCBvIG1lYW5zIG91dHNpZGUgYW5kIGkgbWVhbnMgaW5zaWRlLCB0aGUgc3Vic2NyaXB0IC0gbWVhbnMgbGVmdFxuICAvLyBzdWJ0cmVlIGFuZCArIG1lYW5zIHJpZ2h0IHN1YnRyZWUuIEZvciBzdW1taW5nIHVwIHRoZSBtb2RpZmllcnMgYWxvbmcgdGhlXG4gIC8vIGNvbnRvdXIsIHdlIHVzZSByZXNwZWN0aXZlIHZhcmlhYmxlcyBzaSssIHNpLSwgc28tLCBhbmQgc28rLiBXaGVuZXZlciB0d29cbiAgLy8gbm9kZXMgb2YgdGhlIGluc2lkZSBjb250b3VycyBjb25mbGljdCwgd2UgY29tcHV0ZSB0aGUgbGVmdCBvbmUgb2YgdGhlXG4gIC8vIGdyZWF0ZXN0IHVuY29tbW9uIGFuY2VzdG9ycyB1c2luZyB0aGUgZnVuY3Rpb24gQU5DRVNUT1IgYW5kIGNhbGwgTU9WRVxuICAvLyBTVUJUUkVFIHRvIHNoaWZ0IHRoZSBzdWJ0cmVlIGFuZCBwcmVwYXJlIHRoZSBzaGlmdHMgb2Ygc21hbGxlciBzdWJ0cmVlcy5cbiAgLy8gRmluYWxseSwgd2UgYWRkIGEgbmV3IHRocmVhZCAoaWYgbmVjZXNzYXJ5KS5cbiAgZnVuY3Rpb24gYXBwb3J0aW9uKHYsIHcsIGFuY2VzdG9yKSB7XG4gICAgaWYgKHcpIHtcbiAgICAgIHZhciB2aXAgPSB2LFxuICAgICAgICAgIHZvcCA9IHYsXG4gICAgICAgICAgdmltID0gdyxcbiAgICAgICAgICB2b20gPSB2aXAucGFyZW50LmNoaWxkcmVuWzBdLFxuICAgICAgICAgIHNpcCA9IHZpcC5tLFxuICAgICAgICAgIHNvcCA9IHZvcC5tLFxuICAgICAgICAgIHNpbSA9IHZpbS5tLFxuICAgICAgICAgIHNvbSA9IHZvbS5tLFxuICAgICAgICAgIHNoaWZ0O1xuICAgICAgd2hpbGUgKHZpbSA9IG5leHRSaWdodCh2aW0pLCB2aXAgPSBuZXh0TGVmdCh2aXApLCB2aW0gJiYgdmlwKSB7XG4gICAgICAgIHZvbSA9IG5leHRMZWZ0KHZvbSk7XG4gICAgICAgIHZvcCA9IG5leHRSaWdodCh2b3ApO1xuICAgICAgICB2b3AuYSA9IHY7XG4gICAgICAgIHNoaWZ0ID0gdmltLnogKyBzaW0gLSB2aXAueiAtIHNpcCArIHNlcGFyYXRpb24odmltLl8sIHZpcC5fKTtcbiAgICAgICAgaWYgKHNoaWZ0ID4gMCkge1xuICAgICAgICAgIG1vdmVTdWJ0cmVlKG5leHRBbmNlc3Rvcih2aW0sIHYsIGFuY2VzdG9yKSwgdiwgc2hpZnQpO1xuICAgICAgICAgIHNpcCArPSBzaGlmdDtcbiAgICAgICAgICBzb3AgKz0gc2hpZnQ7XG4gICAgICAgIH1cbiAgICAgICAgc2ltICs9IHZpbS5tO1xuICAgICAgICBzaXAgKz0gdmlwLm07XG4gICAgICAgIHNvbSArPSB2b20ubTtcbiAgICAgICAgc29wICs9IHZvcC5tO1xuICAgICAgfVxuICAgICAgaWYgKHZpbSAmJiAhbmV4dFJpZ2h0KHZvcCkpIHtcbiAgICAgICAgdm9wLnQgPSB2aW07XG4gICAgICAgIHZvcC5tICs9IHNpbSAtIHNvcDtcbiAgICAgIH1cbiAgICAgIGlmICh2aXAgJiYgIW5leHRMZWZ0KHZvbSkpIHtcbiAgICAgICAgdm9tLnQgPSB2aXA7XG4gICAgICAgIHZvbS5tICs9IHNpcCAtIHNvbTtcbiAgICAgICAgYW5jZXN0b3IgPSB2O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYW5jZXN0b3I7XG4gIH1cblxuICBmdW5jdGlvbiBzaXplTm9kZShub2RlKSB7XG4gICAgbm9kZS54ICo9IGR4O1xuICAgIG5vZGUueSA9IG5vZGUuZGVwdGggKiBkeTtcbiAgfVxuXG4gIHRyZWUuc2VwYXJhdGlvbiA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzZXBhcmF0aW9uID0geCwgdHJlZSkgOiBzZXBhcmF0aW9uO1xuICB9O1xuXG4gIHRyZWUuc2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlU2l6ZSA9IGZhbHNlLCBkeCA9ICt4WzBdLCBkeSA9ICt4WzFdLCB0cmVlKSA6IChub2RlU2l6ZSA/IG51bGwgOiBbZHgsIGR5XSk7XG4gIH07XG5cbiAgdHJlZS5ub2RlU2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlU2l6ZSA9IHRydWUsIGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIHRyZWUpIDogKG5vZGVTaXplID8gW2R4LCBkeV0gOiBudWxsKTtcbiAgfTtcblxuICByZXR1cm4gdHJlZTtcbn1cbiIsImltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5cbnZhciBub2Fib3J0ID0ge307XG5cbmZ1bmN0aW9uIFF1ZXVlKHNpemUpIHtcbiAgdGhpcy5fc2l6ZSA9IHNpemU7XG4gIHRoaXMuX2NhbGwgPVxuICB0aGlzLl9lcnJvciA9IG51bGw7XG4gIHRoaXMuX3Rhc2tzID0gW107XG4gIHRoaXMuX2RhdGEgPSBbXTtcbiAgdGhpcy5fd2FpdGluZyA9XG4gIHRoaXMuX2FjdGl2ZSA9XG4gIHRoaXMuX2VuZGVkID1cbiAgdGhpcy5fc3RhcnQgPSAwOyAvLyBpbnNpZGUgYSBzeW5jaHJvbm91cyB0YXNrIGNhbGxiYWNrP1xufVxuXG5RdWV1ZS5wcm90b3R5cGUgPSBxdWV1ZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBRdWV1ZSxcbiAgZGVmZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrXCIpO1xuICAgIGlmICh0aGlzLl9jYWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJkZWZlciBhZnRlciBhd2FpdFwiKTtcbiAgICBpZiAodGhpcy5fZXJyb3IgIT0gbnVsbCkgcmV0dXJuIHRoaXM7XG4gICAgdmFyIHQgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgdC5wdXNoKGNhbGxiYWNrKTtcbiAgICArK3RoaXMuX3dhaXRpbmcsIHRoaXMuX3Rhc2tzLnB1c2godCk7XG4gICAgcG9rZSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgYWJvcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9lcnJvciA9PSBudWxsKSBhYm9ydCh0aGlzLCBuZXcgRXJyb3IoXCJhYm9ydFwiKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGF3YWl0OiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjYWxsYmFja1wiKTtcbiAgICBpZiAodGhpcy5fY2FsbCkgdGhyb3cgbmV3IEVycm9yKFwibXVsdGlwbGUgYXdhaXRcIik7XG4gICAgdGhpcy5fY2FsbCA9IGZ1bmN0aW9uKGVycm9yLCByZXN1bHRzKSB7IGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJvcl0uY29uY2F0KHJlc3VsdHMpKTsgfTtcbiAgICBtYXliZU5vdGlmeSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgYXdhaXRBbGw6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrXCIpO1xuICAgIGlmICh0aGlzLl9jYWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJtdWx0aXBsZSBhd2FpdFwiKTtcbiAgICB0aGlzLl9jYWxsID0gY2FsbGJhY2s7XG4gICAgbWF5YmVOb3RpZnkodGhpcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHBva2UocSkge1xuICBpZiAoIXEuX3N0YXJ0KSB7XG4gICAgdHJ5IHsgc3RhcnQocSk7IH0gLy8gbGV0IHRoZSBjdXJyZW50IHRhc2sgY29tcGxldGVcbiAgICBjYXRjaCAoZSkge1xuICAgICAgaWYgKHEuX3Rhc2tzW3EuX2VuZGVkICsgcS5fYWN0aXZlIC0gMV0pIGFib3J0KHEsIGUpOyAvLyB0YXNrIGVycm9yZWQgc3luY2hyb25vdXNseVxuICAgICAgZWxzZSBpZiAoIXEuX2RhdGEpIHRocm93IGU7IC8vIGF3YWl0IGNhbGxiYWNrIGVycm9yZWQgc3luY2hyb25vdXNseVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFydChxKSB7XG4gIHdoaWxlIChxLl9zdGFydCA9IHEuX3dhaXRpbmcgJiYgcS5fYWN0aXZlIDwgcS5fc2l6ZSkge1xuICAgIHZhciBpID0gcS5fZW5kZWQgKyBxLl9hY3RpdmUsXG4gICAgICAgIHQgPSBxLl90YXNrc1tpXSxcbiAgICAgICAgaiA9IHQubGVuZ3RoIC0gMSxcbiAgICAgICAgYyA9IHRbal07XG4gICAgdFtqXSA9IGVuZChxLCBpKTtcbiAgICAtLXEuX3dhaXRpbmcsICsrcS5fYWN0aXZlO1xuICAgIHQgPSBjLmFwcGx5KG51bGwsIHQpO1xuICAgIGlmICghcS5fdGFza3NbaV0pIGNvbnRpbnVlOyAvLyB0YXNrIGZpbmlzaGVkIHN5bmNocm9ub3VzbHlcbiAgICBxLl90YXNrc1tpXSA9IHQgfHwgbm9hYm9ydDtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmQocSwgaSkge1xuICByZXR1cm4gZnVuY3Rpb24oZSwgcikge1xuICAgIGlmICghcS5fdGFza3NbaV0pIHJldHVybjsgLy8gaWdub3JlIG11bHRpcGxlIGNhbGxiYWNrc1xuICAgIC0tcS5fYWN0aXZlLCArK3EuX2VuZGVkO1xuICAgIHEuX3Rhc2tzW2ldID0gbnVsbDtcbiAgICBpZiAocS5fZXJyb3IgIT0gbnVsbCkgcmV0dXJuOyAvLyBpZ25vcmUgc2Vjb25kYXJ5IGVycm9yc1xuICAgIGlmIChlICE9IG51bGwpIHtcbiAgICAgIGFib3J0KHEsIGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBxLl9kYXRhW2ldID0gcjtcbiAgICAgIGlmIChxLl93YWl0aW5nKSBwb2tlKHEpO1xuICAgICAgZWxzZSBtYXliZU5vdGlmeShxKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGFib3J0KHEsIGUpIHtcbiAgdmFyIGkgPSBxLl90YXNrcy5sZW5ndGgsIHQ7XG4gIHEuX2Vycm9yID0gZTsgLy8gaWdub3JlIGFjdGl2ZSBjYWxsYmFja3NcbiAgcS5fZGF0YSA9IHVuZGVmaW5lZDsgLy8gYWxsb3cgZ2NcbiAgcS5fd2FpdGluZyA9IE5hTjsgLy8gcHJldmVudCBzdGFydGluZ1xuXG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGlmICh0ID0gcS5fdGFza3NbaV0pIHtcbiAgICAgIHEuX3Rhc2tzW2ldID0gbnVsbDtcbiAgICAgIGlmICh0LmFib3J0KSB7XG4gICAgICAgIHRyeSB7IHQuYWJvcnQoKTsgfVxuICAgICAgICBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHEuX2FjdGl2ZSA9IE5hTjsgLy8gYWxsb3cgbm90aWZpY2F0aW9uXG4gIG1heWJlTm90aWZ5KHEpO1xufVxuXG5mdW5jdGlvbiBtYXliZU5vdGlmeShxKSB7XG4gIGlmICghcS5fYWN0aXZlICYmIHEuX2NhbGwpIHtcbiAgICB2YXIgZCA9IHEuX2RhdGE7XG4gICAgcS5fZGF0YSA9IHVuZGVmaW5lZDsgLy8gYWxsb3cgZ2NcbiAgICBxLl9jYWxsKHEuX2Vycm9yLCBkKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWV1ZShjb25jdXJyZW5jeSkge1xuICBpZiAoY29uY3VycmVuY3kgPT0gbnVsbCkgY29uY3VycmVuY3kgPSBJbmZpbml0eTtcbiAgZWxzZSBpZiAoISgoY29uY3VycmVuY3kgPSArY29uY3VycmVuY3kpID49IDEpKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNvbmN1cnJlbmN5XCIpO1xuICByZXR1cm4gbmV3IFF1ZXVlKGNvbmN1cnJlbmN5KTtcbn1cbiIsImltcG9ydCB7YmlzZWN0fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGUgYXMgaW50ZXJwb2xhdGVWYWx1ZSwgaW50ZXJwb2xhdGVSb3VuZH0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge21hcCwgc2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbnZhciB1bml0ID0gWzAsIDFdO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVpbnRlcnBvbGF0ZUxpbmVhcihhLCBiKSB7XG4gIHJldHVybiAoYiAtPSAoYSA9ICthKSlcbiAgICAgID8gZnVuY3Rpb24oeCkgeyByZXR1cm4gKHggLSBhKSAvIGI7IH1cbiAgICAgIDogY29uc3RhbnQoYik7XG59XG5cbmZ1bmN0aW9uIGRlaW50ZXJwb2xhdGVDbGFtcChkZWludGVycG9sYXRlKSB7XG4gIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgdmFyIGQgPSBkZWludGVycG9sYXRlKGEgPSArYSwgYiA9ICtiKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4geCA8PSBhID8gMCA6IHggPj0gYiA/IDEgOiBkKHgpOyB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiByZWludGVycG9sYXRlQ2xhbXAocmVpbnRlcnBvbGF0ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciByID0gcmVpbnRlcnBvbGF0ZShhID0gK2EsIGIgPSArYik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHsgcmV0dXJuIHQgPD0gMCA/IGEgOiB0ID49IDEgPyBiIDogcih0KTsgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYmltYXAoZG9tYWluLCByYW5nZSwgZGVpbnRlcnBvbGF0ZSwgcmVpbnRlcnBvbGF0ZSkge1xuICB2YXIgZDAgPSBkb21haW5bMF0sIGQxID0gZG9tYWluWzFdLCByMCA9IHJhbmdlWzBdLCByMSA9IHJhbmdlWzFdO1xuICBpZiAoZDEgPCBkMCkgZDAgPSBkZWludGVycG9sYXRlKGQxLCBkMCksIHIwID0gcmVpbnRlcnBvbGF0ZShyMSwgcjApO1xuICBlbHNlIGQwID0gZGVpbnRlcnBvbGF0ZShkMCwgZDEpLCByMCA9IHJlaW50ZXJwb2xhdGUocjAsIHIxKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHIwKGQwKHgpKTsgfTtcbn1cblxuZnVuY3Rpb24gcG9seW1hcChkb21haW4sIHJhbmdlLCBkZWludGVycG9sYXRlLCByZWludGVycG9sYXRlKSB7XG4gIHZhciBqID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSAtIDEsXG4gICAgICBkID0gbmV3IEFycmF5KGopLFxuICAgICAgciA9IG5ldyBBcnJheShqKSxcbiAgICAgIGkgPSAtMTtcblxuICAvLyBSZXZlcnNlIGRlc2NlbmRpbmcgZG9tYWlucy5cbiAgaWYgKGRvbWFpbltqXSA8IGRvbWFpblswXSkge1xuICAgIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpLnJldmVyc2UoKTtcbiAgICByYW5nZSA9IHJhbmdlLnNsaWNlKCkucmV2ZXJzZSgpO1xuICB9XG5cbiAgd2hpbGUgKCsraSA8IGopIHtcbiAgICBkW2ldID0gZGVpbnRlcnBvbGF0ZShkb21haW5baV0sIGRvbWFpbltpICsgMV0pO1xuICAgIHJbaV0gPSByZWludGVycG9sYXRlKHJhbmdlW2ldLCByYW5nZVtpICsgMV0pO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICB2YXIgaSA9IGJpc2VjdChkb21haW4sIHgsIDEsIGopIC0gMTtcbiAgICByZXR1cm4gcltpXShkW2ldKHgpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkoc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldFxuICAgICAgLmRvbWFpbihzb3VyY2UuZG9tYWluKCkpXG4gICAgICAucmFuZ2Uoc291cmNlLnJhbmdlKCkpXG4gICAgICAuaW50ZXJwb2xhdGUoc291cmNlLmludGVycG9sYXRlKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpO1xufVxuXG4vLyBkZWludGVycG9sYXRlKGEsIGIpKHgpIHRha2VzIGEgZG9tYWluIHZhbHVlIHggaW4gW2EsYl0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHQgaW4gWzAsMV0uXG4vLyByZWludGVycG9sYXRlKGEsIGIpKHQpIHRha2VzIGEgcGFyYW1ldGVyIHQgaW4gWzAsMV0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgZG9tYWluIHZhbHVlIHggaW4gW2EsYl0uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb250aW51b3VzKGRlaW50ZXJwb2xhdGUsIHJlaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGRvbWFpbiA9IHVuaXQsXG4gICAgICByYW5nZSA9IHVuaXQsXG4gICAgICBpbnRlcnBvbGF0ZSA9IGludGVycG9sYXRlVmFsdWUsXG4gICAgICBjbGFtcCA9IGZhbHNlLFxuICAgICAgcGllY2V3aXNlLFxuICAgICAgb3V0cHV0LFxuICAgICAgaW5wdXQ7XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICBwaWVjZXdpc2UgPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcbiAgICBvdXRwdXQgPSBpbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiAob3V0cHV0IHx8IChvdXRwdXQgPSBwaWVjZXdpc2UoZG9tYWluLCByYW5nZSwgY2xhbXAgPyBkZWludGVycG9sYXRlQ2xhbXAoZGVpbnRlcnBvbGF0ZSkgOiBkZWludGVycG9sYXRlLCBpbnRlcnBvbGF0ZSkpKSgreCk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIChpbnB1dCB8fCAoaW5wdXQgPSBwaWVjZXdpc2UocmFuZ2UsIGRvbWFpbiwgZGVpbnRlcnBvbGF0ZUxpbmVhciwgY2xhbXAgPyByZWludGVycG9sYXRlQ2xhbXAocmVpbnRlcnBvbGF0ZSkgOiByZWludGVycG9sYXRlKSkpKCt5KTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gbWFwLmNhbGwoXywgbnVtYmVyKSwgcmVzY2FsZSgpKSA6IGRvbWFpbi5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2VSb3VuZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gcmFuZ2UgPSBzbGljZS5jYWxsKF8pLCBpbnRlcnBvbGF0ZSA9IGludGVycG9sYXRlUm91bmQsIHJlc2NhbGUoKTtcbiAgfTtcblxuICBzY2FsZS5jbGFtcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGFtcCA9ICEhXywgcmVzY2FsZSgpKSA6IGNsYW1wO1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRlID0gXywgcmVzY2FsZSgpKSA6IGludGVycG9sYXRlO1xuICB9O1xuXG4gIHJldHVybiByZXNjYWxlKCk7XG59XG4iLCJpbXBvcnQge3RpY2tzLCB0aWNrSW5jcmVtZW50fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVOdW1iZXIgYXMgcmVpbnRlcnBvbGF0ZX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge2RlZmF1bHQgYXMgY29udGludW91cywgY29weSwgZGVpbnRlcnBvbGF0ZUxpbmVhciBhcyBkZWludGVycG9sYXRlfSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQgdGlja0Zvcm1hdCBmcm9tIFwiLi90aWNrRm9ybWF0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXJpc2goc2NhbGUpIHtcbiAgdmFyIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICByZXR1cm4gdGlja0Zvcm1hdChkb21haW4oKSwgY291bnQsIHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG5cbiAgICB2YXIgZCA9IGRvbWFpbigpLFxuICAgICAgICBpMCA9IDAsXG4gICAgICAgIGkxID0gZC5sZW5ndGggLSAxLFxuICAgICAgICBzdGFydCA9IGRbaTBdLFxuICAgICAgICBzdG9wID0gZFtpMV0sXG4gICAgICAgIHN0ZXA7XG5cbiAgICBpZiAoc3RvcCA8IHN0YXJ0KSB7XG4gICAgICBzdGVwID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IHN0ZXA7XG4gICAgICBzdGVwID0gaTAsIGkwID0gaTEsIGkxID0gc3RlcDtcbiAgICB9XG5cbiAgICBzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICBzdGFydCA9IE1hdGguZmxvb3Ioc3RhcnQgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBzdG9wID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIHN0YXJ0ID0gTWF0aC5jZWlsKHN0YXJ0ICogc3RlcCkgLyBzdGVwO1xuICAgICAgc3RvcCA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICBkW2kwXSA9IE1hdGguZmxvb3Ioc3RhcnQgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBkW2kxXSA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgZG9tYWluKGQpO1xuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIGRbaTBdID0gTWF0aC5jZWlsKHN0YXJ0ICogc3RlcCkgLyBzdGVwO1xuICAgICAgZFtpMV0gPSBNYXRoLmZsb29yKHN0b3AgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICBkb21haW4oZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGluZWFyKCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKGRlaW50ZXJwb2xhdGUsIHJlaW50ZXJwb2xhdGUpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgbGluZWFyKCkpO1xuICB9O1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwidmFyIHQwID0gbmV3IERhdGUsXG4gICAgdDEgPSBuZXcgRGF0ZTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbmV3SW50ZXJ2YWwoZmxvb3JpLCBvZmZzZXRpLCBjb3VudCwgZmllbGQpIHtcblxuICBmdW5jdGlvbiBpbnRlcnZhbChkYXRlKSB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcbiAgfVxuXG4gIGludGVydmFsLmZsb29yID0gaW50ZXJ2YWw7XG5cbiAgaW50ZXJ2YWwuY2VpbCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZShkYXRlIC0gMSkpLCBvZmZzZXRpKGRhdGUsIDEpLCBmbG9vcmkoZGF0ZSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucm91bmQgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgdmFyIGQwID0gaW50ZXJ2YWwoZGF0ZSksXG4gICAgICAgIGQxID0gaW50ZXJ2YWwuY2VpbChkYXRlKTtcbiAgICByZXR1cm4gZGF0ZSAtIGQwIDwgZDEgLSBkYXRlID8gZDAgOiBkMTtcbiAgfTtcblxuICBpbnRlcnZhbC5vZmZzZXQgPSBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgcmV0dXJuIG9mZnNldGkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSwgc3RlcCA9PSBudWxsID8gMSA6IE1hdGguZmxvb3Ioc3RlcCkpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICB2YXIgcmFuZ2UgPSBbXTtcbiAgICBzdGFydCA9IGludGVydmFsLmNlaWwoc3RhcnQpO1xuICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKTtcbiAgICBpZiAoIShzdGFydCA8IHN0b3ApIHx8ICEoc3RlcCA+IDApKSByZXR1cm4gcmFuZ2U7IC8vIGFsc28gaGFuZGxlcyBJbnZhbGlkIERhdGVcbiAgICBkbyByYW5nZS5wdXNoKG5ldyBEYXRlKCtzdGFydCkpOyB3aGlsZSAob2Zmc2V0aShzdGFydCwgc3RlcCksIGZsb29yaShzdGFydCksIHN0YXJ0IDwgc3RvcClcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgaW50ZXJ2YWwuZmlsdGVyID0gZnVuY3Rpb24odGVzdCkge1xuICAgIHJldHVybiBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgICBpZiAoZGF0ZSA+PSBkYXRlKSB3aGlsZSAoZmxvb3JpKGRhdGUpLCAhdGVzdChkYXRlKSkgZGF0ZS5zZXRUaW1lKGRhdGUgLSAxKTtcbiAgICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgICBpZiAoZGF0ZSA+PSBkYXRlKSB3aGlsZSAoLS1zdGVwID49IDApIHdoaWxlIChvZmZzZXRpKGRhdGUsIDEpLCAhdGVzdChkYXRlKSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChjb3VudCkge1xuICAgIGludGVydmFsLmNvdW50ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgdDAuc2V0VGltZSgrc3RhcnQpLCB0MS5zZXRUaW1lKCtlbmQpO1xuICAgICAgZmxvb3JpKHQwKSwgZmxvb3JpKHQxKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGNvdW50KHQwLCB0MSkpO1xuICAgIH07XG5cbiAgICBpbnRlcnZhbC5ldmVyeSA9IGZ1bmN0aW9uKHN0ZXApIHtcbiAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgICAgcmV0dXJuICFpc0Zpbml0ZShzdGVwKSB8fCAhKHN0ZXAgPiAwKSA/IG51bGxcbiAgICAgICAgICA6ICEoc3RlcCA+IDEpID8gaW50ZXJ2YWxcbiAgICAgICAgICA6IGludGVydmFsLmZpbHRlcihmaWVsZFxuICAgICAgICAgICAgICA/IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZpZWxkKGQpICUgc3RlcCA9PT0gMDsgfVxuICAgICAgICAgICAgICA6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGludGVydmFsLmNvdW50KDAsIGQpICUgc3RlcCA9PT0gMDsgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBpbnRlcnZhbDtcbn1cbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG5mdW5jdGlvbiB3ZWVrZGF5KGkpIHtcbiAgcmV0dXJuIGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwICogNyk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbldlZWs7XG4gIH0pO1xufVxuXG5leHBvcnQgdmFyIHN1bmRheSA9IHdlZWtkYXkoMCk7XG5leHBvcnQgdmFyIG1vbmRheSA9IHdlZWtkYXkoMSk7XG5leHBvcnQgdmFyIHR1ZXNkYXkgPSB3ZWVrZGF5KDIpO1xuZXhwb3J0IHZhciB3ZWRuZXNkYXkgPSB3ZWVrZGF5KDMpO1xuZXhwb3J0IHZhciB0aHVyc2RheSA9IHdlZWtkYXkoNCk7XG5leHBvcnQgdmFyIGZyaWRheSA9IHdlZWtkYXkoNSk7XG5leHBvcnQgdmFyIHNhdHVyZGF5ID0gd2Vla2RheSg2KTtcblxuZXhwb3J0IHZhciBzdW5kYXlzID0gc3VuZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBtb25kYXlzID0gbW9uZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB0dWVzZGF5cyA9IHR1ZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHdlZG5lc2RheXMgPSB3ZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHRodXJzZGF5cyA9IHRodXJzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBmcmlkYXlzID0gZnJpZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBzYXR1cmRheXMgPSBzYXR1cmRheS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuaW1wb3J0IHtkdXJhdGlvbldlZWt9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG5cbmZ1bmN0aW9uIHV0Y1dlZWtkYXkoaSkge1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIChkYXRlLmdldFVUQ0RheSgpICsgNyAtIGkpICUgNyk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25XZWVrO1xuICB9KTtcbn1cblxuZXhwb3J0IHZhciB1dGNTdW5kYXkgPSB1dGNXZWVrZGF5KDApO1xuZXhwb3J0IHZhciB1dGNNb25kYXkgPSB1dGNXZWVrZGF5KDEpO1xuZXhwb3J0IHZhciB1dGNUdWVzZGF5ID0gdXRjV2Vla2RheSgyKTtcbmV4cG9ydCB2YXIgdXRjV2VkbmVzZGF5ID0gdXRjV2Vla2RheSgzKTtcbmV4cG9ydCB2YXIgdXRjVGh1cnNkYXkgPSB1dGNXZWVrZGF5KDQpO1xuZXhwb3J0IHZhciB1dGNGcmlkYXkgPSB1dGNXZWVrZGF5KDUpO1xuZXhwb3J0IHZhciB1dGNTYXR1cmRheSA9IHV0Y1dlZWtkYXkoNik7XG5cbmV4cG9ydCB2YXIgdXRjU3VuZGF5cyA9IHV0Y1N1bmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjTW9uZGF5cyA9IHV0Y01vbmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjVHVlc2RheXMgPSB1dGNUdWVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNXZWRuZXNkYXlzID0gdXRjV2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNUaHVyc2RheXMgPSB1dGNUaHVyc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjRnJpZGF5cyA9IHV0Y0ZyaWRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjU2F0dXJkYXlzID0gdXRjU2F0dXJkYXkucmFuZ2U7XG4iLCJpbXBvcnQge3RpbWVEYXksIHRpbWVTdW5kYXksIHRpbWVNb25kYXksIHRpbWVZZWFyLCB1dGNEYXksIHV0Y1N1bmRheSwgdXRjTW9uZGF5LCB1dGNZZWFyfSBmcm9tIFwiZDMtdGltZVwiO1xuXG5mdW5jdGlvbiBsb2NhbERhdGUoZCkge1xuICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkLnkpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShkLnksIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpO1xufVxuXG5mdW5jdGlvbiB1dGNEYXRlKGQpIHtcbiAgaWYgKDAgPD0gZC55ICYmIGQueSA8IDEwMCkge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoLTEsIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpKTtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGQueSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xufVxuXG5mdW5jdGlvbiBuZXdZZWFyKHkpIHtcbiAgcmV0dXJuIHt5OiB5LCBtOiAwLCBkOiAxLCBIOiAwLCBNOiAwLCBTOiAwLCBMOiAwfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0TG9jYWxlKGxvY2FsZSkge1xuICB2YXIgbG9jYWxlX2RhdGVUaW1lID0gbG9jYWxlLmRhdGVUaW1lLFxuICAgICAgbG9jYWxlX2RhdGUgPSBsb2NhbGUuZGF0ZSxcbiAgICAgIGxvY2FsZV90aW1lID0gbG9jYWxlLnRpbWUsXG4gICAgICBsb2NhbGVfcGVyaW9kcyA9IGxvY2FsZS5wZXJpb2RzLFxuICAgICAgbG9jYWxlX3dlZWtkYXlzID0gbG9jYWxlLmRheXMsXG4gICAgICBsb2NhbGVfc2hvcnRXZWVrZGF5cyA9IGxvY2FsZS5zaG9ydERheXMsXG4gICAgICBsb2NhbGVfbW9udGhzID0gbG9jYWxlLm1vbnRocyxcbiAgICAgIGxvY2FsZV9zaG9ydE1vbnRocyA9IGxvY2FsZS5zaG9ydE1vbnRocztcblxuICB2YXIgcGVyaW9kUmUgPSBmb3JtYXRSZShsb2NhbGVfcGVyaW9kcyksXG4gICAgICBwZXJpb2RMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3BlcmlvZHMpLFxuICAgICAgd2Vla2RheVJlID0gZm9ybWF0UmUobG9jYWxlX3dlZWtkYXlzKSxcbiAgICAgIHdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3dlZWtkYXlzKSxcbiAgICAgIHNob3J0V2Vla2RheVJlID0gZm9ybWF0UmUobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxuICAgICAgc2hvcnRXZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcbiAgICAgIG1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfbW9udGhzKSxcbiAgICAgIG1vbnRoTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9tb250aHMpLFxuICAgICAgc2hvcnRNb250aFJlID0gZm9ybWF0UmUobG9jYWxlX3Nob3J0TW9udGhzKSxcbiAgICAgIHNob3J0TW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0TW9udGhzKTtcblxuICB2YXIgZm9ybWF0cyA9IHtcbiAgICBcImFcIjogZm9ybWF0U2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBmb3JtYXRXZWVrZGF5LFxuICAgIFwiYlwiOiBmb3JtYXRTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBmb3JtYXRNb250aCxcbiAgICBcImNcIjogbnVsbCxcbiAgICBcImRcIjogZm9ybWF0RGF5T2ZNb250aCxcbiAgICBcImVcIjogZm9ybWF0RGF5T2ZNb250aCxcbiAgICBcIkhcIjogZm9ybWF0SG91cjI0LFxuICAgIFwiSVwiOiBmb3JtYXRIb3VyMTIsXG4gICAgXCJqXCI6IGZvcm1hdERheU9mWWVhcixcbiAgICBcIkxcIjogZm9ybWF0TWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBmb3JtYXRNb250aE51bWJlcixcbiAgICBcIk1cIjogZm9ybWF0TWludXRlcyxcbiAgICBcInBcIjogZm9ybWF0UGVyaW9kLFxuICAgIFwiU1wiOiBmb3JtYXRTZWNvbmRzLFxuICAgIFwiVVwiOiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwid1wiOiBmb3JtYXRXZWVrZGF5TnVtYmVyLFxuICAgIFwiV1wiOiBmb3JtYXRXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0Wm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgdXRjRm9ybWF0cyA9IHtcbiAgICBcImFcIjogZm9ybWF0VVRDU2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBmb3JtYXRVVENXZWVrZGF5LFxuICAgIFwiYlwiOiBmb3JtYXRVVENTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBmb3JtYXRVVENNb250aCxcbiAgICBcImNcIjogbnVsbCxcbiAgICBcImRcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImVcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcIkhcIjogZm9ybWF0VVRDSG91cjI0LFxuICAgIFwiSVwiOiBmb3JtYXRVVENIb3VyMTIsXG4gICAgXCJqXCI6IGZvcm1hdFVUQ0RheU9mWWVhcixcbiAgICBcIkxcIjogZm9ybWF0VVRDTWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBmb3JtYXRVVENNb250aE51bWJlcixcbiAgICBcIk1cIjogZm9ybWF0VVRDTWludXRlcyxcbiAgICBcInBcIjogZm9ybWF0VVRDUGVyaW9kLFxuICAgIFwiU1wiOiBmb3JtYXRVVENTZWNvbmRzLFxuICAgIFwiVVwiOiBmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwid1wiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyLFxuICAgIFwiV1wiOiBmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRVVENZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRVVENGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0VVRDWm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgcGFyc2VzID0ge1xuICAgIFwiYVwiOiBwYXJzZVNob3J0V2Vla2RheSxcbiAgICBcIkFcIjogcGFyc2VXZWVrZGF5LFxuICAgIFwiYlwiOiBwYXJzZVNob3J0TW9udGgsXG4gICAgXCJCXCI6IHBhcnNlTW9udGgsXG4gICAgXCJjXCI6IHBhcnNlTG9jYWxlRGF0ZVRpbWUsXG4gICAgXCJkXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcImVcIjogcGFyc2VEYXlPZk1vbnRoLFxuICAgIFwiSFwiOiBwYXJzZUhvdXIyNCxcbiAgICBcIklcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJqXCI6IHBhcnNlRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBwYXJzZU1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogcGFyc2VNb250aE51bWJlcixcbiAgICBcIk1cIjogcGFyc2VNaW51dGVzLFxuICAgIFwicFwiOiBwYXJzZVBlcmlvZCxcbiAgICBcIlNcIjogcGFyc2VTZWNvbmRzLFxuICAgIFwiVVwiOiBwYXJzZVdlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJ3XCI6IHBhcnNlV2Vla2RheU51bWJlcixcbiAgICBcIldcIjogcGFyc2VXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBwYXJzZUxvY2FsZURhdGUsXG4gICAgXCJYXCI6IHBhcnNlTG9jYWxlVGltZSxcbiAgICBcInlcIjogcGFyc2VZZWFyLFxuICAgIFwiWVwiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiWlwiOiBwYXJzZVpvbmUsXG4gICAgXCIlXCI6IHBhcnNlTGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICAvLyBUaGVzZSByZWN1cnNpdmUgZGlyZWN0aXZlIGRlZmluaXRpb25zIG11c3QgYmUgZGVmZXJyZWQuXG4gIGZvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIGZvcm1hdHMpO1xuICB1dGNGb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCB1dGNGb3JtYXRzKTtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyLCBmb3JtYXRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBbXSxcbiAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgICAgYyxcbiAgICAgICAgICBwYWQsXG4gICAgICAgICAgZm9ybWF0O1xuXG4gICAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSk7XG5cbiAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIuY2hhckNvZGVBdChpKSA9PT0gMzcpIHtcbiAgICAgICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgICAgIGlmICgocGFkID0gcGFkc1tjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpXSkgIT0gbnVsbCkgYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKTtcbiAgICAgICAgICBlbHNlIHBhZCA9IGMgPT09IFwiZVwiID8gXCIgXCIgOiBcIjBcIjtcbiAgICAgICAgICBpZiAoZm9ybWF0ID0gZm9ybWF0c1tjXSkgYyA9IGZvcm1hdChkYXRlLCBwYWQpO1xuICAgICAgICAgIHN0cmluZy5wdXNoKGMpO1xuICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgcmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBuZXdQYXJzZShzcGVjaWZpZXIsIG5ld0RhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICB2YXIgZCA9IG5ld1llYXIoMTkwMCksXG4gICAgICAgICAgaSA9IHBhcnNlU3BlY2lmaWVyKGQsIHNwZWNpZmllciwgc3RyaW5nICs9IFwiXCIsIDApO1xuICAgICAgaWYgKGkgIT0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIC8vIFRoZSBhbS1wbSBmbGFnIGlzIDAgZm9yIEFNLCBhbmQgMSBmb3IgUE0uXG4gICAgICBpZiAoXCJwXCIgaW4gZCkgZC5IID0gZC5IICUgMTIgKyBkLnAgKiAxMjtcblxuICAgICAgLy8gQ29udmVydCBkYXktb2Ytd2VlayBhbmQgd2Vlay1vZi15ZWFyIHRvIGRheS1vZi15ZWFyLlxuICAgICAgaWYgKFwiV1wiIGluIGQgfHwgXCJVXCIgaW4gZCkge1xuICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gXCJXXCIgaW4gZCA/IDEgOiAwO1xuICAgICAgICB2YXIgZGF5ID0gXCJaXCIgaW4gZCA/IHV0Y0RhdGUobmV3WWVhcihkLnkpKS5nZXRVVENEYXkoKSA6IG5ld0RhdGUobmV3WWVhcihkLnkpKS5nZXREYXkoKTtcbiAgICAgICAgZC5tID0gMDtcbiAgICAgICAgZC5kID0gXCJXXCIgaW4gZCA/IChkLncgKyA2KSAlIDcgKyBkLlcgKiA3IC0gKGRheSArIDUpICUgNyA6IGQudyArIGQuVSAqIDcgLSAoZGF5ICsgNikgJSA3O1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBhIHRpbWUgem9uZSBpcyBzcGVjaWZpZWQsIGFsbCBmaWVsZHMgYXJlIGludGVycHJldGVkIGFzIFVUQyBhbmQgdGhlblxuICAgICAgLy8gb2Zmc2V0IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHRpbWUgem9uZS5cbiAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgIGQuSCArPSBkLlogLyAxMDAgfCAwO1xuICAgICAgICBkLk0gKz0gZC5aICUgMTAwO1xuICAgICAgICByZXR1cm4gdXRjRGF0ZShkKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3RoZXJ3aXNlLCBhbGwgZmllbGRzIGFyZSBpbiBsb2NhbCB0aW1lLlxuICAgICAgcmV0dXJuIG5ld0RhdGUoZCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU3BlY2lmaWVyKGQsIHNwZWNpZmllciwgc3RyaW5nLCBqKSB7XG4gICAgdmFyIGkgPSAwLFxuICAgICAgICBuID0gc3BlY2lmaWVyLmxlbmd0aCxcbiAgICAgICAgbSA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgIGMsXG4gICAgICAgIHBhcnNlO1xuXG4gICAgd2hpbGUgKGkgPCBuKSB7XG4gICAgICBpZiAoaiA+PSBtKSByZXR1cm4gLTE7XG4gICAgICBjID0gc3BlY2lmaWVyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIGlmIChjID09PSAzNykge1xuICAgICAgICBjID0gc3BlY2lmaWVyLmNoYXJBdChpKyspO1xuICAgICAgICBwYXJzZSA9IHBhcnNlc1tjIGluIHBhZHMgPyBzcGVjaWZpZXIuY2hhckF0KGkrKykgOiBjXTtcbiAgICAgICAgaWYgKCFwYXJzZSB8fCAoKGogPSBwYXJzZShkLCBzdHJpbmcsIGopKSA8IDApKSByZXR1cm4gLTE7XG4gICAgICB9IGVsc2UgaWYgKGMgIT0gc3RyaW5nLmNoYXJDb2RlQXQoaisrKSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGo7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVBlcmlvZChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHBlcmlvZFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLnAgPSBwZXJpb2RMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydFdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBzaG9ydFdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC53ID0gc2hvcnRXZWVrZGF5TG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC53ID0gd2Vla2RheUxvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNob3J0TW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBzaG9ydE1vbnRoUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQubSA9IHNob3J0TW9udGhMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IG1vbnRoUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQubSA9IG1vbnRoTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlRGF0ZVRpbWUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlVGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlRGF0ZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX2RhdGUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZVRpbWUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV90aW1lLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0U2hvcnRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0V2Vla2RheXNbZC5nZXREYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3dlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0U2hvcnRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydE1vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfbW9udGhzW2QuZ2V0TW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQZXJpb2QoZCkge1xuICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0SG91cnMoKSA+PSAxMildO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDU2hvcnRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0V2Vla2RheXNbZC5nZXRVVENEYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3dlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDU2hvcnRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydE1vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDTW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfbW9udGhzW2QuZ2V0VVRDTW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENQZXJpb2QoZCkge1xuICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0VVRDSG91cnMoKSA+PSAxMildO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoc3BlY2lmaWVyICs9IFwiXCIsIGZvcm1hdHMpO1xuICAgICAgZi50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIGY7XG4gICAgfSxcbiAgICBwYXJzZTogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciArPSBcIlwiLCBsb2NhbERhdGUpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfSxcbiAgICB1dGNGb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoc3BlY2lmaWVyICs9IFwiXCIsIHV0Y0Zvcm1hdHMpO1xuICAgICAgZi50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIGY7XG4gICAgfSxcbiAgICB1dGNQYXJzZTogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciwgdXRjRGF0ZSk7XG4gICAgICBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gIH07XG59XG5cbnZhciBwYWRzID0ge1wiLVwiOiBcIlwiLCBcIl9cIjogXCIgXCIsIFwiMFwiOiBcIjBcIn0sXG4gICAgbnVtYmVyUmUgPSAvXlxccypcXGQrLywgLy8gbm90ZTogaWdub3JlcyBuZXh0IGRpcmVjdGl2ZVxuICAgIHBlcmNlbnRSZSA9IC9eJS8sXG4gICAgcmVxdW90ZVJlID0gL1tcXFxcXFxeXFwkXFwqXFwrXFw/XFx8XFxbXFxdXFwoXFwpXFwuXFx7XFx9XS9nO1xuXG5mdW5jdGlvbiBwYWQodmFsdWUsIGZpbGwsIHdpZHRoKSB7XG4gIHZhciBzaWduID0gdmFsdWUgPCAwID8gXCItXCIgOiBcIlwiLFxuICAgICAgc3RyaW5nID0gKHNpZ24gPyAtdmFsdWUgOiB2YWx1ZSkgKyBcIlwiLFxuICAgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgcmV0dXJuIHNpZ24gKyAobGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpICsgc3RyaW5nIDogc3RyaW5nKTtcbn1cblxuZnVuY3Rpb24gcmVxdW90ZShzKSB7XG4gIHJldHVybiBzLnJlcGxhY2UocmVxdW90ZVJlLCBcIlxcXFwkJlwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UmUobmFtZXMpIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKD86XCIgKyBuYW1lcy5tYXAocmVxdW90ZSkuam9pbihcInxcIikgKyBcIilcIiwgXCJpXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRMb29rdXAobmFtZXMpIHtcbiAgdmFyIG1hcCA9IHt9LCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBtYXBbbmFtZXNbaV0udG9Mb3dlckNhc2UoKV0gPSBpO1xuICByZXR1cm4gbWFwO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtkYXlOdW1iZXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyAoZC53ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5VID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVyTW9uZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5XID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGdWxsWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNCkpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC55ID0gK25bMF0gKyAoK25bMF0gPiA2OCA/IDE5MDAgOiAyMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVpvbmUoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gL14oWil8KFsrLV1cXGRcXGQpKD86XFw6PyhcXGRcXGQpKT8vLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuWiA9IG5bMV0gPyAwIDogLShuWzJdICsgKG5bM10gfHwgXCIwMFwiKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNb250aE51bWJlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLm0gPSBuWzBdIC0gMSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXlPZlllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgcmV0dXJuIG4gPyAoZC5tID0gMCwgZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VIb3VyMjQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5IID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaW51dGVzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuTSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLkwgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxpdGVyYWxQZXJjZW50KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IHBlcmNlbnRSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IGkgKyBuWzBdLmxlbmd0aCA6IC0xO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXlPZk1vbnRoKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldERhdGUoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhvdXIyNChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRIb3VycygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG91cjEyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEhvdXJzKCkgJSAxMiB8fCAxMiwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheU9mWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoMSArIHRpbWVEYXkuY291bnQodGltZVllYXIoZCksIGQpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWlsbGlzZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1pbGxpc2Vjb25kcygpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0U2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodGltZVN1bmRheS5jb3VudCh0aW1lWWVhcihkKSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyKGQpIHtcbiAgcmV0dXJuIGQuZ2V0RGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHRpbWVNb25kYXkuY291bnQodGltZVllYXIoZCksIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Wm9uZShkKSB7XG4gIHZhciB6ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4gKHogPiAwID8gXCItXCIgOiAoeiAqPSAtMSwgXCIrXCIpKVxuICAgICAgKyBwYWQoeiAvIDYwIHwgMCwgXCIwXCIsIDIpXG4gICAgICArIHBhZCh6ICUgNjAsIFwiMFwiLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENEYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB1dGNEYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNb250aE51bWJlcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENNb250aCgpICsgMSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01pbnV0ZXMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWludXRlcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDU2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENTZWNvbmRzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh1dGNTdW5kYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyKGQpIHtcbiAgcmV0dXJuIGQuZ2V0VVRDRGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y01vbmRheS5jb3VudCh1dGNZZWFyKGQpLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1llYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0Z1bGxZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1pvbmUoKSB7XG4gIHJldHVybiBcIiswMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExpdGVyYWxQZXJjZW50KCkge1xuICByZXR1cm4gXCIlXCI7XG59XG4iLCJpbXBvcnQge3V0Y0Zvcm1hdH0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuXG5leHBvcnQgdmFyIGlzb1NwZWNpZmllciA9IFwiJVktJW0tJWRUJUg6JU06JVMuJUxaXCI7XG5cbmZ1bmN0aW9uIGZvcm1hdElzb05hdGl2ZShkYXRlKSB7XG4gIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCk7XG59XG5cbnZhciBmb3JtYXRJc28gPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ1xuICAgID8gZm9ybWF0SXNvTmF0aXZlXG4gICAgOiB1dGNGb3JtYXQoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0SXNvO1xuIiwiaW1wb3J0IHtpc29TcGVjaWZpZXJ9IGZyb20gXCIuL2lzb0Zvcm1hdFwiO1xuaW1wb3J0IHt1dGNQYXJzZX0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuXG5mdW5jdGlvbiBwYXJzZUlzb05hdGl2ZShzdHJpbmcpIHtcbiAgdmFyIGRhdGUgPSBuZXcgRGF0ZShzdHJpbmcpO1xuICByZXR1cm4gaXNOYU4oZGF0ZSkgPyBudWxsIDogZGF0ZTtcbn1cblxudmFyIHBhcnNlSXNvID0gK25ldyBEYXRlKFwiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaXCIpXG4gICAgPyBwYXJzZUlzb05hdGl2ZVxuICAgIDogdXRjUGFyc2UoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VJc287XG4iLCJpbXBvcnQge2Jpc2VjdG9yLCB0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2ludGVycG9sYXRlTnVtYmVyIGFzIHJlaW50ZXJwb2xhdGV9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHt0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lV2VlaywgdGltZURheSwgdGltZUhvdXIsIHRpbWVNaW51dGUsIHRpbWVTZWNvbmQsIHRpbWVNaWxsaXNlY29uZH0gZnJvbSBcImQzLXRpbWVcIjtcbmltcG9ydCB7dGltZUZvcm1hdH0gZnJvbSBcImQzLXRpbWUtZm9ybWF0XCI7XG5pbXBvcnQge21hcH0gZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCB7ZGVmYXVsdCBhcyBjb250aW51b3VzLCBjb3B5LCBkZWludGVycG9sYXRlTGluZWFyIGFzIGRlaW50ZXJwb2xhdGV9IGZyb20gXCIuL2NvbnRpbnVvdXNcIjtcbmltcG9ydCBuaWNlIGZyb20gXCIuL25pY2VcIjtcblxudmFyIGR1cmF0aW9uU2Vjb25kID0gMTAwMCxcbiAgICBkdXJhdGlvbk1pbnV0ZSA9IGR1cmF0aW9uU2Vjb25kICogNjAsXG4gICAgZHVyYXRpb25Ib3VyID0gZHVyYXRpb25NaW51dGUgKiA2MCxcbiAgICBkdXJhdGlvbkRheSA9IGR1cmF0aW9uSG91ciAqIDI0LFxuICAgIGR1cmF0aW9uV2VlayA9IGR1cmF0aW9uRGF5ICogNyxcbiAgICBkdXJhdGlvbk1vbnRoID0gZHVyYXRpb25EYXkgKiAzMCxcbiAgICBkdXJhdGlvblllYXIgPSBkdXJhdGlvbkRheSAqIDM2NTtcblxuZnVuY3Rpb24gZGF0ZSh0KSB7XG4gIHJldHVybiBuZXcgRGF0ZSh0KTtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlID8gK3QgOiArbmV3IERhdGUoK3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXIoeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kLCBmb3JtYXQpIHtcbiAgdmFyIHNjYWxlID0gY29udGludW91cyhkZWludGVycG9sYXRlLCByZWludGVycG9sYXRlKSxcbiAgICAgIGludmVydCA9IHNjYWxlLmludmVydCxcbiAgICAgIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICB2YXIgZm9ybWF0TWlsbGlzZWNvbmQgPSBmb3JtYXQoXCIuJUxcIiksXG4gICAgICBmb3JtYXRTZWNvbmQgPSBmb3JtYXQoXCI6JVNcIiksXG4gICAgICBmb3JtYXRNaW51dGUgPSBmb3JtYXQoXCIlSTolTVwiKSxcbiAgICAgIGZvcm1hdEhvdXIgPSBmb3JtYXQoXCIlSSAlcFwiKSxcbiAgICAgIGZvcm1hdERheSA9IGZvcm1hdChcIiVhICVkXCIpLFxuICAgICAgZm9ybWF0V2VlayA9IGZvcm1hdChcIiViICVkXCIpLFxuICAgICAgZm9ybWF0TW9udGggPSBmb3JtYXQoXCIlQlwiKSxcbiAgICAgIGZvcm1hdFllYXIgPSBmb3JtYXQoXCIlWVwiKTtcblxuICB2YXIgdGlja0ludGVydmFscyA9IFtcbiAgICBbc2Vjb25kLCAgMSwgICAgICBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgIDUsICA1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsIDE1LCAxNSAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAzMCwgMzAgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW21pbnV0ZSwgIDEsICAgICAgZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsICA1LCAgNSAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAxNSwgMTUgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgMzAsIDMwICogZHVyYXRpb25NaW51dGVdLFxuICAgIFsgIGhvdXIsICAxLCAgICAgIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAgMywgIDMgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgIDYsICA2ICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsIDEyLCAxMiAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICAgZGF5LCAgMSwgICAgICBkdXJhdGlvbkRheSAgIF0sXG4gICAgWyAgIGRheSwgIDIsICAyICogZHVyYXRpb25EYXkgICBdLFxuICAgIFsgIHdlZWssICAxLCAgICAgIGR1cmF0aW9uV2VlayAgXSxcbiAgICBbIG1vbnRoLCAgMSwgICAgICBkdXJhdGlvbk1vbnRoIF0sXG4gICAgWyBtb250aCwgIDMsICAzICogZHVyYXRpb25Nb250aCBdLFxuICAgIFsgIHllYXIsICAxLCAgICAgIGR1cmF0aW9uWWVhciAgXVxuICBdO1xuXG4gIGZ1bmN0aW9uIHRpY2tGb3JtYXQoZGF0ZSkge1xuICAgIHJldHVybiAoc2Vjb25kKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdE1pbGxpc2Vjb25kXG4gICAgICAgIDogbWludXRlKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdFNlY29uZFxuICAgICAgICA6IGhvdXIoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TWludXRlXG4gICAgICAgIDogZGF5KGRhdGUpIDwgZGF0ZSA/IGZvcm1hdEhvdXJcbiAgICAgICAgOiBtb250aChkYXRlKSA8IGRhdGUgPyAod2VlayhkYXRlKSA8IGRhdGUgPyBmb3JtYXREYXkgOiBmb3JtYXRXZWVrKVxuICAgICAgICA6IHllYXIoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TW9udGhcbiAgICAgICAgOiBmb3JtYXRZZWFyKShkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2tJbnRlcnZhbChpbnRlcnZhbCwgc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICBpZiAoaW50ZXJ2YWwgPT0gbnVsbCkgaW50ZXJ2YWwgPSAxMDtcblxuICAgIC8vIElmIGEgZGVzaXJlZCB0aWNrIGNvdW50IGlzIHNwZWNpZmllZCwgcGljayBhIHJlYXNvbmFibGUgdGljayBpbnRlcnZhbFxuICAgIC8vIGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgdGhlIGRvbWFpbiBhbmQgYSByb3VnaCBlc3RpbWF0ZSBvZiB0aWNrIHNpemUuXG4gICAgLy8gT3RoZXJ3aXNlLCBhc3N1bWUgaW50ZXJ2YWwgaXMgYWxyZWFkeSBhIHRpbWUgaW50ZXJ2YWwgYW5kIHVzZSBpdC5cbiAgICBpZiAodHlwZW9mIGludGVydmFsID09PSBcIm51bWJlclwiKSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIGludGVydmFsLFxuICAgICAgICAgIGkgPSBiaXNlY3RvcihmdW5jdGlvbihpKSB7IHJldHVybiBpWzJdOyB9KS5yaWdodCh0aWNrSW50ZXJ2YWxzLCB0YXJnZXQpO1xuICAgICAgaWYgKGkgPT09IHRpY2tJbnRlcnZhbHMubGVuZ3RoKSB7XG4gICAgICAgIHN0ZXAgPSB0aWNrU3RlcChzdGFydCAvIGR1cmF0aW9uWWVhciwgc3RvcCAvIGR1cmF0aW9uWWVhciwgaW50ZXJ2YWwpO1xuICAgICAgICBpbnRlcnZhbCA9IHllYXI7XG4gICAgICB9IGVsc2UgaWYgKGkpIHtcbiAgICAgICAgaSA9IHRpY2tJbnRlcnZhbHNbdGFyZ2V0IC8gdGlja0ludGVydmFsc1tpIC0gMV1bMl0gPCB0aWNrSW50ZXJ2YWxzW2ldWzJdIC8gdGFyZ2V0ID8gaSAtIDEgOiBpXTtcbiAgICAgICAgc3RlcCA9IGlbMV07XG4gICAgICAgIGludGVydmFsID0gaVswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZXAgPSB0aWNrU3RlcChzdGFydCwgc3RvcCwgaW50ZXJ2YWwpO1xuICAgICAgICBpbnRlcnZhbCA9IG1pbGxpc2Vjb25kO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdGVwID09IG51bGwgPyBpbnRlcnZhbCA6IGludGVydmFsLmV2ZXJ5KHN0ZXApO1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShpbnZlcnQoeSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IGRvbWFpbihtYXAuY2FsbChfLCBudW1iZXIpKSA6IGRvbWFpbigpLm1hcChkYXRlKTtcbiAgfTtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGludGVydmFsLCBzdGVwKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKSxcbiAgICAgICAgdDAgPSBkWzBdLFxuICAgICAgICB0MSA9IGRbZC5sZW5ndGggLSAxXSxcbiAgICAgICAgciA9IHQxIDwgdDAsXG4gICAgICAgIHQ7XG4gICAgaWYgKHIpIHQgPSB0MCwgdDAgPSB0MSwgdDEgPSB0O1xuICAgIHQgPSB0aWNrSW50ZXJ2YWwoaW50ZXJ2YWwsIHQwLCB0MSwgc3RlcCk7XG4gICAgdCA9IHQgPyB0LnJhbmdlKHQwLCB0MSArIDEpIDogW107IC8vIGluY2x1c2l2ZSBzdG9wXG4gICAgcmV0dXJuIHIgPyB0LnJldmVyc2UoKSA6IHQ7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICByZXR1cm4gc3BlY2lmaWVyID09IG51bGwgPyB0aWNrRm9ybWF0IDogZm9ybWF0KHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGludGVydmFsLCBzdGVwKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gKGludGVydmFsID0gdGlja0ludGVydmFsKGludGVydmFsLCBkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIHN0ZXApKVxuICAgICAgICA/IGRvbWFpbihuaWNlKGQsIGludGVydmFsKSlcbiAgICAgICAgOiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGNhbGVuZGFyKHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCwgZm9ybWF0KSk7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNhbGVuZGFyKHRpbWVZZWFyLCB0aW1lTW9udGgsIHRpbWVXZWVrLCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSwgdGltZVNlY29uZCwgdGltZU1pbGxpc2Vjb25kLCB0aW1lRm9ybWF0KS5kb21haW4oW25ldyBEYXRlKDIwMDAsIDAsIDEpLCBuZXcgRGF0ZSgyMDAwLCAwLCAyKV0pO1xufVxuIiwiZnVuY3Rpb24gTGluZWFyKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkxpbmVhci5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgLy8gcHJvY2VlZFxuICAgICAgZGVmYXVsdDogdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IExpbmVhcihjb250ZXh0KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiB4KHApIHtcbiAgcmV0dXJuIHBbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KHApIHtcbiAgcmV0dXJuIHBbMV07XG59XG4iLCJmdW5jdGlvbiBzaWduKHgpIHtcbiAgcmV0dXJuIHggPCAwID8gLTEgOiAxO1xufVxuXG4vLyBDYWxjdWxhdGUgdGhlIHNsb3BlcyBvZiB0aGUgdGFuZ2VudHMgKEhlcm1pdGUtdHlwZSBpbnRlcnBvbGF0aW9uKSBiYXNlZCBvblxuLy8gdGhlIGZvbGxvd2luZyBwYXBlcjogU3RlZmZlbiwgTS4gMTk5MC4gQSBTaW1wbGUgTWV0aG9kIGZvciBNb25vdG9uaWNcbi8vIEludGVycG9sYXRpb24gaW4gT25lIERpbWVuc2lvbi4gQXN0cm9ub215IGFuZCBBc3Ryb3BoeXNpY3MsIFZvbC4gMjM5LCBOTy5cbi8vIE5PVihJSSksIFAuIDQ0MywgMTk5MC5cbmZ1bmN0aW9uIHNsb3BlMyh0aGF0LCB4MiwgeTIpIHtcbiAgdmFyIGgwID0gdGhhdC5feDEgLSB0aGF0Ll94MCxcbiAgICAgIGgxID0geDIgLSB0aGF0Ll94MSxcbiAgICAgIHMwID0gKHRoYXQuX3kxIC0gdGhhdC5feTApIC8gKGgwIHx8IGgxIDwgMCAmJiAtMCksXG4gICAgICBzMSA9ICh5MiAtIHRoYXQuX3kxKSAvIChoMSB8fCBoMCA8IDAgJiYgLTApLFxuICAgICAgcCA9IChzMCAqIGgxICsgczEgKiBoMCkgLyAoaDAgKyBoMSk7XG4gIHJldHVybiAoc2lnbihzMCkgKyBzaWduKHMxKSkgKiBNYXRoLm1pbihNYXRoLmFicyhzMCksIE1hdGguYWJzKHMxKSwgMC41ICogTWF0aC5hYnMocCkpIHx8IDA7XG59XG5cbi8vIENhbGN1bGF0ZSBhIG9uZS1zaWRlZCBzbG9wZS5cbmZ1bmN0aW9uIHNsb3BlMih0aGF0LCB0KSB7XG4gIHZhciBoID0gdGhhdC5feDEgLSB0aGF0Ll94MDtcbiAgcmV0dXJuIGggPyAoMyAqICh0aGF0Ll95MSAtIHRoYXQuX3kwKSAvIGggLSB0KSAvIDIgOiB0O1xufVxuXG4vLyBBY2NvcmRpbmcgdG8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3ViaWNfSGVybWl0ZV9zcGxpbmUjUmVwcmVzZW50YXRpb25zXG4vLyBcInlvdSBjYW4gZXhwcmVzcyBjdWJpYyBIZXJtaXRlIGludGVycG9sYXRpb24gaW4gdGVybXMgb2YgY3ViaWMgQsOpemllciBjdXJ2ZXNcbi8vIHdpdGggcmVzcGVjdCB0byB0aGUgZm91ciB2YWx1ZXMgcDAsIHAwICsgbTAgLyAzLCBwMSAtIG0xIC8gMywgcDFcIi5cbmZ1bmN0aW9uIHBvaW50KHRoYXQsIHQwLCB0MSkge1xuICB2YXIgeDAgPSB0aGF0Ll94MCxcbiAgICAgIHkwID0gdGhhdC5feTAsXG4gICAgICB4MSA9IHRoYXQuX3gxLFxuICAgICAgeTEgPSB0aGF0Ll95MSxcbiAgICAgIGR4ID0gKHgxIC0geDApIC8gMztcbiAgdGhhdC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgwICsgZHgsIHkwICsgZHggKiB0MCwgeDEgLSBkeCwgeTEgLSBkeCAqIHQxLCB4MSwgeTEpO1xufVxuXG5mdW5jdGlvbiBNb25vdG9uZVgoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuTW9ub3RvbmVYLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID1cbiAgICB0aGlzLl90MCA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMjogdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsIHRoaXMuX3kxKTsgYnJlYWs7XG4gICAgICBjYXNlIDM6IHBvaW50KHRoaXMsIHRoaXMuX3QwLCBzbG9wZTIodGhpcywgdGhpcy5fdDApKTsgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdmFyIHQxID0gTmFOO1xuXG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgaWYgKHggPT09IHRoaXMuX3gxICYmIHkgPT09IHRoaXMuX3kxKSByZXR1cm47IC8vIElnbm9yZSBjb2luY2lkZW50IHBvaW50cy5cbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHBvaW50KHRoaXMsIHNsb3BlMih0aGlzLCB0MSA9IHNsb3BlMyh0aGlzLCB4LCB5KSksIHQxKTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB0aGlzLl90MCwgdDEgPSBzbG9wZTModGhpcywgeCwgeSkpOyBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB5O1xuICAgIHRoaXMuX3QwID0gdDE7XG4gIH1cbn1cblxuZnVuY3Rpb24gTW9ub3RvbmVZKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IG5ldyBSZWZsZWN0Q29udGV4dChjb250ZXh0KTtcbn1cblxuKE1vbm90b25lWS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1vbm90b25lWC5wcm90b3R5cGUpKS5wb2ludCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgTW9ub3RvbmVYLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsIHksIHgpO1xufTtcblxuZnVuY3Rpb24gUmVmbGVjdENvbnRleHQoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuUmVmbGVjdENvbnRleHQucHJvdG90eXBlID0ge1xuICBtb3ZlVG86IGZ1bmN0aW9uKHgsIHkpIHsgdGhpcy5fY29udGV4dC5tb3ZlVG8oeSwgeCk7IH0sXG4gIGNsb3NlUGF0aDogZnVuY3Rpb24oKSB7IHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7IH0sXG4gIGxpbmVUbzogZnVuY3Rpb24oeCwgeSkgeyB0aGlzLl9jb250ZXh0LmxpbmVUbyh5LCB4KTsgfSxcbiAgYmV6aWVyQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHsgdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHkxLCB4MSwgeTIsIHgyLCB5LCB4KTsgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vbm90b25lWChjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTW9ub3RvbmVYKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ub3RvbmVZKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBNb25vdG9uZVkoY29udGV4dCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBhdHRyc0Z1bmN0aW9uKHNlbGVjdGlvbiwgbWFwKSB7XG4gIHJldHVybiBzZWxlY3Rpb24uZWFjaChmdW5jdGlvbigpIHtcbiAgICB2YXIgeCA9IG1hcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBzID0gc2VsZWN0KHRoaXMpO1xuICAgIGZvciAodmFyIG5hbWUgaW4geCkgcy5hdHRyKG5hbWUsIHhbbmFtZV0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXR0cnNPYmplY3Qoc2VsZWN0aW9uLCBtYXApIHtcbiAgZm9yICh2YXIgbmFtZSBpbiBtYXApIHNlbGVjdGlvbi5hdHRyKG5hbWUsIG1hcFtuYW1lXSk7XG4gIHJldHVybiBzZWxlY3Rpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hcCkge1xuICByZXR1cm4gKHR5cGVvZiBtYXAgPT09IFwiZnVuY3Rpb25cIiA/IGF0dHJzRnVuY3Rpb24gOiBhdHRyc09iamVjdCkodGhpcywgbWFwKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmZ1bmN0aW9uIHN0eWxlc0Z1bmN0aW9uKHNlbGVjdGlvbiwgbWFwLCBwcmlvcml0eSkge1xuICByZXR1cm4gc2VsZWN0aW9uLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgdmFyIHggPSBtYXAuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgcyA9IHNlbGVjdCh0aGlzKTtcbiAgICBmb3IgKHZhciBuYW1lIGluIHgpIHMuc3R5bGUobmFtZSwgeFtuYW1lXSwgcHJpb3JpdHkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc3R5bGVzT2JqZWN0KHNlbGVjdGlvbiwgbWFwLCBwcmlvcml0eSkge1xuICBmb3IgKHZhciBuYW1lIGluIG1hcCkgc2VsZWN0aW9uLnN0eWxlKG5hbWUsIG1hcFtuYW1lXSwgcHJpb3JpdHkpO1xuICByZXR1cm4gc2VsZWN0aW9uO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXAsIHByaW9yaXR5KSB7XG4gIHJldHVybiAodHlwZW9mIG1hcCA9PT0gXCJmdW5jdGlvblwiID8gc3R5bGVzRnVuY3Rpb24gOiBzdHlsZXNPYmplY3QpKHRoaXMsIG1hcCwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSk7XG59XG4iLCJpbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBwcm9wZXJ0aWVzRnVuY3Rpb24oc2VsZWN0aW9uLCBtYXApIHtcbiAgcmV0dXJuIHNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIHZhciB4ID0gbWFwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHMgPSBzZWxlY3QodGhpcyk7XG4gICAgZm9yICh2YXIgbmFtZSBpbiB4KSBzLnByb3BlcnR5KG5hbWUsIHhbbmFtZV0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydGllc09iamVjdChzZWxlY3Rpb24sIG1hcCkge1xuICBmb3IgKHZhciBuYW1lIGluIG1hcCkgc2VsZWN0aW9uLnByb3BlcnR5KG5hbWUsIG1hcFtuYW1lXSk7XG4gIHJldHVybiBzZWxlY3Rpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hcCkge1xuICByZXR1cm4gKHR5cGVvZiBtYXAgPT09IFwiZnVuY3Rpb25cIiA/IHByb3BlcnRpZXNGdW5jdGlvbiA6IHByb3BlcnRpZXNPYmplY3QpKHRoaXMsIG1hcCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5pbXBvcnQgYmlzZWN0b3IgZnJvbSBcIi4vYmlzZWN0b3JcIjtcblxudmFyIGFzY2VuZGluZ0Jpc2VjdCA9IGJpc2VjdG9yKGFzY2VuZGluZyk7XG5leHBvcnQgdmFyIGJpc2VjdFJpZ2h0ID0gYXNjZW5kaW5nQmlzZWN0LnJpZ2h0O1xuZXhwb3J0IHZhciBiaXNlY3RMZWZ0ID0gYXNjZW5kaW5nQmlzZWN0LmxlZnQ7XG5leHBvcnQgZGVmYXVsdCBiaXNlY3RSaWdodDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIG1heDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gRmluZCB0aGUgZmlyc3QgY29tcGFyYWJsZSB2YWx1ZS5cbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZXNbaV0pICE9IG51bGwgJiYgdmFsdWUgPj0gdmFsdWUpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIENvbXBhcmUgdGhlIHJlbWFpbmluZyB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+IG1heCkge1xuICAgICAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZWxzZSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gRmluZCB0aGUgZmlyc3QgY29tcGFyYWJsZSB2YWx1ZS5cbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpICE9IG51bGwgJiYgdmFsdWUgPiBtYXgpIHtcbiAgICAgICAgICAgIG1heCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXg7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgaSA9IC0xLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW47XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZXNbaV0pICE9IG51bGwgJiYgbWluID4gdmFsdWUpIHtcbiAgICAgICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpICE9IG51bGwgJiYgdmFsdWUgPj0gdmFsdWUpIHtcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIENvbXBhcmUgdGhlIHJlbWFpbmluZyB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIG1pbiA+IHZhbHVlKSB7XG4gICAgICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWluO1xufVxuIiwiZXhwb3J0IHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJleHBvcnQgdmFyIHhodG1sID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc3ZnOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhodG1sOiB4aHRtbCxcbiAgeGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB4bWw6IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCJcbn07XG4iLCJpbXBvcnQgbmFtZXNwYWNlcyBmcm9tIFwiLi9uYW1lc3BhY2VzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHByZWZpeCA9IG5hbWUgKz0gXCJcIiwgaSA9IHByZWZpeC5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGkgPj0gMCAmJiAocHJlZml4ID0gbmFtZS5zbGljZSgwLCBpKSkgIT09IFwieG1sbnNcIikgbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO1xuICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7XG59XG4iLCJ2YXIgbWF0Y2hlciA9IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgfTtcbn07XG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIGlmICghZWxlbWVudC5tYXRjaGVzKSB7XG4gICAgdmFyIHZlbmRvck1hdGNoZXMgPSBlbGVtZW50LndlYmtpdE1hdGNoZXNTZWxlY3RvclxuICAgICAgICB8fCBlbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yXG4gICAgICAgIHx8IGVsZW1lbnQubW96TWF0Y2hlc1NlbGVjdG9yXG4gICAgICAgIHx8IGVsZW1lbnQub01hdGNoZXNTZWxlY3RvcjtcbiAgICBtYXRjaGVyID0gZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHZlbmRvck1hdGNoZXMuY2FsbCh0aGlzLCBzZWxlY3Rvcik7XG4gICAgICB9O1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbWF0Y2hlcjtcbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHNlbGVjdG9yIGZyb20gXCIuLi9zZWxlY3RvclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICBpZiAoXCJfX2RhdGFfX1wiIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO1xuICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHNlbGVjdG9yQWxsIGZyb20gXCIuLi9zZWxlY3RvckFsbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBbXSwgcGFyZW50cyA9IFtdLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzdWJncm91cHMucHVzaChzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpO1xuICAgICAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCBwYXJlbnRzKTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IG1hdGNoZXIgZnJvbSBcIi4uL21hdGNoZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCAhPT0gXCJmdW5jdGlvblwiKSBtYXRjaCA9IG1hdGNoZXIobWF0Y2gpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBbXSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiBtYXRjaC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkge1xuICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih1cGRhdGUpIHtcbiAgcmV0dXJuIG5ldyBBcnJheSh1cGRhdGUubGVuZ3RoKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2VcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdGlvbikge1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSBzZWxlY3Rpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XG4gICAgICAgIG1lcmdlW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICBtZXJnZXNbal0gPSBncm91cHMwW2pdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IC0xLCBtID0gZ3JvdXBzLmxlbmd0aDsgKytqIDwgbTspIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IGdyb3VwLmxlbmd0aCAtIDEsIG5leHQgPSBncm91cFtpXSwgbm9kZTsgLS1pID49IDA7KSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGlmIChuZXh0ICYmIG5leHQgIT09IG5vZGUubmV4dFNpYmxpbmcpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgIG5leHQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1swXTtcbiAgYXJndW1lbnRzWzBdID0gdGhpcztcbiAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGVzID0gbmV3IEFycmF5KHRoaXMuc2l6ZSgpKSwgaSA9IC0xO1xuICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7IG5vZGVzWysraV0gPSB0aGlzOyB9KTtcbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBub2RlID0gZ3JvdXBbaV07XG4gICAgICBpZiAobm9kZSkgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHNpemUgPSAwO1xuICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7ICsrc2l6ZTsgfSk7XG4gIHJldHVybiBzaXplO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhdGhpcy5ub2RlKCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSBjYWxsYmFjay5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSAvLyBub2RlIGlzIGEgTm9kZVxuICAgICAgfHwgKG5vZGUuZG9jdW1lbnQgJiYgbm9kZSkgLy8gbm9kZSBpcyBhIFdpbmRvd1xuICAgICAgfHwgbm9kZS5kZWZhdWx0VmlldzsgLy8gbm9kZSBpcyBhIERvY3VtZW50XG59XG4iLCJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi4vY3JlYXRvclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5wcm9wZXJ0eShcIl9fZGF0YV9fXCIsIHZhbHVlKVxuICAgICAgOiB0aGlzLm5vZGUoKS5fX2RhdGFfXztcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9uLCByb290fSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcildXSwgW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pXG4gICAgICA6IG5ldyBTZWxlY3Rpb24oW1tzZWxlY3Rvcl1dLCByb290KTtcbn1cbiIsImV4cG9ydCB2YXIgZGVnMnJhZCA9IE1hdGguUEkgLyAxODA7XG5leHBvcnQgdmFyIHJhZDJkZWcgPSAxODAgLyBNYXRoLlBJO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJpbXBvcnQge3JnYiBhcyBjb2xvclJnYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgYmFzaXMgZnJvbSBcIi4vYmFzaXNcIjtcbmltcG9ydCBiYXNpc0Nsb3NlZCBmcm9tIFwiLi9iYXNpc0Nsb3NlZFwiO1xuaW1wb3J0IG5vZ2FtbWEsIHtnYW1tYX0gZnJvbSBcIi4vY29sb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHJnYkdhbW1hKHkpIHtcbiAgdmFyIGNvbG9yID0gZ2FtbWEoeSk7XG5cbiAgZnVuY3Rpb24gcmdiKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IGNvbG9yKChzdGFydCA9IGNvbG9yUmdiKHN0YXJ0KSkuciwgKGVuZCA9IGNvbG9yUmdiKGVuZCkpLnIpLFxuICAgICAgICBnID0gY29sb3Ioc3RhcnQuZywgZW5kLmcpLFxuICAgICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LnIgPSByKHQpO1xuICAgICAgc3RhcnQuZyA9IGcodCk7XG4gICAgICBzdGFydC5iID0gYih0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG5cbiAgcmdiLmdhbW1hID0gcmdiR2FtbWE7XG5cbiAgcmV0dXJuIHJnYjtcbn0pKDEpO1xuXG5mdW5jdGlvbiByZ2JTcGxpbmUoc3BsaW5lKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xvcnMpIHtcbiAgICB2YXIgbiA9IGNvbG9ycy5sZW5ndGgsXG4gICAgICAgIHIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGcgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGksIGNvbG9yO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbG9yID0gY29sb3JSZ2IoY29sb3JzW2ldKTtcbiAgICAgIHJbaV0gPSBjb2xvci5yIHx8IDA7XG4gICAgICBnW2ldID0gY29sb3IuZyB8fCAwO1xuICAgICAgYltpXSA9IGNvbG9yLmIgfHwgMDtcbiAgICB9XG4gICAgciA9IHNwbGluZShyKTtcbiAgICBnID0gc3BsaW5lKGcpO1xuICAgIGIgPSBzcGxpbmUoYik7XG4gICAgY29sb3Iub3BhY2l0eSA9IDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGNvbG9yLnIgPSByKHQpO1xuICAgICAgY29sb3IuZyA9IGcodCk7XG4gICAgICBjb2xvci5iID0gYih0KTtcbiAgICAgIHJldHVybiBjb2xvciArIFwiXCI7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciByZ2JCYXNpcyA9IHJnYlNwbGluZShiYXNpcyk7XG5leHBvcnQgdmFyIHJnYkJhc2lzQ2xvc2VkID0gcmdiU3BsaW5lKGJhc2lzQ2xvc2VkKTtcbiIsImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBuYiA9IGIgPyBiLmxlbmd0aCA6IDAsXG4gICAgICBuYSA9IGEgPyBNYXRoLm1pbihuYiwgYS5sZW5ndGgpIDogMCxcbiAgICAgIHggPSBuZXcgQXJyYXkobmIpLFxuICAgICAgYyA9IG5ldyBBcnJheShuYiksXG4gICAgICBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSB4W2ldID0gdmFsdWUoYVtpXSwgYltpXSk7XG4gIGZvciAoOyBpIDwgbmI7ICsraSkgY1tpXSA9IGJbaV07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgY1tpXSA9IHhbaV0odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBkID0gbmV3IERhdGU7XG4gIHJldHVybiBhID0gK2EsIGIgLT0gYSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBkLnNldFRpbWUoYSArIGIgKiB0KSwgZDtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiAtPSBhLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKyBiICogdDtcbiAgfTtcbn1cbiIsImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBpID0ge30sXG4gICAgICBjID0ge30sXG4gICAgICBrO1xuXG4gIGlmIChhID09PSBudWxsIHx8IHR5cGVvZiBhICE9PSBcIm9iamVjdFwiKSBhID0ge307XG4gIGlmIChiID09PSBudWxsIHx8IHR5cGVvZiBiICE9PSBcIm9iamVjdFwiKSBiID0ge307XG5cbiAgZm9yIChrIGluIGIpIHtcbiAgICBpZiAoayBpbiBhKSB7XG4gICAgICBpW2tdID0gdmFsdWUoYVtrXSwgYltrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNba10gPSBiW2tdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChrIGluIGkpIGNba10gPSBpW2tdKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIiwiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgcmdiIGZyb20gXCIuL3JnYlwiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgZGF0ZSBmcm9tIFwiLi9kYXRlXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuaW1wb3J0IG9iamVjdCBmcm9tIFwiLi9vYmplY3RcIjtcbmltcG9ydCBzdHJpbmcgZnJvbSBcIi4vc3RyaW5nXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgdCA9IHR5cGVvZiBiLCBjO1xuICByZXR1cm4gYiA9PSBudWxsIHx8IHQgPT09IFwiYm9vbGVhblwiID8gY29uc3RhbnQoYilcbiAgICAgIDogKHQgPT09IFwibnVtYmVyXCIgPyBudW1iZXJcbiAgICAgIDogdCA9PT0gXCJzdHJpbmdcIiA/ICgoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgcmdiKSA6IHN0cmluZylcbiAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gcmdiXG4gICAgICA6IGIgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZVxuICAgICAgOiBBcnJheS5pc0FycmF5KGIpID8gYXJyYXlcbiAgICAgIDogdHlwZW9mIGIudmFsdWVPZiAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBiLnRvU3RyaW5nICE9PSBcImZ1bmN0aW9uXCIgfHwgaXNOYU4oYikgPyBvYmplY3RcbiAgICAgIDogbnVtYmVyKShhLCBiKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiAtPSBhLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSArIGIgKiB0KTtcbiAgfTtcbn1cbiIsInZhciBkZWdyZWVzID0gMTgwIC8gTWF0aC5QSTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IHtcbiAgdHJhbnNsYXRlWDogMCxcbiAgdHJhbnNsYXRlWTogMCxcbiAgcm90YXRlOiAwLFxuICBza2V3WDogMCxcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDFcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFyIHNjYWxlWCwgc2NhbGVZLCBza2V3WDtcbiAgaWYgKHNjYWxlWCA9IE1hdGguc3FydChhICogYSArIGIgKiBiKSkgYSAvPSBzY2FsZVgsIGIgLz0gc2NhbGVYO1xuICBpZiAoc2tld1ggPSBhICogYyArIGIgKiBkKSBjIC09IGEgKiBza2V3WCwgZCAtPSBiICogc2tld1g7XG4gIGlmIChzY2FsZVkgPSBNYXRoLnNxcnQoYyAqIGMgKyBkICogZCkpIGMgLz0gc2NhbGVZLCBkIC89IHNjYWxlWSwgc2tld1ggLz0gc2NhbGVZO1xuICBpZiAoYSAqIGQgPCBiICogYykgYSA9IC1hLCBiID0gLWIsIHNrZXdYID0gLXNrZXdYLCBzY2FsZVggPSAtc2NhbGVYO1xuICByZXR1cm4ge1xuICAgIHRyYW5zbGF0ZVg6IGUsXG4gICAgdHJhbnNsYXRlWTogZixcbiAgICByb3RhdGU6IE1hdGguYXRhbjIoYiwgYSkgKiBkZWdyZWVzLFxuICAgIHNrZXdYOiBNYXRoLmF0YW4oc2tld1gpICogZGVncmVlcyxcbiAgICBzY2FsZVg6IHNjYWxlWCxcbiAgICBzY2FsZVk6IHNjYWxlWVxuICB9O1xufVxuIiwiaW1wb3J0IHtUaW1lcn0gZnJvbSBcIi4vdGltZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICBkZWxheSA9IGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5O1xuICB0LnJlc3RhcnQoZnVuY3Rpb24oZWxhcHNlZCkge1xuICAgIHQuc3RvcCgpO1xuICAgIGNhbGxiYWNrKGVsYXBzZWQgKyBkZWxheSk7XG4gIH0sIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG4iLCJpbXBvcnQge1NUQVJUSU5HLCBFTkRJTkcsIEVOREVEfSBmcm9tIFwiLi90cmFuc2l0aW9uL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBhY3RpdmUsXG4gICAgICBlbXB0eSA9IHRydWUsXG4gICAgICBpO1xuXG4gIGlmICghc2NoZWR1bGVzKSByZXR1cm47XG5cbiAgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcblxuICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgaWYgKChzY2hlZHVsZSA9IHNjaGVkdWxlc1tpXSkubmFtZSAhPT0gbmFtZSkgeyBlbXB0eSA9IGZhbHNlOyBjb250aW51ZTsgfVxuICAgIGFjdGl2ZSA9IHNjaGVkdWxlLnN0YXRlID4gU1RBUlRJTkcgJiYgc2NoZWR1bGUuc3RhdGUgPCBFTkRJTkc7XG4gICAgc2NoZWR1bGUuc3RhdGUgPSBFTkRFRDtcbiAgICBzY2hlZHVsZS50aW1lci5zdG9wKCk7XG4gICAgaWYgKGFjdGl2ZSkgc2NoZWR1bGUub24uY2FsbChcImludGVycnVwdFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzY2hlZHVsZS5pbmRleCwgc2NoZWR1bGUuZ3JvdXApO1xuICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gIH1cblxuICBpZiAoZW1wdHkpIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbn1cbiIsImltcG9ydCBpbnRlcnJ1cHQgZnJvbSBcIi4uL2ludGVycnVwdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgaW50ZXJydXB0KHRoaXMsIG5hbWUpO1xuICB9KTtcbn1cbiIsImltcG9ydCB7Y29sb3J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZU51bWJlciwgaW50ZXJwb2xhdGVSZ2IsIGludGVycG9sYXRlU3RyaW5nfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYztcbiAgcmV0dXJuICh0eXBlb2YgYiA9PT0gXCJudW1iZXJcIiA/IGludGVycG9sYXRlTnVtYmVyXG4gICAgICA6IGIgaW5zdGFuY2VvZiBjb2xvciA/IGludGVycG9sYXRlUmdiXG4gICAgICA6IChjID0gY29sb3IoYikpID8gKGIgPSBjLCBpbnRlcnBvbGF0ZVJnYilcbiAgICAgIDogaW50ZXJwb2xhdGVTdHJpbmcpKGEsIGIpO1xufVxuIiwiaW1wb3J0IHttYXRjaGVyfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggIT09IFwiZnVuY3Rpb25cIikgbWF0Y2ggPSBtYXRjaGVyKG1hdGNoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gW10sIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCB0aGlzLl9uYW1lLCB0aGlzLl9pZCk7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHRyYW5zaXRpb24pIHtcbiAgaWYgKHRyYW5zaXRpb24uX2lkICE9PSB0aGlzLl9pZCkgdGhyb3cgbmV3IEVycm9yO1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSB0cmFuc2l0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwMCA9IGdyb3VwczBbal0sIGdyb3VwMSA9IGdyb3VwczFbal0sIG4gPSBncm91cDAubGVuZ3RoLCBtZXJnZSA9IG1lcmdlc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXAwW2ldIHx8IGdyb3VwMVtpXSkge1xuICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IGogPCBtMDsgKytqKSB7XG4gICAgbWVyZ2VzW2pdID0gZ3JvdXBzMFtqXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMsIHRoaXMuX25hbWUsIHRoaXMuX2lkKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0b3J9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkID0gdGhpcy5faWQ7XG5cbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICBpZiAoXCJfX2RhdGFfX1wiIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO1xuICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XG4gICAgICAgIHNjaGVkdWxlKHN1Ymdyb3VwW2ldLCBuYW1lLCBpZCwgaSwgc3ViZ3JvdXAsIGdldChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0b3JBbGx9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkID0gdGhpcy5faWQ7XG5cbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBbXSwgcGFyZW50cyA9IFtdLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBmb3IgKHZhciBjaGlsZHJlbiA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSwgY2hpbGQsIGluaGVyaXQgPSBnZXQobm9kZSwgaWQpLCBrID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgayA8IGw7ICsraykge1xuICAgICAgICAgIGlmIChjaGlsZCA9IGNoaWxkcmVuW2tdKSB7XG4gICAgICAgICAgICBzY2hlZHVsZShjaGlsZCwgbmFtZSwgaWQsIGssIGNoaWxkcmVuLCBpbmhlcml0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goY2hpbGRyZW4pO1xuICAgICAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxudmFyIFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3I7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9ncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkMCA9IHRoaXMuX2lkLFxuICAgICAgaWQxID0gbmV3SWQoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICB2YXIgaW5oZXJpdCA9IGdldChub2RlLCBpZDApO1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZDEsIGksIGdyb3VwLCB7XG4gICAgICAgICAgdGltZTogaW5oZXJpdC50aW1lICsgaW5oZXJpdC5kZWxheSArIGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgICAgZHVyYXRpb246IGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZWFzZTogaW5oZXJpdC5lYXNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkMSk7XG59XG4iLCJ2YXIgZXhwb25lbnQgPSAzO1xuXG5leHBvcnQgdmFyIHBvbHlJbiA9IChmdW5jdGlvbiBjdXN0b20oZSkge1xuICBlID0gK2U7XG5cbiAgZnVuY3Rpb24gcG9seUluKHQpIHtcbiAgICByZXR1cm4gTWF0aC5wb3codCwgZSk7XG4gIH1cblxuICBwb2x5SW4uZXhwb25lbnQgPSBjdXN0b207XG5cbiAgcmV0dXJuIHBvbHlJbjtcbn0pKGV4cG9uZW50KTtcblxuZXhwb3J0IHZhciBwb2x5T3V0ID0gKGZ1bmN0aW9uIGN1c3RvbShlKSB7XG4gIGUgPSArZTtcblxuICBmdW5jdGlvbiBwb2x5T3V0KHQpIHtcbiAgICByZXR1cm4gMSAtIE1hdGgucG93KDEgLSB0LCBlKTtcbiAgfVxuXG4gIHBvbHlPdXQuZXhwb25lbnQgPSBjdXN0b207XG5cbiAgcmV0dXJuIHBvbHlPdXQ7XG59KShleHBvbmVudCk7XG5cbmV4cG9ydCB2YXIgcG9seUluT3V0ID0gKGZ1bmN0aW9uIGN1c3RvbShlKSB7XG4gIGUgPSArZTtcblxuICBmdW5jdGlvbiBwb2x5SW5PdXQodCkge1xuICAgIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IE1hdGgucG93KHQsIGUpIDogMiAtIE1hdGgucG93KDIgLSB0LCBlKSkgLyAyO1xuICB9XG5cbiAgcG9seUluT3V0LmV4cG9uZW50ID0gY3VzdG9tO1xuXG4gIHJldHVybiBwb2x5SW5PdXQ7XG59KShleHBvbmVudCk7XG4iLCJ2YXIgb3ZlcnNob290ID0gMS43MDE1ODtcblxuZXhwb3J0IHZhciBiYWNrSW4gPSAoZnVuY3Rpb24gY3VzdG9tKHMpIHtcbiAgcyA9ICtzO1xuXG4gIGZ1bmN0aW9uIGJhY2tJbih0KSB7XG4gICAgcmV0dXJuIHQgKiB0ICogKChzICsgMSkgKiB0IC0gcyk7XG4gIH1cblxuICBiYWNrSW4ub3ZlcnNob290ID0gY3VzdG9tO1xuXG4gIHJldHVybiBiYWNrSW47XG59KShvdmVyc2hvb3QpO1xuXG5leHBvcnQgdmFyIGJhY2tPdXQgPSAoZnVuY3Rpb24gY3VzdG9tKHMpIHtcbiAgcyA9ICtzO1xuXG4gIGZ1bmN0aW9uIGJhY2tPdXQodCkge1xuICAgIHJldHVybiAtLXQgKiB0ICogKChzICsgMSkgKiB0ICsgcykgKyAxO1xuICB9XG5cbiAgYmFja091dC5vdmVyc2hvb3QgPSBjdXN0b207XG5cbiAgcmV0dXJuIGJhY2tPdXQ7XG59KShvdmVyc2hvb3QpO1xuXG5leHBvcnQgdmFyIGJhY2tJbk91dCA9IChmdW5jdGlvbiBjdXN0b20ocykge1xuICBzID0gK3M7XG5cbiAgZnVuY3Rpb24gYmFja0luT3V0KHQpIHtcbiAgICByZXR1cm4gKCh0ICo9IDIpIDwgMSA/IHQgKiB0ICogKChzICsgMSkgKiB0IC0gcykgOiAodCAtPSAyKSAqIHQgKiAoKHMgKyAxKSAqIHQgKyBzKSArIDIpIC8gMjtcbiAgfVxuXG4gIGJhY2tJbk91dC5vdmVyc2hvb3QgPSBjdXN0b207XG5cbiAgcmV0dXJuIGJhY2tJbk91dDtcbn0pKG92ZXJzaG9vdCk7XG4iLCJ2YXIgdGF1ID0gMiAqIE1hdGguUEksXG4gICAgYW1wbGl0dWRlID0gMSxcbiAgICBwZXJpb2QgPSAwLjM7XG5cbmV4cG9ydCB2YXIgZWxhc3RpY0luID0gKGZ1bmN0aW9uIGN1c3RvbShhLCBwKSB7XG4gIHZhciBzID0gTWF0aC5hc2luKDEgLyAoYSA9IE1hdGgubWF4KDEsIGEpKSkgKiAocCAvPSB0YXUpO1xuXG4gIGZ1bmN0aW9uIGVsYXN0aWNJbih0KSB7XG4gICAgcmV0dXJuIGEgKiBNYXRoLnBvdygyLCAxMCAqIC0tdCkgKiBNYXRoLnNpbigocyAtIHQpIC8gcCk7XG4gIH1cblxuICBlbGFzdGljSW4uYW1wbGl0dWRlID0gZnVuY3Rpb24oYSkgeyByZXR1cm4gY3VzdG9tKGEsIHAgKiB0YXUpOyB9O1xuICBlbGFzdGljSW4ucGVyaW9kID0gZnVuY3Rpb24ocCkgeyByZXR1cm4gY3VzdG9tKGEsIHApOyB9O1xuXG4gIHJldHVybiBlbGFzdGljSW47XG59KShhbXBsaXR1ZGUsIHBlcmlvZCk7XG5cbmV4cG9ydCB2YXIgZWxhc3RpY091dCA9IChmdW5jdGlvbiBjdXN0b20oYSwgcCkge1xuICB2YXIgcyA9IE1hdGguYXNpbigxIC8gKGEgPSBNYXRoLm1heCgxLCBhKSkpICogKHAgLz0gdGF1KTtcblxuICBmdW5jdGlvbiBlbGFzdGljT3V0KHQpIHtcbiAgICByZXR1cm4gMSAtIGEgKiBNYXRoLnBvdygyLCAtMTAgKiAodCA9ICt0KSkgKiBNYXRoLnNpbigodCArIHMpIC8gcCk7XG4gIH1cblxuICBlbGFzdGljT3V0LmFtcGxpdHVkZSA9IGZ1bmN0aW9uKGEpIHsgcmV0dXJuIGN1c3RvbShhLCBwICogdGF1KTsgfTtcbiAgZWxhc3RpY091dC5wZXJpb2QgPSBmdW5jdGlvbihwKSB7IHJldHVybiBjdXN0b20oYSwgcCk7IH07XG5cbiAgcmV0dXJuIGVsYXN0aWNPdXQ7XG59KShhbXBsaXR1ZGUsIHBlcmlvZCk7XG5cbmV4cG9ydCB2YXIgZWxhc3RpY0luT3V0ID0gKGZ1bmN0aW9uIGN1c3RvbShhLCBwKSB7XG4gIHZhciBzID0gTWF0aC5hc2luKDEgLyAoYSA9IE1hdGgubWF4KDEsIGEpKSkgKiAocCAvPSB0YXUpO1xuXG4gIGZ1bmN0aW9uIGVsYXN0aWNJbk91dCh0KSB7XG4gICAgcmV0dXJuICgodCA9IHQgKiAyIC0gMSkgPCAwXG4gICAgICAgID8gYSAqIE1hdGgucG93KDIsIDEwICogdCkgKiBNYXRoLnNpbigocyAtIHQpIC8gcClcbiAgICAgICAgOiAyIC0gYSAqIE1hdGgucG93KDIsIC0xMCAqIHQpICogTWF0aC5zaW4oKHMgKyB0KSAvIHApKSAvIDI7XG4gIH1cblxuICBlbGFzdGljSW5PdXQuYW1wbGl0dWRlID0gZnVuY3Rpb24oYSkgeyByZXR1cm4gY3VzdG9tKGEsIHAgKiB0YXUpOyB9O1xuICBlbGFzdGljSW5PdXQucGVyaW9kID0gZnVuY3Rpb24ocCkgeyByZXR1cm4gY3VzdG9tKGEsIHApOyB9O1xuXG4gIHJldHVybiBlbGFzdGljSW5PdXQ7XG59KShhbXBsaXR1ZGUsIHBlcmlvZCk7XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnRlcnJ1cHQgZnJvbSBcIi4vaW50ZXJydXB0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvblwiO1xuXG5zZWxlY3Rpb24ucHJvdG90eXBlLmludGVycnVwdCA9IHNlbGVjdGlvbl9pbnRlcnJ1cHQ7XG5zZWxlY3Rpb24ucHJvdG90eXBlLnRyYW5zaXRpb24gPSBzZWxlY3Rpb25fdHJhbnNpdGlvbjtcbiIsImV4cG9ydCB2YXIgY29zID0gTWF0aC5jb3M7XG5leHBvcnQgdmFyIHNpbiA9IE1hdGguc2luO1xuZXhwb3J0IHZhciBwaSA9IE1hdGguUEk7XG5leHBvcnQgdmFyIGhhbGZQaSA9IHBpIC8gMjtcbmV4cG9ydCB2YXIgdGF1ID0gcGkgKiAyO1xuZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbiIsImltcG9ydCBkc3YgZnJvbSBcIi4vZHN2XCI7XG5cbnZhciBjc3YgPSBkc3YoXCIsXCIpO1xuXG5leHBvcnQgdmFyIGNzdlBhcnNlID0gY3N2LnBhcnNlO1xuZXhwb3J0IHZhciBjc3ZQYXJzZVJvd3MgPSBjc3YucGFyc2VSb3dzO1xuZXhwb3J0IHZhciBjc3ZGb3JtYXQgPSBjc3YuZm9ybWF0O1xuZXhwb3J0IHZhciBjc3ZGb3JtYXRSb3dzID0gY3N2LmZvcm1hdFJvd3M7XG4iLCJpbXBvcnQgZHN2IGZyb20gXCIuL2RzdlwiO1xuXG52YXIgdHN2ID0gZHN2KFwiXFx0XCIpO1xuXG5leHBvcnQgdmFyIHRzdlBhcnNlID0gdHN2LnBhcnNlO1xuZXhwb3J0IHZhciB0c3ZQYXJzZVJvd3MgPSB0c3YucGFyc2VSb3dzO1xuZXhwb3J0IHZhciB0c3ZGb3JtYXQgPSB0c3YuZm9ybWF0O1xuZXhwb3J0IHZhciB0c3ZGb3JtYXRSb3dzID0gdHN2LmZvcm1hdFJvd3M7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5KSB7XG4gIGlmIChpc05hTih4ID0gK3gpIHx8IGlzTmFOKHkgPSAreSkpIHJldHVybiB0aGlzOyAvLyBpZ25vcmUgaW52YWxpZCBwb2ludHNcblxuICB2YXIgeDAgPSB0aGlzLl94MCxcbiAgICAgIHkwID0gdGhpcy5feTAsXG4gICAgICB4MSA9IHRoaXMuX3gxLFxuICAgICAgeTEgPSB0aGlzLl95MTtcblxuICAvLyBJZiB0aGUgcXVhZHRyZWUgaGFzIG5vIGV4dGVudCwgaW5pdGlhbGl6ZSB0aGVtLlxuICAvLyBJbnRlZ2VyIGV4dGVudCBhcmUgbmVjZXNzYXJ5IHNvIHRoYXQgaWYgd2UgbGF0ZXIgZG91YmxlIHRoZSBleHRlbnQsXG4gIC8vIHRoZSBleGlzdGluZyBxdWFkcmFudCBib3VuZGFyaWVzIGRvbuKAmXQgY2hhbmdlIGR1ZSB0byBmbG9hdGluZyBwb2ludCBlcnJvciFcbiAgaWYgKGlzTmFOKHgwKSkge1xuICAgIHgxID0gKHgwID0gTWF0aC5mbG9vcih4KSkgKyAxO1xuICAgIHkxID0gKHkwID0gTWF0aC5mbG9vcih5KSkgKyAxO1xuICB9XG5cbiAgLy8gT3RoZXJ3aXNlLCBkb3VibGUgcmVwZWF0ZWRseSB0byBjb3Zlci5cbiAgZWxzZSBpZiAoeDAgPiB4IHx8IHggPiB4MSB8fCB5MCA+IHkgfHwgeSA+IHkxKSB7XG4gICAgdmFyIHogPSB4MSAtIHgwLFxuICAgICAgICBub2RlID0gdGhpcy5fcm9vdCxcbiAgICAgICAgcGFyZW50LFxuICAgICAgICBpO1xuXG4gICAgc3dpdGNoIChpID0gKHkgPCAoeTAgKyB5MSkgLyAyKSA8PCAxIHwgKHggPCAoeDAgKyB4MSkgLyAyKSkge1xuICAgICAgY2FzZSAwOiB7XG4gICAgICAgIGRvIHBhcmVudCA9IG5ldyBBcnJheSg0KSwgcGFyZW50W2ldID0gbm9kZSwgbm9kZSA9IHBhcmVudDtcbiAgICAgICAgd2hpbGUgKHogKj0gMiwgeDEgPSB4MCArIHosIHkxID0geTAgKyB6LCB4ID4geDEgfHwgeSA+IHkxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDE6IHtcbiAgICAgICAgZG8gcGFyZW50ID0gbmV3IEFycmF5KDQpLCBwYXJlbnRbaV0gPSBub2RlLCBub2RlID0gcGFyZW50O1xuICAgICAgICB3aGlsZSAoeiAqPSAyLCB4MCA9IHgxIC0geiwgeTEgPSB5MCArIHosIHgwID4geCB8fCB5ID4geTEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICBkbyBwYXJlbnQgPSBuZXcgQXJyYXkoNCksIHBhcmVudFtpXSA9IG5vZGUsIG5vZGUgPSBwYXJlbnQ7XG4gICAgICAgIHdoaWxlICh6ICo9IDIsIHgxID0geDAgKyB6LCB5MCA9IHkxIC0geiwgeCA+IHgxIHx8IHkwID4geSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAzOiB7XG4gICAgICAgIGRvIHBhcmVudCA9IG5ldyBBcnJheSg0KSwgcGFyZW50W2ldID0gbm9kZSwgbm9kZSA9IHBhcmVudDtcbiAgICAgICAgd2hpbGUgKHogKj0gMiwgeDAgPSB4MSAtIHosIHkwID0geTEgLSB6LCB4MCA+IHggfHwgeTAgPiB5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Jvb3QgJiYgdGhpcy5fcm9vdC5sZW5ndGgpIHRoaXMuX3Jvb3QgPSBub2RlO1xuICB9XG5cbiAgLy8gSWYgdGhlIHF1YWR0cmVlIGNvdmVycyB0aGUgcG9pbnQgYWxyZWFkeSwganVzdCByZXR1cm4uXG4gIGVsc2UgcmV0dXJuIHRoaXM7XG5cbiAgdGhpcy5feDAgPSB4MDtcbiAgdGhpcy5feTAgPSB5MDtcbiAgdGhpcy5feDEgPSB4MTtcbiAgdGhpcy5feTEgPSB5MTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGEgPSBbXTtcbiAgdGhpcy52aXNpdChmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCFub2RlLmxlbmd0aCkgZG8gZGF0YS5wdXNoKG5vZGUuZGF0YSk7IHdoaWxlIChub2RlID0gbm9kZS5uZXh0KVxuICB9KTtcbiAgcmV0dXJuIGRhdGE7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihfKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuY292ZXIoK19bMF1bMF0sICtfWzBdWzFdKS5jb3ZlcigrX1sxXVswXSwgK19bMV1bMV0pXG4gICAgICA6IGlzTmFOKHRoaXMuX3gwKSA/IHVuZGVmaW5lZCA6IFtbdGhpcy5feDAsIHRoaXMuX3kwXSwgW3RoaXMuX3gxLCB0aGlzLl95MV1dO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdGhpcy5ub2RlID0gbm9kZTtcbiAgdGhpcy54MCA9IHgwO1xuICB0aGlzLnkwID0geTA7XG4gIHRoaXMueDEgPSB4MTtcbiAgdGhpcy55MSA9IHkxO1xufVxuIiwiaW1wb3J0IFF1YWQgZnJvbSBcIi4vcXVhZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5LCByYWRpdXMpIHtcbiAgdmFyIGRhdGEsXG4gICAgICB4MCA9IHRoaXMuX3gwLFxuICAgICAgeTAgPSB0aGlzLl95MCxcbiAgICAgIHgxLFxuICAgICAgeTEsXG4gICAgICB4MixcbiAgICAgIHkyLFxuICAgICAgeDMgPSB0aGlzLl94MSxcbiAgICAgIHkzID0gdGhpcy5feTEsXG4gICAgICBxdWFkcyA9IFtdLFxuICAgICAgbm9kZSA9IHRoaXMuX3Jvb3QsXG4gICAgICBxLFxuICAgICAgaTtcblxuICBpZiAobm9kZSkgcXVhZHMucHVzaChuZXcgUXVhZChub2RlLCB4MCwgeTAsIHgzLCB5MykpO1xuICBpZiAocmFkaXVzID09IG51bGwpIHJhZGl1cyA9IEluZmluaXR5O1xuICBlbHNlIHtcbiAgICB4MCA9IHggLSByYWRpdXMsIHkwID0geSAtIHJhZGl1cztcbiAgICB4MyA9IHggKyByYWRpdXMsIHkzID0geSArIHJhZGl1cztcbiAgICByYWRpdXMgKj0gcmFkaXVzO1xuICB9XG5cbiAgd2hpbGUgKHEgPSBxdWFkcy5wb3AoKSkge1xuXG4gICAgLy8gU3RvcCBzZWFyY2hpbmcgaWYgdGhpcyBxdWFkcmFudCBjYW7igJl0IGNvbnRhaW4gYSBjbG9zZXIgbm9kZS5cbiAgICBpZiAoIShub2RlID0gcS5ub2RlKVxuICAgICAgICB8fCAoeDEgPSBxLngwKSA+IHgzXG4gICAgICAgIHx8ICh5MSA9IHEueTApID4geTNcbiAgICAgICAgfHwgKHgyID0gcS54MSkgPCB4MFxuICAgICAgICB8fCAoeTIgPSBxLnkxKSA8IHkwKSBjb250aW51ZTtcblxuICAgIC8vIEJpc2VjdCB0aGUgY3VycmVudCBxdWFkcmFudC5cbiAgICBpZiAobm9kZS5sZW5ndGgpIHtcbiAgICAgIHZhciB4bSA9ICh4MSArIHgyKSAvIDIsXG4gICAgICAgICAgeW0gPSAoeTEgKyB5MikgLyAyO1xuXG4gICAgICBxdWFkcy5wdXNoKFxuICAgICAgICBuZXcgUXVhZChub2RlWzNdLCB4bSwgeW0sIHgyLCB5MiksXG4gICAgICAgIG5ldyBRdWFkKG5vZGVbMl0sIHgxLCB5bSwgeG0sIHkyKSxcbiAgICAgICAgbmV3IFF1YWQobm9kZVsxXSwgeG0sIHkxLCB4MiwgeW0pLFxuICAgICAgICBuZXcgUXVhZChub2RlWzBdLCB4MSwgeTEsIHhtLCB5bSlcbiAgICAgICk7XG5cbiAgICAgIC8vIFZpc2l0IHRoZSBjbG9zZXN0IHF1YWRyYW50IGZpcnN0LlxuICAgICAgaWYgKGkgPSAoeSA+PSB5bSkgPDwgMSB8ICh4ID49IHhtKSkge1xuICAgICAgICBxID0gcXVhZHNbcXVhZHMubGVuZ3RoIC0gMV07XG4gICAgICAgIHF1YWRzW3F1YWRzLmxlbmd0aCAtIDFdID0gcXVhZHNbcXVhZHMubGVuZ3RoIC0gMSAtIGldO1xuICAgICAgICBxdWFkc1txdWFkcy5sZW5ndGggLSAxIC0gaV0gPSBxO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZpc2l0IHRoaXMgcG9pbnQuIChWaXNpdGluZyBjb2luY2lkZW50IHBvaW50cyBpc27igJl0IG5lY2Vzc2FyeSEpXG4gICAgZWxzZSB7XG4gICAgICB2YXIgZHggPSB4IC0gK3RoaXMuX3guY2FsbChudWxsLCBub2RlLmRhdGEpLFxuICAgICAgICAgIGR5ID0geSAtICt0aGlzLl95LmNhbGwobnVsbCwgbm9kZS5kYXRhKSxcbiAgICAgICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5O1xuICAgICAgaWYgKGQyIDwgcmFkaXVzKSB7XG4gICAgICAgIHZhciBkID0gTWF0aC5zcXJ0KHJhZGl1cyA9IGQyKTtcbiAgICAgICAgeDAgPSB4IC0gZCwgeTAgPSB5IC0gZDtcbiAgICAgICAgeDMgPSB4ICsgZCwgeTMgPSB5ICsgZDtcbiAgICAgICAgZGF0YSA9IG5vZGUuZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcm9vdDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2l6ZSA9IDA7XG4gIHRoaXMudmlzaXQoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS5sZW5ndGgpIGRvICsrc2l6ZTsgd2hpbGUgKG5vZGUgPSBub2RlLm5leHQpXG4gIH0pO1xuICByZXR1cm4gc2l6ZTtcbn1cbiIsImltcG9ydCBRdWFkIGZyb20gXCIuL3F1YWRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIHF1YWRzID0gW10sIHEsIG5vZGUgPSB0aGlzLl9yb290LCBjaGlsZCwgeDAsIHkwLCB4MSwgeTE7XG4gIGlmIChub2RlKSBxdWFkcy5wdXNoKG5ldyBRdWFkKG5vZGUsIHRoaXMuX3gwLCB0aGlzLl95MCwgdGhpcy5feDEsIHRoaXMuX3kxKSk7XG4gIHdoaWxlIChxID0gcXVhZHMucG9wKCkpIHtcbiAgICBpZiAoIWNhbGxiYWNrKG5vZGUgPSBxLm5vZGUsIHgwID0gcS54MCwgeTAgPSBxLnkwLCB4MSA9IHEueDEsIHkxID0gcS55MSkgJiYgbm9kZS5sZW5ndGgpIHtcbiAgICAgIHZhciB4bSA9ICh4MCArIHgxKSAvIDIsIHltID0gKHkwICsgeTEpIC8gMjtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbM10pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHhtLCB5bSwgeDEsIHkxKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzJdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4MCwgeW0sIHhtLCB5MSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsxXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeG0sIHkwLCB4MSwgeW0pKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMF0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5MCwgeG0sIHltKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IFF1YWQgZnJvbSBcIi4vcXVhZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgcXVhZHMgPSBbXSwgbmV4dCA9IFtdLCBxO1xuICBpZiAodGhpcy5fcm9vdCkgcXVhZHMucHVzaChuZXcgUXVhZCh0aGlzLl9yb290LCB0aGlzLl94MCwgdGhpcy5feTAsIHRoaXMuX3gxLCB0aGlzLl95MSkpO1xuICB3aGlsZSAocSA9IHF1YWRzLnBvcCgpKSB7XG4gICAgdmFyIG5vZGUgPSBxLm5vZGU7XG4gICAgaWYgKG5vZGUubGVuZ3RoKSB7XG4gICAgICB2YXIgY2hpbGQsIHgwID0gcS54MCwgeTAgPSBxLnkwLCB4MSA9IHEueDEsIHkxID0gcS55MSwgeG0gPSAoeDAgKyB4MSkgLyAyLCB5bSA9ICh5MCArIHkxKSAvIDI7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzBdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4MCwgeTAsIHhtLCB5bSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsxXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeG0sIHkwLCB4MSwgeW0pKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMl0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5bSwgeG0sIHkxKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzNdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4bSwgeW0sIHgxLCB5MSkpO1xuICAgIH1cbiAgICBuZXh0LnB1c2gocSk7XG4gIH1cbiAgd2hpbGUgKHEgPSBuZXh0LnBvcCgpKSB7XG4gICAgY2FsbGJhY2socS5ub2RlLCBxLngwLCBxLnkwLCBxLngxLCBxLnkxKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsIi8vIENvbXB1dGVzIHRoZSBkZWNpbWFsIGNvZWZmaWNpZW50IGFuZCBleHBvbmVudCBvZiB0aGUgc3BlY2lmaWVkIG51bWJlciB4IHdpdGhcbi8vIHNpZ25pZmljYW50IGRpZ2l0cyBwLCB3aGVyZSB4IGlzIHBvc2l0aXZlIGFuZCBwIGlzIGluIFsxLCAyMV0gb3IgdW5kZWZpbmVkLlxuLy8gRm9yIGV4YW1wbGUsIGZvcm1hdERlY2ltYWwoMS4yMykgcmV0dXJucyBbXCIxMjNcIiwgMF0uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIGlmICgoaSA9ICh4ID0gcCA/IHgudG9FeHBvbmVudGlhbChwIC0gMSkgOiB4LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZihcImVcIikpIDwgMCkgcmV0dXJuIG51bGw7IC8vIE5hTiwgwrFJbmZpbml0eVxuICB2YXIgaSwgY29lZmZpY2llbnQgPSB4LnNsaWNlKDAsIGkpO1xuXG4gIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdG9FeHBvbmVudGlhbCBlaXRoZXIgaGFzIHRoZSBmb3JtIFxcZFxcLlxcZCtlWy0rXVxcZCtcbiAgLy8gKGUuZy4sIDEuMmUrMykgb3IgdGhlIGZvcm0gXFxkZVstK11cXGQrIChlLmcuLCAxZSszKS5cbiAgcmV0dXJuIFtcbiAgICBjb2VmZmljaWVudC5sZW5ndGggPiAxID8gY29lZmZpY2llbnRbMF0gKyBjb2VmZmljaWVudC5zbGljZSgyKSA6IGNvZWZmaWNpZW50LFxuICAgICt4LnNsaWNlKGkgKyAxKVxuICBdO1xufVxuIiwiaW1wb3J0IGZvcm1hdERlY2ltYWwgZnJvbSBcIi4vZm9ybWF0RGVjaW1hbFwiO1xuXG5leHBvcnQgdmFyIHByZWZpeEV4cG9uZW50O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIHZhciBkID0gZm9ybWF0RGVjaW1hbCh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV0sXG4gICAgICBpID0gZXhwb25lbnQgLSAocHJlZml4RXhwb25lbnQgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCAvIDMpKSkgKiAzKSArIDEsXG4gICAgICBuID0gY29lZmZpY2llbnQubGVuZ3RoO1xuICByZXR1cm4gaSA9PT0gbiA/IGNvZWZmaWNpZW50XG4gICAgICA6IGkgPiBuID8gY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoaSAtIG4gKyAxKS5qb2luKFwiMFwiKVxuICAgICAgOiBpID4gMCA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGkpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShpKVxuICAgICAgOiBcIjAuXCIgKyBuZXcgQXJyYXkoMSAtIGkpLmpvaW4oXCIwXCIpICsgZm9ybWF0RGVjaW1hbCh4LCBNYXRoLm1heCgwLCBwICsgaSAtIDEpKVswXTsgLy8gbGVzcyB0aGFuIDF5IVxufVxuIiwiaW1wb3J0IGZvcm1hdERlY2ltYWwgZnJvbSBcIi4vZm9ybWF0RGVjaW1hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4ID0gZm9ybWF0RGVjaW1hbChNYXRoLmFicyh4KSksIHggPyB4WzFdIDogTmFOO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZ3JvdXBpbmcsIHRob3VzYW5kcykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5sZW5ndGgsXG4gICAgICAgIHQgPSBbXSxcbiAgICAgICAgaiA9IDAsXG4gICAgICAgIGcgPSBncm91cGluZ1swXSxcbiAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xuICAgICAgaWYgKGxlbmd0aCArIGcgKyAxID4gd2lkdGgpIGcgPSBNYXRoLm1heCgxLCB3aWR0aCAtIGxlbmd0aCk7XG4gICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTtcbiAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcbiAgICAgIGcgPSBncm91cGluZ1tqID0gKGogKyAxKSAlIGdyb3VwaW5nLmxlbmd0aF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG51bWVyYWxzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bMC05XS9nLCBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gbnVtZXJhbHNbK2ldO1xuICAgIH0pO1xuICB9O1xufVxuIiwiaW1wb3J0IGZvcm1hdERlY2ltYWwgZnJvbSBcIi4vZm9ybWF0RGVjaW1hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIHZhciBkID0gZm9ybWF0RGVjaW1hbCh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV07XG4gIHJldHVybiBleHBvbmVudCA8IDAgPyBcIjAuXCIgKyBuZXcgQXJyYXkoLWV4cG9uZW50KS5qb2luKFwiMFwiKSArIGNvZWZmaWNpZW50XG4gICAgICA6IGNvZWZmaWNpZW50Lmxlbmd0aCA+IGV4cG9uZW50ICsgMSA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGV4cG9uZW50ICsgMSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGV4cG9uZW50ICsgMSlcbiAgICAgIDogY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoZXhwb25lbnQgLSBjb2VmZmljaWVudC5sZW5ndGggKyAyKS5qb2luKFwiMFwiKTtcbn1cbiIsImltcG9ydCBmb3JtYXREZWZhdWx0IGZyb20gXCIuL2Zvcm1hdERlZmF1bHRcIjtcbmltcG9ydCBmb3JtYXRQcmVmaXhBdXRvIGZyb20gXCIuL2Zvcm1hdFByZWZpeEF1dG9cIjtcbmltcG9ydCBmb3JtYXRSb3VuZGVkIGZyb20gXCIuL2Zvcm1hdFJvdW5kZWRcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBcIlwiOiBmb3JtYXREZWZhdWx0LFxuICBcIiVcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4gKHggKiAxMDApLnRvRml4ZWQocCk7IH0sXG4gIFwiYlwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDIpOyB9LFxuICBcImNcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4geCArIFwiXCI7IH0sXG4gIFwiZFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDEwKTsgfSxcbiAgXCJlXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9FeHBvbmVudGlhbChwKTsgfSxcbiAgXCJmXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9GaXhlZChwKTsgfSxcbiAgXCJnXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9QcmVjaXNpb24ocCk7IH0sXG4gIFwib1wiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDgpOyB9LFxuICBcInBcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4gZm9ybWF0Um91bmRlZCh4ICogMTAwLCBwKTsgfSxcbiAgXCJyXCI6IGZvcm1hdFJvdW5kZWQsXG4gIFwic1wiOiBmb3JtYXRQcmVmaXhBdXRvLFxuICBcIlhcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTsgfSxcbiAgXCJ4XCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpOyB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB4ID0geC50b1ByZWNpc2lvbihwKTtcblxuICBvdXQ6IGZvciAodmFyIG4gPSB4Lmxlbmd0aCwgaSA9IDEsIGkwID0gLTEsIGkxOyBpIDwgbjsgKytpKSB7XG4gICAgc3dpdGNoICh4W2ldKSB7XG4gICAgICBjYXNlIFwiLlwiOiBpMCA9IGkxID0gaTsgYnJlYWs7XG4gICAgICBjYXNlIFwiMFwiOiBpZiAoaTAgPT09IDApIGkwID0gaTsgaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCJlXCI6IGJyZWFrIG91dDtcbiAgICAgIGRlZmF1bHQ6IGlmIChpMCA+IDApIGkwID0gMDsgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGkwID4gMCA/IHguc2xpY2UoMCwgaTApICsgeC5zbGljZShpMSArIDEpIDogeDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJpbXBvcnQgZm9ybWF0TG9jYWxlIGZyb20gXCIuL2xvY2FsZVwiO1xuXG52YXIgbG9jYWxlO1xuZXhwb3J0IHZhciBmb3JtYXQ7XG5leHBvcnQgdmFyIGZvcm1hdFByZWZpeDtcblxuZGVmYXVsdExvY2FsZSh7XG4gIGRlY2ltYWw6IFwiLlwiLFxuICB0aG91c2FuZHM6IFwiLFwiLFxuICBncm91cGluZzogWzNdLFxuICBjdXJyZW5jeTogW1wiJFwiLCBcIlwiXVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoZGVmaW5pdGlvbik7XG4gIGZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIGZvcm1hdFByZWZpeCA9IGxvY2FsZS5mb3JtYXRQcmVmaXg7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnRcIjtcbmltcG9ydCBmb3JtYXRHcm91cCBmcm9tIFwiLi9mb3JtYXRHcm91cFwiO1xuaW1wb3J0IGZvcm1hdE51bWVyYWxzIGZyb20gXCIuL2Zvcm1hdE51bWVyYWxzXCI7XG5pbXBvcnQgZm9ybWF0U3BlY2lmaWVyIGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllclwiO1xuaW1wb3J0IGZvcm1hdFR5cGVzIGZyb20gXCIuL2Zvcm1hdFR5cGVzXCI7XG5pbXBvcnQge3ByZWZpeEV4cG9uZW50fSBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHlcIjtcblxudmFyIHByZWZpeGVzID0gW1wieVwiLFwielwiLFwiYVwiLFwiZlwiLFwicFwiLFwiblwiLFwiwrVcIixcIm1cIixcIlwiLFwia1wiLFwiTVwiLFwiR1wiLFwiVFwiLFwiUFwiLFwiRVwiLFwiWlwiLFwiWVwiXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obG9jYWxlKSB7XG4gIHZhciBncm91cCA9IGxvY2FsZS5ncm91cGluZyAmJiBsb2NhbGUudGhvdXNhbmRzID8gZm9ybWF0R3JvdXAobG9jYWxlLmdyb3VwaW5nLCBsb2NhbGUudGhvdXNhbmRzKSA6IGlkZW50aXR5LFxuICAgICAgY3VycmVuY3kgPSBsb2NhbGUuY3VycmVuY3ksXG4gICAgICBkZWNpbWFsID0gbG9jYWxlLmRlY2ltYWwsXG4gICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA/IGZvcm1hdE51bWVyYWxzKGxvY2FsZS5udW1lcmFscykgOiBpZGVudGl0eSxcbiAgICAgIHBlcmNlbnQgPSBsb2NhbGUucGVyY2VudCB8fCBcIiVcIjtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyKSB7XG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcik7XG5cbiAgICB2YXIgZmlsbCA9IHNwZWNpZmllci5maWxsLFxuICAgICAgICBhbGlnbiA9IHNwZWNpZmllci5hbGlnbixcbiAgICAgICAgc2lnbiA9IHNwZWNpZmllci5zaWduLFxuICAgICAgICBzeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sLFxuICAgICAgICB6ZXJvID0gc3BlY2lmaWVyLnplcm8sXG4gICAgICAgIHdpZHRoID0gc3BlY2lmaWVyLndpZHRoLFxuICAgICAgICBjb21tYSA9IHNwZWNpZmllci5jb21tYSxcbiAgICAgICAgcHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbixcbiAgICAgICAgdHlwZSA9IHNwZWNpZmllci50eXBlO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgLy8gRm9yIFNJLXByZWZpeCwgdGhlIHN1ZmZpeCBpcyBsYXppbHkgY29tcHV0ZWQuXG4gICAgdmFyIHByZWZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVswXSA6IHN5bWJvbCA9PT0gXCIjXCIgJiYgL1tib3hYXS8udGVzdCh0eXBlKSA/IFwiMFwiICsgdHlwZS50b0xvd2VyQ2FzZSgpIDogXCJcIixcbiAgICAgICAgc3VmZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5WzFdIDogL1slcF0vLnRlc3QodHlwZSkgPyBwZXJjZW50IDogXCJcIjtcblxuICAgIC8vIFdoYXQgZm9ybWF0IGZ1bmN0aW9uIHNob3VsZCB3ZSB1c2U/XG4gICAgLy8gSXMgdGhpcyBhbiBpbnRlZ2VyIHR5cGU/XG4gICAgLy8gQ2FuIHRoaXMgdHlwZSBnZW5lcmF0ZSBleHBvbmVudGlhbCBub3RhdGlvbj9cbiAgICB2YXIgZm9ybWF0VHlwZSA9IGZvcm1hdFR5cGVzW3R5cGVdLFxuICAgICAgICBtYXliZVN1ZmZpeCA9ICF0eXBlIHx8IC9bZGVmZ3BycyVdLy50ZXN0KHR5cGUpO1xuXG4gICAgLy8gU2V0IHRoZSBkZWZhdWx0IHByZWNpc2lvbiBpZiBub3Qgc3BlY2lmaWVkLFxuICAgIC8vIG9yIGNsYW1wIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uIHRvIHRoZSBzdXBwb3J0ZWQgcmFuZ2UuXG4gICAgLy8gRm9yIHNpZ25pZmljYW50IHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMSwgMjFdLlxuICAgIC8vIEZvciBmaXhlZCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzAsIDIwXS5cbiAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24gPT0gbnVsbCA/ICh0eXBlID8gNiA6IDEyKVxuICAgICAgICA6IC9bZ3Byc10vLnRlc3QodHlwZSkgPyBNYXRoLm1heCgxLCBNYXRoLm1pbigyMSwgcHJlY2lzaW9uKSlcbiAgICAgICAgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigyMCwgcHJlY2lzaW9uKSk7XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQodmFsdWUpIHtcbiAgICAgIHZhciB2YWx1ZVByZWZpeCA9IHByZWZpeCxcbiAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IHN1ZmZpeCxcbiAgICAgICAgICBpLCBuLCBjO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJjXCIpIHtcbiAgICAgICAgdmFsdWVTdWZmaXggPSBmb3JtYXRUeXBlKHZhbHVlKSArIHZhbHVlU3VmZml4O1xuICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcblxuICAgICAgICAvLyBQZXJmb3JtIHRoZSBpbml0aWFsIGZvcm1hdHRpbmcuXG4gICAgICAgIHZhciB2YWx1ZU5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICAgICAgICB2YWx1ZSA9IGZvcm1hdFR5cGUoTWF0aC5hYnModmFsdWUpLCBwcmVjaXNpb24pO1xuXG4gICAgICAgIC8vIElmIGEgbmVnYXRpdmUgdmFsdWUgcm91bmRzIHRvIHplcm8gZHVyaW5nIGZvcm1hdHRpbmcsIHRyZWF0IGFzIHBvc2l0aXZlLlxuICAgICAgICBpZiAodmFsdWVOZWdhdGl2ZSAmJiArdmFsdWUgPT09IDApIHZhbHVlTmVnYXRpdmUgPSBmYWxzZTtcblxuICAgICAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAgICAgdmFsdWVQcmVmaXggPSAodmFsdWVOZWdhdGl2ZSA/IChzaWduID09PSBcIihcIiA/IHNpZ24gOiBcIi1cIikgOiBzaWduID09PSBcIi1cIiB8fCBzaWduID09PSBcIihcIiA/IFwiXCIgOiBzaWduKSArIHZhbHVlUHJlZml4O1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9IHZhbHVlU3VmZml4ICsgKHR5cGUgPT09IFwic1wiID8gcHJlZml4ZXNbOCArIHByZWZpeEV4cG9uZW50IC8gM10gOiBcIlwiKSArICh2YWx1ZU5lZ2F0aXZlICYmIHNpZ24gPT09IFwiKFwiID8gXCIpXCIgOiBcIlwiKTtcblxuICAgICAgICAvLyBCcmVhayB0aGUgZm9ybWF0dGVkIHZhbHVlIGludG8gdGhlIGludGVnZXIg4oCcdmFsdWXigJ0gcGFydCB0aGF0IGNhbiBiZVxuICAgICAgICAvLyBncm91cGVkLCBhbmQgZnJhY3Rpb25hbCBvciBleHBvbmVudGlhbCDigJxzdWZmaXjigJ0gcGFydCB0aGF0IGlzIG5vdC5cbiAgICAgICAgaWYgKG1heWJlU3VmZml4KSB7XG4gICAgICAgICAgaSA9IC0xLCBuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgICAgICBpZiAoYyA9IHZhbHVlLmNoYXJDb2RlQXQoaSksIDQ4ID4gYyB8fCBjID4gNTcpIHtcbiAgICAgICAgICAgICAgdmFsdWVTdWZmaXggPSAoYyA9PT0gNDYgPyBkZWNpbWFsICsgdmFsdWUuc2xpY2UoaSArIDEpIDogdmFsdWUuc2xpY2UoaSkpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgbm90IFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGJlZm9yZSBwYWRkaW5nLlxuICAgICAgaWYgKGNvbW1hICYmICF6ZXJvKSB2YWx1ZSA9IGdyb3VwKHZhbHVlLCBJbmZpbml0eSk7XG5cbiAgICAgIC8vIENvbXB1dGUgdGhlIHBhZGRpbmcuXG4gICAgICB2YXIgbGVuZ3RoID0gdmFsdWVQcmVmaXgubGVuZ3RoICsgdmFsdWUubGVuZ3RoICsgdmFsdWVTdWZmaXgubGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgOiBcIlwiO1xuXG4gICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgXCIwXCIsIGdyb3VwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiB6ZXJvKSB2YWx1ZSA9IGdyb3VwKHBhZGRpbmcgKyB2YWx1ZSwgcGFkZGluZy5sZW5ndGggPyB3aWR0aCAtIHZhbHVlU3VmZml4Lmxlbmd0aCA6IEluZmluaXR5KSwgcGFkZGluZyA9IFwiXCI7XG5cbiAgICAgIC8vIFJlY29uc3RydWN0IHRoZSBmaW5hbCBvdXRwdXQgYmFzZWQgb24gdGhlIGRlc2lyZWQgYWxpZ25tZW50LlxuICAgICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgICBjYXNlIFwiPFwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmc7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiPVwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgcGFkZGluZyArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiXlwiOiB2YWx1ZSA9IHBhZGRpbmcuc2xpY2UoMCwgbGVuZ3RoID0gcGFkZGluZy5sZW5ndGggPj4gMSkgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nLnNsaWNlKGxlbmd0aCk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiB2YWx1ZSA9IHBhZGRpbmcgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVtZXJhbHModmFsdWUpO1xuICAgIH1cblxuICAgIGZvcm1hdC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNwZWNpZmllciArIFwiXCI7XG4gICAgfTtcblxuICAgIHJldHVybiBmb3JtYXQ7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSkge1xuICAgIHZhciBmID0gbmV3Rm9ybWF0KChzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSwgc3BlY2lmaWVyLnR5cGUgPSBcImZcIiwgc3BlY2lmaWVyKSksXG4gICAgICAgIGUgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyxcbiAgICAgICAgayA9IE1hdGgucG93KDEwLCAtZSksXG4gICAgICAgIHByZWZpeCA9IHByZWZpeGVzWzggKyBlIC8gM107XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZihrICogdmFsdWUpICsgcHJlZml4O1xuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvcm1hdDogbmV3Rm9ybWF0LFxuICAgIGZvcm1hdFByZWZpeDogZm9ybWF0UHJlZml4XG4gIH07XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCkge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgLWV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgdmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzIC0gZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCBtYXgpIHtcbiAgc3RlcCA9IE1hdGguYWJzKHN0ZXApLCBtYXggPSBNYXRoLmFicyhtYXgpIC0gc3RlcDtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGV4cG9uZW50KG1heCkgLSBleHBvbmVudChzdGVwKSkgKyAxO1xufVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuL2FkZGVyXCI7XG5pbXBvcnQge2F0YW4yLCBjb3MsIHF1YXJ0ZXJQaSwgcmFkaWFucywgc2luLCB0YXV9IGZyb20gXCIuL21hdGhcIjtcbmltcG9ydCBub29wIGZyb20gXCIuL25vb3BcIjtcbmltcG9ydCBzdHJlYW0gZnJvbSBcIi4vc3RyZWFtXCI7XG5cbmV4cG9ydCB2YXIgYXJlYVJpbmdTdW0gPSBhZGRlcigpO1xuXG52YXIgYXJlYVN1bSA9IGFkZGVyKCksXG4gICAgbGFtYmRhMDAsXG4gICAgcGhpMDAsXG4gICAgbGFtYmRhMCxcbiAgICBjb3NQaGkwLFxuICAgIHNpblBoaTA7XG5cbmV4cG9ydCB2YXIgYXJlYVN0cmVhbSA9IHtcbiAgcG9pbnQ6IG5vb3AsXG4gIGxpbmVTdGFydDogbm9vcCxcbiAgbGluZUVuZDogbm9vcCxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICBhcmVhUmluZ1N1bS5yZXNldCgpO1xuICAgIGFyZWFTdHJlYW0ubGluZVN0YXJ0ID0gYXJlYVJpbmdTdGFydDtcbiAgICBhcmVhU3RyZWFtLmxpbmVFbmQgPSBhcmVhUmluZ0VuZDtcbiAgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZWFSaW5nID0gK2FyZWFSaW5nU3VtO1xuICAgIGFyZWFTdW0uYWRkKGFyZWFSaW5nIDwgMCA/IHRhdSArIGFyZWFSaW5nIDogYXJlYVJpbmcpO1xuICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5saW5lRW5kID0gdGhpcy5wb2ludCA9IG5vb3A7XG4gIH0sXG4gIHNwaGVyZTogZnVuY3Rpb24oKSB7XG4gICAgYXJlYVN1bS5hZGQodGF1KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gYXJlYVJpbmdTdGFydCgpIHtcbiAgYXJlYVN0cmVhbS5wb2ludCA9IGFyZWFQb2ludEZpcnN0O1xufVxuXG5mdW5jdGlvbiBhcmVhUmluZ0VuZCgpIHtcbiAgYXJlYVBvaW50KGxhbWJkYTAwLCBwaGkwMCk7XG59XG5cbmZ1bmN0aW9uIGFyZWFQb2ludEZpcnN0KGxhbWJkYSwgcGhpKSB7XG4gIGFyZWFTdHJlYW0ucG9pbnQgPSBhcmVhUG9pbnQ7XG4gIGxhbWJkYTAwID0gbGFtYmRhLCBwaGkwMCA9IHBoaTtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICBsYW1iZGEwID0gbGFtYmRhLCBjb3NQaGkwID0gY29zKHBoaSA9IHBoaSAvIDIgKyBxdWFydGVyUGkpLCBzaW5QaGkwID0gc2luKHBoaSk7XG59XG5cbmZ1bmN0aW9uIGFyZWFQb2ludChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIHBoaSA9IHBoaSAvIDIgKyBxdWFydGVyUGk7IC8vIGhhbGYgdGhlIGFuZ3VsYXIgZGlzdGFuY2UgZnJvbSBzb3V0aCBwb2xlXG5cbiAgLy8gU3BoZXJpY2FsIGV4Y2VzcyBFIGZvciBhIHNwaGVyaWNhbCB0cmlhbmdsZSB3aXRoIHZlcnRpY2VzOiBzb3V0aCBwb2xlLFxuICAvLyBwcmV2aW91cyBwb2ludCwgY3VycmVudCBwb2ludC4gIFVzZXMgYSBmb3JtdWxhIGRlcml2ZWQgZnJvbSBDYWdub2xp4oCZc1xuICAvLyB0aGVvcmVtLiAgU2VlIFRvZGh1bnRlciwgU3BoZXJpY2FsIFRyaWcuICgxODcxKSwgU2VjLiAxMDMsIEVxLiAoMikuXG4gIHZhciBkTGFtYmRhID0gbGFtYmRhIC0gbGFtYmRhMCxcbiAgICAgIHNkTGFtYmRhID0gZExhbWJkYSA+PSAwID8gMSA6IC0xLFxuICAgICAgYWRMYW1iZGEgPSBzZExhbWJkYSAqIGRMYW1iZGEsXG4gICAgICBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgIHNpblBoaSA9IHNpbihwaGkpLFxuICAgICAgayA9IHNpblBoaTAgKiBzaW5QaGksXG4gICAgICB1ID0gY29zUGhpMCAqIGNvc1BoaSArIGsgKiBjb3MoYWRMYW1iZGEpLFxuICAgICAgdiA9IGsgKiBzZExhbWJkYSAqIHNpbihhZExhbWJkYSk7XG4gIGFyZWFSaW5nU3VtLmFkZChhdGFuMih2LCB1KSk7XG5cbiAgLy8gQWR2YW5jZSB0aGUgcHJldmlvdXMgcG9pbnRzLlxuICBsYW1iZGEwID0gbGFtYmRhLCBjb3NQaGkwID0gY29zUGhpLCBzaW5QaGkwID0gc2luUGhpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvYmplY3QpIHtcbiAgYXJlYVN1bS5yZXNldCgpO1xuICBzdHJlYW0ob2JqZWN0LCBhcmVhU3RyZWFtKTtcbiAgcmV0dXJuIGFyZWFTdW0gKiAyO1xufVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuL2FkZGVyXCI7XG5pbXBvcnQge2FyZWFTdHJlYW0sIGFyZWFSaW5nU3VtfSBmcm9tIFwiLi9hcmVhXCI7XG5pbXBvcnQge2NhcnRlc2lhbiwgY2FydGVzaWFuQ3Jvc3MsIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UsIHNwaGVyaWNhbH0gZnJvbSBcIi4vY2FydGVzaWFuXCI7XG5pbXBvcnQge2FicywgZGVncmVlcywgZXBzaWxvbiwgcmFkaWFuc30gZnJvbSBcIi4vbWF0aFwiO1xuaW1wb3J0IHN0cmVhbSBmcm9tIFwiLi9zdHJlYW1cIjtcblxudmFyIGxhbWJkYTAsIHBoaTAsIGxhbWJkYTEsIHBoaTEsIC8vIGJvdW5kc1xuICAgIGxhbWJkYTIsIC8vIHByZXZpb3VzIGxhbWJkYS1jb29yZGluYXRlXG4gICAgbGFtYmRhMDAsIHBoaTAwLCAvLyBmaXJzdCBwb2ludFxuICAgIHAwLCAvLyBwcmV2aW91cyAzRCBwb2ludFxuICAgIGRlbHRhU3VtID0gYWRkZXIoKSxcbiAgICByYW5nZXMsXG4gICAgcmFuZ2U7XG5cbnZhciBib3VuZHNTdHJlYW0gPSB7XG4gIHBvaW50OiBib3VuZHNQb2ludCxcbiAgbGluZVN0YXJ0OiBib3VuZHNMaW5lU3RhcnQsXG4gIGxpbmVFbmQ6IGJvdW5kc0xpbmVFbmQsXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgYm91bmRzU3RyZWFtLnBvaW50ID0gYm91bmRzUmluZ1BvaW50O1xuICAgIGJvdW5kc1N0cmVhbS5saW5lU3RhcnQgPSBib3VuZHNSaW5nU3RhcnQ7XG4gICAgYm91bmRzU3RyZWFtLmxpbmVFbmQgPSBib3VuZHNSaW5nRW5kO1xuICAgIGRlbHRhU3VtLnJlc2V0KCk7XG4gICAgYXJlYVN0cmVhbS5wb2x5Z29uU3RhcnQoKTtcbiAgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7XG4gICAgYXJlYVN0cmVhbS5wb2x5Z29uRW5kKCk7XG4gICAgYm91bmRzU3RyZWFtLnBvaW50ID0gYm91bmRzUG9pbnQ7XG4gICAgYm91bmRzU3RyZWFtLmxpbmVTdGFydCA9IGJvdW5kc0xpbmVTdGFydDtcbiAgICBib3VuZHNTdHJlYW0ubGluZUVuZCA9IGJvdW5kc0xpbmVFbmQ7XG4gICAgaWYgKGFyZWFSaW5nU3VtIDwgMCkgbGFtYmRhMCA9IC0obGFtYmRhMSA9IDE4MCksIHBoaTAgPSAtKHBoaTEgPSA5MCk7XG4gICAgZWxzZSBpZiAoZGVsdGFTdW0gPiBlcHNpbG9uKSBwaGkxID0gOTA7XG4gICAgZWxzZSBpZiAoZGVsdGFTdW0gPCAtZXBzaWxvbikgcGhpMCA9IC05MDtcbiAgICByYW5nZVswXSA9IGxhbWJkYTAsIHJhbmdlWzFdID0gbGFtYmRhMTtcbiAgfVxufTtcblxuZnVuY3Rpb24gYm91bmRzUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgcmFuZ2VzLnB1c2gocmFuZ2UgPSBbbGFtYmRhMCA9IGxhbWJkYSwgbGFtYmRhMSA9IGxhbWJkYV0pO1xuICBpZiAocGhpIDwgcGhpMCkgcGhpMCA9IHBoaTtcbiAgaWYgKHBoaSA+IHBoaTEpIHBoaTEgPSBwaGk7XG59XG5cbmZ1bmN0aW9uIGxpbmVQb2ludChsYW1iZGEsIHBoaSkge1xuICB2YXIgcCA9IGNhcnRlc2lhbihbbGFtYmRhICogcmFkaWFucywgcGhpICogcmFkaWFuc10pO1xuICBpZiAocDApIHtcbiAgICB2YXIgbm9ybWFsID0gY2FydGVzaWFuQ3Jvc3MocDAsIHApLFxuICAgICAgICBlcXVhdG9yaWFsID0gW25vcm1hbFsxXSwgLW5vcm1hbFswXSwgMF0sXG4gICAgICAgIGluZmxlY3Rpb24gPSBjYXJ0ZXNpYW5Dcm9zcyhlcXVhdG9yaWFsLCBub3JtYWwpO1xuICAgIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UoaW5mbGVjdGlvbik7XG4gICAgaW5mbGVjdGlvbiA9IHNwaGVyaWNhbChpbmZsZWN0aW9uKTtcbiAgICB2YXIgZGVsdGEgPSBsYW1iZGEgLSBsYW1iZGEyLFxuICAgICAgICBzaWduID0gZGVsdGEgPiAwID8gMSA6IC0xLFxuICAgICAgICBsYW1iZGFpID0gaW5mbGVjdGlvblswXSAqIGRlZ3JlZXMgKiBzaWduLFxuICAgICAgICBwaGlpLFxuICAgICAgICBhbnRpbWVyaWRpYW4gPSBhYnMoZGVsdGEpID4gMTgwO1xuICAgIGlmIChhbnRpbWVyaWRpYW4gXiAoc2lnbiAqIGxhbWJkYTIgPCBsYW1iZGFpICYmIGxhbWJkYWkgPCBzaWduICogbGFtYmRhKSkge1xuICAgICAgcGhpaSA9IGluZmxlY3Rpb25bMV0gKiBkZWdyZWVzO1xuICAgICAgaWYgKHBoaWkgPiBwaGkxKSBwaGkxID0gcGhpaTtcbiAgICB9IGVsc2UgaWYgKGxhbWJkYWkgPSAobGFtYmRhaSArIDM2MCkgJSAzNjAgLSAxODAsIGFudGltZXJpZGlhbiBeIChzaWduICogbGFtYmRhMiA8IGxhbWJkYWkgJiYgbGFtYmRhaSA8IHNpZ24gKiBsYW1iZGEpKSB7XG4gICAgICBwaGlpID0gLWluZmxlY3Rpb25bMV0gKiBkZWdyZWVzO1xuICAgICAgaWYgKHBoaWkgPCBwaGkwKSBwaGkwID0gcGhpaTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBoaSA8IHBoaTApIHBoaTAgPSBwaGk7XG4gICAgICBpZiAocGhpID4gcGhpMSkgcGhpMSA9IHBoaTtcbiAgICB9XG4gICAgaWYgKGFudGltZXJpZGlhbikge1xuICAgICAgaWYgKGxhbWJkYSA8IGxhbWJkYTIpIHtcbiAgICAgICAgaWYgKGFuZ2xlKGxhbWJkYTAsIGxhbWJkYSkgPiBhbmdsZShsYW1iZGEwLCBsYW1iZGExKSkgbGFtYmRhMSA9IGxhbWJkYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhbmdsZShsYW1iZGEsIGxhbWJkYTEpID4gYW5nbGUobGFtYmRhMCwgbGFtYmRhMSkpIGxhbWJkYTAgPSBsYW1iZGE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChsYW1iZGExID49IGxhbWJkYTApIHtcbiAgICAgICAgaWYgKGxhbWJkYSA8IGxhbWJkYTApIGxhbWJkYTAgPSBsYW1iZGE7XG4gICAgICAgIGlmIChsYW1iZGEgPiBsYW1iZGExKSBsYW1iZGExID0gbGFtYmRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGxhbWJkYSA+IGxhbWJkYTIpIHtcbiAgICAgICAgICBpZiAoYW5nbGUobGFtYmRhMCwgbGFtYmRhKSA+IGFuZ2xlKGxhbWJkYTAsIGxhbWJkYTEpKSBsYW1iZGExID0gbGFtYmRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChhbmdsZShsYW1iZGEsIGxhbWJkYTEpID4gYW5nbGUobGFtYmRhMCwgbGFtYmRhMSkpIGxhbWJkYTAgPSBsYW1iZGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmFuZ2VzLnB1c2gocmFuZ2UgPSBbbGFtYmRhMCA9IGxhbWJkYSwgbGFtYmRhMSA9IGxhbWJkYV0pO1xuICB9XG4gIGlmIChwaGkgPCBwaGkwKSBwaGkwID0gcGhpO1xuICBpZiAocGhpID4gcGhpMSkgcGhpMSA9IHBoaTtcbiAgcDAgPSBwLCBsYW1iZGEyID0gbGFtYmRhO1xufVxuXG5mdW5jdGlvbiBib3VuZHNMaW5lU3RhcnQoKSB7XG4gIGJvdW5kc1N0cmVhbS5wb2ludCA9IGxpbmVQb2ludDtcbn1cblxuZnVuY3Rpb24gYm91bmRzTGluZUVuZCgpIHtcbiAgcmFuZ2VbMF0gPSBsYW1iZGEwLCByYW5nZVsxXSA9IGxhbWJkYTE7XG4gIGJvdW5kc1N0cmVhbS5wb2ludCA9IGJvdW5kc1BvaW50O1xuICBwMCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGJvdW5kc1JpbmdQb2ludChsYW1iZGEsIHBoaSkge1xuICBpZiAocDApIHtcbiAgICB2YXIgZGVsdGEgPSBsYW1iZGEgLSBsYW1iZGEyO1xuICAgIGRlbHRhU3VtLmFkZChhYnMoZGVsdGEpID4gMTgwID8gZGVsdGEgKyAoZGVsdGEgPiAwID8gMzYwIDogLTM2MCkgOiBkZWx0YSk7XG4gIH0gZWxzZSB7XG4gICAgbGFtYmRhMDAgPSBsYW1iZGEsIHBoaTAwID0gcGhpO1xuICB9XG4gIGFyZWFTdHJlYW0ucG9pbnQobGFtYmRhLCBwaGkpO1xuICBsaW5lUG9pbnQobGFtYmRhLCBwaGkpO1xufVxuXG5mdW5jdGlvbiBib3VuZHNSaW5nU3RhcnQoKSB7XG4gIGFyZWFTdHJlYW0ubGluZVN0YXJ0KCk7XG59XG5cbmZ1bmN0aW9uIGJvdW5kc1JpbmdFbmQoKSB7XG4gIGJvdW5kc1JpbmdQb2ludChsYW1iZGEwMCwgcGhpMDApO1xuICBhcmVhU3RyZWFtLmxpbmVFbmQoKTtcbiAgaWYgKGFicyhkZWx0YVN1bSkgPiBlcHNpbG9uKSBsYW1iZGEwID0gLShsYW1iZGExID0gMTgwKTtcbiAgcmFuZ2VbMF0gPSBsYW1iZGEwLCByYW5nZVsxXSA9IGxhbWJkYTE7XG4gIHAwID0gbnVsbDtcbn1cblxuLy8gRmluZHMgdGhlIGxlZnQtcmlnaHQgZGlzdGFuY2UgYmV0d2VlbiB0d28gbG9uZ2l0dWRlcy5cbi8vIFRoaXMgaXMgYWxtb3N0IHRoZSBzYW1lIGFzIChsYW1iZGExIC0gbGFtYmRhMCArIDM2MMKwKSAlIDM2MMKwLCBleGNlcHQgdGhhdCB3ZSB3YW50XG4vLyB0aGUgZGlzdGFuY2UgYmV0d2VlbiDCsTE4MMKwIHRvIGJlIDM2MMKwLlxuZnVuY3Rpb24gYW5nbGUobGFtYmRhMCwgbGFtYmRhMSkge1xuICByZXR1cm4gKGxhbWJkYTEgLT0gbGFtYmRhMCkgPCAwID8gbGFtYmRhMSArIDM2MCA6IGxhbWJkYTE7XG59XG5cbmZ1bmN0aW9uIHJhbmdlQ29tcGFyZShhLCBiKSB7XG4gIHJldHVybiBhWzBdIC0gYlswXTtcbn1cblxuZnVuY3Rpb24gcmFuZ2VDb250YWlucyhyYW5nZSwgeCkge1xuICByZXR1cm4gcmFuZ2VbMF0gPD0gcmFuZ2VbMV0gPyByYW5nZVswXSA8PSB4ICYmIHggPD0gcmFuZ2VbMV0gOiB4IDwgcmFuZ2VbMF0gfHwgcmFuZ2VbMV0gPCB4O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihmZWF0dXJlKSB7XG4gIHZhciBpLCBuLCBhLCBiLCBtZXJnZWQsIGRlbHRhTWF4LCBkZWx0YTtcblxuICBwaGkxID0gbGFtYmRhMSA9IC0obGFtYmRhMCA9IHBoaTAgPSBJbmZpbml0eSk7XG4gIHJhbmdlcyA9IFtdO1xuICBzdHJlYW0oZmVhdHVyZSwgYm91bmRzU3RyZWFtKTtcblxuICAvLyBGaXJzdCwgc29ydCByYW5nZXMgYnkgdGhlaXIgbWluaW11bSBsb25naXR1ZGVzLlxuICBpZiAobiA9IHJhbmdlcy5sZW5ndGgpIHtcbiAgICByYW5nZXMuc29ydChyYW5nZUNvbXBhcmUpO1xuXG4gICAgLy8gVGhlbiwgbWVyZ2UgYW55IHJhbmdlcyB0aGF0IG92ZXJsYXAuXG4gICAgZm9yIChpID0gMSwgYSA9IHJhbmdlc1swXSwgbWVyZ2VkID0gW2FdOyBpIDwgbjsgKytpKSB7XG4gICAgICBiID0gcmFuZ2VzW2ldO1xuICAgICAgaWYgKHJhbmdlQ29udGFpbnMoYSwgYlswXSkgfHwgcmFuZ2VDb250YWlucyhhLCBiWzFdKSkge1xuICAgICAgICBpZiAoYW5nbGUoYVswXSwgYlsxXSkgPiBhbmdsZShhWzBdLCBhWzFdKSkgYVsxXSA9IGJbMV07XG4gICAgICAgIGlmIChhbmdsZShiWzBdLCBhWzFdKSA+IGFuZ2xlKGFbMF0sIGFbMV0pKSBhWzBdID0gYlswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lcmdlZC5wdXNoKGEgPSBiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGaW5hbGx5LCBmaW5kIHRoZSBsYXJnZXN0IGdhcCBiZXR3ZWVuIHRoZSBtZXJnZWQgcmFuZ2VzLlxuICAgIC8vIFRoZSBmaW5hbCBib3VuZGluZyBib3ggd2lsbCBiZSB0aGUgaW52ZXJzZSBvZiB0aGlzIGdhcC5cbiAgICBmb3IgKGRlbHRhTWF4ID0gLUluZmluaXR5LCBuID0gbWVyZ2VkLmxlbmd0aCAtIDEsIGkgPSAwLCBhID0gbWVyZ2VkW25dOyBpIDw9IG47IGEgPSBiLCArK2kpIHtcbiAgICAgIGIgPSBtZXJnZWRbaV07XG4gICAgICBpZiAoKGRlbHRhID0gYW5nbGUoYVsxXSwgYlswXSkpID4gZGVsdGFNYXgpIGRlbHRhTWF4ID0gZGVsdGEsIGxhbWJkYTAgPSBiWzBdLCBsYW1iZGExID0gYVsxXTtcbiAgICB9XG4gIH1cblxuICByYW5nZXMgPSByYW5nZSA9IG51bGw7XG5cbiAgcmV0dXJuIGxhbWJkYTAgPT09IEluZmluaXR5IHx8IHBoaTAgPT09IEluZmluaXR5XG4gICAgICA/IFtbTmFOLCBOYU5dLCBbTmFOLCBOYU5dXVxuICAgICAgOiBbW2xhbWJkYTAsIHBoaTBdLCBbbGFtYmRhMSwgcGhpMV1dO1xufVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuL2FkZGVyXCI7XG5pbXBvcnQge2NhcnRlc2lhbiwgY2FydGVzaWFuQ3Jvc3MsIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2V9IGZyb20gXCIuL2NhcnRlc2lhblwiO1xuaW1wb3J0IHthc2luLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBwaSwgcXVhcnRlclBpLCBzaW4sIHRhdX0gZnJvbSBcIi4vbWF0aFwiO1xuXG52YXIgc3VtID0gYWRkZXIoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocG9seWdvbiwgcG9pbnQpIHtcbiAgdmFyIGxhbWJkYSA9IHBvaW50WzBdLFxuICAgICAgcGhpID0gcG9pbnRbMV0sXG4gICAgICBub3JtYWwgPSBbc2luKGxhbWJkYSksIC1jb3MobGFtYmRhKSwgMF0sXG4gICAgICBhbmdsZSA9IDAsXG4gICAgICB3aW5kaW5nID0gMDtcblxuICBzdW0ucmVzZXQoKTtcblxuICBmb3IgKHZhciBpID0gMCwgbiA9IHBvbHlnb24ubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEobSA9IChyaW5nID0gcG9seWdvbltpXSkubGVuZ3RoKSkgY29udGludWU7XG4gICAgdmFyIHJpbmcsXG4gICAgICAgIG0sXG4gICAgICAgIHBvaW50MCA9IHJpbmdbbSAtIDFdLFxuICAgICAgICBsYW1iZGEwID0gcG9pbnQwWzBdLFxuICAgICAgICBwaGkwID0gcG9pbnQwWzFdIC8gMiArIHF1YXJ0ZXJQaSxcbiAgICAgICAgc2luUGhpMCA9IHNpbihwaGkwKSxcbiAgICAgICAgY29zUGhpMCA9IGNvcyhwaGkwKTtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbTsgKytqLCBsYW1iZGEwID0gbGFtYmRhMSwgc2luUGhpMCA9IHNpblBoaTEsIGNvc1BoaTAgPSBjb3NQaGkxLCBwb2ludDAgPSBwb2ludDEpIHtcbiAgICAgIHZhciBwb2ludDEgPSByaW5nW2pdLFxuICAgICAgICAgIGxhbWJkYTEgPSBwb2ludDFbMF0sXG4gICAgICAgICAgcGhpMSA9IHBvaW50MVsxXSAvIDIgKyBxdWFydGVyUGksXG4gICAgICAgICAgc2luUGhpMSA9IHNpbihwaGkxKSxcbiAgICAgICAgICBjb3NQaGkxID0gY29zKHBoaTEpLFxuICAgICAgICAgIGRlbHRhID0gbGFtYmRhMSAtIGxhbWJkYTAsXG4gICAgICAgICAgc2lnbiA9IGRlbHRhID49IDAgPyAxIDogLTEsXG4gICAgICAgICAgYWJzRGVsdGEgPSBzaWduICogZGVsdGEsXG4gICAgICAgICAgYW50aW1lcmlkaWFuID0gYWJzRGVsdGEgPiBwaSxcbiAgICAgICAgICBrID0gc2luUGhpMCAqIHNpblBoaTE7XG5cbiAgICAgIHN1bS5hZGQoYXRhbjIoayAqIHNpZ24gKiBzaW4oYWJzRGVsdGEpLCBjb3NQaGkwICogY29zUGhpMSArIGsgKiBjb3MoYWJzRGVsdGEpKSk7XG4gICAgICBhbmdsZSArPSBhbnRpbWVyaWRpYW4gPyBkZWx0YSArIHNpZ24gKiB0YXUgOiBkZWx0YTtcblxuICAgICAgLy8gQXJlIHRoZSBsb25naXR1ZGVzIGVpdGhlciBzaWRlIG9mIHRoZSBwb2ludOKAmXMgbWVyaWRpYW4gKGxhbWJkYSksXG4gICAgICAvLyBhbmQgYXJlIHRoZSBsYXRpdHVkZXMgc21hbGxlciB0aGFuIHRoZSBwYXJhbGxlbCAocGhpKT9cbiAgICAgIGlmIChhbnRpbWVyaWRpYW4gXiBsYW1iZGEwID49IGxhbWJkYSBeIGxhbWJkYTEgPj0gbGFtYmRhKSB7XG4gICAgICAgIHZhciBhcmMgPSBjYXJ0ZXNpYW5Dcm9zcyhjYXJ0ZXNpYW4ocG9pbnQwKSwgY2FydGVzaWFuKHBvaW50MSkpO1xuICAgICAgICBjYXJ0ZXNpYW5Ob3JtYWxpemVJblBsYWNlKGFyYyk7XG4gICAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSBjYXJ0ZXNpYW5Dcm9zcyhub3JtYWwsIGFyYyk7XG4gICAgICAgIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UoaW50ZXJzZWN0aW9uKTtcbiAgICAgICAgdmFyIHBoaUFyYyA9IChhbnRpbWVyaWRpYW4gXiBkZWx0YSA+PSAwID8gLTEgOiAxKSAqIGFzaW4oaW50ZXJzZWN0aW9uWzJdKTtcbiAgICAgICAgaWYgKHBoaSA+IHBoaUFyYyB8fCBwaGkgPT09IHBoaUFyYyAmJiAoYXJjWzBdIHx8IGFyY1sxXSkpIHtcbiAgICAgICAgICB3aW5kaW5nICs9IGFudGltZXJpZGlhbiBeIGRlbHRhID49IDAgPyAxIDogLTE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaXJzdCwgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIFNvdXRoIHBvbGUgaXMgaW5zaWRlIG9yIG91dHNpZGU6XG4gIC8vXG4gIC8vIEl0IGlzIGluc2lkZSBpZjpcbiAgLy8gKiB0aGUgcG9seWdvbiB3aW5kcyBhcm91bmQgaXQgaW4gYSBjbG9ja3dpc2UgZGlyZWN0aW9uLlxuICAvLyAqIHRoZSBwb2x5Z29uIGRvZXMgbm90IChjdW11bGF0aXZlbHkpIHdpbmQgYXJvdW5kIGl0LCBidXQgaGFzIGEgbmVnYXRpdmVcbiAgLy8gICAoY291bnRlci1jbG9ja3dpc2UpIGFyZWEuXG4gIC8vXG4gIC8vIFNlY29uZCwgY291bnQgdGhlIChzaWduZWQpIG51bWJlciBvZiB0aW1lcyBhIHNlZ21lbnQgY3Jvc3NlcyBhIGxhbWJkYVxuICAvLyBmcm9tIHRoZSBwb2ludCB0byB0aGUgU291dGggcG9sZS4gIElmIGl0IGlzIHplcm8sIHRoZW4gdGhlIHBvaW50IGlzIHRoZVxuICAvLyBzYW1lIHNpZGUgYXMgdGhlIFNvdXRoIHBvbGUuXG5cbiAgcmV0dXJuIChhbmdsZSA8IC1lcHNpbG9uIHx8IGFuZ2xlIDwgZXBzaWxvbiAmJiBzdW0gPCAtZXBzaWxvbikgXiAod2luZGluZyAmIDEpO1xufVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuL2FkZGVyXCI7XG5pbXBvcnQge2FicywgYXRhbjIsIGNvcywgcmFkaWFucywgc2luLCBzcXJ0fSBmcm9tIFwiLi9tYXRoXCI7XG5pbXBvcnQgbm9vcCBmcm9tIFwiLi9ub29wXCI7XG5pbXBvcnQgc3RyZWFtIGZyb20gXCIuL3N0cmVhbVwiO1xuXG52YXIgbGVuZ3RoU3VtID0gYWRkZXIoKSxcbiAgICBsYW1iZGEwLFxuICAgIHNpblBoaTAsXG4gICAgY29zUGhpMDtcblxudmFyIGxlbmd0aFN0cmVhbSA9IHtcbiAgc3BoZXJlOiBub29wLFxuICBwb2ludDogbm9vcCxcbiAgbGluZVN0YXJ0OiBsZW5ndGhMaW5lU3RhcnQsXG4gIGxpbmVFbmQ6IG5vb3AsXG4gIHBvbHlnb25TdGFydDogbm9vcCxcbiAgcG9seWdvbkVuZDogbm9vcFxufTtcblxuZnVuY3Rpb24gbGVuZ3RoTGluZVN0YXJ0KCkge1xuICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBsZW5ndGhQb2ludEZpcnN0O1xuICBsZW5ndGhTdHJlYW0ubGluZUVuZCA9IGxlbmd0aExpbmVFbmQ7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aExpbmVFbmQoKSB7XG4gIGxlbmd0aFN0cmVhbS5wb2ludCA9IGxlbmd0aFN0cmVhbS5saW5lRW5kID0gbm9vcDtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoUG9pbnRGaXJzdChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIGxhbWJkYTAgPSBsYW1iZGEsIHNpblBoaTAgPSBzaW4ocGhpKSwgY29zUGhpMCA9IGNvcyhwaGkpO1xuICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBsZW5ndGhQb2ludDtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICB2YXIgc2luUGhpID0gc2luKHBoaSksXG4gICAgICBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgIGRlbHRhID0gYWJzKGxhbWJkYSAtIGxhbWJkYTApLFxuICAgICAgY29zRGVsdGEgPSBjb3MoZGVsdGEpLFxuICAgICAgc2luRGVsdGEgPSBzaW4oZGVsdGEpLFxuICAgICAgeCA9IGNvc1BoaSAqIHNpbkRlbHRhLFxuICAgICAgeSA9IGNvc1BoaTAgKiBzaW5QaGkgLSBzaW5QaGkwICogY29zUGhpICogY29zRGVsdGEsXG4gICAgICB6ID0gc2luUGhpMCAqIHNpblBoaSArIGNvc1BoaTAgKiBjb3NQaGkgKiBjb3NEZWx0YTtcbiAgbGVuZ3RoU3VtLmFkZChhdGFuMihzcXJ0KHggKiB4ICsgeSAqIHkpLCB6KSk7XG4gIGxhbWJkYTAgPSBsYW1iZGEsIHNpblBoaTAgPSBzaW5QaGksIGNvc1BoaTAgPSBjb3NQaGk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9iamVjdCkge1xuICBsZW5ndGhTdW0ucmVzZXQoKTtcbiAgc3RyZWFtKG9iamVjdCwgbGVuZ3RoU3RyZWFtKTtcbiAgcmV0dXJuICtsZW5ndGhTdW07XG59XG4iLCJpbXBvcnQgYWRkZXIgZnJvbSBcIi4uL2FkZGVyXCI7XG5pbXBvcnQge2Fic30gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCBub29wIGZyb20gXCIuLi9ub29wXCI7XG5cbnZhciBhcmVhU3VtID0gYWRkZXIoKSxcbiAgICBhcmVhUmluZ1N1bSA9IGFkZGVyKCksXG4gICAgeDAwLFxuICAgIHkwMCxcbiAgICB4MCxcbiAgICB5MDtcblxudmFyIGFyZWFTdHJlYW0gPSB7XG4gIHBvaW50OiBub29wLFxuICBsaW5lU3RhcnQ6IG5vb3AsXG4gIGxpbmVFbmQ6IG5vb3AsXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgYXJlYVN0cmVhbS5saW5lU3RhcnQgPSBhcmVhUmluZ1N0YXJ0O1xuICAgIGFyZWFTdHJlYW0ubGluZUVuZCA9IGFyZWFSaW5nRW5kO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICBhcmVhU3RyZWFtLmxpbmVTdGFydCA9IGFyZWFTdHJlYW0ubGluZUVuZCA9IGFyZWFTdHJlYW0ucG9pbnQgPSBub29wO1xuICAgIGFyZWFTdW0uYWRkKGFicyhhcmVhUmluZ1N1bSkpO1xuICAgIGFyZWFSaW5nU3VtLnJlc2V0KCk7XG4gIH0sXG4gIHJlc3VsdDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZWEgPSBhcmVhU3VtIC8gMjtcbiAgICBhcmVhU3VtLnJlc2V0KCk7XG4gICAgcmV0dXJuIGFyZWE7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFyZWFSaW5nU3RhcnQoKSB7XG4gIGFyZWFTdHJlYW0ucG9pbnQgPSBhcmVhUG9pbnRGaXJzdDtcbn1cblxuZnVuY3Rpb24gYXJlYVBvaW50Rmlyc3QoeCwgeSkge1xuICBhcmVhU3RyZWFtLnBvaW50ID0gYXJlYVBvaW50O1xuICB4MDAgPSB4MCA9IHgsIHkwMCA9IHkwID0geTtcbn1cblxuZnVuY3Rpb24gYXJlYVBvaW50KHgsIHkpIHtcbiAgYXJlYVJpbmdTdW0uYWRkKHkwICogeCAtIHgwICogeSk7XG4gIHgwID0geCwgeTAgPSB5O1xufVxuXG5mdW5jdGlvbiBhcmVhUmluZ0VuZCgpIHtcbiAgYXJlYVBvaW50KHgwMCwgeTAwKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJlYVN0cmVhbTtcbiIsImltcG9ydCBhZGRlciBmcm9tIFwiLi4vYWRkZXJcIjtcbmltcG9ydCB7c3FydH0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCBub29wIGZyb20gXCIuLi9ub29wXCI7XG5cbnZhciBsZW5ndGhTdW0gPSBhZGRlcigpLFxuICAgIGxlbmd0aFJpbmcsXG4gICAgeDAwLFxuICAgIHkwMCxcbiAgICB4MCxcbiAgICB5MDtcblxudmFyIGxlbmd0aFN0cmVhbSA9IHtcbiAgcG9pbnQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgbGVuZ3RoU3RyZWFtLnBvaW50ID0gbGVuZ3RoUG9pbnRGaXJzdDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKGxlbmd0aFJpbmcpIGxlbmd0aFBvaW50KHgwMCwgeTAwKTtcbiAgICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBub29wO1xuICB9LFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGxlbmd0aFJpbmcgPSB0cnVlO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICBsZW5ndGhSaW5nID0gbnVsbDtcbiAgfSxcbiAgcmVzdWx0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuZ3RoID0gK2xlbmd0aFN1bTtcbiAgICBsZW5ndGhTdW0ucmVzZXQoKTtcbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG59O1xuXG5mdW5jdGlvbiBsZW5ndGhQb2ludEZpcnN0KHgsIHkpIHtcbiAgbGVuZ3RoU3RyZWFtLnBvaW50ID0gbGVuZ3RoUG9pbnQ7XG4gIHgwMCA9IHgwID0geCwgeTAwID0geTAgPSB5O1xufVxuXG5mdW5jdGlvbiBsZW5ndGhQb2ludCh4LCB5KSB7XG4gIHgwIC09IHgsIHkwIC09IHk7XG4gIGxlbmd0aFN1bS5hZGQoc3FydCh4MCAqIHgwICsgeTAgKiB5MCkpO1xuICB4MCA9IHgsIHkwID0geTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGVuZ3RoU3RyZWFtO1xuIiwiaW1wb3J0IHtjYXJ0ZXNpYW59IGZyb20gXCIuLi9jYXJ0ZXNpYW5cIjtcbmltcG9ydCB7YWJzLCBhc2luLCBhdGFuMiwgY29zLCBlcHNpbG9uLCByYWRpYW5zLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aFwiO1xuaW1wb3J0IHt0cmFuc2Zvcm1lcn0gZnJvbSBcIi4uL3RyYW5zZm9ybVwiO1xuXG52YXIgbWF4RGVwdGggPSAxNiwgLy8gbWF4aW11bSBkZXB0aCBvZiBzdWJkaXZpc2lvblxuICAgIGNvc01pbkRpc3RhbmNlID0gY29zKDMwICogcmFkaWFucyk7IC8vIGNvcyhtaW5pbXVtIGFuZ3VsYXIgZGlzdGFuY2UpXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHByb2plY3QsIGRlbHRhMikge1xuICByZXR1cm4gK2RlbHRhMiA/IHJlc2FtcGxlKHByb2plY3QsIGRlbHRhMikgOiByZXNhbXBsZU5vbmUocHJvamVjdCk7XG59XG5cbmZ1bmN0aW9uIHJlc2FtcGxlTm9uZShwcm9qZWN0KSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcih7XG4gICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIHggPSBwcm9qZWN0KHgsIHkpO1xuICAgICAgdGhpcy5zdHJlYW0ucG9pbnQoeFswXSwgeFsxXSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVzYW1wbGUocHJvamVjdCwgZGVsdGEyKSB7XG5cbiAgZnVuY3Rpb24gcmVzYW1wbGVMaW5lVG8oeDAsIHkwLCBsYW1iZGEwLCBhMCwgYjAsIGMwLCB4MSwgeTEsIGxhbWJkYTEsIGExLCBiMSwgYzEsIGRlcHRoLCBzdHJlYW0pIHtcbiAgICB2YXIgZHggPSB4MSAtIHgwLFxuICAgICAgICBkeSA9IHkxIC0geTAsXG4gICAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHk7XG4gICAgaWYgKGQyID4gNCAqIGRlbHRhMiAmJiBkZXB0aC0tKSB7XG4gICAgICB2YXIgYSA9IGEwICsgYTEsXG4gICAgICAgICAgYiA9IGIwICsgYjEsXG4gICAgICAgICAgYyA9IGMwICsgYzEsXG4gICAgICAgICAgbSA9IHNxcnQoYSAqIGEgKyBiICogYiArIGMgKiBjKSxcbiAgICAgICAgICBwaGkyID0gYXNpbihjIC89IG0pLFxuICAgICAgICAgIGxhbWJkYTIgPSBhYnMoYWJzKGMpIC0gMSkgPCBlcHNpbG9uIHx8IGFicyhsYW1iZGEwIC0gbGFtYmRhMSkgPCBlcHNpbG9uID8gKGxhbWJkYTAgKyBsYW1iZGExKSAvIDIgOiBhdGFuMihiLCBhKSxcbiAgICAgICAgICBwID0gcHJvamVjdChsYW1iZGEyLCBwaGkyKSxcbiAgICAgICAgICB4MiA9IHBbMF0sXG4gICAgICAgICAgeTIgPSBwWzFdLFxuICAgICAgICAgIGR4MiA9IHgyIC0geDAsXG4gICAgICAgICAgZHkyID0geTIgLSB5MCxcbiAgICAgICAgICBkeiA9IGR5ICogZHgyIC0gZHggKiBkeTI7XG4gICAgICBpZiAoZHogKiBkeiAvIGQyID4gZGVsdGEyIC8vIHBlcnBlbmRpY3VsYXIgcHJvamVjdGVkIGRpc3RhbmNlXG4gICAgICAgICAgfHwgYWJzKChkeCAqIGR4MiArIGR5ICogZHkyKSAvIGQyIC0gMC41KSA+IDAuMyAvLyBtaWRwb2ludCBjbG9zZSB0byBhbiBlbmRcbiAgICAgICAgICB8fCBhMCAqIGExICsgYjAgKiBiMSArIGMwICogYzEgPCBjb3NNaW5EaXN0YW5jZSkgeyAvLyBhbmd1bGFyIGRpc3RhbmNlXG4gICAgICAgIHJlc2FtcGxlTGluZVRvKHgwLCB5MCwgbGFtYmRhMCwgYTAsIGIwLCBjMCwgeDIsIHkyLCBsYW1iZGEyLCBhIC89IG0sIGIgLz0gbSwgYywgZGVwdGgsIHN0cmVhbSk7XG4gICAgICAgIHN0cmVhbS5wb2ludCh4MiwgeTIpO1xuICAgICAgICByZXNhbXBsZUxpbmVUbyh4MiwgeTIsIGxhbWJkYTIsIGEsIGIsIGMsIHgxLCB5MSwgbGFtYmRhMSwgYTEsIGIxLCBjMSwgZGVwdGgsIHN0cmVhbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICB2YXIgbGFtYmRhMDAsIHgwMCwgeTAwLCBhMDAsIGIwMCwgYzAwLCAvLyBmaXJzdCBwb2ludFxuICAgICAgICBsYW1iZGEwLCB4MCwgeTAsIGEwLCBiMCwgYzA7IC8vIHByZXZpb3VzIHBvaW50XG5cbiAgICB2YXIgcmVzYW1wbGVTdHJlYW0gPSB7XG4gICAgICBwb2ludDogcG9pbnQsXG4gICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgIGxpbmVFbmQ6IGxpbmVFbmQsXG4gICAgICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgeyBzdHJlYW0ucG9seWdvblN0YXJ0KCk7IHJlc2FtcGxlU3RyZWFtLmxpbmVTdGFydCA9IHJpbmdTdGFydDsgfSxcbiAgICAgIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkgeyBzdHJlYW0ucG9seWdvbkVuZCgpOyByZXNhbXBsZVN0cmVhbS5saW5lU3RhcnQgPSBsaW5lU3RhcnQ7IH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcG9pbnQoeCwgeSkge1xuICAgICAgeCA9IHByb2plY3QoeCwgeSk7XG4gICAgICBzdHJlYW0ucG9pbnQoeFswXSwgeFsxXSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVN0YXJ0KCkge1xuICAgICAgeDAgPSBOYU47XG4gICAgICByZXNhbXBsZVN0cmVhbS5wb2ludCA9IGxpbmVQb2ludDtcbiAgICAgIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaW5lUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgICAgIHZhciBjID0gY2FydGVzaWFuKFtsYW1iZGEsIHBoaV0pLCBwID0gcHJvamVjdChsYW1iZGEsIHBoaSk7XG4gICAgICByZXNhbXBsZUxpbmVUbyh4MCwgeTAsIGxhbWJkYTAsIGEwLCBiMCwgYzAsIHgwID0gcFswXSwgeTAgPSBwWzFdLCBsYW1iZGEwID0gbGFtYmRhLCBhMCA9IGNbMF0sIGIwID0gY1sxXSwgYzAgPSBjWzJdLCBtYXhEZXB0aCwgc3RyZWFtKTtcbiAgICAgIHN0cmVhbS5wb2ludCh4MCwgeTApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpbmVFbmQoKSB7XG4gICAgICByZXNhbXBsZVN0cmVhbS5wb2ludCA9IHBvaW50O1xuICAgICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByaW5nU3RhcnQoKSB7XG4gICAgICBsaW5lU3RhcnQoKTtcbiAgICAgIHJlc2FtcGxlU3RyZWFtLnBvaW50ID0gcmluZ1BvaW50O1xuICAgICAgcmVzYW1wbGVTdHJlYW0ubGluZUVuZCA9IHJpbmdFbmQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmluZ1BvaW50KGxhbWJkYSwgcGhpKSB7XG4gICAgICBsaW5lUG9pbnQobGFtYmRhMDAgPSBsYW1iZGEsIHBoaSksIHgwMCA9IHgwLCB5MDAgPSB5MCwgYTAwID0gYTAsIGIwMCA9IGIwLCBjMDAgPSBjMDtcbiAgICAgIHJlc2FtcGxlU3RyZWFtLnBvaW50ID0gbGluZVBvaW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmdFbmQoKSB7XG4gICAgICByZXNhbXBsZUxpbmVUbyh4MCwgeTAsIGxhbWJkYTAsIGEwLCBiMCwgYzAsIHgwMCwgeTAwLCBsYW1iZGEwMCwgYTAwLCBiMDAsIGMwMCwgbWF4RGVwdGgsIHN0cmVhbSk7XG4gICAgICByZXNhbXBsZVN0cmVhbS5saW5lRW5kID0gbGluZUVuZDtcbiAgICAgIGxpbmVFbmQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzYW1wbGVTdHJlYW07XG4gIH07XG59XG4iLCJpbXBvcnQge2FzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQge2F6aW11dGhhbFJhdywgYXppbXV0aGFsSW52ZXJ0fSBmcm9tIFwiLi9hemltdXRoYWxcIjtcbmltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCB2YXIgYXppbXV0aGFsRXF1YWxBcmVhUmF3ID0gYXppbXV0aGFsUmF3KGZ1bmN0aW9uKGN4Y3kpIHtcbiAgcmV0dXJuIHNxcnQoMiAvICgxICsgY3hjeSkpO1xufSk7XG5cbmF6aW11dGhhbEVxdWFsQXJlYVJhdy5pbnZlcnQgPSBhemltdXRoYWxJbnZlcnQoZnVuY3Rpb24oeikge1xuICByZXR1cm4gMiAqIGFzaW4oeiAvIDIpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihhemltdXRoYWxFcXVhbEFyZWFSYXcpXG4gICAgICAuc2NhbGUoMTI0Ljc1KVxuICAgICAgLmNsaXBBbmdsZSgxODAgLSAxZS0zKTtcbn1cbiIsImltcG9ydCB7YWNvcywgc2lufSBmcm9tIFwiLi4vbWF0aFwiO1xuaW1wb3J0IHthemltdXRoYWxSYXcsIGF6aW11dGhhbEludmVydH0gZnJvbSBcIi4vYXppbXV0aGFsXCI7XG5pbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgdmFyIGF6aW11dGhhbEVxdWlkaXN0YW50UmF3ID0gYXppbXV0aGFsUmF3KGZ1bmN0aW9uKGMpIHtcbiAgcmV0dXJuIChjID0gYWNvcyhjKSkgJiYgYyAvIHNpbihjKTtcbn0pO1xuXG5hemltdXRoYWxFcXVpZGlzdGFudFJhdy5pbnZlcnQgPSBhemltdXRoYWxJbnZlcnQoZnVuY3Rpb24oeikge1xuICByZXR1cm4gejtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHByb2plY3Rpb24oYXppbXV0aGFsRXF1aWRpc3RhbnRSYXcpXG4gICAgICAuc2NhbGUoNzkuNDE4OClcbiAgICAgIC5jbGlwQW5nbGUoMTgwIC0gMWUtMyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgbm9kZSA9IHRoaXMsIGN1cnJlbnQsIG5leHQgPSBbbm9kZV0sIGNoaWxkcmVuLCBpLCBuO1xuICBkbyB7XG4gICAgY3VycmVudCA9IG5leHQucmV2ZXJzZSgpLCBuZXh0ID0gW107XG4gICAgd2hpbGUgKG5vZGUgPSBjdXJyZW50LnBvcCgpKSB7XG4gICAgICBjYWxsYmFjayhub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgICAgaWYgKGNoaWxkcmVuKSBmb3IgKGkgPSAwLCBuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIG5leHQucHVzaChjaGlsZHJlbltpXSk7XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlIChuZXh0Lmxlbmd0aCk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXSwgY2hpbGRyZW4sIGk7XG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBjYWxsYmFjayhub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbikgZm9yIChpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIG5vZGVzLnB1c2goY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHZhciBub2RlID0gdGhpcywgbm9kZXMgPSBbbm9kZV0sIG5leHQgPSBbXSwgY2hpbGRyZW4sIGksIG47XG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBuZXh0LnB1c2gobm9kZSksIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcbiAgICBpZiAoY2hpbGRyZW4pIGZvciAoaSA9IDAsIG4gPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIG5vZGVzLnB1c2goY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgfVxuICB3aGlsZSAobm9kZSA9IG5leHQucG9wKCkpIHtcbiAgICBjYWxsYmFjayhub2RlKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIHN1bSA9ICt2YWx1ZShub2RlLmRhdGEpIHx8IDAsXG4gICAgICAgIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbixcbiAgICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgICB3aGlsZSAoLS1pID49IDApIHN1bSArPSBjaGlsZHJlbltpXS52YWx1ZTtcbiAgICBub2RlLnZhbHVlID0gc3VtO1xuICB9KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4uc29ydChjb21wYXJlKTtcbiAgICB9XG4gIH0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBub2RlID0gdGhpcywgbm9kZXMgPSBbbm9kZV07XG4gIHdoaWxlIChub2RlID0gbm9kZS5wYXJlbnQpIHtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9XG4gIHJldHVybiBub2Rlcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZXMgPSBbXTtcbiAgdGhpcy5lYWNoKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9KTtcbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBsZWF2ZXMgPSBbXTtcbiAgdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGxlYXZlcy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsZWF2ZXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHJvb3QgPSB0aGlzLCBsaW5rcyA9IFtdO1xuICByb290LmVhY2goZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChub2RlICE9PSByb290KSB7IC8vIERvbuKAmXQgaW5jbHVkZSB0aGUgcm9vdOKAmXMgcGFyZW50LCBpZiBhbnkuXG4gICAgICBsaW5rcy5wdXNoKHtzb3VyY2U6IG5vZGUucGFyZW50LCB0YXJnZXQ6IG5vZGV9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGlua3M7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gIHZhciBub2RlcyA9IHBhcmVudC5jaGlsZHJlbixcbiAgICAgIG5vZGUsXG4gICAgICBpID0gLTEsXG4gICAgICBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgayA9IHBhcmVudC52YWx1ZSAmJiAoeTEgLSB5MCkgLyBwYXJlbnQudmFsdWU7XG5cbiAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUueDAgPSB4MCwgbm9kZS54MSA9IHgxO1xuICAgIG5vZGUueTAgPSB5MCwgbm9kZS55MSA9IHkwICs9IG5vZGUudmFsdWUgKiBrO1xuICB9XG59XG4iLCJ2YXIgYXJyYXkgPSBBcnJheS5wcm90b3R5cGU7XG5cbmV4cG9ydCB2YXIgbWFwID0gYXJyYXkubWFwO1xuZXhwb3J0IHZhciBzbGljZSA9IGFycmF5LnNsaWNlO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiAreDtcbn1cbiIsImltcG9ydCB7dGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtmb3JtYXQsIGZvcm1hdFByZWZpeCwgZm9ybWF0U3BlY2lmaWVyLCBwcmVjaXNpb25GaXhlZCwgcHJlY2lzaW9uUHJlZml4LCBwcmVjaXNpb25Sb3VuZH0gZnJvbSBcImQzLWZvcm1hdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkb21haW4sIGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgdmFyIHN0YXJ0ID0gZG9tYWluWzBdLFxuICAgICAgc3RvcCA9IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV0sXG4gICAgICBzdGVwID0gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50KSxcbiAgICAgIHByZWNpc2lvbjtcbiAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciA9PSBudWxsID8gXCIsZlwiIDogc3BlY2lmaWVyKTtcbiAgc3dpdGNoIChzcGVjaWZpZXIudHlwZSkge1xuICAgIGNhc2UgXCJzXCI6IHtcbiAgICAgIHZhciB2YWx1ZSA9IE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpO1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUHJlZml4KHN0ZXAsIHZhbHVlKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb247XG4gICAgICByZXR1cm4gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpO1xuICAgIH1cbiAgICBjYXNlIFwiXCI6XG4gICAgY2FzZSBcImVcIjpcbiAgICBjYXNlIFwiZ1wiOlxuICAgIGNhc2UgXCJwXCI6XG4gICAgY2FzZSBcInJcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUm91bmQoc3RlcCwgTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSkpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCJlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgXCJmXCI6XG4gICAgY2FzZSBcIiVcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uRml4ZWQoc3RlcCkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcIiVcIikgKiAyO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXQoc3BlY2lmaWVyKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRvbWFpbiwgaW50ZXJ2YWwpIHtcbiAgZG9tYWluID0gZG9tYWluLnNsaWNlKCk7XG5cbiAgdmFyIGkwID0gMCxcbiAgICAgIGkxID0gZG9tYWluLmxlbmd0aCAtIDEsXG4gICAgICB4MCA9IGRvbWFpbltpMF0sXG4gICAgICB4MSA9IGRvbWFpbltpMV0sXG4gICAgICB0O1xuXG4gIGlmICh4MSA8IHgwKSB7XG4gICAgdCA9IGkwLCBpMCA9IGkxLCBpMSA9IHQ7XG4gICAgdCA9IHgwLCB4MCA9IHgxLCB4MSA9IHQ7XG4gIH1cblxuICBkb21haW5baTBdID0gaW50ZXJ2YWwuZmxvb3IoeDApO1xuICBkb21haW5baTFdID0gaW50ZXJ2YWwuY2VpbCh4MSk7XG4gIHJldHVybiBkb21haW47XG59XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIG1pbGxpc2Vjb25kID0gaW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gIC8vIG5vb3Bcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQgLSBzdGFydDtcbn0pO1xuXG4vLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXG5taWxsaXNlY29uZC5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgayA9IE1hdGguZmxvb3Ioayk7XG4gIGlmICghaXNGaW5pdGUoaykgfHwgIShrID4gMCkpIHJldHVybiBudWxsO1xuICBpZiAoIShrID4gMSkpIHJldHVybiBtaWxsaXNlY29uZDtcbiAgcmV0dXJuIGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcihkYXRlIC8gaykgKiBrKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBrKTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gaztcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtaWxsaXNlY29uZDtcbmV4cG9ydCB2YXIgbWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmQucmFuZ2U7XG4iLCJleHBvcnQgdmFyIGR1cmF0aW9uU2Vjb25kID0gMWUzO1xuZXhwb3J0IHZhciBkdXJhdGlvbk1pbnV0ZSA9IDZlNDtcbmV4cG9ydCB2YXIgZHVyYXRpb25Ib3VyID0gMzZlNTtcbmV4cG9ydCB2YXIgZHVyYXRpb25EYXkgPSA4NjRlNTtcbmV4cG9ydCB2YXIgZHVyYXRpb25XZWVrID0gNjA0OGU1O1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgc2Vjb25kID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcihkYXRlIC8gZHVyYXRpb25TZWNvbmQpICogZHVyYXRpb25TZWNvbmQpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25TZWNvbmQpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uU2Vjb25kO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENTZWNvbmRzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgc2Vjb25kO1xuZXhwb3J0IHZhciBzZWNvbmRzID0gc2Vjb25kLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgbWludXRlID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcihkYXRlIC8gZHVyYXRpb25NaW51dGUpICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbWludXRlO1xuZXhwb3J0IHZhciBtaW51dGVzID0gbWludXRlLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uSG91ciwgZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG5cbnZhciBob3VyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICB2YXIgb2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogZHVyYXRpb25NaW51dGUgJSBkdXJhdGlvbkhvdXI7XG4gIGlmIChvZmZzZXQgPCAwKSBvZmZzZXQgKz0gZHVyYXRpb25Ib3VyO1xuICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcigoK2RhdGUgLSBvZmZzZXQpIC8gZHVyYXRpb25Ib3VyKSAqIGR1cmF0aW9uSG91ciArIG9mZnNldCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBob3VyO1xuZXhwb3J0IHZhciBob3VycyA9IGhvdXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25EYXksIGR1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgZGF5ID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCAtIChlbmQuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIHN0YXJ0LmdldFRpbWV6b25lT2Zmc2V0KCkpICogZHVyYXRpb25NaW51dGUpIC8gZHVyYXRpb25EYXk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldERhdGUoKSAtIDE7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGF5O1xuZXhwb3J0IHZhciBkYXlzID0gZGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5cbnZhciBtb250aCA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXREYXRlKDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldE1vbnRoKCkgLSBzdGFydC5nZXRNb250aCgpICsgKGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKSkgKiAxMjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBtb250aDtcbmV4cG9ydCB2YXIgbW9udGhzID0gbW9udGgucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIHllYXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0LmdldEZ1bGxZZWFyKCk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxueWVhci5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgcmV0dXJuICFpc0Zpbml0ZShrID0gTWF0aC5mbG9vcihrKSkgfHwgIShrID4gMCkgPyBudWxsIDogaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldEZ1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIGspO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHllYXI7XG5leHBvcnQgdmFyIHllYXJzID0geWVhci5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZX0gZnJvbSBcIi4vZHVyYXRpb25cIjtcblxudmFyIHV0Y01pbnV0ZSA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENTZWNvbmRzKDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjTWludXRlO1xuZXhwb3J0IHZhciB1dGNNaW51dGVzID0gdXRjTWludXRlLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uSG91cn0gZnJvbSBcIi4vZHVyYXRpb25cIjtcblxudmFyIHV0Y0hvdXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDTWludXRlcygwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25Ib3VyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENIb3VycygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y0hvdXI7XG5leHBvcnQgdmFyIHV0Y0hvdXJzID0gdXRjSG91ci5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuaW1wb3J0IHtkdXJhdGlvbkRheX0gZnJvbSBcIi4vZHVyYXRpb25cIjtcblxudmFyIHV0Y0RheSA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25EYXk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0RhdGUoKSAtIDE7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjRGF5O1xuZXhwb3J0IHZhciB1dGNEYXlzID0gdXRjRGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5cbnZhciB1dGNZZWFyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnV0Y1llYXIuZXZlcnkgPSBmdW5jdGlvbihrKSB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRVVENGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1dGNZZWFyO1xuZXhwb3J0IHZhciB1dGNZZWFycyA9IHV0Y1llYXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIHV0Y01vbnRoID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDTW9udGgoKSAtIHN0YXJ0LmdldFVUQ01vbnRoKCkgKyAoZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpKSAqIDEyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y01vbnRoO1xuZXhwb3J0IHZhciB1dGNNb250aHMgPSB1dGNNb250aC5yYW5nZTtcbiIsImltcG9ydCBmb3JtYXRMb2NhbGUgZnJvbSBcIi4vbG9jYWxlXCI7XG5cbnZhciBsb2NhbGU7XG5leHBvcnQgdmFyIHRpbWVGb3JtYXQ7XG5leHBvcnQgdmFyIHRpbWVQYXJzZTtcbmV4cG9ydCB2YXIgdXRjRm9ybWF0O1xuZXhwb3J0IHZhciB1dGNQYXJzZTtcblxuZGVmYXVsdExvY2FsZSh7XG4gIGRhdGVUaW1lOiBcIiV4LCAlWFwiLFxuICBkYXRlOiBcIiUtbS8lLWQvJVlcIixcbiAgdGltZTogXCIlLUk6JU06JVMgJXBcIixcbiAgcGVyaW9kczogW1wiQU1cIiwgXCJQTVwiXSxcbiAgZGF5czogW1wiU3VuZGF5XCIsIFwiTW9uZGF5XCIsIFwiVHVlc2RheVwiLCBcIldlZG5lc2RheVwiLCBcIlRodXJzZGF5XCIsIFwiRnJpZGF5XCIsIFwiU2F0dXJkYXlcIl0sXG4gIHNob3J0RGF5czogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuICBtb250aHM6IFtcIkphbnVhcnlcIiwgXCJGZWJydWFyeVwiLCBcIk1hcmNoXCIsIFwiQXByaWxcIiwgXCJNYXlcIiwgXCJKdW5lXCIsIFwiSnVseVwiLCBcIkF1Z3VzdFwiLCBcIlNlcHRlbWJlclwiLCBcIk9jdG9iZXJcIiwgXCJOb3ZlbWJlclwiLCBcIkRlY2VtYmVyXCJdLFxuICBzaG9ydE1vbnRoczogW1wiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsIFwiQXByXCIsIFwiTWF5XCIsIFwiSnVuXCIsIFwiSnVsXCIsIFwiQXVnXCIsIFwiU2VwXCIsIFwiT2N0XCIsIFwiTm92XCIsIFwiRGVjXCJdXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gIGxvY2FsZSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcbiAgdGltZUZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIHRpbWVQYXJzZSA9IGxvY2FsZS5wYXJzZTtcbiAgdXRjRm9ybWF0ID0gbG9jYWxlLnV0Y0Zvcm1hdDtcbiAgdXRjUGFyc2UgPSBsb2NhbGUudXRjUGFyc2U7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIHJldHVybiBzLm1hdGNoKC8uezZ9L2cpLm1hcChmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIFwiI1wiICsgeDtcbiAgfSk7XG59XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2ZcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCIzOTNiNzk1MjU0YTM2YjZlY2Y5YzllZGU2Mzc5Mzk4Y2EyNTJiNWNmNmJjZWRiOWM4YzZkMzFiZDllMzllN2JhNTJlN2NiOTQ4NDNjMzlhZDQ5NGFkNjYxNmJlNzk2OWM3YjQxNzNhNTUxOTRjZTZkYmRkZTllZDZcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCIzMTgyYmQ2YmFlZDY5ZWNhZTFjNmRiZWZlNjU1MGRmZDhkM2NmZGFlNmJmZGQwYTIzMWEzNTQ3NGM0NzZhMWQ5OWJjN2U5YzA3NTZiYjE5ZTlhYzhiY2JkZGNkYWRhZWI2MzYzNjM5Njk2OTZiZGJkYmRkOWQ5ZDlcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCIxZjc3YjRhZWM3ZThmZjdmMGVmZmJiNzgyY2EwMmM5OGRmOGFkNjI3MjhmZjk4OTY5NDY3YmRjNWIwZDU4YzU2NGJjNDljOTRlMzc3YzJmN2I2ZDI3ZjdmN2ZjN2M3YzdiY2JkMjJkYmRiOGQxN2JlY2Y5ZWRhZTVcIik7XG4iLCJpbXBvcnQge2N1YmVoZWxpeH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlQ3ViZWhlbGl4TG9uZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhjdWJlaGVsaXgoMzAwLCAwLjUsIDAuMCksIGN1YmVoZWxpeCgtMjQwLCAwLjUsIDEuMCkpO1xuIiwiaW1wb3J0IHtjdWJlaGVsaXh9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmd9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuXG5leHBvcnQgdmFyIHdhcm0gPSBpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmcoY3ViZWhlbGl4KC0xMDAsIDAuNzUsIDAuMzUpLCBjdWJlaGVsaXgoODAsIDEuNTAsIDAuOCkpO1xuXG5leHBvcnQgdmFyIGNvb2wgPSBpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmcoY3ViZWhlbGl4KDI2MCwgMC43NSwgMC4zNSksIGN1YmVoZWxpeCg4MCwgMS41MCwgMC44KSk7XG5cbnZhciByYWluYm93ID0gY3ViZWhlbGl4KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHQpIHtcbiAgaWYgKHQgPCAwIHx8IHQgPiAxKSB0IC09IE1hdGguZmxvb3IodCk7XG4gIHZhciB0cyA9IE1hdGguYWJzKHQgLSAwLjUpO1xuICByYWluYm93LmggPSAzNjAgKiB0IC0gMTAwO1xuICByYWluYm93LnMgPSAxLjUgLSAxLjUgKiB0cztcbiAgcmFpbmJvdy5sID0gMC44IC0gMC45ICogdHM7XG4gIHJldHVybiByYWluYm93ICsgXCJcIjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0YW50KCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHtwYXRofSBmcm9tIFwiZDMtcGF0aFwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgY3VydmVMaW5lYXIgZnJvbSBcIi4vY3VydmUvbGluZWFyXCI7XG5pbXBvcnQge3ggYXMgcG9pbnRYLCB5IGFzIHBvaW50WX0gZnJvbSBcIi4vcG9pbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciB4ID0gcG9pbnRYLFxuICAgICAgeSA9IHBvaW50WSxcbiAgICAgIGRlZmluZWQgPSBjb25zdGFudCh0cnVlKSxcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgY3VydmUgPSBjdXJ2ZUxpbmVhcixcbiAgICAgIG91dHB1dCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gbGluZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgZCxcbiAgICAgICAgZGVmaW5lZDAgPSBmYWxzZSxcbiAgICAgICAgYnVmZmVyO1xuXG4gICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgb3V0cHV0ID0gY3VydmUoYnVmZmVyID0gcGF0aCgpKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbjsgKytpKSB7XG4gICAgICBpZiAoIShpIDwgbiAmJiBkZWZpbmVkKGQgPSBkYXRhW2ldLCBpLCBkYXRhKSkgPT09IGRlZmluZWQwKSB7XG4gICAgICAgIGlmIChkZWZpbmVkMCA9ICFkZWZpbmVkMCkgb3V0cHV0LmxpbmVTdGFydCgpO1xuICAgICAgICBlbHNlIG91dHB1dC5saW5lRW5kKCk7XG4gICAgICB9XG4gICAgICBpZiAoZGVmaW5lZDApIG91dHB1dC5wb2ludCgreChkLCBpLCBkYXRhKSwgK3koZCwgaSwgZGF0YSkpO1xuICAgIH1cblxuICAgIGlmIChidWZmZXIpIHJldHVybiBvdXRwdXQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICBsaW5lLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBsaW5lKSA6IHg7XG4gIH07XG5cbiAgbGluZS55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluZSkgOiB5O1xuICB9O1xuXG4gIGxpbmUuZGVmaW5lZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkZWZpbmVkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCBsaW5lKSA6IGRlZmluZWQ7XG4gIH07XG5cbiAgbGluZS5jdXJ2ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjdXJ2ZSA9IF8sIGNvbnRleHQgIT0gbnVsbCAmJiAob3V0cHV0ID0gY3VydmUoY29udGV4dCkpLCBsaW5lKSA6IGN1cnZlO1xuICB9O1xuXG4gIGxpbmUuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChfID09IG51bGwgPyBjb250ZXh0ID0gb3V0cHV0ID0gbnVsbCA6IG91dHB1dCA9IGN1cnZlKGNvbnRleHQgPSBfKSwgbGluZSkgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBsaW5lO1xufVxuIiwiaW1wb3J0IHthZGRCZWFjaCwgcmVtb3ZlQmVhY2h9IGZyb20gXCIuL0JlYWNoXCI7XG5pbXBvcnQge3NvcnRDZWxsSGFsZmVkZ2VzLCBjZWxsSGFsZmVkZ2VTdGFydCwgY2xpcENlbGxzfSBmcm9tIFwiLi9DZWxsXCI7XG5pbXBvcnQge2ZpcnN0Q2lyY2xlfSBmcm9tIFwiLi9DaXJjbGVcIjtcbmltcG9ydCB7Y2xpcEVkZ2VzfSBmcm9tIFwiLi9FZGdlXCI7XG5pbXBvcnQgUmVkQmxhY2tUcmVlIGZyb20gXCIuL1JlZEJsYWNrVHJlZVwiO1xuXG5leHBvcnQgdmFyIGVwc2lsb24gPSAxZS02O1xuZXhwb3J0IHZhciBlcHNpbG9uMiA9IDFlLTEyO1xuZXhwb3J0IHZhciBiZWFjaGVzO1xuZXhwb3J0IHZhciBjZWxscztcbmV4cG9ydCB2YXIgY2lyY2xlcztcbmV4cG9ydCB2YXIgZWRnZXM7XG5cbmZ1bmN0aW9uIHRyaWFuZ2xlQXJlYShhLCBiLCBjKSB7XG4gIHJldHVybiAoYVswXSAtIGNbMF0pICogKGJbMV0gLSBhWzFdKSAtIChhWzBdIC0gYlswXSkgKiAoY1sxXSAtIGFbMV0pO1xufVxuXG5mdW5jdGlvbiBsZXhpY29ncmFwaGljKGEsIGIpIHtcbiAgcmV0dXJuIGJbMV0gLSBhWzFdXG4gICAgICB8fCBiWzBdIC0gYVswXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGlhZ3JhbShzaXRlcywgZXh0ZW50KSB7XG4gIHZhciBzaXRlID0gc2l0ZXMuc29ydChsZXhpY29ncmFwaGljKS5wb3AoKSxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgY2lyY2xlO1xuXG4gIGVkZ2VzID0gW107XG4gIGNlbGxzID0gbmV3IEFycmF5KHNpdGVzLmxlbmd0aCk7XG4gIGJlYWNoZXMgPSBuZXcgUmVkQmxhY2tUcmVlO1xuICBjaXJjbGVzID0gbmV3IFJlZEJsYWNrVHJlZTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNpcmNsZSA9IGZpcnN0Q2lyY2xlO1xuICAgIGlmIChzaXRlICYmICghY2lyY2xlIHx8IHNpdGVbMV0gPCBjaXJjbGUueSB8fCAoc2l0ZVsxXSA9PT0gY2lyY2xlLnkgJiYgc2l0ZVswXSA8IGNpcmNsZS54KSkpIHtcbiAgICAgIGlmIChzaXRlWzBdICE9PSB4IHx8IHNpdGVbMV0gIT09IHkpIHtcbiAgICAgICAgYWRkQmVhY2goc2l0ZSk7XG4gICAgICAgIHggPSBzaXRlWzBdLCB5ID0gc2l0ZVsxXTtcbiAgICAgIH1cbiAgICAgIHNpdGUgPSBzaXRlcy5wb3AoKTtcbiAgICB9IGVsc2UgaWYgKGNpcmNsZSkge1xuICAgICAgcmVtb3ZlQmVhY2goY2lyY2xlLmFyYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNvcnRDZWxsSGFsZmVkZ2VzKCk7XG5cbiAgaWYgKGV4dGVudCkge1xuICAgIHZhciB4MCA9ICtleHRlbnRbMF1bMF0sXG4gICAgICAgIHkwID0gK2V4dGVudFswXVsxXSxcbiAgICAgICAgeDEgPSArZXh0ZW50WzFdWzBdLFxuICAgICAgICB5MSA9ICtleHRlbnRbMV1bMV07XG4gICAgY2xpcEVkZ2VzKHgwLCB5MCwgeDEsIHkxKTtcbiAgICBjbGlwQ2VsbHMoeDAsIHkwLCB4MSwgeTEpO1xuICB9XG5cbiAgdGhpcy5lZGdlcyA9IGVkZ2VzO1xuICB0aGlzLmNlbGxzID0gY2VsbHM7XG5cbiAgYmVhY2hlcyA9XG4gIGNpcmNsZXMgPVxuICBlZGdlcyA9XG4gIGNlbGxzID0gbnVsbDtcbn1cblxuRGlhZ3JhbS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBEaWFncmFtLFxuXG4gIHBvbHlnb25zOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZWRnZXMgPSB0aGlzLmVkZ2VzO1xuXG4gICAgcmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKGNlbGwpIHtcbiAgICAgIHZhciBwb2x5Z29uID0gY2VsbC5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKGkpIHsgcmV0dXJuIGNlbGxIYWxmZWRnZVN0YXJ0KGNlbGwsIGVkZ2VzW2ldKTsgfSk7XG4gICAgICBwb2x5Z29uLmRhdGEgPSBjZWxsLnNpdGUuZGF0YTtcbiAgICAgIHJldHVybiBwb2x5Z29uO1xuICAgIH0pO1xuICB9LFxuXG4gIHRyaWFuZ2xlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHRyaWFuZ2xlcyA9IFtdLFxuICAgICAgICBlZGdlcyA9IHRoaXMuZWRnZXM7XG5cbiAgICB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oY2VsbCwgaSkge1xuICAgICAgaWYgKCEobSA9IChoYWxmZWRnZXMgPSBjZWxsLmhhbGZlZGdlcykubGVuZ3RoKSkgcmV0dXJuO1xuICAgICAgdmFyIHNpdGUgPSBjZWxsLnNpdGUsXG4gICAgICAgICAgaGFsZmVkZ2VzLFxuICAgICAgICAgIGogPSAtMSxcbiAgICAgICAgICBtLFxuICAgICAgICAgIHMwLFxuICAgICAgICAgIGUxID0gZWRnZXNbaGFsZmVkZ2VzW20gLSAxXV0sXG4gICAgICAgICAgczEgPSBlMS5sZWZ0ID09PSBzaXRlID8gZTEucmlnaHQgOiBlMS5sZWZ0O1xuXG4gICAgICB3aGlsZSAoKytqIDwgbSkge1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBlMSA9IGVkZ2VzW2hhbGZlZGdlc1tqXV07XG4gICAgICAgIHMxID0gZTEubGVmdCA9PT0gc2l0ZSA/IGUxLnJpZ2h0IDogZTEubGVmdDtcbiAgICAgICAgaWYgKHMwICYmIHMxICYmIGkgPCBzMC5pbmRleCAmJiBpIDwgczEuaW5kZXggJiYgdHJpYW5nbGVBcmVhKHNpdGUsIHMwLCBzMSkgPCAwKSB7XG4gICAgICAgICAgdHJpYW5nbGVzLnB1c2goW3NpdGUuZGF0YSwgczAuZGF0YSwgczEuZGF0YV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJpYW5nbGVzO1xuICB9LFxuXG4gIGxpbmtzOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lZGdlcy5maWx0ZXIoZnVuY3Rpb24oZWRnZSkge1xuICAgICAgcmV0dXJuIGVkZ2UucmlnaHQ7XG4gICAgfSkubWFwKGZ1bmN0aW9uKGVkZ2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogZWRnZS5sZWZ0LmRhdGEsXG4gICAgICAgIHRhcmdldDogZWRnZS5yaWdodC5kYXRhXG4gICAgICB9O1xuICAgIH0pO1xuICB9LFxuXG4gIGZpbmQ6IGZ1bmN0aW9uKHgsIHksIHJhZGl1cykge1xuICAgIHZhciB0aGF0ID0gdGhpcywgaTAsIGkxID0gdGhhdC5fZm91bmQgfHwgMCwgbiA9IHRoYXQuY2VsbHMubGVuZ3RoLCBjZWxsO1xuXG4gICAgLy8gVXNlIHRoZSBwcmV2aW91c2x5LWZvdW5kIGNlbGwsIG9yIHN0YXJ0IHdpdGggYW4gYXJiaXRyYXJ5IG9uZS5cbiAgICB3aGlsZSAoIShjZWxsID0gdGhhdC5jZWxsc1tpMV0pKSBpZiAoKytpMSA+PSBuKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgZHggPSB4IC0gY2VsbC5zaXRlWzBdLCBkeSA9IHkgLSBjZWxsLnNpdGVbMV0sIGQyID0gZHggKiBkeCArIGR5ICogZHk7XG5cbiAgICAvLyBUcmF2ZXJzZSB0aGUgaGFsZi1lZGdlcyB0byBmaW5kIGEgY2xvc2VyIGNlbGwsIGlmIGFueS5cbiAgICBkbyB7XG4gICAgICBjZWxsID0gdGhhdC5jZWxsc1tpMCA9IGkxXSwgaTEgPSBudWxsO1xuICAgICAgY2VsbC5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBlZGdlID0gdGhhdC5lZGdlc1tlXSwgdiA9IGVkZ2UubGVmdDtcbiAgICAgICAgaWYgKCh2ID09PSBjZWxsLnNpdGUgfHwgIXYpICYmICEodiA9IGVkZ2UucmlnaHQpKSByZXR1cm47XG4gICAgICAgIHZhciB2eCA9IHggLSB2WzBdLCB2eSA9IHkgLSB2WzFdLCB2MiA9IHZ4ICogdnggKyB2eSAqIHZ5O1xuICAgICAgICBpZiAodjIgPCBkMikgZDIgPSB2MiwgaTEgPSB2LmluZGV4O1xuICAgICAgfSk7XG4gICAgfSB3aGlsZSAoaTEgIT09IG51bGwpO1xuXG4gICAgdGhhdC5fZm91bmQgPSBpMDtcblxuICAgIHJldHVybiByYWRpdXMgPT0gbnVsbCB8fCBkMiA8PSByYWRpdXMgKiByYWRpdXMgPyBjZWxsLnNpdGUgOiBudWxsO1xuICB9XG59XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHt0cmFuc2l0aW9ufSBmcm9tIFwiZDMtdHJhbnNpdGlvblwiO1xuaW1wb3J0IHNlbGVjdGlvbl9hdHRycyBmcm9tIFwiLi9zcmMvc2VsZWN0aW9uL2F0dHJzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3N0eWxlcyBmcm9tIFwiLi9zcmMvc2VsZWN0aW9uL3N0eWxlc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9wcm9wZXJ0aWVzIGZyb20gXCIuL3NyYy9zZWxlY3Rpb24vcHJvcGVydGllc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0cnMgZnJvbSBcIi4vc3JjL3RyYW5zaXRpb24vYXR0cnNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlcyBmcm9tIFwiLi9zcmMvdHJhbnNpdGlvbi9zdHlsZXNcIjtcblxuc2VsZWN0aW9uLnByb3RvdHlwZS5hdHRycyA9IHNlbGVjdGlvbl9hdHRycztcbnNlbGVjdGlvbi5wcm90b3R5cGUuc3R5bGVzID0gc2VsZWN0aW9uX3N0eWxlcztcbnNlbGVjdGlvbi5wcm90b3R5cGUucHJvcGVydGllcyA9IHNlbGVjdGlvbl9wcm9wZXJ0aWVzO1xudHJhbnNpdGlvbi5wcm90b3R5cGUuYXR0cnMgPSB0cmFuc2l0aW9uX2F0dHJzO1xudHJhbnNpdGlvbi5wcm90b3R5cGUuc3R5bGVzID0gdHJhbnNpdGlvbl9zdHlsZXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBjb25zdCBDT05TVEFOVFMgPSB7XG4gICdOQU1FU1BBQ0UnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICAnQ0xBU1MnOiBbJ28tY2hhcnQnXSxcbiAgJ1NUWUxFJzogW1xuICAgICdmb250LXNpemU6IDEzcHgnLFxuICAgICdmb250LWZhbWlseTogSGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYSwgQXJpYWwgLHNhbnMtc2VyaWYnLFxuICAgICdmb250LXdlaWdodDogNDAwJyxcbiAgICAnbWF4LXdpZHRoOiAxMDAlJ1xuICBdLFxuICAnRE9UU19SQURJVVMnOiA0LFxuICAnQkFSX0dBUCc6IDAuNSxcbiAgJ0xFR0VORF9NQVJHSU5fVE9QJzogNTYsXG4gICdMRUdFTkRfTUFSR0lOX0JPVFRPTSc6IDEwXG59OyIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0ICdkMy1zZWxlY3Rpb24tbXVsdGknO1xuaW1wb3J0IHtDT05TVEFOVFMgYXMgQ09OU1RBTlRTfSBmcm9tICcuL28tY2hhcnRzLmNvbnN0YW50cyc7XG5cbmNsYXNzIG9DaGFydHMge1xuXG4gIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBkYXRhKSB7XG5cbiAgICB0aGlzLmNoYXJ0ID0ge307XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5jaGFydC5lbGVtZW50ID0gZDMuc2VsZWN0KHRoaXMuc2V0dGluZ3Muc2VsZWN0b3IpO1xuICAgIHRoaXMudGltZVBhcnNlID0gZDMudGltZVBhcnNlKHRoaXMuc2V0dGluZ3MuZm9ybWF0cy50aW1lKTtcblxuICB9XG5cbiAgdHJhbnNsYXRlKHgsIHkpIHtcbiAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgeCArICcsJyArIHkgKyAnKSc7XG4gIH1cblxuICBzbHVnKFRleHQsIHNwYWNlKSB7XG4gICAgcmV0dXJuIFRleHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXlxcdyBdKy9nLCcgJykucmVwbGFjZSgvICsvZywgc3BhY2UpO1xuICB9XG5cbiAgaW5pdCgpIHtcblxuICAgIHRoaXMucmVuZGVyKHtcbiAgICAgICdzZXR0aW5ncyc6IHRoaXMuc2V0dGluZ3MsXG4gICAgICAnY2hhcnQnOiB0aGlzLmNoYXJ0LFxuICAgICAgJ2RhdGEnOiB0aGlzLmRhdGEsXG4gICAgICAnbmFtZXNwYWNlJzogJ2NyZWF0ZSdcbiAgICB9KVxuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXIoe1xuICAgICAgICAnc2V0dGluZ3MnOiB0aGlzLnNldHRpbmdzLFxuICAgICAgICAnY2hhcnQnOiB0aGlzLmNoYXJ0LFxuICAgICAgICAnZGF0YSc6IHRoaXMuZGF0YSxcbiAgICAgICAgJ25hbWVzcGFjZSc6ICd1cGRhdGUnXG4gICAgICB9KTtcbiAgICB9KTtcblxuICB9XG5cbiAgcmVuZGVyKGFyZ3MpIHtcblxuICAgIGxldCBzID0gYXJncy5zZXR0aW5ncztcbiAgICBsZXQgYyA9IGFyZ3MuY2hhcnQ7XG4gICAgbGV0IGQgPSBhcmdzLmRhdGE7XG4gICAgbGV0IG4gPSBhcmdzLm5hbWVzcGFjZTtcblxuICAgIGMgPSB0aGlzLnN2ZyhzLCBjKVtuXSgpO1xuICAgIHMgPSB0aGlzLmRlZmluZShzLCBkKTtcbiAgICBzID0gdGhpcy5kb21haW5zKHMsIGQpO1xuICAgIGMgPSB0aGlzLnBsb3RzKHMsIGMsIGQpW25dKCk7XG4gICAgYyA9IHRoaXMuYXhpcyhzLCBjKVtuXSgpO1xuXG4gIH1cblxuICAvLyBDcmVhdGUgU1ZHXG4gIHN2ZyhzZXR0aW5ncywgY2hhcnQpIHtcblxuICAgIGxldCBfdGhpcyA9IHRoaXM7XG5cbiAgICBfdGhpcy5zdmcuY3JlYXRlID0gY3JlYXRlO1xuICAgIF90aGlzLnN2Zy51cGRhdGUgPSB1cGRhdGU7XG4gICAgX3RoaXMuc3ZnLnNlbGVjdGlvbnMgPSBzZWxlY3Rpb25zO1xuICAgIF90aGlzLnN2Zy5jbGFzc2VzID0gY2xhc3NlcztcblxuICAgIHJldHVybiBfdGhpcy5zdmc7XG5cbiAgICBmdW5jdGlvbiBjbGFzc2VzKEtFWSkge1xuXG4gICAgICBsZXQgYyA9IHtcbiAgICAgICAgJ2JhY2tncm91bmQnOiBbXG4gICAgICAgICAgJ28tY2hhcnRfX2JnJyxcbiAgICAgICAgICAnZmlsbC0nICsgc2V0dGluZ3MuY29sb3JzLmJhY2tncm91bmQsXG4gICAgICAgIF1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBjW0tFWV0uam9pbignICcpO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlKCkge1xuXG4gICAgICBjaGFydC5zdmcgPSBjaGFydC5lbGVtZW50LmFwcGVuZCgnc3ZnJykuYXR0cnMoe1xuICAgICAgICAneG1sbnMnOiBDT05TVEFOVFMuTkFNRVNQQUNFXG4gICAgICB9KTtcblxuICAgICAgY2hhcnQuYmcgPSBjaGFydC5zdmcuYXBwZW5kKCdyZWN0JykuYXR0cnMoe1xuICAgICAgICAnY2xhc3MnOiBfdGhpcy5zdmcuY2xhc3NlcygnYmFja2dyb3VuZCcpXG4gICAgICB9KTtcblxuICAgICAgY2hhcnQuZGVmcyA9IGNoYXJ0LnN2Zy5hcHBlbmQoJ2RlZnMnKTtcbiAgICAgIGNoYXJ0LmcgPSBjaGFydC5zdmcuYXBwZW5kKCdnJyk7XG5cbiAgICAgIHJldHVybiBfdGhpcy5zdmcudXBkYXRlKCk7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XG5cbiAgICAgIGNoYXJ0LnN2ZyA9IF90aGlzLnN2Zy5zZWxlY3Rpb25zKCkuc3ZnO1xuICAgICAgY2hhcnQuZyA9IF90aGlzLnN2Zy5zZWxlY3Rpb25zKCkuZztcblxuICAgICAgc2V0dGluZ3Mud2lkdGggPSBjaGFydC5lbGVtZW50LnByb3BlcnR5KCdjbGllbnRXaWR0aCcpO1xuXG4gICAgICBjaGFydC5zdmcuYXR0cnMoe1xuICAgICAgICAnY2xhc3MnOiBDT05TVEFOVFMuQ0xBU1Muam9pbignICcpLFxuICAgICAgICAnc3R5bGUnOiBDT05TVEFOVFMuU1RZTEUuam9pbignOycpLFxuICAgICAgICAnd2lkdGgnOiBzZXR0aW5ncy53aWR0aCxcbiAgICAgICAgJ2hlaWdodCc6IHNldHRpbmdzLmhlaWdodFxuICAgICAgfSk7XG5cbiAgICAgIGNoYXJ0LmJnLmF0dHJzKHtcbiAgICAgICAgJ3dpZHRoJzogc2V0dGluZ3Mud2lkdGgsXG4gICAgICAgICdoZWlnaHQnOiBzZXR0aW5ncy5oZWlnaHRcbiAgICAgIH0pO1xuXG4gICAgICBjaGFydC5nLmF0dHJzKHtcbiAgICAgICAgJ3RyYW5zZm9ybSc6IF90aGlzLnRyYW5zbGF0ZShzZXR0aW5ncy5tYXJnaW5bM10sIHNldHRpbmdzLm1hcmdpblswXSlcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY2hhcnQ7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZWxlY3Rpb25zKCkge1xuXG4gICAgICBjaGFydC5zdmcgPSBjaGFydC5lbGVtZW50LnNlbGVjdCgnc3ZnJyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgICdlbGVtZW50JzogY2hhcnQuZWxlbWVudCxcbiAgICAgICAgJ3N2Zyc6IGNoYXJ0LnN2ZyxcbiAgICAgICAgJ2cnOiBjaGFydC5zdmcuc2VsZWN0KCdnJylcbiAgICAgIH1cblxuICAgIH1cblxuICB9XG5cbiAgZGVmaW5lKHNldHRpbmdzLCBkYXRhKSB7XG5cbiAgICAvLyB0aGlzIHVzZWQgdHAgYmUgYSBwcm9taXNlIGNoYWluLCBJJ20gbm90IHN1cmUgb2YgaXQncyBpbXBvcnRhbmNlIHRvIGJlIHNvIGFueW1vcmVcbiAgICAvLyAtIGRldm93aGlwcGl0XG4gICAgc2V0dGluZ3MgPSB0aGlzLmRlZmluZUxheW91dChzZXR0aW5ncyk7XG4gICAgc2V0dGluZ3MgPSB0aGlzLmRlZmluZVNjYWxlcyhzZXR0aW5ncyk7XG4gICAgc2V0dGluZ3MgPSB0aGlzLmRlZmluZUF4aXMoc2V0dGluZ3MpO1xuICAgIHNldHRpbmdzID0gdGhpcy5kZWZpbmVQbG90cyhzZXR0aW5ncyk7XG5cbiAgICByZXR1cm4gc2V0dGluZ3M7XG5cbiAgfVxuXG4gIGRlZmluZUxheW91dChzZXR0aW5ncykge1xuXG4gICAgc2V0dGluZ3MuaW5uZXJXaWR0aCA9IHNldHRpbmdzLndpZHRoICAtIChzZXR0aW5ncy5tYXJnaW5bMV0gKyBzZXR0aW5ncy5tYXJnaW5bM10pO1xuICAgIHNldHRpbmdzLmlubmVySGVpZ2h0ID0gc2V0dGluZ3MuaGVpZ2h0IC0gKHNldHRpbmdzLm1hcmdpblswXSArIHNldHRpbmdzLm1hcmdpblsyXSk7XG4gICAgc2V0dGluZ3MudG9wID0gc2V0dGluZ3MucGFkZGluZ1swXTtcbiAgICBzZXR0aW5ncy5yaWdodCA9IHNldHRpbmdzLmlubmVyV2lkdGggLSAoc2V0dGluZ3MucGFkZGluZ1sxXSArIHNldHRpbmdzLnBhZGRpbmdbM10pO1xuICAgIHNldHRpbmdzLmJvdHRvbSA9IHNldHRpbmdzLmlubmVySGVpZ2h0IC0gKHNldHRpbmdzLnBhZGRpbmdbMF0gKyBzZXR0aW5ncy5wYWRkaW5nWzJdKTtcbiAgICBzZXR0aW5ncy5sZWZ0ID0gc2V0dGluZ3MucGFkZGluZ1szXTtcblxuICAgIHJldHVybiBzZXR0aW5ncztcblxuICB9XG5cbiAgZGVmaW5lU2NhbGVzKHNldHRpbmdzKSB7XG5cbiAgICBzZXR0aW5ncy5zY2FsZXMgPSB7fTtcbiAgICBzZXR0aW5ncy5zY2FsZXMueCA9IGQzLnNjYWxlVGltZSgpXG4gICAgICAucmFuZ2UoW3NldHRpbmdzLmxlZnQsIHNldHRpbmdzLnJpZ2h0XSk7XG4gICAgc2V0dGluZ3Muc2NhbGVzLnkgPSBkMy5zY2FsZUxpbmVhcigpXG4gICAgICAucmFuZ2UoW3NldHRpbmdzLmJvdHRvbSwgc2V0dGluZ3MudG9wXSlcbiAgICAgIC5jbGFtcCh0cnVlKTtcblxuICAgIHJldHVybiBzZXR0aW5ncztcblxuICB9XG5cbiAgZGVmaW5lQXhpcyhzZXR0aW5ncykge1xuXG4gICAgc2V0dGluZ3MuYXhpcyA9IHt9O1xuICAgIHNldHRpbmdzLmF4aXMueCA9IGQzLmF4aXNCb3R0b20oKVxuICAgICAgLnNjYWxlKHNldHRpbmdzLnNjYWxlcy54KTtcbiAgICBzZXR0aW5ncy5heGlzLnkgPSBkMy5heGlzTGVmdCgpXG4gICAgICAuc2NhbGUoc2V0dGluZ3Muc2NhbGVzLnkpXG5cbiAgICByZXR1cm4gc2V0dGluZ3M7XG5cbiAgfVxuXG4gIGRlZmluZVBsb3RzKHNldHRpbmdzKSB7XG5cbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xuXG4gICAgc2V0dGluZ3MucGxvdHMgPSB7fTtcbiAgICBzZXR0aW5ncy5wbG90cy5saW5lID0gZDMubGluZSgpXG4gICAgICAueChmdW5jdGlvbihkKSB7XG4gICAgICAgIHJldHVybiBzZXR0aW5ncy5zY2FsZXMueChfdGhpcy50aW1lUGFyc2UoZFswXSkpO1xuICAgICAgfSlcbiAgICAgIC55KGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgcmV0dXJuIHNldHRpbmdzLnNjYWxlcy55KGRbMV0pO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gc2V0dGluZ3M7XG5cbiAgfVxuXG4gIGRvbWFpbnMoc2V0dGluZ3MsIGRhdGEpIHtcblxuICAgIGxldCBfdGhpcyA9IHRoaXM7XG5cbiAgICBsZXQgbWluID0gZnVuY3Rpb24oZGF0YSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBkMy5taW4oZGF0YSwgZnVuY3Rpb24oZCkge1xuICAgICAgICByZXR1cm4gZDMubWluKGQuZGF0YSwgZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlW2luZGV4XTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgbGV0IG1heCA9IGZ1bmN0aW9uKGRhdGEsIGluZGV4KSB7XG4gICAgICByZXR1cm4gZDMubWF4KGRhdGEsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgcmV0dXJuIGQzLm1heChkLmRhdGEsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZVtpbmRleF07XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBsZXQgYmFycyA9IGRhdGEuZmlsdGVyKHggPT4geC50eXBlID09PSAnYmFyJykubGVuZ3RoO1xuXG4gICAgbGV0IHgwID0gX3RoaXMudGltZVBhcnNlKG1pbihkYXRhLCAwKSk7XG4gICAgbGV0IHgxID0gX3RoaXMudGltZVBhcnNlKG1heChkYXRhLCAwKSk7XG5cbiAgICAvLyBpZiB0aGVyZSBhcmUgYmFycyBpdCdzIG5pY2UgdG8gZ2l2ZSBlYWNoIHNpZGUgZXh0cmEgc3BhY2VcbiAgICBpZiAoYmFycyA+IDApIHtcbiAgICAgIHgwID0gZDMudGltZU1vbnRoLm9mZnNldCh4MCwgLTEpO1xuICAgICAgeDEgPSBkMy50aW1lTW9udGgub2Zmc2V0KHgxLCAxKTtcbiAgICB9XG5cbiAgICBsZXQgeTAgPSBtaW4oZGF0YSwgMSk7XG4gICAgbGV0IHkxID0gbWF4KGRhdGEsIDEpO1xuXG4gICAgc2V0dGluZ3Muc2NhbGVzLnguZG9tYWluKFt4MCwgeDFdKS5uaWNlKCk7XG4gICAgc2V0dGluZ3Muc2NhbGVzLnkuZG9tYWluKFt5MCwgeTFdKS5uaWNlKCk7XG5cbiAgICByZXR1cm4gc2V0dGluZ3M7XG5cbiAgfVxuXG4gIHBsb3RzKHNldHRpbmdzLCBjaGFydCwgZGF0YSkge1xuXG4gICAgbGV0IF90aGlzID0gdGhpcztcblxuICAgIF90aGlzLnBsb3RzLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBfdGhpcy5wbG90cy5saW5lID0gbGluZTtcbiAgICBfdGhpcy5wbG90cy5iYXIgPSBiYXI7XG4gICAgX3RoaXMucGxvdHMudXBkYXRlID0gdXBkYXRlO1xuICAgIF90aGlzLnBsb3RzLmNsYXNzZXMgPSBjbGFzc2VzO1xuXG4gICAgcmV0dXJuIF90aGlzLnBsb3RzO1xuXG4gICAgZnVuY3Rpb24gY2xhc3NlcyhLRVksIG5hbWUsIGlkKSB7XG5cbiAgICAgIGxldCBjID0ge1xuICAgICAgICAncGxvdCc6IFtcbiAgICAgICAgICAnby1jaGFydF9fcGxvdCcsXG4gICAgICAgICAgJ28tY2hhcnRfX3Bsb3QtLScgKyBfdGhpcy5zbHVnKG5hbWUsICctJyksXG4gICAgICAgICAgJ28tY2hhcnRfX3Bsb3QtLScgKyBfdGhpcy5zbHVnKGlkLCAnLScpXG4gICAgICAgIF0sXG4gICAgICAgICdsaW5lJzogW1xuICAgICAgICAgICdvLWNoYXJ0X19saW5lJyxcbiAgICAgICAgICAnc3Ryb2tlLScgKyBfdGhpcy5zbHVnKGlkLCAnLScpXG4gICAgICAgIF0sXG4gICAgICAgICdkb3RzJzogW1xuICAgICAgICAgICdvLWNoYXJ0X19kb3QnLFxuICAgICAgICAgICdmaWxsLScgKyBfdGhpcy5zbHVnKGlkLCAnLScpLFxuICAgICAgICAgICdzdHJva2UtJyArIHNldHRpbmdzLmNvbG9ycy5iYWNrZ3JvdW5kXG4gICAgICAgIF0sXG4gICAgICAgICdiYXInOiBbXG4gICAgICAgICAgJ28tY2hhcnRfX2JhcicsXG4gICAgICAgICAgJ2ZpbGwtJyArIF90aGlzLnNsdWcoaWQsICctJyksXG4gICAgICAgIF1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBjW0tFWV0uam9pbignICcpO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlKCkge1xuXG4gICAgICAvLyByZW1vdmUgb2xkIGNvbnRhaW5lcnNcbiAgICAgIGNoYXJ0Lmcuc2VsZWN0QWxsKCcuby1jaGFydF9fcGxvdCcpLnJlbW92ZSgpO1xuXG4gICAgICAvLyBhZGQgcGxvdCBjb250YWluZXJzXG4gICAgICBjaGFydC5wbG90cyA9IGNoYXJ0Lmcuc2VsZWN0QWxsKCcuby1jaGFydF9fcGxvdCcpXG4gICAgICAgICAgLmRhdGEoZGF0YSlcbiAgICAgICAgLmVudGVyKCkuYXBwZW5kKCdnJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbGV0IGQgPSBkMy5zZWxlY3QodGhpcykuZGF0YSgpWzBdO1xuICAgICAgICAgIHJldHVybiBfdGhpcy5wbG90cy5jbGFzc2VzKCdwbG90JywgZC5sYWJlbCwgZC5sYWJlbCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAvLyBydW4gZWFjaCBwbG90IHRocm91Z2ggaXQncyBvd24gcmVuZGVyaW5nIGZ1bmN0aW9uIGJhc2VkIG9uIHR5cGVcbiAgICAgIGNoYXJ0LnBsb3RzLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICBfdGhpcy5wbG90c1tkLnR5cGVdKGQzLnNlbGVjdCh0aGlzKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNoYXJ0O1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZShwbG90KSB7XG5cbiAgICAgIHBsb3QuYXBwZW5kKCdwYXRoJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgKGQpID0+IF90aGlzLnBsb3RzLmNsYXNzZXMoJ2xpbmUnLCAnJywgZC5jb2xvcikpXG4gICAgICAgIC5hdHRyKCdkJywgKGQpID0+IHNldHRpbmdzLnBsb3RzLmxpbmUoZC5kYXRhKSk7XG5cbiAgICAgIHBsb3Quc2VsZWN0QWxsKCcuby1jaGFydF9fZG90JylcbiAgICAgICAgICAuZGF0YSgoZCkgPT4gZC5kYXRhKVxuICAgICAgICAuZW50ZXIoKS5hcHBlbmQoJ2NpcmNsZScpXG4gICAgICAgIC5hdHRycyh7XG4gICAgICAgICAgJ2N4Jzogc2V0dGluZ3MucGxvdHMubGluZS54KCksXG4gICAgICAgICAgJ2N5Jzogc2V0dGluZ3MucGxvdHMubGluZS55KCksXG4gICAgICAgICAgJ3InOiBDT05TVEFOVFMuRE9UU19SQURJVVNcbiAgICAgICAgfSkuYXR0cignY2xhc3MnLCBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICB2YXIgZCA9IGQzLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLmRhdGEoKVswXTtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5wbG90cy5jbGFzc2VzKCdkb3RzJywgJycsIGQuY29sb3IpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJhcihwbG90KSB7XG5cbiAgICAgIGxldCBiYXJzID0gZGF0YS5maWx0ZXIoeCA9PiB4LnR5cGUgPT09ICdiYXInKTsgLy8gZ2V0IGp1c3QgdGhlIGJhciBwbG90c1xuICAgICAgbGV0IHAgPSBwbG90LmRhdGEoKVswXTsgLy8gZ2V0IHRoZSBwbG90J3MgZGF0YS9jb25maWd1cmF0aW9uXG4gICAgICBsZXQgbWF4ID0gTWF0aC5tYXgoMCwgcC5kYXRhLmxlbmd0aCk7IC8vIEkgdGhpbmsgdGhlIG1heCBiZSB0aGUgbWF4IGxlbmd0aCBvZiB0aGUgbGFyZ2VzdCBwbG90P1xuICAgICAgbGV0IHdpZHRoID0gKChzZXR0aW5ncy5yaWdodCAvIG1heCkgKiBDT05TVEFOVFMuQkFSX0dBUCApIC8gYmFycy5sZW5ndGg7IC8vIGNhbGN1bGF0ZSB0aGUgd2lkdGhcbiAgICAgIGxldCBjbGFzc2VzID0gX3RoaXMucGxvdHMuY2xhc3NlcygnYmFyJywgJycsIHAuY29sb3IpOyAvLyBzZXQgdGhlIGNvbG9yXG4gICAgICBsZXQgb3JkZXIgPSAoYmFycy5tYXAoKGQpID0+IGQubGFiZWwpLmluZGV4T2YocC5sYWJlbCkpICsgMTsgLy8gZ2V0IG9yZGVyIG9mIHRoaXMgcGxvdFxuICAgICAgbGV0IG9mZnNldCA9ICh3aWR0aCAqIG9yZGVyKSAtICgod2lkdGggKiBiYXJzLmxlbmd0aCkgLyAyKTsgLy8gY2FsY3VsYXRlIHRoZSBvZmZzZXRcblxuICAgICAgcGxvdC5zZWxlY3RBbGwoJy5vLWNoYXJ0X19iYXInKVxuICAgICAgICAgIC5kYXRhKChkKSA9PiBwLmRhdGEpXG4gICAgICAgIC5lbnRlcigpLmFwcGVuZCgncmVjdCcpXG4gICAgICAgIC5hdHRycyh7XG4gICAgICAgICAgJ2NsYXNzJzogY2xhc3NlcyxcbiAgICAgICAgICAnd2lkdGgnOiB3aWR0aCxcbiAgICAgICAgICAneCc6IChkKSA9PiBzZXR0aW5ncy5zY2FsZXMueChfdGhpcy50aW1lUGFyc2UoZFswXSkpIC0gb2Zmc2V0LFxuICAgICAgICAgICd5JzogKGQpID0+IHNldHRpbmdzLnNjYWxlcy55KE1hdGgubWF4KDAsIGRbMV0pKSxcbiAgICAgICAgICAnaGVpZ2h0JzogKGQpID0+IE1hdGguYWJzKFxuICAgICAgICAgICAgTWF0aC5taW4oc2V0dGluZ3Muc2NhbGVzLnkoMCksIHNldHRpbmdzLmJvdHRvbSkgLSBzZXR0aW5ncy5zY2FsZXMueShkWzFdKVxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuXG4gICAgICByZXR1cm4gX3RoaXMucGxvdHMuY3JlYXRlKCk7XG5cbiAgICB9XG5cbiAgfVxuXG4gICAgLy8gQXhpc1xuICBheGlzKHNldHRpbmdzLCBjaGFydCkge1xuXG4gICAgbGV0IF90aGlzID0gdGhpcztcblxuICAgIF90aGlzLmF4aXMuY3JlYXRlID0gY3JlYXRlO1xuICAgIF90aGlzLmF4aXMudXBkYXRlID0gdXBkYXRlO1xuICAgIF90aGlzLmF4aXMubGFiZWxzID0gbGFiZWxzO1xuICAgIF90aGlzLmF4aXMudGV4dCA9IHRleHQ7XG4gICAgX3RoaXMuYXhpcy5tb2RpZnkgPSBtb2RpZnk7XG4gICAgX3RoaXMuYXhpcy5jbGFzc2VzID0gY2xhc3NlcztcblxuICAgIHJldHVybiBfdGhpcy5heGlzO1xuXG4gICAgZnVuY3Rpb24gY2xhc3NlcyhLRVkpIHtcblxuICAgICAgbGV0IGMgPSB7XG4gICAgICAgICdheGlzX3RvcCc6IFtcbiAgICAgICAgICAnby1jaGFydF9fYXhpcycsXG4gICAgICAgICAgJ28tY2hhcnRfX2F4aXMtLXgnLFxuICAgICAgICAgICdvLWNoYXJ0X19heGlzLS10b3AnXG4gICAgICAgIF0sXG4gICAgICAgICdheGlzX2JvdHRvbSc6IFtcbiAgICAgICAgICAnby1jaGFydF9fYXhpcycsXG4gICAgICAgICAgJ28tY2hhcnRfX2F4aXMtLXgnLFxuICAgICAgICAgICdvLWNoYXJ0X19heGlzLS1ib3R0b20nXG4gICAgICAgIF0sXG4gICAgICAgICdheGlzX2xlZnQnOiBbXG4gICAgICAgICAgJ28tY2hhcnRfX2F4aXMnLFxuICAgICAgICAgICdvLWNoYXJ0X19heGlzLS15JyxcbiAgICAgICAgICAnby1jaGFydF9fYXhpcy0tbGVmdCdcbiAgICAgICAgXSxcbiAgICAgICAgJ2F4aXNfcmlnaHQnOiBbXG4gICAgICAgICAgJ28tY2hhcnRfX2F4aXMnLFxuICAgICAgICAgICdvLWNoYXJ0X19heGlzLS15JyxcbiAgICAgICAgICAnby1jaGFydF9fYXhpcy0tcmlnaHQnXG4gICAgICAgIF0sXG4gICAgICAgICdsYWJlbF90b3AnOiBbXG4gICAgICAgICAgJ2ZpbGwtJyArIHNldHRpbmdzLmNvbG9ycy5sYWJlbHMsXG4gICAgICAgICAgJ28tY2hhcnRfX2xhYmVsJyxcbiAgICAgICAgICAnby1jaGFydF9fbGFiZWwtLXgnLFxuICAgICAgICAgICdvLWNoYXJ0X19sYWJlbC0tdG9wJ1xuICAgICAgICBdLFxuICAgICAgICAnbGFiZWxfYm90dG9tJzogW1xuICAgICAgICAgICdmaWxsLScgKyBzZXR0aW5ncy5jb2xvcnMubGFiZWxzLFxuICAgICAgICAgICdvLWNoYXJ0X19sYWJlbCcsXG4gICAgICAgICAgJ28tY2hhcnRfX2xhYmVsLS14JyxcbiAgICAgICAgICAnby1jaGFydF9fbGFiZWwtLWJvdHRvbSdcbiAgICAgICAgXSxcbiAgICAgICAgJ2xhYmVsX2xlZnQnOiBbXG4gICAgICAgICAgJ2ZpbGwtJyArIHNldHRpbmdzLmNvbG9ycy5sYWJlbHMsXG4gICAgICAgICAgJ28tY2hhcnRfX2xhYmVsJyxcbiAgICAgICAgICAnby1jaGFydF9fbGFiZWwtLXknLFxuICAgICAgICAgICdvLWNoYXJ0X19sYWJlbC0tbGVmdCdcbiAgICAgICAgXSxcbiAgICAgICAgJ2xhYmVsX3JpZ2h0JzogW1xuICAgICAgICAgICdmaWxsLScgKyBzZXR0aW5ncy5jb2xvcnMubGFiZWxzLFxuICAgICAgICAgICdvLWNoYXJ0X19sYWJlbCcsXG4gICAgICAgICAgJ28tY2hhcnRfX2xhYmVsLS15JyxcbiAgICAgICAgICAnby1jaGFydF9fbGFiZWwtLXJpZ2h0J1xuICAgICAgICBdLFxuICAgICAgICAndGlja3MnOiBbXG4gICAgICAgICAgJ3RpY2snLFxuICAgICAgICAgICdmaWxsLScgKyBzZXR0aW5ncy5jb2xvcnMuYXhpc1xuICAgICAgICBdLFxuICAgICAgICAnbGluZV94JzogW1xuICAgICAgICAgICdvLWNoYXJ0X19heGlzLWdhcC0teCcsXG4gICAgICAgICAgJ3N0cm9rZS0nICsgc2V0dGluZ3MuY29sb3JzLmF4aXNcbiAgICAgICAgXSxcbiAgICAgICAgJ2xpbmVfeSc6IFtcbiAgICAgICAgICAnby1jaGFydF9fYXhpcy1nYXAtLXknLFxuICAgICAgICAgICdzdHJva2UtJyArIHNldHRpbmdzLmNvbG9ycy5heGlzXG4gICAgICAgIF1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNbS0VZXS5qb2luKCcgJyk7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGUoKSB7XG5cbiAgICAgIGNoYXJ0LmF4aXMgPSB7fTtcblxuICAgICAgY2hhcnQuYXhpcy54ID0gY2hhcnQuZy5hcHBlbmQoJ2cnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCBfdGhpcy5heGlzLmNsYXNzZXMoJ2F4aXNfYm90dG9tJykpXG5cbiAgICAgIGNoYXJ0LmF4aXMueSA9IGNoYXJ0LmcuYXBwZW5kKCdnJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgX3RoaXMuYXhpcy5jbGFzc2VzKCdheGlzX2xlZnQnKSlcblxuICAgICAgX3RoaXMuYXhpcy51cGRhdGUoKTtcblxuICAgICAgX3RoaXMuYXhpcy5tb2RpZnkoKTtcblxuICAgICAgcmV0dXJuIF90aGlzLmF4aXMubGFiZWxzKCk7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XG5cbiAgICAgIGNoYXJ0LmF4aXMueC5jYWxsKHNldHRpbmdzLmF4aXMueClcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIF90aGlzLnRyYW5zbGF0ZSgwLCBzZXR0aW5ncy5pbm5lckhlaWdodCkpXG5cbiAgICAgIGNoYXJ0LmF4aXMueS5jYWxsKHNldHRpbmdzLmF4aXMueSk7XG5cbiAgICAgIGNoYXJ0LmF4aXMueC5zZWxlY3QoJy5vLWNoYXJ0X19heGlzLWdhcC0teCcpLmF0dHJzKHtcbiAgICAgICAgJ3gxJzogMCwgJ3kxJzogMCwgICd5Mic6IDAsXG4gICAgICAgICd4Mic6IHNldHRpbmdzLmlubmVyV2lkdGgsXG4gICAgICB9KTtcblxuICAgICAgY2hhcnQuYXhpcy55LnNlbGVjdCgnLm8tY2hhcnRfX2F4aXMtZ2FwLS15JykuYXR0cnMoe1xuICAgICAgICAneDEnOiAwLCAneTEnOiAwLCAneDInOiAwLFxuICAgICAgICAneTInOiBzZXR0aW5ncy5pbm5lckhlaWdodFxuICAgICAgfSk7XG5cbiAgICAgIGNoYXJ0Lmcuc2VsZWN0QWxsKCcudGljaycpLmF0dHIoJ2NsYXNzJywgX3RoaXMuYXhpcy5jbGFzc2VzKCd0aWNrcycpKTtcblxuICAgICAgLy8gcG9zaXRpb24gdGhlIHggYXhpcyBsYWJlbFxuICAgICAgY2hhcnQuZy5zZWxlY3QoJy5vLWNoYXJ0X19sYWJlbC0teCcpLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgeHQgPSBkMy5zZWxlY3QodGhpcykuc2VsZWN0KCd0ZXh0Jyk7XG4gICAgICAgIHZhciB4ID0gc2V0dGluZ3MubGVmdCArIChzZXR0aW5ncy5pbm5lcldpZHRoIC8gMik7XG4gICAgICAgIHZhciB5ID0gc2V0dGluZ3MuaGVpZ2h0IC0geHQubm9kZSgpLmdldEJCb3goKS5oZWlnaHRcbiAgICAgICAgcmV0dXJuIF90aGlzLnRyYW5zbGF0ZSh4LCB5KTtcbiAgICAgIH0pXG5cbiAgICAgIC8vIHBvc2l0aW9uIHRoZSB5IGF4aXMgbGFiZWxcbiAgICAgIGNoYXJ0Lmcuc2VsZWN0KCcuby1jaGFydF9fbGFiZWwtLXknKS5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHggPSAwIC0gc2V0dGluZ3MubWFyZ2luWzNdICsgKGQzLnNlbGVjdCh0aGlzKS5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCk7XG4gICAgICAgIHZhciB5ID0gc2V0dGluZ3MuaW5uZXJIZWlnaHQgLyAyO1xuICAgICAgICByZXR1cm4gW190aGlzLnRyYW5zbGF0ZSh4LCB5KSwgJ3JvdGF0ZSgnKyAtOTAgKycpJ10uam9pbignICcpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjaGFydDtcblxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxhYmVscygpIHtcblxuICAgICAgLy8gY3JlYXRlIGxhYmVsc1xuICAgICAgY2hhcnQuYXhpcy54LmxhYmVsID0gY2hhcnQuZy5hcHBlbmQoJ2cnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCBfdGhpcy5heGlzLmNsYXNzZXMoJ2xhYmVsX2JvdHRvbScpKTtcblxuICAgICAgY2hhcnQuYXhpcy54LmxhYmVsLmFwcGVuZCgndGV4dCcpLmF0dHJzKHtcbiAgICAgICAgJ3RleHQtYW5jaG9yJzogJ21pZGRsZSdcbiAgICAgIH0pO1xuXG4gICAgICBjaGFydC5heGlzLnkubGFiZWwgPSBjaGFydC5nLmFwcGVuZCgnZycpXG4gICAgICAgIC5hdHRyKCdjbGFzcycsIF90aGlzLmF4aXMuY2xhc3NlcygnbGFiZWxfbGVmdCcpKTtcblxuICAgICAgY2hhcnQuYXhpcy55LmxhYmVsLmFwcGVuZCgndGV4dCcpLmF0dHJzKHtcbiAgICAgICAgJ3RleHQtYW5jaG9yJzogJ21pZGRsZSdcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5heGlzLnRleHQoKTtcblxuICAgICAgcmV0dXJuIGNoYXJ0O1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGV4dCgpIHtcblxuICAgICAgLy8gQWRkIHRleHQgdG8gdGhlIGxhYmVsIGNvbnRhaW5lcnNcbiAgICAgIGNoYXJ0Lmcuc2VsZWN0KCcuby1jaGFydF9fbGFiZWwtLXgnKS5zZWxlY3QoJ3RleHQnKVxuICAgICAgICAudGV4dChzZXR0aW5ncy5sYWJlbHMuYXhpcy54KTtcblxuICAgICAgY2hhcnQuZy5zZWxlY3QoJy5vLWNoYXJ0X19sYWJlbC0teScpLnNlbGVjdCgndGV4dCcpXG4gICAgICAgIC50ZXh0KHNldHRpbmdzLmxhYmVscy5heGlzLnkpO1xuXG4gICAgICBfdGhpcy5heGlzLnVwZGF0ZSgpO1xuXG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBuYXRpdmUgYXhpcyBzdHlsaW5nIG9mIEQzXG4gICAgZnVuY3Rpb24gbW9kaWZ5KCkge1xuXG4gICAgICAvLyBBZGQgbGluZXMgdGhhdCB2aXN1YWxseSBjb25uZWN0IHRoZSB4IGF4aXMgdG8gdGhlIGNvcm5lclxuICAgICAgY2hhcnQuYXhpcy54LmFwcGVuZCgnbGluZScpLmF0dHJzKHtcbiAgICAgICAgJ3gxJzogMCwgJ3kxJzogMCwgJ3kyJzogMCxcbiAgICAgICAgJ3gyJzogc2V0dGluZ3MuaW5uZXJXaWR0aCxcbiAgICAgICAgJ2NsYXNzJzogX3RoaXMuYXhpcy5jbGFzc2VzKCdsaW5lX3gnKVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGhpZGUgdGhlIG9yaWdpbmFsIHggYXhpcyBkb21haW5cbiAgICAgIGNoYXJ0LmF4aXMueC5zZWxlY3QoJy5kb21haW4nKS5hdHRyKCdkaXNwbGF5JywgJ25vbmUnKTtcblxuICAgICAgLy8gQWRkIGxpbmVzIHRoYXQgdmlzdWFsbHkgY29ubmVjdCB0aGUgeSBheGlzIHRvIHRoZSBjb3JuZXJcbiAgICAgIGNoYXJ0LmF4aXMueS5hcHBlbmQoJ2xpbmUnKS5hdHRycyh7XG4gICAgICAgICd4MSc6IDAsICd5MSc6IDAsICd4Mic6IDAsXG4gICAgICAgICd5Mic6IHNldHRpbmdzLmlubmVySGVpZ2h0LFxuICAgICAgICAnY2xhc3MnOiBfdGhpcy5heGlzLmNsYXNzZXMoJ2xpbmVfeScpXG4gICAgICB9KTtcblxuICAgICAgLy8gaGlkZSB0aGUgb3JpZ2luYWwgeSBheGlzIGRvbWFpblxuICAgICAgY2hhcnQuYXhpcy55LnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2Rpc3BsYXknLCAnbm9uZScpO1xuXG4gICAgfVxuXG4gIH1cblxuICAvLyBMZWdlbmRcblxufVxuXG5leHBvcnQgZGVmYXVsdCBvQ2hhcnRzOyIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IG9DaGFydHMgZnJvbSAnLi9tb2R1bGVzL28tY2hhcnRzJztcbi8qKiBpbXBvcnQgbW9kdWxlcyBoZXJlIGFzIHRoZXkgYXJlIHdyaXR0ZW4gKi9cblxuY2xhc3MgbnljbyB7XG5cbiAgY2hhcnRzKHNldHRpbmdzLCBkYXRhKSB7XG4gICAgY29uc29sZS5sb2coJ0hlcmUnKTtcbiAgICByZXR1cm4gbmV3IG9DaGFydHMoc2V0dGluZ3MsIGRhdGEpLmluaXQoKTtcbiAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IG55Y287Il0sIm5hbWVzIjpbImFzY2VuZGluZ0NvbXBhcmF0b3IiLCJmIiwiZCIsIngiLCJhc2NlbmRpbmciLCJ0aWNrSW5jcmVtZW50Iiwic3RhcnQiLCJzdG9wIiwiY291bnQiLCJzdGVwIiwiTWF0aCIsIm1heCIsInBvd2VyIiwiZmxvb3IiLCJsb2ciLCJMTjEwIiwiZXJyb3IiLCJwb3ciLCJlMTAiLCJlNSIsImUyIiwidGlja1N0ZXAiLCJzdGVwMCIsImFicyIsInN0ZXAxIiwidHJhbnNsYXRlWCIsInRyYW5zbGF0ZVkiLCJ5IiwiY2VudGVyIiwic2NhbGUiLCJvZmZzZXQiLCJiYW5kd2lkdGgiLCJyb3VuZCIsImVudGVyaW5nIiwidGhpcyIsIl9fYXhpcyIsImF4aXMiLCJvcmllbnQiLCJjb250ZXh0IiwidmFsdWVzIiwidGlja1ZhbHVlcyIsInRpY2tzIiwiYXBwbHkiLCJ0aWNrQXJndW1lbnRzIiwiZG9tYWluIiwiZm9ybWF0IiwidGlja0Zvcm1hdCIsImlkZW50aXR5Iiwic3BhY2luZyIsInRpY2tTaXplSW5uZXIiLCJ0aWNrUGFkZGluZyIsInJhbmdlIiwicmFuZ2UwIiwicmFuZ2UxIiwibGVuZ3RoIiwicG9zaXRpb24iLCJjb3B5Iiwic2VsZWN0aW9uIiwicGF0aCIsInNlbGVjdEFsbCIsImRhdGEiLCJ0aWNrIiwib3JkZXIiLCJ0aWNrRXhpdCIsImV4aXQiLCJ0aWNrRW50ZXIiLCJlbnRlciIsImFwcGVuZCIsImF0dHIiLCJsaW5lIiwic2VsZWN0IiwidGV4dCIsIm1lcmdlIiwiaW5zZXJ0IiwiayIsInRvcCIsImJvdHRvbSIsInRyYW5zaXRpb24iLCJlcHNpbG9uIiwiaXNGaW5pdGUiLCJ0cmFuc2Zvcm0iLCJnZXRBdHRyaWJ1dGUiLCJwIiwicGFyZW50Tm9kZSIsInJlbW92ZSIsImxlZnQiLCJyaWdodCIsInRpY2tTaXplT3V0ZXIiLCJmaWx0ZXIiLCJlYWNoIiwiXyIsImFyZ3VtZW50cyIsInNsaWNlIiwiY2FsbCIsInRpY2tTaXplIiwiYXhpc0JvdHRvbSIsImF4aXNMZWZ0IiwiZGlzcGF0Y2giLCJ0IiwiaSIsIm4iLCJFcnJvciIsIkRpc3BhdGNoIiwicGFyc2VUeXBlbmFtZXMiLCJ0eXBlbmFtZXMiLCJ0eXBlcyIsInRyaW0iLCJzcGxpdCIsIm1hcCIsIm5hbWUiLCJpbmRleE9mIiwiaGFzT3duUHJvcGVydHkiLCJ0eXBlIiwiZ2V0IiwiYyIsInZhbHVlIiwic2V0IiwiY2FsbGJhY2siLCJub29wIiwiY29uY2F0IiwicHVzaCIsImNyZWF0b3JJbmhlcml0IiwiZG9jdW1lbnQiLCJvd25lckRvY3VtZW50IiwidXJpIiwibmFtZXNwYWNlVVJJIiwieGh0bWwiLCJkb2N1bWVudEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwiY3JlYXRvckZpeGVkIiwiZnVsbG5hbWUiLCJzcGFjZSIsImxvY2FsIiwiZmlsdGVyQ29udGV4dExpc3RlbmVyIiwibGlzdGVuZXIiLCJpbmRleCIsImdyb3VwIiwiY29udGV4dExpc3RlbmVyIiwiZXZlbnQiLCJyZWxhdGVkIiwicmVsYXRlZFRhcmdldCIsImNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIiwiZXZlbnQxIiwiZXZlbnQwIiwiX19kYXRhX18iLCJvblJlbW92ZSIsInR5cGVuYW1lIiwib24iLCJfX29uIiwibyIsImoiLCJtIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNhcHR1cmUiLCJvbkFkZCIsIndyYXAiLCJmaWx0ZXJFdmVudHMiLCJhZGRFdmVudExpc3RlbmVyIiwibm9uZSIsImVtcHR5IiwiRW50ZXJOb2RlIiwicGFyZW50IiwiZGF0dW0iLCJfbmV4dCIsIl9wYXJlbnQiLCJiaW5kSW5kZXgiLCJ1cGRhdGUiLCJub2RlIiwiZ3JvdXBMZW5ndGgiLCJkYXRhTGVuZ3RoIiwiYmluZEtleSIsImtleSIsImtleVZhbHVlIiwibm9kZUJ5S2V5VmFsdWUiLCJrZXlWYWx1ZXMiLCJBcnJheSIsImtleVByZWZpeCIsImEiLCJiIiwiTmFOIiwiYXR0clJlbW92ZSIsInJlbW92ZUF0dHJpYnV0ZSIsImF0dHJSZW1vdmVOUyIsInJlbW92ZUF0dHJpYnV0ZU5TIiwiYXR0ckNvbnN0YW50Iiwic2V0QXR0cmlidXRlIiwiYXR0ckNvbnN0YW50TlMiLCJzZXRBdHRyaWJ1dGVOUyIsImF0dHJGdW5jdGlvbiIsInYiLCJhdHRyRnVuY3Rpb25OUyIsInN0eWxlUmVtb3ZlIiwic3R5bGUiLCJyZW1vdmVQcm9wZXJ0eSIsInN0eWxlQ29uc3RhbnQiLCJwcmlvcml0eSIsInNldFByb3BlcnR5Iiwic3R5bGVGdW5jdGlvbiIsInN0eWxlVmFsdWUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiZGVmYXVsdFZpZXciLCJnZXRDb21wdXRlZFN0eWxlIiwicHJvcGVydHlSZW1vdmUiLCJwcm9wZXJ0eUNvbnN0YW50IiwicHJvcGVydHlGdW5jdGlvbiIsImNsYXNzQXJyYXkiLCJzdHJpbmciLCJjbGFzc0xpc3QiLCJDbGFzc0xpc3QiLCJfbm9kZSIsIl9uYW1lcyIsImNsYXNzZWRBZGQiLCJuYW1lcyIsImxpc3QiLCJhZGQiLCJjbGFzc2VkUmVtb3ZlIiwiY2xhc3NlZFRydWUiLCJjbGFzc2VkRmFsc2UiLCJjbGFzc2VkRnVuY3Rpb24iLCJ0ZXh0UmVtb3ZlIiwidGV4dENvbnRlbnQiLCJ0ZXh0Q29uc3RhbnQiLCJ0ZXh0RnVuY3Rpb24iLCJodG1sUmVtb3ZlIiwiaW5uZXJIVE1MIiwiaHRtbENvbnN0YW50IiwiaHRtbEZ1bmN0aW9uIiwicmFpc2UiLCJuZXh0U2libGluZyIsImFwcGVuZENoaWxkIiwibG93ZXIiLCJwcmV2aW91c1NpYmxpbmciLCJpbnNlcnRCZWZvcmUiLCJmaXJzdENoaWxkIiwiY29uc3RhbnROdWxsIiwicmVtb3ZlQ2hpbGQiLCJkaXNwYXRjaEV2ZW50IiwicGFyYW1zIiwid2luZG93IiwiQ3VzdG9tRXZlbnQiLCJjcmVhdGVFdmVudCIsImluaXRFdmVudCIsImJ1YmJsZXMiLCJjYW5jZWxhYmxlIiwiZGV0YWlsIiwiZGlzcGF0Y2hDb25zdGFudCIsImRpc3BhdGNoRnVuY3Rpb24iLCJTZWxlY3Rpb24iLCJncm91cHMiLCJwYXJlbnRzIiwiX2dyb3VwcyIsIl9wYXJlbnRzIiwicm9vdCIsImV4dGVuZCIsImRlZmluaXRpb24iLCJwcm90b3R5cGUiLCJPYmplY3QiLCJjcmVhdGUiLCJDb2xvciIsImNvbG9yIiwidG9Mb3dlckNhc2UiLCJyZUhleDMiLCJleGVjIiwicGFyc2VJbnQiLCJSZ2IiLCJyZUhleDYiLCJyZ2JuIiwicmVSZ2JJbnRlZ2VyIiwicmVSZ2JQZXJjZW50IiwicmVSZ2JhSW50ZWdlciIsInJnYmEiLCJyZVJnYmFQZXJjZW50IiwicmVIc2xQZXJjZW50IiwiaHNsYSIsInJlSHNsYVBlcmNlbnQiLCJuYW1lZCIsInIiLCJnIiwicmdiQ29udmVydCIsInJnYiIsIm9wYWNpdHkiLCJoIiwicyIsImwiLCJIc2wiLCJoc2xDb252ZXJ0IiwibWluIiwiaHNsIiwiaHNsMnJnYiIsIm0xIiwibTIiLCJsYWJDb252ZXJ0IiwiTGFiIiwiSGNsIiwiZGVnMnJhZCIsImNvcyIsInNpbiIsInJnYjJ4eXoiLCJ4eXoybGFiIiwiWG4iLCJZbiIsIlpuIiwibGFiIiwidDMiLCJ0MiIsInQwIiwibGFiMnh5eiIsInQxIiwieHl6MnJnYiIsImhjbENvbnZlcnQiLCJhdGFuMiIsInJhZDJkZWciLCJzcXJ0IiwiaGNsIiwiY3ViZWhlbGl4Q29udmVydCIsIkN1YmVoZWxpeCIsIkJDX0RBIiwiRUQiLCJFQiIsImJsIiwiRSIsIkMiLCJEIiwiY3ViZWhlbGl4IiwibGluZWFyIiwiZXhwb25lbnRpYWwiLCJodWUiLCJjb25zdGFudCIsImlzTmFOIiwiZ2FtbWEiLCJub2dhbW1hIiwiemVybyIsIm9uZSIsInBhcnNlQ3NzIiwiY3NzTm9kZSIsImNzc1Jvb3QiLCJjc3NWaWV3IiwiZGVjb21wb3NlIiwicGFyc2VTdmciLCJzdmdOb2RlIiwiYmFzZVZhbCIsImNvbnNvbGlkYXRlIiwibWF0cml4IiwiZSIsImludGVycG9sYXRlVHJhbnNmb3JtIiwicGFyc2UiLCJweENvbW1hIiwicHhQYXJlbiIsImRlZ1BhcmVuIiwicG9wIiwidHJhbnNsYXRlIiwieGEiLCJ5YSIsInhiIiwieWIiLCJxIiwibnVtYmVyIiwicm90YXRlIiwic2tld1giLCJzY2FsZVgiLCJzY2FsZVkiLCJqb2luIiwiY3ViZWhlbGl4R2FtbWEiLCJlbmQiLCJjb2xvckN1YmVoZWxpeCIsIm5vdyIsImNsb2NrTm93Iiwic2V0RnJhbWUiLCJjbGVhck5vdyIsImNsb2NrIiwiY2xvY2tTa2V3IiwiVGltZXIiLCJfY2FsbCIsIl90aW1lIiwidGltZXIiLCJkZWxheSIsInRpbWUiLCJyZXN0YXJ0IiwidGltZXJGbHVzaCIsImZyYW1lIiwidGFza0hlYWQiLCJ3YWtlIiwiY2xvY2tMYXN0IiwidGltZW91dCIsIm5hcCIsInBva2UiLCJwb2tlRGVsYXkiLCJJbmZpbml0eSIsInRhc2tUYWlsIiwic2xlZXAiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiaW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJpbml0IiwiaWQiLCJzY2hlZHVsZSIsIl9fdHJhbnNpdGlvbiIsInN0YXRlIiwiQ1JFQVRFRCIsIlNUQVJUSU5HIiwic2VsZiIsImVsYXBzZWQiLCJTQ0hFRFVMRUQiLCJzY2hlZHVsZXMiLCJTVEFSVEVEIiwiUlVOTklORyIsIkVOREVEIiwidHdlZW4iLCJkdXJhdGlvbiIsImVhc2UiLCJFTkRJTkciLCJ0d2VlblJlbW92ZSIsInR3ZWVuMCIsInR3ZWVuMSIsInNwbGljZSIsInR3ZWVuRnVuY3Rpb24iLCJ0d2VlblZhbHVlIiwiX2lkIiwiaW50ZXJwb2xhdGUiLCJ2YWx1ZTEiLCJ2YWx1ZTAwIiwiaW50ZXJwb2xhdGUwIiwidmFsdWUwIiwiZ2V0QXR0cmlidXRlTlMiLCJ2YWx1ZTEwIiwiYXR0clR3ZWVuTlMiLCJfdmFsdWUiLCJhdHRyVHdlZW4iLCJkZWxheUZ1bmN0aW9uIiwiZGVsYXlDb25zdGFudCIsImR1cmF0aW9uRnVuY3Rpb24iLCJkdXJhdGlvbkNvbnN0YW50IiwiZWFzZUNvbnN0YW50IiwiZXZlcnkiLCJvbkZ1bmN0aW9uIiwib24wIiwib24xIiwic2l0IiwicmVtb3ZlRnVuY3Rpb24iLCJzdHlsZVJlbW92ZUVuZCIsInN0eWxlVHdlZW4iLCJUcmFuc2l0aW9uIiwiX25hbWUiLCJuZXdJZCIsImN1YmljSW5PdXQiLCJpbmhlcml0IiwidGltaW5nIiwiZGVmYXVsdFRpbWluZyIsIlBhdGgiLCJfeDAiLCJfeTAiLCJfeDEiLCJfeTEiLCJNYXAiLCJvYmplY3QiLCJpc0FycmF5IiwiU2V0Iiwib2JqZWN0Q29udmVydGVyIiwiY29sdW1ucyIsIkZ1bmN0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImN1c3RvbUNvbnZlcnRlciIsInJvdyIsImluZmVyQ29sdW1ucyIsInJvd3MiLCJjb2x1bW5TZXQiLCJmb3JFYWNoIiwiY29sdW1uIiwidHJlZSIsInhtIiwieW0iLCJ4cCIsInlwIiwiX3Jvb3QiLCJsZWFmIiwieDAiLCJ5MCIsIngxIiwieTEiLCJfeCIsIl95IiwibmV4dCIsImFkZEFsbCIsInh6IiwieXoiLCJjb3ZlciIsInJlbW92ZUFsbCIsImRlZmF1bHRYIiwiZGVmYXVsdFkiLCJxdWFkdHJlZSIsIm5vZGVzIiwiUXVhZHRyZWUiLCJ1bmRlZmluZWQiLCJsZWFmX2NvcHkiLCJmb3JtYXRTcGVjaWZpZXIiLCJzcGVjaWZpZXIiLCJGb3JtYXRTcGVjaWZpZXIiLCJtYXRjaCIsInJlIiwiZmlsbCIsImFsaWduIiwic2lnbiIsInN5bWJvbCIsIndpZHRoIiwiY29tbWEiLCJwcmVjaXNpb24iLCJmb3JtYXRUeXBlcyIsIkFkZGVyIiwicmVzZXQiLCJhZGRlciIsImJ2IiwiYXYiLCJhY29zIiwicGkiLCJhc2luIiwiaGFsZlBpIiwiYXppbXV0aGFsUmF3IiwiY3giLCJjeSIsImF6aW11dGhhbEludmVydCIsImFuZ2xlIiwieiIsInNjIiwiY2MiLCJzdW0iLCJjaGlsZHJlbiIsImxlYXN0Q29tbW9uQW5jZXN0b3IiLCJhTm9kZXMiLCJhbmNlc3RvcnMiLCJiTm9kZXMiLCJoaWVyYXJjaHkiLCJjaGlsZCIsImNoaWxkcyIsIk5vZGUiLCJ2YWx1ZWQiLCJkZWZhdWx0Q2hpbGRyZW4iLCJkZXB0aCIsImVhY2hCZWZvcmUiLCJjb21wdXRlSGVpZ2h0Iiwibm9kZV9jb3B5IiwiY29weURhdGEiLCJoZWlnaHQiLCJUcmVlTm9kZSIsIkEiLCJfc3RhcnQiLCJfdGFza3MiLCJfZW5kZWQiLCJfYWN0aXZlIiwiYWJvcnQiLCJfZGF0YSIsIl93YWl0aW5nIiwiX3NpemUiLCJub2Fib3J0IiwiX2Vycm9yIiwibWF5YmVOb3RpZnkiLCJkZWludGVycG9sYXRlTGluZWFyIiwiZGVpbnRlcnBvbGF0ZUNsYW1wIiwiZGVpbnRlcnBvbGF0ZSIsInJlaW50ZXJwb2xhdGVDbGFtcCIsInJlaW50ZXJwb2xhdGUiLCJiaW1hcCIsImQwIiwiZDEiLCJyMCIsInIxIiwicG9seW1hcCIsInJldmVyc2UiLCJiaXNlY3QiLCJzb3VyY2UiLCJ0YXJnZXQiLCJjbGFtcCIsImNvbnRpbnVvdXMiLCJyZXNjYWxlIiwicGllY2V3aXNlIiwib3V0cHV0IiwiaW5wdXQiLCJ1bml0IiwiaW50ZXJwb2xhdGVWYWx1ZSIsImludmVydCIsInJhbmdlUm91bmQiLCJpbnRlcnBvbGF0ZVJvdW5kIiwibGluZWFyaXNoIiwibmljZSIsImkwIiwiaTEiLCJjZWlsIiwibmV3SW50ZXJ2YWwiLCJmbG9vcmkiLCJvZmZzZXRpIiwiZmllbGQiLCJkYXRlIiwiRGF0ZSIsInRlc3QiLCJzZXRUaW1lIiwid2Vla2RheSIsInNldERhdGUiLCJnZXREYXRlIiwiZ2V0RGF5Iiwic2V0SG91cnMiLCJnZXRUaW1lem9uZU9mZnNldCIsImR1cmF0aW9uTWludXRlIiwiZHVyYXRpb25XZWVrIiwidXRjV2Vla2RheSIsInNldFVUQ0RhdGUiLCJnZXRVVENEYXRlIiwiZ2V0VVRDRGF5Iiwic2V0VVRDSG91cnMiLCJsb2NhbERhdGUiLCJIIiwiTSIsIlMiLCJMIiwic2V0RnVsbFllYXIiLCJ1dGNEYXRlIiwiVVRDIiwic2V0VVRDRnVsbFllYXIiLCJuZXdZZWFyIiwiZm9ybWF0TG9jYWxlIiwibG9jYWxlIiwibmV3Rm9ybWF0IiwiZm9ybWF0cyIsInBhZCIsImNoYXJDb2RlQXQiLCJwYWRzIiwiY2hhckF0IiwibmV3UGFyc2UiLCJuZXdEYXRlIiwicGFyc2VTcGVjaWZpZXIiLCJ3IiwiZGF5IiwiVyIsIlUiLCJaIiwicGFyc2VzIiwicGFyc2VQZXJpb2QiLCJwZXJpb2RSZSIsInBlcmlvZExvb2t1cCIsInBhcnNlU2hvcnRXZWVrZGF5Iiwic2hvcnRXZWVrZGF5UmUiLCJzaG9ydFdlZWtkYXlMb29rdXAiLCJwYXJzZVdlZWtkYXkiLCJ3ZWVrZGF5UmUiLCJ3ZWVrZGF5TG9va3VwIiwicGFyc2VTaG9ydE1vbnRoIiwic2hvcnRNb250aFJlIiwic2hvcnRNb250aExvb2t1cCIsInBhcnNlTW9udGgiLCJtb250aFJlIiwibW9udGhMb29rdXAiLCJwYXJzZUxvY2FsZURhdGVUaW1lIiwibG9jYWxlX2RhdGVUaW1lIiwicGFyc2VMb2NhbGVEYXRlIiwibG9jYWxlX2RhdGUiLCJwYXJzZUxvY2FsZVRpbWUiLCJsb2NhbGVfdGltZSIsImZvcm1hdFNob3J0V2Vla2RheSIsImxvY2FsZV9zaG9ydFdlZWtkYXlzIiwiZm9ybWF0V2Vla2RheSIsImxvY2FsZV93ZWVrZGF5cyIsImZvcm1hdFNob3J0TW9udGgiLCJsb2NhbGVfc2hvcnRNb250aHMiLCJnZXRNb250aCIsImZvcm1hdE1vbnRoIiwibG9jYWxlX21vbnRocyIsImZvcm1hdFBlcmlvZCIsImxvY2FsZV9wZXJpb2RzIiwiZ2V0SG91cnMiLCJmb3JtYXRVVENTaG9ydFdlZWtkYXkiLCJmb3JtYXRVVENXZWVrZGF5IiwiZm9ybWF0VVRDU2hvcnRNb250aCIsImdldFVUQ01vbnRoIiwiZm9ybWF0VVRDTW9udGgiLCJmb3JtYXRVVENQZXJpb2QiLCJnZXRVVENIb3VycyIsImRhdGVUaW1lIiwicGVyaW9kcyIsImRheXMiLCJzaG9ydERheXMiLCJtb250aHMiLCJzaG9ydE1vbnRocyIsImZvcm1hdFJlIiwiZm9ybWF0TG9va3VwIiwiQiIsImZvcm1hdERheU9mTW9udGgiLCJmb3JtYXRIb3VyMjQiLCJJIiwiZm9ybWF0SG91cjEyIiwiZm9ybWF0RGF5T2ZZZWFyIiwiZm9ybWF0TWlsbGlzZWNvbmRzIiwiZm9ybWF0TW9udGhOdW1iZXIiLCJmb3JtYXRNaW51dGVzIiwiZm9ybWF0U2Vjb25kcyIsImZvcm1hdFdlZWtOdW1iZXJTdW5kYXkiLCJmb3JtYXRXZWVrZGF5TnVtYmVyIiwiZm9ybWF0V2Vla051bWJlck1vbmRheSIsIlgiLCJmb3JtYXRZZWFyIiwiWSIsImZvcm1hdEZ1bGxZZWFyIiwiZm9ybWF0Wm9uZSIsIiUiLCJmb3JtYXRMaXRlcmFsUGVyY2VudCIsInV0Y0Zvcm1hdHMiLCJmb3JtYXRVVENEYXlPZk1vbnRoIiwiZm9ybWF0VVRDSG91cjI0IiwiZm9ybWF0VVRDSG91cjEyIiwiZm9ybWF0VVRDRGF5T2ZZZWFyIiwiZm9ybWF0VVRDTWlsbGlzZWNvbmRzIiwiZm9ybWF0VVRDTW9udGhOdW1iZXIiLCJmb3JtYXRVVENNaW51dGVzIiwiZm9ybWF0VVRDU2Vjb25kcyIsImZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXkiLCJmb3JtYXRVVENXZWVrZGF5TnVtYmVyIiwiZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSIsImZvcm1hdFVUQ1llYXIiLCJmb3JtYXRVVENGdWxsWWVhciIsImZvcm1hdFVUQ1pvbmUiLCJwYXJzZURheU9mTW9udGgiLCJwYXJzZUhvdXIyNCIsInBhcnNlRGF5T2ZZZWFyIiwicGFyc2VNaWxsaXNlY29uZHMiLCJwYXJzZU1vbnRoTnVtYmVyIiwicGFyc2VNaW51dGVzIiwicGFyc2VTZWNvbmRzIiwicGFyc2VXZWVrTnVtYmVyU3VuZGF5IiwicGFyc2VXZWVrZGF5TnVtYmVyIiwicGFyc2VXZWVrTnVtYmVyTW9uZGF5IiwicGFyc2VZZWFyIiwicGFyc2VGdWxsWWVhciIsInBhcnNlWm9uZSIsInBhcnNlTGl0ZXJhbFBlcmNlbnQiLCJ0b1N0cmluZyIsInV0Y0Zvcm1hdCIsInV0Y1BhcnNlIiwicmVxdW90ZSIsInJlcGxhY2UiLCJyZXF1b3RlUmUiLCJSZWdFeHAiLCJudW1iZXJSZSIsInBlcmNlbnRSZSIsInRpbWVEYXkiLCJ0aW1lWWVhciIsImdldE1pbGxpc2Vjb25kcyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwidGltZVN1bmRheSIsInRpbWVNb25kYXkiLCJnZXRGdWxsWWVhciIsInV0Y0RheSIsInV0Y1llYXIiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsInV0Y1N1bmRheSIsInV0Y01vbmRheSIsImdldFVUQ0Z1bGxZZWFyIiwiZm9ybWF0SXNvTmF0aXZlIiwidG9JU09TdHJpbmciLCJwYXJzZUlzb05hdGl2ZSIsImNhbGVuZGFyIiwieWVhciIsIm1vbnRoIiwid2VlayIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCIsImZvcm1hdE1pbGxpc2Vjb25kIiwiZm9ybWF0U2Vjb25kIiwiZm9ybWF0TWludXRlIiwiZm9ybWF0SG91ciIsImZvcm1hdERheSIsImZvcm1hdFdlZWsiLCJ0aWNrSW50ZXJ2YWwiLCJiaXNlY3RvciIsInRpY2tJbnRlcnZhbHMiLCJkdXJhdGlvblllYXIiLCJkdXJhdGlvblNlY29uZCIsImR1cmF0aW9uSG91ciIsImR1cmF0aW9uRGF5IiwiZHVyYXRpb25Nb250aCIsIkxpbmVhciIsIl9jb250ZXh0Iiwic2xvcGUzIiwidGhhdCIsIngyIiwieTIiLCJoMCIsImgxIiwiczAiLCJzMSIsInNsb3BlMiIsInBvaW50IiwiZHgiLCJiZXppZXJDdXJ2ZVRvIiwiTW9ub3RvbmVYIiwiTW9ub3RvbmVZIiwiUmVmbGVjdENvbnRleHQiLCJhdHRyc0Z1bmN0aW9uIiwiYXR0cnNPYmplY3QiLCJzdHlsZXNGdW5jdGlvbiIsInN0eWxlc09iamVjdCIsInByb3BlcnRpZXNGdW5jdGlvbiIsInByb3BlcnR5IiwicHJvcGVydGllc09iamVjdCIsImNvbXBhcmUiLCJsbyIsImhpIiwibWlkIiwiYmlzZWN0UmlnaHQiLCJ2YWx1ZW9mIiwiY29uc3RydWN0b3IiLCJUIiwiYXJncyIsInN2ZyIsInhsaW5rIiwieG1sIiwieG1sbnMiLCJwcmVmaXgiLCJuYW1lc3BhY2VzIiwibmFtZXNwYWNlIiwibWF0Y2hlciIsInNlbGVjdG9yIiwibWF0Y2hlcyIsImVsZW1lbnQiLCJ2ZW5kb3JNYXRjaGVzIiwid2Via2l0TWF0Y2hlc1NlbGVjdG9yIiwibXNNYXRjaGVzU2VsZWN0b3IiLCJtb3pNYXRjaGVzU2VsZWN0b3IiLCJvTWF0Y2hlc1NlbGVjdG9yIiwibW91c2VlbnRlciIsIm1vdXNlbGVhdmUiLCJxdWVyeVNlbGVjdG9yIiwic3ViZ3JvdXBzIiwic3Vibm9kZSIsInN1Ymdyb3VwIiwicXVlcnlTZWxlY3RvckFsbCIsInNlbGVjdG9yQWxsIiwiX2VudGVyIiwic3BhcnNlIiwic2l6ZSIsImJpbmQiLCJlbnRlckdyb3VwIiwidXBkYXRlR3JvdXAiLCJwcmV2aW91cyIsIl9leGl0IiwiZ3JvdXBzMCIsImdyb3VwczEiLCJtMCIsIm1lcmdlcyIsImdyb3VwMCIsImdyb3VwMSIsImNvbXBhcmVOb2RlIiwic29ydGdyb3VwcyIsInNvcnRncm91cCIsInNvcnQiLCJjb250YWlucyIsImNyZWF0b3IiLCJiZWZvcmUiLCJzZWxlY3Rpb25fc2VsZWN0Iiwic2VsZWN0aW9uX3NlbGVjdEFsbCIsInNlbGVjdGlvbl9maWx0ZXIiLCJzZWxlY3Rpb25fZGF0YSIsInNlbGVjdGlvbl9lbnRlciIsInNlbGVjdGlvbl9leGl0Iiwic2VsZWN0aW9uX21lcmdlIiwic2VsZWN0aW9uX29yZGVyIiwic2VsZWN0aW9uX3NvcnQiLCJzZWxlY3Rpb25fY2FsbCIsInNlbGVjdGlvbl9ub2RlcyIsInNlbGVjdGlvbl9ub2RlIiwic2VsZWN0aW9uX3NpemUiLCJzZWxlY3Rpb25fZW1wdHkiLCJzZWxlY3Rpb25fZWFjaCIsInNlbGVjdGlvbl9hdHRyIiwic2VsZWN0aW9uX3N0eWxlIiwic2VsZWN0aW9uX3Byb3BlcnR5IiwiY2xhc3NlZCIsInNlbGVjdGlvbl9jbGFzc2VkIiwic2VsZWN0aW9uX3RleHQiLCJodG1sIiwic2VsZWN0aW9uX2h0bWwiLCJzZWxlY3Rpb25fcmFpc2UiLCJzZWxlY3Rpb25fbG93ZXIiLCJzZWxlY3Rpb25fYXBwZW5kIiwic2VsZWN0aW9uX2luc2VydCIsInNlbGVjdGlvbl9yZW1vdmUiLCJzZWxlY3Rpb25fZGF0dW0iLCJzZWxlY3Rpb25fb24iLCJzZWxlY3Rpb25fZGlzcGF0Y2giLCJmYWN0b3J5IiwicmVJIiwicmVOIiwicmVQIiwiYWxpY2VibHVlIiwiYW50aXF1ZXdoaXRlIiwiYXF1YSIsImFxdWFtYXJpbmUiLCJhenVyZSIsImJlaWdlIiwiYmlzcXVlIiwiYmxhY2siLCJibGFuY2hlZGFsbW9uZCIsImJsdWUiLCJibHVldmlvbGV0IiwiYnJvd24iLCJidXJseXdvb2QiLCJjYWRldGJsdWUiLCJjaGFydHJldXNlIiwiY2hvY29sYXRlIiwiY29yYWwiLCJjb3JuZmxvd2VyYmx1ZSIsImNvcm5zaWxrIiwiY3JpbXNvbiIsImN5YW4iLCJkYXJrYmx1ZSIsImRhcmtjeWFuIiwiZGFya2dvbGRlbnJvZCIsImRhcmtncmF5IiwiZGFya2dyZWVuIiwiZGFya2dyZXkiLCJkYXJra2hha2kiLCJkYXJrbWFnZW50YSIsImRhcmtvbGl2ZWdyZWVuIiwiZGFya29yYW5nZSIsImRhcmtvcmNoaWQiLCJkYXJrcmVkIiwiZGFya3NhbG1vbiIsImRhcmtzZWFncmVlbiIsImRhcmtzbGF0ZWJsdWUiLCJkYXJrc2xhdGVncmF5IiwiZGFya3NsYXRlZ3JleSIsImRhcmt0dXJxdW9pc2UiLCJkYXJrdmlvbGV0IiwiZGVlcHBpbmsiLCJkZWVwc2t5Ymx1ZSIsImRpbWdyYXkiLCJkaW1ncmV5IiwiZG9kZ2VyYmx1ZSIsImZpcmVicmljayIsImZsb3JhbHdoaXRlIiwiZm9yZXN0Z3JlZW4iLCJmdWNoc2lhIiwiZ2FpbnNib3JvIiwiZ2hvc3R3aGl0ZSIsImdvbGQiLCJnb2xkZW5yb2QiLCJncmF5IiwiZ3JlZW4iLCJncmVlbnllbGxvdyIsImdyZXkiLCJob25leWRldyIsImhvdHBpbmsiLCJpbmRpYW5yZWQiLCJpbmRpZ28iLCJpdm9yeSIsImtoYWtpIiwibGF2ZW5kZXIiLCJsYXZlbmRlcmJsdXNoIiwibGF3bmdyZWVuIiwibGVtb25jaGlmZm9uIiwibGlnaHRibHVlIiwibGlnaHRjb3JhbCIsImxpZ2h0Y3lhbiIsImxpZ2h0Z29sZGVucm9keWVsbG93IiwibGlnaHRncmF5IiwibGlnaHRncmVlbiIsImxpZ2h0Z3JleSIsImxpZ2h0cGluayIsImxpZ2h0c2FsbW9uIiwibGlnaHRzZWFncmVlbiIsImxpZ2h0c2t5Ymx1ZSIsImxpZ2h0c2xhdGVncmF5IiwibGlnaHRzbGF0ZWdyZXkiLCJsaWdodHN0ZWVsYmx1ZSIsImxpZ2h0eWVsbG93IiwibGltZSIsImxpbWVncmVlbiIsImxpbmVuIiwibWFnZW50YSIsIm1hcm9vbiIsIm1lZGl1bWFxdWFtYXJpbmUiLCJtZWRpdW1ibHVlIiwibWVkaXVtb3JjaGlkIiwibWVkaXVtcHVycGxlIiwibWVkaXVtc2VhZ3JlZW4iLCJtZWRpdW1zbGF0ZWJsdWUiLCJtZWRpdW1zcHJpbmdncmVlbiIsIm1lZGl1bXR1cnF1b2lzZSIsIm1lZGl1bXZpb2xldHJlZCIsIm1pZG5pZ2h0Ymx1ZSIsIm1pbnRjcmVhbSIsIm1pc3R5cm9zZSIsIm1vY2Nhc2luIiwibmF2YWpvd2hpdGUiLCJuYXZ5Iiwib2xkbGFjZSIsIm9saXZlIiwib2xpdmVkcmFiIiwib3JhbmdlIiwib3JhbmdlcmVkIiwib3JjaGlkIiwicGFsZWdvbGRlbnJvZCIsInBhbGVncmVlbiIsInBhbGV0dXJxdW9pc2UiLCJwYWxldmlvbGV0cmVkIiwicGFwYXlhd2hpcCIsInBlYWNocHVmZiIsInBlcnUiLCJwaW5rIiwicGx1bSIsInBvd2RlcmJsdWUiLCJwdXJwbGUiLCJyZWJlY2NhcHVycGxlIiwicmVkIiwicm9zeWJyb3duIiwicm95YWxibHVlIiwic2FkZGxlYnJvd24iLCJzYWxtb24iLCJzYW5keWJyb3duIiwic2VhZ3JlZW4iLCJzZWFzaGVsbCIsInNpZW5uYSIsInNpbHZlciIsInNreWJsdWUiLCJzbGF0ZWJsdWUiLCJzbGF0ZWdyYXkiLCJzbGF0ZWdyZXkiLCJzbm93Iiwic3ByaW5nZ3JlZW4iLCJzdGVlbGJsdWUiLCJ0YW4iLCJ0ZWFsIiwidGhpc3RsZSIsInRvbWF0byIsInR1cnF1b2lzZSIsInZpb2xldCIsIndoZWF0Iiwid2hpdGUiLCJ3aGl0ZXNtb2tlIiwieWVsbG93IiwieWVsbG93Z3JlZW4iLCJkZWZpbmUiLCJkaXNwbGF5YWJsZSIsImJyaWdodGVyIiwiZGFya2VyIiwiUEkiLCJjb3NoIiwic2luaCIsInJnYkdhbW1hIiwiY29sb3JSZ2IiLCJuYiIsIm5hIiwicmVBIiwicmVCIiwiYW0iLCJibSIsImJzIiwiYmkiLCJsYXN0SW5kZXgiLCJhcnJheSIsInZhbHVlT2YiLCJkZWdyZWVzIiwiYXRhbiIsImludGVycG9sYXRlVHJhbnNmb3JtQ3NzIiwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmciLCJjdWJlaGVsaXgkMSIsImN1YmVoZWxpeExvbmciLCJwZXJmb3JtYW5jZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIlR5cGVFcnJvciIsImVtcHR5T24iLCJlbXB0eVR3ZWVuIiwiYWN0aXZlIiwiaW50ZXJydXB0IiwiaW50ZXJwb2xhdGVOdW1iZXIiLCJpbnRlcnBvbGF0ZVJnYiIsImludGVycG9sYXRlU3RyaW5nIiwiaWQwIiwiaWQxIiwic2VsZWN0aW9uX3Byb3RvdHlwZSIsInRyYW5zaXRpb25fc2VsZWN0IiwidHJhbnNpdGlvbl9zZWxlY3RBbGwiLCJ0cmFuc2l0aW9uX2ZpbHRlciIsInRyYW5zaXRpb25fbWVyZ2UiLCJ0cmFuc2l0aW9uX3NlbGVjdGlvbiIsInRyYW5zaXRpb25fdHJhbnNpdGlvbiIsInRyYW5zaXRpb25fb24iLCJ0cmFuc2l0aW9uX2F0dHIiLCJ0cmFuc2l0aW9uX2F0dHJUd2VlbiIsInRyYW5zaXRpb25fc3R5bGUiLCJ0cmFuc2l0aW9uX3N0eWxlVHdlZW4iLCJ0cmFuc2l0aW9uX3RleHQiLCJ0cmFuc2l0aW9uX3JlbW92ZSIsInRyYW5zaXRpb25fdHdlZW4iLCJ0cmFuc2l0aW9uX2RlbGF5IiwidHJhbnNpdGlvbl9kdXJhdGlvbiIsInRyYW5zaXRpb25fZWFzZSIsImN1c3RvbSIsInBvbHlJbiIsImV4cG9uZW50IiwicG9seU91dCIsInBvbHlJbk91dCIsImJhY2tJbiIsIm92ZXJzaG9vdCIsImJhY2tPdXQiLCJiYWNrSW5PdXQiLCJ0YXUiLCJlbGFzdGljSW4iLCJhbXBsaXR1ZGUiLCJwZXJpb2QiLCJlbGFzdGljT3V0IiwiZWxhc3RpY0luT3V0IiwiZWFzZUN1YmljSW5PdXQiLCJzZWxlY3Rpb25faW50ZXJydXB0Iiwic2VsZWN0aW9uX3RyYW5zaXRpb24iLCJ0YXVFcHNpbG9uIiwibW92ZVRvIiwiY2xvc2VQYXRoIiwibGluZVRvIiwicXVhZHJhdGljQ3VydmVUbyIsImFyY1RvIiwieDIxIiwieTIxIiwieDAxIiwieTAxIiwibDAxXzIiLCJ4MjAiLCJ5MjAiLCJsMjFfMiIsImwyMF8yIiwibDIxIiwibDAxIiwidDAxIiwidDIxIiwiYXJjIiwiYTAiLCJhMSIsImNjdyIsImR5IiwiY3ciLCJkYSIsInJlY3QiLCJoYXMiLCJjbGVhciIsImtleXMiLCJlbnRyaWVzIiwicHJvdG8iLCJkZWxpbWl0ZXIiLCJjb252ZXJ0IiwicGFyc2VSb3dzIiwidG9rZW4iLCJOIiwiRU9GIiwiZW9sIiwiRU9MIiwiZGVsaW1pdGVyQ29kZSIsImZvcm1hdFZhbHVlIiwiZm9ybWF0Um93cyIsImZvcm1hdFJvdyIsInJlRm9ybWF0IiwiZHN2IiwidmlzaXQiLCJyYWRpdXMiLCJ4MyIsInkzIiwicXVhZHMiLCJRdWFkIiwiZDIiLCJyZXRhaW5lciIsInRyZWVQcm90byIsInRyZWVfYWRkIiwidHJlZV9hZGRBbGwiLCJ0cmVlX2NvdmVyIiwidHJlZV9kYXRhIiwiZXh0ZW50IiwidHJlZV9leHRlbnQiLCJmaW5kIiwidHJlZV9maW5kIiwidHJlZV9yZW1vdmUiLCJ0cmVlX3JlbW92ZUFsbCIsInRyZWVfcm9vdCIsInRyZWVfc2l6ZSIsInRyZWVfdmlzaXQiLCJ2aXNpdEFmdGVyIiwidHJlZV92aXNpdEFmdGVyIiwidHJlZV94IiwidHJlZV95IiwicHJlZml4RXhwb25lbnQiLCJ0b0V4cG9uZW50aWFsIiwiY29lZmZpY2llbnQiLCJmb3JtYXREZWNpbWFsIiwiZ3JvdXBpbmciLCJ0aG91c2FuZHMiLCJzdWJzdHJpbmciLCJudW1lcmFscyIsIm91dCIsInRvUHJlY2lzaW9uIiwidG9GaXhlZCIsImZvcm1hdFJvdW5kZWQiLCJ0b1VwcGVyQ2FzZSIsImZvcm1hdFByZWZpeCIsInByZWZpeGVzIiwidmFsdWVQcmVmaXgiLCJ2YWx1ZVN1ZmZpeCIsInN1ZmZpeCIsImZvcm1hdFR5cGUiLCJ2YWx1ZU5lZ2F0aXZlIiwibWF5YmVTdWZmaXgiLCJkZWNpbWFsIiwicGFkZGluZyIsImN1cnJlbmN5IiwicGVyY2VudCIsImZvcm1hdEdyb3VwIiwiZm9ybWF0TnVtZXJhbHMiLCJ0ZW1wIiwicmFkaWFucyIsImN4Y3kiLCJlYWNoQWZ0ZXIiLCJjdXJyZW50IiwiYW5jZXN0b3IiLCJsZWF2ZXMiLCJsaW5rcyIsIm5vZGVfY291bnQiLCJub2RlX2VhY2giLCJub2RlX2VhY2hBZnRlciIsIm5vZGVfZWFjaEJlZm9yZSIsIm5vZGVfc3VtIiwibm9kZV9zb3J0Iiwibm9kZV9wYXRoIiwibm9kZV9hbmNlc3RvcnMiLCJkZXNjZW5kYW50cyIsIm5vZGVfZGVzY2VuZGFudHMiLCJub2RlX2xlYXZlcyIsIm5vZGVfbGlua3MiLCJwcmVjaXNpb25QcmVmaXgiLCJwcmVjaXNpb25Sb3VuZCIsInByZWNpc2lvbkZpeGVkIiwic3VuZGF5IiwibW9uZGF5Iiwic2V0TW9udGgiLCJzZXRVVENTZWNvbmRzIiwic2V0VVRDTWludXRlcyIsInNldFVUQ01vbnRoIiwidGltZUZvcm1hdCIsInRpbWVQYXJzZSIsIi0iLCIwIiwidGltZU1vbnRoIiwidGltZVdlZWsiLCJ0aW1lSG91ciIsInRpbWVNaW51dGUiLCJ0aW1lU2Vjb25kIiwidGltZU1pbGxpc2Vjb25kIiwiY29sb3JzIiwiaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nIiwiYXJlYVN0YXJ0IiwiX2xpbmUiLCJhcmVhRW5kIiwibGluZVN0YXJ0IiwiX3BvaW50IiwibGluZUVuZCIsImJ1ZmZlciIsImRlZmluZWQwIiwiY3VydmUiLCJkZWZpbmVkIiwicG9pbnRYIiwicG9pbnRZIiwiY3VydmVMaW5lYXIiLCJfdDAiLCJhdHRycyIsInNlbGVjdGlvbl9hdHRycyIsInN0eWxlcyIsInNlbGVjdGlvbl9zdHlsZXMiLCJwcm9wZXJ0aWVzIiwic2VsZWN0aW9uX3Byb3BlcnRpZXMiLCJDT05TVEFOVFMiLCJvQ2hhcnRzIiwic2V0dGluZ3MiLCJjaGFydCIsImQzIiwiVGV4dCIsInJlbmRlciIsIl90aGlzMiIsImRvbWFpbnMiLCJwbG90cyIsImNsYXNzZXMiLCJLRVkiLCJiYWNrZ3JvdW5kIiwiTkFNRVNQQUNFIiwiYmciLCJfdGhpcyIsImRlZnMiLCJzZWxlY3Rpb25zIiwiQ0xBU1MiLCJTVFlMRSIsIm1hcmdpbiIsImRlZmluZUxheW91dCIsImRlZmluZVNjYWxlcyIsImRlZmluZUF4aXMiLCJkZWZpbmVQbG90cyIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsInNjYWxlcyIsImJhcnMiLCJzbHVnIiwibGFiZWwiLCJwbG90IiwiRE9UU19SQURJVVMiLCJiYXIiLCJCQVJfR0FQIiwibGFiZWxzIiwibW9kaWZ5IiwieHQiLCJnZXRCQm94Il0sIm1hcHBpbmdzIjoiaUNBNEJBLFNBQVNBLEVBQW9CQyxHQUMzQixPQUFPLFNBQVNDLEVBQUdDLEdBQ2pCLE9BQU9DLEdBQVVILEVBQUVDLEdBQUlDLElDRTNCLFNBQWdCRSxFQUFjQyxFQUFPQyxFQUFNQyxHQUN6QyxJQUFJQyxHQUFRRixFQUFPRCxHQUFTSSxLQUFLQyxJQUFJLEVBQUdILEdBQ3BDSSxFQUFRRixLQUFLRyxNQUFNSCxLQUFLSSxJQUFJTCxHQUFRQyxLQUFLSyxNQUN6Q0MsRUFBUVAsRUFBT0MsS0FBS08sSUFBSSxHQUFJTCxHQUNoQyxPQUFP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 +var nyco=function(){"use strict";function t(t){return function(n,e){return ti(t(n),e)}}function n(t,n,e){var r=(n-t)/Math.max(0,e),i=Math.floor(Math.log(r)/Math.LN10),o=r/Math.pow(10,i);return i>=0?(o>=ri?10:o>=ii?5:o>=oi?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=ri?10:o>=ii?5:o>=oi?2:1)}function e(t,n,e){var r=Math.abs(n-t)/Math.max(0,e),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=ri?i*=10:o>=ii?i*=5:o>=oi&&(i*=2),n=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})}function p(t,n){for(var e,r=0,i=t.length;r=0&&(n=t.slice(e+1),t=t.slice(0,e)),{type:t,name:n}})}function w(t){return function(){var n=this.__on;if(n){for(var e,r=0,i=-1,o=n.length;rn?1:t>=n?0:NaN}function C(t){return function(){this.removeAttribute(t)}}function S(t){return function(){this.removeAttributeNS(t.space,t.local)}}function D(t,n){return function(){this.setAttribute(t,n)}}function E(t,n){return function(){this.setAttributeNS(t.space,t.local,n)}}function U(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttribute(t):this.setAttribute(t,e)}}function P(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,e)}}function F(t){return function(){this.style.removeProperty(t)}}function H(t,n,e){return function(){this.style.setProperty(t,n,e)}}function L(t,n,e){return function(){var r=n.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,e)}}function Y(t,n){return t.style.getPropertyValue(n)||Vi(t).getComputedStyle(t,null).getPropertyValue(n)}function O(t){return function(){delete this[t]}}function j(t,n){return function(){this[t]=n}}function z(t,n){return function(){var e=n.apply(this,arguments);null==e?delete this[t]:this[t]=e}}function I(t){return t.trim().split(/^|\s+/)}function q(t){return t.classList||new $(t)}function $(t){this._node=t,this._names=I(t.getAttribute("class")||"")}function X(t,n){for(var e=q(t),r=-1,i=n.length;++r>8&15|n>>4&240,n>>4&15|240&n,(15&n)<<4|15&n,1)):(n=_o.exec(t))?pt(parseInt(n[1],16)):(n=vo.exec(t))?new vt(n[1],n[2],n[3],1):(n=yo.exec(t))?new vt(255*n[1]/100,255*n[2]/100,255*n[3]/100,1):(n=mo.exec(t))?dt(n[1],n[2],n[3],n[4]):(n=wo.exec(t))?dt(255*n[1]/100,255*n[2]/100,255*n[3]/100,n[4]):(n=xo.exec(t))?yt(n[1],n[2]/100,n[3]/100,1):(n=bo.exec(t))?yt(n[1],n[2]/100,n[3]/100,n[4]):Mo.hasOwnProperty(t)?pt(Mo[t]):"transparent"===t?new vt(NaN,NaN,NaN,0):null}function pt(t){return new vt(t>>16&255,t>>8&255,255&t,1)}function dt(t,n,e,r){return r<=0&&(t=n=e=NaN),new vt(t,n,e,r)}function gt(t){return t instanceof ht||(t=ft(t)),t?(t=t.rgb(),new vt(t.r,t.g,t.b,t.opacity)):new vt}function _t(t,n,e,r){return 1===arguments.length?gt(t):new vt(t,n,e,null==r?1:r)}function vt(t,n,e,r){this.r=+t,this.g=+n,this.b=+e,this.opacity=+r}function yt(t,n,e,r){return r<=0?t=n=e=NaN:e<=0||e>=1?t=n=NaN:n<=0&&(t=NaN),new xt(t,n,e,r)}function mt(t){if(t instanceof xt)return new xt(t.h,t.s,t.l,t.opacity);if(t instanceof ht||(t=ft(t)),!t)return new xt;if(t instanceof xt)return t;var n=(t=t.rgb()).r/255,e=t.g/255,r=t.b/255,i=Math.min(n,e,r),o=Math.max(n,e,r),a=NaN,u=o-i,s=(o+i)/2;return u?(a=n===o?(e-r)/u+6*(e0&&s<1?0:a,new xt(a,u,s,t.opacity)}function wt(t,n,e,r){return 1===arguments.length?mt(t):new xt(t,n,e,null==r?1:r)}function xt(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function bt(t,n,e){return 255*(t<60?n+(e-n)*t/60:t<180?e:t<240?n+(e-n)*(240-t)/60:n)}function Mt(t){if(t instanceof kt)return new kt(t.l,t.a,t.b,t.opacity);if(t instanceof Ut){var n=t.h*Ao;return new kt(t.l,Math.cos(n)*t.c,Math.sin(n)*t.c,t.opacity)}t instanceof vt||(t=gt(t));var e=St(t.r),r=St(t.g),i=St(t.b),o=Nt((.4124564*e+.3575761*r+.1804375*i)/No),a=Nt((.2126729*e+.7151522*r+.072175*i)/To);return new kt(116*a-16,500*(o-a),200*(a-Nt((.0193339*e+.119192*r+.9503041*i)/Co)),t.opacity)}function At(t,n,e,r){return 1===arguments.length?Mt(t):new kt(t,n,e,null==r?1:r)}function kt(t,n,e,r){this.l=+t,this.a=+n,this.b=+e,this.opacity=+r}function Nt(t){return t>Uo?Math.pow(t,1/3):t/Eo+So}function Tt(t){return t>Do?t*t*t:Eo*(t-So)}function Ct(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function St(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Dt(t){if(t instanceof Ut)return new Ut(t.h,t.c,t.l,t.opacity);t instanceof kt||(t=Mt(t));var n=Math.atan2(t.b,t.a)*ko;return new Ut(n<0?n+360:n,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function Et(t,n,e,r){return 1===arguments.length?Dt(t):new Ut(t,n,e,null==r?1:r)}function Ut(t,n,e,r){this.h=+t,this.c=+n,this.l=+e,this.opacity=+r}function Pt(t){if(t instanceof Ht)return new Ht(t.h,t.s,t.l,t.opacity);t instanceof vt||(t=gt(t));var n=t.r/255,e=t.g/255,r=t.b/255,i=(zo*r+Oo*n-jo*e)/(zo+Oo-jo),o=r-i,a=(Yo*(e-i)-Ho*o)/Lo,u=Math.sqrt(a*a+o*o)/(Yo*i*(1-i)),s=u?Math.atan2(a,o)*ko-120:NaN;return new Ht(s<0?s+360:s,u,i,t.opacity)}function Ft(t,n,e,r){return 1===arguments.length?Pt(t):new Ht(t,n,e,null==r?1:r)}function Ht(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function Lt(t,n){return function(e){return t+e*n}}function Yt(t,n,e){return t=Math.pow(t,e),n=Math.pow(n,e)-t,e=1/e,function(r){return Math.pow(t+r*n,e)}}function Ot(t,n){var e=n-t;return e?Lt(t,e>180||e<-180?e-360*Math.round(e/360):e):Bo(isNaN(t)?n:t)}function jt(t){return 1==(t=+t)?zt:function(n,e){return e-n?Yt(n,e,t):Bo(isNaN(n)?e:n)}}function zt(t,n){var e=n-t;return e?Lt(t,e):Bo(isNaN(t)?n:t)}function It(t){return function(){return t}}function qt(t){return function(n){return t(n)+""}}function $t(t){return"none"===t?ra:(Io||(Io=document.createElement("DIV"),qo=document.documentElement,$o=document.defaultView),Io.style.transform=t,t=$o.getComputedStyle(qo.appendChild(Io),null).getPropertyValue("transform"),qo.removeChild(Io),t=t.slice(7,-1).split(","),ia(+t[0],+t[1],+t[2],+t[3],+t[4],+t[5]))}function Xt(t){return null==t?ra:(Xo||(Xo=document.createElementNS("http://www.w3.org/2000/svg","g")),Xo.setAttribute("transform",t),(t=Xo.transform.baseVal.consolidate())?(t=t.matrix,ia(t.a,t.b,t.c,t.d,t.e,t.f)):ra)}function Bt(t,n,e,r){function i(t){return t.length?t.pop()+" ":""}function o(t,r,i,o,a,u){if(t!==i||r!==o){var s=a.push("translate(",null,n,null,e);u.push({i:s-4,x:Vo(t,i)},{i:s-2,x:Vo(r,o)})}else(i||o)&&a.push("translate("+i+n+o+e)}function a(t,n,e,o){t!==n?(t-n>180?n+=360:n-t>180&&(t+=360),o.push({i:e.push(i(e)+"rotate(",null,r)-2,x:Vo(t,n)})):n&&e.push(i(e)+"rotate("+n+r)}function u(t,n,e,o){t!==n?o.push({i:e.push(i(e)+"skewX(",null,r)-2,x:Vo(t,n)}):n&&e.push(i(e)+"skewX("+n+r)}function s(t,n,e,r,o,a){if(t!==e||n!==r){var u=o.push(i(o)+"scale(",null,",",null,")");a.push({i:u-4,x:Vo(t,e)},{i:u-2,x:Vo(n,r)})}else 1===e&&1===r||o.push(i(o)+"scale("+e+","+r+")")}return function(n,e){var r=[],i=[];return n=t(n),e=t(e),o(n.translateX,n.translateY,e.translateX,e.translateY,r,i),a(n.rotate,e.rotate,r,i),u(n.skewX,e.skewX,r,i),s(n.scaleX,n.scaleY,e.scaleX,e.scaleY,r,i),n=e=null,function(t){for(var n,e=-1,o=i.length;++e=0&&n._call.call(null,t),n=n._next;--la}function Qt(){ga=(da=va.now())+_a,la=ha=0;try{Jt()}finally{la=0,tn(),ga=0}}function Kt(){var t=va.now(),n=t-da;n>pa&&(_a-=n,da=t)}function tn(){for(var t,n,e=ua,r=1/0;e;)e._call?(r>e._time&&(r=e._time),t=e,e=e._next):(n=e._next,e._next=null,e=t?t._next=n:ua=n);sa=t,nn(r)}function nn(t){if(!la){ha&&(ha=clearTimeout(ha));var n=t-ga;n>24?(t<1/0&&(ha=setTimeout(Qt,n)),fa&&(fa=clearInterval(fa))):(fa||(da=ga,fa=setInterval(Kt,pa)),la=1,ya(Qt))}}function en(t,n){var e=t.__transition;if(!e||!(e=e[n])||e.state>ba)throw new Error("too late");return e}function rn(t,n){var e=t.__transition;if(!e||!(e=e[n])||e.state>Aa)throw new Error("too late");return e}function on(t,n){var e=t.__transition;if(!e||!(e=e[n]))throw new Error("too late");return e}function an(t,n,e){function r(t){e.state=Ma,e.timer.restart(i,e.delay,e.time),e.delay<=t&&i(t-e.delay)}function i(r){var c,l,h,f;if(e.state!==Ma)return a();for(c in s)if((f=s[c]).name===e.name){if(f.state===ka)return ma(i);f.state===Na?(f.state=Ca,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete s[c]):+c=0&&(t=t.slice(0,n)),!t||"start"===t})}function An(t,n,e){var r,i,o=Mn(n)?en:rn;return function(){var a=o(this,t),u=a.on;u!==r&&(i=(r=u).copy()).on(n,e),a.on=i}}function kn(t){return function(){var n=this.parentNode;for(var e in this.__transition)if(+e!==t)return;n&&n.removeChild(this)}}function Nn(t,n){var e,r,i;return function(){var o=Y(this,t),a=(this.style.removeProperty(t),Y(this,t));return o===a?null:o===e&&a===r?i:i=n(e=o,r=a)}}function Tn(t){return function(){this.style.removeProperty(t)}}function Cn(t,n,e){var r,i;return function(){var o=Y(this,t);return o===e?null:o===r?i:i=n(r=o,e)}}function Sn(t,n,e){var r,i,o;return function(){var a=Y(this,t),u=e(this);return null==u&&(this.style.removeProperty(t),u=Y(this,t)),a===u?null:a===r&&u===i?o:o=n(r=a,i=u)}}function Dn(t,n,e){function r(){var r=this,i=n.apply(r,arguments);return i&&function(n){r.style.setProperty(t,i(n),e)}}return r._value=n,r}function En(t){return function(){this.textContent=t}}function Un(t){return function(){var n=t(this);this.textContent=null==n?"":n}}function Pn(t,n,e,r){this._groups=t,this._parents=n,this._name=e,this._id=r}function Fn(t){return ct().transition(t)}function Hn(){return++Ja}function Ln(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}function Yn(t,n){for(var e;!(e=t.__transition)||!(e=e[n]);)if(!(t=t.parentNode))return tu.time=Wt(),tu;return e}function On(t){return{type:t}}function jn(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function zn(){return new jn}function In(){}function qn(t,n){var e=new In;if(t instanceof In)t.each(function(t,n){e.set(n,t)});else if(Array.isArray(t)){var r,i=-1,o=t.length;if(null==n)for(;++i=(o=(g+v)/2))?g=o:v=o,(l=e>=(a=(_+y)/2))?_=a:y=a,i=p,!(p=p[h=l<<1|c]))return i[h]=d,t;if(u=+t._x.call(null,p.data),s=+t._y.call(null,p.data),n===u&&e===s)return d.next=p,i?i[h]=d:t._root=d,t;do{i=i?i[h]=new Array(4):t._root=new Array(4),(c=n>=(o=(g+v)/2))?g=o:v=o,(l=e>=(a=(_+y)/2))?_=a:y=a}while((h=l<<1|c)==(f=(s>=a)<<1|u>=o));return i[f]=p,i[h]=d,t}function Vn(t){var n,e,r,i,o=t.length,a=new Array(o),u=new Array(o),s=1/0,c=1/0,l=-1/0,h=-1/0;for(e=0;el&&(l=r),ih&&(h=i));for(l",i=n[3]||"-",o=n[4]||"",a=!!n[5],u=n[6]&&+n[6],s=!!n[7],c=n[8]&&+n[8].slice(1),l=n[9]||"";"n"===l?(s=!0,l="g"):Tu[l]||(l=""),(a||"0"===e&&"="===r)&&(a=!0,e="0",r="="),this.fill=e,this.align=r,this.sign=i,this.symbol=o,this.zero=a,this.width=u,this.comma=s,this.precision=c,this.type=l}function ie(){this.reset()}function oe(t,n,e){var r=t.s=n+e,i=r-n,o=r-i;t.t=n-o+(e-i)}function ae(t){return t>1?0:t<-1?zu:Math.acos(t)}function ue(t){return t>1?Iu:t<-1?-Iu:Math.asin(t)}function se(t){return function(n,e){var r=Xu(n),i=Xu(e),o=t(r*i);return[o*i*Bu(n),o*Bu(e)]}}function ce(t){return function(n,e){var r=Ru(n*n+e*e),i=t(r),o=Bu(i),a=Xu(i);return[$u(n*o,r*a),ue(r&&e*o/r)]}}function le(t){var n=0,e=t.children,r=e&&e.length;if(r)for(;--r>=0;)n+=e[r].value;else n=1;t.value=n}function he(t,n){if(t===n)return t;var e=t.ancestors(),r=n.ancestors(),i=null;for(t=e.pop(),n=r.pop();t===n;)i=t,t=e.pop(),n=r.pop();return i}function fe(t,n){var e,r,i,o,a,u=new ve(t),s=+t.value&&(u.value=t.value),c=[u];for(null==n&&(n=de);e=c.pop();)if(s&&(e.value=+e.data.value),(i=n(e.data))&&(a=i.length))for(e.children=new Array(a),o=a-1;o>=0;--o)c.push(r=e.children[o]=new ve(i[o])),r.parent=e,r.depth=e.depth+1;return u.eachBefore(_e)}function pe(){return fe(this).eachBefore(ge)}function de(t){return t.children}function ge(t){t.data=t.data.data}function _e(t){var n=0;do{t.height=n}while((t=t.parent)&&t.height<++n)}function ve(t){this.data=t,this.depth=this.height=0,this.parent=null}function ye(t,n){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=n}function me(t){if(!t._start)try{we(t)}catch(n){if(t._tasks[t._ended+t._active-1])be(t,n);else if(!t._data)throw n}}function we(t){for(;t._start=t._waiting&&t._active=0;)if((e=t._tasks[r])&&(t._tasks[r]=null,e.abort))try{e.abort()}catch(n){}t._active=NaN,Me(t)}function Me(t){if(!t._active&&t._call){var n=t._data;t._data=void 0,t._call(t._error,n)}}function Ae(t,n){return(n-=t=+t)?function(e){return(e-t)/n}:ss(n)}function ke(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=n?0:t>=e?1:r(t)}}}function Ne(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=0?n:t>=1?e:r(t)}}}function Te(t,n,e,r){var i=t[0],o=t[1],a=n[0],u=n[1];return o2?Ce:Te,o=a=null,r}function r(n){return(o||(o=i(u,s,l?ke(t):t,c)))(+n)}var i,o,a,u=ls,s=ls,c=ta,l=!1;return r.invert=function(t){return(a||(a=i(s,u,Ae,l?Ne(n):n)))(+t)},r.domain=function(t){return arguments.length?(u=as.call(t,cs),e()):u.slice()},r.range=function(t){return arguments.length?(s=us.call(t),e()):s.slice()},r.rangeRound=function(t){return s=us.call(t),c=na,e()},r.clamp=function(t){return arguments.length?(l=!!t,e()):l},r.interpolate=function(t){return arguments.length?(c=t,e()):c},e()}function Ee(t){var e=t.domain;return t.ticks=function(t){var n=e();return ai(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){return hs(e(),t,n)},t.nice=function(r){null==r&&(r=10);var i,o=e(),a=0,u=o.length-1,s=o[a],c=o[u];return c0?i=n(s=Math.floor(s/i)*i,c=Math.ceil(c/i)*i,r):i<0&&(i=n(s=Math.ceil(s*i)/i,c=Math.floor(c*i)/i,r)),i>0?(o[a]=Math.floor(s/i)*i,o[u]=Math.ceil(c/i)*i,e(o)):i<0&&(o[a]=Math.ceil(s*i)/i,o[u]=Math.floor(c*i)/i,e(o)),t},t}function Ue(){var t=De(Ae,Vo);return t.copy=function(){return Se(t,Ue())},Ee(t)}function Pe(t,n,e,r){function i(n){return t(n=new Date(+n)),n}return i.floor=i,i.ceil=function(e){return t(e=new Date(e-1)),n(e,1),t(e),e},i.round=function(t){var n=i(t),e=i.ceil(t);return t-n0))return a;do{a.push(new Date(+e))}while(n(e,o),t(e),e=n)for(;t(n),!e(n);)n.setTime(n-1)},function(t,r){if(t>=t)for(;--r>=0;)for(;n(t,1),!e(t););})},e&&(i.count=function(n,r){return ps.setTime(+n),ds.setTime(+r),t(ps),t(ds),Math.floor(e(ps,ds))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(n){return r(n)%t==0}:function(n){return i.count(0,n)%t==0}):i:null}),i}function Fe(t){return Pe(function(n){n.setDate(n.getDate()-(n.getDay()+7-t)%7),n.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+7*n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*_s)/vs})}function He(t){return Pe(function(n){n.setUTCDate(n.getUTCDate()-(n.getUTCDay()+7-t)%7),n.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+7*n)},function(t,n){return(n-t)/vs})}function Le(t){if(0<=t.y&&t.y<100){var n=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return n.setFullYear(t.y),n}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Ye(t){if(0<=t.y&&t.y<100){var n=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return n.setUTCFullYear(t.y),n}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Oe(t){return{y:t,m:0,d:1,H:0,M:0,S:0,L:0}}function je(t){function n(t,n){return function(e){var r,i,o,a=[],u=-1,s=0,c=t.length;for(e instanceof Date||(e=new Date(+e));++u=s)return-1;if(37===(i=n.charCodeAt(a++))){if(i=n.charAt(a++),!(o=q[i in Hs?n.charAt(a++):i])||(r=o(t,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function i(t,n,e){var r=D.exec(n.slice(e));return r?(t.p=E[r[0].toLowerCase()],e+r[0].length):-1}function o(t,n,e){var r=F.exec(n.slice(e));return r?(t.w=H[r[0].toLowerCase()],e+r[0].length):-1}function a(t,n,e){var r=U.exec(n.slice(e));return r?(t.w=P[r[0].toLowerCase()],e+r[0].length):-1}function u(t,n,e){var r=O.exec(n.slice(e));return r?(t.m=j[r[0].toLowerCase()],e+r[0].length):-1}function s(t,n,e){var r=L.exec(n.slice(e));return r?(t.m=Y[r[0].toLowerCase()],e+r[0].length):-1}function c(t,n,e){return r(t,b,n,e)}function l(t,n,e){return r(t,M,n,e)}function h(t,n,e){return r(t,A,n,e)}function f(t){return T[t.getDay()]}function p(t){return N[t.getDay()]}function d(t){return S[t.getMonth()]}function g(t){return C[t.getMonth()]}function _(t){return k[+(t.getHours()>=12)]}function v(t){return T[t.getUTCDay()]}function y(t){return N[t.getUTCDay()]}function m(t){return S[t.getUTCMonth()]}function w(t){return C[t.getUTCMonth()]}function x(t){return k[+(t.getUTCHours()>=12)]}var b=t.dateTime,M=t.date,A=t.time,k=t.periods,N=t.days,T=t.shortDays,C=t.months,S=t.shortMonths,D=qe(k),E=$e(k),U=qe(N),P=$e(N),F=qe(T),H=$e(T),L=qe(C),Y=$e(C),O=qe(S),j=$e(S),z={a:f,A:p,b:d,B:g,c:null,d:ir,e:ir,H:or,I:ar,j:ur,L:sr,m:cr,M:lr,p:_,S:hr,U:fr,w:pr,W:dr,x:null,X:null,y:gr,Y:_r,Z:vr,"%":Ur},I={a:v,A:y,b:m,B:w,c:null,d:yr,e:yr,H:mr,I:wr,j:xr,L:br,m:Mr,M:Ar,p:x,S:kr,U:Nr,w:Tr,W:Cr,x:null,X:null,y:Sr,Y:Dr,Z:Er,"%":Ur},q={a:o,A:a,b:u,B:s,c:c,d:Je,e:Je,H:Ke,I:Ke,j:Qe,L:er,m:Ge,M:tr,p:i,S:nr,U:Be,w:Xe,W:Re,x:l,X:h,y:Ze,Y:We,Z:Ve,"%":rr};return z.x=n(M,z),z.X=n(A,z),z.c=n(b,z),I.x=n(M,I),I.X=n(A,I),I.c=n(b,I),{format:function(t){var e=n(t+="",z);return e.toString=function(){return t},e},parse:function(t){var n=e(t+="",Le);return n.toString=function(){return t},n},utcFormat:function(t){var e=n(t+="",I);return e.toString=function(){return t},e},utcParse:function(t){var n=e(t,Ye);return n.toString=function(){return t},n}}}function ze(t,n,e){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o68?1900:2e3),e+r[0].length):-1}function Ve(t,n,e){var r=/^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(n.slice(e,e+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),e+r[0].length):-1}function Ge(t,n,e){var r=Ls.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function Je(t,n,e){var r=Ls.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function Qe(t,n,e){var r=Ls.exec(n.slice(e,e+3));return r?(t.m=0,t.d=+r[0],e+r[0].length):-1}function Ke(t,n,e){var r=Ls.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function tr(t,n,e){var r=Ls.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function nr(t,n,e){var r=Ls.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function er(t,n,e){var r=Ls.exec(n.slice(e,e+3));return r?(t.L=+r[0],e+r[0].length):-1}function rr(t,n,e){var r=Ys.exec(n.slice(e,e+1));return r?e+r[0].length:-1}function ir(t,n){return ze(t.getDate(),n,2)}function or(t,n){return ze(t.getHours(),n,2)}function ar(t,n){return ze(t.getHours()%12||12,n,2)}function ur(t,n){return ze(1+xs.count(ks(t),t),n,3)}function sr(t,n){return ze(t.getMilliseconds(),n,3)}function cr(t,n){return ze(t.getMonth()+1,n,2)}function lr(t,n){return ze(t.getMinutes(),n,2)}function hr(t,n){return ze(t.getSeconds(),n,2)}function fr(t,n){return ze(bs.count(ks(t),t),n,2)}function pr(t){return t.getDay()}function dr(t,n){return ze(Ms.count(ks(t),t),n,2)}function gr(t,n){return ze(t.getFullYear()%100,n,2)}function _r(t,n){return ze(t.getFullYear()%1e4,n,4)}function vr(t){var n=t.getTimezoneOffset();return(n>0?"-":(n*=-1,"+"))+ze(n/60|0,"0",2)+ze(n%60,"0",2)}function yr(t,n){return ze(t.getUTCDate(),n,2)}function mr(t,n){return ze(t.getUTCHours(),n,2)}function wr(t,n){return ze(t.getUTCHours()%12||12,n,2)}function xr(t,n){return ze(1+Ns.count(Ss(t),t),n,3)}function br(t,n){return ze(t.getUTCMilliseconds(),n,3)}function Mr(t,n){return ze(t.getUTCMonth()+1,n,2)}function Ar(t,n){return ze(t.getUTCMinutes(),n,2)}function kr(t,n){return ze(t.getUTCSeconds(),n,2)}function Nr(t,n){return ze(Ts.count(Ss(t),t),n,2)}function Tr(t){return t.getUTCDay()}function Cr(t,n){return ze(Cs.count(Ss(t),t),n,2)}function Sr(t,n){return ze(t.getUTCFullYear()%100,n,2)}function Dr(t,n){return ze(t.getUTCFullYear()%1e4,n,4)}function Er(){return"+0000"}function Ur(){return"%"}function Pr(t){return t.toISOString()}function Fr(t){var n=new Date(t);return isNaN(n)?null:n}function Hr(t){return new Date(t)}function Lr(t){return t instanceof Date?+t:+new Date(+t)}function Yr(t,n,r,i,o,a,u,s,c){function l(e){return(u(e)n?1:t>=n?0:NaN},ni=function(n){return 1===n.length&&(n=t(n)),{left:function(t,e,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;n(t[o],e)<0?r=o+1:i=o}return r},right:function(t,e,r,i){for(null==r&&(r=0),null==i&&(i=t.length);r>>1;n(t[o],e)>0?i=o:r=o+1}return r}}},ei=ni(ti).right,ri=Math.sqrt(50),ii=Math.sqrt(10),oi=Math.sqrt(2),ai=function(t,e,r){var i,o,a,u=e0)for(t=Math.ceil(t/a),e=Math.floor(e/a),o=new Array(i=Math.ceil(e-t+1));++s=e)for(r=e;++or&&(r=e)}else for(;++o=e)for(r=e;++or&&(r=e);return r},si=function(t,n){var e,r,i=t.length,o=-1;if(null==n){for(;++o=e)for(r=e;++oe&&(r=e)}else for(;++o=e)for(r=e;++oe&&(r=e);return r},ci=Array.prototype.slice,li=function(t){return t},hi=1,fi=2,pi=3,di=4,gi=1e-6,_i={value:function(){}};h.prototype=l.prototype={constructor:h,on:function(t,n){var e,r=this._,i=f(t+"",r),o=-1,a=i.length;{if(!(arguments.length<2)){if(null!=n&&"function"!=typeof n)throw new Error("invalid callback: "+n);for(;++o0)for(var e,r,i=new Array(e),o=0;o=0&&"xmlns"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),yi.hasOwnProperty(n)?{space:yi[n],local:t}:t},wi=function(t){var n=mi(t);return(n.local?_:g)(n)},xi=function(t){return function(){return this.matches(t)}};if("undefined"!=typeof document){var bi=document.documentElement;if(!bi.matches){var Mi=bi.webkitMatchesSelector||bi.msMatchesSelector||bi.mozMatchesSelector||bi.oMatchesSelector;xi=function(t){return function(){return Mi.call(this,t)}}}}var Ai=xi,ki={},Ni=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(ki={mouseenter:"mouseover",mouseleave:"mouseout"}));var Ti=function(t,n,e){var r,i,o=m(t+""),a=o.length;{if(!(arguments.length<2)){for(u=n?x:w,null==e&&(e=!1),r=0;r=w&&(w=m+1);!(y=_[w])&&++w=0;)(r=i[o])&&(a&&a!==r.nextSibling&&a.parentNode.insertBefore(r,a),a=r);return this},Ii=function(t){function n(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}t||(t=T);for(var e=this._groups,r=e.length,i=new Array(r),o=0;o1?this.each((null==n?F:"function"==typeof n?L:H)(t,n,null==e?"":e)):Y(this.node(),t)},Ji=function(t,n){return arguments.length>1?this.each((null==n?O:"function"==typeof n?z:j)(t,n)):this.node()[t]};$.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var n=this._names.indexOf(t);n>=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Qi=function(t,n){var e=I(t+"");if(arguments.length<2){for(var r=q(this.node()),i=-1,o=e.length;++i=240?t-240:t+120,i,r),bt(t,i,r),bt(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var Ao=Math.PI/180,ko=180/Math.PI,No=.95047,To=1,Co=1.08883,So=4/29,Do=6/29,Eo=3*Do*Do,Uo=Do*Do*Do;lo(kt,At,lt(ht,{brighter:function(t){return new kt(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new kt(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,n=isNaN(this.a)?t:t+this.a/500,e=isNaN(this.b)?t:t-this.b/200;return t=To*Tt(t),n=No*Tt(n),e=Co*Tt(e),new vt(Ct(3.2404542*n-1.5371385*t-.4985314*e),Ct(-.969266*n+1.8760108*t+.041556*e),Ct(.0556434*n-.2040259*t+1.0572252*e),this.opacity)}})),lo(Ut,Et,lt(ht,{brighter:function(t){return new Ut(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new Ut(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return Mt(this).rgb()}}));var Po=-.14861,Fo=1.78277,Ho=-.29227,Lo=-.90649,Yo=1.97294,Oo=Yo*Lo,jo=Yo*Fo,zo=Fo*Ho-Lo*Po;lo(Ht,Ft,lt(ht,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Ht(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Ht(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*Ao,n=+this.l,e=isNaN(this.s)?0:this.s*n*(1-n),r=Math.cos(t),i=Math.sin(t);return new vt(255*(n+e*(Po*r+Fo*i)),255*(n+e*(Ho*r+Lo*i)),255*(n+e*(Yo*r)),this.opacity)}}));var Io,qo,$o,Xo,Bo=function(t){return function(){return t}},Ro=function t(n){function e(t,n){var e=r((t=_t(t)).r,(n=_t(n)).r),i=r(t.g,n.g),o=r(t.b,n.b),a=zt(t.opacity,n.opacity);return function(n){return t.r=e(n),t.g=i(n),t.b=o(n),t.opacity=a(n),t+""}}var r=jt(n);return e.gamma=t,e}(1),Wo=function(t,n){var e,r=n?n.length:0,i=t?Math.min(r,t.length):0,o=new Array(r),a=new Array(r);for(e=0;eo&&(i=n.slice(o,i),u[a]?u[a]+=i:u[++a]=i),(e=e[0])===(r=r[0])?u[a]?u[a]+=r:u[++a]=r:(u[++a]=null,s.push({i:a,x:Vo(e,r)})),o=Qo.lastIndex;return oAa&&e.state1e-6)if(Math.abs(l*u-s*c)>1e-6&&i){var f=e-o,p=r-a,d=u*u+s*s,g=f*f+p*p,_=Math.sqrt(d),v=Math.sqrt(h),y=i*Math.tan((eu-Math.acos((d+h-g)/(2*_*v)))/2),m=y/v,w=y/_;Math.abs(m-1)>1e-6&&(this._+="L"+(t+m*c)+","+(n+m*l)),this._+="A"+i+","+i+",0,0,"+ +(l*f>c*p)+","+(this._x1=t+w*u)+","+(this._y1=n+w*s)}else this._+="L"+(this._x1=t)+","+(this._y1=n);else;},arc:function(t,n,e,r,i,o){t=+t,n=+n;var a=(e=+e)*Math.cos(r),u=e*Math.sin(r),s=t+a,c=n+u,l=1^o,h=o?r-i:i-r;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._+="M"+s+","+c:(Math.abs(this._x1-s)>1e-6||Math.abs(this._y1-c)>1e-6)&&(this._+="L"+s+","+c),e&&(h<0&&(h=h%ru+ru),h>iu?this._+="A"+e+","+e+",0,1,"+l+","+(t-a)+","+(n-u)+"A"+e+","+e+",0,1,"+l+","+(this._x1=s)+","+(this._y1=c):h>1e-6&&(this._+="A"+e+","+e+",0,"+ +(h>=eu)+","+l+","+(this._x1=t+e*Math.cos(i))+","+(this._y1=n+e*Math.sin(i))))},rect:function(t,n,e,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+n)+"h"+ +e+"v"+ +r+"h"+-e+"Z"},toString:function(){return this._}};In.prototype=qn.prototype={constructor:In,has:function(t){return"$"+t in this},get:function(t){return this["$"+t]},set:function(t,n){return this["$"+t]=n,this},remove:function(t){var n="$"+t;return n in this&&delete this[n]},clear:function(){for(var t in this)"$"===t[0]&&delete this[t]},keys:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(n.slice(1));return t},values:function(){var t=[];for(var n in this)"$"===n[0]&&t.push(this[n]);return t},entries:function(){var t=[];for(var n in this)"$"===n[0]&&t.push({key:n.slice(1),value:this[n]});return t},size:function(){var t=0;for(var n in this)"$"===n[0]&&++t;return t},empty:function(){for(var t in this)if("$"===t[0])return!1;return!0},each:function(t){for(var n in this)"$"===n[0]&&t(this[n],n.slice(1),this)}};var ou=qn.prototype;$n.prototype=Xn.prototype={constructor:$n,has:ou.has,add:function(t){return t+="",this["$"+t]=t,this},remove:ou.remove,clear:ou.clear,values:ou.keys,size:ou.size,empty:ou.empty,each:ou.each};var au=function(t){function n(t,n){var r,i,o=e(t,function(t,e){if(r)return r(t,e-1);i=t,r=n?Rn(t,n):Bn(t)});return o.columns=i,o}function e(t,n){function e(){if(l>=c)return a;if(i)return i=!1,o;var n,e=l;if(34===t.charCodeAt(e)){for(var r=e;r++t||t>i||r>n||n>o))return this;var a,u,s=i-e,c=this._root;switch(u=(n<(r+o)/2)<<1|t<(e+i)/2){case 0:do{a=new Array(4),a[u]=c,c=a}while(s*=2,i=e+s,o=r+s,t>i||n>o);break;case 1:do{a=new Array(4),a[u]=c,c=a}while(s*=2,e=i-s,o=r+s,e>t||n>o);break;case 2:do{a=new Array(4),a[u]=c,c=a}while(s*=2,i=e+s,r=o-s,t>i||r>n);break;case 3:do{a=new Array(4),a[u]=c,c=a}while(s*=2,e=i-s,r=o-s,e>t||r>n)}this._root&&this._root.length&&(this._root=c)}return this._x0=e,this._y0=r,this._x1=i,this._y1=o,this},cu=function(){var t=[];return this.visit(function(n){if(!n.length)do{t.push(n.data)}while(n=n.next)}),t},lu=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},hu=function(t,n,e,r,i){this.node=t,this.x0=n,this.y0=e,this.x1=r,this.y1=i},fu=function(t,n,e){var r,i,o,a,u,s,c,l=this._x0,h=this._y0,f=this._x1,p=this._y1,d=[],g=this._root;for(g&&d.push(new hu(g,l,h,f,p)),null==e?e=1/0:(l=t-e,h=n-e,f=t+e,p=n+e,e*=e);s=d.pop();)if(!(!(g=s.node)||(i=s.x0)>f||(o=s.y0)>p||(a=s.x1)=v)<<1|t>=_)&&(s=d[d.length-1],d[d.length-1]=d[d.length-1-c],d[d.length-1-c]=s)}else{var y=t-+this._x.call(null,g.data),m=n-+this._y.call(null,g.data),w=y*y+m*m;if(w=(u=(d+_)/2))?d=u:_=u,(l=a>=(s=(g+v)/2))?g=s:v=s,n=p,!(p=p[h=l<<1|c]))return this;if(!p.length)break;(n[h+1&3]||n[h+2&3]||n[h+3&3])&&(e=n,f=h)}for(;p.data!==t;)if(r=p,!(p=p.next))return this;return(i=p.next)&&delete p.next,r?(i?r.next=i:delete r.next,this):n?(i?n[h]=i:delete n[h],(p=n[0]||n[1]||n[2]||n[3])&&p===(n[3]||n[2]||n[1]||n[0])&&!p.length&&(e?e[f]=p:this._root=p),this):(this._root=i,this)},du=function(){return this._root},gu=function(){var t=0;return this.visit(function(n){if(!n.length)do{++t}while(n=n.next)}),t},_u=function(t){var n,e,r,i,o,a,u=[],s=this._root;for(s&&u.push(new hu(s,this._x0,this._y0,this._x1,this._y1));n=u.pop();)if(!t(s=n.node,r=n.x0,i=n.y0,o=n.x1,a=n.y1)&&s.length){var c=(r+o)/2,l=(i+a)/2;(e=s[3])&&u.push(new hu(e,c,l,o,a)),(e=s[2])&&u.push(new hu(e,r,l,c,a)),(e=s[1])&&u.push(new hu(e,c,i,o,l)),(e=s[0])&&u.push(new hu(e,r,i,c,l))}return this},vu=function(t){var n,e=[],r=[];for(this._root&&e.push(new hu(this._root,this._x0,this._y0,this._x1,this._y1));n=e.pop();){var i=n.node;if(i.length){var o,a=n.x0,u=n.y0,s=n.x1,c=n.y1,l=(a+s)/2,h=(u+c)/2;(o=i[0])&&e.push(new hu(o,a,u,l,h)),(o=i[1])&&e.push(new hu(o,l,u,s,h)),(o=i[2])&&e.push(new hu(o,a,h,l,c)),(o=i[3])&&e.push(new hu(o,l,h,s,c))}r.push(n)}for(;n=r.pop();)t(n.node,n.x0,n.y0,n.x1,n.y1);return this},yu=function(t){return arguments.length?(this._x=t,this):this._x},mu=function(t){return arguments.length?(this._y=t,this):this._y},wu=Kn.prototype=te.prototype;wu.copy=function(){var t,n,e=new te(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return e;if(!r.length)return e._root=ne(r),e;for(t=[{source:r,target:e._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(n=r.source[i])&&(n.length?t.push({source:n,target:r.target[i]=new Array(4)}):r.target[i]=ne(n));return e},wu.add=uu,wu.addAll=Vn,wu.cover=su,wu.data=cu,wu.extent=lu,wu.find=fu,wu.remove=pu,wu.removeAll=Gn,wu.root=du,wu.size=gu,wu.visit=_u,wu.visitAfter=vu,wu.x=yu,wu.y=mu;var xu,bu=function(t,n){if((e=(t=n?t.toExponential(n-1):t.toExponential()).indexOf("e"))<0)return null;var e,r=t.slice(0,e);return[r.length>1?r[0]+r.slice(2):r,+t.slice(e+1)]},Mu=function(t){return t=bu(Math.abs(t)),t?t[1]:NaN},Au=function(t,n){return function(e,r){for(var i=e.length,o=[],a=0,u=t[0],s=0;i>0&&u>0&&(s+u+1>r&&(u=Math.max(1,r-s)),o.push(e.substring(i-=u,i+u)),!((s+=u+1)>r));)u=t[a=(a+1)%t.length];return o.reverse().join(n)}},ku=function(t){return function(n){return n.replace(/[0-9]/g,function(n){return t[+n]})}},Nu=function(t,n){var e=bu(t,n);if(!e)return t+"";var r=e[0],i=e[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")},Tu={"":function(t,n){t:for(var e,r=(t=t.toPrecision(n)).length,i=1,o=-1;i0&&(o=0)}return o>0?t.slice(0,o)+t.slice(e+1):t},"%":function(t,n){return(100*t).toFixed(n)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},g:function(t,n){return t.toPrecision(n)},o:function(t){return Math.round(t).toString(8)},p:function(t,n){return Nu(100*t,n)},r:Nu,s:function(t,n){var e=bu(t,n);if(!e)return t+"";var r=e[0],i=e[1],o=i-(xu=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+bu(t,Math.max(0,n+o-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},Cu=/^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;ee.prototype=re.prototype,re.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+this.type};var Su,Du,Eu,Uu=function(t){return t},Pu=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],Fu=function(t){function n(t){function n(t){var n,i,u,l=_,w=v;if("c"===g)w=y(t)+w,t="";else{var x=(t=+t)<0;if(t=y(Math.abs(t),d),x&&0==+t&&(x=!1),l=(x?"("===c?c:"-":"-"===c||"("===c?"":c)+l,w=w+("s"===g?Pu[8+xu/3]:"")+(x&&"("===c?")":""),m)for(n=-1,i=t.length;++n(u=t.charCodeAt(n))||u>57){w=(46===u?o+t.slice(n+1):t.slice(n))+w,t=t.slice(0,n);break}}p&&!h&&(t=r(t,1/0));var b=l.length+t.length+w.length,M=b>1)+l+t+w+M.slice(b);break;default:t=M+l+t+w}return a(t)}var e=(t=ee(t)).fill,s=t.align,c=t.sign,l=t.symbol,h=t.zero,f=t.width,p=t.comma,d=t.precision,g=t.type,_="$"===l?i[0]:"#"===l&&/[boxX]/.test(g)?"0"+g.toLowerCase():"",v="$"===l?i[1]:/[%p]/.test(g)?u:"",y=Tu[g],m=!g||/[defgprs%]/.test(g);return d=null==d?g?6:12:/[gprs]/.test(g)?Math.max(1,Math.min(21,d)):Math.max(0,Math.min(20,d)),n.toString=function(){return t+""},n}function e(t,e){var r=n((t=ee(t),t.type="f",t)),i=3*Math.max(-8,Math.min(8,Math.floor(Mu(e)/3))),o=Math.pow(10,-i),a=Pu[8+i/3];return function(t){return r(o*t)+a}}var r=t.grouping&&t.thousands?Au(t.grouping,t.thousands):Uu,i=t.currency,o=t.decimal,a=t.numerals?ku(t.numerals):Uu,u=t.percent||"%";return{format:n,formatPrefix:e}};!function(t){Su=Fu(t),Du=Su.format,Eu=Su.formatPrefix}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var Hu=function(t){return Math.max(0,-Mu(Math.abs(t)))},Lu=function(t,n){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Mu(n)/3)))-Mu(Math.abs(t)))},Yu=function(t,n){return t=Math.abs(t),n=Math.abs(n)-t,Math.max(0,Mu(n)-Mu(t))+1},Ou=function(){return new ie};ie.prototype={constructor:ie,reset:function(){this.s=this.t=0},add:function(t){oe(ju,t,this.t),oe(this,ju.s,this.s),this.s?this.t+=ju.t:this.s=ju.t},valueOf:function(){return this.s}};var ju=new ie,zu=Math.PI,Iu=zu/2,qu=zu/180,$u=(Math.abs,Math.atan2),Xu=Math.cos,Bu=Math.sin,Ru=Math.sqrt;Ou(),Ou(),Ou(),Ou(),Ou(),Ou(),Ou(),Ou(),Xu(30*qu);se(function(t){return Ru(2/(1+t))}).invert=ce(function(t){return 2*ue(t/2)}),se(function(t){return(t=ae(t))&&t/Bu(t)}).invert=ce(function(t){return t});var Wu=function(){return this.eachAfter(le)},Zu=function(t){var n,e,r,i,o=this,a=[o];do{for(n=a.reverse(),a=[];o=n.pop();)if(t(o),e=o.children)for(r=0,i=e.length;r=0;--e)i.push(n[e]);return this},Gu=function(t){for(var n,e,r,i=this,o=[i],a=[];i=o.pop();)if(a.push(i),n=i.children)for(e=0,r=n.length;e=0;)e+=r[i].value;n.value=e})},Qu=function(t){return this.eachBefore(function(n){n.children&&n.children.sort(t)})},Ku=function(t){for(var n=this,e=he(n,t),r=[n];n!==e;)n=n.parent,r.push(n);for(var i=r.length;t!==e;)r.splice(i,0,t),t=t.parent;return r},ts=function(){for(var t=this,n=[t];t=t.parent;)n.push(t);return n},ns=function(){var t=[];return this.each(function(n){t.push(n)}),t},es=function(){var t=[];return this.eachBefore(function(n){n.children||t.push(n)}),t},rs=function(){var t=this,n=[];return t.each(function(e){e!==t&&n.push({source:e.parent,target:e})}),n};ve.prototype=fe.prototype={constructor:ve,count:Wu,each:Zu,eachAfter:Gu,eachBefore:Vu,sum:Ju,sort:Qu,path:Ku,ancestors:ts,descendants:ns,leaves:es,links:rs,copy:pe};ye.prototype=Object.create(ve.prototype);var is={},os=Array.prototype,as=os.map,us=os.slice,ss=function(t){return function(){return t}},cs=function(t){return+t},ls=[0,1],hs=function(t,n,r){var i,o=t[0],a=t[t.length-1],u=e(o,a,null==n?10:n);switch((r=ee(null==r?",f":r)).type){case"s":var s=Math.max(Math.abs(o),Math.abs(a));return null!=r.precision||isNaN(i=Lu(u,s))||(r.precision=i),Eu(r,s);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=Yu(u,Math.max(Math.abs(o),Math.abs(a))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=Hu(u))||(r.precision=i-2*("%"===r.type))}return Du(r)},fs=function(t,n){var e,r=0,i=(t=t.slice()).length-1,o=t[r],a=t[i];return a0?t>1?Pe(function(n){n.setTime(Math.floor(n/t)*t)},function(n,e){n.setTime(+n+e*t)},function(n,e){return(e-n)/t}):gs:null};var _s=6e4,vs=6048e5,ys=Pe(function(t){t.setTime(1e3*Math.floor(t/1e3))},function(t,n){t.setTime(+t+1e3*n)},function(t,n){return(n-t)/1e3},function(t){return t.getUTCSeconds()}),ms=Pe(function(t){t.setTime(Math.floor(t/_s)*_s)},function(t,n){t.setTime(+t+n*_s)},function(t,n){return(n-t)/_s},function(t){return t.getMinutes()}),ws=Pe(function(t){var n=t.getTimezoneOffset()*_s%36e5;n<0&&(n+=36e5),t.setTime(36e5*Math.floor((+t-n)/36e5)+n)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getHours()}),xs=Pe(function(t){t.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*_s)/864e5},function(t){return t.getDate()-1}),bs=Fe(0),Ms=Fe(1),As=(Fe(2),Fe(3),Fe(4),Fe(5),Fe(6),Pe(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,n){t.setMonth(t.getMonth()+n)},function(t,n){return n.getMonth()-t.getMonth()+12*(n.getFullYear()-t.getFullYear())},function(t){return t.getMonth()})),ks=Pe(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n)},function(t,n){return n.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});ks.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Pe(function(n){n.setFullYear(Math.floor(n.getFullYear()/t)*t),n.setMonth(0,1),n.setHours(0,0,0,0)},function(n,e){n.setFullYear(n.getFullYear()+e*t)}):null};Pe(function(t){t.setUTCSeconds(0,0)},function(t,n){t.setTime(+t+n*_s)},function(t,n){return(n-t)/_s},function(t){return t.getUTCMinutes()}),Pe(function(t){t.setUTCMinutes(0,0,0)},function(t,n){t.setTime(+t+36e5*n)},function(t,n){return(n-t)/36e5},function(t){return t.getUTCHours()});var Ns=Pe(function(t){t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+n)},function(t,n){return(n-t)/864e5},function(t){return t.getUTCDate()-1}),Ts=He(0),Cs=He(1),Ss=(He(2),He(3),He(4),He(5),He(6),Pe(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCMonth(t.getUTCMonth()+n)},function(t,n){return n.getUTCMonth()-t.getUTCMonth()+12*(n.getUTCFullYear()-t.getUTCFullYear())},function(t){return t.getUTCMonth()}),Pe(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n)},function(t,n){return n.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()}));Ss.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Pe(function(n){n.setUTCFullYear(Math.floor(n.getUTCFullYear()/t)*t),n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0)},function(n,e){n.setUTCFullYear(n.getUTCFullYear()+e*t)}):null};var Ds,Es,Us,Ps,Fs,Hs={"-":"",_:" ",0:"0"},Ls=/^\s*\d+/,Ys=/^%/,Os=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;!function(t){Ds=je(t),Es=Ds.format,Us=Ds.parse,Ps=Ds.utcFormat,Fs=Ds.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});Date.prototype.toISOString||Ps("%Y-%m-%dT%H:%M:%S.%LZ"),+new Date("2000-01-01T00:00:00.000Z")||Fs("%Y-%m-%dT%H:%M:%S.%LZ");var js=1e3,zs=60*js,Is=60*zs,qs=24*Is,$s=7*qs,Xs=30*qs,Bs=365*qs,Rs=function(){return Yr(ks,As,bs,xs,ws,ms,ys,gs,Es).domain([new Date(2e3,0,1),new Date(2e3,0,2)])},Ws=function(t){return t.match(/.{6}/g).map(function(t){return"#"+t})};Ws("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),Ws("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6"),Ws("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9"),Ws("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5"),ca(Ft(300,.5,0),Ft(-240,.5,1));ca(Ft(-100,.75,.35),Ft(80,1.5,.8)),ca(Ft(260,.75,.35),Ft(80,1.5,.8)),Ft();var Zs=function(t){return function(){return t}};Or.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:this._context.lineTo(t,n)}}};var Vs=function(t){return new Or(t)},Gs=function(){function t(t){var u,s,c,l=t.length,h=!1;for(null==i&&(a=o(c=zn())),u=0;u<=l;++u)!(u0&&(a=As.offset(a,-1),u=As.offset(u,1));var s=r(n,1),c=i(n,1);return t.scales.x.domain([a,u]).nice(),t.scales.y.domain([s,c]).nice(),t}},{key:"plots",value:function(t,n,e){function r(n,e,r){return{plot:["o-chart__plot","o-chart__plot--"+s.slug(e,"-"),"o-chart__plot--"+s.slug(r,"-")],line:["o-chart__line","stroke-"+s.slug(r,"-")],dots:["o-chart__dot","fill-"+s.slug(r,"-"),"stroke-"+t.colors.background],bar:["o-chart__bar","fill-"+s.slug(r,"-")]}[n].join(" ")}function i(){return n.g.selectAll(".o-chart__plot").remove(),n.plots=n.g.selectAll(".o-chart__plot").data(e).enter().append("g").attr("class",function(){var t=co(this).data()[0];return s.plots.classes("plot",t.label,t.label)}),n.plots.each(function(t){s.plots[t.type](co(this))}),n}function o(n){n.append("path").attr("class",function(t){return s.plots.classes("line","",t.color)}).attr("d",function(n){return t.plots.line(n.data)}),n.selectAll(".o-chart__dot").data(function(t){return t.data}).enter().append("circle").attrs({cx:t.plots.line.x(),cy:t.plots.line.y(),r:tc.DOTS_RADIUS}).attr("class",function(t){var t=co(this.parentNode).data()[0];return s.plots.classes("dots","",t.color)})}function a(n){var r=e.filter(function(t){return"bar"===t.type}),i=n.data()[0],o=Math.max(0,i.data.length),a=t.right/o*tc.BAR_GAP/r.length,u=s.plots.classes("bar","",i.color),c=a*(r.map(function(t){return t.label}).indexOf(i.label)+1)-a*r.length/2;n.selectAll(".o-chart__bar").data(function(t){return i.data}).enter().append("rect").attrs({class:u,width:a,x:function(n){return t.scales.x(s.timeParse(n[0]))-c},y:function(n){return t.scales.y(Math.max(0,n[1]))},height:function(n){return Math.abs(Math.min(t.scales.y(0),t.bottom)-t.scales.y(n[1]))}})}function u(){return s.plots.create()}var s=this;return s.plots.create=i,s.plots.line=o,s.plots.bar=a,s.plots.update=u,s.plots.classes=r,s.plots}},{key:"axis",value:function(t,n){function e(n){return{axis_top:["o-chart__axis","o-chart__axis--x","o-chart__axis--top"],axis_bottom:["o-chart__axis","o-chart__axis--x","o-chart__axis--bottom"],axis_left:["o-chart__axis","o-chart__axis--y","o-chart__axis--left"],axis_right:["o-chart__axis","o-chart__axis--y","o-chart__axis--right"],label_top:["fill-"+t.colors.labels,"o-chart__label","o-chart__label--x","o-chart__label--top"],label_bottom:["fill-"+t.colors.labels,"o-chart__label","o-chart__label--x","o-chart__label--bottom"],label_left:["fill-"+t.colors.labels,"o-chart__label","o-chart__label--y","o-chart__label--left"],label_right:["fill-"+t.colors.labels,"o-chart__label","o-chart__label--y","o-chart__label--right"],ticks:["tick","fill-"+t.colors.axis],line_x:["o-chart__axis-gap--x","stroke-"+t.colors.axis],line_y:["o-chart__axis-gap--y","stroke-"+t.colors.axis]}[n].join(" ")}function r(){return n.axis={},n.axis.x=n.g.append("g").attr("class",s.axis.classes("axis_bottom")),n.axis.y=n.g.append("g").attr("class",s.axis.classes("axis_left")),s.axis.update(),s.axis.modify(),s.axis.labels()}function i(){return n.axis.x.call(t.axis.x).attr("transform",s.translate(0,t.innerHeight)),n.axis.y.call(t.axis.y),n.axis.x.select(".o-chart__axis-gap--x").attrs({x1:0,y1:0,y2:0,x2:t.innerWidth}),n.axis.y.select(".o-chart__axis-gap--y").attrs({x1:0,y1:0,x2:0,y2:t.innerHeight}),n.g.selectAll(".tick").attr("class",s.axis.classes("ticks")),n.g.select(".o-chart__label--x").attr("transform",function(){var n=co(this).select("text"),e=t.left+t.innerWidth/2,r=t.height-n.node().getBBox().height;return s.translate(e,r)}),n.g.select(".o-chart__label--y").attr("transform",function(){var n=0-t.margin[3]+co(this).node().getBBox().height,e=t.innerHeight/2;return[s.translate(n,e),"rotate(-90)"].join(" ")}),n}function o(){return n.axis.x.label=n.g.append("g").attr("class",s.axis.classes("label_bottom")),n.axis.x.label.append("text").attrs({"text-anchor":"middle"}),n.axis.y.label=n.g.append("g").attr("class",s.axis.classes("label_left")),n.axis.y.label.append("text").attrs({"text-anchor":"middle"}),s.axis.text(),n}function a(){n.g.select(".o-chart__label--x").select("text").text(t.labels.axis.x),n.g.select(".o-chart__label--y").select("text").text(t.labels.axis.y),s.axis.update()}function u(){n.axis.x.append("line").attrs({x1:0,y1:0,y2:0,x2:t.innerWidth,class:s.axis.classes("line_x")}),n.axis.x.select(".domain").attr("display","none"),n.axis.y.append("line").attrs({x1:0,y1:0,x2:0,y2:t.innerHeight,class:s.axis.classes("line_y")}),n.axis.y.select(".domain").attr("display","none")}var s=this;return s.axis.create=r,s.axis.update=i,s.axis.labels=o,s.axis.text=a,s.axis.modify=u,s.axis.classes=e,s.axis}}]),t}();return function(){function t(){nc(this,t)}return ec(t,[{key:"charts",value:function(t,n){return new rc(t,n).init()}}]),t}()}(); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnljby5kaXN0LmpzIiwic291cmNlcyI6WyIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2Jpc2VjdG9yLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy90aWNrcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9heGlzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9kaXNwYXRjaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0b3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yQWxsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VudGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdGEuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hdHRyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3N0eWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3Byb3BlcnR5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NsYXNzZWQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9odG1sLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JhaXNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2xvd2VyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luc2VydC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yZW1vdmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2xhYi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY3ViZWhlbGl4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvc3RyaW5nLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vcGFyc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY3ViZWhlbGl4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NjaGVkdWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHdlZW4uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9hdHRyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0clR3ZWVuLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZGVsYXkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kdXJhdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2Vhc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9vbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3JlbW92ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9jdWJpYy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vdHJhbnNpdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1icnVzaC9zcmMvYnJ1c2guanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvcGF0aC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1jb2xsZWN0aW9uL3NyYy9tYXAuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sbGVjdGlvbi9zcmMvc2V0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvZHN2LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9hZGQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtcXVhZHRyZWUvc3JjL3JlbW92ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMveC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMveS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcXVhZHRyZWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRTcGVjaWZpZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9hZGRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL21hdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9wcm9qZWN0aW9uL2F6aW11dGhhbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9jb3VudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9wYXRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvdHJlZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWV1ZS9zcmMvcXVldWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2xpbmVhci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9pbnRlcnZhbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy93ZWVrLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y1dlZWsuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvaXNvRm9ybWF0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUtZm9ybWF0L3NyYy9pc29QYXJzZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGltZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbGluZWFyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wb2ludC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvY3VydmUvbW9ub3RvbmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uLW11bHRpL3NyYy9zZWxlY3Rpb24vYXR0cnMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uLW11bHRpL3NyYy9zZWxlY3Rpb24vc3R5bGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi1tdWx0aS9zcmMvc2VsZWN0aW9uL3Byb3BlcnRpZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL2FzY2VuZGluZy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tYXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21pbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9hcnJheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9pZGVudGl0eS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tYXRjaGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RBbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZmlsdGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NwYXJzZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2V4aXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbWVyZ2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb3JkZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2FsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2Rlcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2RlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NpemUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW1wdHkuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZWFjaC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3dpbmRvdy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hcHBlbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0dW0uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL21hdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yZ2IuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2FycmF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9kYXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL29iamVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdmFsdWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vZGVjb21wb3NlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lb3V0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL2ludGVycnVwdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vaW50ZXJydXB0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vaW50ZXJwb2xhdGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9maWx0ZXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9tZXJnZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RyYW5zaXRpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvcG9seS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9iYWNrLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWVhc2Uvc3JjL2VsYXN0aWMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNob3JkL3NyYy9tYXRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvY3N2LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWRzdi9zcmMvdHN2LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9jb3Zlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZGF0YS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZXh0ZW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9xdWFkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9maW5kLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9yb290LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9zaXplLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy92aXNpdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvdmlzaXRBZnRlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdERlY2ltYWwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRQcmVmaXhBdXRvLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZXhwb25lbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRHcm91cC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0Um91bmRlZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFR5cGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0RGVmYXVsdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2lkZW50aXR5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvbkZpeGVkLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUHJlZml4LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUm91bmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtZ2VvL3NyYy9hcmVhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvYm91bmRzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcG9seWdvbkNvbnRhaW5zLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvbGVuZ3RoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9hcmVhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcGF0aC9tZWFzdXJlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9yZXNhbXBsZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1nZW8vc3JjL3Byb2plY3Rpb24vYXppbXV0aGFsRXF1YWxBcmVhLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWdlby9zcmMvcHJvamVjdGlvbi9hemltdXRoYWxFcXVpZGlzdGFudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9lYWNoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2VhY2hCZWZvcmUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvZWFjaEFmdGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L3N1bS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9zb3J0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWhpZXJhcmNoeS9zcmMvaGllcmFyY2h5L2FuY2VzdG9ycy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9kZXNjZW5kYW50cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1oaWVyYXJjaHkvc3JjL2hpZXJhcmNoeS9sZWF2ZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy9oaWVyYXJjaHkvbGlua3MuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtaGllcmFyY2h5L3NyYy90cmVlbWFwL3NsaWNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9hcnJheS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY29uc3RhbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL251bWJlci5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGlja0Zvcm1hdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbmljZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9taWxsaXNlY29uZC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kdXJhdGlvbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9zZWNvbmQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWludXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2hvdXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZGF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21vbnRoLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3llYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjTWludXRlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y0hvdXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjRGF5LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y1llYXIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdXRjTW9udGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2RlZmF1bHRMb2NhbGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbG9ycy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY2F0ZWdvcnkxMC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY2F0ZWdvcnkyMGIuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NhdGVnb3J5MjBjLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jYXRlZ29yeTIwLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9jdWJlaGVsaXguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3JhaW5ib3cuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL2QzLXZvcm9ub2kvc3JjL0RpYWdyYW0uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uLW11bHRpL2luZGV4LmpzIiwiLi4vLi4vc3JjL2pzL21vZHVsZXMvby1jaGFydHMuY29uc3RhbnRzLmpzIiwiLi4vLi4vc3JjL2pzL21vZHVsZXMvby1jaGFydHMuanMiLCIuLi8uLi9zcmMvanMvbnljby5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZ1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIGlmIChjb21wYXJlLmxlbmd0aCA9PT0gMSkgY29tcGFyZSA9IGFzY2VuZGluZ0NvbXBhcmF0b3IoY29tcGFyZSk7XG4gIHJldHVybiB7XG4gICAgbGVmdDogZnVuY3Rpb24oYSwgeCwgbG8sIGhpKSB7XG4gICAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xuICAgICAgaWYgKGhpID09IG51bGwpIGhpID0gYS5sZW5ndGg7XG4gICAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgICB2YXIgbWlkID0gbG8gKyBoaSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsbztcbiAgICB9LFxuICAgIHJpZ2h0OiBmdW5jdGlvbihhLCB4LCBsbywgaGkpIHtcbiAgICAgIGlmIChsbyA9PSBudWxsKSBsbyA9IDA7XG4gICAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICAgIHZhciBtaWQgPSBsbyArIGhpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpID4gMCkgaGkgPSBtaWQ7XG4gICAgICAgIGVsc2UgbG8gPSBtaWQgKyAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nQ29tcGFyYXRvcihmKSB7XG4gIHJldHVybiBmdW5jdGlvbihkLCB4KSB7XG4gICAgcmV0dXJuIGFzY2VuZGluZyhmKGQpLCB4KTtcbiAgfTtcbn1cbiIsInZhciBlMTAgPSBNYXRoLnNxcnQoNTApLFxuICAgIGU1ID0gTWF0aC5zcXJ0KDEwKSxcbiAgICBlMiA9IE1hdGguc3FydCgyKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHZhciByZXZlcnNlID0gc3RvcCA8IHN0YXJ0LFxuICAgICAgaSA9IC0xLFxuICAgICAgbixcbiAgICAgIHRpY2tzLFxuICAgICAgc3RlcDtcblxuICBpZiAocmV2ZXJzZSkgbiA9IHN0YXJ0LCBzdGFydCA9IHN0b3AsIHN0b3AgPSBuO1xuXG4gIGlmICgoc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSkgPT09IDAgfHwgIWlzRmluaXRlKHN0ZXApKSByZXR1cm4gW107XG5cbiAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgc3RhcnQgPSBNYXRoLmNlaWwoc3RhcnQgLyBzdGVwKTtcbiAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wIC8gc3RlcCk7XG4gICAgdGlja3MgPSBuZXcgQXJyYXkobiA9IE1hdGguY2VpbChzdG9wIC0gc3RhcnQgKyAxKSk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHRpY2tzW2ldID0gKHN0YXJ0ICsgaSkgKiBzdGVwO1xuICB9IGVsc2Uge1xuICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAqIHN0ZXApO1xuICAgIHN0b3AgPSBNYXRoLmNlaWwoc3RvcCAqIHN0ZXApO1xuICAgIHRpY2tzID0gbmV3IEFycmF5KG4gPSBNYXRoLmNlaWwoc3RhcnQgLSBzdG9wICsgMSkpO1xuICAgIHdoaWxlICgrK2kgPCBuKSB0aWNrc1tpXSA9IChzdGFydCAtIGkpIC8gc3RlcDtcbiAgfVxuXG4gIGlmIChyZXZlcnNlKSB0aWNrcy5yZXZlcnNlKCk7XG5cbiAgcmV0dXJuIHRpY2tzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHBvd2VyID0gTWF0aC5mbG9vcihNYXRoLmxvZyhzdGVwKSAvIE1hdGguTE4xMCksXG4gICAgICBlcnJvciA9IHN0ZXAgLyBNYXRoLnBvdygxMCwgcG93ZXIpO1xuICByZXR1cm4gcG93ZXIgPj0gMFxuICAgICAgPyAoZXJyb3IgPj0gZTEwID8gMTAgOiBlcnJvciA+PSBlNSA/IDUgOiBlcnJvciA+PSBlMiA/IDIgOiAxKSAqIE1hdGgucG93KDEwLCBwb3dlcilcbiAgICAgIDogLU1hdGgucG93KDEwLCAtcG93ZXIpIC8gKGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgdmFyIHN0ZXAwID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHN0ZXAxID0gTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2coc3RlcDApIC8gTWF0aC5MTjEwKSksXG4gICAgICBlcnJvciA9IHN0ZXAwIC8gc3RlcDE7XG4gIGlmIChlcnJvciA+PSBlMTApIHN0ZXAxICo9IDEwO1xuICBlbHNlIGlmIChlcnJvciA+PSBlNSkgc3RlcDEgKj0gNTtcbiAgZWxzZSBpZiAoZXJyb3IgPj0gZTIpIHN0ZXAxICo9IDI7XG4gIHJldHVybiBzdG9wIDwgc3RhcnQgPyAtc3RlcDEgOiBzdGVwMTtcbn1cbiIsImltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHlcIjtcblxudmFyIHRvcCA9IDEsXG4gICAgcmlnaHQgPSAyLFxuICAgIGJvdHRvbSA9IDMsXG4gICAgbGVmdCA9IDQsXG4gICAgZXBzaWxvbiA9IDFlLTY7XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVgoeCkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyAoeCArIDAuNSkgKyBcIiwwKVwiO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVZKHkpIHtcbiAgcmV0dXJuIFwidHJhbnNsYXRlKDAsXCIgKyAoeSArIDAuNSkgKyBcIilcIjtcbn1cblxuZnVuY3Rpb24gY2VudGVyKHNjYWxlKSB7XG4gIHZhciBvZmZzZXQgPSBNYXRoLm1heCgwLCBzY2FsZS5iYW5kd2lkdGgoKSAtIDEpIC8gMjsgLy8gQWRqdXN0IGZvciAwLjVweCBvZmZzZXQuXG4gIGlmIChzY2FsZS5yb3VuZCgpKSBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG4gIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgcmV0dXJuIHNjYWxlKGQpICsgb2Zmc2V0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBlbnRlcmluZygpIHtcbiAgcmV0dXJuICF0aGlzLl9fYXhpcztcbn1cblxuZnVuY3Rpb24gYXhpcyhvcmllbnQsIHNjYWxlKSB7XG4gIHZhciB0aWNrQXJndW1lbnRzID0gW10sXG4gICAgICB0aWNrVmFsdWVzID0gbnVsbCxcbiAgICAgIHRpY2tGb3JtYXQgPSBudWxsLFxuICAgICAgdGlja1NpemVJbm5lciA9IDYsXG4gICAgICB0aWNrU2l6ZU91dGVyID0gNixcbiAgICAgIHRpY2tQYWRkaW5nID0gMyxcbiAgICAgIGsgPSBvcmllbnQgPT09IHRvcCB8fCBvcmllbnQgPT09IGxlZnQgPyAtMSA6IDEsXG4gICAgICB4ID0gb3JpZW50ID09PSBsZWZ0IHx8IG9yaWVudCA9PT0gcmlnaHQgPyBcInhcIiA6IFwieVwiLFxuICAgICAgdHJhbnNmb3JtID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBib3R0b20gPyB0cmFuc2xhdGVYIDogdHJhbnNsYXRlWTtcblxuICBmdW5jdGlvbiBheGlzKGNvbnRleHQpIHtcbiAgICB2YXIgdmFsdWVzID0gdGlja1ZhbHVlcyA9PSBudWxsID8gKHNjYWxlLnRpY2tzID8gc2NhbGUudGlja3MuYXBwbHkoc2NhbGUsIHRpY2tBcmd1bWVudHMpIDogc2NhbGUuZG9tYWluKCkpIDogdGlja1ZhbHVlcyxcbiAgICAgICAgZm9ybWF0ID0gdGlja0Zvcm1hdCA9PSBudWxsID8gKHNjYWxlLnRpY2tGb3JtYXQgPyBzY2FsZS50aWNrRm9ybWF0LmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IGlkZW50aXR5KSA6IHRpY2tGb3JtYXQsXG4gICAgICAgIHNwYWNpbmcgPSBNYXRoLm1heCh0aWNrU2l6ZUlubmVyLCAwKSArIHRpY2tQYWRkaW5nLFxuICAgICAgICByYW5nZSA9IHNjYWxlLnJhbmdlKCksXG4gICAgICAgIHJhbmdlMCA9IHJhbmdlWzBdICsgMC41LFxuICAgICAgICByYW5nZTEgPSByYW5nZVtyYW5nZS5sZW5ndGggLSAxXSArIDAuNSxcbiAgICAgICAgcG9zaXRpb24gPSAoc2NhbGUuYmFuZHdpZHRoID8gY2VudGVyIDogaWRlbnRpdHkpKHNjYWxlLmNvcHkoKSksXG4gICAgICAgIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQsXG4gICAgICAgIHBhdGggPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLmRvbWFpblwiKS5kYXRhKFtudWxsXSksXG4gICAgICAgIHRpY2sgPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLnRpY2tcIikuZGF0YSh2YWx1ZXMsIHNjYWxlKS5vcmRlcigpLFxuICAgICAgICB0aWNrRXhpdCA9IHRpY2suZXhpdCgpLFxuICAgICAgICB0aWNrRW50ZXIgPSB0aWNrLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0aWNrXCIpLFxuICAgICAgICBsaW5lID0gdGljay5zZWxlY3QoXCJsaW5lXCIpLFxuICAgICAgICB0ZXh0ID0gdGljay5zZWxlY3QoXCJ0ZXh0XCIpO1xuXG4gICAgcGF0aCA9IHBhdGgubWVyZ2UocGF0aC5lbnRlcigpLmluc2VydChcInBhdGhcIiwgXCIudGlja1wiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZG9tYWluXCIpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiIzAwMFwiKSk7XG5cbiAgICB0aWNrID0gdGljay5tZXJnZSh0aWNrRW50ZXIpO1xuXG4gICAgbGluZSA9IGxpbmUubWVyZ2UodGlja0VudGVyLmFwcGVuZChcImxpbmVcIilcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCIjMDAwXCIpXG4gICAgICAgIC5hdHRyKHggKyBcIjJcIiwgayAqIHRpY2tTaXplSW5uZXIpKTtcblxuICAgIHRleHQgPSB0ZXh0Lm1lcmdlKHRpY2tFbnRlci5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIiMwMDBcIilcbiAgICAgICAgLmF0dHIoeCwgayAqIHNwYWNpbmcpXG4gICAgICAgIC5hdHRyKFwiZHlcIiwgb3JpZW50ID09PSB0b3AgPyBcIjBlbVwiIDogb3JpZW50ID09PSBib3R0b20gPyBcIjAuNzFlbVwiIDogXCIwLjMyZW1cIikpO1xuXG4gICAgaWYgKGNvbnRleHQgIT09IHNlbGVjdGlvbikge1xuICAgICAgcGF0aCA9IHBhdGgudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIHRpY2sgPSB0aWNrLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICBsaW5lID0gbGluZS50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgdGV4dCA9IHRleHQudHJhbnNpdGlvbihjb250ZXh0KTtcblxuICAgICAgdGlja0V4aXQgPSB0aWNrRXhpdC50cmFuc2l0aW9uKGNvbnRleHQpXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gaXNGaW5pdGUoZCA9IHBvc2l0aW9uKGQpKSA/IHRyYW5zZm9ybShkKSA6IHRoaXMuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpOyB9KTtcblxuICAgICAgdGlja0VudGVyXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyB2YXIgcCA9IHRoaXMucGFyZW50Tm9kZS5fX2F4aXM7IHJldHVybiB0cmFuc2Zvcm0ocCAmJiBpc0Zpbml0ZShwID0gcChkKSkgPyBwIDogcG9zaXRpb24oZCkpOyB9KTtcbiAgICB9XG5cbiAgICB0aWNrRXhpdC5yZW1vdmUoKTtcblxuICAgIHBhdGhcbiAgICAgICAgLmF0dHIoXCJkXCIsIG9yaWVudCA9PT0gbGVmdCB8fCBvcmllbnQgPT0gcmlnaHRcbiAgICAgICAgICAgID8gXCJNXCIgKyBrICogdGlja1NpemVPdXRlciArIFwiLFwiICsgcmFuZ2UwICsgXCJIMC41VlwiICsgcmFuZ2UxICsgXCJIXCIgKyBrICogdGlja1NpemVPdXRlclxuICAgICAgICAgICAgOiBcIk1cIiArIHJhbmdlMCArIFwiLFwiICsgayAqIHRpY2tTaXplT3V0ZXIgKyBcIlYwLjVIXCIgKyByYW5nZTEgKyBcIlZcIiArIGsgKiB0aWNrU2l6ZU91dGVyKTtcblxuICAgIHRpY2tcbiAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIDEpXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIHRyYW5zZm9ybShwb3NpdGlvbihkKSk7IH0pO1xuXG4gICAgbGluZVxuICAgICAgICAuYXR0cih4ICsgXCIyXCIsIGsgKiB0aWNrU2l6ZUlubmVyKTtcblxuICAgIHRleHRcbiAgICAgICAgLmF0dHIoeCwgayAqIHNwYWNpbmcpXG4gICAgICAgIC50ZXh0KGZvcm1hdCk7XG5cbiAgICBzZWxlY3Rpb24uZmlsdGVyKGVudGVyaW5nKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJub25lXCIpXG4gICAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIDEwKVxuICAgICAgICAuYXR0cihcImZvbnQtZmFtaWx5XCIsIFwic2Fucy1zZXJpZlwiKVxuICAgICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIG9yaWVudCA9PT0gcmlnaHQgPyBcInN0YXJ0XCIgOiBvcmllbnQgPT09IGxlZnQgPyBcImVuZFwiIDogXCJtaWRkbGVcIik7XG5cbiAgICBzZWxlY3Rpb25cbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7IHRoaXMuX19heGlzID0gcG9zaXRpb247IH0pO1xuICB9XG5cbiAgYXhpcy5zY2FsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzY2FsZSA9IF8sIGF4aXMpIDogc2NhbGU7XG4gIH07XG5cbiAgYXhpcy50aWNrcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aWNrQXJndW1lbnRzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpLCBheGlzO1xuICB9O1xuXG4gIGF4aXMudGlja0FyZ3VtZW50cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrQXJndW1lbnRzID0gXyA9PSBudWxsID8gW10gOiBzbGljZS5jYWxsKF8pLCBheGlzKSA6IHRpY2tBcmd1bWVudHMuc2xpY2UoKTtcbiAgfTtcblxuICBheGlzLnRpY2tWYWx1ZXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1ZhbHVlcyA9IF8gPT0gbnVsbCA/IG51bGwgOiBzbGljZS5jYWxsKF8pLCBheGlzKSA6IHRpY2tWYWx1ZXMgJiYgdGlja1ZhbHVlcy5zbGljZSgpO1xuICB9O1xuXG4gIGF4aXMudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrRm9ybWF0ID0gXywgYXhpcykgOiB0aWNrRm9ybWF0O1xuICB9O1xuXG4gIGF4aXMudGlja1NpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1NpemVJbm5lciA9IHRpY2tTaXplT3V0ZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyO1xuICB9O1xuXG4gIGF4aXMudGlja1NpemVJbm5lciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZUlubmVyID0gK18sIGF4aXMpIDogdGlja1NpemVJbm5lcjtcbiAgfTtcblxuICBheGlzLnRpY2tTaXplT3V0ZXIgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGlja1NpemVPdXRlciA9ICtfLCBheGlzKSA6IHRpY2tTaXplT3V0ZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrUGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrUGFkZGluZyA9ICtfLCBheGlzKSA6IHRpY2tQYWRkaW5nO1xuICB9O1xuXG4gIHJldHVybiBheGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc1RvcChzY2FsZSkge1xuICByZXR1cm4gYXhpcyh0b3AsIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNSaWdodChzY2FsZSkge1xuICByZXR1cm4gYXhpcyhyaWdodCwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc0JvdHRvbShzY2FsZSkge1xuICByZXR1cm4gYXhpcyhib3R0b20sIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNMZWZ0KHNjYWxlKSB7XG4gIHJldHVybiBheGlzKGxlZnQsIHNjYWxlKTtcbn1cbiIsInZhciBub29wID0ge3ZhbHVlOiBmdW5jdGlvbigpIHt9fTtcblxuZnVuY3Rpb24gZGlzcGF0Y2goKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aCwgXyA9IHt9LCB0OyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEodCA9IGFyZ3VtZW50c1tpXSArIFwiXCIpIHx8ICh0IGluIF8pKSB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIHR5cGU6IFwiICsgdCk7XG4gICAgX1t0XSA9IFtdO1xuICB9XG4gIHJldHVybiBuZXcgRGlzcGF0Y2goXyk7XG59XG5cbmZ1bmN0aW9uIERpc3BhdGNoKF8pIHtcbiAgdGhpcy5fID0gXztcbn1cblxuZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzLCB0eXBlcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgaWYgKHQgJiYgIXR5cGVzLmhhc093blByb3BlcnR5KHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdCk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbkRpc3BhdGNoLnByb3RvdHlwZSA9IGRpc3BhdGNoLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IERpc3BhdGNoLFxuICBvbjogZnVuY3Rpb24odHlwZW5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIF8gPSB0aGlzLl8sXG4gICAgICAgIFQgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIsIF8pLFxuICAgICAgICB0LFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIG4gPSBULmxlbmd0aDtcblxuICAgIC8vIElmIG5vIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIHJldHVybiB0aGUgY2FsbGJhY2sgb2YgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgJiYgKHQgPSBnZXQoX1t0XSwgdHlwZW5hbWUubmFtZSkpKSByZXR1cm4gdDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBhIHR5cGUgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgLy8gT3RoZXJ3aXNlLCBpZiBhIG51bGwgY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmVtb3ZlIGNhbGxiYWNrcyBvZiB0aGUgZ2l2ZW4gbmFtZS5cbiAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjYWxsYmFjazogXCIgKyBjYWxsYmFjayk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBjYWxsYmFjayk7XG4gICAgICBlbHNlIGlmIChjYWxsYmFjayA9PSBudWxsKSBmb3IgKHQgaW4gXykgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgY29weTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNvcHkgPSB7fSwgXyA9IHRoaXMuXztcbiAgICBmb3IgKHZhciB0IGluIF8pIGNvcHlbdF0gPSBfW3RdLnNsaWNlKCk7XG4gICAgcmV0dXJuIG5ldyBEaXNwYXRjaChjb3B5KTtcbiAgfSxcbiAgY2FsbDogZnVuY3Rpb24odHlwZSwgdGhhdCkge1xuICAgIGlmICgobiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyKSA+IDApIGZvciAodmFyIGFyZ3MgPSBuZXcgQXJyYXkobiksIGkgPSAwLCBuLCB0OyBpIDwgbjsgKytpKSBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uKHR5cGUsIHRoYXQsIGFyZ3MpIHtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodmFyIHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldCh0eXBlLCBuYW1lKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGgsIGM7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoKGMgPSB0eXBlW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYy52YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0KHR5cGUsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAodHlwZVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICB0eXBlW2ldID0gbm9vcCwgdHlwZSA9IHR5cGUuc2xpY2UoMCwgaSkuY29uY2F0KHR5cGUuc2xpY2UoaSArIDEpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgdHlwZS5wdXNoKHtuYW1lOiBuYW1lLCB2YWx1ZTogY2FsbGJhY2t9KTtcbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRpc3BhdGNoO1xuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi9uYW1lc3BhY2VcIjtcbmltcG9ydCB7eGh0bWx9IGZyb20gXCIuL25hbWVzcGFjZXNcIjtcblxuZnVuY3Rpb24gY3JlYXRvckluaGVyaXQobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy5vd25lckRvY3VtZW50LFxuICAgICAgICB1cmkgPSB0aGlzLm5hbWVzcGFjZVVSSTtcbiAgICByZXR1cm4gdXJpID09PSB4aHRtbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJID09PSB4aHRtbFxuICAgICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSlcbiAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModXJpLCBuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRvckZpeGVkKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIChmdWxsbmFtZS5sb2NhbFxuICAgICAgPyBjcmVhdG9yRml4ZWRcbiAgICAgIDogY3JlYXRvckluaGVyaXQpKGZ1bGxuYW1lKTtcbn1cbiIsInZhciBmaWx0ZXJFdmVudHMgPSB7fTtcblxuZXhwb3J0IHZhciBldmVudCA9IG51bGw7XG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIGlmICghKFwib25tb3VzZWVudGVyXCIgaW4gZWxlbWVudCkpIHtcbiAgICBmaWx0ZXJFdmVudHMgPSB7bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIiwgbW91c2VsZWF2ZTogXCJtb3VzZW91dFwifTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJDb250ZXh0TGlzdGVuZXIobGlzdGVuZXIsIGluZGV4LCBncm91cCkge1xuICBsaXN0ZW5lciA9IGNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lciwgaW5kZXgsIGdyb3VwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgdmFyIHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgIGlmICghcmVsYXRlZCB8fCAocmVsYXRlZCAhPT0gdGhpcyAmJiAhKHJlbGF0ZWQuY29tcGFyZURvY3VtZW50UG9zaXRpb24odGhpcykgJiA4KSkpIHtcbiAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyLCBpbmRleCwgZ3JvdXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50MSkge1xuICAgIHZhciBldmVudDAgPSBldmVudDsgLy8gRXZlbnRzIGNhbiBiZSByZWVudHJhbnQgKGUuZy4sIGZvY3VzKS5cbiAgICBldmVudCA9IGV2ZW50MTtcbiAgICB0cnkge1xuICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCB0aGlzLl9fZGF0YV9fLCBpbmRleCwgZ3JvdXApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBldmVudCA9IGV2ZW50MDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLmNhcHR1cmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIGNhcHR1cmUpIHtcbiAgdmFyIHdyYXAgPSBmaWx0ZXJFdmVudHMuaGFzT3duUHJvcGVydHkodHlwZW5hbWUudHlwZSkgPyBmaWx0ZXJDb250ZXh0TGlzdGVuZXIgOiBjb250ZXh0TGlzdGVuZXI7XG4gIHJldHVybiBmdW5jdGlvbihkLCBpLCBncm91cCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSB3cmFwKHZhbHVlLCBpLCBncm91cCk7XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgICAgaWYgKChvID0gb25bal0pLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8uY2FwdHVyZSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIgPSBsaXN0ZW5lciwgby5jYXB0dXJlID0gY2FwdHVyZSk7XG4gICAgICAgIG8udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZW5hbWUudHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpO1xuICAgIG8gPSB7dHlwZTogdHlwZW5hbWUudHlwZSwgbmFtZTogdHlwZW5hbWUubmFtZSwgdmFsdWU6IHZhbHVlLCBsaXN0ZW5lcjogbGlzdGVuZXIsIGNhcHR1cmU6IGNhcHR1cmV9O1xuICAgIGlmICghb24pIHRoaXMuX19vbiA9IFtvXTtcbiAgICBlbHNlIG9uLnB1c2gobyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHR5cGVuYW1lLCB2YWx1ZSwgY2FwdHVyZSkge1xuICB2YXIgdHlwZW5hbWVzID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiKSwgaSwgbiA9IHR5cGVuYW1lcy5sZW5ndGgsIHQ7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIG9uID0gdGhpcy5ub2RlKCkuX19vbjtcbiAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICBmb3IgKGkgPSAwLCBvID0gb25bal07IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKCh0ID0gdHlwZW5hbWVzW2ldKS50eXBlID09PSBvLnR5cGUgJiYgdC5uYW1lID09PSBvLm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gby52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBvbiA9IHZhbHVlID8gb25BZGQgOiBvblJlbW92ZTtcbiAgaWYgKGNhcHR1cmUgPT0gbnVsbCkgY2FwdHVyZSA9IGZhbHNlO1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB0aGlzLmVhY2gob24odHlwZW5hbWVzW2ldLCB2YWx1ZSwgY2FwdHVyZSkpO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbUV2ZW50KGV2ZW50MSwgbGlzdGVuZXIsIHRoYXQsIGFyZ3MpIHtcbiAgdmFyIGV2ZW50MCA9IGV2ZW50O1xuICBldmVudDEuc291cmNlRXZlbnQgPSBldmVudDtcbiAgZXZlbnQgPSBldmVudDE7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9IGZpbmFsbHkge1xuICAgIGV2ZW50ID0gZXZlbnQwO1xuICB9XG59XG4iLCJmdW5jdGlvbiBub25lKCkge31cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBub25lIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gIH07XG59XG4iLCJmdW5jdGlvbiBlbXB0eSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IGVtcHR5IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gIH07XG59XG4iLCJpbXBvcnQgc3BhcnNlIGZyb20gXCIuL3NwYXJzZVwiO1xuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9lbnRlciB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRW50ZXJOb2RlKHBhcmVudCwgZGF0dW0pIHtcbiAgdGhpcy5vd25lckRvY3VtZW50ID0gcGFyZW50Lm93bmVyRG9jdW1lbnQ7XG4gIHRoaXMubmFtZXNwYWNlVVJJID0gcGFyZW50Lm5hbWVzcGFjZVVSSTtcbiAgdGhpcy5fbmV4dCA9IG51bGw7XG4gIHRoaXMuX3BhcmVudCA9IHBhcmVudDtcbiAgdGhpcy5fX2RhdGFfXyA9IGRhdHVtO1xufVxuXG5FbnRlck5vZGUucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRW50ZXJOb2RlLFxuICBhcHBlbmRDaGlsZDogZnVuY3Rpb24oY2hpbGQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIHRoaXMuX25leHQpOyB9LFxuICBpbnNlcnRCZWZvcmU6IGZ1bmN0aW9uKGNoaWxkLCBuZXh0KSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCBuZXh0KTsgfSxcbiAgcXVlcnlTZWxlY3RvcjogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsgfSxcbiAgcXVlcnlTZWxlY3RvckFsbDogZnVuY3Rpb24oc2VsZWN0b3IpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsgfVxufTtcbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHtFbnRlck5vZGV9IGZyb20gXCIuL2VudGVyXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4uL2NvbnN0YW50XCI7XG5cbnZhciBrZXlQcmVmaXggPSBcIiRcIjsgLy8gUHJvdGVjdCBhZ2FpbnN0IGtleXMgbGlrZSDigJxfX3Byb3RvX1/igJ0uXG5cbmZ1bmN0aW9uIGJpbmRJbmRleChwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhKSB7XG4gIHZhciBpID0gMCxcbiAgICAgIG5vZGUsXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZml0IGludG8gdXBkYXRlLlxuICAvLyBQdXQgYW55IG51bGwgbm9kZXMgaW50byBlbnRlci5cbiAgLy8gUHV0IGFueSByZW1haW5pbmcgZGF0YSBpbnRvIGVudGVyLlxuICBmb3IgKDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGRvbuKAmXQgZml0IGludG8gZXhpdC5cbiAgZm9yICg7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRLZXkocGFyZW50LCBncm91cCwgZW50ZXIsIHVwZGF0ZSwgZXhpdCwgZGF0YSwga2V5KSB7XG4gIHZhciBpLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVCeUtleVZhbHVlID0ge30sXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgIGtleVZhbHVlcyA9IG5ldyBBcnJheShncm91cExlbmd0aCksXG4gICAgICBrZXlWYWx1ZTtcblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggbm9kZS5cbiAgLy8gSWYgbXVsdGlwbGUgbm9kZXMgaGF2ZSB0aGUgc2FtZSBrZXksIHRoZSBkdXBsaWNhdGVzIGFyZSBhZGRlZCB0byBleGl0LlxuICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIGtleVZhbHVlc1tpXSA9IGtleVZhbHVlID0ga2V5UHJlZml4ICsga2V5LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgICAgaWYgKGtleVZhbHVlIGluIG5vZGVCeUtleVZhbHVlKSB7XG4gICAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggZGF0dW0uXG4gIC8vIElmIHRoZXJlIGEgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXksIGpvaW4gYW5kIGFkZCBpdCB0byB1cGRhdGUuXG4gIC8vIElmIHRoZXJlIGlzIG5vdCAob3IgdGhlIGtleSBpcyBhIGR1cGxpY2F0ZSksIGFkZCBpdCB0byBlbnRlci5cbiAgZm9yIChpID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGtleVZhbHVlID0ga2V5UHJlZml4ICsga2V5LmNhbGwocGFyZW50LCBkYXRhW2ldLCBpLCBkYXRhKTtcbiAgICBpZiAobm9kZSA9IG5vZGVCeUtleVZhbHVlW2tleVZhbHVlXSkge1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgbm9kZUJ5S2V5VmFsdWVba2V5VmFsdWVdID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGFueSByZW1haW5pbmcgbm9kZXMgdGhhdCB3ZXJlIG5vdCBib3VuZCB0byBkYXRhIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChub2RlQnlLZXlWYWx1ZVtrZXlWYWx1ZXNbaV1dID09PSBub2RlKSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIGRhdGEgPSBuZXcgQXJyYXkodGhpcy5zaXplKCkpLCBqID0gLTE7XG4gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKGQpIHsgZGF0YVsrK2pdID0gZDsgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgYmluZCA9IGtleSA/IGJpbmRLZXkgOiBiaW5kSW5kZXgsXG4gICAgICBwYXJlbnRzID0gdGhpcy5fcGFyZW50cyxcbiAgICAgIGdyb3VwcyA9IHRoaXMuX2dyb3VwcztcblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHZhbHVlID0gY29uc3RhbnQodmFsdWUpO1xuXG4gIGZvciAodmFyIG0gPSBncm91cHMubGVuZ3RoLCB1cGRhdGUgPSBuZXcgQXJyYXkobSksIGVudGVyID0gbmV3IEFycmF5KG0pLCBleGl0ID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIHZhciBwYXJlbnQgPSBwYXJlbnRzW2pdLFxuICAgICAgICBncm91cCA9IGdyb3Vwc1tqXSxcbiAgICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICAgIGRhdGEgPSB2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cyksXG4gICAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgZW50ZXJHcm91cCA9IGVudGVyW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICB1cGRhdGVHcm91cCA9IHVwZGF0ZVtqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgZXhpdEdyb3VwID0gZXhpdFtqXSA9IG5ldyBBcnJheShncm91cExlbmd0aCk7XG5cbiAgICBiaW5kKHBhcmVudCwgZ3JvdXAsIGVudGVyR3JvdXAsIHVwZGF0ZUdyb3VwLCBleGl0R3JvdXAsIGRhdGEsIGtleSk7XG5cbiAgICAvLyBOb3cgY29ubmVjdCB0aGUgZW50ZXIgbm9kZXMgdG8gdGhlaXIgZm9sbG93aW5nIHVwZGF0ZSBub2RlLCBzdWNoIHRoYXRcbiAgICAvLyBhcHBlbmRDaGlsZCBjYW4gaW5zZXJ0IHRoZSBtYXRlcmlhbGl6ZWQgZW50ZXIgbm9kZSBiZWZvcmUgdGhpcyBub2RlLFxuICAgIC8vIHJhdGhlciB0aGFuIGF0IHRoZSBlbmQgb2YgdGhlIHBhcmVudCBub2RlLlxuICAgIGZvciAodmFyIGkwID0gMCwgaTEgPSAwLCBwcmV2aW91cywgbmV4dDsgaTAgPCBkYXRhTGVuZ3RoOyArK2kwKSB7XG4gICAgICBpZiAocHJldmlvdXMgPSBlbnRlckdyb3VwW2kwXSkge1xuICAgICAgICBpZiAoaTAgPj0gaTEpIGkxID0gaTAgKyAxO1xuICAgICAgICB3aGlsZSAoIShuZXh0ID0gdXBkYXRlR3JvdXBbaTFdKSAmJiArK2kxIDwgZGF0YUxlbmd0aCk7XG4gICAgICAgIHByZXZpb3VzLl9uZXh0ID0gbmV4dCB8fCBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZSA9IG5ldyBTZWxlY3Rpb24odXBkYXRlLCBwYXJlbnRzKTtcbiAgdXBkYXRlLl9lbnRlciA9IGVudGVyO1xuICB1cGRhdGUuX2V4aXQgPSBleGl0O1xuICByZXR1cm4gdXBkYXRlO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVOb2RlKGEsIGIpIHtcbiAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzb3J0Z3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzb3J0Z3JvdXBbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0Z3JvdXAuc29ydChjb21wYXJlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzb3J0Z3JvdXBzLCB0aGlzLl9wYXJlbnRzKS5vcmRlcigpO1xufVxuXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuLi9uYW1lc3BhY2VcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7XG4gICAgcmV0dXJuIGZ1bGxuYW1lLmxvY2FsXG4gICAgICAgID8gbm9kZS5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpXG4gICAgICAgIDogbm9kZS5nZXRBdHRyaWJ1dGUoZnVsbG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbilcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKSkoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvd1wiO1xuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUNvbnN0YW50KG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gICAgZWxzZSB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHYsIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgICAgPyB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgICAgICAgID8gc3R5bGVSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyBzdHlsZUZ1bmN0aW9uXG4gICAgICAgICAgICA6IHN0eWxlQ29uc3RhbnQpKG5hbWUsIHZhbHVlLCBwcmlvcml0eSA9PSBudWxsID8gXCJcIiA6IHByaW9yaXR5KSlcbiAgICAgIDogc3R5bGVWYWx1ZSh0aGlzLm5vZGUoKSwgbmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHlsZVZhbHVlKG5vZGUsIG5hbWUpIHtcbiAgcmV0dXJuIG5vZGUuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKVxuICAgICAgfHwgZGVmYXVsdFZpZXcobm9kZSkuZ2V0Q29tcHV0ZWRTdHlsZShub2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpO1xufVxuIiwiZnVuY3Rpb24gcHJvcGVydHlSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZGVsZXRlIHRoaXNbbmFtZV07XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5Q29uc3RhbnQobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXNbbmFtZV0gPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIGRlbGV0ZSB0aGlzW25hbWVdO1xuICAgIGVsc2UgdGhpc1tuYW1lXSA9IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgICAgPyB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IHByb3BlcnR5UmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHByb3BlcnR5RnVuY3Rpb25cbiAgICAgICAgICA6IHByb3BlcnR5Q29uc3RhbnQpKG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKClbbmFtZV07XG59XG4iLCJmdW5jdGlvbiBjbGFzc0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnRyaW0oKS5zcGxpdCgvXnxcXHMrLyk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzTGlzdChub2RlKSB7XG4gIHJldHVybiBub2RlLmNsYXNzTGlzdCB8fCBuZXcgQ2xhc3NMaXN0KG5vZGUpO1xufVxuXG5mdW5jdGlvbiBDbGFzc0xpc3Qobm9kZSkge1xuICB0aGlzLl9ub2RlID0gbm9kZTtcbiAgdGhpcy5fbmFtZXMgPSBjbGFzc0FycmF5KG5vZGUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgfHwgXCJcIik7XG59XG5cbkNsYXNzTGlzdC5wcm90b3R5cGUgPSB7XG4gIGFkZDogZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICBpZiAoaSA8IDApIHtcbiAgICAgIHRoaXMuX25hbWVzLnB1c2gobmFtZSk7XG4gICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcbiAgICB9XG4gIH0sXG4gIHJlbW92ZTogZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBpID0gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKTtcbiAgICBpZiAoaSA+PSAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5zcGxpY2UoaSwgMSk7XG4gICAgICB0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHRoaXMuX25hbWVzLmpvaW4oXCIgXCIpKTtcbiAgICB9XG4gIH0sXG4gIGNvbnRhaW5zOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSkgPj0gMDtcbiAgfVxufTtcblxuZnVuY3Rpb24gY2xhc3NlZEFkZChub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5hZGQobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkUmVtb3ZlKG5vZGUsIG5hbWVzKSB7XG4gIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBsaXN0LnJlbW92ZShuYW1lc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRUcnVlKG5hbWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjbGFzc2VkQWRkKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZEZhbHNlKG5hbWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBjbGFzc2VkUmVtb3ZlKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZEZ1bmN0aW9uKG5hbWVzLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgKHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgPyBjbGFzc2VkQWRkIDogY2xhc3NlZFJlbW92ZSkodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgbmFtZXMgPSBjbGFzc0FycmF5KG5hbWUgKyBcIlwiKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgbGlzdCA9IGNsYXNzTGlzdCh0aGlzLm5vZGUoKSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgICB3aGlsZSAoKytpIDwgbikgaWYgKCFsaXN0LmNvbnRhaW5zKG5hbWVzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gY2xhc3NlZEZ1bmN0aW9uIDogdmFsdWVcbiAgICAgID8gY2xhc3NlZFRydWVcbiAgICAgIDogY2xhc3NlZEZhbHNlKShuYW1lcywgdmFsdWUpKTtcbn1cbiIsImZ1bmN0aW9uIHRleHRSZW1vdmUoKSB7XG4gIHRoaXMudGV4dENvbnRlbnQgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiB0ZXh0Q29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGV4dEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHYgPT0gbnVsbCA/IFwiXCIgOiB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gdGV4dFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gdGV4dEZ1bmN0aW9uXG4gICAgICAgICAgOiB0ZXh0Q29uc3RhbnQpKHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKCkudGV4dENvbnRlbnQ7XG59XG4iLCJmdW5jdGlvbiBodG1sUmVtb3ZlKCkge1xuICB0aGlzLmlubmVySFRNTCA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGh0bWxDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pbm5lckhUTUwgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaHRtbEZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdGhpcy5pbm5lckhUTUwgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IGh0bWxSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGh0bWxGdW5jdGlvblxuICAgICAgICAgIDogaHRtbENvbnN0YW50KSh2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpLmlubmVySFRNTDtcbn1cbiIsImZ1bmN0aW9uIHJhaXNlKCkge1xuICBpZiAodGhpcy5uZXh0U2libGluZykgdGhpcy5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyYWlzZSk7XG59XG4iLCJmdW5jdGlvbiBsb3dlcigpIHtcbiAgaWYgKHRoaXMucHJldmlvdXNTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMsIHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gobG93ZXIpO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3JcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3JcIjtcblxuZnVuY3Rpb24gY29uc3RhbnROdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgYmVmb3JlKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSksXG4gICAgICBzZWxlY3QgPSBiZWZvcmUgPT0gbnVsbCA/IGNvbnN0YW50TnVsbCA6IHR5cGVvZiBiZWZvcmUgPT09IFwiZnVuY3Rpb25cIiA/IGJlZm9yZSA6IHNlbGVjdG9yKGJlZm9yZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyZW1vdmUpO1xufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3dcIjtcblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChub2RlLCB0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIHdpbmRvdyA9IGRlZmF1bHRWaWV3KG5vZGUpLFxuICAgICAgZXZlbnQgPSB3aW5kb3cuQ3VzdG9tRXZlbnQ7XG5cbiAgaWYgKHR5cGVvZiBldmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZXZlbnQgPSBuZXcgZXZlbnQodHlwZSwgcGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBldmVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgIGlmIChwYXJhbXMpIGV2ZW50LmluaXRFdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUpLCBldmVudC5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICAgIGVsc2UgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaENvbnN0YW50KHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hGdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBkaXNwYXRjaEZ1bmN0aW9uXG4gICAgICA6IGRpc3BhdGNoQ29uc3RhbnQpKHR5cGUsIHBhcmFtcykpO1xufVxuIiwiaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdEFsbCBmcm9tIFwiLi9zZWxlY3RBbGxcIjtcbmltcG9ydCBzZWxlY3Rpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlclwiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXRhIGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW50ZXIgZnJvbSBcIi4vZW50ZXJcIjtcbmltcG9ydCBzZWxlY3Rpb25fZXhpdCBmcm9tIFwiLi9leGl0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29yZGVyIGZyb20gXCIuL29yZGVyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NvcnQgZnJvbSBcIi4vc29ydFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9jYWxsIGZyb20gXCIuL2NhbGxcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZXMgZnJvbSBcIi4vbm9kZXNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbm9kZSBmcm9tIFwiLi9ub2RlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NpemUgZnJvbSBcIi4vc2l6ZVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lbXB0eSBmcm9tIFwiLi9lbXB0eVwiO1xuaW1wb3J0IHNlbGVjdGlvbl9lYWNoIGZyb20gXCIuL2VhY2hcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXR0ciBmcm9tIFwiLi9hdHRyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3N0eWxlIGZyb20gXCIuL3N0eWxlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3Byb3BlcnR5IGZyb20gXCIuL3Byb3BlcnR5XCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NsYXNzZWQgZnJvbSBcIi4vY2xhc3NlZFwiO1xuaW1wb3J0IHNlbGVjdGlvbl90ZXh0IGZyb20gXCIuL3RleHRcIjtcbmltcG9ydCBzZWxlY3Rpb25faHRtbCBmcm9tIFwiLi9odG1sXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JhaXNlIGZyb20gXCIuL3JhaXNlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2xvd2VyIGZyb20gXCIuL2xvd2VyXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2FwcGVuZCBmcm9tIFwiLi9hcHBlbmRcIjtcbmltcG9ydCBzZWxlY3Rpb25faW5zZXJ0IGZyb20gXCIuL2luc2VydFwiO1xuaW1wb3J0IHNlbGVjdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2RhdHVtIGZyb20gXCIuL2RhdHVtXCI7XG5pbXBvcnQgc2VsZWN0aW9uX29uIGZyb20gXCIuL29uXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2Rpc3BhdGNoIGZyb20gXCIuL2Rpc3BhdGNoXCI7XG5cbmV4cG9ydCB2YXIgcm9vdCA9IFtudWxsXTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdGlvbihncm91cHMsIHBhcmVudHMpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLCByb290KTtcbn1cblxuU2VsZWN0aW9uLnByb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBTZWxlY3Rpb24sXG4gIHNlbGVjdDogc2VsZWN0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiBzZWxlY3Rpb25fc2VsZWN0QWxsLFxuICBmaWx0ZXI6IHNlbGVjdGlvbl9maWx0ZXIsXG4gIGRhdGE6IHNlbGVjdGlvbl9kYXRhLFxuICBlbnRlcjogc2VsZWN0aW9uX2VudGVyLFxuICBleGl0OiBzZWxlY3Rpb25fZXhpdCxcbiAgbWVyZ2U6IHNlbGVjdGlvbl9tZXJnZSxcbiAgb3JkZXI6IHNlbGVjdGlvbl9vcmRlcixcbiAgc29ydDogc2VsZWN0aW9uX3NvcnQsXG4gIGNhbGw6IHNlbGVjdGlvbl9jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX25vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fbm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3NpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9lYWNoLFxuICBhdHRyOiBzZWxlY3Rpb25fYXR0cixcbiAgc3R5bGU6IHNlbGVjdGlvbl9zdHlsZSxcbiAgcHJvcGVydHk6IHNlbGVjdGlvbl9wcm9wZXJ0eSxcbiAgY2xhc3NlZDogc2VsZWN0aW9uX2NsYXNzZWQsXG4gIHRleHQ6IHNlbGVjdGlvbl90ZXh0LFxuICBodG1sOiBzZWxlY3Rpb25faHRtbCxcbiAgcmFpc2U6IHNlbGVjdGlvbl9yYWlzZSxcbiAgbG93ZXI6IHNlbGVjdGlvbl9sb3dlcixcbiAgYXBwZW5kOiBzZWxlY3Rpb25fYXBwZW5kLFxuICBpbnNlcnQ6IHNlbGVjdGlvbl9pbnNlcnQsXG4gIHJlbW92ZTogc2VsZWN0aW9uX3JlbW92ZSxcbiAgZGF0dW06IHNlbGVjdGlvbl9kYXR1bSxcbiAgb246IHNlbGVjdGlvbl9vbixcbiAgZGlzcGF0Y2g6IHNlbGVjdGlvbl9kaXNwYXRjaFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0aW9uO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29uc3RydWN0b3IsIGZhY3RvcnksIHByb3RvdHlwZSkge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBmYWN0b3J5LnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgcHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQocGFyZW50LCBkZWZpbml0aW9uKSB7XG4gIHZhciBwcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHBhcmVudC5wcm90b3R5cGUpO1xuICBmb3IgKHZhciBrZXkgaW4gZGVmaW5pdGlvbikgcHJvdG90eXBlW2tleV0gPSBkZWZpbml0aW9uW2tleV07XG4gIHJldHVybiBwcm90b3R5cGU7XG59XG4iLCJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmVcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIENvbG9yKCkge31cblxuZXhwb3J0IHZhciBkYXJrZXIgPSAwLjc7XG5leHBvcnQgdmFyIGJyaWdodGVyID0gMSAvIGRhcmtlcjtcblxudmFyIHJlSSA9IFwiXFxcXHMqKFsrLV0/XFxcXGQrKVxcXFxzKlwiLFxuICAgIHJlTiA9IFwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pXFxcXHMqXCIsXG4gICAgcmVQID0gXCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPyklXFxcXHMqXCIsXG4gICAgcmVIZXgzID0gL14jKFswLTlhLWZdezN9KSQvLFxuICAgIHJlSGV4NiA9IC9eIyhbMC05YS1mXXs2fSkkLyxcbiAgICByZVJnYkludGVnZXIgPSBuZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIgKyBbcmVJLCByZUksIHJlSV0gKyBcIlxcXFwpJFwiKSxcbiAgICByZVJnYlBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIgKyBbcmVQLCByZVAsIHJlUF0gKyBcIlxcXFwpJFwiKSxcbiAgICByZVJnYmFJbnRlZ2VyID0gbmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIiArIFtyZUksIHJlSSwgcmVJLCByZU5dICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JhUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIgKyBbcmVQLCByZVAsIHJlUCwgcmVOXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlSHNsUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJeaHNsXFxcXChcIiArIFtyZU4sIHJlUCwgcmVQXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlSHNsYVBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXmhzbGFcXFxcKFwiICsgW3JlTiwgcmVQLCByZVAsIHJlTl0gKyBcIlxcXFwpJFwiKTtcblxudmFyIG5hbWVkID0ge1xuICBhbGljZWJsdWU6IDB4ZjBmOGZmLFxuICBhbnRpcXVld2hpdGU6IDB4ZmFlYmQ3LFxuICBhcXVhOiAweDAwZmZmZixcbiAgYXF1YW1hcmluZTogMHg3ZmZmZDQsXG4gIGF6dXJlOiAweGYwZmZmZixcbiAgYmVpZ2U6IDB4ZjVmNWRjLFxuICBiaXNxdWU6IDB4ZmZlNGM0LFxuICBibGFjazogMHgwMDAwMDAsXG4gIGJsYW5jaGVkYWxtb25kOiAweGZmZWJjZCxcbiAgYmx1ZTogMHgwMDAwZmYsXG4gIGJsdWV2aW9sZXQ6IDB4OGEyYmUyLFxuICBicm93bjogMHhhNTJhMmEsXG4gIGJ1cmx5d29vZDogMHhkZWI4ODcsXG4gIGNhZGV0Ymx1ZTogMHg1ZjllYTAsXG4gIGNoYXJ0cmV1c2U6IDB4N2ZmZjAwLFxuICBjaG9jb2xhdGU6IDB4ZDI2OTFlLFxuICBjb3JhbDogMHhmZjdmNTAsXG4gIGNvcm5mbG93ZXJibHVlOiAweDY0OTVlZCxcbiAgY29ybnNpbGs6IDB4ZmZmOGRjLFxuICBjcmltc29uOiAweGRjMTQzYyxcbiAgY3lhbjogMHgwMGZmZmYsXG4gIGRhcmtibHVlOiAweDAwMDA4YixcbiAgZGFya2N5YW46IDB4MDA4YjhiLFxuICBkYXJrZ29sZGVucm9kOiAweGI4ODYwYixcbiAgZGFya2dyYXk6IDB4YTlhOWE5LFxuICBkYXJrZ3JlZW46IDB4MDA2NDAwLFxuICBkYXJrZ3JleTogMHhhOWE5YTksXG4gIGRhcmtraGFraTogMHhiZGI3NmIsXG4gIGRhcmttYWdlbnRhOiAweDhiMDA4YixcbiAgZGFya29saXZlZ3JlZW46IDB4NTU2YjJmLFxuICBkYXJrb3JhbmdlOiAweGZmOGMwMCxcbiAgZGFya29yY2hpZDogMHg5OTMyY2MsXG4gIGRhcmtyZWQ6IDB4OGIwMDAwLFxuICBkYXJrc2FsbW9uOiAweGU5OTY3YSxcbiAgZGFya3NlYWdyZWVuOiAweDhmYmM4ZixcbiAgZGFya3NsYXRlYmx1ZTogMHg0ODNkOGIsXG4gIGRhcmtzbGF0ZWdyYXk6IDB4MmY0ZjRmLFxuICBkYXJrc2xhdGVncmV5OiAweDJmNGY0ZixcbiAgZGFya3R1cnF1b2lzZTogMHgwMGNlZDEsXG4gIGRhcmt2aW9sZXQ6IDB4OTQwMGQzLFxuICBkZWVwcGluazogMHhmZjE0OTMsXG4gIGRlZXBza3libHVlOiAweDAwYmZmZixcbiAgZGltZ3JheTogMHg2OTY5NjksXG4gIGRpbWdyZXk6IDB4Njk2OTY5LFxuICBkb2RnZXJibHVlOiAweDFlOTBmZixcbiAgZmlyZWJyaWNrOiAweGIyMjIyMixcbiAgZmxvcmFsd2hpdGU6IDB4ZmZmYWYwLFxuICBmb3Jlc3RncmVlbjogMHgyMjhiMjIsXG4gIGZ1Y2hzaWE6IDB4ZmYwMGZmLFxuICBnYWluc2Jvcm86IDB4ZGNkY2RjLFxuICBnaG9zdHdoaXRlOiAweGY4ZjhmZixcbiAgZ29sZDogMHhmZmQ3MDAsXG4gIGdvbGRlbnJvZDogMHhkYWE1MjAsXG4gIGdyYXk6IDB4ODA4MDgwLFxuICBncmVlbjogMHgwMDgwMDAsXG4gIGdyZWVueWVsbG93OiAweGFkZmYyZixcbiAgZ3JleTogMHg4MDgwODAsXG4gIGhvbmV5ZGV3OiAweGYwZmZmMCxcbiAgaG90cGluazogMHhmZjY5YjQsXG4gIGluZGlhbnJlZDogMHhjZDVjNWMsXG4gIGluZGlnbzogMHg0YjAwODIsXG4gIGl2b3J5OiAweGZmZmZmMCxcbiAga2hha2k6IDB4ZjBlNjhjLFxuICBsYXZlbmRlcjogMHhlNmU2ZmEsXG4gIGxhdmVuZGVyYmx1c2g6IDB4ZmZmMGY1LFxuICBsYXduZ3JlZW46IDB4N2NmYzAwLFxuICBsZW1vbmNoaWZmb246IDB4ZmZmYWNkLFxuICBsaWdodGJsdWU6IDB4YWRkOGU2LFxuICBsaWdodGNvcmFsOiAweGYwODA4MCxcbiAgbGlnaHRjeWFuOiAweGUwZmZmZixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IDB4ZmFmYWQyLFxuICBsaWdodGdyYXk6IDB4ZDNkM2QzLFxuICBsaWdodGdyZWVuOiAweDkwZWU5MCxcbiAgbGlnaHRncmV5OiAweGQzZDNkMyxcbiAgbGlnaHRwaW5rOiAweGZmYjZjMSxcbiAgbGlnaHRzYWxtb246IDB4ZmZhMDdhLFxuICBsaWdodHNlYWdyZWVuOiAweDIwYjJhYSxcbiAgbGlnaHRza3libHVlOiAweDg3Y2VmYSxcbiAgbGlnaHRzbGF0ZWdyYXk6IDB4Nzc4ODk5LFxuICBsaWdodHNsYXRlZ3JleTogMHg3Nzg4OTksXG4gIGxpZ2h0c3RlZWxibHVlOiAweGIwYzRkZSxcbiAgbGlnaHR5ZWxsb3c6IDB4ZmZmZmUwLFxuICBsaW1lOiAweDAwZmYwMCxcbiAgbGltZWdyZWVuOiAweDMyY2QzMixcbiAgbGluZW46IDB4ZmFmMGU2LFxuICBtYWdlbnRhOiAweGZmMDBmZixcbiAgbWFyb29uOiAweDgwMDAwMCxcbiAgbWVkaXVtYXF1YW1hcmluZTogMHg2NmNkYWEsXG4gIG1lZGl1bWJsdWU6IDB4MDAwMGNkLFxuICBtZWRpdW1vcmNoaWQ6IDB4YmE1NWQzLFxuICBtZWRpdW1wdXJwbGU6IDB4OTM3MGRiLFxuICBtZWRpdW1zZWFncmVlbjogMHgzY2IzNzEsXG4gIG1lZGl1bXNsYXRlYmx1ZTogMHg3YjY4ZWUsXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiAweDAwZmE5YSxcbiAgbWVkaXVtdHVycXVvaXNlOiAweDQ4ZDFjYyxcbiAgbWVkaXVtdmlvbGV0cmVkOiAweGM3MTU4NSxcbiAgbWlkbmlnaHRibHVlOiAweDE5MTk3MCxcbiAgbWludGNyZWFtOiAweGY1ZmZmYSxcbiAgbWlzdHlyb3NlOiAweGZmZTRlMSxcbiAgbW9jY2FzaW46IDB4ZmZlNGI1LFxuICBuYXZham93aGl0ZTogMHhmZmRlYWQsXG4gIG5hdnk6IDB4MDAwMDgwLFxuICBvbGRsYWNlOiAweGZkZjVlNixcbiAgb2xpdmU6IDB4ODA4MDAwLFxuICBvbGl2ZWRyYWI6IDB4NmI4ZTIzLFxuICBvcmFuZ2U6IDB4ZmZhNTAwLFxuICBvcmFuZ2VyZWQ6IDB4ZmY0NTAwLFxuICBvcmNoaWQ6IDB4ZGE3MGQ2LFxuICBwYWxlZ29sZGVucm9kOiAweGVlZThhYSxcbiAgcGFsZWdyZWVuOiAweDk4ZmI5OCxcbiAgcGFsZXR1cnF1b2lzZTogMHhhZmVlZWUsXG4gIHBhbGV2aW9sZXRyZWQ6IDB4ZGI3MDkzLFxuICBwYXBheWF3aGlwOiAweGZmZWZkNSxcbiAgcGVhY2hwdWZmOiAweGZmZGFiOSxcbiAgcGVydTogMHhjZDg1M2YsXG4gIHBpbms6IDB4ZmZjMGNiLFxuICBwbHVtOiAweGRkYTBkZCxcbiAgcG93ZGVyYmx1ZTogMHhiMGUwZTYsXG4gIHB1cnBsZTogMHg4MDAwODAsXG4gIHJlYmVjY2FwdXJwbGU6IDB4NjYzMzk5LFxuICByZWQ6IDB4ZmYwMDAwLFxuICByb3N5YnJvd246IDB4YmM4ZjhmLFxuICByb3lhbGJsdWU6IDB4NDE2OWUxLFxuICBzYWRkbGVicm93bjogMHg4YjQ1MTMsXG4gIHNhbG1vbjogMHhmYTgwNzIsXG4gIHNhbmR5YnJvd246IDB4ZjRhNDYwLFxuICBzZWFncmVlbjogMHgyZThiNTcsXG4gIHNlYXNoZWxsOiAweGZmZjVlZSxcbiAgc2llbm5hOiAweGEwNTIyZCxcbiAgc2lsdmVyOiAweGMwYzBjMCxcbiAgc2t5Ymx1ZTogMHg4N2NlZWIsXG4gIHNsYXRlYmx1ZTogMHg2YTVhY2QsXG4gIHNsYXRlZ3JheTogMHg3MDgwOTAsXG4gIHNsYXRlZ3JleTogMHg3MDgwOTAsXG4gIHNub3c6IDB4ZmZmYWZhLFxuICBzcHJpbmdncmVlbjogMHgwMGZmN2YsXG4gIHN0ZWVsYmx1ZTogMHg0NjgyYjQsXG4gIHRhbjogMHhkMmI0OGMsXG4gIHRlYWw6IDB4MDA4MDgwLFxuICB0aGlzdGxlOiAweGQ4YmZkOCxcbiAgdG9tYXRvOiAweGZmNjM0NyxcbiAgdHVycXVvaXNlOiAweDQwZTBkMCxcbiAgdmlvbGV0OiAweGVlODJlZSxcbiAgd2hlYXQ6IDB4ZjVkZWIzLFxuICB3aGl0ZTogMHhmZmZmZmYsXG4gIHdoaXRlc21va2U6IDB4ZjVmNWY1LFxuICB5ZWxsb3c6IDB4ZmZmZjAwLFxuICB5ZWxsb3dncmVlbjogMHg5YWNkMzJcbn07XG5cbmRlZmluZShDb2xvciwgY29sb3IsIHtcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCk7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKSArIFwiXCI7XG4gIH1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb2xvcihmb3JtYXQpIHtcbiAgdmFyIG07XG4gIGZvcm1hdCA9IChmb3JtYXQgKyBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIChtID0gcmVIZXgzLmV4ZWMoZm9ybWF0KSkgPyAobSA9IHBhcnNlSW50KG1bMV0sIDE2KSwgbmV3IFJnYigobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweDBmMCksIChtID4+IDQgJiAweGYpIHwgKG0gJiAweGYwKSwgKChtICYgMHhmKSA8PCA0KSB8IChtICYgMHhmKSwgMSkpIC8vICNmMDBcbiAgICAgIDogKG0gPSByZUhleDYuZXhlYyhmb3JtYXQpKSA/IHJnYm4ocGFyc2VJbnQobVsxXSwgMTYpKSAvLyAjZmYwMDAwXG4gICAgICA6IChtID0gcmVSZ2JJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0sIG1bMl0sIG1bM10sIDEpIC8vIHJnYigyNTUsIDAsIDApXG4gICAgICA6IChtID0gcmVSZ2JQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBuZXcgUmdiKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIDEpIC8vIHJnYigxMDAlLCAwJSwgMCUpXG4gICAgICA6IChtID0gcmVSZ2JhSW50ZWdlci5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdLCBtWzJdLCBtWzNdLCBtWzRdKSAvLyByZ2JhKDI1NSwgMCwgMCwgMSlcbiAgICAgIDogKG0gPSByZVJnYmFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0gKiAyNTUgLyAxMDAsIG1bMl0gKiAyNTUgLyAxMDAsIG1bM10gKiAyNTUgLyAxMDAsIG1bNF0pIC8vIHJnYigxMDAlLCAwJSwgMCUsIDEpXG4gICAgICA6IChtID0gcmVIc2xQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIDEpIC8vIGhzbCgxMjAsIDUwJSwgNTAlKVxuICAgICAgOiAobSA9IHJlSHNsYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgbVs0XSkgLy8gaHNsYSgxMjAsIDUwJSwgNTAlLCAxKVxuICAgICAgOiBuYW1lZC5oYXNPd25Qcm9wZXJ0eShmb3JtYXQpID8gcmdibihuYW1lZFtmb3JtYXRdKVxuICAgICAgOiBmb3JtYXQgPT09IFwidHJhbnNwYXJlbnRcIiA/IG5ldyBSZ2IoTmFOLCBOYU4sIE5hTiwgMClcbiAgICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gcmdibihuKSB7XG4gIHJldHVybiBuZXcgUmdiKG4gPj4gMTYgJiAweGZmLCBuID4+IDggJiAweGZmLCBuICYgMHhmZiwgMSk7XG59XG5cbmZ1bmN0aW9uIHJnYmEociwgZywgYiwgYSkge1xuICBpZiAoYSA8PSAwKSByID0gZyA9IGIgPSBOYU47XG4gIHJldHVybiBuZXcgUmdiKHIsIGcsIGIsIGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiQ29udmVydChvKSB7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBDb2xvcikpIG8gPSBjb2xvcihvKTtcbiAgaWYgKCFvKSByZXR1cm4gbmV3IFJnYjtcbiAgbyA9IG8ucmdiKCk7XG4gIHJldHVybiBuZXcgUmdiKG8uciwgby5nLCBvLmIsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IHJnYkNvbnZlcnQocikgOiBuZXcgUmdiKHIsIGcsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMuciA9ICtyO1xuICB0aGlzLmcgPSArZztcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoUmdiLCByZ2IsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgwIDw9IHRoaXMuciAmJiB0aGlzLnIgPD0gMjU1KVxuICAgICAgICAmJiAoMCA8PSB0aGlzLmcgJiYgdGhpcy5nIDw9IDI1NSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5iICYmIHRoaXMuYiA8PSAyNTUpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSA9IHRoaXMub3BhY2l0eTsgYSA9IGlzTmFOKGEpID8gMSA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGEpKTtcbiAgICByZXR1cm4gKGEgPT09IDEgPyBcInJnYihcIiA6IFwicmdiYShcIilcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5yKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5nKSB8fCAwKSkgKyBcIiwgXCJcbiAgICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5iKSB8fCAwKSlcbiAgICAgICAgKyAoYSA9PT0gMSA/IFwiKVwiIDogXCIsIFwiICsgYSArIFwiKVwiKTtcbiAgfVxufSkpO1xuXG5mdW5jdGlvbiBoc2xhKGgsIHMsIGwsIGEpIHtcbiAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xuICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgZWxzZSBpZiAocyA8PSAwKSBoID0gTmFOO1xuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG5ldyBIc2woby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgSHNsO1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG87XG4gIG8gPSBvLnJnYigpO1xuICB2YXIgciA9IG8uciAvIDI1NSxcbiAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICBiID0gby5iIC8gMjU1LFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGggPSBOYU4sXG4gICAgICBzID0gbWF4IC0gbWluLFxuICAgICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKHMpIHtcbiAgICBpZiAociA9PT0gbWF4KSBoID0gKGcgLSBiKSAvIHMgKyAoZyA8IGIpICogNjtcbiAgICBlbHNlIGlmIChnID09PSBtYXgpIGggPSAoYiAtIHIpIC8gcyArIDI7XG4gICAgZWxzZSBoID0gKHIgLSBnKSAvIHMgKyA0O1xuICAgIHMgLz0gbCA8IDAuNSA/IG1heCArIG1pbiA6IDIgLSBtYXggLSBtaW47XG4gICAgaCAqPSA2MDtcbiAgfSBlbHNlIHtcbiAgICBzID0gbCA+IDAgJiYgbCA8IDEgPyAwIDogaDtcbiAgfVxuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoc2xDb252ZXJ0KGgpIDogbmV3IEhzbChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIEhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSHNsLCBoc2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGggPSB0aGlzLmggJSAzNjAgKyAodGhpcy5oIDwgMCkgKiAzNjAsXG4gICAgICAgIHMgPSBpc05hTihoKSB8fCBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyxcbiAgICAgICAgbCA9IHRoaXMubCxcbiAgICAgICAgbTIgPSBsICsgKGwgPCAwLjUgPyBsIDogMSAtIGwpICogcyxcbiAgICAgICAgbTEgPSAyICogbCAtIG0yO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgaHNsMnJnYihoID49IDI0MCA/IGggLSAyNDAgOiBoICsgMTIwLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoIDwgMTIwID8gaCArIDI0MCA6IGggLSAxMjAsIG0xLCBtMiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgwIDw9IHRoaXMucyAmJiB0aGlzLnMgPD0gMSB8fCBpc05hTih0aGlzLnMpKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLmwgJiYgdGhpcy5sIDw9IDEpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH1cbn0pKTtcblxuLyogRnJvbSBGdkQgMTMuMzcsIENTUyBDb2xvciBNb2R1bGUgTGV2ZWwgMyAqL1xuZnVuY3Rpb24gaHNsMnJnYihoLCBtMSwgbTIpIHtcbiAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MFxuICAgICAgOiBoIDwgMTgwID8gbTJcbiAgICAgIDogaCA8IDI0MCA/IG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjBcbiAgICAgIDogbTEpICogMjU1O1xufVxuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2J9IGZyb20gXCIuL2NvbG9yXCI7XG5pbXBvcnQge2RlZzJyYWQsIHJhZDJkZWd9IGZyb20gXCIuL21hdGhcIjtcblxudmFyIEtuID0gMTgsXG4gICAgWG4gPSAwLjk1MDQ3MCwgLy8gRDY1IHN0YW5kYXJkIHJlZmVyZW50XG4gICAgWW4gPSAxLFxuICAgIFpuID0gMS4wODg4MzAsXG4gICAgdDAgPSA0IC8gMjksXG4gICAgdDEgPSA2IC8gMjksXG4gICAgdDIgPSAzICogdDEgKiB0MSxcbiAgICB0MyA9IHQxICogdDEgKiB0MTtcblxuZnVuY3Rpb24gbGFiQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgTGFiKSByZXR1cm4gbmV3IExhYihvLmwsIG8uYSwgby5iLCBvLm9wYWNpdHkpO1xuICBpZiAobyBpbnN0YW5jZW9mIEhjbCkge1xuICAgIHZhciBoID0gby5oICogZGVnMnJhZDtcbiAgICByZXR1cm4gbmV3IExhYihvLmwsIE1hdGguY29zKGgpICogby5jLCBNYXRoLnNpbihoKSAqIG8uYywgby5vcGFjaXR5KTtcbiAgfVxuICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XG4gIHZhciBiID0gcmdiMnh5eihvLnIpLFxuICAgICAgYSA9IHJnYjJ4eXooby5nKSxcbiAgICAgIGwgPSByZ2IyeHl6KG8uYiksXG4gICAgICB4ID0geHl6MmxhYigoMC40MTI0NTY0ICogYiArIDAuMzU3NTc2MSAqIGEgKyAwLjE4MDQzNzUgKiBsKSAvIFhuKSxcbiAgICAgIHkgPSB4eXoybGFiKCgwLjIxMjY3MjkgKiBiICsgMC43MTUxNTIyICogYSArIDAuMDcyMTc1MCAqIGwpIC8gWW4pLFxuICAgICAgeiA9IHh5ejJsYWIoKDAuMDE5MzMzOSAqIGIgKyAwLjExOTE5MjAgKiBhICsgMC45NTAzMDQxICogbCkgLyBabik7XG4gIHJldHVybiBuZXcgTGFiKDExNiAqIHkgLSAxNiwgNTAwICogKHggLSB5KSwgMjAwICogKHkgLSB6KSwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBsYWJDb252ZXJ0KGwpIDogbmV3IExhYihsLCBhLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMYWIobCwgYSwgYiwgb3BhY2l0eSkge1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5hID0gK2E7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKExhYiwgbGFiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgKyBLbiAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgLSBLbiAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHZhciB5ID0gKHRoaXMubCArIDE2KSAvIDExNixcbiAgICAgICAgeCA9IGlzTmFOKHRoaXMuYSkgPyB5IDogeSArIHRoaXMuYSAvIDUwMCxcbiAgICAgICAgeiA9IGlzTmFOKHRoaXMuYikgPyB5IDogeSAtIHRoaXMuYiAvIDIwMDtcbiAgICB5ID0gWW4gKiBsYWIyeHl6KHkpO1xuICAgIHggPSBYbiAqIGxhYjJ4eXooeCk7XG4gICAgeiA9IFpuICogbGFiMnh5eih6KTtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIHh5ejJyZ2IoIDMuMjQwNDU0MiAqIHggLSAxLjUzNzEzODUgKiB5IC0gMC40OTg1MzE0ICogeiksIC8vIEQ2NSAtPiBzUkdCXG4gICAgICB4eXoycmdiKC0wLjk2OTI2NjAgKiB4ICsgMS44NzYwMTA4ICogeSArIDAuMDQxNTU2MCAqIHopLFxuICAgICAgeHl6MnJnYiggMC4wNTU2NDM0ICogeCAtIDAuMjA0MDI1OSAqIHkgKyAxLjA1NzIyNTIgKiB6KSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcblxuZnVuY3Rpb24geHl6MmxhYih0KSB7XG4gIHJldHVybiB0ID4gdDMgPyBNYXRoLnBvdyh0LCAxIC8gMykgOiB0IC8gdDIgKyB0MDtcbn1cblxuZnVuY3Rpb24gbGFiMnh5eih0KSB7XG4gIHJldHVybiB0ID4gdDEgPyB0ICogdCAqIHQgOiB0MiAqICh0IC0gdDApO1xufVxuXG5mdW5jdGlvbiB4eXoycmdiKHgpIHtcbiAgcmV0dXJuIDI1NSAqICh4IDw9IDAuMDAzMTMwOCA/IDEyLjkyICogeCA6IDEuMDU1ICogTWF0aC5wb3coeCwgMSAvIDIuNCkgLSAwLjA1NSk7XG59XG5cbmZ1bmN0aW9uIHJnYjJ4eXooeCkge1xuICByZXR1cm4gKHggLz0gMjU1KSA8PSAwLjA0MDQ1ID8geCAvIDEyLjkyIDogTWF0aC5wb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn1cblxuZnVuY3Rpb24gaGNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSGNsKSByZXR1cm4gbmV3IEhjbChvLmgsIG8uYywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgTGFiKSkgbyA9IGxhYkNvbnZlcnQobyk7XG4gIHZhciBoID0gTWF0aC5hdGFuMihvLmIsIG8uYSkgKiByYWQyZGVnO1xuICByZXR1cm4gbmV3IEhjbChoIDwgMCA/IGggKyAzNjAgOiBoLCBNYXRoLnNxcnQoby5hICogby5hICsgby5iICogby5iKSwgby5sLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGNsKGgsIGMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGgpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICB0aGlzLmggPSAraDtcbiAgdGhpcy5jID0gK2M7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKEhjbCwgaGNsLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sICsgS24gKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sIC0gS24gKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2I6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBsYWJDb252ZXJ0KHRoaXMpLnJnYigpO1xuICB9XG59KSk7XG4iLCJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmVcIjtcbmltcG9ydCB7Q29sb3IsIHJnYkNvbnZlcnQsIFJnYiwgZGFya2VyLCBicmlnaHRlcn0gZnJvbSBcIi4vY29sb3JcIjtcbmltcG9ydCB7ZGVnMnJhZCwgcmFkMmRlZ30gZnJvbSBcIi4vbWF0aFwiO1xuXG52YXIgQSA9IC0wLjE0ODYxLFxuICAgIEIgPSArMS43ODI3NyxcbiAgICBDID0gLTAuMjkyMjcsXG4gICAgRCA9IC0wLjkwNjQ5LFxuICAgIEUgPSArMS45NzI5NCxcbiAgICBFRCA9IEUgKiBELFxuICAgIEVCID0gRSAqIEIsXG4gICAgQkNfREEgPSBCICogQyAtIEQgKiBBO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXhDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBDdWJlaGVsaXgpIHJldHVybiBuZXcgQ3ViZWhlbGl4KG8uaCwgby5zLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBSZ2IpKSBvID0gcmdiQ29udmVydChvKTtcbiAgdmFyIHIgPSBvLnIgLyAyNTUsXG4gICAgICBnID0gby5nIC8gMjU1LFxuICAgICAgYiA9IG8uYiAvIDI1NSxcbiAgICAgIGwgPSAoQkNfREEgKiBiICsgRUQgKiByIC0gRUIgKiBnKSAvIChCQ19EQSArIEVEIC0gRUIpLFxuICAgICAgYmwgPSBiIC0gbCxcbiAgICAgIGsgPSAoRSAqIChnIC0gbCkgLSBDICogYmwpIC8gRCxcbiAgICAgIHMgPSBNYXRoLnNxcnQoayAqIGsgKyBibCAqIGJsKSAvIChFICogbCAqICgxIC0gbCkpLCAvLyBOYU4gaWYgbD0wIG9yIGw9MVxuICAgICAgaCA9IHMgPyBNYXRoLmF0YW4yKGssIGJsKSAqIHJhZDJkZWcgLSAxMjAgOiBOYU47XG4gIHJldHVybiBuZXcgQ3ViZWhlbGl4KGggPCAwID8gaCArIDM2MCA6IGgsIHMsIGwsIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGN1YmVoZWxpeChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY3ViZWhlbGl4Q29udmVydChoKSA6IG5ldyBDdWJlaGVsaXgoaCwgcywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3ViZWhlbGl4KGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgdGhpcy5oID0gK2g7XG4gIHRoaXMucyA9ICtzO1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShDdWJlaGVsaXgsIGN1YmVoZWxpeCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgQ3ViZWhlbGl4KHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IEN1YmVoZWxpeCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgaCA9IGlzTmFOKHRoaXMuaCkgPyAwIDogKHRoaXMuaCArIDEyMCkgKiBkZWcycmFkLFxuICAgICAgICBsID0gK3RoaXMubCxcbiAgICAgICAgYSA9IGlzTmFOKHRoaXMucykgPyAwIDogdGhpcy5zICogbCAqICgxIC0gbCksXG4gICAgICAgIGNvc2ggPSBNYXRoLmNvcyhoKSxcbiAgICAgICAgc2luaCA9IE1hdGguc2luKGgpO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgMjU1ICogKGwgKyBhICogKEEgKiBjb3NoICsgQiAqIHNpbmgpKSxcbiAgICAgIDI1NSAqIChsICsgYSAqIChDICogY29zaCArIEQgKiBzaW5oKSksXG4gICAgICAyNTUgKiAobCArIGEgKiAoRSAqIGNvc2gpKSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcbiIsImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudFwiO1xuXG5mdW5jdGlvbiBsaW5lYXIoYSwgZCkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgdCAqIGQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGV4cG9uZW50aWFsKGEsIGIsIHkpIHtcbiAgcmV0dXJuIGEgPSBNYXRoLnBvdyhhLCB5KSwgYiA9IE1hdGgucG93KGIsIHkpIC0gYSwgeSA9IDEgLyB5LCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KGEgKyB0ICogYiwgeSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBodWUoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2FtbWEoeSkge1xuICByZXR1cm4gKHkgPSAreSkgPT09IDEgPyBub2dhbW1hIDogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiIC0gYSA/IGV4cG9uZW50aWFsKGEsIGIsIHkpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vZ2FtbWEoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuIiwiaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXJcIjtcblxudmFyIHJlQSA9IC9bLStdPyg/OlxcZCtcXC4/XFxkKnxcXC4/XFxkKykoPzpbZUVdWy0rXT9cXGQrKT8vZyxcbiAgICByZUIgPSBuZXcgUmVnRXhwKHJlQS5zb3VyY2UsIFwiZ1wiKTtcblxuZnVuY3Rpb24gemVybyhiKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gb25lKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gYih0KSArIFwiXCI7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGJpID0gcmVBLmxhc3RJbmRleCA9IHJlQi5sYXN0SW5kZXggPSAwLCAvLyBzY2FuIGluZGV4IGZvciBuZXh0IG51bWJlciBpbiBiXG4gICAgICBhbSwgLy8gY3VycmVudCBtYXRjaCBpbiBhXG4gICAgICBibSwgLy8gY3VycmVudCBtYXRjaCBpbiBiXG4gICAgICBicywgLy8gc3RyaW5nIHByZWNlZGluZyBjdXJyZW50IG51bWJlciBpbiBiLCBpZiBhbnlcbiAgICAgIGkgPSAtMSwgLy8gaW5kZXggaW4gc1xuICAgICAgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgIHEgPSBbXTsgLy8gbnVtYmVyIGludGVycG9sYXRvcnNcblxuICAvLyBDb2VyY2UgaW5wdXRzIHRvIHN0cmluZ3MuXG4gIGEgPSBhICsgXCJcIiwgYiA9IGIgKyBcIlwiO1xuXG4gIC8vIEludGVycG9sYXRlIHBhaXJzIG9mIG51bWJlcnMgaW4gYSAmIGIuXG4gIHdoaWxlICgoYW0gPSByZUEuZXhlYyhhKSlcbiAgICAgICYmIChibSA9IHJlQi5leGVjKGIpKSkge1xuICAgIGlmICgoYnMgPSBibS5pbmRleCkgPiBiaSkgeyAvLyBhIHN0cmluZyBwcmVjZWRlcyB0aGUgbmV4dCBudW1iZXIgaW4gYlxuICAgICAgYnMgPSBiLnNsaWNlKGJpLCBicyk7XG4gICAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gICAgfVxuICAgIGlmICgoYW0gPSBhbVswXSkgPT09IChibSA9IGJtWzBdKSkgeyAvLyBudW1iZXJzIGluIGEgJiBiIG1hdGNoXG4gICAgICBpZiAoc1tpXSkgc1tpXSArPSBibTsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICAgIGVsc2Ugc1srK2ldID0gYm07XG4gICAgfSBlbHNlIHsgLy8gaW50ZXJwb2xhdGUgbm9uLW1hdGNoaW5nIG51bWJlcnNcbiAgICAgIHNbKytpXSA9IG51bGw7XG4gICAgICBxLnB1c2goe2k6IGksIHg6IG51bWJlcihhbSwgYm0pfSk7XG4gICAgfVxuICAgIGJpID0gcmVCLmxhc3RJbmRleDtcbiAgfVxuXG4gIC8vIEFkZCByZW1haW5zIG9mIGIuXG4gIGlmIChiaSA8IGIubGVuZ3RoKSB7XG4gICAgYnMgPSBiLnNsaWNlKGJpKTtcbiAgICBpZiAoc1tpXSkgc1tpXSArPSBiczsgLy8gY29hbGVzY2Ugd2l0aCBwcmV2aW91cyBzdHJpbmdcbiAgICBlbHNlIHNbKytpXSA9IGJzO1xuICB9XG5cbiAgLy8gU3BlY2lhbCBvcHRpbWl6YXRpb24gZm9yIG9ubHkgYSBzaW5nbGUgbWF0Y2guXG4gIC8vIE90aGVyd2lzZSwgaW50ZXJwb2xhdGUgZWFjaCBvZiB0aGUgbnVtYmVycyBhbmQgcmVqb2luIHRoZSBzdHJpbmcuXG4gIHJldHVybiBzLmxlbmd0aCA8IDIgPyAocVswXVxuICAgICAgPyBvbmUocVswXS54KVxuICAgICAgOiB6ZXJvKGIpKVxuICAgICAgOiAoYiA9IHEubGVuZ3RoLCBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG87IGkgPCBiOyArK2kpIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcbiAgICAgICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xuICAgICAgICB9KTtcbn1cbiIsImltcG9ydCBkZWNvbXBvc2UsIHtpZGVudGl0eX0gZnJvbSBcIi4vZGVjb21wb3NlXCI7XG5cbnZhciBjc3NOb2RlLFxuICAgIGNzc1Jvb3QsXG4gICAgY3NzVmlldyxcbiAgICBzdmdOb2RlO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDc3ModmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBcIm5vbmVcIikgcmV0dXJuIGlkZW50aXR5O1xuICBpZiAoIWNzc05vZGUpIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiRElWXCIpLCBjc3NSb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBjc3NWaWV3ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gIGNzc05vZGUuc3R5bGUudHJhbnNmb3JtID0gdmFsdWU7XG4gIHZhbHVlID0gY3NzVmlldy5nZXRDb21wdXRlZFN0eWxlKGNzc1Jvb3QuYXBwZW5kQ2hpbGQoY3NzTm9kZSksIG51bGwpLmdldFByb3BlcnR5VmFsdWUoXCJ0cmFuc2Zvcm1cIik7XG4gIGNzc1Jvb3QucmVtb3ZlQ2hpbGQoY3NzTm9kZSk7XG4gIHZhbHVlID0gdmFsdWUuc2xpY2UoNywgLTEpLnNwbGl0KFwiLFwiKTtcbiAgcmV0dXJuIGRlY29tcG9zZSgrdmFsdWVbMF0sICt2YWx1ZVsxXSwgK3ZhbHVlWzJdLCArdmFsdWVbM10sICt2YWx1ZVs0XSwgK3ZhbHVlWzVdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3ZnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gaWRlbnRpdHk7XG4gIGlmICghc3ZnTm9kZSkgc3ZnTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwiZ1wiKTtcbiAgc3ZnTm9kZS5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgdmFsdWUpO1xuICBpZiAoISh2YWx1ZSA9IHN2Z05vZGUudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSkpIHJldHVybiBpZGVudGl0eTtcbiAgdmFsdWUgPSB2YWx1ZS5tYXRyaXg7XG4gIHJldHVybiBkZWNvbXBvc2UodmFsdWUuYSwgdmFsdWUuYiwgdmFsdWUuYywgdmFsdWUuZCwgdmFsdWUuZSwgdmFsdWUuZik7XG59XG4iLCJpbXBvcnQgbnVtYmVyIGZyb20gXCIuLi9udW1iZXJcIjtcbmltcG9ydCB7cGFyc2VDc3MsIHBhcnNlU3ZnfSBmcm9tIFwiLi9wYXJzZVwiO1xuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZSwgcHhDb21tYSwgcHhQYXJlbiwgZGVnUGFyZW4pIHtcblxuICBmdW5jdGlvbiBwb3Aocykge1xuICAgIHJldHVybiBzLmxlbmd0aCA/IHMucG9wKCkgKyBcIiBcIiA6IFwiXCI7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2xhdGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2goXCJ0cmFuc2xhdGUoXCIsIG51bGwsIHB4Q29tbWEsIG51bGwsIHB4UGFyZW4pO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiB8fCB5Yikge1xuICAgICAgcy5wdXNoKFwidHJhbnNsYXRlKFwiICsgeGIgKyBweENvbW1hICsgeWIgKyBweFBhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByb3RhdGUoYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBpZiAoYSAtIGIgPiAxODApIGIgKz0gMzYwOyBlbHNlIGlmIChiIC0gYSA+IDE4MCkgYSArPSAzNjA7IC8vIHNob3J0ZXN0IHBhdGhcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2tld1goYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY2FsZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiLCBudWxsLCBcIixcIiwgbnVsbCwgXCIpXCIpO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiAhPT0gMSB8fCB5YiAhPT0gMSkge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIgKyB4YiArIFwiLFwiICsgeWIgKyBcIilcIik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuICAgIGEgPSBwYXJzZShhKSwgYiA9IHBhcnNlKGIpO1xuICAgIHRyYW5zbGF0ZShhLnRyYW5zbGF0ZVgsIGEudHJhbnNsYXRlWSwgYi50cmFuc2xhdGVYLCBiLnRyYW5zbGF0ZVksIHMsIHEpO1xuICAgIHJvdGF0ZShhLnJvdGF0ZSwgYi5yb3RhdGUsIHMsIHEpO1xuICAgIHNrZXdYKGEuc2tld1gsIGIuc2tld1gsIHMsIHEpO1xuICAgIHNjYWxlKGEuc2NhbGVYLCBhLnNjYWxlWSwgYi5zY2FsZVgsIGIuc2NhbGVZLCBzLCBxKTtcbiAgICBhID0gYiA9IG51bGw7IC8vIGdjXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBpID0gLTEsIG4gPSBxLmxlbmd0aCwgbztcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MgPSBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZUNzcywgXCJweCwgXCIsIFwicHgpXCIsIFwiZGVnKVwiKTtcbmV4cG9ydCB2YXIgaW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmcgPSBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZVN2ZywgXCIsIFwiLCBcIilcIiwgXCIpXCIpO1xuIiwiaW1wb3J0IHtjdWJlaGVsaXggYXMgY29sb3JDdWJlaGVsaXh9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGNvbG9yLCB7aHVlfSBmcm9tIFwiLi9jb2xvclwiO1xuXG5mdW5jdGlvbiBjdWJlaGVsaXgoaHVlKSB7XG4gIHJldHVybiAoZnVuY3Rpb24gY3ViZWhlbGl4R2FtbWEoeSkge1xuICAgIHkgPSAreTtcblxuICAgIGZ1bmN0aW9uIGN1YmVoZWxpeChzdGFydCwgZW5kKSB7XG4gICAgICB2YXIgaCA9IGh1ZSgoc3RhcnQgPSBjb2xvckN1YmVoZWxpeChzdGFydCkpLmgsIChlbmQgPSBjb2xvckN1YmVoZWxpeChlbmQpKS5oKSxcbiAgICAgICAgICBzID0gY29sb3Ioc3RhcnQucywgZW5kLnMpLFxuICAgICAgICAgIGwgPSBjb2xvcihzdGFydC5sLCBlbmQubCksXG4gICAgICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICAgIHN0YXJ0LmggPSBoKHQpO1xuICAgICAgICBzdGFydC5zID0gcyh0KTtcbiAgICAgICAgc3RhcnQubCA9IGwoTWF0aC5wb3codCwgeSkpO1xuICAgICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY3ViZWhlbGl4LmdhbW1hID0gY3ViZWhlbGl4R2FtbWE7XG5cbiAgICByZXR1cm4gY3ViZWhlbGl4O1xuICB9KSgxKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3ViZWhlbGl4KGh1ZSk7XG5leHBvcnQgdmFyIGN1YmVoZWxpeExvbmcgPSBjdWJlaGVsaXgoY29sb3IpO1xuIiwidmFyIGZyYW1lID0gMCwgLy8gaXMgYW4gYW5pbWF0aW9uIGZyYW1lIHBlbmRpbmc/XG4gICAgdGltZW91dCA9IDAsIC8vIGlzIGEgdGltZW91dCBwZW5kaW5nP1xuICAgIGludGVydmFsID0gMCwgLy8gYXJlIGFueSB0aW1lcnMgYWN0aXZlP1xuICAgIHBva2VEZWxheSA9IDEwMDAsIC8vIGhvdyBmcmVxdWVudGx5IHdlIGNoZWNrIGZvciBjbG9jayBza2V3XG4gICAgdGFza0hlYWQsXG4gICAgdGFza1RhaWwsXG4gICAgY2xvY2tMYXN0ID0gMCxcbiAgICBjbG9ja05vdyA9IDAsXG4gICAgY2xvY2tTa2V3ID0gMCxcbiAgICBjbG9jayA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gXCJvYmplY3RcIiAmJiBwZXJmb3JtYW5jZS5ub3cgPyBwZXJmb3JtYW5jZSA6IERhdGUsXG4gICAgc2V0RnJhbWUgPSB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSBcImZ1bmN0aW9uXCIgPyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgOiBmdW5jdGlvbihmKSB7IHNldFRpbWVvdXQoZiwgMTcpOyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gbm93KCkge1xuICByZXR1cm4gY2xvY2tOb3cgfHwgKHNldEZyYW1lKGNsZWFyTm93KSwgY2xvY2tOb3cgPSBjbG9jay5ub3coKSArIGNsb2NrU2tldyk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyTm93KCkge1xuICBjbG9ja05vdyA9IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lcigpIHtcbiAgdGhpcy5fY2FsbCA9XG4gIHRoaXMuX3RpbWUgPVxuICB0aGlzLl9uZXh0ID0gbnVsbDtcbn1cblxuVGltZXIucHJvdG90eXBlID0gdGltZXIucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVGltZXIsXG4gIHJlc3RhcnQ6IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgIHRpbWUgPSAodGltZSA9PSBudWxsID8gbm93KCkgOiArdGltZSkgKyAoZGVsYXkgPT0gbnVsbCA/IDAgOiArZGVsYXkpO1xuICAgIGlmICghdGhpcy5fbmV4dCAmJiB0YXNrVGFpbCAhPT0gdGhpcykge1xuICAgICAgaWYgKHRhc2tUYWlsKSB0YXNrVGFpbC5fbmV4dCA9IHRoaXM7XG4gICAgICBlbHNlIHRhc2tIZWFkID0gdGhpcztcbiAgICAgIHRhc2tUYWlsID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5fY2FsbCA9IGNhbGxiYWNrO1xuICAgIHRoaXMuX3RpbWUgPSB0aW1lO1xuICAgIHNsZWVwKCk7XG4gIH0sXG4gIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9jYWxsKSB7XG4gICAgICB0aGlzLl9jYWxsID0gbnVsbDtcbiAgICAgIHRoaXMuX3RpbWUgPSBJbmZpbml0eTtcbiAgICAgIHNsZWVwKCk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdGltZXIoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICB0LnJlc3RhcnQoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lckZsdXNoKCkge1xuICBub3coKTsgLy8gR2V0IHRoZSBjdXJyZW50IHRpbWUsIGlmIG5vdCBhbHJlYWR5IHNldC5cbiAgKytmcmFtZTsgLy8gUHJldGVuZCB3ZeKAmXZlIHNldCBhbiBhbGFybSwgaWYgd2UgaGF2ZW7igJl0IGFscmVhZHkuXG4gIHZhciB0ID0gdGFza0hlYWQsIGU7XG4gIHdoaWxlICh0KSB7XG4gICAgaWYgKChlID0gY2xvY2tOb3cgLSB0Ll90aW1lKSA+PSAwKSB0Ll9jYWxsLmNhbGwobnVsbCwgZSk7XG4gICAgdCA9IHQuX25leHQ7XG4gIH1cbiAgLS1mcmFtZTtcbn1cblxuZnVuY3Rpb24gd2FrZSgpIHtcbiAgY2xvY2tOb3cgPSAoY2xvY2tMYXN0ID0gY2xvY2subm93KCkpICsgY2xvY2tTa2V3O1xuICBmcmFtZSA9IHRpbWVvdXQgPSAwO1xuICB0cnkge1xuICAgIHRpbWVyRmx1c2goKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBmcmFtZSA9IDA7XG4gICAgbmFwKCk7XG4gICAgY2xvY2tOb3cgPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBva2UoKSB7XG4gIHZhciBub3cgPSBjbG9jay5ub3coKSwgZGVsYXkgPSBub3cgLSBjbG9ja0xhc3Q7XG4gIGlmIChkZWxheSA+IHBva2VEZWxheSkgY2xvY2tTa2V3IC09IGRlbGF5LCBjbG9ja0xhc3QgPSBub3c7XG59XG5cbmZ1bmN0aW9uIG5hcCgpIHtcbiAgdmFyIHQwLCB0MSA9IHRhc2tIZWFkLCB0MiwgdGltZSA9IEluZmluaXR5O1xuICB3aGlsZSAodDEpIHtcbiAgICBpZiAodDEuX2NhbGwpIHtcbiAgICAgIGlmICh0aW1lID4gdDEuX3RpbWUpIHRpbWUgPSB0MS5fdGltZTtcbiAgICAgIHQwID0gdDEsIHQxID0gdDEuX25leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHQyID0gdDEuX25leHQsIHQxLl9uZXh0ID0gbnVsbDtcbiAgICAgIHQxID0gdDAgPyB0MC5fbmV4dCA9IHQyIDogdGFza0hlYWQgPSB0MjtcbiAgICB9XG4gIH1cbiAgdGFza1RhaWwgPSB0MDtcbiAgc2xlZXAodGltZSk7XG59XG5cbmZ1bmN0aW9uIHNsZWVwKHRpbWUpIHtcbiAgaWYgKGZyYW1lKSByZXR1cm47IC8vIFNvb25lc3QgYWxhcm0gYWxyZWFkeSBzZXQsIG9yIHdpbGwgYmUuXG4gIGlmICh0aW1lb3V0KSB0aW1lb3V0ID0gY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB2YXIgZGVsYXkgPSB0aW1lIC0gY2xvY2tOb3c7XG4gIGlmIChkZWxheSA+IDI0KSB7XG4gICAgaWYgKHRpbWUgPCBJbmZpbml0eSkgdGltZW91dCA9IHNldFRpbWVvdXQod2FrZSwgZGVsYXkpO1xuICAgIGlmIChpbnRlcnZhbCkgaW50ZXJ2YWwgPSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWludGVydmFsKSBjbG9ja0xhc3QgPSBjbG9ja05vdywgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChwb2tlLCBwb2tlRGVsYXkpO1xuICAgIGZyYW1lID0gMSwgc2V0RnJhbWUod2FrZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHt0aW1lciwgdGltZW91dH0gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBlbXB0eU9uID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImVuZFwiLCBcImludGVycnVwdFwiKTtcbnZhciBlbXB0eVR3ZWVuID0gW107XG5cbmV4cG9ydCB2YXIgQ1JFQVRFRCA9IDA7XG5leHBvcnQgdmFyIFNDSEVEVUxFRCA9IDE7XG5leHBvcnQgdmFyIFNUQVJUSU5HID0gMjtcbmV4cG9ydCB2YXIgU1RBUlRFRCA9IDM7XG5leHBvcnQgdmFyIFJVTk5JTkcgPSA0O1xuZXhwb3J0IHZhciBFTkRJTkcgPSA1O1xuZXhwb3J0IHZhciBFTkRFRCA9IDY7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGlkLCBpbmRleCwgZ3JvdXAsIHRpbWluZykge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGVzKSBub2RlLl9fdHJhbnNpdGlvbiA9IHt9O1xuICBlbHNlIGlmIChpZCBpbiBzY2hlZHVsZXMpIHJldHVybjtcbiAgY3JlYXRlKG5vZGUsIGlkLCB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBpbmRleDogaW5kZXgsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBncm91cDogZ3JvdXAsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBvbjogZW1wdHlPbixcbiAgICB0d2VlbjogZW1wdHlUd2VlbixcbiAgICB0aW1lOiB0aW1pbmcudGltZSxcbiAgICBkZWxheTogdGltaW5nLmRlbGF5LFxuICAgIGR1cmF0aW9uOiB0aW1pbmcuZHVyYXRpb24sXG4gICAgZWFzZTogdGltaW5nLmVhc2UsXG4gICAgdGltZXI6IG51bGwsXG4gICAgc3RhdGU6IENSRUFURURcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlIHx8ICEoc2NoZWR1bGUgPSBzY2hlZHVsZVtpZF0pIHx8IHNjaGVkdWxlLnN0YXRlID4gQ1JFQVRFRCkgdGhyb3cgbmV3IEVycm9yKFwidG9vIGxhdGVcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZSB8fCAhKHNjaGVkdWxlID0gc2NoZWR1bGVbaWRdKSB8fCBzY2hlZHVsZS5zdGF0ZSA+IFNUQVJUSU5HKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZVwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlIHx8ICEoc2NoZWR1bGUgPSBzY2hlZHVsZVtpZF0pKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZVwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGUobm9kZSwgaWQsIHNlbGYpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgdHdlZW47XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGUgc2VsZiB0aW1lciB3aGVuIHRoZSB0cmFuc2l0aW9uIGlzIGNyZWF0ZWQuXG4gIC8vIE5vdGUgdGhlIGFjdHVhbCBkZWxheSBpcyBub3Qga25vd24gdW50aWwgdGhlIGZpcnN0IGNhbGxiYWNrIVxuICBzY2hlZHVsZXNbaWRdID0gc2VsZjtcbiAgc2VsZi50aW1lciA9IHRpbWVyKHNjaGVkdWxlLCAwLCBzZWxmLnRpbWUpO1xuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlKGVsYXBzZWQpIHtcbiAgICBzZWxmLnN0YXRlID0gU0NIRURVTEVEO1xuICAgIHNlbGYudGltZXIucmVzdGFydChzdGFydCwgc2VsZi5kZWxheSwgc2VsZi50aW1lKTtcblxuICAgIC8vIElmIHRoZSBlbGFwc2VkIGRlbGF5IGlzIGxlc3MgdGhhbiBvdXIgZmlyc3Qgc2xlZXAsIHN0YXJ0IGltbWVkaWF0ZWx5LlxuICAgIGlmIChzZWxmLmRlbGF5IDw9IGVsYXBzZWQpIHN0YXJ0KGVsYXBzZWQgLSBzZWxmLmRlbGF5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0KGVsYXBzZWQpIHtcbiAgICB2YXIgaSwgaiwgbiwgbztcblxuICAgIC8vIElmIHRoZSBzdGF0ZSBpcyBub3QgU0NIRURVTEVELCB0aGVuIHdlIHByZXZpb3VzbHkgZXJyb3JlZCBvbiBzdGFydC5cbiAgICBpZiAoc2VsZi5zdGF0ZSAhPT0gU0NIRURVTEVEKSByZXR1cm4gc3RvcCgpO1xuXG4gICAgZm9yIChpIGluIHNjaGVkdWxlcykge1xuICAgICAgbyA9IHNjaGVkdWxlc1tpXTtcbiAgICAgIGlmIChvLm5hbWUgIT09IHNlbGYubmFtZSkgY29udGludWU7XG5cbiAgICAgIC8vIFdoaWxlIHRoaXMgZWxlbWVudCBhbHJlYWR5IGhhcyBhIHN0YXJ0aW5nIHRyYW5zaXRpb24gZHVyaW5nIHRoaXMgZnJhbWUsXG4gICAgICAvLyBkZWZlciBzdGFydGluZyBhbiBpbnRlcnJ1cHRpbmcgdHJhbnNpdGlvbiB1bnRpbCB0aGF0IHRyYW5zaXRpb24gaGFzIGFcbiAgICAgIC8vIGNoYW5jZSB0byB0aWNrIChhbmQgcG9zc2libHkgZW5kKTsgc2VlIGQzL2QzLXRyYW5zaXRpb24jNTQhXG4gICAgICBpZiAoby5zdGF0ZSA9PT0gU1RBUlRFRCkgcmV0dXJuIHRpbWVvdXQoc3RhcnQpO1xuXG4gICAgICAvLyBJbnRlcnJ1cHQgdGhlIGFjdGl2ZSB0cmFuc2l0aW9uLCBpZiBhbnkuXG4gICAgICAvLyBEaXNwYXRjaCB0aGUgaW50ZXJydXB0IGV2ZW50LlxuICAgICAgaWYgKG8uc3RhdGUgPT09IFJVTk5JTkcpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgby5vbi5jYWxsKFwiaW50ZXJydXB0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIG8uaW5kZXgsIG8uZ3JvdXApO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgYW55IHByZS1lbXB0ZWQgdHJhbnNpdGlvbnMuIE5vIGludGVycnVwdCBldmVudCBpcyBkaXNwYXRjaGVkXG4gICAgICAvLyBiZWNhdXNlIHRoZSBjYW5jZWxsZWQgdHJhbnNpdGlvbnMgbmV2ZXIgc3RhcnRlZC4gTm90ZSB0aGF0IHRoaXMgYWxzb1xuICAgICAgLy8gcmVtb3ZlcyB0aGlzIHRyYW5zaXRpb24gZnJvbSB0aGUgcGVuZGluZyBsaXN0IVxuICAgICAgZWxzZSBpZiAoK2kgPCBpZCkge1xuICAgICAgICBvLnN0YXRlID0gRU5ERUQ7XG4gICAgICAgIG8udGltZXIuc3RvcCgpO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERlZmVyIHRoZSBmaXJzdCB0aWNrIHRvIGVuZCBvZiB0aGUgY3VycmVudCBmcmFtZTsgc2VlIGQzL2QzIzE1NzYuXG4gICAgLy8gTm90ZSB0aGUgdHJhbnNpdGlvbiBtYXkgYmUgY2FuY2VsZWQgYWZ0ZXIgc3RhcnQgYW5kIGJlZm9yZSB0aGUgZmlyc3QgdGljayFcbiAgICAvLyBOb3RlIHRoaXMgbXVzdCBiZSBzY2hlZHVsZWQgYmVmb3JlIHRoZSBzdGFydCBldmVudDsgc2VlIGQzL2QzLXRyYW5zaXRpb24jMTYhXG4gICAgLy8gQXNzdW1pbmcgdGhpcyBpcyBzdWNjZXNzZnVsLCBzdWJzZXF1ZW50IGNhbGxiYWNrcyBnbyBzdHJhaWdodCB0byB0aWNrLlxuICAgIHRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gU1RBUlRFRCkge1xuICAgICAgICBzZWxmLnN0YXRlID0gUlVOTklORztcbiAgICAgICAgc2VsZi50aW1lci5yZXN0YXJ0KHRpY2ssIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG4gICAgICAgIHRpY2soZWxhcHNlZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBEaXNwYXRjaCB0aGUgc3RhcnQgZXZlbnQuXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIHR3ZWVuIGFyZSBpbml0aWFsaXplZC5cbiAgICBzZWxmLnN0YXRlID0gU1RBUlRJTkc7XG4gICAgc2VsZi5vbi5jYWxsKFwic3RhcnRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNUQVJUSU5HKSByZXR1cm47IC8vIGludGVycnVwdGVkXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJURUQ7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSB0d2VlbiwgZGVsZXRpbmcgbnVsbCB0d2Vlbi5cbiAgICB0d2VlbiA9IG5ldyBBcnJheShuID0gc2VsZi50d2Vlbi5sZW5ndGgpO1xuICAgIGZvciAoaSA9IDAsIGogPSAtMTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG8gPSBzZWxmLnR3ZWVuW2ldLnZhbHVlLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCkpIHtcbiAgICAgICAgdHdlZW5bKytqXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIHR3ZWVuLmxlbmd0aCA9IGogKyAxO1xuICB9XG5cbiAgZnVuY3Rpb24gdGljayhlbGFwc2VkKSB7XG4gICAgdmFyIHQgPSBlbGFwc2VkIDwgc2VsZi5kdXJhdGlvbiA/IHNlbGYuZWFzZS5jYWxsKG51bGwsIGVsYXBzZWQgLyBzZWxmLmR1cmF0aW9uKSA6IChzZWxmLnRpbWVyLnJlc3RhcnQoc3RvcCksIHNlbGYuc3RhdGUgPSBFTkRJTkcsIDEpLFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIG4gPSB0d2Vlbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgdHdlZW5baV0uY2FsbChudWxsLCB0KTtcbiAgICB9XG5cbiAgICAvLyBEaXNwYXRjaCB0aGUgZW5kIGV2ZW50LlxuICAgIGlmIChzZWxmLnN0YXRlID09PSBFTkRJTkcpIHtcbiAgICAgIHNlbGYub24uY2FsbChcImVuZFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKTtcbiAgICAgIHN0b3AoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzdG9wKCkge1xuICAgIHNlbGYuc3RhdGUgPSBFTkRFRDtcbiAgICBzZWxmLnRpbWVyLnN0b3AoKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2lkXTtcbiAgICBmb3IgKHZhciBpIGluIHNjaGVkdWxlcykgcmV0dXJuOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgZGVsZXRlIG5vZGUuX190cmFuc2l0aW9uO1xuICB9XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5mdW5jdGlvbiB0d2VlblJlbW92ZShpZCwgbmFtZSkge1xuICB2YXIgdHdlZW4wLCB0d2VlbjE7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gdHdlZW4wID0gdHdlZW47XG4gICAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xID0gdHdlZW4xLnNsaWNlKCk7XG4gICAgICAgICAgdHdlZW4xLnNwbGljZShpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0d2VlbkZ1bmN0aW9uKGlkLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgdHdlZW4wLCB0d2VlbjE7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgdHdlZW4gPSBzY2hlZHVsZS50d2VlbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgdHdlZW4gd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgdHdlZW4gYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKHR3ZWVuICE9PSB0d2VlbjApIHtcbiAgICAgIHR3ZWVuMSA9ICh0d2VlbjAgPSB0d2Vlbikuc2xpY2UoKTtcbiAgICAgIGZvciAodmFyIHQgPSB7bmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlfSwgaSA9IDAsIG4gPSB0d2VlbjEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICh0d2VlbjFbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIHR3ZWVuMVtpXSA9IHQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpID09PSBuKSB0d2VlbjEucHVzaCh0KTtcbiAgICB9XG5cbiAgICBzY2hlZHVsZS50d2VlbiA9IHR3ZWVuMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgbmFtZSArPSBcIlwiO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciB0d2VlbiA9IGdldCh0aGlzLm5vZGUoKSwgaWQpLnR3ZWVuO1xuICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4ubGVuZ3RoLCB0OyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKHQgPSB0d2VlbltpXSkubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICByZXR1cm4gdC52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsID8gdHdlZW5SZW1vdmUgOiB0d2VlbkZ1bmN0aW9uKShpZCwgbmFtZSwgdmFsdWUpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR3ZWVuVmFsdWUodHJhbnNpdGlvbiwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIGlkID0gdHJhbnNpdGlvbi5faWQ7XG5cbiAgdHJhbnNpdGlvbi5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCk7XG4gICAgKHNjaGVkdWxlLnZhbHVlIHx8IChzY2hlZHVsZS52YWx1ZSA9IHt9KSlbbmFtZV0gPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBnZXQobm9kZSwgaWQpLnZhbHVlW25hbWVdO1xuICB9O1xufVxuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2VlblwiO1xuaW1wb3J0IGludGVycG9sYXRlIGZyb20gXCIuL2ludGVycG9sYXRlXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICByZXR1cm4gdmFsdWUwID09PSB2YWx1ZTEgPyBudWxsXG4gICAgICAgIDogdmFsdWUwID09PSB2YWx1ZTAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUodmFsdWUwMCA9IHZhbHVlMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHZhbHVlMDAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHJldHVybiB2YWx1ZTAgPT09IHZhbHVlMSA/IG51bGxcbiAgICAgICAgOiB2YWx1ZTAgPT09IHZhbHVlMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciB2YWx1ZTAwLFxuICAgICAgdmFsdWUxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgdmFsdWUwID0gdGhpcy5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCAmJiB2YWx1ZTEgPT09IHZhbHVlMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEwID0gdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIHZhbHVlMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICB2YWx1ZTAgPSB0aGlzLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCAmJiB2YWx1ZTEgPT09IHZhbHVlMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEwID0gdmFsdWUxKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpLCBpID0gZnVsbG5hbWUgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdGhpcy5hdHRyVHdlZW4obmFtZSwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pKGZ1bGxuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwiYXR0ci5cIiArIG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdmFsdWUgPT0gbnVsbCA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpKGZ1bGxuYW1lKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkoZnVsbG5hbWUsIGksIHZhbHVlICsgXCJcIikpO1xufVxuIiwiaW1wb3J0IHtuYW1lc3BhY2V9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxuZnVuY3Rpb24gYXR0clR3ZWVuTlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBub2RlID0gdGhpcywgaSA9IHZhbHVlLmFwcGx5KG5vZGUsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGkgJiYgZnVuY3Rpb24odCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIGkodCkpO1xuICAgIH07XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuKG5hbWUsIHZhbHVlKSB7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBub2RlID0gdGhpcywgaSA9IHZhbHVlLmFwcGx5KG5vZGUsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGkgJiYgZnVuY3Rpb24odCkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgaSh0KSk7XG4gICAgfTtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJhdHRyLlwiICsgbmFtZTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgKGZ1bGxuYW1lLmxvY2FsID8gYXR0clR3ZWVuTlMgOiBhdHRyVHdlZW4pKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtnZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlXCI7XG5cbmZ1bmN0aW9uIGRlbGF5RnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkZWxheUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGRlbGF5RnVuY3Rpb25cbiAgICAgICAgICA6IGRlbGF5Q29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmRlbGF5O1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZnVuY3Rpb24gZHVyYXRpb25GdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Db25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGR1cmF0aW9uRnVuY3Rpb25cbiAgICAgICAgICA6IGR1cmF0aW9uQ29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmR1cmF0aW9uO1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZnVuY3Rpb24gZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZWFzZSA9IHZhbHVlO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2goZWFzZUNvbnN0YW50KGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmVhc2U7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZVwiO1xuXG5mdW5jdGlvbiBzdGFydChuYW1lKSB7XG4gIHJldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4gIXQgfHwgdCA9PT0gXCJzdGFydFwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG9uMCwgb24xLCBzaXQgPSBzdGFydChuYW1lKSA/IGluaXQgOiBzZXQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzaXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKG5hbWUsIGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgID8gZ2V0KHRoaXMubm9kZSgpLCBpZCkub24ub24obmFtZSlcbiAgICAgIDogdGhpcy5lYWNoKG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihpZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuX190cmFuc2l0aW9uKSBpZiAoK2kgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub24oXCJlbmQucmVtb3ZlXCIsIHJlbW92ZUZ1bmN0aW9uKHRoaXMuX2lkKSk7XG59XG4iLCJpbXBvcnQge2ludGVycG9sYXRlVHJhbnNmb3JtQ3NzIGFzIGludGVycG9sYXRlVHJhbnNmb3JtfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCB7c3R5bGV9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW5cIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZVwiO1xuXG5mdW5jdGlvbiBzdHlsZVJlbW92ZShuYW1lLCBpbnRlcnBvbGF0ZSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIHZhbHVlMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUwID0gc3R5bGUodGhpcywgbmFtZSksXG4gICAgICAgIHZhbHVlMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHZhbHVlMCA9PT0gdmFsdWUxID8gbnVsbFxuICAgICAgICA6IHZhbHVlMCA9PT0gdmFsdWUwMCAmJiB2YWx1ZTEgPT09IHZhbHVlMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEwID0gdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVSZW1vdmVFbmQobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciB2YWx1ZTAwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMCA9IHN0eWxlKHRoaXMsIG5hbWUpO1xuICAgIHJldHVybiB2YWx1ZTAgPT09IHZhbHVlMSA/IG51bGxcbiAgICAgICAgOiB2YWx1ZTAgPT09IHZhbHVlMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZSh2YWx1ZTAwID0gdmFsdWUwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZUZ1bmN0aW9uKG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgdmFsdWUwMCxcbiAgICAgIHZhbHVlMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWUwID0gc3R5bGUodGhpcywgbmFtZSksXG4gICAgICAgIHZhbHVlMSA9IHZhbHVlKHRoaXMpO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgdmFsdWUxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gdmFsdWUwID09PSB2YWx1ZTEgPyBudWxsXG4gICAgICAgIDogdmFsdWUwID09PSB2YWx1ZTAwICYmIHZhbHVlMSA9PT0gdmFsdWUxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHZhbHVlMDAgPSB2YWx1ZTAsIHZhbHVlMTAgPSB2YWx1ZTEpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGkgPSAobmFtZSArPSBcIlwiKSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGludGVycG9sYXRlVHJhbnNmb3JtIDogaW50ZXJwb2xhdGU7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gdGhpc1xuICAgICAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlUmVtb3ZlKG5hbWUsIGkpKVxuICAgICAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIHN0eWxlUmVtb3ZlRW5kKG5hbWUpKVxuICAgICAgOiB0aGlzLnN0eWxlVHdlZW4obmFtZSwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHN0eWxlRnVuY3Rpb24obmFtZSwgaSwgdHdlZW5WYWx1ZSh0aGlzLCBcInN0eWxlLlwiICsgbmFtZSwgdmFsdWUpKVxuICAgICAgICAgIDogc3R5bGVDb25zdGFudChuYW1lLCBpLCB2YWx1ZSArIFwiXCIpLCBwcmlvcml0eSk7XG59XG4iLCJmdW5jdGlvbiBzdHlsZVR3ZWVuKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMsIGkgPSB2YWx1ZS5hcHBseShub2RlLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBpICYmIGZ1bmN0aW9uKHQpIHtcbiAgICAgIG5vZGUuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgaSh0KSwgcHJpb3JpdHkpO1xuICAgIH07XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBrZXkgPSBcInN0eWxlLlwiICsgKG5hbWUgKz0gXCJcIik7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgcmV0dXJuIChrZXkgPSB0aGlzLnR3ZWVuKGtleSkpICYmIGtleS5fdmFsdWU7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcy50d2VlbihrZXksIG51bGwpO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBzdHlsZVR3ZWVuKG5hbWUsIHZhbHVlLCBwcmlvcml0eSA9PSBudWxsID8gXCJcIiA6IHByaW9yaXR5KSk7XG59XG4iLCJpbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuXCI7XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTEgPSB2YWx1ZSh0aGlzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWUxID09IG51bGwgPyBcIlwiIDogdmFsdWUxO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdGhpcy50d2VlbihcInRleHRcIiwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gdGV4dEZ1bmN0aW9uKHR3ZWVuVmFsdWUodGhpcywgXCJ0ZXh0XCIsIHZhbHVlKSlcbiAgICAgIDogdGV4dENvbnN0YW50KHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiKSk7XG59XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0ciBmcm9tIFwiLi9hdHRyXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9hdHRyVHdlZW4gZnJvbSBcIi4vYXR0clR3ZWVuXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9kZWxheSBmcm9tIFwiLi9kZWxheVwiO1xuaW1wb3J0IHRyYW5zaXRpb25fZHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX2Vhc2UgZnJvbSBcIi4vZWFzZVwiO1xuaW1wb3J0IHRyYW5zaXRpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlclwiO1xuaW1wb3J0IHRyYW5zaXRpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2VcIjtcbmltcG9ydCB0cmFuc2l0aW9uX29uIGZyb20gXCIuL29uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9yZW1vdmUgZnJvbSBcIi4vcmVtb3ZlXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0XCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zZWxlY3Rpb24gZnJvbSBcIi4vc2VsZWN0aW9uXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZVwiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGVUd2VlbiBmcm9tIFwiLi9zdHlsZVR3ZWVuXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90ZXh0IGZyb20gXCIuL3RleHRcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fdHdlZW4gZnJvbSBcIi4vdHdlZW5cIjtcblxudmFyIGlkID0gMDtcblxuZXhwb3J0IGZ1bmN0aW9uIFRyYW5zaXRpb24oZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCkge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xuICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgdGhpcy5faWQgPSBpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNpdGlvbihuYW1lKSB7XG4gIHJldHVybiBzZWxlY3Rpb24oKS50cmFuc2l0aW9uKG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbmV3SWQoKSB7XG4gIHJldHVybiArK2lkO1xufVxuXG52YXIgc2VsZWN0aW9uX3Byb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGU7XG5cblRyYW5zaXRpb24ucHJvdG90eXBlID0gdHJhbnNpdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUcmFuc2l0aW9uLFxuICBzZWxlY3Q6IHRyYW5zaXRpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHRyYW5zaXRpb25fc2VsZWN0QWxsLFxuICBmaWx0ZXI6IHRyYW5zaXRpb25fZmlsdGVyLFxuICBtZXJnZTogdHJhbnNpdGlvbl9tZXJnZSxcbiAgc2VsZWN0aW9uOiB0cmFuc2l0aW9uX3NlbGVjdGlvbixcbiAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbl90cmFuc2l0aW9uLFxuICBjYWxsOiBzZWxlY3Rpb25fcHJvdG90eXBlLmNhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGUsXG4gIHNpemU6IHNlbGVjdGlvbl9wcm90b3R5cGUuc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9wcm90b3R5cGUuZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9wcm90b3R5cGUuZWFjaCxcbiAgb246IHRyYW5zaXRpb25fb24sXG4gIGF0dHI6IHRyYW5zaXRpb25fYXR0cixcbiAgYXR0clR3ZWVuOiB0cmFuc2l0aW9uX2F0dHJUd2VlbixcbiAgc3R5bGU6IHRyYW5zaXRpb25fc3R5bGUsXG4gIHN0eWxlVHdlZW46IHRyYW5zaXRpb25fc3R5bGVUd2VlbixcbiAgdGV4dDogdHJhbnNpdGlvbl90ZXh0LFxuICByZW1vdmU6IHRyYW5zaXRpb25fcmVtb3ZlLFxuICB0d2VlbjogdHJhbnNpdGlvbl90d2VlbixcbiAgZGVsYXk6IHRyYW5zaXRpb25fZGVsYXksXG4gIGR1cmF0aW9uOiB0cmFuc2l0aW9uX2R1cmF0aW9uLFxuICBlYXNlOiB0cmFuc2l0aW9uX2Vhc2Vcbn07XG4iLCJleHBvcnQgZnVuY3Rpb24gY3ViaWNJbih0KSB7XG4gIHJldHVybiB0ICogdCAqIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdWJpY091dCh0KSB7XG4gIHJldHVybiAtLXQgKiB0ICogdCArIDE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjdWJpY0luT3V0KHQpIHtcbiAgcmV0dXJuICgodCAqPSAyKSA8PSAxID8gdCAqIHQgKiB0IDogKHQgLT0gMikgKiB0ICogdCArIDIpIC8gMjtcbn1cbiIsImltcG9ydCB7VHJhbnNpdGlvbiwgbmV3SWR9IGZyb20gXCIuLi90cmFuc2l0aW9uL2luZGV4XCI7XG5pbXBvcnQgc2NoZWR1bGUgZnJvbSBcIi4uL3RyYW5zaXRpb24vc2NoZWR1bGVcIjtcbmltcG9ydCB7ZWFzZUN1YmljSW5PdXR9IGZyb20gXCJkMy1lYXNlXCI7XG5pbXBvcnQge25vd30gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBkZWZhdWx0VGltaW5nID0ge1xuICB0aW1lOiBudWxsLCAvLyBTZXQgb24gdXNlLlxuICBkZWxheTogMCxcbiAgZHVyYXRpb246IDI1MCxcbiAgZWFzZTogZWFzZUN1YmljSW5PdXRcbn07XG5cbmZ1bmN0aW9uIGluaGVyaXQobm9kZSwgaWQpIHtcbiAgdmFyIHRpbWluZztcbiAgd2hpbGUgKCEodGltaW5nID0gbm9kZS5fX3RyYW5zaXRpb24pIHx8ICEodGltaW5nID0gdGltaW5nW2lkXSkpIHtcbiAgICBpZiAoIShub2RlID0gbm9kZS5wYXJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRUaW1pbmcudGltZSA9IG5vdygpLCBkZWZhdWx0VGltaW5nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGltaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBpZCxcbiAgICAgIHRpbWluZztcblxuICBpZiAobmFtZSBpbnN0YW5jZW9mIFRyYW5zaXRpb24pIHtcbiAgICBpZCA9IG5hbWUuX2lkLCBuYW1lID0gbmFtZS5fbmFtZTtcbiAgfSBlbHNlIHtcbiAgICBpZCA9IG5ld0lkKCksICh0aW1pbmcgPSBkZWZhdWx0VGltaW5nKS50aW1lID0gbm93KCksIG5hbWUgPSBuYW1lID09IG51bGwgPyBudWxsIDogbmFtZSArIFwiXCI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZCwgaSwgZ3JvdXAsIHRpbWluZyB8fCBpbmhlcml0KG5vZGUsIGlkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKGdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge2RyYWdEaXNhYmxlLCBkcmFnRW5hYmxlfSBmcm9tIFwiZDMtZHJhZ1wiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge2N1c3RvbUV2ZW50LCBldmVudCwgbW91c2UsIHNlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtpbnRlcnJ1cHR9IGZyb20gXCJkMy10cmFuc2l0aW9uXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCBCcnVzaEV2ZW50IGZyb20gXCIuL2V2ZW50XCI7XG5pbXBvcnQgbm9ldmVudCwge25vcHJvcGFnYXRpb259IGZyb20gXCIuL25vZXZlbnRcIjtcblxudmFyIE1PREVfRFJBRyA9IHtuYW1lOiBcImRyYWdcIn0sXG4gICAgTU9ERV9TUEFDRSA9IHtuYW1lOiBcInNwYWNlXCJ9LFxuICAgIE1PREVfSEFORExFID0ge25hbWU6IFwiaGFuZGxlXCJ9LFxuICAgIE1PREVfQ0VOVEVSID0ge25hbWU6IFwiY2VudGVyXCJ9O1xuXG52YXIgWCA9IHtcbiAgbmFtZTogXCJ4XCIsXG4gIGhhbmRsZXM6IFtcImVcIiwgXCJ3XCJdLm1hcCh0eXBlKSxcbiAgaW5wdXQ6IGZ1bmN0aW9uKHgsIGUpIHsgcmV0dXJuIHggJiYgW1t4WzBdLCBlWzBdWzFdXSwgW3hbMV0sIGVbMV1bMV1dXTsgfSxcbiAgb3V0cHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHkgJiYgW3h5WzBdWzBdLCB4eVsxXVswXV07IH1cbn07XG5cbnZhciBZID0ge1xuICBuYW1lOiBcInlcIixcbiAgaGFuZGxlczogW1wiblwiLCBcInNcIl0ubWFwKHR5cGUpLFxuICBpbnB1dDogZnVuY3Rpb24oeSwgZSkgeyByZXR1cm4geSAmJiBbW2VbMF1bMF0sIHlbMF1dLCBbZVsxXVswXSwgeVsxXV1dOyB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uKHh5KSB7IHJldHVybiB4eSAmJiBbeHlbMF1bMV0sIHh5WzFdWzFdXTsgfVxufTtcblxudmFyIFhZID0ge1xuICBuYW1lOiBcInh5XCIsXG4gIGhhbmRsZXM6IFtcIm5cIiwgXCJlXCIsIFwic1wiLCBcIndcIiwgXCJud1wiLCBcIm5lXCIsIFwic2VcIiwgXCJzd1wiXS5tYXAodHlwZSksXG4gIGlucHV0OiBmdW5jdGlvbih4eSkgeyByZXR1cm4geHk7IH0sXG4gIG91dHB1dDogZnVuY3Rpb24oeHkpIHsgcmV0dXJuIHh5OyB9XG59O1xuXG52YXIgY3Vyc29ycyA9IHtcbiAgb3ZlcmxheTogXCJjcm9zc2hhaXJcIixcbiAgc2VsZWN0aW9uOiBcIm1vdmVcIixcbiAgbjogXCJucy1yZXNpemVcIixcbiAgZTogXCJldy1yZXNpemVcIixcbiAgczogXCJucy1yZXNpemVcIixcbiAgdzogXCJldy1yZXNpemVcIixcbiAgbnc6IFwibndzZS1yZXNpemVcIixcbiAgbmU6IFwibmVzdy1yZXNpemVcIixcbiAgc2U6IFwibndzZS1yZXNpemVcIixcbiAgc3c6IFwibmVzdy1yZXNpemVcIlxufTtcblxudmFyIGZsaXBYID0ge1xuICBlOiBcIndcIixcbiAgdzogXCJlXCIsXG4gIG53OiBcIm5lXCIsXG4gIG5lOiBcIm53XCIsXG4gIHNlOiBcInN3XCIsXG4gIHN3OiBcInNlXCJcbn07XG5cbnZhciBmbGlwWSA9IHtcbiAgbjogXCJzXCIsXG4gIHM6IFwiblwiLFxuICBudzogXCJzd1wiLFxuICBuZTogXCJzZVwiLFxuICBzZTogXCJuZVwiLFxuICBzdzogXCJud1wiXG59O1xuXG52YXIgc2lnbnNYID0ge1xuICBvdmVybGF5OiArMSxcbiAgc2VsZWN0aW9uOiArMSxcbiAgbjogbnVsbCxcbiAgZTogKzEsXG4gIHM6IG51bGwsXG4gIHc6IC0xLFxuICBudzogLTEsXG4gIG5lOiArMSxcbiAgc2U6ICsxLFxuICBzdzogLTFcbn07XG5cbnZhciBzaWduc1kgPSB7XG4gIG92ZXJsYXk6ICsxLFxuICBzZWxlY3Rpb246ICsxLFxuICBuOiAtMSxcbiAgZTogbnVsbCxcbiAgczogKzEsXG4gIHc6IG51bGwsXG4gIG53OiAtMSxcbiAgbmU6IC0xLFxuICBzZTogKzEsXG4gIHN3OiArMVxufTtcblxuZnVuY3Rpb24gdHlwZSh0KSB7XG4gIHJldHVybiB7dHlwZTogdH07XG59XG5cbi8vIElnbm9yZSByaWdodC1jbGljaywgc2luY2UgdGhhdCBzaG91bGQgb3BlbiB0aGUgY29udGV4dCBtZW51LlxuZnVuY3Rpb24gZGVmYXVsdEZpbHRlcigpIHtcbiAgcmV0dXJuICFldmVudC5idXR0b247XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRFeHRlbnQoKSB7XG4gIHZhciBzdmcgPSB0aGlzLm93bmVyU1ZHRWxlbWVudCB8fCB0aGlzO1xuICByZXR1cm4gW1swLCAwXSwgW3N2Zy53aWR0aC5iYXNlVmFsLnZhbHVlLCBzdmcuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTtcbn1cblxuLy8gTGlrZSBkMy5sb2NhbCwgYnV0IHdpdGggdGhlIG5hbWUg4oCcX19icnVzaOKAnSByYXRoZXIgdGhhbiBhdXRvLWdlbmVyYXRlZC5cbmZ1bmN0aW9uIGxvY2FsKG5vZGUpIHtcbiAgd2hpbGUgKCFub2RlLl9fYnJ1c2gpIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSByZXR1cm47XG4gIHJldHVybiBub2RlLl9fYnJ1c2g7XG59XG5cbmZ1bmN0aW9uIGVtcHR5KGV4dGVudCkge1xuICByZXR1cm4gZXh0ZW50WzBdWzBdID09PSBleHRlbnRbMV1bMF1cbiAgICAgIHx8IGV4dGVudFswXVsxXSA9PT0gZXh0ZW50WzFdWzFdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJ1c2hTZWxlY3Rpb24obm9kZSkge1xuICB2YXIgc3RhdGUgPSBub2RlLl9fYnJ1c2g7XG4gIHJldHVybiBzdGF0ZSA/IHN0YXRlLmRpbS5vdXRwdXQoc3RhdGUuc2VsZWN0aW9uKSA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBicnVzaFgoKSB7XG4gIHJldHVybiBicnVzaChYKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJydXNoWSgpIHtcbiAgcmV0dXJuIGJydXNoKFkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGJydXNoKFhZKTtcbn1cblxuZnVuY3Rpb24gYnJ1c2goZGltKSB7XG4gIHZhciBleHRlbnQgPSBkZWZhdWx0RXh0ZW50LFxuICAgICAgZmlsdGVyID0gZGVmYXVsdEZpbHRlcixcbiAgICAgIGxpc3RlbmVycyA9IGRpc3BhdGNoKGJydXNoLCBcInN0YXJ0XCIsIFwiYnJ1c2hcIiwgXCJlbmRcIiksXG4gICAgICBoYW5kbGVTaXplID0gNixcbiAgICAgIHRvdWNoZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGJydXNoKGdyb3VwKSB7XG4gICAgdmFyIG92ZXJsYXkgPSBncm91cFxuICAgICAgICAucHJvcGVydHkoXCJfX2JydXNoXCIsIGluaXRpYWxpemUpXG4gICAgICAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgIC5kYXRhKFt0eXBlKFwib3ZlcmxheVwiKV0pO1xuXG4gICAgb3ZlcmxheS5lbnRlcigpLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcIm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJwb2ludGVyLWV2ZW50c1wiLCBcImFsbFwiKVxuICAgICAgICAuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzLm92ZXJsYXkpXG4gICAgICAubWVyZ2Uob3ZlcmxheSlcbiAgICAgICAgLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGV4dGVudCA9IGxvY2FsKHRoaXMpLmV4dGVudDtcbiAgICAgICAgICBzZWxlY3QodGhpcylcbiAgICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGV4dGVudFswXVswXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGV4dGVudFswXVsxXSlcbiAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBleHRlbnRbMV1bMF0gLSBleHRlbnRbMF1bMF0pXG4gICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGV4dGVudFsxXVsxXSAtIGV4dGVudFswXVsxXSk7XG4gICAgICAgIH0pO1xuXG4gICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvblwiKVxuICAgICAgLmRhdGEoW3R5cGUoXCJzZWxlY3Rpb25cIildKVxuICAgICAgLmVudGVyKCkuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwic2VsZWN0aW9uXCIpXG4gICAgICAgIC5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnMuc2VsZWN0aW9uKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCIjNzc3XCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbC1vcGFjaXR5XCIsIDAuMylcbiAgICAgICAgLmF0dHIoXCJzdHJva2VcIiwgXCIjZmZmXCIpXG4gICAgICAgIC5hdHRyKFwic2hhcGUtcmVuZGVyaW5nXCIsIFwiY3Jpc3BFZGdlc1wiKTtcblxuICAgIHZhciBoYW5kbGUgPSBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAuZGF0YShkaW0uaGFuZGxlcywgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlOyB9KTtcblxuICAgIGhhbmRsZS5leGl0KCkucmVtb3ZlKCk7XG5cbiAgICBoYW5kbGUuZW50ZXIoKS5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gXCJoYW5kbGUgaGFuZGxlLS1cIiArIGQudHlwZTsgfSlcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gY3Vyc29yc1tkLnR5cGVdOyB9KTtcblxuICAgIGdyb3VwXG4gICAgICAgIC5lYWNoKHJlZHJhdylcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIFwibm9uZVwiKVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwiYWxsXCIpXG4gICAgICAgIC5zdHlsZShcIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvclwiLCBcInJnYmEoMCwwLDAsMClcIilcbiAgICAgICAgLm9uKFwibW91c2Vkb3duLmJydXNoIHRvdWNoc3RhcnQuYnJ1c2hcIiwgc3RhcnRlZCk7XG4gIH1cblxuICBicnVzaC5tb3ZlID0gZnVuY3Rpb24oZ3JvdXAsIHNlbGVjdGlvbikge1xuICAgIGlmIChncm91cC5zZWxlY3Rpb24pIHtcbiAgICAgIGdyb3VwXG4gICAgICAgICAgLm9uKFwic3RhcnQuYnJ1c2hcIiwgZnVuY3Rpb24oKSB7IGVtaXR0ZXIodGhpcywgYXJndW1lbnRzKS5iZWZvcmVzdGFydCgpLnN0YXJ0KCk7IH0pXG4gICAgICAgICAgLm9uKFwiaW50ZXJydXB0LmJydXNoIGVuZC5icnVzaFwiLCBmdW5jdGlvbigpIHsgZW1pdHRlcih0aGlzLCBhcmd1bWVudHMpLmVuZCgpOyB9KVxuICAgICAgICAgIC50d2VlbihcImJydXNoXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIHN0YXRlID0gdGhhdC5fX2JydXNoLFxuICAgICAgICAgICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMCA9IHN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24xID0gZGltLmlucHV0KHR5cGVvZiBzZWxlY3Rpb24gPT09IFwiZnVuY3Rpb25cIiA/IHNlbGVjdGlvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogc2VsZWN0aW9uLCBzdGF0ZS5leHRlbnQpLFxuICAgICAgICAgICAgICAgIGkgPSBpbnRlcnBvbGF0ZShzZWxlY3Rpb24wLCBzZWxlY3Rpb24xKTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gdHdlZW4odCkge1xuICAgICAgICAgICAgICBzdGF0ZS5zZWxlY3Rpb24gPSB0ID09PSAxICYmIGVtcHR5KHNlbGVjdGlvbjEpID8gbnVsbCA6IGkodCk7XG4gICAgICAgICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb24wICYmIHNlbGVjdGlvbjEgPyB0d2VlbiA6IHR3ZWVuKDEpO1xuICAgICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cFxuICAgICAgICAgIC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgICAgICAgICAgc3RhdGUgPSB0aGF0Ll9fYnJ1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uMSA9IGRpbS5pbnB1dCh0eXBlb2Ygc2VsZWN0aW9uID09PSBcImZ1bmN0aW9uXCIgPyBzZWxlY3Rpb24uYXBwbHkodGhhdCwgYXJncykgOiBzZWxlY3Rpb24sIHN0YXRlLmV4dGVudCksXG4gICAgICAgICAgICAgICAgZW1pdCA9IGVtaXR0ZXIodGhhdCwgYXJncykuYmVmb3Jlc3RhcnQoKTtcblxuICAgICAgICAgICAgaW50ZXJydXB0KHRoYXQpO1xuICAgICAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uMSA9PSBudWxsIHx8IGVtcHR5KHNlbGVjdGlvbjEpID8gbnVsbCA6IHNlbGVjdGlvbjE7XG4gICAgICAgICAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICAgICAgICAgIGVtaXQuc3RhcnQoKS5icnVzaCgpLmVuZCgpO1xuICAgICAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiByZWRyYXcoKSB7XG4gICAgdmFyIGdyb3VwID0gc2VsZWN0KHRoaXMpLFxuICAgICAgICBzZWxlY3Rpb24gPSBsb2NhbCh0aGlzKS5zZWxlY3Rpb247XG5cbiAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuc2VsZWN0aW9uXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBzZWxlY3Rpb25bMF1bMF0pXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIHNlbGVjdGlvblswXVsxXSlcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHNlbGVjdGlvblsxXVswXSAtIHNlbGVjdGlvblswXVswXSlcbiAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBzZWxlY3Rpb25bMV1bMV0gLSBzZWxlY3Rpb25bMF1bMV0pO1xuXG4gICAgICBncm91cC5zZWxlY3RBbGwoXCIuaGFuZGxlXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBudWxsKVxuICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbihkKSB7IHJldHVybiBkLnR5cGVbZC50eXBlLmxlbmd0aCAtIDFdID09PSBcImVcIiA/IHNlbGVjdGlvblsxXVswXSAtIGhhbmRsZVNpemUgLyAyIDogc2VsZWN0aW9uWzBdWzBdIC0gaGFuZGxlU2l6ZSAvIDI7IH0pXG4gICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQudHlwZVswXSA9PT0gXCJzXCIgPyBzZWxlY3Rpb25bMV1bMV0gLSBoYW5kbGVTaXplIC8gMiA6IHNlbGVjdGlvblswXVsxXSAtIGhhbmRsZVNpemUgLyAyOyB9KVxuICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlID09PSBcIm5cIiB8fCBkLnR5cGUgPT09IFwic1wiID8gc2VsZWN0aW9uWzFdWzBdIC0gc2VsZWN0aW9uWzBdWzBdICsgaGFuZGxlU2l6ZSA6IGhhbmRsZVNpemU7IH0pXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gZC50eXBlID09PSBcImVcIiB8fCBkLnR5cGUgPT09IFwid1wiID8gc2VsZWN0aW9uWzFdWzFdIC0gc2VsZWN0aW9uWzBdWzFdICsgaGFuZGxlU2l6ZSA6IGhhbmRsZVNpemU7IH0pO1xuICAgIH1cblxuICAgIGVsc2Uge1xuICAgICAgZ3JvdXAuc2VsZWN0QWxsKFwiLnNlbGVjdGlvbiwuaGFuZGxlXCIpXG4gICAgICAgICAgLnN0eWxlKFwiZGlzcGxheVwiLCBcIm5vbmVcIilcbiAgICAgICAgICAuYXR0cihcInhcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcInlcIiwgbnVsbClcbiAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIG51bGwpXG4gICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZW1pdHRlcih0aGF0LCBhcmdzKSB7XG4gICAgcmV0dXJuIHRoYXQuX19icnVzaC5lbWl0dGVyIHx8IG5ldyBFbWl0dGVyKHRoYXQsIGFyZ3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gRW1pdHRlcih0aGF0LCBhcmdzKSB7XG4gICAgdGhpcy50aGF0ID0gdGhhdDtcbiAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIHRoaXMuc3RhdGUgPSB0aGF0Ll9fYnJ1c2g7XG4gICAgdGhpcy5hY3RpdmUgPSAwO1xuICB9XG5cbiAgRW1pdHRlci5wcm90b3R5cGUgPSB7XG4gICAgYmVmb3Jlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCsrdGhpcy5hY3RpdmUgPT09IDEpIHRoaXMuc3RhdGUuZW1pdHRlciA9IHRoaXMsIHRoaXMuc3RhcnRpbmcgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBzdGFydDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5zdGFydGluZykgdGhpcy5zdGFydGluZyA9IGZhbHNlLCB0aGlzLmVtaXQoXCJzdGFydFwiKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgYnJ1c2g6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5lbWl0KFwiYnJ1c2hcIik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuICAgIGVuZDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aGlzLmFjdGl2ZSA9PT0gMCkgZGVsZXRlIHRoaXMuc3RhdGUuZW1pdHRlciwgdGhpcy5lbWl0KFwiZW5kXCIpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICBjdXN0b21FdmVudChuZXcgQnJ1c2hFdmVudChicnVzaCwgdHlwZSwgZGltLm91dHB1dCh0aGlzLnN0YXRlLnNlbGVjdGlvbikpLCBsaXN0ZW5lcnMuYXBwbHksIGxpc3RlbmVycywgW3R5cGUsIHRoaXMudGhhdCwgdGhpcy5hcmdzXSk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHN0YXJ0ZWQoKSB7XG4gICAgaWYgKGV2ZW50LnRvdWNoZXMpIHsgaWYgKGV2ZW50LmNoYW5nZWRUb3VjaGVzLmxlbmd0aCA8IGV2ZW50LnRvdWNoZXMubGVuZ3RoKSByZXR1cm4gbm9ldmVudCgpOyB9XG4gICAgZWxzZSBpZiAodG91Y2hlbmRpbmcpIHJldHVybjtcbiAgICBpZiAoIWZpbHRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSByZXR1cm47XG5cbiAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIHR5cGUgPSBldmVudC50YXJnZXQuX19kYXRhX18udHlwZSxcbiAgICAgICAgbW9kZSA9IChldmVudC5tZXRhS2V5ID8gdHlwZSA9IFwib3ZlcmxheVwiIDogdHlwZSkgPT09IFwic2VsZWN0aW9uXCIgPyBNT0RFX0RSQUcgOiAoZXZlbnQuYWx0S2V5ID8gTU9ERV9DRU5URVIgOiBNT0RFX0hBTkRMRSksXG4gICAgICAgIHNpZ25YID0gZGltID09PSBZID8gbnVsbCA6IHNpZ25zWFt0eXBlXSxcbiAgICAgICAgc2lnblkgPSBkaW0gPT09IFggPyBudWxsIDogc2lnbnNZW3R5cGVdLFxuICAgICAgICBzdGF0ZSA9IGxvY2FsKHRoYXQpLFxuICAgICAgICBleHRlbnQgPSBzdGF0ZS5leHRlbnQsXG4gICAgICAgIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbixcbiAgICAgICAgVyA9IGV4dGVudFswXVswXSwgdzAsIHcxLFxuICAgICAgICBOID0gZXh0ZW50WzBdWzFdLCBuMCwgbjEsXG4gICAgICAgIEUgPSBleHRlbnRbMV1bMF0sIGUwLCBlMSxcbiAgICAgICAgUyA9IGV4dGVudFsxXVsxXSwgczAsIHMxLFxuICAgICAgICBkeCxcbiAgICAgICAgZHksXG4gICAgICAgIG1vdmluZyxcbiAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWSAmJiBldmVudC5zaGlmdEtleSxcbiAgICAgICAgbG9ja1gsXG4gICAgICAgIGxvY2tZLFxuICAgICAgICBwb2ludDAgPSBtb3VzZSh0aGF0KSxcbiAgICAgICAgcG9pbnQgPSBwb2ludDAsXG4gICAgICAgIGVtaXQgPSBlbWl0dGVyKHRoYXQsIGFyZ3VtZW50cykuYmVmb3Jlc3RhcnQoKTtcblxuICAgIGlmICh0eXBlID09PSBcIm92ZXJsYXlcIikge1xuICAgICAgc3RhdGUuc2VsZWN0aW9uID0gc2VsZWN0aW9uID0gW1xuICAgICAgICBbdzAgPSBkaW0gPT09IFkgPyBXIDogcG9pbnQwWzBdLCBuMCA9IGRpbSA9PT0gWCA/IE4gOiBwb2ludDBbMV1dLFxuICAgICAgICBbZTAgPSBkaW0gPT09IFkgPyBFIDogdzAsIHMwID0gZGltID09PSBYID8gUyA6IG4wXVxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdzAgPSBzZWxlY3Rpb25bMF1bMF07XG4gICAgICBuMCA9IHNlbGVjdGlvblswXVsxXTtcbiAgICAgIGUwID0gc2VsZWN0aW9uWzFdWzBdO1xuICAgICAgczAgPSBzZWxlY3Rpb25bMV1bMV07XG4gICAgfVxuXG4gICAgdzEgPSB3MDtcbiAgICBuMSA9IG4wO1xuICAgIGUxID0gZTA7XG4gICAgczEgPSBzMDtcblxuICAgIHZhciBncm91cCA9IHNlbGVjdCh0aGF0KVxuICAgICAgICAuYXR0cihcInBvaW50ZXItZXZlbnRzXCIsIFwibm9uZVwiKTtcblxuICAgIHZhciBvdmVybGF5ID0gZ3JvdXAuc2VsZWN0QWxsKFwiLm92ZXJsYXlcIilcbiAgICAgICAgLmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG5cbiAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgZ3JvdXBcbiAgICAgICAgICAub24oXCJ0b3VjaG1vdmUuYnJ1c2hcIiwgbW92ZWQsIHRydWUpXG4gICAgICAgICAgLm9uKFwidG91Y2hlbmQuYnJ1c2ggdG91Y2hjYW5jZWwuYnJ1c2hcIiwgZW5kZWQsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdmlldyA9IHNlbGVjdChldmVudC52aWV3KVxuICAgICAgICAgIC5vbihcImtleWRvd24uYnJ1c2hcIiwga2V5ZG93bmVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcImtleXVwLmJydXNoXCIsIGtleXVwcGVkLCB0cnVlKVxuICAgICAgICAgIC5vbihcIm1vdXNlbW92ZS5icnVzaFwiLCBtb3ZlZCwgdHJ1ZSlcbiAgICAgICAgICAub24oXCJtb3VzZXVwLmJydXNoXCIsIGVuZGVkLCB0cnVlKTtcblxuICAgICAgZHJhZ0Rpc2FibGUoZXZlbnQudmlldyk7XG4gICAgfVxuXG4gICAgbm9wcm9wYWdhdGlvbigpO1xuICAgIGludGVycnVwdCh0aGF0KTtcbiAgICByZWRyYXcuY2FsbCh0aGF0KTtcbiAgICBlbWl0LnN0YXJ0KCk7XG5cbiAgICBmdW5jdGlvbiBtb3ZlZCgpIHtcbiAgICAgIHZhciBwb2ludDEgPSBtb3VzZSh0aGF0KTtcbiAgICAgIGlmIChzaGlmdGluZyAmJiAhbG9ja1ggJiYgIWxvY2tZKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhwb2ludDFbMF0gLSBwb2ludFswXSkgPiBNYXRoLmFicyhwb2ludDFbMV0gLSBwb2ludFsxXSkpIGxvY2tZID0gdHJ1ZTtcbiAgICAgICAgZWxzZSBsb2NrWCA9IHRydWU7XG4gICAgICB9XG4gICAgICBwb2ludCA9IHBvaW50MTtcbiAgICAgIG1vdmluZyA9IHRydWU7XG4gICAgICBub2V2ZW50KCk7XG4gICAgICBtb3ZlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW92ZSgpIHtcbiAgICAgIHZhciB0O1xuXG4gICAgICBkeCA9IHBvaW50WzBdIC0gcG9pbnQwWzBdO1xuICAgICAgZHkgPSBwb2ludFsxXSAtIHBvaW50MFsxXTtcblxuICAgICAgc3dpdGNoIChtb2RlKSB7XG4gICAgICAgIGNhc2UgTU9ERV9TUEFDRTpcbiAgICAgICAgY2FzZSBNT0RFX0RSQUc6IHtcbiAgICAgICAgICBpZiAoc2lnblgpIGR4ID0gTWF0aC5tYXgoVyAtIHcwLCBNYXRoLm1pbihFIC0gZTAsIGR4KSksIHcxID0gdzAgKyBkeCwgZTEgPSBlMCArIGR4O1xuICAgICAgICAgIGlmIChzaWduWSkgZHkgPSBNYXRoLm1heChOIC0gbjAsIE1hdGgubWluKFMgLSBzMCwgZHkpKSwgbjEgPSBuMCArIGR5LCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0hBTkRMRToge1xuICAgICAgICAgIGlmIChzaWduWCA8IDApIGR4ID0gTWF0aC5tYXgoVyAtIHcwLCBNYXRoLm1pbihFIC0gdzAsIGR4KSksIHcxID0gdzAgKyBkeCwgZTEgPSBlMDtcbiAgICAgICAgICBlbHNlIGlmIChzaWduWCA+IDApIGR4ID0gTWF0aC5tYXgoVyAtIGUwLCBNYXRoLm1pbihFIC0gZTAsIGR4KSksIHcxID0gdzAsIGUxID0gZTAgKyBkeDtcbiAgICAgICAgICBpZiAoc2lnblkgPCAwKSBkeSA9IE1hdGgubWF4KE4gLSBuMCwgTWF0aC5taW4oUyAtIG4wLCBkeSkpLCBuMSA9IG4wICsgZHksIHMxID0gczA7XG4gICAgICAgICAgZWxzZSBpZiAoc2lnblkgPiAwKSBkeSA9IE1hdGgubWF4KE4gLSBzMCwgTWF0aC5taW4oUyAtIHMwLCBkeSkpLCBuMSA9IG4wLCBzMSA9IHMwICsgZHk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBNT0RFX0NFTlRFUjoge1xuICAgICAgICAgIGlmIChzaWduWCkgdzEgPSBNYXRoLm1heChXLCBNYXRoLm1pbihFLCB3MCAtIGR4ICogc2lnblgpKSwgZTEgPSBNYXRoLm1heChXLCBNYXRoLm1pbihFLCBlMCArIGR4ICogc2lnblgpKTtcbiAgICAgICAgICBpZiAoc2lnblkpIG4xID0gTWF0aC5tYXgoTiwgTWF0aC5taW4oUywgbjAgLSBkeSAqIHNpZ25ZKSksIHMxID0gTWF0aC5tYXgoTiwgTWF0aC5taW4oUywgczAgKyBkeSAqIHNpZ25ZKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGUxIDwgdzEpIHtcbiAgICAgICAgc2lnblggKj0gLTE7XG4gICAgICAgIHQgPSB3MCwgdzAgPSBlMCwgZTAgPSB0O1xuICAgICAgICB0ID0gdzEsIHcxID0gZTEsIGUxID0gdDtcbiAgICAgICAgaWYgKHR5cGUgaW4gZmxpcFgpIG92ZXJsYXkuYXR0cihcImN1cnNvclwiLCBjdXJzb3JzW3R5cGUgPSBmbGlwWFt0eXBlXV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoczEgPCBuMSkge1xuICAgICAgICBzaWduWSAqPSAtMTtcbiAgICAgICAgdCA9IG4wLCBuMCA9IHMwLCBzMCA9IHQ7XG4gICAgICAgIHQgPSBuMSwgbjEgPSBzMSwgczEgPSB0O1xuICAgICAgICBpZiAodHlwZSBpbiBmbGlwWSkgb3ZlcmxheS5hdHRyKFwiY3Vyc29yXCIsIGN1cnNvcnNbdHlwZSA9IGZsaXBZW3R5cGVdXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIVxuICAgICAgaWYgKGxvY2tYKSB3MSA9IHNlbGVjdGlvblswXVswXSwgZTEgPSBzZWxlY3Rpb25bMV1bMF07XG4gICAgICBpZiAobG9ja1kpIG4xID0gc2VsZWN0aW9uWzBdWzFdLCBzMSA9IHNlbGVjdGlvblsxXVsxXTtcblxuICAgICAgaWYgKHNlbGVjdGlvblswXVswXSAhPT0gdzFcbiAgICAgICAgICB8fCBzZWxlY3Rpb25bMF1bMV0gIT09IG4xXG4gICAgICAgICAgfHwgc2VsZWN0aW9uWzFdWzBdICE9PSBlMVxuICAgICAgICAgIHx8IHNlbGVjdGlvblsxXVsxXSAhPT0gczEpIHtcbiAgICAgICAgc3RhdGUuc2VsZWN0aW9uID0gW1t3MSwgbjFdLCBbZTEsIHMxXV07XG4gICAgICAgIHJlZHJhdy5jYWxsKHRoYXQpO1xuICAgICAgICBlbWl0LmJydXNoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kZWQoKSB7XG4gICAgICBub3Byb3BhZ2F0aW9uKCk7XG4gICAgICBpZiAoZXZlbnQudG91Y2hlcykge1xuICAgICAgICBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgaWYgKHRvdWNoZW5kaW5nKSBjbGVhclRpbWVvdXQodG91Y2hlbmRpbmcpO1xuICAgICAgICB0b3VjaGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHRvdWNoZW5kaW5nID0gbnVsbDsgfSwgNTAwKTsgLy8gR2hvc3QgY2xpY2tzIGFyZSBkZWxheWVkIVxuICAgICAgICBncm91cC5vbihcInRvdWNobW92ZS5icnVzaCB0b3VjaGVuZC5icnVzaCB0b3VjaGNhbmNlbC5icnVzaFwiLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRyYWdFbmFibGUoZXZlbnQudmlldywgbW92aW5nKTtcbiAgICAgICAgdmlldy5vbihcImtleWRvd24uYnJ1c2gga2V5dXAuYnJ1c2ggbW91c2Vtb3ZlLmJydXNoIG1vdXNldXAuYnJ1c2hcIiwgbnVsbCk7XG4gICAgICB9XG4gICAgICBncm91cC5hdHRyKFwicG9pbnRlci1ldmVudHNcIiwgXCJhbGxcIik7XG4gICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5vdmVybGF5KTtcbiAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHNlbGVjdGlvbiA9IHN0YXRlLnNlbGVjdGlvbjsgLy8gTWF5IGJlIHNldCBieSBicnVzaC5tb3ZlIChvbiBzdGFydCkhXG4gICAgICBpZiAoZW1wdHkoc2VsZWN0aW9uKSkgc3RhdGUuc2VsZWN0aW9uID0gbnVsbCwgcmVkcmF3LmNhbGwodGhhdCk7XG4gICAgICBlbWl0LmVuZCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtleWRvd25lZCgpIHtcbiAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICBjYXNlIDE2OiB7IC8vIFNISUZUXG4gICAgICAgICAgc2hpZnRpbmcgPSBzaWduWCAmJiBzaWduWTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIDE4OiB7IC8vIEFMVFxuICAgICAgICAgIGlmIChtb2RlID09PSBNT0RFX0hBTkRMRSkge1xuICAgICAgICAgICAgaWYgKHNpZ25YKSBlMCA9IGUxIC0gZHggKiBzaWduWCwgdzAgPSB3MSArIGR4ICogc2lnblg7XG4gICAgICAgICAgICBpZiAoc2lnblkpIHMwID0gczEgLSBkeSAqIHNpZ25ZLCBuMCA9IG4xICsgZHkgKiBzaWduWTtcbiAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIG1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAzMjogeyAvLyBTUEFDRTsgdGFrZXMgcHJpb3JpdHkgb3ZlciBBTFRcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9IQU5ETEUgfHwgbW9kZSA9PT0gTU9ERV9DRU5URVIpIHtcbiAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTEgLSBkeDsgZWxzZSBpZiAoc2lnblggPiAwKSB3MCA9IHcxIC0gZHg7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxIC0gZHk7IGVsc2UgaWYgKHNpZ25ZID4gMCkgbjAgPSBuMSAtIGR5O1xuICAgICAgICAgICAgbW9kZSA9IE1PREVfU1BBQ0U7XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29ycy5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICB9XG4gICAgICBub2V2ZW50KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga2V5dXBwZWQoKSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgY2FzZSAxNjogeyAvLyBTSElGVFxuICAgICAgICAgIGlmIChzaGlmdGluZykge1xuICAgICAgICAgICAgbG9ja1ggPSBsb2NrWSA9IHNoaWZ0aW5nID0gZmFsc2U7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMTg6IHsgLy8gQUxUXG4gICAgICAgICAgaWYgKG1vZGUgPT09IE1PREVfQ0VOVEVSKSB7XG4gICAgICAgICAgICBpZiAoc2lnblggPCAwKSBlMCA9IGUxOyBlbHNlIGlmIChzaWduWCA+IDApIHcwID0gdzE7XG4gICAgICAgICAgICBpZiAoc2lnblkgPCAwKSBzMCA9IHMxOyBlbHNlIGlmIChzaWduWSA+IDApIG4wID0gbjE7XG4gICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgMzI6IHsgLy8gU1BBQ0VcbiAgICAgICAgICBpZiAobW9kZSA9PT0gTU9ERV9TUEFDRSkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICBpZiAoc2lnblgpIGUwID0gZTEgLSBkeCAqIHNpZ25YLCB3MCA9IHcxICsgZHggKiBzaWduWDtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZKSBzMCA9IHMxIC0gZHkgKiBzaWduWSwgbjAgPSBuMSArIGR5ICogc2lnblk7XG4gICAgICAgICAgICAgIG1vZGUgPSBNT0RFX0NFTlRFUjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChzaWduWCA8IDApIGUwID0gZTE7IGVsc2UgaWYgKHNpZ25YID4gMCkgdzAgPSB3MTtcbiAgICAgICAgICAgICAgaWYgKHNpZ25ZIDwgMCkgczAgPSBzMTsgZWxzZSBpZiAoc2lnblkgPiAwKSBuMCA9IG4xO1xuICAgICAgICAgICAgICBtb2RlID0gTU9ERV9IQU5ETEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdmVybGF5LmF0dHIoXCJjdXJzb3JcIiwgY3Vyc29yc1t0eXBlXSk7XG4gICAgICAgICAgICBtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHJldHVybjtcbiAgICAgIH1cbiAgICAgIG5vZXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbml0aWFsaXplKCkge1xuICAgIHZhciBzdGF0ZSA9IHRoaXMuX19icnVzaCB8fCB7c2VsZWN0aW9uOiBudWxsfTtcbiAgICBzdGF0ZS5leHRlbnQgPSBleHRlbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBzdGF0ZS5kaW0gPSBkaW07XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgYnJ1c2guZXh0ZW50ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGV4dGVudCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoW1srX1swXVswXSwgK19bMF1bMV1dLCBbK19bMV1bMF0sICtfWzFdWzFdXV0pLCBicnVzaCkgOiBleHRlbnQ7XG4gIH07XG5cbiAgYnJ1c2guZmlsdGVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZpbHRlciA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgYnJ1c2gpIDogZmlsdGVyO1xuICB9O1xuXG4gIGJydXNoLmhhbmRsZVNpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoaGFuZGxlU2l6ZSA9ICtfLCBicnVzaCkgOiBoYW5kbGVTaXplO1xuICB9O1xuXG4gIGJydXNoLm9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlID0gbGlzdGVuZXJzLm9uLmFwcGx5KGxpc3RlbmVycywgYXJndW1lbnRzKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IGxpc3RlbmVycyA/IGJydXNoIDogdmFsdWU7XG4gIH07XG5cbiAgcmV0dXJuIGJydXNoO1xufVxuIiwidmFyIHBpID0gTWF0aC5QSSxcbiAgICB0YXUgPSAyICogcGksXG4gICAgZXBzaWxvbiA9IDFlLTYsXG4gICAgdGF1RXBzaWxvbiA9IHRhdSAtIGVwc2lsb247XG5cbmZ1bmN0aW9uIFBhdGgoKSB7XG4gIHRoaXMuX3gwID0gdGhpcy5feTAgPSAvLyBzdGFydCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5feDEgPSB0aGlzLl95MSA9IG51bGw7IC8vIGVuZCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgdGhpcy5fID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIG5ldyBQYXRoO1xufVxuXG5QYXRoLnByb3RvdHlwZSA9IHBhdGgucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogUGF0aCxcbiAgbW92ZVRvOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gwID0gdGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MCA9IHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBjbG9zZVBhdGg6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl94MSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5feDEgPSB0aGlzLl94MCwgdGhpcy5feTEgPSB0aGlzLl95MDtcbiAgICAgIHRoaXMuXyArPSBcIlpcIjtcbiAgICB9XG4gIH0sXG4gIGxpbmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBxdWFkcmF0aWNDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJRXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICh0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kxID0gK3kpO1xuICB9LFxuICBiZXppZXJDdXJ2ZVRvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5MiwgeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIkNcIiArICgreDEpICsgXCIsXCIgKyAoK3kxKSArIFwiLFwiICsgKCt4MikgKyBcIixcIiArICgreTIpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYXJjVG86IGZ1bmN0aW9uKHgxLCB5MSwgeDIsIHkyLCByKSB7XG4gICAgeDEgPSAreDEsIHkxID0gK3kxLCB4MiA9ICt4MiwgeTIgPSAreTIsIHIgPSArcjtcbiAgICB2YXIgeDAgPSB0aGlzLl94MSxcbiAgICAgICAgeTAgPSB0aGlzLl95MSxcbiAgICAgICAgeDIxID0geDIgLSB4MSxcbiAgICAgICAgeTIxID0geTIgLSB5MSxcbiAgICAgICAgeDAxID0geDAgLSB4MSxcbiAgICAgICAgeTAxID0geTAgLSB5MSxcbiAgICAgICAgbDAxXzIgPSB4MDEgKiB4MDEgKyB5MDEgKiB5MDE7XG5cbiAgICAvLyBJcyB0aGUgcmFkaXVzIG5lZ2F0aXZlPyBFcnJvci5cbiAgICBpZiAociA8IDApIHRocm93IG5ldyBFcnJvcihcIm5lZ2F0aXZlIHJhZGl1czogXCIgKyByKTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDEseTEpLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fICs9IFwiTVwiICsgKHRoaXMuX3gxID0geDEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSk7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4MCx5MCk/IERvIG5vdGhpbmcuXG4gICAgZWxzZSBpZiAoIShsMDFfMiA+IGVwc2lsb24pKSB7fVxuXG4gICAgLy8gT3IsIGFyZSAoeDAseTApLCAoeDEseTEpIGFuZCAoeDIseTIpIGNvbGxpbmVhcj9cbiAgICAvLyBFcXVpdmFsZW50bHksIGlzICh4MSx5MSkgY29pbmNpZGVudCB3aXRoICh4Mix5Mik/XG4gICAgLy8gT3IsIGlzIHRoZSByYWRpdXMgemVybz8gTGluZSB0byAoeDEseTEpLlxuICAgIGVsc2UgaWYgKCEoTWF0aC5hYnMoeTAxICogeDIxIC0geTIxICogeDAxKSA+IGVwc2lsb24pIHx8ICFyKSB7XG4gICAgICB0aGlzLl8gKz0gXCJMXCIgKyAodGhpcy5feDEgPSB4MSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkxKTtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIGRyYXcgYW4gYXJjIVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHgyMCA9IHgyIC0geDAsXG4gICAgICAgICAgeTIwID0geTIgLSB5MCxcbiAgICAgICAgICBsMjFfMiA9IHgyMSAqIHgyMSArIHkyMSAqIHkyMSxcbiAgICAgICAgICBsMjBfMiA9IHgyMCAqIHgyMCArIHkyMCAqIHkyMCxcbiAgICAgICAgICBsMjEgPSBNYXRoLnNxcnQobDIxXzIpLFxuICAgICAgICAgIGwwMSA9IE1hdGguc3FydChsMDFfMiksXG4gICAgICAgICAgbCA9IHIgKiBNYXRoLnRhbigocGkgLSBNYXRoLmFjb3MoKGwyMV8yICsgbDAxXzIgLSBsMjBfMikgLyAoMiAqIGwyMSAqIGwwMSkpKSAvIDIpLFxuICAgICAgICAgIHQwMSA9IGwgLyBsMDEsXG4gICAgICAgICAgdDIxID0gbCAvIGwyMTtcblxuICAgICAgLy8gSWYgdGhlIHN0YXJ0IHRhbmdlbnQgaXMgbm90IGNvaW5jaWRlbnQgd2l0aCAoeDAseTApLCBsaW5lIHRvLlxuICAgICAgaWYgKE1hdGguYWJzKHQwMSAtIDEpID4gZXBzaWxvbikge1xuICAgICAgICB0aGlzLl8gKz0gXCJMXCIgKyAoeDEgKyB0MDEgKiB4MDEpICsgXCIsXCIgKyAoeTEgKyB0MDEgKiB5MDEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwwLFwiICsgKCsoeTAxICogeDIwID4geDAxICogeTIwKSkgKyBcIixcIiArICh0aGlzLl94MSA9IHgxICsgdDIxICogeDIxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEgKyB0MjEgKiB5MjEpO1xuICAgIH1cbiAgfSxcbiAgYXJjOiBmdW5jdGlvbih4LCB5LCByLCBhMCwgYTEsIGNjdykge1xuICAgIHggPSAreCwgeSA9ICt5LCByID0gK3I7XG4gICAgdmFyIGR4ID0gciAqIE1hdGguY29zKGEwKSxcbiAgICAgICAgZHkgPSByICogTWF0aC5zaW4oYTApLFxuICAgICAgICB4MCA9IHggKyBkeCxcbiAgICAgICAgeTAgPSB5ICsgZHksXG4gICAgICAgIGN3ID0gMSBeIGNjdyxcbiAgICAgICAgZGEgPSBjY3cgPyBhMCAtIGExIDogYTEgLSBhMDtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKFwibmVnYXRpdmUgcmFkaXVzOiBcIiArIHIpO1xuXG4gICAgLy8gSXMgdGhpcyBwYXRoIGVtcHR5PyBNb3ZlIHRvICh4MCx5MCkuXG4gICAgaWYgKHRoaXMuX3gxID09PSBudWxsKSB7XG4gICAgICB0aGlzLl8gKz0gXCJNXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MCx5MCkgbm90IGNvaW5jaWRlbnQgd2l0aCB0aGUgcHJldmlvdXMgcG9pbnQ/IExpbmUgdG8gKHgwLHkwKS5cbiAgICBlbHNlIGlmIChNYXRoLmFicyh0aGlzLl94MSAtIHgwKSA+IGVwc2lsb24gfHwgTWF0aC5hYnModGhpcy5feTEgLSB5MCkgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJMXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgZW1wdHk/IFdl4oCZcmUgZG9uZS5cbiAgICBpZiAoIXIpIHJldHVybjtcblxuICAgIC8vIERvZXMgdGhlIGFuZ2xlIGdvIHRoZSB3cm9uZyB3YXk/IEZsaXAgdGhlIGRpcmVjdGlvbi5cbiAgICBpZiAoZGEgPCAwKSBkYSA9IGRhICUgdGF1ICsgdGF1O1xuXG4gICAgLy8gSXMgdGhpcyBhIGNvbXBsZXRlIGNpcmNsZT8gRHJhdyB0d28gYXJjcyB0byBjb21wbGV0ZSB0aGUgY2lyY2xlLlxuICAgIGlmIChkYSA+IHRhdUVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDEsXCIgKyBjdyArIFwiLFwiICsgKHggLSBkeCkgKyBcIixcIiArICh5IC0gZHkpICsgXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh0aGlzLl94MSA9IHgwKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTApO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIG5vbi1lbXB0eT8gRHJhdyBhbiBhcmMhXG4gICAgZWxzZSBpZiAoZGEgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCxcIiArICgrKGRhID49IHBpKSkgKyBcIixcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4ICsgciAqIE1hdGguY29zKGExKSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkgKyByICogTWF0aC5zaW4oYTEpKTtcbiAgICB9XG4gIH0sXG4gIHJlY3Q6IGZ1bmN0aW9uKHgsIHksIHcsIGgpIHtcbiAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDAgPSB0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kwID0gdGhpcy5feTEgPSAreSkgKyBcImhcIiArICgrdykgKyBcInZcIiArICgraCkgKyBcImhcIiArICgtdykgKyBcIlpcIjtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl87XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHBhdGg7XG4iLCJleHBvcnQgdmFyIHByZWZpeCA9IFwiJFwiO1xuXG5mdW5jdGlvbiBNYXAoKSB7fVxuXG5NYXAucHJvdG90eXBlID0gbWFwLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IE1hcCxcbiAgaGFzOiBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gKHByZWZpeCArIGtleSkgaW4gdGhpcztcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gdGhpc1twcmVmaXggKyBrZXldO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcbiAgICB0aGlzW3ByZWZpeCArIGtleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbihrZXkpIHtcbiAgICB2YXIgcHJvcGVydHkgPSBwcmVmaXggKyBrZXk7XG4gICAgcmV0dXJuIHByb3BlcnR5IGluIHRoaXMgJiYgZGVsZXRlIHRoaXNbcHJvcGVydHldO1xuICB9LFxuICBjbGVhcjogZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIGRlbGV0ZSB0aGlzW3Byb3BlcnR5XTtcbiAgfSxcbiAga2V5czogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkga2V5cy5wdXNoKHByb3BlcnR5LnNsaWNlKDEpKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfSxcbiAgdmFsdWVzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpIHZhbHVlcy5wdXNoKHRoaXNbcHJvcGVydHldKTtcbiAgICByZXR1cm4gdmFsdWVzO1xuICB9LFxuICBlbnRyaWVzOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZW50cmllcyA9IFtdO1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSBlbnRyaWVzLnB1c2goe2tleTogcHJvcGVydHkuc2xpY2UoMSksIHZhbHVlOiB0aGlzW3Byb3BlcnR5XX0pO1xuICAgIHJldHVybiBlbnRyaWVzO1xuICB9LFxuICBzaXplOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2l6ZSA9IDA7XG4gICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcykgaWYgKHByb3BlcnR5WzBdID09PSBwcmVmaXgpICsrc2l6ZTtcbiAgICByZXR1cm4gc2l6ZTtcbiAgfSxcbiAgZW1wdHk6IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHByb3BlcnR5IGluIHRoaXMpIGlmIChwcm9wZXJ0eVswXSA9PT0gcHJlZml4KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sXG4gIGVhY2g6IGZ1bmN0aW9uKGYpIHtcbiAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzKSBpZiAocHJvcGVydHlbMF0gPT09IHByZWZpeCkgZih0aGlzW3Byb3BlcnR5XSwgcHJvcGVydHkuc2xpY2UoMSksIHRoaXMpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBtYXAob2JqZWN0LCBmKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwO1xuXG4gIC8vIENvcHkgY29uc3RydWN0b3IuXG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBNYXApIG9iamVjdC5lYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHsgbWFwLnNldChrZXksIHZhbHVlKTsgfSk7XG5cbiAgLy8gSW5kZXggYXJyYXkgYnkgbnVtZXJpYyBpbmRleCBvciBzcGVjaWZpZWQga2V5IGZ1bmN0aW9uLlxuICBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICB2YXIgaSA9IC0xLFxuICAgICAgICBuID0gb2JqZWN0Lmxlbmd0aCxcbiAgICAgICAgbztcblxuICAgIGlmIChmID09IG51bGwpIHdoaWxlICgrK2kgPCBuKSBtYXAuc2V0KGksIG9iamVjdFtpXSk7XG4gICAgZWxzZSB3aGlsZSAoKytpIDwgbikgbWFwLnNldChmKG8gPSBvYmplY3RbaV0sIGksIG9iamVjdCksIG8pO1xuICB9XG5cbiAgLy8gQ29udmVydCBvYmplY3QgdG8gbWFwLlxuICBlbHNlIGlmIChvYmplY3QpIGZvciAodmFyIGtleSBpbiBvYmplY3QpIG1hcC5zZXQoa2V5LCBvYmplY3Rba2V5XSk7XG5cbiAgcmV0dXJuIG1hcDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWFwO1xuIiwiaW1wb3J0IHtkZWZhdWx0IGFzIG1hcCwgcHJlZml4fSBmcm9tIFwiLi9tYXBcIjtcblxuZnVuY3Rpb24gU2V0KCkge31cblxudmFyIHByb3RvID0gbWFwLnByb3RvdHlwZTtcblxuU2V0LnByb3RvdHlwZSA9IHNldC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBTZXQsXG4gIGhhczogcHJvdG8uaGFzLFxuICBhZGQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFsdWUgKz0gXCJcIjtcbiAgICB0aGlzW3ByZWZpeCArIHZhbHVlXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICByZW1vdmU6IHByb3RvLnJlbW92ZSxcbiAgY2xlYXI6IHByb3RvLmNsZWFyLFxuICB2YWx1ZXM6IHByb3RvLmtleXMsXG4gIHNpemU6IHByb3RvLnNpemUsXG4gIGVtcHR5OiBwcm90by5lbXB0eSxcbiAgZWFjaDogcHJvdG8uZWFjaFxufTtcblxuZnVuY3Rpb24gc2V0KG9iamVjdCwgZikge1xuICB2YXIgc2V0ID0gbmV3IFNldDtcblxuICAvLyBDb3B5IGNvbnN0cnVjdG9yLlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgU2V0KSBvYmplY3QuZWFjaChmdW5jdGlvbih2YWx1ZSkgeyBzZXQuYWRkKHZhbHVlKTsgfSk7XG5cbiAgLy8gT3RoZXJ3aXNlLCBhc3N1bWUgaXTigJlzIGFuIGFycmF5LlxuICBlbHNlIGlmIChvYmplY3QpIHtcbiAgICB2YXIgaSA9IC0xLCBuID0gb2JqZWN0Lmxlbmd0aDtcbiAgICBpZiAoZiA9PSBudWxsKSB3aGlsZSAoKytpIDwgbikgc2V0LmFkZChvYmplY3RbaV0pO1xuICAgIGVsc2Ugd2hpbGUgKCsraSA8IG4pIHNldC5hZGQoZihvYmplY3RbaV0sIGksIG9iamVjdCkpO1xuICB9XG5cbiAgcmV0dXJuIHNldDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0O1xuIiwiZnVuY3Rpb24gb2JqZWN0Q29udmVydGVyKGNvbHVtbnMpIHtcbiAgcmV0dXJuIG5ldyBGdW5jdGlvbihcImRcIiwgXCJyZXR1cm4ge1wiICsgY29sdW1ucy5tYXAoZnVuY3Rpb24obmFtZSwgaSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShuYW1lKSArIFwiOiBkW1wiICsgaSArIFwiXVwiO1xuICB9KS5qb2luKFwiLFwiKSArIFwifVwiKTtcbn1cblxuZnVuY3Rpb24gY3VzdG9tQ29udmVydGVyKGNvbHVtbnMsIGYpIHtcbiAgdmFyIG9iamVjdCA9IG9iamVjdENvbnZlcnRlcihjb2x1bW5zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHJvdywgaSkge1xuICAgIHJldHVybiBmKG9iamVjdChyb3cpLCBpLCBjb2x1bW5zKTtcbiAgfTtcbn1cblxuLy8gQ29tcHV0ZSB1bmlxdWUgY29sdW1ucyBpbiBvcmRlciBvZiBkaXNjb3ZlcnkuXG5mdW5jdGlvbiBpbmZlckNvbHVtbnMocm93cykge1xuICB2YXIgY29sdW1uU2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgIGNvbHVtbnMgPSBbXTtcblxuICByb3dzLmZvckVhY2goZnVuY3Rpb24ocm93KSB7XG4gICAgZm9yICh2YXIgY29sdW1uIGluIHJvdykge1xuICAgICAgaWYgKCEoY29sdW1uIGluIGNvbHVtblNldCkpIHtcbiAgICAgICAgY29sdW1ucy5wdXNoKGNvbHVtblNldFtjb2x1bW5dID0gY29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBjb2x1bW5zO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkZWxpbWl0ZXIpIHtcbiAgdmFyIHJlRm9ybWF0ID0gbmV3IFJlZ0V4cChcIltcXFwiXCIgKyBkZWxpbWl0ZXIgKyBcIlxcblxccl1cIiksXG4gICAgICBkZWxpbWl0ZXJDb2RlID0gZGVsaW1pdGVyLmNoYXJDb2RlQXQoMCk7XG5cbiAgZnVuY3Rpb24gcGFyc2UodGV4dCwgZikge1xuICAgIHZhciBjb252ZXJ0LCBjb2x1bW5zLCByb3dzID0gcGFyc2VSb3dzKHRleHQsIGZ1bmN0aW9uKHJvdywgaSkge1xuICAgICAgaWYgKGNvbnZlcnQpIHJldHVybiBjb252ZXJ0KHJvdywgaSAtIDEpO1xuICAgICAgY29sdW1ucyA9IHJvdywgY29udmVydCA9IGYgPyBjdXN0b21Db252ZXJ0ZXIocm93LCBmKSA6IG9iamVjdENvbnZlcnRlcihyb3cpO1xuICAgIH0pO1xuICAgIHJvd3MuY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgcmV0dXJuIHJvd3M7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVJvd3ModGV4dCwgZikge1xuICAgIHZhciBFT0wgPSB7fSwgLy8gc2VudGluZWwgdmFsdWUgZm9yIGVuZC1vZi1saW5lXG4gICAgICAgIEVPRiA9IHt9LCAvLyBzZW50aW5lbCB2YWx1ZSBmb3IgZW5kLW9mLWZpbGVcbiAgICAgICAgcm93cyA9IFtdLCAvLyBvdXRwdXQgcm93c1xuICAgICAgICBOID0gdGV4dC5sZW5ndGgsXG4gICAgICAgIEkgPSAwLCAvLyBjdXJyZW50IGNoYXJhY3RlciBpbmRleFxuICAgICAgICBuID0gMCwgLy8gdGhlIGN1cnJlbnQgbGluZSBudW1iZXJcbiAgICAgICAgdCwgLy8gdGhlIGN1cnJlbnQgdG9rZW5cbiAgICAgICAgZW9sOyAvLyBpcyB0aGUgY3VycmVudCB0b2tlbiBmb2xsb3dlZCBieSBFT0w/XG5cbiAgICBmdW5jdGlvbiB0b2tlbigpIHtcbiAgICAgIGlmIChJID49IE4pIHJldHVybiBFT0Y7IC8vIHNwZWNpYWwgY2FzZTogZW5kIG9mIGZpbGVcbiAgICAgIGlmIChlb2wpIHJldHVybiBlb2wgPSBmYWxzZSwgRU9MOyAvLyBzcGVjaWFsIGNhc2U6IGVuZCBvZiBsaW5lXG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogcXVvdGVzXG4gICAgICB2YXIgaiA9IEksIGM7XG4gICAgICBpZiAodGV4dC5jaGFyQ29kZUF0KGopID09PSAzNCkge1xuICAgICAgICB2YXIgaSA9IGo7XG4gICAgICAgIHdoaWxlIChpKysgPCBOKSB7XG4gICAgICAgICAgaWYgKHRleHQuY2hhckNvZGVBdChpKSA9PT0gMzQpIHtcbiAgICAgICAgICAgIGlmICh0ZXh0LmNoYXJDb2RlQXQoaSArIDEpICE9PSAzNCkgYnJlYWs7XG4gICAgICAgICAgICArK2k7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEkgPSBpICsgMjtcbiAgICAgICAgYyA9IHRleHQuY2hhckNvZGVBdChpICsgMSk7XG4gICAgICAgIGlmIChjID09PSAxMykge1xuICAgICAgICAgIGVvbCA9IHRydWU7XG4gICAgICAgICAgaWYgKHRleHQuY2hhckNvZGVBdChpICsgMikgPT09IDEwKSArK0k7XG4gICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gMTApIHtcbiAgICAgICAgICBlb2wgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0ZXh0LnNsaWNlKGogKyAxLCBpKS5yZXBsYWNlKC9cIlwiL2csIFwiXFxcIlwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gY29tbW9uIGNhc2U6IGZpbmQgbmV4dCBkZWxpbWl0ZXIgb3IgbmV3bGluZVxuICAgICAgd2hpbGUgKEkgPCBOKSB7XG4gICAgICAgIHZhciBrID0gMTtcbiAgICAgICAgYyA9IHRleHQuY2hhckNvZGVBdChJKyspO1xuICAgICAgICBpZiAoYyA9PT0gMTApIGVvbCA9IHRydWU7IC8vIFxcblxuICAgICAgICBlbHNlIGlmIChjID09PSAxMykgeyBlb2wgPSB0cnVlOyBpZiAodGV4dC5jaGFyQ29kZUF0KEkpID09PSAxMCkgKytJLCArK2s7IH0gLy8gXFxyfFxcclxcblxuICAgICAgICBlbHNlIGlmIChjICE9PSBkZWxpbWl0ZXJDb2RlKSBjb250aW51ZTtcbiAgICAgICAgcmV0dXJuIHRleHQuc2xpY2UoaiwgSSAtIGspO1xuICAgICAgfVxuXG4gICAgICAvLyBzcGVjaWFsIGNhc2U6IGxhc3QgdG9rZW4gYmVmb3JlIEVPRlxuICAgICAgcmV0dXJuIHRleHQuc2xpY2Uoaik7XG4gICAgfVxuXG4gICAgd2hpbGUgKCh0ID0gdG9rZW4oKSkgIT09IEVPRikge1xuICAgICAgdmFyIGEgPSBbXTtcbiAgICAgIHdoaWxlICh0ICE9PSBFT0wgJiYgdCAhPT0gRU9GKSB7XG4gICAgICAgIGEucHVzaCh0KTtcbiAgICAgICAgdCA9IHRva2VuKCk7XG4gICAgICB9XG4gICAgICBpZiAoZiAmJiAoYSA9IGYoYSwgbisrKSkgPT0gbnVsbCkgY29udGludWU7XG4gICAgICByb3dzLnB1c2goYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd3M7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXQocm93cywgY29sdW1ucykge1xuICAgIGlmIChjb2x1bW5zID09IG51bGwpIGNvbHVtbnMgPSBpbmZlckNvbHVtbnMocm93cyk7XG4gICAgcmV0dXJuIFtjb2x1bW5zLm1hcChmb3JtYXRWYWx1ZSkuam9pbihkZWxpbWl0ZXIpXS5jb25jYXQocm93cy5tYXAoZnVuY3Rpb24ocm93KSB7XG4gICAgICByZXR1cm4gY29sdW1ucy5tYXAoZnVuY3Rpb24oY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRWYWx1ZShyb3dbY29sdW1uXSk7XG4gICAgICB9KS5qb2luKGRlbGltaXRlcik7XG4gICAgfSkpLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRSb3dzKHJvd3MpIHtcbiAgICByZXR1cm4gcm93cy5tYXAoZm9ybWF0Um93KS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0Um93KHJvdykge1xuICAgIHJldHVybiByb3cubWFwKGZvcm1hdFZhbHVlKS5qb2luKGRlbGltaXRlcik7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRWYWx1ZSh0ZXh0KSB7XG4gICAgcmV0dXJuIHRleHQgPT0gbnVsbCA/IFwiXCJcbiAgICAgICAgOiByZUZvcm1hdC50ZXN0KHRleHQgKz0gXCJcIikgPyBcIlxcXCJcIiArIHRleHQucmVwbGFjZSgvXFxcIi9nLCBcIlxcXCJcXFwiXCIpICsgXCJcXFwiXCJcbiAgICAgICAgOiB0ZXh0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXJzZTogcGFyc2UsXG4gICAgcGFyc2VSb3dzOiBwYXJzZVJvd3MsXG4gICAgZm9ybWF0OiBmb3JtYXQsXG4gICAgZm9ybWF0Um93czogZm9ybWF0Um93c1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZCkge1xuICB2YXIgeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCksXG4gICAgICB5ID0gK3RoaXMuX3kuY2FsbChudWxsLCBkKTtcbiAgcmV0dXJuIGFkZCh0aGlzLmNvdmVyKHgsIHkpLCB4LCB5LCBkKTtcbn1cblxuZnVuY3Rpb24gYWRkKHRyZWUsIHgsIHksIGQpIHtcbiAgaWYgKGlzTmFOKHgpIHx8IGlzTmFOKHkpKSByZXR1cm4gdHJlZTsgLy8gaWdub3JlIGludmFsaWQgcG9pbnRzXG5cbiAgdmFyIHBhcmVudCxcbiAgICAgIG5vZGUgPSB0cmVlLl9yb290LFxuICAgICAgbGVhZiA9IHtkYXRhOiBkfSxcbiAgICAgIHgwID0gdHJlZS5feDAsXG4gICAgICB5MCA9IHRyZWUuX3kwLFxuICAgICAgeDEgPSB0cmVlLl94MSxcbiAgICAgIHkxID0gdHJlZS5feTEsXG4gICAgICB4bSxcbiAgICAgIHltLFxuICAgICAgeHAsXG4gICAgICB5cCxcbiAgICAgIHJpZ2h0LFxuICAgICAgYm90dG9tLFxuICAgICAgaSxcbiAgICAgIGo7XG5cbiAgLy8gSWYgdGhlIHRyZWUgaXMgZW1wdHksIGluaXRpYWxpemUgdGhlIHJvb3QgYXMgYSBsZWFmLlxuICBpZiAoIW5vZGUpIHJldHVybiB0cmVlLl9yb290ID0gbGVhZiwgdHJlZTtcblxuICAvLyBGaW5kIHRoZSBleGlzdGluZyBsZWFmIGZvciB0aGUgbmV3IHBvaW50LCBvciBhZGQgaXQuXG4gIHdoaWxlIChub2RlLmxlbmd0aCkge1xuICAgIGlmIChyaWdodCA9IHggPj0gKHhtID0gKHgwICsgeDEpIC8gMikpIHgwID0geG07IGVsc2UgeDEgPSB4bTtcbiAgICBpZiAoYm90dG9tID0geSA+PSAoeW0gPSAoeTAgKyB5MSkgLyAyKSkgeTAgPSB5bTsgZWxzZSB5MSA9IHltO1xuICAgIGlmIChwYXJlbnQgPSBub2RlLCAhKG5vZGUgPSBub2RlW2kgPSBib3R0b20gPDwgMSB8IHJpZ2h0XSkpIHJldHVybiBwYXJlbnRbaV0gPSBsZWFmLCB0cmVlO1xuICB9XG5cbiAgLy8gSXMgdGhlIG5ldyBwb2ludCBpcyBleGFjdGx5IGNvaW5jaWRlbnQgd2l0aCB0aGUgZXhpc3RpbmcgcG9pbnQ/XG4gIHhwID0gK3RyZWUuX3guY2FsbChudWxsLCBub2RlLmRhdGEpO1xuICB5cCA9ICt0cmVlLl95LmNhbGwobnVsbCwgbm9kZS5kYXRhKTtcbiAgaWYgKHggPT09IHhwICYmIHkgPT09IHlwKSByZXR1cm4gbGVhZi5uZXh0ID0gbm9kZSwgcGFyZW50ID8gcGFyZW50W2ldID0gbGVhZiA6IHRyZWUuX3Jvb3QgPSBsZWFmLCB0cmVlO1xuXG4gIC8vIE90aGVyd2lzZSwgc3BsaXQgdGhlIGxlYWYgbm9kZSB1bnRpbCB0aGUgb2xkIGFuZCBuZXcgcG9pbnQgYXJlIHNlcGFyYXRlZC5cbiAgZG8ge1xuICAgIHBhcmVudCA9IHBhcmVudCA/IHBhcmVudFtpXSA9IG5ldyBBcnJheSg0KSA6IHRyZWUuX3Jvb3QgPSBuZXcgQXJyYXkoNCk7XG4gICAgaWYgKHJpZ2h0ID0geCA+PSAoeG0gPSAoeDAgKyB4MSkgLyAyKSkgeDAgPSB4bTsgZWxzZSB4MSA9IHhtO1xuICAgIGlmIChib3R0b20gPSB5ID49ICh5bSA9ICh5MCArIHkxKSAvIDIpKSB5MCA9IHltOyBlbHNlIHkxID0geW07XG4gIH0gd2hpbGUgKChpID0gYm90dG9tIDw8IDEgfCByaWdodCkgPT09IChqID0gKHlwID49IHltKSA8PCAxIHwgKHhwID49IHhtKSkpO1xuICByZXR1cm4gcGFyZW50W2pdID0gbm9kZSwgcGFyZW50W2ldID0gbGVhZiwgdHJlZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEFsbChkYXRhKSB7XG4gIHZhciBkLCBpLCBuID0gZGF0YS5sZW5ndGgsXG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHh6ID0gbmV3IEFycmF5KG4pLFxuICAgICAgeXogPSBuZXcgQXJyYXkobiksXG4gICAgICB4MCA9IEluZmluaXR5LFxuICAgICAgeTAgPSBJbmZpbml0eSxcbiAgICAgIHgxID0gLUluZmluaXR5LFxuICAgICAgeTEgPSAtSW5maW5pdHk7XG5cbiAgLy8gQ29tcHV0ZSB0aGUgcG9pbnRzIGFuZCB0aGVpciBleHRlbnQuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoaXNOYU4oeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCA9IGRhdGFbaV0pKSB8fCBpc05hTih5ID0gK3RoaXMuX3kuY2FsbChudWxsLCBkKSkpIGNvbnRpbnVlO1xuICAgIHh6W2ldID0geDtcbiAgICB5eltpXSA9IHk7XG4gICAgaWYgKHggPCB4MCkgeDAgPSB4O1xuICAgIGlmICh4ID4geDEpIHgxID0geDtcbiAgICBpZiAoeSA8IHkwKSB5MCA9IHk7XG4gICAgaWYgKHkgPiB5MSkgeTEgPSB5O1xuICB9XG5cbiAgLy8gSWYgdGhlcmUgd2VyZSBubyAodmFsaWQpIHBvaW50cywgaW5oZXJpdCB0aGUgZXhpc3RpbmcgZXh0ZW50LlxuICBpZiAoeDEgPCB4MCkgeDAgPSB0aGlzLl94MCwgeDEgPSB0aGlzLl94MTtcbiAgaWYgKHkxIDwgeTApIHkwID0gdGhpcy5feTAsIHkxID0gdGhpcy5feTE7XG5cbiAgLy8gRXhwYW5kIHRoZSB0cmVlIHRvIGNvdmVyIHRoZSBuZXcgcG9pbnRzLlxuICB0aGlzLmNvdmVyKHgwLCB5MCkuY292ZXIoeDEsIHkxKTtcblxuICAvLyBBZGQgdGhlIG5ldyBwb2ludHMuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICBhZGQodGhpcywgeHpbaV0sIHl6W2ldLCBkYXRhW2ldKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZCkge1xuICBpZiAoaXNOYU4oeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCkpIHx8IGlzTmFOKHkgPSArdGhpcy5feS5jYWxsKG51bGwsIGQpKSkgcmV0dXJuIHRoaXM7IC8vIGlnbm9yZSBpbnZhbGlkIHBvaW50c1xuXG4gIHZhciBwYXJlbnQsXG4gICAgICBub2RlID0gdGhpcy5fcm9vdCxcbiAgICAgIHJldGFpbmVyLFxuICAgICAgcHJldmlvdXMsXG4gICAgICBuZXh0LFxuICAgICAgeDAgPSB0aGlzLl94MCxcbiAgICAgIHkwID0gdGhpcy5feTAsXG4gICAgICB4MSA9IHRoaXMuX3gxLFxuICAgICAgeTEgPSB0aGlzLl95MSxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgeG0sXG4gICAgICB5bSxcbiAgICAgIHJpZ2h0LFxuICAgICAgYm90dG9tLFxuICAgICAgaSxcbiAgICAgIGo7XG5cbiAgLy8gSWYgdGhlIHRyZWUgaXMgZW1wdHksIGluaXRpYWxpemUgdGhlIHJvb3QgYXMgYSBsZWFmLlxuICBpZiAoIW5vZGUpIHJldHVybiB0aGlzO1xuXG4gIC8vIEZpbmQgdGhlIGxlYWYgbm9kZSBmb3IgdGhlIHBvaW50LlxuICAvLyBXaGlsZSBkZXNjZW5kaW5nLCBhbHNvIHJldGFpbiB0aGUgZGVlcGVzdCBwYXJlbnQgd2l0aCBhIG5vbi1yZW1vdmVkIHNpYmxpbmcuXG4gIGlmIChub2RlLmxlbmd0aCkgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAocmlnaHQgPSB4ID49ICh4bSA9ICh4MCArIHgxKSAvIDIpKSB4MCA9IHhtOyBlbHNlIHgxID0geG07XG4gICAgaWYgKGJvdHRvbSA9IHkgPj0gKHltID0gKHkwICsgeTEpIC8gMikpIHkwID0geW07IGVsc2UgeTEgPSB5bTtcbiAgICBpZiAoIShwYXJlbnQgPSBub2RlLCBub2RlID0gbm9kZVtpID0gYm90dG9tIDw8IDEgfCByaWdodF0pKSByZXR1cm4gdGhpcztcbiAgICBpZiAoIW5vZGUubGVuZ3RoKSBicmVhaztcbiAgICBpZiAocGFyZW50WyhpICsgMSkgJiAzXSB8fCBwYXJlbnRbKGkgKyAyKSAmIDNdIHx8IHBhcmVudFsoaSArIDMpICYgM10pIHJldGFpbmVyID0gcGFyZW50LCBqID0gaTtcbiAgfVxuXG4gIC8vIEZpbmQgdGhlIHBvaW50IHRvIHJlbW92ZS5cbiAgd2hpbGUgKG5vZGUuZGF0YSAhPT0gZCkgaWYgKCEocHJldmlvdXMgPSBub2RlLCBub2RlID0gbm9kZS5uZXh0KSkgcmV0dXJuIHRoaXM7XG4gIGlmIChuZXh0ID0gbm9kZS5uZXh0KSBkZWxldGUgbm9kZS5uZXh0O1xuXG4gIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb2luY2lkZW50IHBvaW50cywgcmVtb3ZlIGp1c3QgdGhlIHBvaW50LlxuICBpZiAocHJldmlvdXMpIHJldHVybiAobmV4dCA/IHByZXZpb3VzLm5leHQgPSBuZXh0IDogZGVsZXRlIHByZXZpb3VzLm5leHQpLCB0aGlzO1xuXG4gIC8vIElmIHRoaXMgaXMgdGhlIHJvb3QgcG9pbnQsIHJlbW92ZSBpdC5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiB0aGlzLl9yb290ID0gbmV4dCwgdGhpcztcblxuICAvLyBSZW1vdmUgdGhpcyBsZWFmLlxuICBuZXh0ID8gcGFyZW50W2ldID0gbmV4dCA6IGRlbGV0ZSBwYXJlbnRbaV07XG5cbiAgLy8gSWYgdGhlIHBhcmVudCBub3cgY29udGFpbnMgZXhhY3RseSBvbmUgbGVhZiwgY29sbGFwc2Ugc3VwZXJmbHVvdXMgcGFyZW50cy5cbiAgaWYgKChub2RlID0gcGFyZW50WzBdIHx8IHBhcmVudFsxXSB8fCBwYXJlbnRbMl0gfHwgcGFyZW50WzNdKVxuICAgICAgJiYgbm9kZSA9PT0gKHBhcmVudFszXSB8fCBwYXJlbnRbMl0gfHwgcGFyZW50WzFdIHx8IHBhcmVudFswXSlcbiAgICAgICYmICFub2RlLmxlbmd0aCkge1xuICAgIGlmIChyZXRhaW5lcikgcmV0YWluZXJbal0gPSBub2RlO1xuICAgIGVsc2UgdGhpcy5fcm9vdCA9IG5vZGU7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUFsbChkYXRhKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gZGF0YS5sZW5ndGg7IGkgPCBuOyArK2kpIHRoaXMucmVtb3ZlKGRhdGFbaV0pO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0WChkKSB7XG4gIHJldHVybiBkWzBdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihfKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRoaXMuX3ggPSBfLCB0aGlzKSA6IHRoaXMuX3g7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZGVmYXVsdFkoZCkge1xuICByZXR1cm4gZFsxXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oXykge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aGlzLl95ID0gXywgdGhpcykgOiB0aGlzLl95O1xufVxuIiwiaW1wb3J0IHRyZWVfYWRkLCB7YWRkQWxsIGFzIHRyZWVfYWRkQWxsfSBmcm9tIFwiLi9hZGRcIjtcbmltcG9ydCB0cmVlX2NvdmVyIGZyb20gXCIuL2NvdmVyXCI7XG5pbXBvcnQgdHJlZV9kYXRhIGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCB0cmVlX2V4dGVudCBmcm9tIFwiLi9leHRlbnRcIjtcbmltcG9ydCB0cmVlX2ZpbmQgZnJvbSBcIi4vZmluZFwiO1xuaW1wb3J0IHRyZWVfcmVtb3ZlLCB7cmVtb3ZlQWxsIGFzIHRyZWVfcmVtb3ZlQWxsfSBmcm9tIFwiLi9yZW1vdmVcIjtcbmltcG9ydCB0cmVlX3Jvb3QgZnJvbSBcIi4vcm9vdFwiO1xuaW1wb3J0IHRyZWVfc2l6ZSBmcm9tIFwiLi9zaXplXCI7XG5pbXBvcnQgdHJlZV92aXNpdCBmcm9tIFwiLi92aXNpdFwiO1xuaW1wb3J0IHRyZWVfdmlzaXRBZnRlciBmcm9tIFwiLi92aXNpdEFmdGVyXCI7XG5pbXBvcnQgdHJlZV94LCB7ZGVmYXVsdFh9IGZyb20gXCIuL3hcIjtcbmltcG9ydCB0cmVlX3ksIHtkZWZhdWx0WX0gZnJvbSBcIi4veVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWFkdHJlZShub2RlcywgeCwgeSkge1xuICB2YXIgdHJlZSA9IG5ldyBRdWFkdHJlZSh4ID09IG51bGwgPyBkZWZhdWx0WCA6IHgsIHkgPT0gbnVsbCA/IGRlZmF1bHRZIDogeSwgTmFOLCBOYU4sIE5hTiwgTmFOKTtcbiAgcmV0dXJuIG5vZGVzID09IG51bGwgPyB0cmVlIDogdHJlZS5hZGRBbGwobm9kZXMpO1xufVxuXG5mdW5jdGlvbiBRdWFkdHJlZSh4LCB5LCB4MCwgeTAsIHgxLCB5MSkge1xuICB0aGlzLl94ID0geDtcbiAgdGhpcy5feSA9IHk7XG4gIHRoaXMuX3gwID0geDA7XG4gIHRoaXMuX3kwID0geTA7XG4gIHRoaXMuX3gxID0geDE7XG4gIHRoaXMuX3kxID0geTE7XG4gIHRoaXMuX3Jvb3QgPSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGxlYWZfY29weShsZWFmKSB7XG4gIHZhciBjb3B5ID0ge2RhdGE6IGxlYWYuZGF0YX0sIG5leHQgPSBjb3B5O1xuICB3aGlsZSAobGVhZiA9IGxlYWYubmV4dCkgbmV4dCA9IG5leHQubmV4dCA9IHtkYXRhOiBsZWFmLmRhdGF9O1xuICByZXR1cm4gY29weTtcbn1cblxudmFyIHRyZWVQcm90byA9IHF1YWR0cmVlLnByb3RvdHlwZSA9IFF1YWR0cmVlLnByb3RvdHlwZTtcblxudHJlZVByb3RvLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvcHkgPSBuZXcgUXVhZHRyZWUodGhpcy5feCwgdGhpcy5feSwgdGhpcy5feDAsIHRoaXMuX3kwLCB0aGlzLl94MSwgdGhpcy5feTEpLFxuICAgICAgbm9kZSA9IHRoaXMuX3Jvb3QsXG4gICAgICBub2RlcyxcbiAgICAgIGNoaWxkO1xuXG4gIGlmICghbm9kZSkgcmV0dXJuIGNvcHk7XG5cbiAgaWYgKCFub2RlLmxlbmd0aCkgcmV0dXJuIGNvcHkuX3Jvb3QgPSBsZWFmX2NvcHkobm9kZSksIGNvcHk7XG5cbiAgbm9kZXMgPSBbe3NvdXJjZTogbm9kZSwgdGFyZ2V0OiBjb3B5Ll9yb290ID0gbmV3IEFycmF5KDQpfV07XG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgaWYgKGNoaWxkID0gbm9kZS5zb3VyY2VbaV0pIHtcbiAgICAgICAgaWYgKGNoaWxkLmxlbmd0aCkgbm9kZXMucHVzaCh7c291cmNlOiBjaGlsZCwgdGFyZ2V0OiBub2RlLnRhcmdldFtpXSA9IG5ldyBBcnJheSg0KX0pO1xuICAgICAgICBlbHNlIG5vZGUudGFyZ2V0W2ldID0gbGVhZl9jb3B5KGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29weTtcbn07XG5cbnRyZWVQcm90by5hZGQgPSB0cmVlX2FkZDtcbnRyZWVQcm90by5hZGRBbGwgPSB0cmVlX2FkZEFsbDtcbnRyZWVQcm90by5jb3ZlciA9IHRyZWVfY292ZXI7XG50cmVlUHJvdG8uZGF0YSA9IHRyZWVfZGF0YTtcbnRyZWVQcm90by5leHRlbnQgPSB0cmVlX2V4dGVudDtcbnRyZWVQcm90by5maW5kID0gdHJlZV9maW5kO1xudHJlZVByb3RvLnJlbW92ZSA9IHRyZWVfcmVtb3ZlO1xudHJlZVByb3RvLnJlbW92ZUFsbCA9IHRyZWVfcmVtb3ZlQWxsO1xudHJlZVByb3RvLnJvb3QgPSB0cmVlX3Jvb3Q7XG50cmVlUHJvdG8uc2l6ZSA9IHRyZWVfc2l6ZTtcbnRyZWVQcm90by52aXNpdCA9IHRyZWVfdmlzaXQ7XG50cmVlUHJvdG8udmlzaXRBZnRlciA9IHRyZWVfdmlzaXRBZnRlcjtcbnRyZWVQcm90by54ID0gdHJlZV94O1xudHJlZVByb3RvLnkgPSB0cmVlX3k7XG4iLCJpbXBvcnQgZm9ybWF0VHlwZXMgZnJvbSBcIi4vZm9ybWF0VHlwZXNcIjtcblxuLy8gW1tmaWxsXWFsaWduXVtzaWduXVtzeW1ib2xdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt0eXBlXVxudmFyIHJlID0gL14oPzooLik/KFs8Pj1eXSkpPyhbK1xcLVxcKCBdKT8oWyQjXSk/KDApPyhcXGQrKT8oLCk/KFxcLlxcZCspPyhbYS16JV0pPyQvaTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcikge1xuICByZXR1cm4gbmV3IEZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpO1xufVxuXG5mb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlID0gRm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZTsgLy8gaW5zdGFuY2VvZlxuXG5mdW5jdGlvbiBGb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gIGlmICghKG1hdGNoID0gcmUuZXhlYyhzcGVjaWZpZXIpKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBmb3JtYXQ6IFwiICsgc3BlY2lmaWVyKTtcblxuICB2YXIgbWF0Y2gsXG4gICAgICBmaWxsID0gbWF0Y2hbMV0gfHwgXCIgXCIsXG4gICAgICBhbGlnbiA9IG1hdGNoWzJdIHx8IFwiPlwiLFxuICAgICAgc2lnbiA9IG1hdGNoWzNdIHx8IFwiLVwiLFxuICAgICAgc3ltYm9sID0gbWF0Y2hbNF0gfHwgXCJcIixcbiAgICAgIHplcm8gPSAhIW1hdGNoWzVdLFxuICAgICAgd2lkdGggPSBtYXRjaFs2XSAmJiArbWF0Y2hbNl0sXG4gICAgICBjb21tYSA9ICEhbWF0Y2hbN10sXG4gICAgICBwcmVjaXNpb24gPSBtYXRjaFs4XSAmJiArbWF0Y2hbOF0uc2xpY2UoMSksXG4gICAgICB0eXBlID0gbWF0Y2hbOV0gfHwgXCJcIjtcblxuICAvLyBUaGUgXCJuXCIgdHlwZSBpcyBhbiBhbGlhcyBmb3IgXCIsZ1wiLlxuICBpZiAodHlwZSA9PT0gXCJuXCIpIGNvbW1hID0gdHJ1ZSwgdHlwZSA9IFwiZ1wiO1xuXG4gIC8vIE1hcCBpbnZhbGlkIHR5cGVzIHRvIHRoZSBkZWZhdWx0IGZvcm1hdC5cbiAgZWxzZSBpZiAoIWZvcm1hdFR5cGVzW3R5cGVdKSB0eXBlID0gXCJcIjtcblxuICAvLyBJZiB6ZXJvIGZpbGwgaXMgc3BlY2lmaWVkLCBwYWRkaW5nIGdvZXMgYWZ0ZXIgc2lnbiBhbmQgYmVmb3JlIGRpZ2l0cy5cbiAgaWYgKHplcm8gfHwgKGZpbGwgPT09IFwiMFwiICYmIGFsaWduID09PSBcIj1cIikpIHplcm8gPSB0cnVlLCBmaWxsID0gXCIwXCIsIGFsaWduID0gXCI9XCI7XG5cbiAgdGhpcy5maWxsID0gZmlsbDtcbiAgdGhpcy5hbGlnbiA9IGFsaWduO1xuICB0aGlzLnNpZ24gPSBzaWduO1xuICB0aGlzLnN5bWJvbCA9IHN5bWJvbDtcbiAgdGhpcy56ZXJvID0gemVybztcbiAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICB0aGlzLmNvbW1hID0gY29tbWE7XG4gIHRoaXMucHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICB0aGlzLnR5cGUgPSB0eXBlO1xufVxuXG5Gb3JtYXRTcGVjaWZpZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmZpbGxcbiAgICAgICsgdGhpcy5hbGlnblxuICAgICAgKyB0aGlzLnNpZ25cbiAgICAgICsgdGhpcy5zeW1ib2xcbiAgICAgICsgKHRoaXMuemVybyA/IFwiMFwiIDogXCJcIilcbiAgICAgICsgKHRoaXMud2lkdGggPT0gbnVsbCA/IFwiXCIgOiBNYXRoLm1heCgxLCB0aGlzLndpZHRoIHwgMCkpXG4gICAgICArICh0aGlzLmNvbW1hID8gXCIsXCIgOiBcIlwiKVxuICAgICAgKyAodGhpcy5wcmVjaXNpb24gPT0gbnVsbCA/IFwiXCIgOiBcIi5cIiArIE1hdGgubWF4KDAsIHRoaXMucHJlY2lzaW9uIHwgMCkpXG4gICAgICArIHRoaXMudHlwZTtcbn07XG4iLCIvLyBBZGRzIGZsb2F0aW5nIHBvaW50IG51bWJlcnMgd2l0aCB0d2ljZSB0aGUgbm9ybWFsIHByZWNpc2lvbi5cbi8vIFJlZmVyZW5jZTogSi4gUi4gU2hld2NodWssIEFkYXB0aXZlIFByZWNpc2lvbiBGbG9hdGluZy1Qb2ludCBBcml0aG1ldGljIGFuZFxuLy8gRmFzdCBSb2J1c3QgR2VvbWV0cmljIFByZWRpY2F0ZXMsIERpc2NyZXRlICYgQ29tcHV0YXRpb25hbCBHZW9tZXRyeSAxOCgzKVxuLy8gMzA14oCTMzYzICgxOTk3KS5cbi8vIENvZGUgYWRhcHRlZCBmcm9tIEdlb2dyYXBoaWNMaWIgYnkgQ2hhcmxlcyBGLiBGLiBLYXJuZXksXG4vLyBodHRwOi8vZ2VvZ3JhcGhpY2xpYi5zb3VyY2Vmb3JnZS5uZXQvXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IEFkZGVyO1xufVxuXG5mdW5jdGlvbiBBZGRlcigpIHtcbiAgdGhpcy5yZXNldCgpO1xufVxuXG5BZGRlci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBBZGRlcixcbiAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucyA9IC8vIHJvdW5kZWQgdmFsdWVcbiAgICB0aGlzLnQgPSAwOyAvLyBleGFjdCBlcnJvclxuICB9LFxuICBhZGQ6IGZ1bmN0aW9uKHkpIHtcbiAgICBhZGQodGVtcCwgeSwgdGhpcy50KTtcbiAgICBhZGQodGhpcywgdGVtcC5zLCB0aGlzLnMpO1xuICAgIGlmICh0aGlzLnMpIHRoaXMudCArPSB0ZW1wLnQ7XG4gICAgZWxzZSB0aGlzLnMgPSB0ZW1wLnQ7XG4gIH0sXG4gIHZhbHVlT2Y6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnM7XG4gIH1cbn07XG5cbnZhciB0ZW1wID0gbmV3IEFkZGVyO1xuXG5mdW5jdGlvbiBhZGQoYWRkZXIsIGEsIGIpIHtcbiAgdmFyIHggPSBhZGRlci5zID0gYSArIGIsXG4gICAgICBidiA9IHggLSBhLFxuICAgICAgYXYgPSB4IC0gYnY7XG4gIGFkZGVyLnQgPSAoYSAtIGF2KSArIChiIC0gYnYpO1xufVxuIiwiZXhwb3J0IHZhciBlcHNpbG9uID0gMWUtNjtcbmV4cG9ydCB2YXIgZXBzaWxvbjIgPSAxZS0xMjtcbmV4cG9ydCB2YXIgcGkgPSBNYXRoLlBJO1xuZXhwb3J0IHZhciBoYWxmUGkgPSBwaSAvIDI7XG5leHBvcnQgdmFyIHF1YXJ0ZXJQaSA9IHBpIC8gNDtcbmV4cG9ydCB2YXIgdGF1ID0gcGkgKiAyO1xuXG5leHBvcnQgdmFyIGRlZ3JlZXMgPSAxODAgLyBwaTtcbmV4cG9ydCB2YXIgcmFkaWFucyA9IHBpIC8gMTgwO1xuXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzO1xuZXhwb3J0IHZhciBhdGFuID0gTWF0aC5hdGFuO1xuZXhwb3J0IHZhciBhdGFuMiA9IE1hdGguYXRhbjI7XG5leHBvcnQgdmFyIGNvcyA9IE1hdGguY29zO1xuZXhwb3J0IHZhciBjZWlsID0gTWF0aC5jZWlsO1xuZXhwb3J0IHZhciBleHAgPSBNYXRoLmV4cDtcbmV4cG9ydCB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuZXhwb3J0IHZhciBsb2cgPSBNYXRoLmxvZztcbmV4cG9ydCB2YXIgcG93ID0gTWF0aC5wb3c7XG5leHBvcnQgdmFyIHNpbiA9IE1hdGguc2luO1xuZXhwb3J0IHZhciBzaWduID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHggPiAwID8gMSA6IHggPCAwID8gLTEgOiAwOyB9O1xuZXhwb3J0IHZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xuZXhwb3J0IHZhciB0YW4gPSBNYXRoLnRhbjtcblxuZXhwb3J0IGZ1bmN0aW9uIGFjb3MoeCkge1xuICByZXR1cm4geCA+IDEgPyAwIDogeCA8IC0xID8gcGkgOiBNYXRoLmFjb3MoeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc2luKHgpIHtcbiAgcmV0dXJuIHggPiAxID8gaGFsZlBpIDogeCA8IC0xID8gLWhhbGZQaSA6IE1hdGguYXNpbih4KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhdmVyc2luKHgpIHtcbiAgcmV0dXJuICh4ID0gc2luKHggLyAyKSkgKiB4O1xufVxuIiwiaW1wb3J0IHthc2luLCBhdGFuMiwgY29zLCBzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhemltdXRoYWxSYXcoc2NhbGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgY3ggPSBjb3MoeCksXG4gICAgICAgIGN5ID0gY29zKHkpLFxuICAgICAgICBrID0gc2NhbGUoY3ggKiBjeSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIGsgKiBjeSAqIHNpbih4KSxcbiAgICAgIGsgKiBzaW4oeSlcbiAgICBdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhemltdXRoYWxJbnZlcnQoYW5nbGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB2YXIgeiA9IHNxcnQoeCAqIHggKyB5ICogeSksXG4gICAgICAgIGMgPSBhbmdsZSh6KSxcbiAgICAgICAgc2MgPSBzaW4oYyksXG4gICAgICAgIGNjID0gY29zKGMpO1xuICAgIHJldHVybiBbXG4gICAgICBhdGFuMih4ICogc2MsIHogKiBjYyksXG4gICAgICBhc2luKHogJiYgeSAqIHNjIC8geilcbiAgICBdO1xuICB9XG59XG4iLCJmdW5jdGlvbiBjb3VudChub2RlKSB7XG4gIHZhciBzdW0gPSAwLFxuICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLFxuICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgaWYgKCFpKSBzdW0gPSAxO1xuICBlbHNlIHdoaWxlICgtLWkgPj0gMCkgc3VtICs9IGNoaWxkcmVuW2ldLnZhbHVlO1xuICBub2RlLnZhbHVlID0gc3VtO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEFmdGVyKGNvdW50KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGVuZCkge1xuICB2YXIgc3RhcnQgPSB0aGlzLFxuICAgICAgYW5jZXN0b3IgPSBsZWFzdENvbW1vbkFuY2VzdG9yKHN0YXJ0LCBlbmQpLFxuICAgICAgbm9kZXMgPSBbc3RhcnRdO1xuICB3aGlsZSAoc3RhcnQgIT09IGFuY2VzdG9yKSB7XG4gICAgc3RhcnQgPSBzdGFydC5wYXJlbnQ7XG4gICAgbm9kZXMucHVzaChzdGFydCk7XG4gIH1cbiAgdmFyIGsgPSBub2Rlcy5sZW5ndGg7XG4gIHdoaWxlIChlbmQgIT09IGFuY2VzdG9yKSB7XG4gICAgbm9kZXMuc3BsaWNlKGssIDAsIGVuZCk7XG4gICAgZW5kID0gZW5kLnBhcmVudDtcbiAgfVxuICByZXR1cm4gbm9kZXM7XG59XG5cbmZ1bmN0aW9uIGxlYXN0Q29tbW9uQW5jZXN0b3IoYSwgYikge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIGE7XG4gIHZhciBhTm9kZXMgPSBhLmFuY2VzdG9ycygpLFxuICAgICAgYk5vZGVzID0gYi5hbmNlc3RvcnMoKSxcbiAgICAgIGMgPSBudWxsO1xuICBhID0gYU5vZGVzLnBvcCgpO1xuICBiID0gYk5vZGVzLnBvcCgpO1xuICB3aGlsZSAoYSA9PT0gYikge1xuICAgIGMgPSBhO1xuICAgIGEgPSBhTm9kZXMucG9wKCk7XG4gICAgYiA9IGJOb2Rlcy5wb3AoKTtcbiAgfVxuICByZXR1cm4gYztcbn1cbiIsImltcG9ydCBub2RlX2NvdW50IGZyb20gXCIuL2NvdW50XCI7XG5pbXBvcnQgbm9kZV9lYWNoIGZyb20gXCIuL2VhY2hcIjtcbmltcG9ydCBub2RlX2VhY2hCZWZvcmUgZnJvbSBcIi4vZWFjaEJlZm9yZVwiO1xuaW1wb3J0IG5vZGVfZWFjaEFmdGVyIGZyb20gXCIuL2VhY2hBZnRlclwiO1xuaW1wb3J0IG5vZGVfc3VtIGZyb20gXCIuL3N1bVwiO1xuaW1wb3J0IG5vZGVfc29ydCBmcm9tIFwiLi9zb3J0XCI7XG5pbXBvcnQgbm9kZV9wYXRoIGZyb20gXCIuL3BhdGhcIjtcbmltcG9ydCBub2RlX2FuY2VzdG9ycyBmcm9tIFwiLi9hbmNlc3RvcnNcIjtcbmltcG9ydCBub2RlX2Rlc2NlbmRhbnRzIGZyb20gXCIuL2Rlc2NlbmRhbnRzXCI7XG5pbXBvcnQgbm9kZV9sZWF2ZXMgZnJvbSBcIi4vbGVhdmVzXCI7XG5pbXBvcnQgbm9kZV9saW5rcyBmcm9tIFwiLi9saW5rc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoaWVyYXJjaHkoZGF0YSwgY2hpbGRyZW4pIHtcbiAgdmFyIHJvb3QgPSBuZXcgTm9kZShkYXRhKSxcbiAgICAgIHZhbHVlZCA9ICtkYXRhLnZhbHVlICYmIChyb290LnZhbHVlID0gZGF0YS52YWx1ZSksXG4gICAgICBub2RlLFxuICAgICAgbm9kZXMgPSBbcm9vdF0sXG4gICAgICBjaGlsZCxcbiAgICAgIGNoaWxkcyxcbiAgICAgIGksXG4gICAgICBuO1xuXG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSBjaGlsZHJlbiA9IGRlZmF1bHRDaGlsZHJlbjtcblxuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgaWYgKHZhbHVlZCkgbm9kZS52YWx1ZSA9ICtub2RlLmRhdGEudmFsdWU7XG4gICAgaWYgKChjaGlsZHMgPSBjaGlsZHJlbihub2RlLmRhdGEpKSAmJiAobiA9IGNoaWxkcy5sZW5ndGgpKSB7XG4gICAgICBub2RlLmNoaWxkcmVuID0gbmV3IEFycmF5KG4pO1xuICAgICAgZm9yIChpID0gbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIG5vZGVzLnB1c2goY2hpbGQgPSBub2RlLmNoaWxkcmVuW2ldID0gbmV3IE5vZGUoY2hpbGRzW2ldKSk7XG4gICAgICAgIGNoaWxkLnBhcmVudCA9IG5vZGU7XG4gICAgICAgIGNoaWxkLmRlcHRoID0gbm9kZS5kZXB0aCArIDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3QuZWFjaEJlZm9yZShjb21wdXRlSGVpZ2h0KTtcbn1cblxuZnVuY3Rpb24gbm9kZV9jb3B5KCkge1xuICByZXR1cm4gaGllcmFyY2h5KHRoaXMpLmVhY2hCZWZvcmUoY29weURhdGEpO1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0Q2hpbGRyZW4oZCkge1xuICByZXR1cm4gZC5jaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY29weURhdGEobm9kZSkge1xuICBub2RlLmRhdGEgPSBub2RlLmRhdGEuZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVIZWlnaHQobm9kZSkge1xuICB2YXIgaGVpZ2h0ID0gMDtcbiAgZG8gbm9kZS5oZWlnaHQgPSBoZWlnaHQ7XG4gIHdoaWxlICgobm9kZSA9IG5vZGUucGFyZW50KSAmJiAobm9kZS5oZWlnaHQgPCArK2hlaWdodCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTm9kZShkYXRhKSB7XG4gIHRoaXMuZGF0YSA9IGRhdGE7XG4gIHRoaXMuZGVwdGggPVxuICB0aGlzLmhlaWdodCA9IDA7XG4gIHRoaXMucGFyZW50ID0gbnVsbDtcbn1cblxuTm9kZS5wcm90b3R5cGUgPSBoaWVyYXJjaHkucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogTm9kZSxcbiAgY291bnQ6IG5vZGVfY291bnQsXG4gIGVhY2g6IG5vZGVfZWFjaCxcbiAgZWFjaEFmdGVyOiBub2RlX2VhY2hBZnRlcixcbiAgZWFjaEJlZm9yZTogbm9kZV9lYWNoQmVmb3JlLFxuICBzdW06IG5vZGVfc3VtLFxuICBzb3J0OiBub2RlX3NvcnQsXG4gIHBhdGg6IG5vZGVfcGF0aCxcbiAgYW5jZXN0b3JzOiBub2RlX2FuY2VzdG9ycyxcbiAgZGVzY2VuZGFudHM6IG5vZGVfZGVzY2VuZGFudHMsXG4gIGxlYXZlczogbm9kZV9sZWF2ZXMsXG4gIGxpbmtzOiBub2RlX2xpbmtzLFxuICBjb3B5OiBub2RlX2NvcHlcbn07XG4iLCJpbXBvcnQge05vZGV9IGZyb20gXCIuL2hpZXJhcmNoeS9pbmRleFwiO1xuXG5mdW5jdGlvbiBkZWZhdWx0U2VwYXJhdGlvbihhLCBiKSB7XG4gIHJldHVybiBhLnBhcmVudCA9PT0gYi5wYXJlbnQgPyAxIDogMjtcbn1cblxuLy8gZnVuY3Rpb24gcmFkaWFsU2VwYXJhdGlvbihhLCBiKSB7XG4vLyAgIHJldHVybiAoYS5wYXJlbnQgPT09IGIucGFyZW50ID8gMSA6IDIpIC8gYS5kZXB0aDtcbi8vIH1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRyYXZlcnNlIHRoZSBsZWZ0IGNvbnRvdXIgb2YgYSBzdWJ0cmVlIChvclxuLy8gc3ViZm9yZXN0KS4gSXQgcmV0dXJucyB0aGUgc3VjY2Vzc29yIG9mIHYgb24gdGhpcyBjb250b3VyLiBUaGlzIHN1Y2Nlc3NvciBpc1xuLy8gZWl0aGVyIGdpdmVuIGJ5IHRoZSBsZWZ0bW9zdCBjaGlsZCBvZiB2IG9yIGJ5IHRoZSB0aHJlYWQgb2Ygdi4gVGhlIGZ1bmN0aW9uXG4vLyByZXR1cm5zIG51bGwgaWYgYW5kIG9ubHkgaWYgdiBpcyBvbiB0aGUgaGlnaGVzdCBsZXZlbCBvZiBpdHMgc3VidHJlZS5cbmZ1bmN0aW9uIG5leHRMZWZ0KHYpIHtcbiAgdmFyIGNoaWxkcmVuID0gdi5jaGlsZHJlbjtcbiAgcmV0dXJuIGNoaWxkcmVuID8gY2hpbGRyZW5bMF0gOiB2LnQ7XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gd29ya3MgYW5hbG9nb3VzbHkgdG8gbmV4dExlZnQuXG5mdW5jdGlvbiBuZXh0UmlnaHQodikge1xuICB2YXIgY2hpbGRyZW4gPSB2LmNoaWxkcmVuO1xuICByZXR1cm4gY2hpbGRyZW4gPyBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXSA6IHYudDtcbn1cblxuLy8gU2hpZnRzIHRoZSBjdXJyZW50IHN1YnRyZWUgcm9vdGVkIGF0IHcrLiBUaGlzIGlzIGRvbmUgYnkgaW5jcmVhc2luZ1xuLy8gcHJlbGltKHcrKSBhbmQgbW9kKHcrKSBieSBzaGlmdC5cbmZ1bmN0aW9uIG1vdmVTdWJ0cmVlKHdtLCB3cCwgc2hpZnQpIHtcbiAgdmFyIGNoYW5nZSA9IHNoaWZ0IC8gKHdwLmkgLSB3bS5pKTtcbiAgd3AuYyAtPSBjaGFuZ2U7XG4gIHdwLnMgKz0gc2hpZnQ7XG4gIHdtLmMgKz0gY2hhbmdlO1xuICB3cC56ICs9IHNoaWZ0O1xuICB3cC5tICs9IHNoaWZ0O1xufVxuXG4vLyBBbGwgb3RoZXIgc2hpZnRzLCBhcHBsaWVkIHRvIHRoZSBzbWFsbGVyIHN1YnRyZWVzIGJldHdlZW4gdy0gYW5kIHcrLCBhcmVcbi8vIHBlcmZvcm1lZCBieSB0aGlzIGZ1bmN0aW9uLiBUbyBwcmVwYXJlIHRoZSBzaGlmdHMsIHdlIGhhdmUgdG8gYWRqdXN0XG4vLyBjaGFuZ2UodyspLCBzaGlmdCh3KyksIGFuZCBjaGFuZ2Uody0pLlxuZnVuY3Rpb24gZXhlY3V0ZVNoaWZ0cyh2KSB7XG4gIHZhciBzaGlmdCA9IDAsXG4gICAgICBjaGFuZ2UgPSAwLFxuICAgICAgY2hpbGRyZW4gPSB2LmNoaWxkcmVuLFxuICAgICAgaSA9IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgIHc7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIHcgPSBjaGlsZHJlbltpXTtcbiAgICB3LnogKz0gc2hpZnQ7XG4gICAgdy5tICs9IHNoaWZ0O1xuICAgIHNoaWZ0ICs9IHcucyArIChjaGFuZ2UgKz0gdy5jKTtcbiAgfVxufVxuXG4vLyBJZiB2aS3igJlzIGFuY2VzdG9yIGlzIGEgc2libGluZyBvZiB2LCByZXR1cm5zIHZpLeKAmXMgYW5jZXN0b3IuIE90aGVyd2lzZSxcbi8vIHJldHVybnMgdGhlIHNwZWNpZmllZCAoZGVmYXVsdCkgYW5jZXN0b3IuXG5mdW5jdGlvbiBuZXh0QW5jZXN0b3IodmltLCB2LCBhbmNlc3Rvcikge1xuICByZXR1cm4gdmltLmEucGFyZW50ID09PSB2LnBhcmVudCA/IHZpbS5hIDogYW5jZXN0b3I7XG59XG5cbmZ1bmN0aW9uIFRyZWVOb2RlKG5vZGUsIGkpIHtcbiAgdGhpcy5fID0gbm9kZTtcbiAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5BID0gbnVsbDsgLy8gZGVmYXVsdCBhbmNlc3RvclxuICB0aGlzLmEgPSB0aGlzOyAvLyBhbmNlc3RvclxuICB0aGlzLnogPSAwOyAvLyBwcmVsaW1cbiAgdGhpcy5tID0gMDsgLy8gbW9kXG4gIHRoaXMuYyA9IDA7IC8vIGNoYW5nZVxuICB0aGlzLnMgPSAwOyAvLyBzaGlmdFxuICB0aGlzLnQgPSBudWxsOyAvLyB0aHJlYWRcbiAgdGhpcy5pID0gaTsgLy8gbnVtYmVyXG59XG5cblRyZWVOb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTm9kZS5wcm90b3R5cGUpO1xuXG5mdW5jdGlvbiB0cmVlUm9vdChyb290KSB7XG4gIHZhciB0cmVlID0gbmV3IFRyZWVOb2RlKHJvb3QsIDApLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVzID0gW3RyZWVdLFxuICAgICAgY2hpbGQsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGksXG4gICAgICBuO1xuXG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBpZiAoY2hpbGRyZW4gPSBub2RlLl8uY2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4gPSBuZXcgQXJyYXkobiA9IGNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgbm9kZXMucHVzaChjaGlsZCA9IG5vZGUuY2hpbGRyZW5baV0gPSBuZXcgVHJlZU5vZGUoY2hpbGRyZW5baV0sIGkpKTtcbiAgICAgICAgY2hpbGQucGFyZW50ID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAodHJlZS5wYXJlbnQgPSBuZXcgVHJlZU5vZGUobnVsbCwgMCkpLmNoaWxkcmVuID0gW3RyZWVdO1xuICByZXR1cm4gdHJlZTtcbn1cblxuLy8gTm9kZS1saW5rIHRyZWUgZGlhZ3JhbSB1c2luZyB0aGUgUmVpbmdvbGQtVGlsZm9yZCBcInRpZHlcIiBhbGdvcml0aG1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2VwYXJhdGlvbiA9IGRlZmF1bHRTZXBhcmF0aW9uLFxuICAgICAgZHggPSAxLFxuICAgICAgZHkgPSAxLFxuICAgICAgbm9kZVNpemUgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIHRyZWUocm9vdCkge1xuICAgIHZhciB0ID0gdHJlZVJvb3Qocm9vdCk7XG5cbiAgICAvLyBDb21wdXRlIHRoZSBsYXlvdXQgdXNpbmcgQnVjaGhlaW0gZXQgYWwu4oCZcyBhbGdvcml0aG0uXG4gICAgdC5lYWNoQWZ0ZXIoZmlyc3RXYWxrKSwgdC5wYXJlbnQubSA9IC10Lno7XG4gICAgdC5lYWNoQmVmb3JlKHNlY29uZFdhbGspO1xuXG4gICAgLy8gSWYgYSBmaXhlZCBub2RlIHNpemUgaXMgc3BlY2lmaWVkLCBzY2FsZSB4IGFuZCB5LlxuICAgIGlmIChub2RlU2l6ZSkgcm9vdC5lYWNoQmVmb3JlKHNpemVOb2RlKTtcblxuICAgIC8vIElmIGEgZml4ZWQgdHJlZSBzaXplIGlzIHNwZWNpZmllZCwgc2NhbGUgeCBhbmQgeSBiYXNlZCBvbiB0aGUgZXh0ZW50LlxuICAgIC8vIENvbXB1dGUgdGhlIGxlZnQtbW9zdCwgcmlnaHQtbW9zdCwgYW5kIGRlcHRoLW1vc3Qgbm9kZXMgZm9yIGV4dGVudHMuXG4gICAgZWxzZSB7XG4gICAgICB2YXIgbGVmdCA9IHJvb3QsXG4gICAgICAgICAgcmlnaHQgPSByb290LFxuICAgICAgICAgIGJvdHRvbSA9IHJvb3Q7XG4gICAgICByb290LmVhY2hCZWZvcmUoZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS54IDwgbGVmdC54KSBsZWZ0ID0gbm9kZTtcbiAgICAgICAgaWYgKG5vZGUueCA+IHJpZ2h0LngpIHJpZ2h0ID0gbm9kZTtcbiAgICAgICAgaWYgKG5vZGUuZGVwdGggPiBib3R0b20uZGVwdGgpIGJvdHRvbSA9IG5vZGU7XG4gICAgICB9KTtcbiAgICAgIHZhciBzID0gbGVmdCA9PT0gcmlnaHQgPyAxIDogc2VwYXJhdGlvbihsZWZ0LCByaWdodCkgLyAyLFxuICAgICAgICAgIHR4ID0gcyAtIGxlZnQueCxcbiAgICAgICAgICBreCA9IGR4IC8gKHJpZ2h0LnggKyBzICsgdHgpLFxuICAgICAgICAgIGt5ID0gZHkgLyAoYm90dG9tLmRlcHRoIHx8IDEpO1xuICAgICAgcm9vdC5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgbm9kZS54ID0gKG5vZGUueCArIHR4KSAqIGt4O1xuICAgICAgICBub2RlLnkgPSBub2RlLmRlcHRoICoga3k7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm9vdDtcbiAgfVxuXG4gIC8vIENvbXB1dGVzIGEgcHJlbGltaW5hcnkgeC1jb29yZGluYXRlIGZvciB2LiBCZWZvcmUgdGhhdCwgRklSU1QgV0FMSyBpc1xuICAvLyBhcHBsaWVkIHJlY3Vyc2l2ZWx5IHRvIHRoZSBjaGlsZHJlbiBvZiB2LCBhcyB3ZWxsIGFzIHRoZSBmdW5jdGlvblxuICAvLyBBUFBPUlRJT04uIEFmdGVyIHNwYWNpbmcgb3V0IHRoZSBjaGlsZHJlbiBieSBjYWxsaW5nIEVYRUNVVEUgU0hJRlRTLCB0aGVcbiAgLy8gbm9kZSB2IGlzIHBsYWNlZCB0byB0aGUgbWlkcG9pbnQgb2YgaXRzIG91dGVybW9zdCBjaGlsZHJlbi5cbiAgZnVuY3Rpb24gZmlyc3RXYWxrKHYpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB2LmNoaWxkcmVuLFxuICAgICAgICBzaWJsaW5ncyA9IHYucGFyZW50LmNoaWxkcmVuLFxuICAgICAgICB3ID0gdi5pID8gc2libGluZ3Nbdi5pIC0gMV0gOiBudWxsO1xuICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgZXhlY3V0ZVNoaWZ0cyh2KTtcbiAgICAgIHZhciBtaWRwb2ludCA9IChjaGlsZHJlblswXS56ICsgY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0ueikgLyAyO1xuICAgICAgaWYgKHcpIHtcbiAgICAgICAgdi56ID0gdy56ICsgc2VwYXJhdGlvbih2Ll8sIHcuXyk7XG4gICAgICAgIHYubSA9IHYueiAtIG1pZHBvaW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdi56ID0gbWlkcG9pbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh3KSB7XG4gICAgICB2LnogPSB3LnogKyBzZXBhcmF0aW9uKHYuXywgdy5fKTtcbiAgICB9XG4gICAgdi5wYXJlbnQuQSA9IGFwcG9ydGlvbih2LCB3LCB2LnBhcmVudC5BIHx8IHNpYmxpbmdzWzBdKTtcbiAgfVxuXG4gIC8vIENvbXB1dGVzIGFsbCByZWFsIHgtY29vcmRpbmF0ZXMgYnkgc3VtbWluZyB1cCB0aGUgbW9kaWZpZXJzIHJlY3Vyc2l2ZWx5LlxuICBmdW5jdGlvbiBzZWNvbmRXYWxrKHYpIHtcbiAgICB2Ll8ueCA9IHYueiArIHYucGFyZW50Lm07XG4gICAgdi5tICs9IHYucGFyZW50Lm07XG4gIH1cblxuICAvLyBUaGUgY29yZSBvZiB0aGUgYWxnb3JpdGhtLiBIZXJlLCBhIG5ldyBzdWJ0cmVlIGlzIGNvbWJpbmVkIHdpdGggdGhlXG4gIC8vIHByZXZpb3VzIHN1YnRyZWVzLiBUaHJlYWRzIGFyZSB1c2VkIHRvIHRyYXZlcnNlIHRoZSBpbnNpZGUgYW5kIG91dHNpZGVcbiAgLy8gY29udG91cnMgb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IHN1YnRyZWUgdXAgdG8gdGhlIGhpZ2hlc3QgY29tbW9uIGxldmVsLiBUaGVcbiAgLy8gdmVydGljZXMgdXNlZCBmb3IgdGhlIHRyYXZlcnNhbHMgYXJlIHZpKywgdmktLCB2by0sIGFuZCB2byssIHdoZXJlIHRoZVxuICAvLyBzdXBlcnNjcmlwdCBvIG1lYW5zIG91dHNpZGUgYW5kIGkgbWVhbnMgaW5zaWRlLCB0aGUgc3Vic2NyaXB0IC0gbWVhbnMgbGVmdFxuICAvLyBzdWJ0cmVlIGFuZCArIG1lYW5zIHJpZ2h0IHN1YnRyZWUuIEZvciBzdW1taW5nIHVwIHRoZSBtb2RpZmllcnMgYWxvbmcgdGhlXG4gIC8vIGNvbnRvdXIsIHdlIHVzZSByZXNwZWN0aXZlIHZhcmlhYmxlcyBzaSssIHNpLSwgc28tLCBhbmQgc28rLiBXaGVuZXZlciB0d29cbiAgLy8gbm9kZXMgb2YgdGhlIGluc2lkZSBjb250b3VycyBjb25mbGljdCwgd2UgY29tcHV0ZSB0aGUgbGVmdCBvbmUgb2YgdGhlXG4gIC8vIGdyZWF0ZXN0IHVuY29tbW9uIGFuY2VzdG9ycyB1c2luZyB0aGUgZnVuY3Rpb24gQU5DRVNUT1IgYW5kIGNhbGwgTU9WRVxuICAvLyBTVUJUUkVFIHRvIHNoaWZ0IHRoZSBzdWJ0cmVlIGFuZCBwcmVwYXJlIHRoZSBzaGlmdHMgb2Ygc21hbGxlciBzdWJ0cmVlcy5cbiAgLy8gRmluYWxseSwgd2UgYWRkIGEgbmV3IHRocmVhZCAoaWYgbmVjZXNzYXJ5KS5cbiAgZnVuY3Rpb24gYXBwb3J0aW9uKHYsIHcsIGFuY2VzdG9yKSB7XG4gICAgaWYgKHcpIHtcbiAgICAgIHZhciB2aXAgPSB2LFxuICAgICAgICAgIHZvcCA9IHYsXG4gICAgICAgICAgdmltID0gdyxcbiAgICAgICAgICB2b20gPSB2aXAucGFyZW50LmNoaWxkcmVuWzBdLFxuICAgICAgICAgIHNpcCA9IHZpcC5tLFxuICAgICAgICAgIHNvcCA9IHZvcC5tLFxuICAgICAgICAgIHNpbSA9IHZpbS5tLFxuICAgICAgICAgIHNvbSA9IHZvbS5tLFxuICAgICAgICAgIHNoaWZ0O1xuICAgICAgd2hpbGUgKHZpbSA9IG5leHRSaWdodCh2aW0pLCB2aXAgPSBuZXh0TGVmdCh2aXApLCB2aW0gJiYgdmlwKSB7XG4gICAgICAgIHZvbSA9IG5leHRMZWZ0KHZvbSk7XG4gICAgICAgIHZvcCA9IG5leHRSaWdodCh2b3ApO1xuICAgICAgICB2b3AuYSA9IHY7XG4gICAgICAgIHNoaWZ0ID0gdmltLnogKyBzaW0gLSB2aXAueiAtIHNpcCArIHNlcGFyYXRpb24odmltLl8sIHZpcC5fKTtcbiAgICAgICAgaWYgKHNoaWZ0ID4gMCkge1xuICAgICAgICAgIG1vdmVTdWJ0cmVlKG5leHRBbmNlc3Rvcih2aW0sIHYsIGFuY2VzdG9yKSwgdiwgc2hpZnQpO1xuICAgICAgICAgIHNpcCArPSBzaGlmdDtcbiAgICAgICAgICBzb3AgKz0gc2hpZnQ7XG4gICAgICAgIH1cbiAgICAgICAgc2ltICs9IHZpbS5tO1xuICAgICAgICBzaXAgKz0gdmlwLm07XG4gICAgICAgIHNvbSArPSB2b20ubTtcbiAgICAgICAgc29wICs9IHZvcC5tO1xuICAgICAgfVxuICAgICAgaWYgKHZpbSAmJiAhbmV4dFJpZ2h0KHZvcCkpIHtcbiAgICAgICAgdm9wLnQgPSB2aW07XG4gICAgICAgIHZvcC5tICs9IHNpbSAtIHNvcDtcbiAgICAgIH1cbiAgICAgIGlmICh2aXAgJiYgIW5leHRMZWZ0KHZvbSkpIHtcbiAgICAgICAgdm9tLnQgPSB2aXA7XG4gICAgICAgIHZvbS5tICs9IHNpcCAtIHNvbTtcbiAgICAgICAgYW5jZXN0b3IgPSB2O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYW5jZXN0b3I7XG4gIH1cblxuICBmdW5jdGlvbiBzaXplTm9kZShub2RlKSB7XG4gICAgbm9kZS54ICo9IGR4O1xuICAgIG5vZGUueSA9IG5vZGUuZGVwdGggKiBkeTtcbiAgfVxuXG4gIHRyZWUuc2VwYXJhdGlvbiA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzZXBhcmF0aW9uID0geCwgdHJlZSkgOiBzZXBhcmF0aW9uO1xuICB9O1xuXG4gIHRyZWUuc2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlU2l6ZSA9IGZhbHNlLCBkeCA9ICt4WzBdLCBkeSA9ICt4WzFdLCB0cmVlKSA6IChub2RlU2l6ZSA/IG51bGwgOiBbZHgsIGR5XSk7XG4gIH07XG5cbiAgdHJlZS5ub2RlU2l6ZSA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlU2l6ZSA9IHRydWUsIGR4ID0gK3hbMF0sIGR5ID0gK3hbMV0sIHRyZWUpIDogKG5vZGVTaXplID8gW2R4LCBkeV0gOiBudWxsKTtcbiAgfTtcblxuICByZXR1cm4gdHJlZTtcbn1cbiIsImltcG9ydCB7c2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5cbnZhciBub2Fib3J0ID0ge307XG5cbmZ1bmN0aW9uIFF1ZXVlKHNpemUpIHtcbiAgdGhpcy5fc2l6ZSA9IHNpemU7XG4gIHRoaXMuX2NhbGwgPVxuICB0aGlzLl9lcnJvciA9IG51bGw7XG4gIHRoaXMuX3Rhc2tzID0gW107XG4gIHRoaXMuX2RhdGEgPSBbXTtcbiAgdGhpcy5fd2FpdGluZyA9XG4gIHRoaXMuX2FjdGl2ZSA9XG4gIHRoaXMuX2VuZGVkID1cbiAgdGhpcy5fc3RhcnQgPSAwOyAvLyBpbnNpZGUgYSBzeW5jaHJvbm91cyB0YXNrIGNhbGxiYWNrP1xufVxuXG5RdWV1ZS5wcm90b3R5cGUgPSBxdWV1ZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBRdWV1ZSxcbiAgZGVmZXI6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrXCIpO1xuICAgIGlmICh0aGlzLl9jYWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJkZWZlciBhZnRlciBhd2FpdFwiKTtcbiAgICBpZiAodGhpcy5fZXJyb3IgIT0gbnVsbCkgcmV0dXJuIHRoaXM7XG4gICAgdmFyIHQgPSBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgdC5wdXNoKGNhbGxiYWNrKTtcbiAgICArK3RoaXMuX3dhaXRpbmcsIHRoaXMuX3Rhc2tzLnB1c2godCk7XG4gICAgcG9rZSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgYWJvcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9lcnJvciA9PSBudWxsKSBhYm9ydCh0aGlzLCBuZXcgRXJyb3IoXCJhYm9ydFwiKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGF3YWl0OiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjYWxsYmFja1wiKTtcbiAgICBpZiAodGhpcy5fY2FsbCkgdGhyb3cgbmV3IEVycm9yKFwibXVsdGlwbGUgYXdhaXRcIik7XG4gICAgdGhpcy5fY2FsbCA9IGZ1bmN0aW9uKGVycm9yLCByZXN1bHRzKSB7IGNhbGxiYWNrLmFwcGx5KG51bGwsIFtlcnJvcl0uY29uY2F0KHJlc3VsdHMpKTsgfTtcbiAgICBtYXliZU5vdGlmeSh0aGlzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgYXdhaXRBbGw6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrXCIpO1xuICAgIGlmICh0aGlzLl9jYWxsKSB0aHJvdyBuZXcgRXJyb3IoXCJtdWx0aXBsZSBhd2FpdFwiKTtcbiAgICB0aGlzLl9jYWxsID0gY2FsbGJhY2s7XG4gICAgbWF5YmVOb3RpZnkodGhpcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHBva2UocSkge1xuICBpZiAoIXEuX3N0YXJ0KSB7XG4gICAgdHJ5IHsgc3RhcnQocSk7IH0gLy8gbGV0IHRoZSBjdXJyZW50IHRhc2sgY29tcGxldGVcbiAgICBjYXRjaCAoZSkge1xuICAgICAgaWYgKHEuX3Rhc2tzW3EuX2VuZGVkICsgcS5fYWN0aXZlIC0gMV0pIGFib3J0KHEsIGUpOyAvLyB0YXNrIGVycm9yZWQgc3luY2hyb25vdXNseVxuICAgICAgZWxzZSBpZiAoIXEuX2RhdGEpIHRocm93IGU7IC8vIGF3YWl0IGNhbGxiYWNrIGVycm9yZWQgc3luY2hyb25vdXNseVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdGFydChxKSB7XG4gIHdoaWxlIChxLl9zdGFydCA9IHEuX3dhaXRpbmcgJiYgcS5fYWN0aXZlIDwgcS5fc2l6ZSkge1xuICAgIHZhciBpID0gcS5fZW5kZWQgKyBxLl9hY3RpdmUsXG4gICAgICAgIHQgPSBxLl90YXNrc1tpXSxcbiAgICAgICAgaiA9IHQubGVuZ3RoIC0gMSxcbiAgICAgICAgYyA9IHRbal07XG4gICAgdFtqXSA9IGVuZChxLCBpKTtcbiAgICAtLXEuX3dhaXRpbmcsICsrcS5fYWN0aXZlO1xuICAgIHQgPSBjLmFwcGx5KG51bGwsIHQpO1xuICAgIGlmICghcS5fdGFza3NbaV0pIGNvbnRpbnVlOyAvLyB0YXNrIGZpbmlzaGVkIHN5bmNocm9ub3VzbHlcbiAgICBxLl90YXNrc1tpXSA9IHQgfHwgbm9hYm9ydDtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbmQocSwgaSkge1xuICByZXR1cm4gZnVuY3Rpb24oZSwgcikge1xuICAgIGlmICghcS5fdGFza3NbaV0pIHJldHVybjsgLy8gaWdub3JlIG11bHRpcGxlIGNhbGxiYWNrc1xuICAgIC0tcS5fYWN0aXZlLCArK3EuX2VuZGVkO1xuICAgIHEuX3Rhc2tzW2ldID0gbnVsbDtcbiAgICBpZiAocS5fZXJyb3IgIT0gbnVsbCkgcmV0dXJuOyAvLyBpZ25vcmUgc2Vjb25kYXJ5IGVycm9yc1xuICAgIGlmIChlICE9IG51bGwpIHtcbiAgICAgIGFib3J0KHEsIGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBxLl9kYXRhW2ldID0gcjtcbiAgICAgIGlmIChxLl93YWl0aW5nKSBwb2tlKHEpO1xuICAgICAgZWxzZSBtYXliZU5vdGlmeShxKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGFib3J0KHEsIGUpIHtcbiAgdmFyIGkgPSBxLl90YXNrcy5sZW5ndGgsIHQ7XG4gIHEuX2Vycm9yID0gZTsgLy8gaWdub3JlIGFjdGl2ZSBjYWxsYmFja3NcbiAgcS5fZGF0YSA9IHVuZGVmaW5lZDsgLy8gYWxsb3cgZ2NcbiAgcS5fd2FpdGluZyA9IE5hTjsgLy8gcHJldmVudCBzdGFydGluZ1xuXG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGlmICh0ID0gcS5fdGFza3NbaV0pIHtcbiAgICAgIHEuX3Rhc2tzW2ldID0gbnVsbDtcbiAgICAgIGlmICh0LmFib3J0KSB7XG4gICAgICAgIHRyeSB7IHQuYWJvcnQoKTsgfVxuICAgICAgICBjYXRjaCAoZSkgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHEuX2FjdGl2ZSA9IE5hTjsgLy8gYWxsb3cgbm90aWZpY2F0aW9uXG4gIG1heWJlTm90aWZ5KHEpO1xufVxuXG5mdW5jdGlvbiBtYXliZU5vdGlmeShxKSB7XG4gIGlmICghcS5fYWN0aXZlICYmIHEuX2NhbGwpIHtcbiAgICB2YXIgZCA9IHEuX2RhdGE7XG4gICAgcS5fZGF0YSA9IHVuZGVmaW5lZDsgLy8gYWxsb3cgZ2NcbiAgICBxLl9jYWxsKHEuX2Vycm9yLCBkKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWV1ZShjb25jdXJyZW5jeSkge1xuICBpZiAoY29uY3VycmVuY3kgPT0gbnVsbCkgY29uY3VycmVuY3kgPSBJbmZpbml0eTtcbiAgZWxzZSBpZiAoISgoY29uY3VycmVuY3kgPSArY29uY3VycmVuY3kpID49IDEpKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNvbmN1cnJlbmN5XCIpO1xuICByZXR1cm4gbmV3IFF1ZXVlKGNvbmN1cnJlbmN5KTtcbn1cbiIsImltcG9ydCB7YmlzZWN0fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGUgYXMgaW50ZXJwb2xhdGVWYWx1ZSwgaW50ZXJwb2xhdGVSb3VuZH0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge21hcCwgc2xpY2V9IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyXCI7XG5cbnZhciB1bml0ID0gWzAsIDFdO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVpbnRlcnBvbGF0ZUxpbmVhcihhLCBiKSB7XG4gIHJldHVybiAoYiAtPSAoYSA9ICthKSlcbiAgICAgID8gZnVuY3Rpb24oeCkgeyByZXR1cm4gKHggLSBhKSAvIGI7IH1cbiAgICAgIDogY29uc3RhbnQoYik7XG59XG5cbmZ1bmN0aW9uIGRlaW50ZXJwb2xhdGVDbGFtcChkZWludGVycG9sYXRlKSB7XG4gIHJldHVybiBmdW5jdGlvbihhLCBiKSB7XG4gICAgdmFyIGQgPSBkZWludGVycG9sYXRlKGEgPSArYSwgYiA9ICtiKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4geCA8PSBhID8gMCA6IHggPj0gYiA/IDEgOiBkKHgpOyB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiByZWludGVycG9sYXRlQ2xhbXAocmVpbnRlcnBvbGF0ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciByID0gcmVpbnRlcnBvbGF0ZShhID0gK2EsIGIgPSArYik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHsgcmV0dXJuIHQgPD0gMCA/IGEgOiB0ID49IDEgPyBiIDogcih0KTsgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYmltYXAoZG9tYWluLCByYW5nZSwgZGVpbnRlcnBvbGF0ZSwgcmVpbnRlcnBvbGF0ZSkge1xuICB2YXIgZDAgPSBkb21haW5bMF0sIGQxID0gZG9tYWluWzFdLCByMCA9IHJhbmdlWzBdLCByMSA9IHJhbmdlWzFdO1xuICBpZiAoZDEgPCBkMCkgZDAgPSBkZWludGVycG9sYXRlKGQxLCBkMCksIHIwID0gcmVpbnRlcnBvbGF0ZShyMSwgcjApO1xuICBlbHNlIGQwID0gZGVpbnRlcnBvbGF0ZShkMCwgZDEpLCByMCA9IHJlaW50ZXJwb2xhdGUocjAsIHIxKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHIwKGQwKHgpKTsgfTtcbn1cblxuZnVuY3Rpb24gcG9seW1hcChkb21haW4sIHJhbmdlLCBkZWludGVycG9sYXRlLCByZWludGVycG9sYXRlKSB7XG4gIHZhciBqID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSAtIDEsXG4gICAgICBkID0gbmV3IEFycmF5KGopLFxuICAgICAgciA9IG5ldyBBcnJheShqKSxcbiAgICAgIGkgPSAtMTtcblxuICAvLyBSZXZlcnNlIGRlc2NlbmRpbmcgZG9tYWlucy5cbiAgaWYgKGRvbWFpbltqXSA8IGRvbWFpblswXSkge1xuICAgIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpLnJldmVyc2UoKTtcbiAgICByYW5nZSA9IHJhbmdlLnNsaWNlKCkucmV2ZXJzZSgpO1xuICB9XG5cbiAgd2hpbGUgKCsraSA8IGopIHtcbiAgICBkW2ldID0gZGVpbnRlcnBvbGF0ZShkb21haW5baV0sIGRvbWFpbltpICsgMV0pO1xuICAgIHJbaV0gPSByZWludGVycG9sYXRlKHJhbmdlW2ldLCByYW5nZVtpICsgMV0pO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICB2YXIgaSA9IGJpc2VjdChkb21haW4sIHgsIDEsIGopIC0gMTtcbiAgICByZXR1cm4gcltpXShkW2ldKHgpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkoc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldFxuICAgICAgLmRvbWFpbihzb3VyY2UuZG9tYWluKCkpXG4gICAgICAucmFuZ2Uoc291cmNlLnJhbmdlKCkpXG4gICAgICAuaW50ZXJwb2xhdGUoc291cmNlLmludGVycG9sYXRlKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpO1xufVxuXG4vLyBkZWludGVycG9sYXRlKGEsIGIpKHgpIHRha2VzIGEgZG9tYWluIHZhbHVlIHggaW4gW2EsYl0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHQgaW4gWzAsMV0uXG4vLyByZWludGVycG9sYXRlKGEsIGIpKHQpIHRha2VzIGEgcGFyYW1ldGVyIHQgaW4gWzAsMV0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgZG9tYWluIHZhbHVlIHggaW4gW2EsYl0uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb250aW51b3VzKGRlaW50ZXJwb2xhdGUsIHJlaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGRvbWFpbiA9IHVuaXQsXG4gICAgICByYW5nZSA9IHVuaXQsXG4gICAgICBpbnRlcnBvbGF0ZSA9IGludGVycG9sYXRlVmFsdWUsXG4gICAgICBjbGFtcCA9IGZhbHNlLFxuICAgICAgcGllY2V3aXNlLFxuICAgICAgb3V0cHV0LFxuICAgICAgaW5wdXQ7XG5cbiAgZnVuY3Rpb24gcmVzY2FsZSgpIHtcbiAgICBwaWVjZXdpc2UgPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcbiAgICBvdXRwdXQgPSBpbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiAob3V0cHV0IHx8IChvdXRwdXQgPSBwaWVjZXdpc2UoZG9tYWluLCByYW5nZSwgY2xhbXAgPyBkZWludGVycG9sYXRlQ2xhbXAoZGVpbnRlcnBvbGF0ZSkgOiBkZWludGVycG9sYXRlLCBpbnRlcnBvbGF0ZSkpKSgreCk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIChpbnB1dCB8fCAoaW5wdXQgPSBwaWVjZXdpc2UocmFuZ2UsIGRvbWFpbiwgZGVpbnRlcnBvbGF0ZUxpbmVhciwgY2xhbXAgPyByZWludGVycG9sYXRlQ2xhbXAocmVpbnRlcnBvbGF0ZSkgOiByZWludGVycG9sYXRlKSkpKCt5KTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gbWFwLmNhbGwoXywgbnVtYmVyKSwgcmVzY2FsZSgpKSA6IGRvbWFpbi5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmdlID0gc2xpY2UuY2FsbChfKSwgcmVzY2FsZSgpKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2VSb3VuZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gcmFuZ2UgPSBzbGljZS5jYWxsKF8pLCBpbnRlcnBvbGF0ZSA9IGludGVycG9sYXRlUm91bmQsIHJlc2NhbGUoKTtcbiAgfTtcblxuICBzY2FsZS5jbGFtcCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjbGFtcCA9ICEhXywgcmVzY2FsZSgpKSA6IGNsYW1wO1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRlID0gXywgcmVzY2FsZSgpKSA6IGludGVycG9sYXRlO1xuICB9O1xuXG4gIHJldHVybiByZXNjYWxlKCk7XG59XG4iLCJpbXBvcnQge3RpY2tzLCB0aWNrSW5jcmVtZW50fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVOdW1iZXIgYXMgcmVpbnRlcnBvbGF0ZX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge2RlZmF1bHQgYXMgY29udGludW91cywgY29weSwgZGVpbnRlcnBvbGF0ZUxpbmVhciBhcyBkZWludGVycG9sYXRlfSBmcm9tIFwiLi9jb250aW51b3VzXCI7XG5pbXBvcnQgdGlja0Zvcm1hdCBmcm9tIFwiLi90aWNrRm9ybWF0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXJpc2goc2NhbGUpIHtcbiAgdmFyIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICByZXR1cm4gdGlja0Zvcm1hdChkb21haW4oKSwgY291bnQsIHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG5cbiAgICB2YXIgZCA9IGRvbWFpbigpLFxuICAgICAgICBpMCA9IDAsXG4gICAgICAgIGkxID0gZC5sZW5ndGggLSAxLFxuICAgICAgICBzdGFydCA9IGRbaTBdLFxuICAgICAgICBzdG9wID0gZFtpMV0sXG4gICAgICAgIHN0ZXA7XG5cbiAgICBpZiAoc3RvcCA8IHN0YXJ0KSB7XG4gICAgICBzdGVwID0gc3RhcnQsIHN0YXJ0ID0gc3RvcCwgc3RvcCA9IHN0ZXA7XG4gICAgICBzdGVwID0gaTAsIGkwID0gaTEsIGkxID0gc3RlcDtcbiAgICB9XG5cbiAgICBzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICBzdGFydCA9IE1hdGguZmxvb3Ioc3RhcnQgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBzdG9wID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIHN0YXJ0ID0gTWF0aC5jZWlsKHN0YXJ0ICogc3RlcCkgLyBzdGVwO1xuICAgICAgc3RvcCA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICBkW2kwXSA9IE1hdGguZmxvb3Ioc3RhcnQgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICBkW2kxXSA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgZG9tYWluKGQpO1xuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIGRbaTBdID0gTWF0aC5jZWlsKHN0YXJ0ICogc3RlcCkgLyBzdGVwO1xuICAgICAgZFtpMV0gPSBNYXRoLmZsb29yKHN0b3AgKiBzdGVwKSAvIHN0ZXA7XG4gICAgICBkb21haW4oZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGluZWFyKCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKGRlaW50ZXJwb2xhdGUsIHJlaW50ZXJwb2xhdGUpO1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgbGluZWFyKCkpO1xuICB9O1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwidmFyIHQwID0gbmV3IERhdGUsXG4gICAgdDEgPSBuZXcgRGF0ZTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbmV3SW50ZXJ2YWwoZmxvb3JpLCBvZmZzZXRpLCBjb3VudCwgZmllbGQpIHtcblxuICBmdW5jdGlvbiBpbnRlcnZhbChkYXRlKSB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcbiAgfVxuXG4gIGludGVydmFsLmZsb29yID0gaW50ZXJ2YWw7XG5cbiAgaW50ZXJ2YWwuY2VpbCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBuZXcgRGF0ZShkYXRlIC0gMSkpLCBvZmZzZXRpKGRhdGUsIDEpLCBmbG9vcmkoZGF0ZSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucm91bmQgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgdmFyIGQwID0gaW50ZXJ2YWwoZGF0ZSksXG4gICAgICAgIGQxID0gaW50ZXJ2YWwuY2VpbChkYXRlKTtcbiAgICByZXR1cm4gZGF0ZSAtIGQwIDwgZDEgLSBkYXRlID8gZDAgOiBkMTtcbiAgfTtcblxuICBpbnRlcnZhbC5vZmZzZXQgPSBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgcmV0dXJuIG9mZnNldGkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSwgc3RlcCA9PSBudWxsID8gMSA6IE1hdGguZmxvb3Ioc3RlcCkpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLnJhbmdlID0gZnVuY3Rpb24oc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICB2YXIgcmFuZ2UgPSBbXTtcbiAgICBzdGFydCA9IGludGVydmFsLmNlaWwoc3RhcnQpO1xuICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKTtcbiAgICBpZiAoIShzdGFydCA8IHN0b3ApIHx8ICEoc3RlcCA+IDApKSByZXR1cm4gcmFuZ2U7IC8vIGFsc28gaGFuZGxlcyBJbnZhbGlkIERhdGVcbiAgICBkbyByYW5nZS5wdXNoKG5ldyBEYXRlKCtzdGFydCkpOyB3aGlsZSAob2Zmc2V0aShzdGFydCwgc3RlcCksIGZsb29yaShzdGFydCksIHN0YXJ0IDwgc3RvcClcbiAgICByZXR1cm4gcmFuZ2U7XG4gIH07XG5cbiAgaW50ZXJ2YWwuZmlsdGVyID0gZnVuY3Rpb24odGVzdCkge1xuICAgIHJldHVybiBuZXdJbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgICBpZiAoZGF0ZSA+PSBkYXRlKSB3aGlsZSAoZmxvb3JpKGRhdGUpLCAhdGVzdChkYXRlKSkgZGF0ZS5zZXRUaW1lKGRhdGUgLSAxKTtcbiAgICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgICBpZiAoZGF0ZSA+PSBkYXRlKSB3aGlsZSAoLS1zdGVwID49IDApIHdoaWxlIChvZmZzZXRpKGRhdGUsIDEpLCAhdGVzdChkYXRlKSkge30gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChjb3VudCkge1xuICAgIGludGVydmFsLmNvdW50ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgdDAuc2V0VGltZSgrc3RhcnQpLCB0MS5zZXRUaW1lKCtlbmQpO1xuICAgICAgZmxvb3JpKHQwKSwgZmxvb3JpKHQxKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGNvdW50KHQwLCB0MSkpO1xuICAgIH07XG5cbiAgICBpbnRlcnZhbC5ldmVyeSA9IGZ1bmN0aW9uKHN0ZXApIHtcbiAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgICAgcmV0dXJuICFpc0Zpbml0ZShzdGVwKSB8fCAhKHN0ZXAgPiAwKSA/IG51bGxcbiAgICAgICAgICA6ICEoc3RlcCA+IDEpID8gaW50ZXJ2YWxcbiAgICAgICAgICA6IGludGVydmFsLmZpbHRlcihmaWVsZFxuICAgICAgICAgICAgICA/IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZpZWxkKGQpICUgc3RlcCA9PT0gMDsgfVxuICAgICAgICAgICAgICA6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGludGVydmFsLmNvdW50KDAsIGQpICUgc3RlcCA9PT0gMDsgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBpbnRlcnZhbDtcbn1cbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG5mdW5jdGlvbiB3ZWVrZGF5KGkpIHtcbiAgcmV0dXJuIGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwICogNyk7XG4gIH0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0IC0gKGVuZC5nZXRUaW1lem9uZU9mZnNldCgpIC0gc3RhcnQuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiBkdXJhdGlvbk1pbnV0ZSkgLyBkdXJhdGlvbldlZWs7XG4gIH0pO1xufVxuXG5leHBvcnQgdmFyIHN1bmRheSA9IHdlZWtkYXkoMCk7XG5leHBvcnQgdmFyIG1vbmRheSA9IHdlZWtkYXkoMSk7XG5leHBvcnQgdmFyIHR1ZXNkYXkgPSB3ZWVrZGF5KDIpO1xuZXhwb3J0IHZhciB3ZWRuZXNkYXkgPSB3ZWVrZGF5KDMpO1xuZXhwb3J0IHZhciB0aHVyc2RheSA9IHdlZWtkYXkoNCk7XG5leHBvcnQgdmFyIGZyaWRheSA9IHdlZWtkYXkoNSk7XG5leHBvcnQgdmFyIHNhdHVyZGF5ID0gd2Vla2RheSg2KTtcblxuZXhwb3J0IHZhciBzdW5kYXlzID0gc3VuZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBtb25kYXlzID0gbW9uZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB0dWVzZGF5cyA9IHR1ZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHdlZG5lc2RheXMgPSB3ZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHRodXJzZGF5cyA9IHRodXJzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBmcmlkYXlzID0gZnJpZGF5LnJhbmdlO1xuZXhwb3J0IHZhciBzYXR1cmRheXMgPSBzYXR1cmRheS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuaW1wb3J0IHtkdXJhdGlvbldlZWt9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG5cbmZ1bmN0aW9uIHV0Y1dlZWtkYXkoaSkge1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSAtIChkYXRlLmdldFVUQ0RheSgpICsgNyAtIGkpICUgNyk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25XZWVrO1xuICB9KTtcbn1cblxuZXhwb3J0IHZhciB1dGNTdW5kYXkgPSB1dGNXZWVrZGF5KDApO1xuZXhwb3J0IHZhciB1dGNNb25kYXkgPSB1dGNXZWVrZGF5KDEpO1xuZXhwb3J0IHZhciB1dGNUdWVzZGF5ID0gdXRjV2Vla2RheSgyKTtcbmV4cG9ydCB2YXIgdXRjV2VkbmVzZGF5ID0gdXRjV2Vla2RheSgzKTtcbmV4cG9ydCB2YXIgdXRjVGh1cnNkYXkgPSB1dGNXZWVrZGF5KDQpO1xuZXhwb3J0IHZhciB1dGNGcmlkYXkgPSB1dGNXZWVrZGF5KDUpO1xuZXhwb3J0IHZhciB1dGNTYXR1cmRheSA9IHV0Y1dlZWtkYXkoNik7XG5cbmV4cG9ydCB2YXIgdXRjU3VuZGF5cyA9IHV0Y1N1bmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjTW9uZGF5cyA9IHV0Y01vbmRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjVHVlc2RheXMgPSB1dGNUdWVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNXZWRuZXNkYXlzID0gdXRjV2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNUaHVyc2RheXMgPSB1dGNUaHVyc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjRnJpZGF5cyA9IHV0Y0ZyaWRheS5yYW5nZTtcbmV4cG9ydCB2YXIgdXRjU2F0dXJkYXlzID0gdXRjU2F0dXJkYXkucmFuZ2U7XG4iLCJpbXBvcnQge3RpbWVEYXksIHRpbWVTdW5kYXksIHRpbWVNb25kYXksIHRpbWVZZWFyLCB1dGNEYXksIHV0Y1N1bmRheSwgdXRjTW9uZGF5LCB1dGNZZWFyfSBmcm9tIFwiZDMtdGltZVwiO1xuXG5mdW5jdGlvbiBsb2NhbERhdGUoZCkge1xuICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XG4gICAgZGF0ZS5zZXRGdWxsWWVhcihkLnkpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShkLnksIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpO1xufVxuXG5mdW5jdGlvbiB1dGNEYXRlKGQpIHtcbiAgaWYgKDAgPD0gZC55ICYmIGQueSA8IDEwMCkge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoLTEsIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpKTtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGQueSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xufVxuXG5mdW5jdGlvbiBuZXdZZWFyKHkpIHtcbiAgcmV0dXJuIHt5OiB5LCBtOiAwLCBkOiAxLCBIOiAwLCBNOiAwLCBTOiAwLCBMOiAwfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0TG9jYWxlKGxvY2FsZSkge1xuICB2YXIgbG9jYWxlX2RhdGVUaW1lID0gbG9jYWxlLmRhdGVUaW1lLFxuICAgICAgbG9jYWxlX2RhdGUgPSBsb2NhbGUuZGF0ZSxcbiAgICAgIGxvY2FsZV90aW1lID0gbG9jYWxlLnRpbWUsXG4gICAgICBsb2NhbGVfcGVyaW9kcyA9IGxvY2FsZS5wZXJpb2RzLFxuICAgICAgbG9jYWxlX3dlZWtkYXlzID0gbG9jYWxlLmRheXMsXG4gICAgICBsb2NhbGVfc2hvcnRXZWVrZGF5cyA9IGxvY2FsZS5zaG9ydERheXMsXG4gICAgICBsb2NhbGVfbW9udGhzID0gbG9jYWxlLm1vbnRocyxcbiAgICAgIGxvY2FsZV9zaG9ydE1vbnRocyA9IGxvY2FsZS5zaG9ydE1vbnRocztcblxuICB2YXIgcGVyaW9kUmUgPSBmb3JtYXRSZShsb2NhbGVfcGVyaW9kcyksXG4gICAgICBwZXJpb2RMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3BlcmlvZHMpLFxuICAgICAgd2Vla2RheVJlID0gZm9ybWF0UmUobG9jYWxlX3dlZWtkYXlzKSxcbiAgICAgIHdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3dlZWtkYXlzKSxcbiAgICAgIHNob3J0V2Vla2RheVJlID0gZm9ybWF0UmUobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxuICAgICAgc2hvcnRXZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcbiAgICAgIG1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfbW9udGhzKSxcbiAgICAgIG1vbnRoTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9tb250aHMpLFxuICAgICAgc2hvcnRNb250aFJlID0gZm9ybWF0UmUobG9jYWxlX3Nob3J0TW9udGhzKSxcbiAgICAgIHNob3J0TW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0TW9udGhzKTtcblxuICB2YXIgZm9ybWF0cyA9IHtcbiAgICBcImFcIjogZm9ybWF0U2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBmb3JtYXRXZWVrZGF5LFxuICAgIFwiYlwiOiBmb3JtYXRTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBmb3JtYXRNb250aCxcbiAgICBcImNcIjogbnVsbCxcbiAgICBcImRcIjogZm9ybWF0RGF5T2ZNb250aCxcbiAgICBcImVcIjogZm9ybWF0RGF5T2ZNb250aCxcbiAgICBcIkhcIjogZm9ybWF0SG91cjI0LFxuICAgIFwiSVwiOiBmb3JtYXRIb3VyMTIsXG4gICAgXCJqXCI6IGZvcm1hdERheU9mWWVhcixcbiAgICBcIkxcIjogZm9ybWF0TWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBmb3JtYXRNb250aE51bWJlcixcbiAgICBcIk1cIjogZm9ybWF0TWludXRlcyxcbiAgICBcInBcIjogZm9ybWF0UGVyaW9kLFxuICAgIFwiU1wiOiBmb3JtYXRTZWNvbmRzLFxuICAgIFwiVVwiOiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwid1wiOiBmb3JtYXRXZWVrZGF5TnVtYmVyLFxuICAgIFwiV1wiOiBmb3JtYXRXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0Wm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgdXRjRm9ybWF0cyA9IHtcbiAgICBcImFcIjogZm9ybWF0VVRDU2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBmb3JtYXRVVENXZWVrZGF5LFxuICAgIFwiYlwiOiBmb3JtYXRVVENTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBmb3JtYXRVVENNb250aCxcbiAgICBcImNcIjogbnVsbCxcbiAgICBcImRcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImVcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcIkhcIjogZm9ybWF0VVRDSG91cjI0LFxuICAgIFwiSVwiOiBmb3JtYXRVVENIb3VyMTIsXG4gICAgXCJqXCI6IGZvcm1hdFVUQ0RheU9mWWVhcixcbiAgICBcIkxcIjogZm9ybWF0VVRDTWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBmb3JtYXRVVENNb250aE51bWJlcixcbiAgICBcIk1cIjogZm9ybWF0VVRDTWludXRlcyxcbiAgICBcInBcIjogZm9ybWF0VVRDUGVyaW9kLFxuICAgIFwiU1wiOiBmb3JtYXRVVENTZWNvbmRzLFxuICAgIFwiVVwiOiBmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwid1wiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyLFxuICAgIFwiV1wiOiBmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRVVENZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRVVENGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0VVRDWm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgcGFyc2VzID0ge1xuICAgIFwiYVwiOiBwYXJzZVNob3J0V2Vla2RheSxcbiAgICBcIkFcIjogcGFyc2VXZWVrZGF5LFxuICAgIFwiYlwiOiBwYXJzZVNob3J0TW9udGgsXG4gICAgXCJCXCI6IHBhcnNlTW9udGgsXG4gICAgXCJjXCI6IHBhcnNlTG9jYWxlRGF0ZVRpbWUsXG4gICAgXCJkXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcImVcIjogcGFyc2VEYXlPZk1vbnRoLFxuICAgIFwiSFwiOiBwYXJzZUhvdXIyNCxcbiAgICBcIklcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJqXCI6IHBhcnNlRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBwYXJzZU1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogcGFyc2VNb250aE51bWJlcixcbiAgICBcIk1cIjogcGFyc2VNaW51dGVzLFxuICAgIFwicFwiOiBwYXJzZVBlcmlvZCxcbiAgICBcIlNcIjogcGFyc2VTZWNvbmRzLFxuICAgIFwiVVwiOiBwYXJzZVdlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJ3XCI6IHBhcnNlV2Vla2RheU51bWJlcixcbiAgICBcIldcIjogcGFyc2VXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBwYXJzZUxvY2FsZURhdGUsXG4gICAgXCJYXCI6IHBhcnNlTG9jYWxlVGltZSxcbiAgICBcInlcIjogcGFyc2VZZWFyLFxuICAgIFwiWVwiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiWlwiOiBwYXJzZVpvbmUsXG4gICAgXCIlXCI6IHBhcnNlTGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICAvLyBUaGVzZSByZWN1cnNpdmUgZGlyZWN0aXZlIGRlZmluaXRpb25zIG11c3QgYmUgZGVmZXJyZWQuXG4gIGZvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIGZvcm1hdHMpO1xuICB1dGNGb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCB1dGNGb3JtYXRzKTtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyLCBmb3JtYXRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBbXSxcbiAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgICAgYyxcbiAgICAgICAgICBwYWQsXG4gICAgICAgICAgZm9ybWF0O1xuXG4gICAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSk7XG5cbiAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIuY2hhckNvZGVBdChpKSA9PT0gMzcpIHtcbiAgICAgICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgICAgIGlmICgocGFkID0gcGFkc1tjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpXSkgIT0gbnVsbCkgYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKTtcbiAgICAgICAgICBlbHNlIHBhZCA9IGMgPT09IFwiZVwiID8gXCIgXCIgOiBcIjBcIjtcbiAgICAgICAgICBpZiAoZm9ybWF0ID0gZm9ybWF0c1tjXSkgYyA9IGZvcm1hdChkYXRlLCBwYWQpO1xuICAgICAgICAgIHN0cmluZy5wdXNoKGMpO1xuICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgcmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBuZXdQYXJzZShzcGVjaWZpZXIsIG5ld0RhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICB2YXIgZCA9IG5ld1llYXIoMTkwMCksXG4gICAgICAgICAgaSA9IHBhcnNlU3BlY2lmaWVyKGQsIHNwZWNpZmllciwgc3RyaW5nICs9IFwiXCIsIDApO1xuICAgICAgaWYgKGkgIT0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIC8vIFRoZSBhbS1wbSBmbGFnIGlzIDAgZm9yIEFNLCBhbmQgMSBmb3IgUE0uXG4gICAgICBpZiAoXCJwXCIgaW4gZCkgZC5IID0gZC5IICUgMTIgKyBkLnAgKiAxMjtcblxuICAgICAgLy8gQ29udmVydCBkYXktb2Ytd2VlayBhbmQgd2Vlay1vZi15ZWFyIHRvIGRheS1vZi15ZWFyLlxuICAgICAgaWYgKFwiV1wiIGluIGQgfHwgXCJVXCIgaW4gZCkge1xuICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gXCJXXCIgaW4gZCA/IDEgOiAwO1xuICAgICAgICB2YXIgZGF5ID0gXCJaXCIgaW4gZCA/IHV0Y0RhdGUobmV3WWVhcihkLnkpKS5nZXRVVENEYXkoKSA6IG5ld0RhdGUobmV3WWVhcihkLnkpKS5nZXREYXkoKTtcbiAgICAgICAgZC5tID0gMDtcbiAgICAgICAgZC5kID0gXCJXXCIgaW4gZCA/IChkLncgKyA2KSAlIDcgKyBkLlcgKiA3IC0gKGRheSArIDUpICUgNyA6IGQudyArIGQuVSAqIDcgLSAoZGF5ICsgNikgJSA3O1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBhIHRpbWUgem9uZSBpcyBzcGVjaWZpZWQsIGFsbCBmaWVsZHMgYXJlIGludGVycHJldGVkIGFzIFVUQyBhbmQgdGhlblxuICAgICAgLy8gb2Zmc2V0IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHRpbWUgem9uZS5cbiAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgIGQuSCArPSBkLlogLyAxMDAgfCAwO1xuICAgICAgICBkLk0gKz0gZC5aICUgMTAwO1xuICAgICAgICByZXR1cm4gdXRjRGF0ZShkKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3RoZXJ3aXNlLCBhbGwgZmllbGRzIGFyZSBpbiBsb2NhbCB0aW1lLlxuICAgICAgcmV0dXJuIG5ld0RhdGUoZCk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU3BlY2lmaWVyKGQsIHNwZWNpZmllciwgc3RyaW5nLCBqKSB7XG4gICAgdmFyIGkgPSAwLFxuICAgICAgICBuID0gc3BlY2lmaWVyLmxlbmd0aCxcbiAgICAgICAgbSA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgIGMsXG4gICAgICAgIHBhcnNlO1xuXG4gICAgd2hpbGUgKGkgPCBuKSB7XG4gICAgICBpZiAoaiA+PSBtKSByZXR1cm4gLTE7XG4gICAgICBjID0gc3BlY2lmaWVyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgIGlmIChjID09PSAzNykge1xuICAgICAgICBjID0gc3BlY2lmaWVyLmNoYXJBdChpKyspO1xuICAgICAgICBwYXJzZSA9IHBhcnNlc1tjIGluIHBhZHMgPyBzcGVjaWZpZXIuY2hhckF0KGkrKykgOiBjXTtcbiAgICAgICAgaWYgKCFwYXJzZSB8fCAoKGogPSBwYXJzZShkLCBzdHJpbmcsIGopKSA8IDApKSByZXR1cm4gLTE7XG4gICAgICB9IGVsc2UgaWYgKGMgIT0gc3RyaW5nLmNoYXJDb2RlQXQoaisrKSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGo7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVBlcmlvZChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHBlcmlvZFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLnAgPSBwZXJpb2RMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydFdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBzaG9ydFdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC53ID0gc2hvcnRXZWVrZGF5TG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC53ID0gd2Vla2RheUxvb2t1cFtuWzBdLnRvTG93ZXJDYXNlKCldLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNob3J0TW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBzaG9ydE1vbnRoUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQubSA9IHNob3J0TW9udGhMb29rdXBbblswXS50b0xvd2VyQ2FzZSgpXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IG1vbnRoUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQubSA9IG1vbnRoTG9va3VwW25bMF0udG9Mb3dlckNhc2UoKV0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlRGF0ZVRpbWUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlVGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlRGF0ZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX2RhdGUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZVRpbWUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV90aW1lLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0U2hvcnRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0V2Vla2RheXNbZC5nZXREYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3dlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0U2hvcnRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydE1vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfbW9udGhzW2QuZ2V0TW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQZXJpb2QoZCkge1xuICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0SG91cnMoKSA+PSAxMildO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDU2hvcnRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0V2Vla2RheXNbZC5nZXRVVENEYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3dlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDU2hvcnRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydE1vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDTW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfbW9udGhzW2QuZ2V0VVRDTW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENQZXJpb2QoZCkge1xuICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0VVRDSG91cnMoKSA+PSAxMildO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoc3BlY2lmaWVyICs9IFwiXCIsIGZvcm1hdHMpO1xuICAgICAgZi50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIGY7XG4gICAgfSxcbiAgICBwYXJzZTogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciArPSBcIlwiLCBsb2NhbERhdGUpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfSxcbiAgICB1dGNGb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoc3BlY2lmaWVyICs9IFwiXCIsIHV0Y0Zvcm1hdHMpO1xuICAgICAgZi50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIGY7XG4gICAgfSxcbiAgICB1dGNQYXJzZTogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciwgdXRjRGF0ZSk7XG4gICAgICBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gIH07XG59XG5cbnZhciBwYWRzID0ge1wiLVwiOiBcIlwiLCBcIl9cIjogXCIgXCIsIFwiMFwiOiBcIjBcIn0sXG4gICAgbnVtYmVyUmUgPSAvXlxccypcXGQrLywgLy8gbm90ZTogaWdub3JlcyBuZXh0IGRpcmVjdGl2ZVxuICAgIHBlcmNlbnRSZSA9IC9eJS8sXG4gICAgcmVxdW90ZVJlID0gL1tcXFxcXFxeXFwkXFwqXFwrXFw/XFx8XFxbXFxdXFwoXFwpXFwuXFx7XFx9XS9nO1xuXG5mdW5jdGlvbiBwYWQodmFsdWUsIGZpbGwsIHdpZHRoKSB7XG4gIHZhciBzaWduID0gdmFsdWUgPCAwID8gXCItXCIgOiBcIlwiLFxuICAgICAgc3RyaW5nID0gKHNpZ24gPyAtdmFsdWUgOiB2YWx1ZSkgKyBcIlwiLFxuICAgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgcmV0dXJuIHNpZ24gKyAobGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpICsgc3RyaW5nIDogc3RyaW5nKTtcbn1cblxuZnVuY3Rpb24gcmVxdW90ZShzKSB7XG4gIHJldHVybiBzLnJlcGxhY2UocmVxdW90ZVJlLCBcIlxcXFwkJlwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UmUobmFtZXMpIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKD86XCIgKyBuYW1lcy5tYXAocmVxdW90ZSkuam9pbihcInxcIikgKyBcIilcIiwgXCJpXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRMb29rdXAobmFtZXMpIHtcbiAgdmFyIG1hcCA9IHt9LCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBtYXBbbmFtZXNbaV0udG9Mb3dlckNhc2UoKV0gPSBpO1xuICByZXR1cm4gbWFwO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtkYXlOdW1iZXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyAoZC53ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5VID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVyTW9uZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5XID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VGdWxsWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgNCkpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC55ID0gK25bMF0gKyAoK25bMF0gPiA2OCA/IDE5MDAgOiAyMDAwKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVpvbmUoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gL14oWil8KFsrLV1cXGRcXGQpKD86XFw6PyhcXGRcXGQpKT8vLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuWiA9IG5bMV0gPyAwIDogLShuWzJdICsgKG5bM10gfHwgXCIwMFwiKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNb250aE51bWJlcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLm0gPSBuWzBdIC0gMSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mTW9udGgoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXlPZlllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgcmV0dXJuIG4gPyAoZC5tID0gMCwgZC5kID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VIb3VyMjQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5IID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaW51dGVzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuTSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLkwgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUxpdGVyYWxQZXJjZW50KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IHBlcmNlbnRSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IGkgKyBuWzBdLmxlbmd0aCA6IC0xO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXlPZk1vbnRoKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldERhdGUoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhvdXIyNChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRIb3VycygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG91cjEyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEhvdXJzKCkgJSAxMiB8fCAxMiwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheU9mWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoMSArIHRpbWVEYXkuY291bnQodGltZVllYXIoZCksIGQpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWlsbGlzZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1pbGxpc2Vjb25kcygpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0U2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodGltZVN1bmRheS5jb3VudCh0aW1lWWVhcihkKSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrZGF5TnVtYmVyKGQpIHtcbiAgcmV0dXJuIGQuZ2V0RGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHRpbWVNb25kYXkuY291bnQodGltZVllYXIoZCksIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Wm9uZShkKSB7XG4gIHZhciB6ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4gKHogPiAwID8gXCItXCIgOiAoeiAqPSAtMSwgXCIrXCIpKVxuICAgICAgKyBwYWQoeiAvIDYwIHwgMCwgXCIwXCIsIDIpXG4gICAgICArIHBhZCh6ICUgNjAsIFwiMFwiLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENEYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB1dGNEYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNb250aE51bWJlcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENNb250aCgpICsgMSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01pbnV0ZXMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWludXRlcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDU2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENTZWNvbmRzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh1dGNTdW5kYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyKGQpIHtcbiAgcmV0dXJuIGQuZ2V0VVRDRGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y01vbmRheS5jb3VudCh1dGNZZWFyKGQpLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1llYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0Z1bGxZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1pvbmUoKSB7XG4gIHJldHVybiBcIiswMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExpdGVyYWxQZXJjZW50KCkge1xuICByZXR1cm4gXCIlXCI7XG59XG4iLCJpbXBvcnQge3V0Y0Zvcm1hdH0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuXG5leHBvcnQgdmFyIGlzb1NwZWNpZmllciA9IFwiJVktJW0tJWRUJUg6JU06JVMuJUxaXCI7XG5cbmZ1bmN0aW9uIGZvcm1hdElzb05hdGl2ZShkYXRlKSB7XG4gIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCk7XG59XG5cbnZhciBmb3JtYXRJc28gPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ1xuICAgID8gZm9ybWF0SXNvTmF0aXZlXG4gICAgOiB1dGNGb3JtYXQoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0SXNvO1xuIiwiaW1wb3J0IHtpc29TcGVjaWZpZXJ9IGZyb20gXCIuL2lzb0Zvcm1hdFwiO1xuaW1wb3J0IHt1dGNQYXJzZX0gZnJvbSBcIi4vZGVmYXVsdExvY2FsZVwiO1xuXG5mdW5jdGlvbiBwYXJzZUlzb05hdGl2ZShzdHJpbmcpIHtcbiAgdmFyIGRhdGUgPSBuZXcgRGF0ZShzdHJpbmcpO1xuICByZXR1cm4gaXNOYU4oZGF0ZSkgPyBudWxsIDogZGF0ZTtcbn1cblxudmFyIHBhcnNlSXNvID0gK25ldyBEYXRlKFwiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaXCIpXG4gICAgPyBwYXJzZUlzb05hdGl2ZVxuICAgIDogdXRjUGFyc2UoaXNvU3BlY2lmaWVyKTtcblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VJc287XG4iLCJpbXBvcnQge2Jpc2VjdG9yLCB0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2ludGVycG9sYXRlTnVtYmVyIGFzIHJlaW50ZXJwb2xhdGV9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHt0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lV2VlaywgdGltZURheSwgdGltZUhvdXIsIHRpbWVNaW51dGUsIHRpbWVTZWNvbmQsIHRpbWVNaWxsaXNlY29uZH0gZnJvbSBcImQzLXRpbWVcIjtcbmltcG9ydCB7dGltZUZvcm1hdH0gZnJvbSBcImQzLXRpbWUtZm9ybWF0XCI7XG5pbXBvcnQge21hcH0gZnJvbSBcIi4vYXJyYXlcIjtcbmltcG9ydCB7ZGVmYXVsdCBhcyBjb250aW51b3VzLCBjb3B5LCBkZWludGVycG9sYXRlTGluZWFyIGFzIGRlaW50ZXJwb2xhdGV9IGZyb20gXCIuL2NvbnRpbnVvdXNcIjtcbmltcG9ydCBuaWNlIGZyb20gXCIuL25pY2VcIjtcblxudmFyIGR1cmF0aW9uU2Vjb25kID0gMTAwMCxcbiAgICBkdXJhdGlvbk1pbnV0ZSA9IGR1cmF0aW9uU2Vjb25kICogNjAsXG4gICAgZHVyYXRpb25Ib3VyID0gZHVyYXRpb25NaW51dGUgKiA2MCxcbiAgICBkdXJhdGlvbkRheSA9IGR1cmF0aW9uSG91ciAqIDI0LFxuICAgIGR1cmF0aW9uV2VlayA9IGR1cmF0aW9uRGF5ICogNyxcbiAgICBkdXJhdGlvbk1vbnRoID0gZHVyYXRpb25EYXkgKiAzMCxcbiAgICBkdXJhdGlvblllYXIgPSBkdXJhdGlvbkRheSAqIDM2NTtcblxuZnVuY3Rpb24gZGF0ZSh0KSB7XG4gIHJldHVybiBuZXcgRGF0ZSh0KTtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlID8gK3QgOiArbmV3IERhdGUoK3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsZW5kYXIoeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kLCBmb3JtYXQpIHtcbiAgdmFyIHNjYWxlID0gY29udGludW91cyhkZWludGVycG9sYXRlLCByZWludGVycG9sYXRlKSxcbiAgICAgIGludmVydCA9IHNjYWxlLmludmVydCxcbiAgICAgIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICB2YXIgZm9ybWF0TWlsbGlzZWNvbmQgPSBmb3JtYXQoXCIuJUxcIiksXG4gICAgICBmb3JtYXRTZWNvbmQgPSBmb3JtYXQoXCI6JVNcIiksXG4gICAgICBmb3JtYXRNaW51dGUgPSBmb3JtYXQoXCIlSTolTVwiKSxcbiAgICAgIGZvcm1hdEhvdXIgPSBmb3JtYXQoXCIlSSAlcFwiKSxcbiAgICAgIGZvcm1hdERheSA9IGZvcm1hdChcIiVhICVkXCIpLFxuICAgICAgZm9ybWF0V2VlayA9IGZvcm1hdChcIiViICVkXCIpLFxuICAgICAgZm9ybWF0TW9udGggPSBmb3JtYXQoXCIlQlwiKSxcbiAgICAgIGZvcm1hdFllYXIgPSBmb3JtYXQoXCIlWVwiKTtcblxuICB2YXIgdGlja0ludGVydmFscyA9IFtcbiAgICBbc2Vjb25kLCAgMSwgICAgICBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgIDUsICA1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsIDE1LCAxNSAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAzMCwgMzAgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW21pbnV0ZSwgIDEsICAgICAgZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsICA1LCAgNSAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAxNSwgMTUgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgMzAsIDMwICogZHVyYXRpb25NaW51dGVdLFxuICAgIFsgIGhvdXIsICAxLCAgICAgIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAgMywgIDMgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgIDYsICA2ICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsIDEyLCAxMiAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICAgZGF5LCAgMSwgICAgICBkdXJhdGlvbkRheSAgIF0sXG4gICAgWyAgIGRheSwgIDIsICAyICogZHVyYXRpb25EYXkgICBdLFxuICAgIFsgIHdlZWssICAxLCAgICAgIGR1cmF0aW9uV2VlayAgXSxcbiAgICBbIG1vbnRoLCAgMSwgICAgICBkdXJhdGlvbk1vbnRoIF0sXG4gICAgWyBtb250aCwgIDMsICAzICogZHVyYXRpb25Nb250aCBdLFxuICAgIFsgIHllYXIsICAxLCAgICAgIGR1cmF0aW9uWWVhciAgXVxuICBdO1xuXG4gIGZ1bmN0aW9uIHRpY2tGb3JtYXQoZGF0ZSkge1xuICAgIHJldHVybiAoc2Vjb25kKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdE1pbGxpc2Vjb25kXG4gICAgICAgIDogbWludXRlKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdFNlY29uZFxuICAgICAgICA6IGhvdXIoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TWludXRlXG4gICAgICAgIDogZGF5KGRhdGUpIDwgZGF0ZSA/IGZvcm1hdEhvdXJcbiAgICAgICAgOiBtb250aChkYXRlKSA8IGRhdGUgPyAod2VlayhkYXRlKSA8IGRhdGUgPyBmb3JtYXREYXkgOiBmb3JtYXRXZWVrKVxuICAgICAgICA6IHllYXIoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TW9udGhcbiAgICAgICAgOiBmb3JtYXRZZWFyKShkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2tJbnRlcnZhbChpbnRlcnZhbCwgc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgICBpZiAoaW50ZXJ2YWwgPT0gbnVsbCkgaW50ZXJ2YWwgPSAxMDtcblxuICAgIC8vIElmIGEgZGVzaXJlZCB0aWNrIGNvdW50IGlzIHNwZWNpZmllZCwgcGljayBhIHJlYXNvbmFibGUgdGljayBpbnRlcnZhbFxuICAgIC8vIGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgdGhlIGRvbWFpbiBhbmQgYSByb3VnaCBlc3RpbWF0ZSBvZiB0aWNrIHNpemUuXG4gICAgLy8gT3RoZXJ3aXNlLCBhc3N1bWUgaW50ZXJ2YWwgaXMgYWxyZWFkeSBhIHRpbWUgaW50ZXJ2YWwgYW5kIHVzZSBpdC5cbiAgICBpZiAodHlwZW9mIGludGVydmFsID09PSBcIm51bWJlclwiKSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIGludGVydmFsLFxuICAgICAgICAgIGkgPSBiaXNlY3RvcihmdW5jdGlvbihpKSB7IHJldHVybiBpWzJdOyB9KS5yaWdodCh0aWNrSW50ZXJ2YWxzLCB0YXJnZXQpO1xuICAgICAgaWYgKGkgPT09IHRpY2tJbnRlcnZhbHMubGVuZ3RoKSB7XG4gICAgICAgIHN0ZXAgPSB0aWNrU3RlcChzdGFydCAvIGR1cmF0aW9uWWVhciwgc3RvcCAvIGR1cmF0aW9uWWVhciwgaW50ZXJ2YWwpO1xuICAgICAgICBpbnRlcnZhbCA9IHllYXI7XG4gICAgICB9IGVsc2UgaWYgKGkpIHtcbiAgICAgICAgaSA9IHRpY2tJbnRlcnZhbHNbdGFyZ2V0IC8gdGlja0ludGVydmFsc1tpIC0gMV1bMl0gPCB0aWNrSW50ZXJ2YWxzW2ldWzJdIC8gdGFyZ2V0ID8gaSAtIDEgOiBpXTtcbiAgICAgICAgc3RlcCA9IGlbMV07XG4gICAgICAgIGludGVydmFsID0gaVswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ZXAgPSB0aWNrU3RlcChzdGFydCwgc3RvcCwgaW50ZXJ2YWwpO1xuICAgICAgICBpbnRlcnZhbCA9IG1pbGxpc2Vjb25kO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdGVwID09IG51bGwgPyBpbnRlcnZhbCA6IGludGVydmFsLmV2ZXJ5KHN0ZXApO1xuICB9XG5cbiAgc2NhbGUuaW52ZXJ0ID0gZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShpbnZlcnQoeSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IGRvbWFpbihtYXAuY2FsbChfLCBudW1iZXIpKSA6IGRvbWFpbigpLm1hcChkYXRlKTtcbiAgfTtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGludGVydmFsLCBzdGVwKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKSxcbiAgICAgICAgdDAgPSBkWzBdLFxuICAgICAgICB0MSA9IGRbZC5sZW5ndGggLSAxXSxcbiAgICAgICAgciA9IHQxIDwgdDAsXG4gICAgICAgIHQ7XG4gICAgaWYgKHIpIHQgPSB0MCwgdDAgPSB0MSwgdDEgPSB0O1xuICAgIHQgPSB0aWNrSW50ZXJ2YWwoaW50ZXJ2YWwsIHQwLCB0MSwgc3RlcCk7XG4gICAgdCA9IHQgPyB0LnJhbmdlKHQwLCB0MSArIDEpIDogW107IC8vIGluY2x1c2l2ZSBzdG9wXG4gICAgcmV0dXJuIHIgPyB0LnJldmVyc2UoKSA6IHQ7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICByZXR1cm4gc3BlY2lmaWVyID09IG51bGwgPyB0aWNrRm9ybWF0IDogZm9ybWF0KHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGludGVydmFsLCBzdGVwKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gKGludGVydmFsID0gdGlja0ludGVydmFsKGludGVydmFsLCBkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIHN0ZXApKVxuICAgICAgICA/IGRvbWFpbihuaWNlKGQsIGludGVydmFsKSlcbiAgICAgICAgOiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGNhbGVuZGFyKHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCwgZm9ybWF0KSk7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNhbGVuZGFyKHRpbWVZZWFyLCB0aW1lTW9udGgsIHRpbWVXZWVrLCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSwgdGltZVNlY29uZCwgdGltZU1pbGxpc2Vjb25kLCB0aW1lRm9ybWF0KS5kb21haW4oW25ldyBEYXRlKDIwMDAsIDAsIDEpLCBuZXcgRGF0ZSgyMDAwLCAwLCAyKV0pO1xufVxuIiwiZnVuY3Rpb24gTGluZWFyKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkxpbmVhci5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgLy8gcHJvY2VlZFxuICAgICAgZGVmYXVsdDogdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IExpbmVhcihjb250ZXh0KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiB4KHApIHtcbiAgcmV0dXJuIHBbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KHApIHtcbiAgcmV0dXJuIHBbMV07XG59XG4iLCJmdW5jdGlvbiBzaWduKHgpIHtcbiAgcmV0dXJuIHggPCAwID8gLTEgOiAxO1xufVxuXG4vLyBDYWxjdWxhdGUgdGhlIHNsb3BlcyBvZiB0aGUgdGFuZ2VudHMgKEhlcm1pdGUtdHlwZSBpbnRlcnBvbGF0aW9uKSBiYXNlZCBvblxuLy8gdGhlIGZvbGxvd2luZyBwYXBlcjogU3RlZmZlbiwgTS4gMTk5MC4gQSBTaW1wbGUgTWV0aG9kIGZvciBNb25vdG9uaWNcbi8vIEludGVycG9sYXRpb24gaW4gT25lIERpbWVuc2lvbi4gQXN0cm9ub215IGFuZCBBc3Ryb3BoeXNpY3MsIFZvbC4gMjM5LCBOTy5cbi8vIE5PVihJSSksIFAuIDQ0MywgMTk5MC5cbmZ1bmN0aW9uIHNsb3BlMyh0aGF0LCB4MiwgeTIpIHtcbiAgdmFyIGgwID0gdGhhdC5feDEgLSB0aGF0Ll94MCxcbiAgICAgIGgxID0geDIgLSB0aGF0Ll94MSxcbiAgICAgIHMwID0gKHRoYXQuX3kxIC0gdGhhdC5feTApIC8gKGgwIHx8IGgxIDwgMCAmJiAtMCksXG4gICAgICBzMSA9ICh5MiAtIHRoYXQuX3kxKSAvIChoMSB8fCBoMCA8IDAgJiYgLTApLFxuICAgICAgcCA9IChzMCAqIGgxICsgczEgKiBoMCkgLyAoaDAgKyBoMSk7XG4gIHJldHVybiAoc2lnbihzMCkgKyBzaWduKHMxKSkgKiBNYXRoLm1pbihNYXRoLmFicyhzMCksIE1hdGguYWJzKHMxKSwgMC41ICogTWF0aC5hYnMocCkpIHx8IDA7XG59XG5cbi8vIENhbGN1bGF0ZSBhIG9uZS1zaWRlZCBzbG9wZS5cbmZ1bmN0aW9uIHNsb3BlMih0aGF0LCB0KSB7XG4gIHZhciBoID0gdGhhdC5feDEgLSB0aGF0Ll94MDtcbiAgcmV0dXJuIGggPyAoMyAqICh0aGF0Ll95MSAtIHRoYXQuX3kwKSAvIGggLSB0KSAvIDIgOiB0O1xufVxuXG4vLyBBY2NvcmRpbmcgdG8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3ViaWNfSGVybWl0ZV9zcGxpbmUjUmVwcmVzZW50YXRpb25zXG4vLyBcInlvdSBjYW4gZXhwcmVzcyBjdWJpYyBIZXJtaXRlIGludGVycG9sYXRpb24gaW4gdGVybXMgb2YgY3ViaWMgQsOpemllciBjdXJ2ZXNcbi8vIHdpdGggcmVzcGVjdCB0byB0aGUgZm91ciB2YWx1ZXMgcDAsIHAwICsgbTAgLyAzLCBwMSAtIG0xIC8gMywgcDFcIi5cbmZ1bmN0aW9uIHBvaW50KHRoYXQsIHQwLCB0MSkge1xuICB2YXIgeDAgPSB0aGF0Ll94MCxcbiAgICAgIHkwID0gdGhhdC5feTAsXG4gICAgICB4MSA9IHRoYXQuX3gxLFxuICAgICAgeTEgPSB0aGF0Ll95MSxcbiAgICAgIGR4ID0gKHgxIC0geDApIC8gMztcbiAgdGhhdC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHgwICsgZHgsIHkwICsgZHggKiB0MCwgeDEgLSBkeCwgeTEgLSBkeCAqIHQxLCB4MSwgeTEpO1xufVxuXG5mdW5jdGlvbiBNb25vdG9uZVgoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuTW9ub3RvbmVYLnByb3RvdHlwZSA9IHtcbiAgYXJlYVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saW5lID0gMDtcbiAgfSxcbiAgYXJlYUVuZDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IE5hTjtcbiAgfSxcbiAgbGluZVN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxID1cbiAgICB0aGlzLl95MCA9IHRoaXMuX3kxID1cbiAgICB0aGlzLl90MCA9IE5hTjtcbiAgICB0aGlzLl9wb2ludCA9IDA7XG4gIH0sXG4gIGxpbmVFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMjogdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsIHRoaXMuX3kxKTsgYnJlYWs7XG4gICAgICBjYXNlIDM6IHBvaW50KHRoaXMsIHRoaXMuX3QwLCBzbG9wZTIodGhpcywgdGhpcy5fdDApKTsgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLl9saW5lIHx8ICh0aGlzLl9saW5lICE9PSAwICYmIHRoaXMuX3BvaW50ID09PSAxKSkgdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLl9saW5lID0gMSAtIHRoaXMuX2xpbmU7XG4gIH0sXG4gIHBvaW50OiBmdW5jdGlvbih4LCB5KSB7XG4gICAgdmFyIHQxID0gTmFOO1xuXG4gICAgeCA9ICt4LCB5ID0gK3k7XG4gICAgaWYgKHggPT09IHRoaXMuX3gxICYmIHkgPT09IHRoaXMuX3kxKSByZXR1cm47IC8vIElnbm9yZSBjb2luY2lkZW50IHBvaW50cy5cbiAgICBzd2l0Y2ggKHRoaXMuX3BvaW50KSB7XG4gICAgICBjYXNlIDA6IHRoaXMuX3BvaW50ID0gMTsgdGhpcy5fbGluZSA/IHRoaXMuX2NvbnRleHQubGluZVRvKHgsIHkpIDogdGhpcy5fY29udGV4dC5tb3ZlVG8oeCwgeSk7IGJyZWFrO1xuICAgICAgY2FzZSAxOiB0aGlzLl9wb2ludCA9IDI7IGJyZWFrO1xuICAgICAgY2FzZSAyOiB0aGlzLl9wb2ludCA9IDM7IHBvaW50KHRoaXMsIHNsb3BlMih0aGlzLCB0MSA9IHNsb3BlMyh0aGlzLCB4LCB5KSksIHQxKTsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBwb2ludCh0aGlzLCB0aGlzLl90MCwgdDEgPSBzbG9wZTModGhpcywgeCwgeSkpOyBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLl94MCA9IHRoaXMuX3gxLCB0aGlzLl94MSA9IHg7XG4gICAgdGhpcy5feTAgPSB0aGlzLl95MSwgdGhpcy5feTEgPSB5O1xuICAgIHRoaXMuX3QwID0gdDE7XG4gIH1cbn1cblxuZnVuY3Rpb24gTW9ub3RvbmVZKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IG5ldyBSZWZsZWN0Q29udGV4dChjb250ZXh0KTtcbn1cblxuKE1vbm90b25lWS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKE1vbm90b25lWC5wcm90b3R5cGUpKS5wb2ludCA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgTW9ub3RvbmVYLnByb3RvdHlwZS5wb2ludC5jYWxsKHRoaXMsIHksIHgpO1xufTtcblxuZnVuY3Rpb24gUmVmbGVjdENvbnRleHQoY29udGV4dCkge1xuICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbn1cblxuUmVmbGVjdENvbnRleHQucHJvdG90eXBlID0ge1xuICBtb3ZlVG86IGZ1bmN0aW9uKHgsIHkpIHsgdGhpcy5fY29udGV4dC5tb3ZlVG8oeSwgeCk7IH0sXG4gIGNsb3NlUGF0aDogZnVuY3Rpb24oKSB7IHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7IH0sXG4gIGxpbmVUbzogZnVuY3Rpb24oeCwgeSkgeyB0aGlzLl9jb250ZXh0LmxpbmVUbyh5LCB4KTsgfSxcbiAgYmV6aWVyQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHsgdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHkxLCB4MSwgeTIsIHgyLCB5LCB4KTsgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1vbm90b25lWChjb250ZXh0KSB7XG4gIHJldHVybiBuZXcgTW9ub3RvbmVYKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ub3RvbmVZKGNvbnRleHQpIHtcbiAgcmV0dXJuIG5ldyBNb25vdG9uZVkoY29udGV4dCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBhdHRyc0Z1bmN0aW9uKHNlbGVjdGlvbiwgbWFwKSB7XG4gIHJldHVybiBzZWxlY3Rpb24uZWFjaChmdW5jdGlvbigpIHtcbiAgICB2YXIgeCA9IG1hcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBzID0gc2VsZWN0KHRoaXMpO1xuICAgIGZvciAodmFyIG5hbWUgaW4geCkgcy5hdHRyKG5hbWUsIHhbbmFtZV0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXR0cnNPYmplY3Qoc2VsZWN0aW9uLCBtYXApIHtcbiAgZm9yICh2YXIgbmFtZSBpbiBtYXApIHNlbGVjdGlvbi5hdHRyKG5hbWUsIG1hcFtuYW1lXSk7XG4gIHJldHVybiBzZWxlY3Rpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hcCkge1xuICByZXR1cm4gKHR5cGVvZiBtYXAgPT09IFwiZnVuY3Rpb25cIiA/IGF0dHJzRnVuY3Rpb24gOiBhdHRyc09iamVjdCkodGhpcywgbWFwKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0fSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmZ1bmN0aW9uIHN0eWxlc0Z1bmN0aW9uKHNlbGVjdGlvbiwgbWFwLCBwcmlvcml0eSkge1xuICByZXR1cm4gc2VsZWN0aW9uLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgdmFyIHggPSBtYXAuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgcyA9IHNlbGVjdCh0aGlzKTtcbiAgICBmb3IgKHZhciBuYW1lIGluIHgpIHMuc3R5bGUobmFtZSwgeFtuYW1lXSwgcHJpb3JpdHkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc3R5bGVzT2JqZWN0KHNlbGVjdGlvbiwgbWFwLCBwcmlvcml0eSkge1xuICBmb3IgKHZhciBuYW1lIGluIG1hcCkgc2VsZWN0aW9uLnN0eWxlKG5hbWUsIG1hcFtuYW1lXSwgcHJpb3JpdHkpO1xuICByZXR1cm4gc2VsZWN0aW9uO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXAsIHByaW9yaXR5KSB7XG4gIHJldHVybiAodHlwZW9mIG1hcCA9PT0gXCJmdW5jdGlvblwiID8gc3R5bGVzRnVuY3Rpb24gOiBzdHlsZXNPYmplY3QpKHRoaXMsIG1hcCwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSk7XG59XG4iLCJpbXBvcnQge3NlbGVjdH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBwcm9wZXJ0aWVzRnVuY3Rpb24oc2VsZWN0aW9uLCBtYXApIHtcbiAgcmV0dXJuIHNlbGVjdGlvbi5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIHZhciB4ID0gbWFwLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHMgPSBzZWxlY3QodGhpcyk7XG4gICAgZm9yICh2YXIgbmFtZSBpbiB4KSBzLnByb3BlcnR5KG5hbWUsIHhbbmFtZV0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydGllc09iamVjdChzZWxlY3Rpb24sIG1hcCkge1xuICBmb3IgKHZhciBuYW1lIGluIG1hcCkgc2VsZWN0aW9uLnByb3BlcnR5KG5hbWUsIG1hcFtuYW1lXSk7XG4gIHJldHVybiBzZWxlY3Rpb247XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hcCkge1xuICByZXR1cm4gKHR5cGVvZiBtYXAgPT09IFwiZnVuY3Rpb25cIiA/IHByb3BlcnRpZXNGdW5jdGlvbiA6IHByb3BlcnRpZXNPYmplY3QpKHRoaXMsIG1hcCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nXCI7XG5pbXBvcnQgYmlzZWN0b3IgZnJvbSBcIi4vYmlzZWN0b3JcIjtcblxudmFyIGFzY2VuZGluZ0Jpc2VjdCA9IGJpc2VjdG9yKGFzY2VuZGluZyk7XG5leHBvcnQgdmFyIGJpc2VjdFJpZ2h0ID0gYXNjZW5kaW5nQmlzZWN0LnJpZ2h0O1xuZXhwb3J0IHZhciBiaXNlY3RMZWZ0ID0gYXNjZW5kaW5nQmlzZWN0LmxlZnQ7XG5leHBvcnQgZGVmYXVsdCBiaXNlY3RSaWdodDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICB2YXIgbiA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBpID0gLTEsXG4gICAgICB2YWx1ZSxcbiAgICAgIG1heDtcblxuICBpZiAodmFsdWVvZiA9PSBudWxsKSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gRmluZCB0aGUgZmlyc3QgY29tcGFyYWJsZSB2YWx1ZS5cbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZXNbaV0pICE9IG51bGwgJiYgdmFsdWUgPj0gdmFsdWUpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIENvbXBhcmUgdGhlIHJlbWFpbmluZyB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlc1tpXSkgIT0gbnVsbCAmJiB2YWx1ZSA+IG1heCkge1xuICAgICAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZWxzZSB7XG4gICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gRmluZCB0aGUgZmlyc3QgY29tcGFyYWJsZSB2YWx1ZS5cbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlc1tpXSwgaSwgdmFsdWVzKSkgIT0gbnVsbCAmJiB2YWx1ZSA+PSB2YWx1ZSkge1xuICAgICAgICBtYXggPSB2YWx1ZTtcbiAgICAgICAgd2hpbGUgKCsraSA8IG4pIHsgLy8gQ29tcGFyZSB0aGUgcmVtYWluaW5nIHZhbHVlcy5cbiAgICAgICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpICE9IG51bGwgJiYgdmFsdWUgPiBtYXgpIHtcbiAgICAgICAgICAgIG1heCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXg7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgaSA9IC0xLFxuICAgICAgdmFsdWUsXG4gICAgICBtaW47XG5cbiAgaWYgKHZhbHVlb2YgPT0gbnVsbCkge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVzW2ldKSAhPSBudWxsICYmIHZhbHVlID49IHZhbHVlKSB7XG4gICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgICB3aGlsZSAoKytpIDwgbikgeyAvLyBDb21wYXJlIHRoZSByZW1haW5pbmcgdmFsdWVzLlxuICAgICAgICAgIGlmICgodmFsdWUgPSB2YWx1ZXNbaV0pICE9IG51bGwgJiYgbWluID4gdmFsdWUpIHtcbiAgICAgICAgICAgIG1pbiA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVsc2Uge1xuICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIEZpbmQgdGhlIGZpcnN0IGNvbXBhcmFibGUgdmFsdWUuXG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpICE9IG51bGwgJiYgdmFsdWUgPj0gdmFsdWUpIHtcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICAgIHdoaWxlICgrK2kgPCBuKSB7IC8vIENvbXBhcmUgdGhlIHJlbWFpbmluZyB2YWx1ZXMuXG4gICAgICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWVzW2ldLCBpLCB2YWx1ZXMpKSAhPSBudWxsICYmIG1pbiA+IHZhbHVlKSB7XG4gICAgICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWluO1xufVxuIiwiZXhwb3J0IHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJleHBvcnQgdmFyIHhodG1sID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc3ZnOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhodG1sOiB4aHRtbCxcbiAgeGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB4bWw6IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCJcbn07XG4iLCJpbXBvcnQgbmFtZXNwYWNlcyBmcm9tIFwiLi9uYW1lc3BhY2VzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHByZWZpeCA9IG5hbWUgKz0gXCJcIiwgaSA9IHByZWZpeC5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGkgPj0gMCAmJiAocHJlZml4ID0gbmFtZS5zbGljZSgwLCBpKSkgIT09IFwieG1sbnNcIikgbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO1xuICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7XG59XG4iLCJ2YXIgbWF0Y2hlciA9IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgfTtcbn07XG5cbmlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIGlmICghZWxlbWVudC5tYXRjaGVzKSB7XG4gICAgdmFyIHZlbmRvck1hdGNoZXMgPSBlbGVtZW50LndlYmtpdE1hdGNoZXNTZWxlY3RvclxuICAgICAgICB8fCBlbGVtZW50Lm1zTWF0Y2hlc1NlbGVjdG9yXG4gICAgICAgIHx8IGVsZW1lbnQubW96TWF0Y2hlc1NlbGVjdG9yXG4gICAgICAgIHx8IGVsZW1lbnQub01hdGNoZXNTZWxlY3RvcjtcbiAgICBtYXRjaGVyID0gZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHZlbmRvck1hdGNoZXMuY2FsbCh0aGlzLCBzZWxlY3Rvcik7XG4gICAgICB9O1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbWF0Y2hlcjtcbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHNlbGVjdG9yIGZyb20gXCIuLi9zZWxlY3RvclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICBpZiAoXCJfX2RhdGFfX1wiIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO1xuICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IHNlbGVjdG9yQWxsIGZyb20gXCIuLi9zZWxlY3RvckFsbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBbXSwgcGFyZW50cyA9IFtdLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzdWJncm91cHMucHVzaChzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpO1xuICAgICAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCBwYXJlbnRzKTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuaW1wb3J0IG1hdGNoZXIgZnJvbSBcIi4uL21hdGNoZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCAhPT0gXCJmdW5jdGlvblwiKSBtYXRjaCA9IG1hdGNoZXIobWF0Y2gpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBbXSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiBtYXRjaC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkge1xuICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih1cGRhdGUpIHtcbiAgcmV0dXJuIG5ldyBBcnJheSh1cGRhdGUubGVuZ3RoKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2VcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdGlvbikge1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSBzZWxlY3Rpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XG4gICAgICAgIG1lcmdlW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICBtZXJnZXNbal0gPSBncm91cHMwW2pdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IC0xLCBtID0gZ3JvdXBzLmxlbmd0aDsgKytqIDwgbTspIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IGdyb3VwLmxlbmd0aCAtIDEsIG5leHQgPSBncm91cFtpXSwgbm9kZTsgLS1pID49IDA7KSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGlmIChuZXh0ICYmIG5leHQgIT09IG5vZGUubmV4dFNpYmxpbmcpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgIG5leHQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1swXTtcbiAgYXJndW1lbnRzWzBdID0gdGhpcztcbiAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5vZGVzID0gbmV3IEFycmF5KHRoaXMuc2l6ZSgpKSwgaSA9IC0xO1xuICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7IG5vZGVzWysraV0gPSB0aGlzOyB9KTtcbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBub2RlID0gZ3JvdXBbaV07XG4gICAgICBpZiAobm9kZSkgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHNpemUgPSAwO1xuICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7ICsrc2l6ZTsgfSk7XG4gIHJldHVybiBzaXplO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhdGhpcy5ub2RlKCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSBjYWxsYmFjay5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSAvLyBub2RlIGlzIGEgTm9kZVxuICAgICAgfHwgKG5vZGUuZG9jdW1lbnQgJiYgbm9kZSkgLy8gbm9kZSBpcyBhIFdpbmRvd1xuICAgICAgfHwgbm9kZS5kZWZhdWx0VmlldzsgLy8gbm9kZSBpcyBhIERvY3VtZW50XG59XG4iLCJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi4vY3JlYXRvclwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5wcm9wZXJ0eShcIl9fZGF0YV9fXCIsIHZhbHVlKVxuICAgICAgOiB0aGlzLm5vZGUoKS5fX2RhdGFfXztcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9uLCByb290fSBmcm9tIFwiLi9zZWxlY3Rpb24vaW5kZXhcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcildXSwgW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pXG4gICAgICA6IG5ldyBTZWxlY3Rpb24oW1tzZWxlY3Rvcl1dLCByb290KTtcbn1cbiIsImV4cG9ydCB2YXIgZGVnMnJhZCA9IE1hdGguUEkgLyAxODA7XG5leHBvcnQgdmFyIHJhZDJkZWcgPSAxODAgLyBNYXRoLlBJO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJpbXBvcnQge3JnYiBhcyBjb2xvclJnYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgYmFzaXMgZnJvbSBcIi4vYmFzaXNcIjtcbmltcG9ydCBiYXNpc0Nsb3NlZCBmcm9tIFwiLi9iYXNpc0Nsb3NlZFwiO1xuaW1wb3J0IG5vZ2FtbWEsIHtnYW1tYX0gZnJvbSBcIi4vY29sb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHJnYkdhbW1hKHkpIHtcbiAgdmFyIGNvbG9yID0gZ2FtbWEoeSk7XG5cbiAgZnVuY3Rpb24gcmdiKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IGNvbG9yKChzdGFydCA9IGNvbG9yUmdiKHN0YXJ0KSkuciwgKGVuZCA9IGNvbG9yUmdiKGVuZCkpLnIpLFxuICAgICAgICBnID0gY29sb3Ioc3RhcnQuZywgZW5kLmcpLFxuICAgICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LnIgPSByKHQpO1xuICAgICAgc3RhcnQuZyA9IGcodCk7XG4gICAgICBzdGFydC5iID0gYih0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG5cbiAgcmdiLmdhbW1hID0gcmdiR2FtbWE7XG5cbiAgcmV0dXJuIHJnYjtcbn0pKDEpO1xuXG5mdW5jdGlvbiByZ2JTcGxpbmUoc3BsaW5lKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xvcnMpIHtcbiAgICB2YXIgbiA9IGNvbG9ycy5sZW5ndGgsXG4gICAgICAgIHIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGcgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGksIGNvbG9yO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbG9yID0gY29sb3JSZ2IoY29sb3JzW2ldKTtcbiAgICAgIHJbaV0gPSBjb2xvci5yIHx8IDA7XG4gICAgICBnW2ldID0gY29sb3IuZyB8fCAwO1xuICAgICAgYltpXSA9IGNvbG9yLmIgfHwgMDtcbiAgICB9XG4gICAgciA9IHNwbGluZShyKTtcbiAgICBnID0gc3BsaW5lKGcpO1xuICAgIGIgPSBzcGxpbmUoYik7XG4gICAgY29sb3Iub3BhY2l0eSA9IDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGNvbG9yLnIgPSByKHQpO1xuICAgICAgY29sb3IuZyA9IGcodCk7XG4gICAgICBjb2xvci5iID0gYih0KTtcbiAgICAgIHJldHVybiBjb2xvciArIFwiXCI7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciByZ2JCYXNpcyA9IHJnYlNwbGluZShiYXNpcyk7XG5leHBvcnQgdmFyIHJnYkJhc2lzQ2xvc2VkID0gcmdiU3BsaW5lKGJhc2lzQ2xvc2VkKTtcbiIsImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBuYiA9IGIgPyBiLmxlbmd0aCA6IDAsXG4gICAgICBuYSA9IGEgPyBNYXRoLm1pbihuYiwgYS5sZW5ndGgpIDogMCxcbiAgICAgIHggPSBuZXcgQXJyYXkobmIpLFxuICAgICAgYyA9IG5ldyBBcnJheShuYiksXG4gICAgICBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSB4W2ldID0gdmFsdWUoYVtpXSwgYltpXSk7XG4gIGZvciAoOyBpIDwgbmI7ICsraSkgY1tpXSA9IGJbaV07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgY1tpXSA9IHhbaV0odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBkID0gbmV3IERhdGU7XG4gIHJldHVybiBhID0gK2EsIGIgLT0gYSwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBkLnNldFRpbWUoYSArIGIgKiB0KSwgZDtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiAtPSBhLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKyBiICogdDtcbiAgfTtcbn1cbiIsImltcG9ydCB2YWx1ZSBmcm9tIFwiLi92YWx1ZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBpID0ge30sXG4gICAgICBjID0ge30sXG4gICAgICBrO1xuXG4gIGlmIChhID09PSBudWxsIHx8IHR5cGVvZiBhICE9PSBcIm9iamVjdFwiKSBhID0ge307XG4gIGlmIChiID09PSBudWxsIHx8IHR5cGVvZiBiICE9PSBcIm9iamVjdFwiKSBiID0ge307XG5cbiAgZm9yIChrIGluIGIpIHtcbiAgICBpZiAoayBpbiBhKSB7XG4gICAgICBpW2tdID0gdmFsdWUoYVtrXSwgYltrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNba10gPSBiW2tdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgZm9yIChrIGluIGkpIGNba10gPSBpW2tdKHQpO1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuIiwiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgcmdiIGZyb20gXCIuL3JnYlwiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuL2FycmF5XCI7XG5pbXBvcnQgZGF0ZSBmcm9tIFwiLi9kYXRlXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlclwiO1xuaW1wb3J0IG9iamVjdCBmcm9tIFwiLi9vYmplY3RcIjtcbmltcG9ydCBzdHJpbmcgZnJvbSBcIi4vc3RyaW5nXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgdCA9IHR5cGVvZiBiLCBjO1xuICByZXR1cm4gYiA9PSBudWxsIHx8IHQgPT09IFwiYm9vbGVhblwiID8gY29uc3RhbnQoYilcbiAgICAgIDogKHQgPT09IFwibnVtYmVyXCIgPyBudW1iZXJcbiAgICAgIDogdCA9PT0gXCJzdHJpbmdcIiA/ICgoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgcmdiKSA6IHN0cmluZylcbiAgICAgIDogYiBpbnN0YW5jZW9mIGNvbG9yID8gcmdiXG4gICAgICA6IGIgaW5zdGFuY2VvZiBEYXRlID8gZGF0ZVxuICAgICAgOiBBcnJheS5pc0FycmF5KGIpID8gYXJyYXlcbiAgICAgIDogdHlwZW9mIGIudmFsdWVPZiAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBiLnRvU3RyaW5nICE9PSBcImZ1bmN0aW9uXCIgfHwgaXNOYU4oYikgPyBvYmplY3RcbiAgICAgIDogbnVtYmVyKShhLCBiKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiAtPSBhLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSArIGIgKiB0KTtcbiAgfTtcbn1cbiIsInZhciBkZWdyZWVzID0gMTgwIC8gTWF0aC5QSTtcblxuZXhwb3J0IHZhciBpZGVudGl0eSA9IHtcbiAgdHJhbnNsYXRlWDogMCxcbiAgdHJhbnNsYXRlWTogMCxcbiAgcm90YXRlOiAwLFxuICBza2V3WDogMCxcbiAgc2NhbGVYOiAxLFxuICBzY2FsZVk6IDFcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFyIHNjYWxlWCwgc2NhbGVZLCBza2V3WDtcbiAgaWYgKHNjYWxlWCA9IE1hdGguc3FydChhICogYSArIGIgKiBiKSkgYSAvPSBzY2FsZVgsIGIgLz0gc2NhbGVYO1xuICBpZiAoc2tld1ggPSBhICogYyArIGIgKiBkKSBjIC09IGEgKiBza2V3WCwgZCAtPSBiICogc2tld1g7XG4gIGlmIChzY2FsZVkgPSBNYXRoLnNxcnQoYyAqIGMgKyBkICogZCkpIGMgLz0gc2NhbGVZLCBkIC89IHNjYWxlWSwgc2tld1ggLz0gc2NhbGVZO1xuICBpZiAoYSAqIGQgPCBiICogYykgYSA9IC1hLCBiID0gLWIsIHNrZXdYID0gLXNrZXdYLCBzY2FsZVggPSAtc2NhbGVYO1xuICByZXR1cm4ge1xuICAgIHRyYW5zbGF0ZVg6IGUsXG4gICAgdHJhbnNsYXRlWTogZixcbiAgICByb3RhdGU6IE1hdGguYXRhbjIoYiwgYSkgKiBkZWdyZWVzLFxuICAgIHNrZXdYOiBNYXRoLmF0YW4oc2tld1gpICogZGVncmVlcyxcbiAgICBzY2FsZVg6IHNjYWxlWCxcbiAgICBzY2FsZVk6IHNjYWxlWVxuICB9O1xufVxuIiwiaW1wb3J0IHtUaW1lcn0gZnJvbSBcIi4vdGltZXJcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICBkZWxheSA9IGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5O1xuICB0LnJlc3RhcnQoZnVuY3Rpb24oZWxhcHNlZCkge1xuICAgIHQuc3RvcCgpO1xuICAgIGNhbGxiYWNrKGVsYXBzZWQgKyBkZWxheSk7XG4gIH0sIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG4iLCJpbXBvcnQge1NUQVJUSU5HLCBFTkRJTkcsIEVOREVEfSBmcm9tIFwiLi90cmFuc2l0aW9uL3NjaGVkdWxlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBhY3RpdmUsXG4gICAgICBlbXB0eSA9IHRydWUsXG4gICAgICBpO1xuXG4gIGlmICghc2NoZWR1bGVzKSByZXR1cm47XG5cbiAgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcblxuICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgaWYgKChzY2hlZHVsZSA9IHNjaGVkdWxlc1tpXSkubmFtZSAhPT0gbmFtZSkgeyBlbXB0eSA9IGZhbHNlOyBjb250aW51ZTsgfVxuICAgIGFjdGl2ZSA9IHNjaGVkdWxlLnN0YXRlID4gU1RBUlRJTkcgJiYgc2NoZWR1bGUuc3RhdGUgPCBFTkRJTkc7XG4gICAgc2NoZWR1bGUuc3RhdGUgPSBFTkRFRDtcbiAgICBzY2hlZHVsZS50aW1lci5zdG9wKCk7XG4gICAgaWYgKGFjdGl2ZSkgc2NoZWR1bGUub24uY2FsbChcImludGVycnVwdFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzY2hlZHVsZS5pbmRleCwgc2NoZWR1bGUuZ3JvdXApO1xuICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gIH1cblxuICBpZiAoZW1wdHkpIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbn1cbiIsImltcG9ydCBpbnRlcnJ1cHQgZnJvbSBcIi4uL2ludGVycnVwdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgaW50ZXJydXB0KHRoaXMsIG5hbWUpO1xuICB9KTtcbn1cbiIsImltcG9ydCB7Y29sb3J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZU51bWJlciwgaW50ZXJwb2xhdGVSZ2IsIGludGVycG9sYXRlU3RyaW5nfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYztcbiAgcmV0dXJuICh0eXBlb2YgYiA9PT0gXCJudW1iZXJcIiA/IGludGVycG9sYXRlTnVtYmVyXG4gICAgICA6IGIgaW5zdGFuY2VvZiBjb2xvciA/IGludGVycG9sYXRlUmdiXG4gICAgICA6IChjID0gY29sb3IoYikpID8gKGIgPSBjLCBpbnRlcnBvbGF0ZVJnYilcbiAgICAgIDogaW50ZXJwb2xhdGVTdHJpbmcpKGEsIGIpO1xufVxuIiwiaW1wb3J0IHttYXRjaGVyfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggIT09IFwiZnVuY3Rpb25cIikgbWF0Y2ggPSBtYXRjaGVyKG1hdGNoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gW10sIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgbWF0Y2guY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpIHtcbiAgICAgICAgc3ViZ3JvdXAucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCB0aGlzLl9uYW1lLCB0aGlzLl9pZCk7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHRyYW5zaXRpb24pIHtcbiAgaWYgKHRyYW5zaXRpb24uX2lkICE9PSB0aGlzLl9pZCkgdGhyb3cgbmV3IEVycm9yO1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSB0cmFuc2l0aW9uLl9ncm91cHMsIG0wID0gZ3JvdXBzMC5sZW5ndGgsIG0xID0gZ3JvdXBzMS5sZW5ndGgsIG0gPSBNYXRoLm1pbihtMCwgbTEpLCBtZXJnZXMgPSBuZXcgQXJyYXkobTApLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwMCA9IGdyb3VwczBbal0sIGdyb3VwMSA9IGdyb3VwczFbal0sIG4gPSBncm91cDAubGVuZ3RoLCBtZXJnZSA9IG1lcmdlc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXAwW2ldIHx8IGdyb3VwMVtpXSkge1xuICAgICAgICBtZXJnZVtpXSA9IG5vZGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yICg7IGogPCBtMDsgKytqKSB7XG4gICAgbWVyZ2VzW2pdID0gZ3JvdXBzMFtqXTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMsIHRoaXMuX25hbWUsIHRoaXMuX2lkKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0b3J9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkID0gdGhpcy5faWQ7XG5cbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3Ioc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIHN1Ymdyb3VwID0gc3ViZ3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBzdWJub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChzdWJub2RlID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSkge1xuICAgICAgICBpZiAoXCJfX2RhdGFfX1wiIGluIG5vZGUpIHN1Ym5vZGUuX19kYXRhX18gPSBub2RlLl9fZGF0YV9fO1xuICAgICAgICBzdWJncm91cFtpXSA9IHN1Ym5vZGU7XG4gICAgICAgIHNjaGVkdWxlKHN1Ymdyb3VwW2ldLCBuYW1lLCBpZCwgaSwgc3ViZ3JvdXAsIGdldChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0b3JBbGx9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkID0gdGhpcy5faWQ7XG5cbiAgaWYgKHR5cGVvZiBzZWxlY3QgIT09IFwiZnVuY3Rpb25cIikgc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBbXSwgcGFyZW50cyA9IFtdLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBmb3IgKHZhciBjaGlsZHJlbiA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSwgY2hpbGQsIGluaGVyaXQgPSBnZXQobm9kZSwgaWQpLCBrID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgayA8IGw7ICsraykge1xuICAgICAgICAgIGlmIChjaGlsZCA9IGNoaWxkcmVuW2tdKSB7XG4gICAgICAgICAgICBzY2hlZHVsZShjaGlsZCwgbmFtZSwgaWQsIGssIGNoaWxkcmVuLCBpbmhlcml0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goY2hpbGRyZW4pO1xuICAgICAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxudmFyIFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3I7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9ncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkMCA9IHRoaXMuX2lkLFxuICAgICAgaWQxID0gbmV3SWQoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICB2YXIgaW5oZXJpdCA9IGdldChub2RlLCBpZDApO1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZDEsIGksIGdyb3VwLCB7XG4gICAgICAgICAgdGltZTogaW5oZXJpdC50aW1lICsgaW5oZXJpdC5kZWxheSArIGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgICAgZHVyYXRpb246IGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZWFzZTogaW5oZXJpdC5lYXNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkMSk7XG59XG4iLCJ2YXIgZXhwb25lbnQgPSAzO1xuXG5leHBvcnQgdmFyIHBvbHlJbiA9IChmdW5jdGlvbiBjdXN0b20oZSkge1xuICBlID0gK2U7XG5cbiAgZnVuY3Rpb24gcG9seUluKHQpIHtcbiAgICByZXR1cm4gTWF0aC5wb3codCwgZSk7XG4gIH1cblxuICBwb2x5SW4uZXhwb25lbnQgPSBjdXN0b207XG5cbiAgcmV0dXJuIHBvbHlJbjtcbn0pKGV4cG9uZW50KTtcblxuZXhwb3J0IHZhciBwb2x5T3V0ID0gKGZ1bmN0aW9uIGN1c3RvbShlKSB7XG4gIGUgPSArZTtcblxuICBmdW5jdGlvbiBwb2x5T3V0KHQpIHtcbiAgICByZXR1cm4gMSAtIE1hdGgucG93KDEgLSB0LCBlKTtcbiAgfVxuXG4gIHBvbHlPdXQuZXhwb25lbnQgPSBjdXN0b207XG5cbiAgcmV0dXJuIHBvbHlPdXQ7XG59KShleHBvbmVudCk7XG5cbmV4cG9ydCB2YXIgcG9seUluT3V0ID0gKGZ1bmN0aW9uIGN1c3RvbShlKSB7XG4gIGUgPSArZTtcblxuICBmdW5jdGlvbiBwb2x5SW5PdXQodCkge1xuICAgIHJldHVybiAoKHQgKj0gMikgPD0gMSA/IE1hdGgucG93KHQsIGUpIDogMiAtIE1hdGgucG93KDIgLSB0LCBlKSkgLyAyO1xuICB9XG5cbiAgcG9seUluT3V0LmV4cG9uZW50ID0gY3VzdG9tO1xuXG4gIHJldHVybiBwb2x5SW5PdXQ7XG59KShleHBvbmVudCk7XG4iLCJ2YXIgb3ZlcnNob290ID0gMS43MDE1ODtcblxuZXhwb3J0IHZhciBiYWNrSW4gPSAoZnVuY3Rpb24gY3VzdG9tKHMpIHtcbiAgcyA9ICtzO1xuXG4gIGZ1bmN0aW9uIGJhY2tJbih0KSB7XG4gICAgcmV0dXJuIHQgKiB0ICogKChzICsgMSkgKiB0IC0gcyk7XG4gIH1cblxuICBiYWNrSW4ub3ZlcnNob290ID0gY3VzdG9tO1xuXG4gIHJldHVybiBiYWNrSW47XG59KShvdmVyc2hvb3QpO1xuXG5leHBvcnQgdmFyIGJhY2tPdXQgPSAoZnVuY3Rpb24gY3VzdG9tKHMpIHtcbiAgcyA9ICtzO1xuXG4gIGZ1bmN0aW9uIGJhY2tPdXQodCkge1xuICAgIHJldHVybiAtLXQgKiB0ICogKChzICsgMSkgKiB0ICsgcykgKyAxO1xuICB9XG5cbiAgYmFja091dC5vdmVyc2hvb3QgPSBjdXN0b207XG5cbiAgcmV0dXJuIGJhY2tPdXQ7XG59KShvdmVyc2hvb3QpO1xuXG5leHBvcnQgdmFyIGJhY2tJbk91dCA9IChmdW5jdGlvbiBjdXN0b20ocykge1xuICBzID0gK3M7XG5cbiAgZnVuY3Rpb24gYmFja0luT3V0KHQpIHtcbiAgICByZXR1cm4gKCh0ICo9IDIpIDwgMSA/IHQgKiB0ICogKChzICsgMSkgKiB0IC0gcykgOiAodCAtPSAyKSAqIHQgKiAoKHMgKyAxKSAqIHQgKyBzKSArIDIpIC8gMjtcbiAgfVxuXG4gIGJhY2tJbk91dC5vdmVyc2hvb3QgPSBjdXN0b207XG5cbiAgcmV0dXJuIGJhY2tJbk91dDtcbn0pKG92ZXJzaG9vdCk7XG4iLCJ2YXIgdGF1ID0gMiAqIE1hdGguUEksXG4gICAgYW1wbGl0dWRlID0gMSxcbiAgICBwZXJpb2QgPSAwLjM7XG5cbmV4cG9ydCB2YXIgZWxhc3RpY0luID0gKGZ1bmN0aW9uIGN1c3RvbShhLCBwKSB7XG4gIHZhciBzID0gTWF0aC5hc2luKDEgLyAoYSA9IE1hdGgubWF4KDEsIGEpKSkgKiAocCAvPSB0YXUpO1xuXG4gIGZ1bmN0aW9uIGVsYXN0aWNJbih0KSB7XG4gICAgcmV0dXJuIGEgKiBNYXRoLnBvdygyLCAxMCAqIC0tdCkgKiBNYXRoLnNpbigocyAtIHQpIC8gcCk7XG4gIH1cblxuICBlbGFzdGljSW4uYW1wbGl0dWRlID0gZnVuY3Rpb24oYSkgeyByZXR1cm4gY3VzdG9tKGEsIHAgKiB0YXUpOyB9O1xuICBlbGFzdGljSW4ucGVyaW9kID0gZnVuY3Rpb24ocCkgeyByZXR1cm4gY3VzdG9tKGEsIHApOyB9O1xuXG4gIHJldHVybiBlbGFzdGljSW47XG59KShhbXBsaXR1ZGUsIHBlcmlvZCk7XG5cbmV4cG9ydCB2YXIgZWxhc3RpY091dCA9IChmdW5jdGlvbiBjdXN0b20oYSwgcCkge1xuICB2YXIgcyA9IE1hdGguYXNpbigxIC8gKGEgPSBNYXRoLm1heCgxLCBhKSkpICogKHAgLz0gdGF1KTtcblxuICBmdW5jdGlvbiBlbGFzdGljT3V0KHQpIHtcbiAgICByZXR1cm4gMSAtIGEgKiBNYXRoLnBvdygyLCAtMTAgKiAodCA9ICt0KSkgKiBNYXRoLnNpbigodCArIHMpIC8gcCk7XG4gIH1cblxuICBlbGFzdGljT3V0LmFtcGxpdHVkZSA9IGZ1bmN0aW9uKGEpIHsgcmV0dXJuIGN1c3RvbShhLCBwICogdGF1KTsgfTtcbiAgZWxhc3RpY091dC5wZXJpb2QgPSBmdW5jdGlvbihwKSB7IHJldHVybiBjdXN0b20oYSwgcCk7IH07XG5cbiAgcmV0dXJuIGVsYXN0aWNPdXQ7XG59KShhbXBsaXR1ZGUsIHBlcmlvZCk7XG5cbmV4cG9ydCB2YXIgZWxhc3RpY0luT3V0ID0gKGZ1bmN0aW9uIGN1c3RvbShhLCBwKSB7XG4gIHZhciBzID0gTWF0aC5hc2luKDEgLyAoYSA9IE1hdGgubWF4KDEsIGEpKSkgKiAocCAvPSB0YXUpO1xuXG4gIGZ1bmN0aW9uIGVsYXN0aWNJbk91dCh0KSB7XG4gICAgcmV0dXJuICgodCA9IHQgKiAyIC0gMSkgPCAwXG4gICAgICAgID8gYSAqIE1hdGgucG93KDIsIDEwICogdCkgKiBNYXRoLnNpbigocyAtIHQpIC8gcClcbiAgICAgICAgOiAyIC0gYSAqIE1hdGgucG93KDIsIC0xMCAqIHQpICogTWF0aC5zaW4oKHMgKyB0KSAvIHApKSAvIDI7XG4gIH1cblxuICBlbGFzdGljSW5PdXQuYW1wbGl0dWRlID0gZnVuY3Rpb24oYSkgeyByZXR1cm4gY3VzdG9tKGEsIHAgKiB0YXUpOyB9O1xuICBlbGFzdGljSW5PdXQucGVyaW9kID0gZnVuY3Rpb24ocCkgeyByZXR1cm4gY3VzdG9tKGEsIHApOyB9O1xuXG4gIHJldHVybiBlbGFzdGljSW5PdXQ7XG59KShhbXBsaXR1ZGUsIHBlcmlvZCk7XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnRlcnJ1cHQgZnJvbSBcIi4vaW50ZXJydXB0XCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RyYW5zaXRpb24gZnJvbSBcIi4vdHJhbnNpdGlvblwiO1xuXG5zZWxlY3Rpb24ucHJvdG90eXBlLmludGVycnVwdCA9IHNlbGVjdGlvbl9pbnRlcnJ1cHQ7XG5zZWxlY3Rpb24ucHJvdG90eXBlLnRyYW5zaXRpb24gPSBzZWxlY3Rpb25fdHJhbnNpdGlvbjtcbiIsImV4cG9ydCB2YXIgY29zID0gTWF0aC5jb3M7XG5leHBvcnQgdmFyIHNpbiA9IE1hdGguc2luO1xuZXhwb3J0IHZhciBwaSA9IE1hdGguUEk7XG5leHBvcnQgdmFyIGhhbGZQaSA9IHBpIC8gMjtcbmV4cG9ydCB2YXIgdGF1ID0gcGkgKiAyO1xuZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbiIsImltcG9ydCBkc3YgZnJvbSBcIi4vZHN2XCI7XG5cbnZhciBjc3YgPSBkc3YoXCIsXCIpO1xuXG5leHBvcnQgdmFyIGNzdlBhcnNlID0gY3N2LnBhcnNlO1xuZXhwb3J0IHZhciBjc3ZQYXJzZVJvd3MgPSBjc3YucGFyc2VSb3dzO1xuZXhwb3J0IHZhciBjc3ZGb3JtYXQgPSBjc3YuZm9ybWF0O1xuZXhwb3J0IHZhciBjc3ZGb3JtYXRSb3dzID0gY3N2LmZvcm1hdFJvd3M7XG4iLCJpbXBvcnQgZHN2IGZyb20gXCIuL2RzdlwiO1xuXG52YXIgdHN2ID0gZHN2KFwiXFx0XCIpO1xuXG5leHBvcnQgdmFyIHRzdlBhcnNlID0gdHN2LnBhcnNlO1xuZXhwb3J0IHZhciB0c3ZQYXJzZVJvd3MgPSB0c3YucGFyc2VSb3dzO1xuZXhwb3J0IHZhciB0c3ZGb3JtYXQgPSB0c3YuZm9ybWF0O1xuZXhwb3J0IHZhciB0c3ZGb3JtYXRSb3dzID0gdHN2LmZvcm1hdFJvd3M7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5KSB7XG4gIGlmIChpc05hTih4ID0gK3gpIHx8IGlzTmFOKHkgPSAreSkpIHJldHVybiB0aGlzOyAvLyBpZ25vcmUgaW52YWxpZCBwb2ludHNcblxuICB2YXIgeDAgPSB0aGlzLl94MCxcbiAgICAgIHkwID0gdGhpcy5feTAsXG4gICAgICB4MSA9IHRoaXMuX3gxLFxuICAgICAgeTEgPSB0aGlzLl95MTtcblxuICAvLyBJZiB0aGUgcXVhZHRyZWUgaGFzIG5vIGV4dGVudCwgaW5pdGlhbGl6ZSB0aGVtLlxuICAvLyBJbnRlZ2VyIGV4dGVudCBhcmUgbmVjZXNzYXJ5IHNvIHRoYXQgaWYgd2UgbGF0ZXIgZG91YmxlIHRoZSBleHRlbnQsXG4gIC8vIHRoZSBleGlzdGluZyBxdWFkcmFudCBib3VuZGFyaWVzIGRvbuKAmXQgY2hhbmdlIGR1ZSB0byBmbG9hdGluZyBwb2ludCBlcnJvciFcbiAgaWYgKGlzTmFOKHgwKSkge1xuICAgIHgxID0gKHgwID0gTWF0aC5mbG9vcih4KSkgKyAxO1xuICAgIHkxID0gKHkwID0gTWF0aC5mbG9vcih5KSkgKyAxO1xuICB9XG5cbiAgLy8gT3RoZXJ3aXNlLCBkb3VibGUgcmVwZWF0ZWRseSB0byBjb3Zlci5cbiAgZWxzZSBpZiAoeDAgPiB4IHx8IHggPiB4MSB8fCB5MCA+IHkgfHwgeSA+IHkxKSB7XG4gICAgdmFyIHogPSB4MSAtIHgwLFxuICAgICAgICBub2RlID0gdGhpcy5fcm9vdCxcbiAgICAgICAgcGFyZW50LFxuICAgICAgICBpO1xuXG4gICAgc3dpdGNoIChpID0gKHkgPCAoeTAgKyB5MSkgLyAyKSA8PCAxIHwgKHggPCAoeDAgKyB4MSkgLyAyKSkge1xuICAgICAgY2FzZSAwOiB7XG4gICAgICAgIGRvIHBhcmVudCA9IG5ldyBBcnJheSg0KSwgcGFyZW50W2ldID0gbm9kZSwgbm9kZSA9IHBhcmVudDtcbiAgICAgICAgd2hpbGUgKHogKj0gMiwgeDEgPSB4MCArIHosIHkxID0geTAgKyB6LCB4ID4geDEgfHwgeSA+IHkxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIDE6IHtcbiAgICAgICAgZG8gcGFyZW50ID0gbmV3IEFycmF5KDQpLCBwYXJlbnRbaV0gPSBub2RlLCBub2RlID0gcGFyZW50O1xuICAgICAgICB3aGlsZSAoeiAqPSAyLCB4MCA9IHgxIC0geiwgeTEgPSB5MCArIHosIHgwID4geCB8fCB5ID4geTEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgMjoge1xuICAgICAgICBkbyBwYXJlbnQgPSBuZXcgQXJyYXkoNCksIHBhcmVudFtpXSA9IG5vZGUsIG5vZGUgPSBwYXJlbnQ7XG4gICAgICAgIHdoaWxlICh6ICo9IDIsIHgxID0geDAgKyB6LCB5MCA9IHkxIC0geiwgeCA+IHgxIHx8IHkwID4geSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAzOiB7XG4gICAgICAgIGRvIHBhcmVudCA9IG5ldyBBcnJheSg0KSwgcGFyZW50W2ldID0gbm9kZSwgbm9kZSA9IHBhcmVudDtcbiAgICAgICAgd2hpbGUgKHogKj0gMiwgeDAgPSB4MSAtIHosIHkwID0geTEgLSB6LCB4MCA+IHggfHwgeTAgPiB5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Jvb3QgJiYgdGhpcy5fcm9vdC5sZW5ndGgpIHRoaXMuX3Jvb3QgPSBub2RlO1xuICB9XG5cbiAgLy8gSWYgdGhlIHF1YWR0cmVlIGNvdmVycyB0aGUgcG9pbnQgYWxyZWFkeSwganVzdCByZXR1cm4uXG4gIGVsc2UgcmV0dXJuIHRoaXM7XG5cbiAgdGhpcy5feDAgPSB4MDtcbiAgdGhpcy5feTAgPSB5MDtcbiAgdGhpcy5feDEgPSB4MTtcbiAgdGhpcy5feTEgPSB5MTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGEgPSBbXTtcbiAgdGhpcy52aXNpdChmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCFub2RlLmxlbmd0aCkgZG8gZGF0YS5wdXNoKG5vZGUuZGF0YSk7IHdoaWxlIChub2RlID0gbm9kZS5uZXh0KVxuICB9KTtcbiAgcmV0dXJuIGRhdGE7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihfKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuY292ZXIoK19bMF1bMF0sICtfWzBdWzFdKS5jb3ZlcigrX1sxXVswXSwgK19bMV1bMV0pXG4gICAgICA6IGlzTmFOKHRoaXMuX3gwKSA/IHVuZGVmaW5lZCA6IFtbdGhpcy5feDAsIHRoaXMuX3kwXSwgW3RoaXMuX3gxLCB0aGlzLl95MV1dO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdGhpcy5ub2RlID0gbm9kZTtcbiAgdGhpcy54MCA9IHgwO1xuICB0aGlzLnkwID0geTA7XG4gIHRoaXMueDEgPSB4MTtcbiAgdGhpcy55MSA9IHkxO1xufVxuIiwiaW1wb3J0IFF1YWQgZnJvbSBcIi4vcXVhZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5LCByYWRpdXMpIHtcbiAgdmFyIGRhdGEsXG4gICAgICB4MCA9IHRoaXMuX3gwLFxuICAgICAgeTAgPSB0aGlzLl95MCxcbiAgICAgIHgxLFxuICAgICAgeTEsXG4gICAgICB4MixcbiAgICAgIHkyLFxuICAgICAgeDMgPSB0aGlzLl94MSxcbiAgICAgIHkzID0gdGhpcy5feTEsXG4gICAgICBxdWFkcyA9IFtdLFxuICAgICAgbm9kZSA9IHRoaXMuX3Jvb3QsXG4gICAgICBxLFxuICAgICAgaTtcblxuICBpZiAobm9kZSkgcXVhZHMucHVzaChuZXcgUXVhZChub2RlLCB4MCwgeTAsIHgzLCB5MykpO1xuICBpZiAocmFkaXVzID09IG51bGwpIHJhZGl1cyA9IEluZmluaXR5O1xuICBlbHNlIHtcbiAgICB4MCA9IHggLSByYWRpdXMsIHkwID0geSAtIHJhZGl1cztcbiAgICB4MyA9IHggKyByYWRpdXMsIHkzID0geSArIHJhZGl1cztcbiAgICByYWRpdXMgKj0gcmFkaXVzO1xuICB9XG5cbiAgd2hpbGUgKHEgPSBxdWFkcy5wb3AoKSkge1xuXG4gICAgLy8gU3RvcCBzZWFyY2hpbmcgaWYgdGhpcyBxdWFkcmFudCBjYW7igJl0IGNvbnRhaW4gYSBjbG9zZXIgbm9kZS5cbiAgICBpZiAoIShub2RlID0gcS5ub2RlKVxuICAgICAgICB8fCAoeDEgPSBxLngwKSA+IHgzXG4gICAgICAgIHx8ICh5MSA9IHEueTApID4geTNcbiAgICAgICAgfHwgKHgyID0gcS54MSkgPCB4MFxuICAgICAgICB8fCAoeTIgPSBxLnkxKSA8IHkwKSBjb250aW51ZTtcblxuICAgIC8vIEJpc2VjdCB0aGUgY3VycmVudCBxdWFkcmFudC5cbiAgICBpZiAobm9kZS5sZW5ndGgpIHtcbiAgICAgIHZhciB4bSA9ICh4MSArIHgyKSAvIDIsXG4gICAgICAgICAgeW0gPSAoeTEgKyB5MikgLyAyO1xuXG4gICAgICBxdWFkcy5wdXNoKFxuICAgICAgICBuZXcgUXVhZChub2RlWzNdLCB4bSwgeW0sIHgyLCB5MiksXG4gICAgICAgIG5ldyBRdWFkKG5vZGVbMl0sIHgxLCB5bSwgeG0sIHkyKSxcbiAgICAgICAgbmV3IFF1YWQobm9kZVsxXSwgeG0sIHkxLCB4MiwgeW0pLFxuICAgICAgICBuZXcgUXVhZChub2RlWzBdLCB4MSwgeTEsIHhtLCB5bSlcbiAgICAgICk7XG5cbiAgICAgIC8vIFZpc2l0IHRoZSBjbG9zZXN0IHF1YWRyYW50IGZpcnN0LlxuICAgICAgaWYgKGkgPSAoeSA+PSB5bSkgPDwgMSB8ICh4ID49IHhtKSkge1xuICAgICAgICBxID0gcXVhZHNbcXVhZHMubGVuZ3RoIC0gMV07XG4gICAgICAgIHF1YWRzW3F1YWRzLmxlbmd0aCAtIDFdID0gcXVhZHNbcXVhZHMubGVuZ3RoIC0gMSAtIGldO1xuICAgICAgICBxdWFkc1txdWFkcy5sZW5ndGggLSAxIC0gaV0gPSBxO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZpc2l0IHRoaXMgcG9pbnQuIChWaXNpdGluZyBjb2luY2lkZW50IHBvaW50cyBpc27igJl0IG5lY2Vzc2FyeSEpXG4gICAgZWxzZSB7XG4gICAgICB2YXIgZHggPSB4IC0gK3RoaXMuX3guY2FsbChudWxsLCBub2RlLmRhdGEpLFxuICAgICAgICAgIGR5ID0geSAtICt0aGlzLl95LmNhbGwobnVsbCwgbm9kZS5kYXRhKSxcbiAgICAgICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5O1xuICAgICAgaWYgKGQyIDwgcmFkaXVzKSB7XG4gICAgICAgIHZhciBkID0gTWF0aC5zcXJ0KHJhZGl1cyA9IGQyKTtcbiAgICAgICAgeDAgPSB4IC0gZCwgeTAgPSB5IC0gZDtcbiAgICAgICAgeDMgPSB4ICsgZCwgeTMgPSB5ICsgZDtcbiAgICAgICAgZGF0YSA9IG5vZGUuZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcm9vdDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2l6ZSA9IDA7XG4gIHRoaXMudmlzaXQoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS5sZW5ndGgpIGRvICsrc2l6ZTsgd2hpbGUgKG5vZGUgPSBub2RlLm5leHQpXG4gIH0pO1xuICByZXR1cm4gc2l6ZTtcbn1cbiIsImltcG9ydCBRdWFkIGZyb20gXCIuL3F1YWRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIHF1YWRzID0gW10sIHEsIG5vZGUgPSB0aGlzLl9yb290LCBjaGlsZCwgeDAsIHkwLCB4MSwgeTE7XG4gIGlmIChub2RlKSBxdWFkcy5wdXNoKG5ldyBRdWFkKG5vZGUsIHRoaXMuX3gwLCB0aGlzLl95MCwgdGhpcy5feDEsIHRoaXMuX3kxKSk7XG4gIHdoaWxlIChxID0gcXVhZHMucG9wKCkpIHtcbiAgICBpZiAoIWNhbGxiYWNrKG5vZGUgPSBxLm5vZGUsIHgwID0gcS54MCwgeTAgPSBxLnkwLCB4MSA9IHEueDEsIHkxID0gcS55MSkgJiYgbm9kZS5sZW5ndGgpIHtcbiAgICAgIHZhciB4bSA9ICh4MCArIHgxKSAvIDIsIHltID0gKHkwICsgeTEpIC8gMjtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbM10pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHhtLCB5bSwgeDEsIHkxKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzJdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4MCwgeW0sIHhtLCB5MSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsxXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeG0sIHkwLCB4MSwgeW0pKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMF0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5MCwgeG0sIHltKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IFF1YWQgZnJvbSBcIi4vcXVhZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgcXVhZHMgPSBbXSwgbmV4dCA9IFtdLCBxO1xuICBpZiAodGhpcy5fcm9vdCkgcXVhZHMucHVzaChuZXcgUXVhZCh0aGlzLl9yb290LCB0aGlzLl94MCwgdGhpcy5feTAsIHRoaXMuX3gxLCB0aGlzLl95MSkpO1xuICB3aGlsZSAocSA9IHF1YWRzLnBvcCgpKSB7XG4gICAgdmFyIG5vZGUgPSBxLm5vZGU7XG4gICAgaWYgKG5vZGUubGVuZ3RoKSB7XG4gICAgICB2YXIgY2hpbGQsIHgwID0gcS54MCwgeTAgPSBxLnkwLCB4MSA9IHEueDEsIHkxID0gcS55MSwgeG0gPSAoeDAgKyB4MSkgLyAyLCB5bSA9ICh5MCArIHkxKSAvIDI7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzBdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4MCwgeTAsIHhtLCB5bSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsxXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeG0sIHkwLCB4MSwgeW0pKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMl0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5bSwgeG0sIHkxKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzNdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4bSwgeW0sIHgxLCB5MSkpO1xuICAgIH1cbiAgICBuZXh0LnB1c2gocSk7XG4gIH1cbiAgd2hpbGUgKHEgPSBuZXh0LnBvcCgpKSB7XG4gICAgY2FsbGJhY2socS5ub2RlLCBxLngwLCBxLnkwLCBxLngxLCBxLnkxKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsIi8vIENvbXB1dGVzIHRoZSBkZWNpbWFsIGNvZWZmaWNpZW50IGFuZCBleHBvbmVudCBvZiB0aGUgc3BlY2lmaWVkIG51bWJlciB4IHdpdGhcbi8vIHNpZ25pZmljYW50IGRpZ2l0cyBwLCB3aGVyZSB4IGlzIHBvc2l0aXZlIGFuZCBwIGlzIGluIFsxLCAyMV0gb3IgdW5kZWZpbmVkLlxuLy8gRm9yIGV4YW1wbGUsIGZvcm1hdERlY2ltYWwoMS4yMykgcmV0dXJucyBbXCIxMjNcIiwgMF0uXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIGlmICgoaSA9ICh4ID0gcCA/IHgudG9FeHBvbmVudGlhbChwIC0gMSkgOiB4LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZihcImVcIikpIDwgMCkgcmV0dXJuIG51bGw7IC8vIE5hTiwgwrFJbmZpbml0eVxuICB2YXIgaSwgY29lZmZpY2llbnQgPSB4LnNsaWNlKDAsIGkpO1xuXG4gIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdG9FeHBvbmVudGlhbCBlaXRoZXIgaGFzIHRoZSBmb3JtIFxcZFxcLlxcZCtlWy0rXVxcZCtcbiAgLy8gKGUuZy4sIDEuMmUrMykgb3IgdGhlIGZvcm0gXFxkZVstK11cXGQrIChlLmcuLCAxZSszKS5cbiAgcmV0dXJuIFtcbiAgICBjb2VmZmljaWVudC5sZW5ndGggPiAxID8gY29lZmZpY2llbnRbMF0gKyBjb2VmZmljaWVudC5zbGljZSgyKSA6IGNvZWZmaWNpZW50LFxuICAgICt4LnNsaWNlKGkgKyAxKVxuICBdO1xufVxuIiwiaW1wb3J0IGZvcm1hdERlY2ltYWwgZnJvbSBcIi4vZm9ybWF0RGVjaW1hbFwiO1xuXG5leHBvcnQgdmFyIHByZWZpeEV4cG9uZW50O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIHZhciBkID0gZm9ybWF0RGVjaW1hbCh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV0sXG4gICAgICBpID0gZXhwb25lbnQgLSAocHJlZml4RXhwb25lbnQgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCAvIDMpKSkgKiAzKSArIDEsXG4gICAgICBuID0gY29lZmZpY2llbnQubGVuZ3RoO1xuICByZXR1cm4gaSA9PT0gbiA/IGNvZWZmaWNpZW50XG4gICAgICA6IGkgPiBuID8gY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoaSAtIG4gKyAxKS5qb2luKFwiMFwiKVxuICAgICAgOiBpID4gMCA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGkpICsgXCIuXCIgKyBjb2VmZmljaWVudC5zbGljZShpKVxuICAgICAgOiBcIjAuXCIgKyBuZXcgQXJyYXkoMSAtIGkpLmpvaW4oXCIwXCIpICsgZm9ybWF0RGVjaW1hbCh4LCBNYXRoLm1heCgwLCBwICsgaSAtIDEpKVswXTsgLy8gbGVzcyB0aGFuIDF5IVxufVxuIiwiaW1wb3J0IGZvcm1hdERlY2ltYWwgZnJvbSBcIi4vZm9ybWF0RGVjaW1hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4ID0gZm9ybWF0RGVjaW1hbChNYXRoLmFicyh4KSksIHggPyB4WzFdIDogTmFOO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZ3JvdXBpbmcsIHRob3VzYW5kcykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5sZW5ndGgsXG4gICAgICAgIHQgPSBbXSxcbiAgICAgICAgaiA9IDAsXG4gICAgICAgIGcgPSBncm91cGluZ1swXSxcbiAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xuICAgICAgaWYgKGxlbmd0aCArIGcgKyAxID4gd2lkdGgpIGcgPSBNYXRoLm1heCgxLCB3aWR0aCAtIGxlbmd0aCk7XG4gICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTtcbiAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcbiAgICAgIGcgPSBncm91cGluZ1tqID0gKGogKyAxKSAlIGdyb3VwaW5nLmxlbmd0aF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG51bWVyYWxzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bMC05XS9nLCBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gbnVtZXJhbHNbK2ldO1xuICAgIH0pO1xuICB9O1xufVxuIiwiaW1wb3J0IGZvcm1hdERlY2ltYWwgZnJvbSBcIi4vZm9ybWF0RGVjaW1hbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCBwKSB7XG4gIHZhciBkID0gZm9ybWF0RGVjaW1hbCh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV07XG4gIHJldHVybiBleHBvbmVudCA8IDAgPyBcIjAuXCIgKyBuZXcgQXJyYXkoLWV4cG9uZW50KS5qb2luKFwiMFwiKSArIGNvZWZmaWNpZW50XG4gICAgICA6IGNvZWZmaWNpZW50Lmxlbmd0aCA+IGV4cG9uZW50ICsgMSA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGV4cG9uZW50ICsgMSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGV4cG9uZW50ICsgMSlcbiAgICAgIDogY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoZXhwb25lbnQgLSBjb2VmZmljaWVudC5sZW5ndGggKyAyKS5qb2luKFwiMFwiKTtcbn1cbiIsImltcG9ydCBmb3JtYXREZWZhdWx0IGZyb20gXCIuL2Zvcm1hdERlZmF1bHRcIjtcbmltcG9ydCBmb3JtYXRQcmVmaXhBdXRvIGZyb20gXCIuL2Zvcm1hdFByZWZpeEF1dG9cIjtcbmltcG9ydCBmb3JtYXRSb3VuZGVkIGZyb20gXCIuL2Zvcm1hdFJvdW5kZWRcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBcIlwiOiBmb3JtYXREZWZhdWx0LFxuICBcIiVcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4gKHggKiAxMDApLnRvRml4ZWQocCk7IH0sXG4gIFwiYlwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDIpOyB9LFxuICBcImNcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4geCArIFwiXCI7IH0sXG4gIFwiZFwiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDEwKTsgfSxcbiAgXCJlXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9FeHBvbmVudGlhbChwKTsgfSxcbiAgXCJmXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9GaXhlZChwKTsgfSxcbiAgXCJnXCI6IGZ1bmN0aW9uKHgsIHApIHsgcmV0dXJuIHgudG9QcmVjaXNpb24ocCk7IH0sXG4gIFwib1wiOiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDgpOyB9LFxuICBcInBcIjogZnVuY3Rpb24oeCwgcCkgeyByZXR1cm4gZm9ybWF0Um91bmRlZCh4ICogMTAwLCBwKTsgfSxcbiAgXCJyXCI6IGZvcm1hdFJvdW5kZWQsXG4gIFwic1wiOiBmb3JtYXRQcmVmaXhBdXRvLFxuICBcIlhcIjogZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5yb3VuZCh4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTsgfSxcbiAgXCJ4XCI6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpOyB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB4ID0geC50b1ByZWNpc2lvbihwKTtcblxuICBvdXQ6IGZvciAodmFyIG4gPSB4Lmxlbmd0aCwgaSA9IDEsIGkwID0gLTEsIGkxOyBpIDwgbjsgKytpKSB7XG4gICAgc3dpdGNoICh4W2ldKSB7XG4gICAgICBjYXNlIFwiLlwiOiBpMCA9IGkxID0gaTsgYnJlYWs7XG4gICAgICBjYXNlIFwiMFwiOiBpZiAoaTAgPT09IDApIGkwID0gaTsgaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCJlXCI6IGJyZWFrIG91dDtcbiAgICAgIGRlZmF1bHQ6IGlmIChpMCA+IDApIGkwID0gMDsgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGkwID4gMCA/IHguc2xpY2UoMCwgaTApICsgeC5zbGljZShpMSArIDEpIDogeDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJpbXBvcnQgZm9ybWF0TG9jYWxlIGZyb20gXCIuL2xvY2FsZVwiO1xuXG52YXIgbG9jYWxlO1xuZXhwb3J0IHZhciBmb3JtYXQ7XG5leHBvcnQgdmFyIGZvcm1hdFByZWZpeDtcblxuZGVmYXVsdExvY2FsZSh7XG4gIGRlY2ltYWw6IFwiLlwiLFxuICB0aG91c2FuZHM6IFwiLFwiLFxuICBncm91cGluZzogWzNdLFxuICBjdXJyZW5jeTogW1wiJFwiLCBcIlwiXVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoZGVmaW5pdGlvbik7XG4gIGZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIGZvcm1hdFByZWZpeCA9IGxvY2FsZS5mb3JtYXRQcmVmaXg7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnRcIjtcbmltcG9ydCBmb3JtYXRHcm91cCBmcm9tIFwiLi9mb3JtYXRHcm91cFwiO1xuaW1wb3J0IGZvcm1hdE51bWVyYWxzIGZyb20gXCIuL2Zvcm1hdE51bWVyYWxzXCI7XG5pbXBvcnQgZm9ybWF0U3BlY2lmaWVyIGZyb20gXCIuL2Zvcm1hdFNwZWNpZmllclwiO1xuaW1wb3J0IGZvcm1hdFR5cGVzIGZyb20gXCIuL2Zvcm1hdFR5cGVzXCI7XG5pbXBvcnQge3ByZWZpeEV4cG9uZW50fSBmcm9tIFwiLi9mb3JtYXRQcmVmaXhBdXRvXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHlcIjtcblxudmFyIHByZWZpeGVzID0gW1wieVwiLFwielwiLFwiYVwiLFwiZlwiLFwicFwiLFwiblwiLFwiwrVcIixcIm1cIixcIlwiLFwia1wiLFwiTVwiLFwiR1wiLFwiVFwiLFwiUFwiLFwiRVwiLFwiWlwiLFwiWVwiXTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obG9jYWxlKSB7XG4gIHZhciBncm91cCA9IGxvY2FsZS5ncm91cGluZyAmJiBsb2NhbGUudGhvdXNhbmRzID8gZm9ybWF0R3JvdXAobG9jYWxlLmdyb3VwaW5nLCBsb2NhbGUudGhvdXNhbmRzKSA6IGlkZW50aXR5LFxuICAgICAgY3VycmVuY3kgPSBsb2NhbGUuY3VycmVuY3ksXG4gICAgICBkZWNpbWFsID0gbG9jYWxlLmRlY2ltYWwsXG4gICAgICBudW1lcmFscyA9IGxvY2FsZS5udW1lcmFscyA/IGZvcm1hdE51bWVyYWxzKGxvY2FsZS5udW1lcmFscykgOiBpZGVudGl0eSxcbiAgICAgIHBlcmNlbnQgPSBsb2NhbGUucGVyY2VudCB8fCBcIiVcIjtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyKSB7XG4gICAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllcik7XG5cbiAgICB2YXIgZmlsbCA9IHNwZWNpZmllci5maWxsLFxuICAgICAgICBhbGlnbiA9IHNwZWNpZmllci5hbGlnbixcbiAgICAgICAgc2lnbiA9IHNwZWNpZmllci5zaWduLFxuICAgICAgICBzeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sLFxuICAgICAgICB6ZXJvID0gc3BlY2lmaWVyLnplcm8sXG4gICAgICAgIHdpZHRoID0gc3BlY2lmaWVyLndpZHRoLFxuICAgICAgICBjb21tYSA9IHNwZWNpZmllci5jb21tYSxcbiAgICAgICAgcHJlY2lzaW9uID0gc3BlY2lmaWVyLnByZWNpc2lvbixcbiAgICAgICAgdHlwZSA9IHNwZWNpZmllci50eXBlO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgLy8gRm9yIFNJLXByZWZpeCwgdGhlIHN1ZmZpeCBpcyBsYXppbHkgY29tcHV0ZWQuXG4gICAgdmFyIHByZWZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVswXSA6IHN5bWJvbCA9PT0gXCIjXCIgJiYgL1tib3hYXS8udGVzdCh0eXBlKSA/IFwiMFwiICsgdHlwZS50b0xvd2VyQ2FzZSgpIDogXCJcIixcbiAgICAgICAgc3VmZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5WzFdIDogL1slcF0vLnRlc3QodHlwZSkgPyBwZXJjZW50IDogXCJcIjtcblxuICAgIC8vIFdoYXQgZm9ybWF0IGZ1bmN0aW9uIHNob3VsZCB3ZSB1c2U/XG4gICAgLy8gSXMgdGhpcyBhbiBpbnRlZ2VyIHR5cGU/XG4gICAgLy8gQ2FuIHRoaXMgdHlwZSBnZW5lcmF0ZSBleHBvbmVudGlhbCBub3RhdGlvbj9cbiAgICB2YXIgZm9ybWF0VHlwZSA9IGZvcm1hdFR5cGVzW3R5cGVdLFxuICAgICAgICBtYXliZVN1ZmZpeCA9ICF0eXBlIHx8IC9bZGVmZ3BycyVdLy50ZXN0KHR5cGUpO1xuXG4gICAgLy8gU2V0IHRoZSBkZWZhdWx0IHByZWNpc2lvbiBpZiBub3Qgc3BlY2lmaWVkLFxuICAgIC8vIG9yIGNsYW1wIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uIHRvIHRoZSBzdXBwb3J0ZWQgcmFuZ2UuXG4gICAgLy8gRm9yIHNpZ25pZmljYW50IHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMSwgMjFdLlxuICAgIC8vIEZvciBmaXhlZCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzAsIDIwXS5cbiAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24gPT0gbnVsbCA/ICh0eXBlID8gNiA6IDEyKVxuICAgICAgICA6IC9bZ3Byc10vLnRlc3QodHlwZSkgPyBNYXRoLm1heCgxLCBNYXRoLm1pbigyMSwgcHJlY2lzaW9uKSlcbiAgICAgICAgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigyMCwgcHJlY2lzaW9uKSk7XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQodmFsdWUpIHtcbiAgICAgIHZhciB2YWx1ZVByZWZpeCA9IHByZWZpeCxcbiAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IHN1ZmZpeCxcbiAgICAgICAgICBpLCBuLCBjO1xuXG4gICAgICBpZiAodHlwZSA9PT0gXCJjXCIpIHtcbiAgICAgICAgdmFsdWVTdWZmaXggPSBmb3JtYXRUeXBlKHZhbHVlKSArIHZhbHVlU3VmZml4O1xuICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcblxuICAgICAgICAvLyBQZXJmb3JtIHRoZSBpbml0aWFsIGZvcm1hdHRpbmcuXG4gICAgICAgIHZhciB2YWx1ZU5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICAgICAgICB2YWx1ZSA9IGZvcm1hdFR5cGUoTWF0aC5hYnModmFsdWUpLCBwcmVjaXNpb24pO1xuXG4gICAgICAgIC8vIElmIGEgbmVnYXRpdmUgdmFsdWUgcm91bmRzIHRvIHplcm8gZHVyaW5nIGZvcm1hdHRpbmcsIHRyZWF0IGFzIHBvc2l0aXZlLlxuICAgICAgICBpZiAodmFsdWVOZWdhdGl2ZSAmJiArdmFsdWUgPT09IDApIHZhbHVlTmVnYXRpdmUgPSBmYWxzZTtcblxuICAgICAgICAvLyBDb21wdXRlIHRoZSBwcmVmaXggYW5kIHN1ZmZpeC5cbiAgICAgICAgdmFsdWVQcmVmaXggPSAodmFsdWVOZWdhdGl2ZSA/IChzaWduID09PSBcIihcIiA/IHNpZ24gOiBcIi1cIikgOiBzaWduID09PSBcIi1cIiB8fCBzaWduID09PSBcIihcIiA/IFwiXCIgOiBzaWduKSArIHZhbHVlUHJlZml4O1xuICAgICAgICB2YWx1ZVN1ZmZpeCA9IHZhbHVlU3VmZml4ICsgKHR5cGUgPT09IFwic1wiID8gcHJlZml4ZXNbOCArIHByZWZpeEV4cG9uZW50IC8gM10gOiBcIlwiKSArICh2YWx1ZU5lZ2F0aXZlICYmIHNpZ24gPT09IFwiKFwiID8gXCIpXCIgOiBcIlwiKTtcblxuICAgICAgICAvLyBCcmVhayB0aGUgZm9ybWF0dGVkIHZhbHVlIGludG8gdGhlIGludGVnZXIg4oCcdmFsdWXigJ0gcGFydCB0aGF0IGNhbiBiZVxuICAgICAgICAvLyBncm91cGVkLCBhbmQgZnJhY3Rpb25hbCBvciBleHBvbmVudGlhbCDigJxzdWZmaXjigJ0gcGFydCB0aGF0IGlzIG5vdC5cbiAgICAgICAgaWYgKG1heWJlU3VmZml4KSB7XG4gICAgICAgICAgaSA9IC0xLCBuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgICAgICBpZiAoYyA9IHZhbHVlLmNoYXJDb2RlQXQoaSksIDQ4ID4gYyB8fCBjID4gNTcpIHtcbiAgICAgICAgICAgICAgdmFsdWVTdWZmaXggPSAoYyA9PT0gNDYgPyBkZWNpbWFsICsgdmFsdWUuc2xpY2UoaSArIDEpIDogdmFsdWUuc2xpY2UoaSkpICsgdmFsdWVTdWZmaXg7XG4gICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgbm90IFwiMFwiLCBncm91cGluZyBpcyBhcHBsaWVkIGJlZm9yZSBwYWRkaW5nLlxuICAgICAgaWYgKGNvbW1hICYmICF6ZXJvKSB2YWx1ZSA9IGdyb3VwKHZhbHVlLCBJbmZpbml0eSk7XG5cbiAgICAgIC8vIENvbXB1dGUgdGhlIHBhZGRpbmcuXG4gICAgICB2YXIgbGVuZ3RoID0gdmFsdWVQcmVmaXgubGVuZ3RoICsgdmFsdWUubGVuZ3RoICsgdmFsdWVTdWZmaXgubGVuZ3RoLFxuICAgICAgICAgIHBhZGRpbmcgPSBsZW5ndGggPCB3aWR0aCA/IG5ldyBBcnJheSh3aWR0aCAtIGxlbmd0aCArIDEpLmpvaW4oZmlsbCkgOiBcIlwiO1xuXG4gICAgICAvLyBJZiB0aGUgZmlsbCBjaGFyYWN0ZXIgaXMgXCIwXCIsIGdyb3VwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcGFkZGluZy5cbiAgICAgIGlmIChjb21tYSAmJiB6ZXJvKSB2YWx1ZSA9IGdyb3VwKHBhZGRpbmcgKyB2YWx1ZSwgcGFkZGluZy5sZW5ndGggPyB3aWR0aCAtIHZhbHVlU3VmZml4Lmxlbmd0aCA6IEluZmluaXR5KSwgcGFkZGluZyA9IFwiXCI7XG5cbiAgICAgIC8vIFJlY29uc3RydWN0IHRoZSBmaW5hbCBvdXRwdXQgYmFzZWQgb24gdGhlIGRlc2lyZWQgYWxpZ25tZW50LlxuICAgICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgICBjYXNlIFwiPFwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmc7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiPVwiOiB2YWx1ZSA9IHZhbHVlUHJlZml4ICsgcGFkZGluZyArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xuICAgICAgICBjYXNlIFwiXlwiOiB2YWx1ZSA9IHBhZGRpbmcuc2xpY2UoMCwgbGVuZ3RoID0gcGFkZGluZy5sZW5ndGggPj4gMSkgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXggKyBwYWRkaW5nLnNsaWNlKGxlbmd0aCk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiB2YWx1ZSA9IHBhZGRpbmcgKyB2YWx1ZVByZWZpeCArIHZhbHVlICsgdmFsdWVTdWZmaXg7IGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVtZXJhbHModmFsdWUpO1xuICAgIH1cblxuICAgIGZvcm1hdC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHNwZWNpZmllciArIFwiXCI7XG4gICAgfTtcblxuICAgIHJldHVybiBmb3JtYXQ7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQcmVmaXgoc3BlY2lmaWVyLCB2YWx1ZSkge1xuICAgIHZhciBmID0gbmV3Rm9ybWF0KChzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSwgc3BlY2lmaWVyLnR5cGUgPSBcImZcIiwgc3BlY2lmaWVyKSksXG4gICAgICAgIGUgPSBNYXRoLm1heCgtOCwgTWF0aC5taW4oOCwgTWF0aC5mbG9vcihleHBvbmVudCh2YWx1ZSkgLyAzKSkpICogMyxcbiAgICAgICAgayA9IE1hdGgucG93KDEwLCAtZSksXG4gICAgICAgIHByZWZpeCA9IHByZWZpeGVzWzggKyBlIC8gM107XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gZihrICogdmFsdWUpICsgcHJlZml4O1xuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvcm1hdDogbmV3Rm9ybWF0LFxuICAgIGZvcm1hdFByZWZpeDogZm9ybWF0UHJlZml4XG4gIH07XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCkge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgLWV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgdmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzIC0gZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCBtYXgpIHtcbiAgc3RlcCA9IE1hdGguYWJzKHN0ZXApLCBtYXggPSBNYXRoLmFicyhtYXgpIC0gc3RlcDtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGV4cG9uZW50KG1heCkgLSBleHBvbmVudChzdGVwKSkgKyAxO1xufVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuL2FkZGVyXCI7XG5pbXBvcnQge2F0YW4yLCBjb3MsIHF1YXJ0ZXJQaSwgcmFkaWFucywgc2luLCB0YXV9IGZyb20gXCIuL21hdGhcIjtcbmltcG9ydCBub29wIGZyb20gXCIuL25vb3BcIjtcbmltcG9ydCBzdHJlYW0gZnJvbSBcIi4vc3RyZWFtXCI7XG5cbmV4cG9ydCB2YXIgYXJlYVJpbmdTdW0gPSBhZGRlcigpO1xuXG52YXIgYXJlYVN1bSA9IGFkZGVyKCksXG4gICAgbGFtYmRhMDAsXG4gICAgcGhpMDAsXG4gICAgbGFtYmRhMCxcbiAgICBjb3NQaGkwLFxuICAgIHNpblBoaTA7XG5cbmV4cG9ydCB2YXIgYXJlYVN0cmVhbSA9IHtcbiAgcG9pbnQ6IG5vb3AsXG4gIGxpbmVTdGFydDogbm9vcCxcbiAgbGluZUVuZDogbm9vcCxcbiAgcG9seWdvblN0YXJ0OiBmdW5jdGlvbigpIHtcbiAgICBhcmVhUmluZ1N1bS5yZXNldCgpO1xuICAgIGFyZWFTdHJlYW0ubGluZVN0YXJ0ID0gYXJlYVJpbmdTdGFydDtcbiAgICBhcmVhU3RyZWFtLmxpbmVFbmQgPSBhcmVhUmluZ0VuZDtcbiAgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZWFSaW5nID0gK2FyZWFSaW5nU3VtO1xuICAgIGFyZWFTdW0uYWRkKGFyZWFSaW5nIDwgMCA/IHRhdSArIGFyZWFSaW5nIDogYXJlYVJpbmcpO1xuICAgIHRoaXMubGluZVN0YXJ0ID0gdGhpcy5saW5lRW5kID0gdGhpcy5wb2ludCA9IG5vb3A7XG4gIH0sXG4gIHNwaGVyZTogZnVuY3Rpb24oKSB7XG4gICAgYXJlYVN1bS5hZGQodGF1KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gYXJlYVJpbmdTdGFydCgpIHtcbiAgYXJlYVN0cmVhbS5wb2ludCA9IGFyZWFQb2ludEZpcnN0O1xufVxuXG5mdW5jdGlvbiBhcmVhUmluZ0VuZCgpIHtcbiAgYXJlYVBvaW50KGxhbWJkYTAwLCBwaGkwMCk7XG59XG5cbmZ1bmN0aW9uIGFyZWFQb2ludEZpcnN0KGxhbWJkYSwgcGhpKSB7XG4gIGFyZWFTdHJlYW0ucG9pbnQgPSBhcmVhUG9pbnQ7XG4gIGxhbWJkYTAwID0gbGFtYmRhLCBwaGkwMCA9IHBoaTtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICBsYW1iZGEwID0gbGFtYmRhLCBjb3NQaGkwID0gY29zKHBoaSA9IHBoaSAvIDIgKyBxdWFydGVyUGkpLCBzaW5QaGkwID0gc2luKHBoaSk7XG59XG5cbmZ1bmN0aW9uIGFyZWFQb2ludChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIHBoaSA9IHBoaSAvIDIgKyBxdWFydGVyUGk7IC8vIGhhbGYgdGhlIGFuZ3VsYXIgZGlzdGFuY2UgZnJvbSBzb3V0aCBwb2xlXG5cbiAgLy8gU3BoZXJpY2FsIGV4Y2VzcyBFIGZvciBhIHNwaGVyaWNhbCB0cmlhbmdsZSB3aXRoIHZlcnRpY2VzOiBzb3V0aCBwb2xlLFxuICAvLyBwcmV2aW91cyBwb2ludCwgY3VycmVudCBwb2ludC4gIFVzZXMgYSBmb3JtdWxhIGRlcml2ZWQgZnJvbSBDYWdub2xp4oCZc1xuICAvLyB0aGVvcmVtLiAgU2VlIFRvZGh1bnRlciwgU3BoZXJpY2FsIFRyaWcuICgxODcxKSwgU2VjLiAxMDMsIEVxLiAoMikuXG4gIHZhciBkTGFtYmRhID0gbGFtYmRhIC0gbGFtYmRhMCxcbiAgICAgIHNkTGFtYmRhID0gZExhbWJkYSA+PSAwID8gMSA6IC0xLFxuICAgICAgYWRMYW1iZGEgPSBzZExhbWJkYSAqIGRMYW1iZGEsXG4gICAgICBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgIHNpblBoaSA9IHNpbihwaGkpLFxuICAgICAgayA9IHNpblBoaTAgKiBzaW5QaGksXG4gICAgICB1ID0gY29zUGhpMCAqIGNvc1BoaSArIGsgKiBjb3MoYWRMYW1iZGEpLFxuICAgICAgdiA9IGsgKiBzZExhbWJkYSAqIHNpbihhZExhbWJkYSk7XG4gIGFyZWFSaW5nU3VtLmFkZChhdGFuMih2LCB1KSk7XG5cbiAgLy8gQWR2YW5jZSB0aGUgcHJldmlvdXMgcG9pbnRzLlxuICBsYW1iZGEwID0gbGFtYmRhLCBjb3NQaGkwID0gY29zUGhpLCBzaW5QaGkwID0gc2luUGhpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvYmplY3QpIHtcbiAgYXJlYVN1bS5yZXNldCgpO1xuICBzdHJlYW0ob2JqZWN0LCBhcmVhU3RyZWFtKTtcbiAgcmV0dXJuIGFyZWFTdW0gKiAyO1xufVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuL2FkZGVyXCI7XG5pbXBvcnQge2FyZWFTdHJlYW0sIGFyZWFSaW5nU3VtfSBmcm9tIFwiLi9hcmVhXCI7XG5pbXBvcnQge2NhcnRlc2lhbiwgY2FydGVzaWFuQ3Jvc3MsIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UsIHNwaGVyaWNhbH0gZnJvbSBcIi4vY2FydGVzaWFuXCI7XG5pbXBvcnQge2FicywgZGVncmVlcywgZXBzaWxvbiwgcmFkaWFuc30gZnJvbSBcIi4vbWF0aFwiO1xuaW1wb3J0IHN0cmVhbSBmcm9tIFwiLi9zdHJlYW1cIjtcblxudmFyIGxhbWJkYTAsIHBoaTAsIGxhbWJkYTEsIHBoaTEsIC8vIGJvdW5kc1xuICAgIGxhbWJkYTIsIC8vIHByZXZpb3VzIGxhbWJkYS1jb29yZGluYXRlXG4gICAgbGFtYmRhMDAsIHBoaTAwLCAvLyBmaXJzdCBwb2ludFxuICAgIHAwLCAvLyBwcmV2aW91cyAzRCBwb2ludFxuICAgIGRlbHRhU3VtID0gYWRkZXIoKSxcbiAgICByYW5nZXMsXG4gICAgcmFuZ2U7XG5cbnZhciBib3VuZHNTdHJlYW0gPSB7XG4gIHBvaW50OiBib3VuZHNQb2ludCxcbiAgbGluZVN0YXJ0OiBib3VuZHNMaW5lU3RhcnQsXG4gIGxpbmVFbmQ6IGJvdW5kc0xpbmVFbmQsXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgYm91bmRzU3RyZWFtLnBvaW50ID0gYm91bmRzUmluZ1BvaW50O1xuICAgIGJvdW5kc1N0cmVhbS5saW5lU3RhcnQgPSBib3VuZHNSaW5nU3RhcnQ7XG4gICAgYm91bmRzU3RyZWFtLmxpbmVFbmQgPSBib3VuZHNSaW5nRW5kO1xuICAgIGRlbHRhU3VtLnJlc2V0KCk7XG4gICAgYXJlYVN0cmVhbS5wb2x5Z29uU3RhcnQoKTtcbiAgfSxcbiAgcG9seWdvbkVuZDogZnVuY3Rpb24oKSB7XG4gICAgYXJlYVN0cmVhbS5wb2x5Z29uRW5kKCk7XG4gICAgYm91bmRzU3RyZWFtLnBvaW50ID0gYm91bmRzUG9pbnQ7XG4gICAgYm91bmRzU3RyZWFtLmxpbmVTdGFydCA9IGJvdW5kc0xpbmVTdGFydDtcbiAgICBib3VuZHNTdHJlYW0ubGluZUVuZCA9IGJvdW5kc0xpbmVFbmQ7XG4gICAgaWYgKGFyZWFSaW5nU3VtIDwgMCkgbGFtYmRhMCA9IC0obGFtYmRhMSA9IDE4MCksIHBoaTAgPSAtKHBoaTEgPSA5MCk7XG4gICAgZWxzZSBpZiAoZGVsdGFTdW0gPiBlcHNpbG9uKSBwaGkxID0gOTA7XG4gICAgZWxzZSBpZiAoZGVsdGFTdW0gPCAtZXBzaWxvbikgcGhpMCA9IC05MDtcbiAgICByYW5nZVswXSA9IGxhbWJkYTAsIHJhbmdlWzFdID0gbGFtYmRhMTtcbiAgfVxufTtcblxuZnVuY3Rpb24gYm91bmRzUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgcmFuZ2VzLnB1c2gocmFuZ2UgPSBbbGFtYmRhMCA9IGxhbWJkYSwgbGFtYmRhMSA9IGxhbWJkYV0pO1xuICBpZiAocGhpIDwgcGhpMCkgcGhpMCA9IHBoaTtcbiAgaWYgKHBoaSA+IHBoaTEpIHBoaTEgPSBwaGk7XG59XG5cbmZ1bmN0aW9uIGxpbmVQb2ludChsYW1iZGEsIHBoaSkge1xuICB2YXIgcCA9IGNhcnRlc2lhbihbbGFtYmRhICogcmFkaWFucywgcGhpICogcmFkaWFuc10pO1xuICBpZiAocDApIHtcbiAgICB2YXIgbm9ybWFsID0gY2FydGVzaWFuQ3Jvc3MocDAsIHApLFxuICAgICAgICBlcXVhdG9yaWFsID0gW25vcm1hbFsxXSwgLW5vcm1hbFswXSwgMF0sXG4gICAgICAgIGluZmxlY3Rpb24gPSBjYXJ0ZXNpYW5Dcm9zcyhlcXVhdG9yaWFsLCBub3JtYWwpO1xuICAgIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UoaW5mbGVjdGlvbik7XG4gICAgaW5mbGVjdGlvbiA9IHNwaGVyaWNhbChpbmZsZWN0aW9uKTtcbiAgICB2YXIgZGVsdGEgPSBsYW1iZGEgLSBsYW1iZGEyLFxuICAgICAgICBzaWduID0gZGVsdGEgPiAwID8gMSA6IC0xLFxuICAgICAgICBsYW1iZGFpID0gaW5mbGVjdGlvblswXSAqIGRlZ3JlZXMgKiBzaWduLFxuICAgICAgICBwaGlpLFxuICAgICAgICBhbnRpbWVyaWRpYW4gPSBhYnMoZGVsdGEpID4gMTgwO1xuICAgIGlmIChhbnRpbWVyaWRpYW4gXiAoc2lnbiAqIGxhbWJkYTIgPCBsYW1iZGFpICYmIGxhbWJkYWkgPCBzaWduICogbGFtYmRhKSkge1xuICAgICAgcGhpaSA9IGluZmxlY3Rpb25bMV0gKiBkZWdyZWVzO1xuICAgICAgaWYgKHBoaWkgPiBwaGkxKSBwaGkxID0gcGhpaTtcbiAgICB9IGVsc2UgaWYgKGxhbWJkYWkgPSAobGFtYmRhaSArIDM2MCkgJSAzNjAgLSAxODAsIGFudGltZXJpZGlhbiBeIChzaWduICogbGFtYmRhMiA8IGxhbWJkYWkgJiYgbGFtYmRhaSA8IHNpZ24gKiBsYW1iZGEpKSB7XG4gICAgICBwaGlpID0gLWluZmxlY3Rpb25bMV0gKiBkZWdyZWVzO1xuICAgICAgaWYgKHBoaWkgPCBwaGkwKSBwaGkwID0gcGhpaTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBoaSA8IHBoaTApIHBoaTAgPSBwaGk7XG4gICAgICBpZiAocGhpID4gcGhpMSkgcGhpMSA9IHBoaTtcbiAgICB9XG4gICAgaWYgKGFudGltZXJpZGlhbikge1xuICAgICAgaWYgKGxhbWJkYSA8IGxhbWJkYTIpIHtcbiAgICAgICAgaWYgKGFuZ2xlKGxhbWJkYTAsIGxhbWJkYSkgPiBhbmdsZShsYW1iZGEwLCBsYW1iZGExKSkgbGFtYmRhMSA9IGxhbWJkYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhbmdsZShsYW1iZGEsIGxhbWJkYTEpID4gYW5nbGUobGFtYmRhMCwgbGFtYmRhMSkpIGxhbWJkYTAgPSBsYW1iZGE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChsYW1iZGExID49IGxhbWJkYTApIHtcbiAgICAgICAgaWYgKGxhbWJkYSA8IGxhbWJkYTApIGxhbWJkYTAgPSBsYW1iZGE7XG4gICAgICAgIGlmIChsYW1iZGEgPiBsYW1iZGExKSBsYW1iZGExID0gbGFtYmRhO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGxhbWJkYSA+IGxhbWJkYTIpIHtcbiAgICAgICAgICBpZiAoYW5nbGUobGFtYmRhMCwgbGFtYmRhKSA+IGFuZ2xlKGxhbWJkYTAsIGxhbWJkYTEpKSBsYW1iZGExID0gbGFtYmRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChhbmdsZShsYW1iZGEsIGxhbWJkYTEpID4gYW5nbGUobGFtYmRhMCwgbGFtYmRhMSkpIGxhbWJkYTAgPSBsYW1iZGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmFuZ2VzLnB1c2gocmFuZ2UgPSBbbGFtYmRhMCA9IGxhbWJkYSwgbGFtYmRhMSA9IGxhbWJkYV0pO1xuICB9XG4gIGlmIChwaGkgPCBwaGkwKSBwaGkwID0gcGhpO1xuICBpZiAocGhpID4gcGhpMSkgcGhpMSA9IHBoaTtcbiAgcDAgPSBwLCBsYW1iZGEyID0gbGFtYmRhO1xufVxuXG5mdW5jdGlvbiBib3VuZHNMaW5lU3RhcnQoKSB7XG4gIGJvdW5kc1N0cmVhbS5wb2ludCA9IGxpbmVQb2ludDtcbn1cblxuZnVuY3Rpb24gYm91bmRzTGluZUVuZCgpIHtcbiAgcmFuZ2VbMF0gPSBsYW1iZGEwLCByYW5nZVsxXSA9IGxhbWJkYTE7XG4gIGJvdW5kc1N0cmVhbS5wb2ludCA9IGJvdW5kc1BvaW50O1xuICBwMCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGJvdW5kc1JpbmdQb2ludChsYW1iZGEsIHBoaSkge1xuICBpZiAocDApIHtcbiAgICB2YXIgZGVsdGEgPSBsYW1iZGEgLSBsYW1iZGEyO1xuICAgIGRlbHRhU3VtLmFkZChhYnMoZGVsdGEpID4gMTgwID8gZGVsdGEgKyAoZGVsdGEgPiAwID8gMzYwIDogLTM2MCkgOiBkZWx0YSk7XG4gIH0gZWxzZSB7XG4gICAgbGFtYmRhMDAgPSBsYW1iZGEsIHBoaTAwID0gcGhpO1xuICB9XG4gIGFyZWFTdHJlYW0ucG9pbnQobGFtYmRhLCBwaGkpO1xuICBsaW5lUG9pbnQobGFtYmRhLCBwaGkpO1xufVxuXG5mdW5jdGlvbiBib3VuZHNSaW5nU3RhcnQoKSB7XG4gIGFyZWFTdHJlYW0ubGluZVN0YXJ0KCk7XG59XG5cbmZ1bmN0aW9uIGJvdW5kc1JpbmdFbmQoKSB7XG4gIGJvdW5kc1JpbmdQb2ludChsYW1iZGEwMCwgcGhpMDApO1xuICBhcmVhU3RyZWFtLmxpbmVFbmQoKTtcbiAgaWYgKGFicyhkZWx0YVN1bSkgPiBlcHNpbG9uKSBsYW1iZGEwID0gLShsYW1iZGExID0gMTgwKTtcbiAgcmFuZ2VbMF0gPSBsYW1iZGEwLCByYW5nZVsxXSA9IGxhbWJkYTE7XG4gIHAwID0gbnVsbDtcbn1cblxuLy8gRmluZHMgdGhlIGxlZnQtcmlnaHQgZGlzdGFuY2UgYmV0d2VlbiB0d28gbG9uZ2l0dWRlcy5cbi8vIFRoaXMgaXMgYWxtb3N0IHRoZSBzYW1lIGFzIChsYW1iZGExIC0gbGFtYmRhMCArIDM2MMKwKSAlIDM2MMKwLCBleGNlcHQgdGhhdCB3ZSB3YW50XG4vLyB0aGUgZGlzdGFuY2UgYmV0d2VlbiDCsTE4MMKwIHRvIGJlIDM2MMKwLlxuZnVuY3Rpb24gYW5nbGUobGFtYmRhMCwgbGFtYmRhMSkge1xuICByZXR1cm4gKGxhbWJkYTEgLT0gbGFtYmRhMCkgPCAwID8gbGFtYmRhMSArIDM2MCA6IGxhbWJkYTE7XG59XG5cbmZ1bmN0aW9uIHJhbmdlQ29tcGFyZShhLCBiKSB7XG4gIHJldHVybiBhWzBdIC0gYlswXTtcbn1cblxuZnVuY3Rpb24gcmFuZ2VDb250YWlucyhyYW5nZSwgeCkge1xuICByZXR1cm4gcmFuZ2VbMF0gPD0gcmFuZ2VbMV0gPyByYW5nZVswXSA8PSB4ICYmIHggPD0gcmFuZ2VbMV0gOiB4IDwgcmFuZ2VbMF0gfHwgcmFuZ2VbMV0gPCB4O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihmZWF0dXJlKSB7XG4gIHZhciBpLCBuLCBhLCBiLCBtZXJnZWQsIGRlbHRhTWF4LCBkZWx0YTtcblxuICBwaGkxID0gbGFtYmRhMSA9IC0obGFtYmRhMCA9IHBoaTAgPSBJbmZpbml0eSk7XG4gIHJhbmdlcyA9IFtdO1xuICBzdHJlYW0oZmVhdHVyZSwgYm91bmRzU3RyZWFtKTtcblxuICAvLyBGaXJzdCwgc29ydCByYW5nZXMgYnkgdGhlaXIgbWluaW11bSBsb25naXR1ZGVzLlxuICBpZiAobiA9IHJhbmdlcy5sZW5ndGgpIHtcbiAgICByYW5nZXMuc29ydChyYW5nZUNvbXBhcmUpO1xuXG4gICAgLy8gVGhlbiwgbWVyZ2UgYW55IHJhbmdlcyB0aGF0IG92ZXJsYXAuXG4gICAgZm9yIChpID0gMSwgYSA9IHJhbmdlc1swXSwgbWVyZ2VkID0gW2FdOyBpIDwgbjsgKytpKSB7XG4gICAgICBiID0gcmFuZ2VzW2ldO1xuICAgICAgaWYgKHJhbmdlQ29udGFpbnMoYSwgYlswXSkgfHwgcmFuZ2VDb250YWlucyhhLCBiWzFdKSkge1xuICAgICAgICBpZiAoYW5nbGUoYVswXSwgYlsxXSkgPiBhbmdsZShhWzBdLCBhWzFdKSkgYVsxXSA9IGJbMV07XG4gICAgICAgIGlmIChhbmdsZShiWzBdLCBhWzFdKSA+IGFuZ2xlKGFbMF0sIGFbMV0pKSBhWzBdID0gYlswXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lcmdlZC5wdXNoKGEgPSBiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGaW5hbGx5LCBmaW5kIHRoZSBsYXJnZXN0IGdhcCBiZXR3ZWVuIHRoZSBtZXJnZWQgcmFuZ2VzLlxuICAgIC8vIFRoZSBmaW5hbCBib3VuZGluZyBib3ggd2lsbCBiZSB0aGUgaW52ZXJzZSBvZiB0aGlzIGdhcC5cbiAgICBmb3IgKGRlbHRhTWF4ID0gLUluZmluaXR5LCBuID0gbWVyZ2VkLmxlbmd0aCAtIDEsIGkgPSAwLCBhID0gbWVyZ2VkW25dOyBpIDw9IG47IGEgPSBiLCArK2kpIHtcbiAgICAgIGIgPSBtZXJnZWRbaV07XG4gICAgICBpZiAoKGRlbHRhID0gYW5nbGUoYVsxXSwgYlswXSkpID4gZGVsdGFNYXgpIGRlbHRhTWF4ID0gZGVsdGEsIGxhbWJkYTAgPSBiWzBdLCBsYW1iZGExID0gYVsxXTtcbiAgICB9XG4gIH1cblxuICByYW5nZXMgPSByYW5nZSA9IG51bGw7XG5cbiAgcmV0dXJuIGxhbWJkYTAgPT09IEluZmluaXR5IHx8IHBoaTAgPT09IEluZmluaXR5XG4gICAgICA/IFtbTmFOLCBOYU5dLCBbTmFOLCBOYU5dXVxuICAgICAgOiBbW2xhbWJkYTAsIHBoaTBdLCBbbGFtYmRhMSwgcGhpMV1dO1xufVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuL2FkZGVyXCI7XG5pbXBvcnQge2NhcnRlc2lhbiwgY2FydGVzaWFuQ3Jvc3MsIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2V9IGZyb20gXCIuL2NhcnRlc2lhblwiO1xuaW1wb3J0IHthc2luLCBhdGFuMiwgY29zLCBlcHNpbG9uLCBwaSwgcXVhcnRlclBpLCBzaW4sIHRhdX0gZnJvbSBcIi4vbWF0aFwiO1xuXG52YXIgc3VtID0gYWRkZXIoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocG9seWdvbiwgcG9pbnQpIHtcbiAgdmFyIGxhbWJkYSA9IHBvaW50WzBdLFxuICAgICAgcGhpID0gcG9pbnRbMV0sXG4gICAgICBub3JtYWwgPSBbc2luKGxhbWJkYSksIC1jb3MobGFtYmRhKSwgMF0sXG4gICAgICBhbmdsZSA9IDAsXG4gICAgICB3aW5kaW5nID0gMDtcblxuICBzdW0ucmVzZXQoKTtcblxuICBmb3IgKHZhciBpID0gMCwgbiA9IHBvbHlnb24ubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEobSA9IChyaW5nID0gcG9seWdvbltpXSkubGVuZ3RoKSkgY29udGludWU7XG4gICAgdmFyIHJpbmcsXG4gICAgICAgIG0sXG4gICAgICAgIHBvaW50MCA9IHJpbmdbbSAtIDFdLFxuICAgICAgICBsYW1iZGEwID0gcG9pbnQwWzBdLFxuICAgICAgICBwaGkwID0gcG9pbnQwWzFdIC8gMiArIHF1YXJ0ZXJQaSxcbiAgICAgICAgc2luUGhpMCA9IHNpbihwaGkwKSxcbiAgICAgICAgY29zUGhpMCA9IGNvcyhwaGkwKTtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgbTsgKytqLCBsYW1iZGEwID0gbGFtYmRhMSwgc2luUGhpMCA9IHNpblBoaTEsIGNvc1BoaTAgPSBjb3NQaGkxLCBwb2ludDAgPSBwb2ludDEpIHtcbiAgICAgIHZhciBwb2ludDEgPSByaW5nW2pdLFxuICAgICAgICAgIGxhbWJkYTEgPSBwb2ludDFbMF0sXG4gICAgICAgICAgcGhpMSA9IHBvaW50MVsxXSAvIDIgKyBxdWFydGVyUGksXG4gICAgICAgICAgc2luUGhpMSA9IHNpbihwaGkxKSxcbiAgICAgICAgICBjb3NQaGkxID0gY29zKHBoaTEpLFxuICAgICAgICAgIGRlbHRhID0gbGFtYmRhMSAtIGxhbWJkYTAsXG4gICAgICAgICAgc2lnbiA9IGRlbHRhID49IDAgPyAxIDogLTEsXG4gICAgICAgICAgYWJzRGVsdGEgPSBzaWduICogZGVsdGEsXG4gICAgICAgICAgYW50aW1lcmlkaWFuID0gYWJzRGVsdGEgPiBwaSxcbiAgICAgICAgICBrID0gc2luUGhpMCAqIHNpblBoaTE7XG5cbiAgICAgIHN1bS5hZGQoYXRhbjIoayAqIHNpZ24gKiBzaW4oYWJzRGVsdGEpLCBjb3NQaGkwICogY29zUGhpMSArIGsgKiBjb3MoYWJzRGVsdGEpKSk7XG4gICAgICBhbmdsZSArPSBhbnRpbWVyaWRpYW4gPyBkZWx0YSArIHNpZ24gKiB0YXUgOiBkZWx0YTtcblxuICAgICAgLy8gQXJlIHRoZSBsb25naXR1ZGVzIGVpdGhlciBzaWRlIG9mIHRoZSBwb2ludOKAmXMgbWVyaWRpYW4gKGxhbWJkYSksXG4gICAgICAvLyBhbmQgYXJlIHRoZSBsYXRpdHVkZXMgc21hbGxlciB0aGFuIHRoZSBwYXJhbGxlbCAocGhpKT9cbiAgICAgIGlmIChhbnRpbWVyaWRpYW4gXiBsYW1iZGEwID49IGxhbWJkYSBeIGxhbWJkYTEgPj0gbGFtYmRhKSB7XG4gICAgICAgIHZhciBhcmMgPSBjYXJ0ZXNpYW5Dcm9zcyhjYXJ0ZXNpYW4ocG9pbnQwKSwgY2FydGVzaWFuKHBvaW50MSkpO1xuICAgICAgICBjYXJ0ZXNpYW5Ob3JtYWxpemVJblBsYWNlKGFyYyk7XG4gICAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSBjYXJ0ZXNpYW5Dcm9zcyhub3JtYWwsIGFyYyk7XG4gICAgICAgIGNhcnRlc2lhbk5vcm1hbGl6ZUluUGxhY2UoaW50ZXJzZWN0aW9uKTtcbiAgICAgICAgdmFyIHBoaUFyYyA9IChhbnRpbWVyaWRpYW4gXiBkZWx0YSA+PSAwID8gLTEgOiAxKSAqIGFzaW4oaW50ZXJzZWN0aW9uWzJdKTtcbiAgICAgICAgaWYgKHBoaSA+IHBoaUFyYyB8fCBwaGkgPT09IHBoaUFyYyAmJiAoYXJjWzBdIHx8IGFyY1sxXSkpIHtcbiAgICAgICAgICB3aW5kaW5nICs9IGFudGltZXJpZGlhbiBeIGRlbHRhID49IDAgPyAxIDogLTE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBGaXJzdCwgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIFNvdXRoIHBvbGUgaXMgaW5zaWRlIG9yIG91dHNpZGU6XG4gIC8vXG4gIC8vIEl0IGlzIGluc2lkZSBpZjpcbiAgLy8gKiB0aGUgcG9seWdvbiB3aW5kcyBhcm91bmQgaXQgaW4gYSBjbG9ja3dpc2UgZGlyZWN0aW9uLlxuICAvLyAqIHRoZSBwb2x5Z29uIGRvZXMgbm90IChjdW11bGF0aXZlbHkpIHdpbmQgYXJvdW5kIGl0LCBidXQgaGFzIGEgbmVnYXRpdmVcbiAgLy8gICAoY291bnRlci1jbG9ja3dpc2UpIGFyZWEuXG4gIC8vXG4gIC8vIFNlY29uZCwgY291bnQgdGhlIChzaWduZWQpIG51bWJlciBvZiB0aW1lcyBhIHNlZ21lbnQgY3Jvc3NlcyBhIGxhbWJkYVxuICAvLyBmcm9tIHRoZSBwb2ludCB0byB0aGUgU291dGggcG9sZS4gIElmIGl0IGlzIHplcm8sIHRoZW4gdGhlIHBvaW50IGlzIHRoZVxuICAvLyBzYW1lIHNpZGUgYXMgdGhlIFNvdXRoIHBvbGUuXG5cbiAgcmV0dXJuIChhbmdsZSA8IC1lcHNpbG9uIHx8IGFuZ2xlIDwgZXBzaWxvbiAmJiBzdW0gPCAtZXBzaWxvbikgXiAod2luZGluZyAmIDEpO1xufVxuIiwiaW1wb3J0IGFkZGVyIGZyb20gXCIuL2FkZGVyXCI7XG5pbXBvcnQge2FicywgYXRhbjIsIGNvcywgcmFkaWFucywgc2luLCBzcXJ0fSBmcm9tIFwiLi9tYXRoXCI7XG5pbXBvcnQgbm9vcCBmcm9tIFwiLi9ub29wXCI7XG5pbXBvcnQgc3RyZWFtIGZyb20gXCIuL3N0cmVhbVwiO1xuXG52YXIgbGVuZ3RoU3VtID0gYWRkZXIoKSxcbiAgICBsYW1iZGEwLFxuICAgIHNpblBoaTAsXG4gICAgY29zUGhpMDtcblxudmFyIGxlbmd0aFN0cmVhbSA9IHtcbiAgc3BoZXJlOiBub29wLFxuICBwb2ludDogbm9vcCxcbiAgbGluZVN0YXJ0OiBsZW5ndGhMaW5lU3RhcnQsXG4gIGxpbmVFbmQ6IG5vb3AsXG4gIHBvbHlnb25TdGFydDogbm9vcCxcbiAgcG9seWdvbkVuZDogbm9vcFxufTtcblxuZnVuY3Rpb24gbGVuZ3RoTGluZVN0YXJ0KCkge1xuICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBsZW5ndGhQb2ludEZpcnN0O1xuICBsZW5ndGhTdHJlYW0ubGluZUVuZCA9IGxlbmd0aExpbmVFbmQ7XG59XG5cbmZ1bmN0aW9uIGxlbmd0aExpbmVFbmQoKSB7XG4gIGxlbmd0aFN0cmVhbS5wb2ludCA9IGxlbmd0aFN0cmVhbS5saW5lRW5kID0gbm9vcDtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoUG9pbnRGaXJzdChsYW1iZGEsIHBoaSkge1xuICBsYW1iZGEgKj0gcmFkaWFucywgcGhpICo9IHJhZGlhbnM7XG4gIGxhbWJkYTAgPSBsYW1iZGEsIHNpblBoaTAgPSBzaW4ocGhpKSwgY29zUGhpMCA9IGNvcyhwaGkpO1xuICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBsZW5ndGhQb2ludDtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgbGFtYmRhICo9IHJhZGlhbnMsIHBoaSAqPSByYWRpYW5zO1xuICB2YXIgc2luUGhpID0gc2luKHBoaSksXG4gICAgICBjb3NQaGkgPSBjb3MocGhpKSxcbiAgICAgIGRlbHRhID0gYWJzKGxhbWJkYSAtIGxhbWJkYTApLFxuICAgICAgY29zRGVsdGEgPSBjb3MoZGVsdGEpLFxuICAgICAgc2luRGVsdGEgPSBzaW4oZGVsdGEpLFxuICAgICAgeCA9IGNvc1BoaSAqIHNpbkRlbHRhLFxuICAgICAgeSA9IGNvc1BoaTAgKiBzaW5QaGkgLSBzaW5QaGkwICogY29zUGhpICogY29zRGVsdGEsXG4gICAgICB6ID0gc2luUGhpMCAqIHNpblBoaSArIGNvc1BoaTAgKiBjb3NQaGkgKiBjb3NEZWx0YTtcbiAgbGVuZ3RoU3VtLmFkZChhdGFuMihzcXJ0KHggKiB4ICsgeSAqIHkpLCB6KSk7XG4gIGxhbWJkYTAgPSBsYW1iZGEsIHNpblBoaTAgPSBzaW5QaGksIGNvc1BoaTAgPSBjb3NQaGk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9iamVjdCkge1xuICBsZW5ndGhTdW0ucmVzZXQoKTtcbiAgc3RyZWFtKG9iamVjdCwgbGVuZ3RoU3RyZWFtKTtcbiAgcmV0dXJuICtsZW5ndGhTdW07XG59XG4iLCJpbXBvcnQgYWRkZXIgZnJvbSBcIi4uL2FkZGVyXCI7XG5pbXBvcnQge2Fic30gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCBub29wIGZyb20gXCIuLi9ub29wXCI7XG5cbnZhciBhcmVhU3VtID0gYWRkZXIoKSxcbiAgICBhcmVhUmluZ1N1bSA9IGFkZGVyKCksXG4gICAgeDAwLFxuICAgIHkwMCxcbiAgICB4MCxcbiAgICB5MDtcblxudmFyIGFyZWFTdHJlYW0gPSB7XG4gIHBvaW50OiBub29wLFxuICBsaW5lU3RhcnQ6IG5vb3AsXG4gIGxpbmVFbmQ6IG5vb3AsXG4gIHBvbHlnb25TdGFydDogZnVuY3Rpb24oKSB7XG4gICAgYXJlYVN0cmVhbS5saW5lU3RhcnQgPSBhcmVhUmluZ1N0YXJ0O1xuICAgIGFyZWFTdHJlYW0ubGluZUVuZCA9IGFyZWFSaW5nRW5kO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICBhcmVhU3RyZWFtLmxpbmVTdGFydCA9IGFyZWFTdHJlYW0ubGluZUVuZCA9IGFyZWFTdHJlYW0ucG9pbnQgPSBub29wO1xuICAgIGFyZWFTdW0uYWRkKGFicyhhcmVhUmluZ1N1bSkpO1xuICAgIGFyZWFSaW5nU3VtLnJlc2V0KCk7XG4gIH0sXG4gIHJlc3VsdDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZWEgPSBhcmVhU3VtIC8gMjtcbiAgICBhcmVhU3VtLnJlc2V0KCk7XG4gICAgcmV0dXJuIGFyZWE7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFyZWFSaW5nU3RhcnQoKSB7XG4gIGFyZWFTdHJlYW0ucG9pbnQgPSBhcmVhUG9pbnRGaXJzdDtcbn1cblxuZnVuY3Rpb24gYXJlYVBvaW50Rmlyc3QoeCwgeSkge1xuICBhcmVhU3RyZWFtLnBvaW50ID0gYXJlYVBvaW50O1xuICB4MDAgPSB4MCA9IHgsIHkwMCA9IHkwID0geTtcbn1cblxuZnVuY3Rpb24gYXJlYVBvaW50KHgsIHkpIHtcbiAgYXJlYVJpbmdTdW0uYWRkKHkwICogeCAtIHgwICogeSk7XG4gIHgwID0geCwgeTAgPSB5O1xufVxuXG5mdW5jdGlvbiBhcmVhUmluZ0VuZCgpIHtcbiAgYXJlYVBvaW50KHgwMCwgeTAwKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJlYVN0cmVhbTtcbiIsImltcG9ydCBhZGRlciBmcm9tIFwiLi4vYWRkZXJcIjtcbmltcG9ydCB7c3FydH0gZnJvbSBcIi4uL21hdGhcIjtcbmltcG9ydCBub29wIGZyb20gXCIuLi9ub29wXCI7XG5cbnZhciBsZW5ndGhTdW0gPSBhZGRlcigpLFxuICAgIGxlbmd0aFJpbmcsXG4gICAgeDAwLFxuICAgIHkwMCxcbiAgICB4MCxcbiAgICB5MDtcblxudmFyIGxlbmd0aFN0cmVhbSA9IHtcbiAgcG9pbnQ6IG5vb3AsXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgbGVuZ3RoU3RyZWFtLnBvaW50ID0gbGVuZ3RoUG9pbnRGaXJzdDtcbiAgfSxcbiAgbGluZUVuZDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKGxlbmd0aFJpbmcpIGxlbmd0aFBvaW50KHgwMCwgeTAwKTtcbiAgICBsZW5ndGhTdHJlYW0ucG9pbnQgPSBub29wO1xuICB9LFxuICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgIGxlbmd0aFJpbmcgPSB0cnVlO1xuICB9LFxuICBwb2x5Z29uRW5kOiBmdW5jdGlvbigpIHtcbiAgICBsZW5ndGhSaW5nID0gbnVsbDtcbiAgfSxcbiAgcmVzdWx0OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuZ3RoID0gK2xlbmd0aFN1bTtcbiAgICBsZW5ndGhTdW0ucmVzZXQoKTtcbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG59O1xuXG5mdW5jdGlvbiBsZW5ndGhQb2ludEZpcnN0KHgsIHkpIHtcbiAgbGVuZ3RoU3RyZWFtLnBvaW50ID0gbGVuZ3RoUG9pbnQ7XG4gIHgwMCA9IHgwID0geCwgeTAwID0geTAgPSB5O1xufVxuXG5mdW5jdGlvbiBsZW5ndGhQb2ludCh4LCB5KSB7XG4gIHgwIC09IHgsIHkwIC09IHk7XG4gIGxlbmd0aFN1bS5hZGQoc3FydCh4MCAqIHgwICsgeTAgKiB5MCkpO1xuICB4MCA9IHgsIHkwID0geTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGVuZ3RoU3RyZWFtO1xuIiwiaW1wb3J0IHtjYXJ0ZXNpYW59IGZyb20gXCIuLi9jYXJ0ZXNpYW5cIjtcbmltcG9ydCB7YWJzLCBhc2luLCBhdGFuMiwgY29zLCBlcHNpbG9uLCByYWRpYW5zLCBzcXJ0fSBmcm9tIFwiLi4vbWF0aFwiO1xuaW1wb3J0IHt0cmFuc2Zvcm1lcn0gZnJvbSBcIi4uL3RyYW5zZm9ybVwiO1xuXG52YXIgbWF4RGVwdGggPSAxNiwgLy8gbWF4aW11bSBkZXB0aCBvZiBzdWJkaXZpc2lvblxuICAgIGNvc01pbkRpc3RhbmNlID0gY29zKDMwICogcmFkaWFucyk7IC8vIGNvcyhtaW5pbXVtIGFuZ3VsYXIgZGlzdGFuY2UpXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHByb2plY3QsIGRlbHRhMikge1xuICByZXR1cm4gK2RlbHRhMiA/IHJlc2FtcGxlKHByb2plY3QsIGRlbHRhMikgOiByZXNhbXBsZU5vbmUocHJvamVjdCk7XG59XG5cbmZ1bmN0aW9uIHJlc2FtcGxlTm9uZShwcm9qZWN0KSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcih7XG4gICAgcG9pbnQ6IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICAgIHggPSBwcm9qZWN0KHgsIHkpO1xuICAgICAgdGhpcy5zdHJlYW0ucG9pbnQoeFswXSwgeFsxXSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVzYW1wbGUocHJvamVjdCwgZGVsdGEyKSB7XG5cbiAgZnVuY3Rpb24gcmVzYW1wbGVMaW5lVG8oeDAsIHkwLCBsYW1iZGEwLCBhMCwgYjAsIGMwLCB4MSwgeTEsIGxhbWJkYTEsIGExLCBiMSwgYzEsIGRlcHRoLCBzdHJlYW0pIHtcbiAgICB2YXIgZHggPSB4MSAtIHgwLFxuICAgICAgICBkeSA9IHkxIC0geTAsXG4gICAgICAgIGQyID0gZHggKiBkeCArIGR5ICogZHk7XG4gICAgaWYgKGQyID4gNCAqIGRlbHRhMiAmJiBkZXB0aC0tKSB7XG4gICAgICB2YXIgYSA9IGEwICsgYTEsXG4gICAgICAgICAgYiA9IGIwICsgYjEsXG4gICAgICAgICAgYyA9IGMwICsgYzEsXG4gICAgICAgICAgbSA9IHNxcnQoYSAqIGEgKyBiICogYiArIGMgKiBjKSxcbiAgICAgICAgICBwaGkyID0gYXNpbihjIC89IG0pLFxuICAgICAgICAgIGxhbWJkYTIgPSBhYnMoYWJzKGMpIC0gMSkgPCBlcHNpbG9uIHx8IGFicyhsYW1iZGEwIC0gbGFtYmRhMSkgPCBlcHNpbG9uID8gKGxhbWJkYTAgKyBsYW1iZGExKSAvIDIgOiBhdGFuMihiLCBhKSxcbiAgICAgICAgICBwID0gcHJvamVjdChsYW1iZGEyLCBwaGkyKSxcbiAgICAgICAgICB4MiA9IHBbMF0sXG4gICAgICAgICAgeTIgPSBwWzFdLFxuICAgICAgICAgIGR4MiA9IHgyIC0geDAsXG4gICAgICAgICAgZHkyID0geTIgLSB5MCxcbiAgICAgICAgICBkeiA9IGR5ICogZHgyIC0gZHggKiBkeTI7XG4gICAgICBpZiAoZHogKiBkeiAvIGQyID4gZGVsdGEyIC8vIHBlcnBlbmRpY3VsYXIgcHJvamVjdGVkIGRpc3RhbmNlXG4gICAgICAgICAgfHwgYWJzKChkeCAqIGR4MiArIGR5ICogZHkyKSAvIGQyIC0gMC41KSA+IDAuMyAvLyBtaWRwb2ludCBjbG9zZSB0byBhbiBlbmRcbiAgICAgICAgICB8fCBhMCAqIGExICsgYjAgKiBiMSArIGMwICogYzEgPCBjb3NNaW5EaXN0YW5jZSkgeyAvLyBhbmd1bGFyIGRpc3RhbmNlXG4gICAgICAgIHJlc2FtcGxlTGluZVRvKHgwLCB5MCwgbGFtYmRhMCwgYTAsIGIwLCBjMCwgeDIsIHkyLCBsYW1iZGEyLCBhIC89IG0sIGIgLz0gbSwgYywgZGVwdGgsIHN0cmVhbSk7XG4gICAgICAgIHN0cmVhbS5wb2ludCh4MiwgeTIpO1xuICAgICAgICByZXNhbXBsZUxpbmVUbyh4MiwgeTIsIGxhbWJkYTIsIGEsIGIsIGMsIHgxLCB5MSwgbGFtYmRhMSwgYTEsIGIxLCBjMSwgZGVwdGgsIHN0cmVhbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmdW5jdGlvbihzdHJlYW0pIHtcbiAgICB2YXIgbGFtYmRhMDAsIHgwMCwgeTAwLCBhMDAsIGIwMCwgYzAwLCAvLyBmaXJzdCBwb2ludFxuICAgICAgICBsYW1iZGEwLCB4MCwgeTAsIGEwLCBiMCwgYzA7IC8vIHByZXZpb3VzIHBvaW50XG5cbiAgICB2YXIgcmVzYW1wbGVTdHJlYW0gPSB7XG4gICAgICBwb2ludDogcG9pbnQsXG4gICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCxcbiAgICAgIGxpbmVFbmQ6IGxpbmVFbmQsXG4gICAgICBwb2x5Z29uU3RhcnQ6IGZ1bmN0aW9uKCkgeyBzdHJlYW0ucG9seWdvblN0YXJ0KCk7IHJlc2FtcGxlU3RyZWFtLmxpbmVTdGFydCA9IHJpbmdTdGFydDsgfSxcbiAgICAgIHBvbHlnb25FbmQ6IGZ1bmN0aW9uKCkgeyBzdHJlYW0ucG9seWdvbkVuZCgpOyByZXNhbXBsZVN0cmVhbS5saW5lU3RhcnQgPSBsaW5lU3RhcnQ7IH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcG9pbnQoeCwgeSkge1xuICAgICAgeCA9IHByb2plY3QoeCwgeSk7XG4gICAgICBzdHJlYW0ucG9pbnQoeFswXSwgeFsxXSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZVN0YXJ0KCkge1xuICAgICAgeDAgPSBOYU47XG4gICAgICByZXNhbXBsZVN0cmVhbS5wb2ludCA9IGxpbmVQb2ludDtcbiAgICAgIHN0cmVhbS5saW5lU3RhcnQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaW5lUG9pbnQobGFtYmRhLCBwaGkpIHtcbiAgICAgIHZhciBjID0gY2FydGVzaWFuKFtsYW1iZGEsIHBoaV0pLCBwID0gcHJvamVjdChsYW1iZGEsIHBoaSk7XG4gICAgICByZXNhbXBsZUxpbmVUbyh4MCwgeTAsIGxhbWJkYTAsIGEwLCBiMCwgYzAsIHgwID0gcFswXSwgeTAgPSBwWzFdLCBsYW1iZGEwID0gbGFtYmRhLCBhMCA9IGNbMF0sIGIwID0gY1sxXSwgYzAgPSBjWzJdLCBtYXhEZXB0aCwgc3RyZWFtKTtcbiAgICAgIHN0cmVhbS5wb2ludCh4MCwgeTApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpbmVFbmQoKSB7XG4gICAgICByZXNhbXBsZVN0cmVhbS5wb2ludCA9IHBvaW50O1xuICAgICAgc3RyZWFtLmxpbmVFbmQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByaW5nU3RhcnQoKSB7XG4gICAgICBsaW5lU3RhcnQoKTtcbiAgICAgIHJlc2FtcGxlU3RyZWFtLnBvaW50ID0gcmluZ1BvaW50O1xuICAgICAgcmVzYW1wbGVTdHJlYW0ubGluZUVuZCA9IHJpbmdFbmQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmluZ1BvaW50KGxhbWJkYSwgcGhpKSB7XG4gICAgICBsaW5lUG9pbnQobGFtYmRhMDAgPSBsYW1iZGEsIHBoaSksIHgwMCA9IHgwLCB5MDAgPSB5MCwgYTAwID0gYTAsIGIwMCA9IGIwLCBjMDAgPSBjMDtcbiAgICAgIHJlc2FtcGxlU3RyZWFtLnBvaW50ID0gbGluZVBvaW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJpbmdFbmQoKSB7XG4gICAgICByZXNhbXBsZUxpbmVUbyh4MCwgeTAsIGxhbWJkYTAsIGEwLCBiMCwgYzAsIHgwMCwgeTAwLCBsYW1iZGEwMCwgYTAwLCBiMDAsIGMwMCwgbWF4RGVwdGgsIHN0cmVhbSk7XG4gICAgICByZXNhbXBsZVN0cmVhbS5saW5lRW5kID0gbGluZUVuZDtcbiAgICAgIGxpbmVFbmQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzYW1wbGVTdHJlYW07XG4gIH07XG59XG4iLCJpbXBvcnQge2FzaW4sIHNxcnR9IGZyb20gXCIuLi9tYXRoXCI7XG5pbXBvcnQge2F6aW11dGhhbFJhdywgYXppbXV0aGFsSW52ZXJ0fSBmcm9tIFwiLi9hemltdXRoYWxcIjtcbmltcG9ydCBwcm9qZWN0aW9uIGZyb20gXCIuL2luZGV4XCI7XG5cbmV4cG9ydCB2YXIgYXppbXV0aGFsRXF1YWxBcmVhUmF3ID0gYXppbXV0aGFsUmF3KGZ1bmN0aW9uKGN4Y3kpIHtcbiAgcmV0dXJuIHNxcnQoMiAvICgxICsgY3hjeSkpO1xufSk7XG5cbmF6aW11dGhhbEVxdWFsQXJlYVJhdy5pbnZlcnQgPSBhemltdXRoYWxJbnZlcnQoZnVuY3Rpb24oeikge1xuICByZXR1cm4gMiAqIGFzaW4oeiAvIDIpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcHJvamVjdGlvbihhemltdXRoYWxFcXVhbEFyZWFSYXcpXG4gICAgICAuc2NhbGUoMTI0Ljc1KVxuICAgICAgLmNsaXBBbmdsZSgxODAgLSAxZS0zKTtcbn1cbiIsImltcG9ydCB7YWNvcywgc2lufSBmcm9tIFwiLi4vbWF0aFwiO1xuaW1wb3J0IHthemltdXRoYWxSYXcsIGF6aW11dGhhbEludmVydH0gZnJvbSBcIi4vYXppbXV0aGFsXCI7XG5pbXBvcnQgcHJvamVjdGlvbiBmcm9tIFwiLi9pbmRleFwiO1xuXG5leHBvcnQgdmFyIGF6aW11dGhhbEVxdWlkaXN0YW50UmF3ID0gYXppbXV0aGFsUmF3KGZ1bmN0aW9uKGMpIHtcbiAgcmV0dXJuIChjID0gYWNvcyhjKSkgJiYgYyAvIHNpbihjKTtcbn0pO1xuXG5hemltdXRoYWxFcXVpZGlzdGFudFJhdy5pbnZlcnQgPSBhemltdXRoYWxJbnZlcnQoZnVuY3Rpb24oeikge1xuICByZXR1cm4gejtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHByb2plY3Rpb24oYXppbXV0aGFsRXF1aWRpc3RhbnRSYXcpXG4gICAgICAuc2NhbGUoNzkuNDE4OClcbiAgICAgIC5jbGlwQW5nbGUoMTgwIC0gMWUtMyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgbm9kZSA9IHRoaXMsIGN1cnJlbnQsIG5leHQgPSBbbm9kZV0sIGNoaWxkcmVuLCBpLCBuO1xuICBkbyB7XG4gICAgY3VycmVudCA9IG5leHQucmV2ZXJzZSgpLCBuZXh0ID0gW107XG4gICAgd2hpbGUgKG5vZGUgPSBjdXJyZW50LnBvcCgpKSB7XG4gICAgICBjYWxsYmFjayhub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgICAgaWYgKGNoaWxkcmVuKSBmb3IgKGkgPSAwLCBuID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIG5leHQucHVzaChjaGlsZHJlbltpXSk7XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlIChuZXh0Lmxlbmd0aCk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIG5vZGUgPSB0aGlzLCBub2RlcyA9IFtub2RlXSwgY2hpbGRyZW4sIGk7XG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBjYWxsYmFjayhub2RlKSwgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuO1xuICAgIGlmIChjaGlsZHJlbikgZm9yIChpID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIG5vZGVzLnB1c2goY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHZhciBub2RlID0gdGhpcywgbm9kZXMgPSBbbm9kZV0sIG5leHQgPSBbXSwgY2hpbGRyZW4sIGksIG47XG4gIHdoaWxlIChub2RlID0gbm9kZXMucG9wKCkpIHtcbiAgICBuZXh0LnB1c2gobm9kZSksIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjtcbiAgICBpZiAoY2hpbGRyZW4pIGZvciAoaSA9IDAsIG4gPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIG5vZGVzLnB1c2goY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgfVxuICB3aGlsZSAobm9kZSA9IG5leHQucG9wKCkpIHtcbiAgICBjYWxsYmFjayhub2RlKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLmVhY2hBZnRlcihmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIHN1bSA9ICt2YWx1ZShub2RlLmRhdGEpIHx8IDAsXG4gICAgICAgIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbixcbiAgICAgICAgaSA9IGNoaWxkcmVuICYmIGNoaWxkcmVuLmxlbmd0aDtcbiAgICB3aGlsZSAoLS1pID49IDApIHN1bSArPSBjaGlsZHJlbltpXS52YWx1ZTtcbiAgICBub2RlLnZhbHVlID0gc3VtO1xuICB9KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaEJlZm9yZShmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIG5vZGUuY2hpbGRyZW4uc29ydChjb21wYXJlKTtcbiAgICB9XG4gIH0pO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBub2RlID0gdGhpcywgbm9kZXMgPSBbbm9kZV07XG4gIHdoaWxlIChub2RlID0gbm9kZS5wYXJlbnQpIHtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9XG4gIHJldHVybiBub2Rlcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgbm9kZXMgPSBbXTtcbiAgdGhpcy5lYWNoKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICB9KTtcbiAgcmV0dXJuIG5vZGVzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBsZWF2ZXMgPSBbXTtcbiAgdGhpcy5lYWNoQmVmb3JlKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGxlYXZlcy5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsZWF2ZXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIHJvb3QgPSB0aGlzLCBsaW5rcyA9IFtdO1xuICByb290LmVhY2goZnVuY3Rpb24obm9kZSkge1xuICAgIGlmIChub2RlICE9PSByb290KSB7IC8vIERvbuKAmXQgaW5jbHVkZSB0aGUgcm9vdOKAmXMgcGFyZW50LCBpZiBhbnkuXG4gICAgICBsaW5rcy5wdXNoKHtzb3VyY2U6IG5vZGUucGFyZW50LCB0YXJnZXQ6IG5vZGV9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGlua3M7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwYXJlbnQsIHgwLCB5MCwgeDEsIHkxKSB7XG4gIHZhciBub2RlcyA9IHBhcmVudC5jaGlsZHJlbixcbiAgICAgIG5vZGUsXG4gICAgICBpID0gLTEsXG4gICAgICBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgayA9IHBhcmVudC52YWx1ZSAmJiAoeTEgLSB5MCkgLyBwYXJlbnQudmFsdWU7XG5cbiAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUueDAgPSB4MCwgbm9kZS54MSA9IHgxO1xuICAgIG5vZGUueTAgPSB5MCwgbm9kZS55MSA9IHkwICs9IG5vZGUudmFsdWUgKiBrO1xuICB9XG59XG4iLCJ2YXIgYXJyYXkgPSBBcnJheS5wcm90b3R5cGU7XG5cbmV4cG9ydCB2YXIgbWFwID0gYXJyYXkubWFwO1xuZXhwb3J0IHZhciBzbGljZSA9IGFycmF5LnNsaWNlO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiAreDtcbn1cbiIsImltcG9ydCB7dGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtmb3JtYXQsIGZvcm1hdFByZWZpeCwgZm9ybWF0U3BlY2lmaWVyLCBwcmVjaXNpb25GaXhlZCwgcHJlY2lzaW9uUHJlZml4LCBwcmVjaXNpb25Sb3VuZH0gZnJvbSBcImQzLWZvcm1hdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkb21haW4sIGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgdmFyIHN0YXJ0ID0gZG9tYWluWzBdLFxuICAgICAgc3RvcCA9IGRvbWFpbltkb21haW4ubGVuZ3RoIC0gMV0sXG4gICAgICBzdGVwID0gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50KSxcbiAgICAgIHByZWNpc2lvbjtcbiAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciA9PSBudWxsID8gXCIsZlwiIDogc3BlY2lmaWVyKTtcbiAgc3dpdGNoIChzcGVjaWZpZXIudHlwZSkge1xuICAgIGNhc2UgXCJzXCI6IHtcbiAgICAgIHZhciB2YWx1ZSA9IE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpO1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUHJlZml4KHN0ZXAsIHZhbHVlKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb247XG4gICAgICByZXR1cm4gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpO1xuICAgIH1cbiAgICBjYXNlIFwiXCI6XG4gICAgY2FzZSBcImVcIjpcbiAgICBjYXNlIFwiZ1wiOlxuICAgIGNhc2UgXCJwXCI6XG4gICAgY2FzZSBcInJcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUm91bmQoc3RlcCwgTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSkpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCJlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgXCJmXCI6XG4gICAgY2FzZSBcIiVcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uRml4ZWQoc3RlcCkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcIiVcIikgKiAyO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXQoc3BlY2lmaWVyKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRvbWFpbiwgaW50ZXJ2YWwpIHtcbiAgZG9tYWluID0gZG9tYWluLnNsaWNlKCk7XG5cbiAgdmFyIGkwID0gMCxcbiAgICAgIGkxID0gZG9tYWluLmxlbmd0aCAtIDEsXG4gICAgICB4MCA9IGRvbWFpbltpMF0sXG4gICAgICB4MSA9IGRvbWFpbltpMV0sXG4gICAgICB0O1xuXG4gIGlmICh4MSA8IHgwKSB7XG4gICAgdCA9IGkwLCBpMCA9IGkxLCBpMSA9IHQ7XG4gICAgdCA9IHgwLCB4MCA9IHgxLCB4MSA9IHQ7XG4gIH1cblxuICBkb21haW5baTBdID0gaW50ZXJ2YWwuZmxvb3IoeDApO1xuICBkb21haW5baTFdID0gaW50ZXJ2YWwuY2VpbCh4MSk7XG4gIHJldHVybiBkb21haW47XG59XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIG1pbGxpc2Vjb25kID0gaW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gIC8vIG5vb3Bcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQgLSBzdGFydDtcbn0pO1xuXG4vLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXG5taWxsaXNlY29uZC5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgayA9IE1hdGguZmxvb3Ioayk7XG4gIGlmICghaXNGaW5pdGUoaykgfHwgIShrID4gMCkpIHJldHVybiBudWxsO1xuICBpZiAoIShrID4gMSkpIHJldHVybiBtaWxsaXNlY29uZDtcbiAgcmV0dXJuIGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcihkYXRlIC8gaykgKiBrKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBrKTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gaztcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtaWxsaXNlY29uZDtcbmV4cG9ydCB2YXIgbWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmQucmFuZ2U7XG4iLCJleHBvcnQgdmFyIGR1cmF0aW9uU2Vjb25kID0gMWUzO1xuZXhwb3J0IHZhciBkdXJhdGlvbk1pbnV0ZSA9IDZlNDtcbmV4cG9ydCB2YXIgZHVyYXRpb25Ib3VyID0gMzZlNTtcbmV4cG9ydCB2YXIgZHVyYXRpb25EYXkgPSA4NjRlNTtcbmV4cG9ydCB2YXIgZHVyYXRpb25XZWVrID0gNjA0OGU1O1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgc2Vjb25kID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcihkYXRlIC8gZHVyYXRpb25TZWNvbmQpICogZHVyYXRpb25TZWNvbmQpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25TZWNvbmQpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uU2Vjb25kO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENTZWNvbmRzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgc2Vjb25kO1xuZXhwb3J0IHZhciBzZWNvbmRzID0gc2Vjb25kLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgbWludXRlID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcihkYXRlIC8gZHVyYXRpb25NaW51dGUpICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgbWludXRlO1xuZXhwb3J0IHZhciBtaW51dGVzID0gbWludXRlLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uSG91ciwgZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG5cbnZhciBob3VyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICB2YXIgb2Zmc2V0ID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogZHVyYXRpb25NaW51dGUgJSBkdXJhdGlvbkhvdXI7XG4gIGlmIChvZmZzZXQgPCAwKSBvZmZzZXQgKz0gZHVyYXRpb25Ib3VyO1xuICBkYXRlLnNldFRpbWUoTWF0aC5mbG9vcigoK2RhdGUgLSBvZmZzZXQpIC8gZHVyYXRpb25Ib3VyKSAqIGR1cmF0aW9uSG91ciArIG9mZnNldCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uSG91cjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBob3VyO1xuZXhwb3J0IHZhciBob3VycyA9IGhvdXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcbmltcG9ydCB7ZHVyYXRpb25EYXksIGR1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvblwiO1xuXG52YXIgZGF5ID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCAtIChlbmQuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIHN0YXJ0LmdldFRpbWV6b25lT2Zmc2V0KCkpICogZHVyYXRpb25NaW51dGUpIC8gZHVyYXRpb25EYXk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldERhdGUoKSAtIDE7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZGF5O1xuZXhwb3J0IHZhciBkYXlzID0gZGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5cbnZhciBtb250aCA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXREYXRlKDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldE1vbnRoKCkgLSBzdGFydC5nZXRNb250aCgpICsgKGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKSkgKiAxMjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBtb250aDtcbmV4cG9ydCB2YXIgbW9udGhzID0gbW9udGgucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIHllYXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0LmdldEZ1bGxZZWFyKCk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxueWVhci5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgcmV0dXJuICFpc0Zpbml0ZShrID0gTWF0aC5mbG9vcihrKSkgfHwgIShrID4gMCkgPyBudWxsIDogaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldEZ1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIGspO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHllYXI7XG5leHBvcnQgdmFyIHllYXJzID0geWVhci5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZX0gZnJvbSBcIi4vZHVyYXRpb25cIjtcblxudmFyIHV0Y01pbnV0ZSA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENTZWNvbmRzKDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjTWludXRlO1xuZXhwb3J0IHZhciB1dGNNaW51dGVzID0gdXRjTWludXRlLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5pbXBvcnQge2R1cmF0aW9uSG91cn0gZnJvbSBcIi4vZHVyYXRpb25cIjtcblxudmFyIHV0Y0hvdXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDTWludXRlcygwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25Ib3VyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENIb3VycygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y0hvdXI7XG5leHBvcnQgdmFyIHV0Y0hvdXJzID0gdXRjSG91ci5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbFwiO1xuaW1wb3J0IHtkdXJhdGlvbkRheX0gZnJvbSBcIi4vZHVyYXRpb25cIjtcblxudmFyIHV0Y0RheSA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25EYXk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0RhdGUoKSAtIDE7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjRGF5O1xuZXhwb3J0IHZhciB1dGNEYXlzID0gdXRjRGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsXCI7XG5cbnZhciB1dGNZZWFyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnV0Y1llYXIuZXZlcnkgPSBmdW5jdGlvbihrKSB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRVVENGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1dGNZZWFyO1xuZXhwb3J0IHZhciB1dGNZZWFycyA9IHV0Y1llYXIucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWxcIjtcblxudmFyIHV0Y01vbnRoID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0VVRDTW9udGgoZGF0ZS5nZXRVVENNb250aCgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0VVRDTW9udGgoKSAtIHN0YXJ0LmdldFVUQ01vbnRoKCkgKyAoZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpKSAqIDEyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y01vbnRoO1xuZXhwb3J0IHZhciB1dGNNb250aHMgPSB1dGNNb250aC5yYW5nZTtcbiIsImltcG9ydCBmb3JtYXRMb2NhbGUgZnJvbSBcIi4vbG9jYWxlXCI7XG5cbnZhciBsb2NhbGU7XG5leHBvcnQgdmFyIHRpbWVGb3JtYXQ7XG5leHBvcnQgdmFyIHRpbWVQYXJzZTtcbmV4cG9ydCB2YXIgdXRjRm9ybWF0O1xuZXhwb3J0IHZhciB1dGNQYXJzZTtcblxuZGVmYXVsdExvY2FsZSh7XG4gIGRhdGVUaW1lOiBcIiV4LCAlWFwiLFxuICBkYXRlOiBcIiUtbS8lLWQvJVlcIixcbiAgdGltZTogXCIlLUk6JU06JVMgJXBcIixcbiAgcGVyaW9kczogW1wiQU1cIiwgXCJQTVwiXSxcbiAgZGF5czogW1wiU3VuZGF5XCIsIFwiTW9uZGF5XCIsIFwiVHVlc2RheVwiLCBcIldlZG5lc2RheVwiLCBcIlRodXJzZGF5XCIsIFwiRnJpZGF5XCIsIFwiU2F0dXJkYXlcIl0sXG4gIHNob3J0RGF5czogW1wiU3VuXCIsIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdLFxuICBtb250aHM6IFtcIkphbnVhcnlcIiwgXCJGZWJydWFyeVwiLCBcIk1hcmNoXCIsIFwiQXByaWxcIiwgXCJNYXlcIiwgXCJKdW5lXCIsIFwiSnVseVwiLCBcIkF1Z3VzdFwiLCBcIlNlcHRlbWJlclwiLCBcIk9jdG9iZXJcIiwgXCJOb3ZlbWJlclwiLCBcIkRlY2VtYmVyXCJdLFxuICBzaG9ydE1vbnRoczogW1wiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsIFwiQXByXCIsIFwiTWF5XCIsIFwiSnVuXCIsIFwiSnVsXCIsIFwiQXVnXCIsIFwiU2VwXCIsIFwiT2N0XCIsIFwiTm92XCIsIFwiRGVjXCJdXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVmYXVsdExvY2FsZShkZWZpbml0aW9uKSB7XG4gIGxvY2FsZSA9IGZvcm1hdExvY2FsZShkZWZpbml0aW9uKTtcbiAgdGltZUZvcm1hdCA9IGxvY2FsZS5mb3JtYXQ7XG4gIHRpbWVQYXJzZSA9IGxvY2FsZS5wYXJzZTtcbiAgdXRjRm9ybWF0ID0gbG9jYWxlLnV0Y0Zvcm1hdDtcbiAgdXRjUGFyc2UgPSBsb2NhbGUudXRjUGFyc2U7XG4gIHJldHVybiBsb2NhbGU7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIHJldHVybiBzLm1hdGNoKC8uezZ9L2cpLm1hcChmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIFwiI1wiICsgeDtcbiAgfSk7XG59XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2ZcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCIzOTNiNzk1MjU0YTM2YjZlY2Y5YzllZGU2Mzc5Mzk4Y2EyNTJiNWNmNmJjZWRiOWM4YzZkMzFiZDllMzllN2JhNTJlN2NiOTQ4NDNjMzlhZDQ5NGFkNjYxNmJlNzk2OWM3YjQxNzNhNTUxOTRjZTZkYmRkZTllZDZcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCIzMTgyYmQ2YmFlZDY5ZWNhZTFjNmRiZWZlNjU1MGRmZDhkM2NmZGFlNmJmZGQwYTIzMWEzNTQ3NGM0NzZhMWQ5OWJjN2U5YzA3NTZiYjE5ZTlhYzhiY2JkZGNkYWRhZWI2MzYzNjM5Njk2OTZiZGJkYmRkOWQ5ZDlcIik7XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuL2NvbG9yc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCIxZjc3YjRhZWM3ZThmZjdmMGVmZmJiNzgyY2EwMmM5OGRmOGFkNjI3MjhmZjk4OTY5NDY3YmRjNWIwZDU4YzU2NGJjNDljOTRlMzc3YzJmN2I2ZDI3ZjdmN2ZjN2M3YzdiY2JkMjJkYmRiOGQxN2JlY2Y5ZWRhZTVcIik7XG4iLCJpbXBvcnQge2N1YmVoZWxpeH0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQge2ludGVycG9sYXRlQ3ViZWhlbGl4TG9uZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGludGVycG9sYXRlQ3ViZWhlbGl4TG9uZyhjdWJlaGVsaXgoMzAwLCAwLjUsIDAuMCksIGN1YmVoZWxpeCgtMjQwLCAwLjUsIDEuMCkpO1xuIiwiaW1wb3J0IHtjdWJlaGVsaXh9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmd9IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuXG5leHBvcnQgdmFyIHdhcm0gPSBpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmcoY3ViZWhlbGl4KC0xMDAsIDAuNzUsIDAuMzUpLCBjdWJlaGVsaXgoODAsIDEuNTAsIDAuOCkpO1xuXG5leHBvcnQgdmFyIGNvb2wgPSBpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmcoY3ViZWhlbGl4KDI2MCwgMC43NSwgMC4zNSksIGN1YmVoZWxpeCg4MCwgMS41MCwgMC44KSk7XG5cbnZhciByYWluYm93ID0gY3ViZWhlbGl4KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHQpIHtcbiAgaWYgKHQgPCAwIHx8IHQgPiAxKSB0IC09IE1hdGguZmxvb3IodCk7XG4gIHZhciB0cyA9IE1hdGguYWJzKHQgLSAwLjUpO1xuICByYWluYm93LmggPSAzNjAgKiB0IC0gMTAwO1xuICByYWluYm93LnMgPSAxLjUgLSAxLjUgKiB0cztcbiAgcmFpbmJvdy5sID0gMC44IC0gMC45ICogdHM7XG4gIHJldHVybiByYWluYm93ICsgXCJcIjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0YW50KCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHtwYXRofSBmcm9tIFwiZDMtcGF0aFwiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50XCI7XG5pbXBvcnQgY3VydmVMaW5lYXIgZnJvbSBcIi4vY3VydmUvbGluZWFyXCI7XG5pbXBvcnQge3ggYXMgcG9pbnRYLCB5IGFzIHBvaW50WX0gZnJvbSBcIi4vcG9pbnRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciB4ID0gcG9pbnRYLFxuICAgICAgeSA9IHBvaW50WSxcbiAgICAgIGRlZmluZWQgPSBjb25zdGFudCh0cnVlKSxcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgY3VydmUgPSBjdXJ2ZUxpbmVhcixcbiAgICAgIG91dHB1dCA9IG51bGw7XG5cbiAgZnVuY3Rpb24gbGluZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSBkYXRhLmxlbmd0aCxcbiAgICAgICAgZCxcbiAgICAgICAgZGVmaW5lZDAgPSBmYWxzZSxcbiAgICAgICAgYnVmZmVyO1xuXG4gICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgb3V0cHV0ID0gY3VydmUoYnVmZmVyID0gcGF0aCgpKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbjsgKytpKSB7XG4gICAgICBpZiAoIShpIDwgbiAmJiBkZWZpbmVkKGQgPSBkYXRhW2ldLCBpLCBkYXRhKSkgPT09IGRlZmluZWQwKSB7XG4gICAgICAgIGlmIChkZWZpbmVkMCA9ICFkZWZpbmVkMCkgb3V0cHV0LmxpbmVTdGFydCgpO1xuICAgICAgICBlbHNlIG91dHB1dC5saW5lRW5kKCk7XG4gICAgICB9XG4gICAgICBpZiAoZGVmaW5lZDApIG91dHB1dC5wb2ludCgreChkLCBpLCBkYXRhKSwgK3koZCwgaSwgZGF0YSkpO1xuICAgIH1cblxuICAgIGlmIChidWZmZXIpIHJldHVybiBvdXRwdXQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICBsaW5lLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBsaW5lKSA6IHg7XG4gIH07XG5cbiAgbGluZS55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluZSkgOiB5O1xuICB9O1xuXG4gIGxpbmUuZGVmaW5lZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkZWZpbmVkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCBsaW5lKSA6IGRlZmluZWQ7XG4gIH07XG5cbiAgbGluZS5jdXJ2ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjdXJ2ZSA9IF8sIGNvbnRleHQgIT0gbnVsbCAmJiAob3V0cHV0ID0gY3VydmUoY29udGV4dCkpLCBsaW5lKSA6IGN1cnZlO1xuICB9O1xuXG4gIGxpbmUuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChfID09IG51bGwgPyBjb250ZXh0ID0gb3V0cHV0ID0gbnVsbCA6IG91dHB1dCA9IGN1cnZlKGNvbnRleHQgPSBfKSwgbGluZSkgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBsaW5lO1xufVxuIiwiaW1wb3J0IHthZGRCZWFjaCwgcmVtb3ZlQmVhY2h9IGZyb20gXCIuL0JlYWNoXCI7XG5pbXBvcnQge3NvcnRDZWxsSGFsZmVkZ2VzLCBjZWxsSGFsZmVkZ2VTdGFydCwgY2xpcENlbGxzfSBmcm9tIFwiLi9DZWxsXCI7XG5pbXBvcnQge2ZpcnN0Q2lyY2xlfSBmcm9tIFwiLi9DaXJjbGVcIjtcbmltcG9ydCB7Y2xpcEVkZ2VzfSBmcm9tIFwiLi9FZGdlXCI7XG5pbXBvcnQgUmVkQmxhY2tUcmVlIGZyb20gXCIuL1JlZEJsYWNrVHJlZVwiO1xuXG5leHBvcnQgdmFyIGVwc2lsb24gPSAxZS02O1xuZXhwb3J0IHZhciBlcHNpbG9uMiA9IDFlLTEyO1xuZXhwb3J0IHZhciBiZWFjaGVzO1xuZXhwb3J0IHZhciBjZWxscztcbmV4cG9ydCB2YXIgY2lyY2xlcztcbmV4cG9ydCB2YXIgZWRnZXM7XG5cbmZ1bmN0aW9uIHRyaWFuZ2xlQXJlYShhLCBiLCBjKSB7XG4gIHJldHVybiAoYVswXSAtIGNbMF0pICogKGJbMV0gLSBhWzFdKSAtIChhWzBdIC0gYlswXSkgKiAoY1sxXSAtIGFbMV0pO1xufVxuXG5mdW5jdGlvbiBsZXhpY29ncmFwaGljKGEsIGIpIHtcbiAgcmV0dXJuIGJbMV0gLSBhWzFdXG4gICAgICB8fCBiWzBdIC0gYVswXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGlhZ3JhbShzaXRlcywgZXh0ZW50KSB7XG4gIHZhciBzaXRlID0gc2l0ZXMuc29ydChsZXhpY29ncmFwaGljKS5wb3AoKSxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgY2lyY2xlO1xuXG4gIGVkZ2VzID0gW107XG4gIGNlbGxzID0gbmV3IEFycmF5KHNpdGVzLmxlbmd0aCk7XG4gIGJlYWNoZXMgPSBuZXcgUmVkQmxhY2tUcmVlO1xuICBjaXJjbGVzID0gbmV3IFJlZEJsYWNrVHJlZTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNpcmNsZSA9IGZpcnN0Q2lyY2xlO1xuICAgIGlmIChzaXRlICYmICghY2lyY2xlIHx8IHNpdGVbMV0gPCBjaXJjbGUueSB8fCAoc2l0ZVsxXSA9PT0gY2lyY2xlLnkgJiYgc2l0ZVswXSA8IGNpcmNsZS54KSkpIHtcbiAgICAgIGlmIChzaXRlWzBdICE9PSB4IHx8IHNpdGVbMV0gIT09IHkpIHtcbiAgICAgICAgYWRkQmVhY2goc2l0ZSk7XG4gICAgICAgIHggPSBzaXRlWzBdLCB5ID0gc2l0ZVsxXTtcbiAgICAgIH1cbiAgICAgIHNpdGUgPSBzaXRlcy5wb3AoKTtcbiAgICB9IGVsc2UgaWYgKGNpcmNsZSkge1xuICAgICAgcmVtb3ZlQmVhY2goY2lyY2xlLmFyYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNvcnRDZWxsSGFsZmVkZ2VzKCk7XG5cbiAgaWYgKGV4dGVudCkge1xuICAgIHZhciB4MCA9ICtleHRlbnRbMF1bMF0sXG4gICAgICAgIHkwID0gK2V4dGVudFswXVsxXSxcbiAgICAgICAgeDEgPSArZXh0ZW50WzFdWzBdLFxuICAgICAgICB5MSA9ICtleHRlbnRbMV1bMV07XG4gICAgY2xpcEVkZ2VzKHgwLCB5MCwgeDEsIHkxKTtcbiAgICBjbGlwQ2VsbHMoeDAsIHkwLCB4MSwgeTEpO1xuICB9XG5cbiAgdGhpcy5lZGdlcyA9IGVkZ2VzO1xuICB0aGlzLmNlbGxzID0gY2VsbHM7XG5cbiAgYmVhY2hlcyA9XG4gIGNpcmNsZXMgPVxuICBlZGdlcyA9XG4gIGNlbGxzID0gbnVsbDtcbn1cblxuRGlhZ3JhbS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBEaWFncmFtLFxuXG4gIHBvbHlnb25zOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZWRnZXMgPSB0aGlzLmVkZ2VzO1xuXG4gICAgcmV0dXJuIHRoaXMuY2VsbHMubWFwKGZ1bmN0aW9uKGNlbGwpIHtcbiAgICAgIHZhciBwb2x5Z29uID0gY2VsbC5oYWxmZWRnZXMubWFwKGZ1bmN0aW9uKGkpIHsgcmV0dXJuIGNlbGxIYWxmZWRnZVN0YXJ0KGNlbGwsIGVkZ2VzW2ldKTsgfSk7XG4gICAgICBwb2x5Z29uLmRhdGEgPSBjZWxsLnNpdGUuZGF0YTtcbiAgICAgIHJldHVybiBwb2x5Z29uO1xuICAgIH0pO1xuICB9LFxuXG4gIHRyaWFuZ2xlczogZnVuY3Rpb24oKSB7XG4gICAgdmFyIHRyaWFuZ2xlcyA9IFtdLFxuICAgICAgICBlZGdlcyA9IHRoaXMuZWRnZXM7XG5cbiAgICB0aGlzLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oY2VsbCwgaSkge1xuICAgICAgaWYgKCEobSA9IChoYWxmZWRnZXMgPSBjZWxsLmhhbGZlZGdlcykubGVuZ3RoKSkgcmV0dXJuO1xuICAgICAgdmFyIHNpdGUgPSBjZWxsLnNpdGUsXG4gICAgICAgICAgaGFsZmVkZ2VzLFxuICAgICAgICAgIGogPSAtMSxcbiAgICAgICAgICBtLFxuICAgICAgICAgIHMwLFxuICAgICAgICAgIGUxID0gZWRnZXNbaGFsZmVkZ2VzW20gLSAxXV0sXG4gICAgICAgICAgczEgPSBlMS5sZWZ0ID09PSBzaXRlID8gZTEucmlnaHQgOiBlMS5sZWZ0O1xuXG4gICAgICB3aGlsZSAoKytqIDwgbSkge1xuICAgICAgICBzMCA9IHMxO1xuICAgICAgICBlMSA9IGVkZ2VzW2hhbGZlZGdlc1tqXV07XG4gICAgICAgIHMxID0gZTEubGVmdCA9PT0gc2l0ZSA/IGUxLnJpZ2h0IDogZTEubGVmdDtcbiAgICAgICAgaWYgKHMwICYmIHMxICYmIGkgPCBzMC5pbmRleCAmJiBpIDwgczEuaW5kZXggJiYgdHJpYW5nbGVBcmVhKHNpdGUsIHMwLCBzMSkgPCAwKSB7XG4gICAgICAgICAgdHJpYW5nbGVzLnB1c2goW3NpdGUuZGF0YSwgczAuZGF0YSwgczEuZGF0YV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJpYW5nbGVzO1xuICB9LFxuXG4gIGxpbmtzOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lZGdlcy5maWx0ZXIoZnVuY3Rpb24oZWRnZSkge1xuICAgICAgcmV0dXJuIGVkZ2UucmlnaHQ7XG4gICAgfSkubWFwKGZ1bmN0aW9uKGVkZ2UpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogZWRnZS5sZWZ0LmRhdGEsXG4gICAgICAgIHRhcmdldDogZWRnZS5yaWdodC5kYXRhXG4gICAgICB9O1xuICAgIH0pO1xuICB9LFxuXG4gIGZpbmQ6IGZ1bmN0aW9uKHgsIHksIHJhZGl1cykge1xuICAgIHZhciB0aGF0ID0gdGhpcywgaTAsIGkxID0gdGhhdC5fZm91bmQgfHwgMCwgbiA9IHRoYXQuY2VsbHMubGVuZ3RoLCBjZWxsO1xuXG4gICAgLy8gVXNlIHRoZSBwcmV2aW91c2x5LWZvdW5kIGNlbGwsIG9yIHN0YXJ0IHdpdGggYW4gYXJiaXRyYXJ5IG9uZS5cbiAgICB3aGlsZSAoIShjZWxsID0gdGhhdC5jZWxsc1tpMV0pKSBpZiAoKytpMSA+PSBuKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgZHggPSB4IC0gY2VsbC5zaXRlWzBdLCBkeSA9IHkgLSBjZWxsLnNpdGVbMV0sIGQyID0gZHggKiBkeCArIGR5ICogZHk7XG5cbiAgICAvLyBUcmF2ZXJzZSB0aGUgaGFsZi1lZGdlcyB0byBmaW5kIGEgY2xvc2VyIGNlbGwsIGlmIGFueS5cbiAgICBkbyB7XG4gICAgICBjZWxsID0gdGhhdC5jZWxsc1tpMCA9IGkxXSwgaTEgPSBudWxsO1xuICAgICAgY2VsbC5oYWxmZWRnZXMuZm9yRWFjaChmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBlZGdlID0gdGhhdC5lZGdlc1tlXSwgdiA9IGVkZ2UubGVmdDtcbiAgICAgICAgaWYgKCh2ID09PSBjZWxsLnNpdGUgfHwgIXYpICYmICEodiA9IGVkZ2UucmlnaHQpKSByZXR1cm47XG4gICAgICAgIHZhciB2eCA9IHggLSB2WzBdLCB2eSA9IHkgLSB2WzFdLCB2MiA9IHZ4ICogdnggKyB2eSAqIHZ5O1xuICAgICAgICBpZiAodjIgPCBkMikgZDIgPSB2MiwgaTEgPSB2LmluZGV4O1xuICAgICAgfSk7XG4gICAgfSB3aGlsZSAoaTEgIT09IG51bGwpO1xuXG4gICAgdGhhdC5fZm91bmQgPSBpMDtcblxuICAgIHJldHVybiByYWRpdXMgPT0gbnVsbCB8fCBkMiA8PSByYWRpdXMgKiByYWRpdXMgPyBjZWxsLnNpdGUgOiBudWxsO1xuICB9XG59XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHt0cmFuc2l0aW9ufSBmcm9tIFwiZDMtdHJhbnNpdGlvblwiO1xuaW1wb3J0IHNlbGVjdGlvbl9hdHRycyBmcm9tIFwiLi9zcmMvc2VsZWN0aW9uL2F0dHJzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3N0eWxlcyBmcm9tIFwiLi9zcmMvc2VsZWN0aW9uL3N0eWxlc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9wcm9wZXJ0aWVzIGZyb20gXCIuL3NyYy9zZWxlY3Rpb24vcHJvcGVydGllc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0cnMgZnJvbSBcIi4vc3JjL3RyYW5zaXRpb24vYXR0cnNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlcyBmcm9tIFwiLi9zcmMvdHJhbnNpdGlvbi9zdHlsZXNcIjtcblxuc2VsZWN0aW9uLnByb3RvdHlwZS5hdHRycyA9IHNlbGVjdGlvbl9hdHRycztcbnNlbGVjdGlvbi5wcm90b3R5cGUuc3R5bGVzID0gc2VsZWN0aW9uX3N0eWxlcztcbnNlbGVjdGlvbi5wcm90b3R5cGUucHJvcGVydGllcyA9IHNlbGVjdGlvbl9wcm9wZXJ0aWVzO1xudHJhbnNpdGlvbi5wcm90b3R5cGUuYXR0cnMgPSB0cmFuc2l0aW9uX2F0dHJzO1xudHJhbnNpdGlvbi5wcm90b3R5cGUuc3R5bGVzID0gdHJhbnNpdGlvbl9zdHlsZXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBjb25zdCBDT05TVEFOVFMgPSB7XG4gICdOQU1FU1BBQ0UnOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuICAnQ0xBU1MnOiBbJ28tY2hhcnQnXSxcbiAgJ1NUWUxFJzogW1xuICAgICdmb250LXNpemU6IDEzcHgnLFxuICAgICdmb250LWZhbWlseTogSGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYSwgQXJpYWwgLHNhbnMtc2VyaWYnLFxuICAgICdmb250LXdlaWdodDogNDAwJyxcbiAgICAnbWF4LXdpZHRoOiAxMDAlJ1xuICBdLFxuICAnRE9UU19SQURJVVMnOiA0LFxuICAnQkFSX0dBUCc6IDAuNSxcbiAgJ0xFR0VORF9NQVJHSU5fVE9QJzogNTYsXG4gICdMRUdFTkRfTUFSR0lOX0JPVFRPTSc6IDEwXG59OyIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuaW1wb3J0ICdkMy1zZWxlY3Rpb24tbXVsdGknO1xuaW1wb3J0IHtDT05TVEFOVFMgYXMgQ09OU1RBTlRTfSBmcm9tICcuL28tY2hhcnRzLmNvbnN0YW50cyc7XG5cbmNsYXNzIG9DaGFydHMge1xuXG4gIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBkYXRhKSB7XG5cbiAgICB0aGlzLmNoYXJ0ID0ge307XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5jaGFydC5lbGVtZW50ID0gZDMuc2VsZWN0KHRoaXMuc2V0dGluZ3Muc2VsZWN0b3IpO1xuICAgIHRoaXMudGltZVBhcnNlID0gZDMudGltZVBhcnNlKHRoaXMuc2V0dGluZ3MuZm9ybWF0cy50aW1lKTtcblxuICB9XG5cbiAgdHJhbnNsYXRlKHgsIHkpIHtcbiAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgeCArICcsJyArIHkgKyAnKSc7XG4gIH1cblxuICBzbHVnKFRleHQsIHNwYWNlKSB7XG4gICAgcmV0dXJuIFRleHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXlxcdyBdKy9nLCcgJykucmVwbGFjZSgvICsvZywgc3BhY2UpO1xuICB9XG5cbiAgaW5pdCgpIHtcblxuICAgIHRoaXMucmVuZGVyKHtcbiAgICAgICdzZXR0aW5ncyc6IHRoaXMuc2V0dGluZ3MsXG4gICAgICAnY2hhcnQnOiB0aGlzLmNoYXJ0LFxuICAgICAgJ2RhdGEnOiB0aGlzLmRhdGEsXG4gICAgICAnbmFtZXNwYWNlJzogJ2NyZWF0ZSdcbiAgICB9KVxuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgICAgdGhpcy5yZW5kZXIoe1xuICAgICAgICAnc2V0dGluZ3MnOiB0aGlzLnNldHRpbmdzLFxuICAgICAgICAnY2hhcnQnOiB0aGlzLmNoYXJ0LFxuICAgICAgICAnZGF0YSc6IHRoaXMuZGF0YSxcbiAgICAgICAgJ25hbWVzcGFjZSc6ICd1cGRhdGUnXG4gICAgICB9KTtcbiAgICB9KTtcblxuICB9XG5cbiAgcmVuZGVyKGFyZ3MpIHtcblxuICAgIGxldCBzID0gYXJncy5zZXR0aW5ncztcbiAgICBsZXQgYyA9IGFyZ3MuY2hhcnQ7XG4gICAgbGV0IGQgPSBhcmdzLmRhdGE7XG4gICAgbGV0IG4gPSBhcmdzLm5hbWVzcGFjZTtcblxuICAgIGMgPSB0aGlzLnN2ZyhzLCBjKVtuXSgpO1xuICAgIHMgPSB0aGlzLmRlZmluZShzLCBkKTtcbiAgICBzID0gdGhpcy5kb21haW5zKHMsIGQpO1xuICAgIGMgPSB0aGlzLnBsb3RzKHMsIGMsIGQpW25dKCk7XG4gICAgYyA9IHRoaXMuYXhpcyhzLCBjKVtuXSgpO1xuXG4gIH1cblxuICAvLyBDcmVhdGUgU1ZHXG4gIHN2ZyhzZXR0aW5ncywgY2hhcnQpIHtcblxuICAgIGxldCBfdGhpcyA9IHRoaXM7XG5cbiAgICBfdGhpcy5zdmcuY3JlYXRlID0gY3JlYXRlO1xuICAgIF90aGlzLnN2Zy51cGRhdGUgPSB1cGRhdGU7XG4gICAgX3RoaXMuc3ZnLnNlbGVjdGlvbnMgPSBzZWxlY3Rpb25zO1xuICAgIF90aGlzLnN2Zy5jbGFzc2VzID0gY2xhc3NlcztcblxuICAgIHJldHVybiBfdGhpcy5zdmc7XG5cbiAgICBmdW5jdGlvbiBjbGFzc2VzKEtFWSkge1xuXG4gICAgICBsZXQgYyA9IHtcbiAgICAgICAgJ2JhY2tncm91bmQnOiBbXG4gICAgICAgICAgJ28tY2hhcnRfX2JnJyxcbiAgICAgICAgICAnZmlsbC0nICsgc2V0dGluZ3MuY29sb3JzLmJhY2tncm91bmQsXG4gICAgICAgIF1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBjW0tFWV0uam9pbignICcpO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlKCkge1xuXG4gICAgICBjaGFydC5zdmcgPSBjaGFydC5lbGVtZW50LmFwcGVuZCgnc3ZnJykuYXR0cnMoe1xuICAgICAgICAneG1sbnMnOiBDT05TVEFOVFMuTkFNRVNQQUNFXG4gICAgICB9KTtcblxuICAgICAgY2hhcnQuYmcgPSBjaGFydC5zdmcuYXBwZW5kKCdyZWN0JykuYXR0cnMoe1xuICAgICAgICAnY2xhc3MnOiBfdGhpcy5zdmcuY2xhc3NlcygnYmFja2dyb3VuZCcpXG4gICAgICB9KTtcblxuICAgICAgY2hhcnQuZGVmcyA9IGNoYXJ0LnN2Zy5hcHBlbmQoJ2RlZnMnKTtcbiAgICAgIGNoYXJ0LmcgPSBjaGFydC5zdmcuYXBwZW5kKCdnJyk7XG5cbiAgICAgIHJldHVybiBfdGhpcy5zdmcudXBkYXRlKCk7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XG5cbiAgICAgIGNoYXJ0LnN2ZyA9IF90aGlzLnN2Zy5zZWxlY3Rpb25zKCkuc3ZnO1xuICAgICAgY2hhcnQuZyA9IF90aGlzLnN2Zy5zZWxlY3Rpb25zKCkuZztcblxuICAgICAgc2V0dGluZ3Mud2lkdGggPSBjaGFydC5lbGVtZW50LnByb3BlcnR5KCdjbGllbnRXaWR0aCcpO1xuXG4gICAgICBjaGFydC5zdmcuYXR0cnMoe1xuICAgICAgICAnY2xhc3MnOiBDT05TVEFOVFMuQ0xBU1Muam9pbignICcpLFxuICAgICAgICAnc3R5bGUnOiBDT05TVEFOVFMuU1RZTEUuam9pbignOycpLFxuICAgICAgICAnd2lkdGgnOiBzZXR0aW5ncy53aWR0aCxcbiAgICAgICAgJ2hlaWdodCc6IHNldHRpbmdzLmhlaWdodFxuICAgICAgfSk7XG5cbiAgICAgIGNoYXJ0LmJnLmF0dHJzKHtcbiAgICAgICAgJ3dpZHRoJzogc2V0dGluZ3Mud2lkdGgsXG4gICAgICAgICdoZWlnaHQnOiBzZXR0aW5ncy5oZWlnaHRcbiAgICAgIH0pO1xuXG4gICAgICBjaGFydC5nLmF0dHJzKHtcbiAgICAgICAgJ3RyYW5zZm9ybSc6IF90aGlzLnRyYW5zbGF0ZShzZXR0aW5ncy5tYXJnaW5bM10sIHNldHRpbmdzLm1hcmdpblswXSlcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gY2hhcnQ7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZWxlY3Rpb25zKCkge1xuXG4gICAgICBjaGFydC5zdmcgPSBjaGFydC5lbGVtZW50LnNlbGVjdCgnc3ZnJyk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgICdlbGVtZW50JzogY2hhcnQuZWxlbWVudCxcbiAgICAgICAgJ3N2Zyc6IGNoYXJ0LnN2ZyxcbiAgICAgICAgJ2cnOiBjaGFydC5zdmcuc2VsZWN0KCdnJylcbiAgICAgIH1cblxuICAgIH1cblxuICB9XG5cbiAgZGVmaW5lKHNldHRpbmdzLCBkYXRhKSB7XG5cbiAgICAvLyB0aGlzIHVzZWQgdHAgYmUgYSBwcm9taXNlIGNoYWluLCBJJ20gbm90IHN1cmUgb2YgaXQncyBpbXBvcnRhbmNlIHRvIGJlIHNvIGFueW1vcmVcbiAgICAvLyAtIGRldm93aGlwcGl0XG4gICAgc2V0dGluZ3MgPSB0aGlzLmRlZmluZUxheW91dChzZXR0aW5ncyk7XG4gICAgc2V0dGluZ3MgPSB0aGlzLmRlZmluZVNjYWxlcyhzZXR0aW5ncyk7XG4gICAgc2V0dGluZ3MgPSB0aGlzLmRlZmluZUF4aXMoc2V0dGluZ3MpO1xuICAgIHNldHRpbmdzID0gdGhpcy5kZWZpbmVQbG90cyhzZXR0aW5ncyk7XG5cbiAgICByZXR1cm4gc2V0dGluZ3M7XG5cbiAgfVxuXG4gIGRlZmluZUxheW91dChzZXR0aW5ncykge1xuXG4gICAgc2V0dGluZ3MuaW5uZXJXaWR0aCA9IHNldHRpbmdzLndpZHRoICAtIChzZXR0aW5ncy5tYXJnaW5bMV0gKyBzZXR0aW5ncy5tYXJnaW5bM10pO1xuICAgIHNldHRpbmdzLmlubmVySGVpZ2h0ID0gc2V0dGluZ3MuaGVpZ2h0IC0gKHNldHRpbmdzLm1hcmdpblswXSArIHNldHRpbmdzLm1hcmdpblsyXSk7XG4gICAgc2V0dGluZ3MudG9wID0gc2V0dGluZ3MucGFkZGluZ1swXTtcbiAgICBzZXR0aW5ncy5yaWdodCA9IHNldHRpbmdzLmlubmVyV2lkdGggLSAoc2V0dGluZ3MucGFkZGluZ1sxXSArIHNldHRpbmdzLnBhZGRpbmdbM10pO1xuICAgIHNldHRpbmdzLmJvdHRvbSA9IHNldHRpbmdzLmlubmVySGVpZ2h0IC0gKHNldHRpbmdzLnBhZGRpbmdbMF0gKyBzZXR0aW5ncy5wYWRkaW5nWzJdKTtcbiAgICBzZXR0aW5ncy5sZWZ0ID0gc2V0dGluZ3MucGFkZGluZ1szXTtcblxuICAgIHJldHVybiBzZXR0aW5ncztcblxuICB9XG5cbiAgZGVmaW5lU2NhbGVzKHNldHRpbmdzKSB7XG5cbiAgICBzZXR0aW5ncy5zY2FsZXMgPSB7fTtcbiAgICBzZXR0aW5ncy5zY2FsZXMueCA9IGQzLnNjYWxlVGltZSgpXG4gICAgICAucmFuZ2UoW3NldHRpbmdzLmxlZnQsIHNldHRpbmdzLnJpZ2h0XSk7XG4gICAgc2V0dGluZ3Muc2NhbGVzLnkgPSBkMy5zY2FsZUxpbmVhcigpXG4gICAgICAucmFuZ2UoW3NldHRpbmdzLmJvdHRvbSwgc2V0dGluZ3MudG9wXSlcbiAgICAgIC5jbGFtcCh0cnVlKTtcblxuICAgIHJldHVybiBzZXR0aW5ncztcblxuICB9XG5cbiAgZGVmaW5lQXhpcyhzZXR0aW5ncykge1xuXG4gICAgc2V0dGluZ3MuYXhpcyA9IHt9O1xuICAgIHNldHRpbmdzLmF4aXMueCA9IGQzLmF4aXNCb3R0b20oKVxuICAgICAgLnNjYWxlKHNldHRpbmdzLnNjYWxlcy54KTtcbiAgICBzZXR0aW5ncy5heGlzLnkgPSBkMy5heGlzTGVmdCgpXG4gICAgICAuc2NhbGUoc2V0dGluZ3Muc2NhbGVzLnkpXG5cbiAgICByZXR1cm4gc2V0dGluZ3M7XG5cbiAgfVxuXG4gIGRlZmluZVBsb3RzKHNldHRpbmdzKSB7XG5cbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xuXG4gICAgc2V0dGluZ3MucGxvdHMgPSB7fTtcbiAgICBzZXR0aW5ncy5wbG90cy5saW5lID0gZDMubGluZSgpXG4gICAgICAueChmdW5jdGlvbihkKSB7XG4gICAgICAgIHJldHVybiBzZXR0aW5ncy5zY2FsZXMueChfdGhpcy50aW1lUGFyc2UoZFswXSkpO1xuICAgICAgfSlcbiAgICAgIC55KGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgcmV0dXJuIHNldHRpbmdzLnNjYWxlcy55KGRbMV0pO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gc2V0dGluZ3M7XG5cbiAgfVxuXG4gIGRvbWFpbnMoc2V0dGluZ3MsIGRhdGEpIHtcblxuICAgIGxldCBfdGhpcyA9IHRoaXM7XG5cbiAgICBsZXQgbWluID0gZnVuY3Rpb24oZGF0YSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBkMy5taW4oZGF0YSwgZnVuY3Rpb24oZCkge1xuICAgICAgICByZXR1cm4gZDMubWluKGQuZGF0YSwgZnVuY3Rpb24oZSkge1xuICAgICAgICAgIHJldHVybiBlW2luZGV4XTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgbGV0IG1heCA9IGZ1bmN0aW9uKGRhdGEsIGluZGV4KSB7XG4gICAgICByZXR1cm4gZDMubWF4KGRhdGEsIGZ1bmN0aW9uKGQpIHtcbiAgICAgICAgcmV0dXJuIGQzLm1heChkLmRhdGEsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICByZXR1cm4gZVtpbmRleF07XG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBsZXQgYmFycyA9IGRhdGEuZmlsdGVyKHggPT4geC50eXBlID09PSAnYmFyJykubGVuZ3RoO1xuXG4gICAgbGV0IHgwID0gX3RoaXMudGltZVBhcnNlKG1pbihkYXRhLCAwKSk7XG4gICAgbGV0IHgxID0gX3RoaXMudGltZVBhcnNlKG1heChkYXRhLCAwKSk7XG5cbiAgICAvLyBpZiB0aGVyZSBhcmUgYmFycyBpdCdzIG5pY2UgdG8gZ2l2ZSBlYWNoIHNpZGUgZXh0cmEgc3BhY2VcbiAgICBpZiAoYmFycyA+IDApIHtcbiAgICAgIHgwID0gZDMudGltZU1vbnRoLm9mZnNldCh4MCwgLTEpO1xuICAgICAgeDEgPSBkMy50aW1lTW9udGgub2Zmc2V0KHgxLCAxKTtcbiAgICB9XG5cbiAgICBsZXQgeTAgPSBtaW4oZGF0YSwgMSk7XG4gICAgbGV0IHkxID0gbWF4KGRhdGEsIDEpO1xuXG4gICAgc2V0dGluZ3Muc2NhbGVzLnguZG9tYWluKFt4MCwgeDFdKS5uaWNlKCk7XG4gICAgc2V0dGluZ3Muc2NhbGVzLnkuZG9tYWluKFt5MCwgeTFdKS5uaWNlKCk7XG5cbiAgICByZXR1cm4gc2V0dGluZ3M7XG5cbiAgfVxuXG4gIHBsb3RzKHNldHRpbmdzLCBjaGFydCwgZGF0YSkge1xuXG4gICAgbGV0IF90aGlzID0gdGhpcztcblxuICAgIF90aGlzLnBsb3RzLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICBfdGhpcy5wbG90cy5saW5lID0gbGluZTtcbiAgICBfdGhpcy5wbG90cy5iYXIgPSBiYXI7XG4gICAgX3RoaXMucGxvdHMudXBkYXRlID0gdXBkYXRlO1xuICAgIF90aGlzLnBsb3RzLmNsYXNzZXMgPSBjbGFzc2VzO1xuXG4gICAgcmV0dXJuIF90aGlzLnBsb3RzO1xuXG4gICAgZnVuY3Rpb24gY2xhc3NlcyhLRVksIG5hbWUsIGlkKSB7XG5cbiAgICAgIGxldCBjID0ge1xuICAgICAgICAncGxvdCc6IFtcbiAgICAgICAgICAnby1jaGFydF9fcGxvdCcsXG4gICAgICAgICAgJ28tY2hhcnRfX3Bsb3QtLScgKyBfdGhpcy5zbHVnKG5hbWUsICctJyksXG4gICAgICAgICAgJ28tY2hhcnRfX3Bsb3QtLScgKyBfdGhpcy5zbHVnKGlkLCAnLScpXG4gICAgICAgIF0sXG4gICAgICAgICdsaW5lJzogW1xuICAgICAgICAgICdvLWNoYXJ0X19saW5lJyxcbiAgICAgICAgICAnc3Ryb2tlLScgKyBfdGhpcy5zbHVnKGlkLCAnLScpXG4gICAgICAgIF0sXG4gICAgICAgICdkb3RzJzogW1xuICAgICAgICAgICdvLWNoYXJ0X19kb3QnLFxuICAgICAgICAgICdmaWxsLScgKyBfdGhpcy5zbHVnKGlkLCAnLScpLFxuICAgICAgICAgICdzdHJva2UtJyArIHNldHRpbmdzLmNvbG9ycy5iYWNrZ3JvdW5kXG4gICAgICAgIF0sXG4gICAgICAgICdiYXInOiBbXG4gICAgICAgICAgJ28tY2hhcnRfX2JhcicsXG4gICAgICAgICAgJ2ZpbGwtJyArIF90aGlzLnNsdWcoaWQsICctJyksXG4gICAgICAgIF1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBjW0tFWV0uam9pbignICcpO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlKCkge1xuXG4gICAgICAvLyByZW1vdmUgb2xkIGNvbnRhaW5lcnNcbiAgICAgIGNoYXJ0Lmcuc2VsZWN0QWxsKCcuby1jaGFydF9fcGxvdCcpLnJlbW92ZSgpO1xuXG4gICAgICAvLyBhZGQgcGxvdCBjb250YWluZXJzXG4gICAgICBjaGFydC5wbG90cyA9IGNoYXJ0Lmcuc2VsZWN0QWxsKCcuby1jaGFydF9fcGxvdCcpXG4gICAgICAgICAgLmRhdGEoZGF0YSlcbiAgICAgICAgLmVudGVyKCkuYXBwZW5kKCdnJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgbGV0IGQgPSBkMy5zZWxlY3QodGhpcykuZGF0YSgpWzBdO1xuICAgICAgICAgIHJldHVybiBfdGhpcy5wbG90cy5jbGFzc2VzKCdwbG90JywgZC5sYWJlbCwgZC5sYWJlbCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAvLyBydW4gZWFjaCBwbG90IHRocm91Z2ggaXQncyBvd24gcmVuZGVyaW5nIGZ1bmN0aW9uIGJhc2VkIG9uIHR5cGVcbiAgICAgIGNoYXJ0LnBsb3RzLmVhY2goZnVuY3Rpb24oZCkge1xuICAgICAgICBfdGhpcy5wbG90c1tkLnR5cGVdKGQzLnNlbGVjdCh0aGlzKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGNoYXJ0O1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZShwbG90KSB7XG5cbiAgICAgIHBsb3QuYXBwZW5kKCdwYXRoJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgKGQpID0+IF90aGlzLnBsb3RzLmNsYXNzZXMoJ2xpbmUnLCAnJywgZC5jb2xvcikpXG4gICAgICAgIC5hdHRyKCdkJywgKGQpID0+IHNldHRpbmdzLnBsb3RzLmxpbmUoZC5kYXRhKSk7XG5cbiAgICAgIHBsb3Quc2VsZWN0QWxsKCcuby1jaGFydF9fZG90JylcbiAgICAgICAgICAuZGF0YSgoZCkgPT4gZC5kYXRhKVxuICAgICAgICAuZW50ZXIoKS5hcHBlbmQoJ2NpcmNsZScpXG4gICAgICAgIC5hdHRycyh7XG4gICAgICAgICAgJ2N4Jzogc2V0dGluZ3MucGxvdHMubGluZS54KCksXG4gICAgICAgICAgJ2N5Jzogc2V0dGluZ3MucGxvdHMubGluZS55KCksXG4gICAgICAgICAgJ3InOiBDT05TVEFOVFMuRE9UU19SQURJVVNcbiAgICAgICAgfSkuYXR0cignY2xhc3MnLCBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICB2YXIgZCA9IGQzLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLmRhdGEoKVswXTtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5wbG90cy5jbGFzc2VzKCdkb3RzJywgJycsIGQuY29sb3IpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJhcihwbG90KSB7XG5cbiAgICAgIGxldCBiYXJzID0gZGF0YS5maWx0ZXIoeCA9PiB4LnR5cGUgPT09ICdiYXInKTsgLy8gZ2V0IGp1c3QgdGhlIGJhciBwbG90c1xuICAgICAgbGV0IHAgPSBwbG90LmRhdGEoKVswXTsgLy8gZ2V0IHRoZSBwbG90J3MgZGF0YS9jb25maWd1cmF0aW9uXG4gICAgICBsZXQgbWF4ID0gTWF0aC5tYXgoMCwgcC5kYXRhLmxlbmd0aCk7IC8vIEkgdGhpbmsgdGhlIG1heCBiZSB0aGUgbWF4IGxlbmd0aCBvZiB0aGUgbGFyZ2VzdCBwbG90P1xuICAgICAgbGV0IHdpZHRoID0gKChzZXR0aW5ncy5yaWdodCAvIG1heCkgKiBDT05TVEFOVFMuQkFSX0dBUCApIC8gYmFycy5sZW5ndGg7IC8vIGNhbGN1bGF0ZSB0aGUgd2lkdGhcbiAgICAgIGxldCBjbGFzc2VzID0gX3RoaXMucGxvdHMuY2xhc3NlcygnYmFyJywgJycsIHAuY29sb3IpOyAvLyBzZXQgdGhlIGNvbG9yXG4gICAgICBsZXQgb3JkZXIgPSAoYmFycy5tYXAoKGQpID0+IGQubGFiZWwpLmluZGV4T2YocC5sYWJlbCkpICsgMTsgLy8gZ2V0IG9yZGVyIG9mIHRoaXMgcGxvdFxuICAgICAgbGV0IG9mZnNldCA9ICh3aWR0aCAqIG9yZGVyKSAtICgod2lkdGggKiBiYXJzLmxlbmd0aCkgLyAyKTsgLy8gY2FsY3VsYXRlIHRoZSBvZmZzZXRcblxuICAgICAgcGxvdC5zZWxlY3RBbGwoJy5vLWNoYXJ0X19iYXInKVxuICAgICAgICAgIC5kYXRhKChkKSA9PiBwLmRhdGEpXG4gICAgICAgIC5lbnRlcigpLmFwcGVuZCgncmVjdCcpXG4gICAgICAgIC5hdHRycyh7XG4gICAgICAgICAgJ2NsYXNzJzogY2xhc3NlcyxcbiAgICAgICAgICAnd2lkdGgnOiB3aWR0aCxcbiAgICAgICAgICAneCc6IChkKSA9PiBzZXR0aW5ncy5zY2FsZXMueChfdGhpcy50aW1lUGFyc2UoZFswXSkpIC0gb2Zmc2V0LFxuICAgICAgICAgICd5JzogKGQpID0+IHNldHRpbmdzLnNjYWxlcy55KE1hdGgubWF4KDAsIGRbMV0pKSxcbiAgICAgICAgICAnaGVpZ2h0JzogKGQpID0+IE1hdGguYWJzKFxuICAgICAgICAgICAgTWF0aC5taW4oc2V0dGluZ3Muc2NhbGVzLnkoMCksIHNldHRpbmdzLmJvdHRvbSkgLSBzZXR0aW5ncy5zY2FsZXMueShkWzFdKVxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuXG4gICAgICByZXR1cm4gX3RoaXMucGxvdHMuY3JlYXRlKCk7XG5cbiAgICB9XG5cbiAgfVxuXG4gICAgLy8gQXhpc1xuICBheGlzKHNldHRpbmdzLCBjaGFydCkge1xuXG4gICAgbGV0IF90aGlzID0gdGhpcztcblxuICAgIF90aGlzLmF4aXMuY3JlYXRlID0gY3JlYXRlO1xuICAgIF90aGlzLmF4aXMudXBkYXRlID0gdXBkYXRlO1xuICAgIF90aGlzLmF4aXMubGFiZWxzID0gbGFiZWxzO1xuICAgIF90aGlzLmF4aXMudGV4dCA9IHRleHQ7XG4gICAgX3RoaXMuYXhpcy5tb2RpZnkgPSBtb2RpZnk7XG4gICAgX3RoaXMuYXhpcy5jbGFzc2VzID0gY2xhc3NlcztcblxuICAgIHJldHVybiBfdGhpcy5heGlzO1xuXG4gICAgZnVuY3Rpb24gY2xhc3NlcyhLRVkpIHtcblxuICAgICAgbGV0IGMgPSB7XG4gICAgICAgICdheGlzX3RvcCc6IFtcbiAgICAgICAgICAnby1jaGFydF9fYXhpcycsXG4gICAgICAgICAgJ28tY2hhcnRfX2F4aXMtLXgnLFxuICAgICAgICAgICdvLWNoYXJ0X19heGlzLS10b3AnXG4gICAgICAgIF0sXG4gICAgICAgICdheGlzX2JvdHRvbSc6IFtcbiAgICAgICAgICAnby1jaGFydF9fYXhpcycsXG4gICAgICAgICAgJ28tY2hhcnRfX2F4aXMtLXgnLFxuICAgICAgICAgICdvLWNoYXJ0X19heGlzLS1ib3R0b20nXG4gICAgICAgIF0sXG4gICAgICAgICdheGlzX2xlZnQnOiBbXG4gICAgICAgICAgJ28tY2hhcnRfX2F4aXMnLFxuICAgICAgICAgICdvLWNoYXJ0X19heGlzLS15JyxcbiAgICAgICAgICAnby1jaGFydF9fYXhpcy0tbGVmdCdcbiAgICAgICAgXSxcbiAgICAgICAgJ2F4aXNfcmlnaHQnOiBbXG4gICAgICAgICAgJ28tY2hhcnRfX2F4aXMnLFxuICAgICAgICAgICdvLWNoYXJ0X19heGlzLS15JyxcbiAgICAgICAgICAnby1jaGFydF9fYXhpcy0tcmlnaHQnXG4gICAgICAgIF0sXG4gICAgICAgICdsYWJlbF90b3AnOiBbXG4gICAgICAgICAgJ2ZpbGwtJyArIHNldHRpbmdzLmNvbG9ycy5sYWJlbHMsXG4gICAgICAgICAgJ28tY2hhcnRfX2xhYmVsJyxcbiAgICAgICAgICAnby1jaGFydF9fbGFiZWwtLXgnLFxuICAgICAgICAgICdvLWNoYXJ0X19sYWJlbC0tdG9wJ1xuICAgICAgICBdLFxuICAgICAgICAnbGFiZWxfYm90dG9tJzogW1xuICAgICAgICAgICdmaWxsLScgKyBzZXR0aW5ncy5jb2xvcnMubGFiZWxzLFxuICAgICAgICAgICdvLWNoYXJ0X19sYWJlbCcsXG4gICAgICAgICAgJ28tY2hhcnRfX2xhYmVsLS14JyxcbiAgICAgICAgICAnby1jaGFydF9fbGFiZWwtLWJvdHRvbSdcbiAgICAgICAgXSxcbiAgICAgICAgJ2xhYmVsX2xlZnQnOiBbXG4gICAgICAgICAgJ2ZpbGwtJyArIHNldHRpbmdzLmNvbG9ycy5sYWJlbHMsXG4gICAgICAgICAgJ28tY2hhcnRfX2xhYmVsJyxcbiAgICAgICAgICAnby1jaGFydF9fbGFiZWwtLXknLFxuICAgICAgICAgICdvLWNoYXJ0X19sYWJlbC0tbGVmdCdcbiAgICAgICAgXSxcbiAgICAgICAgJ2xhYmVsX3JpZ2h0JzogW1xuICAgICAgICAgICdmaWxsLScgKyBzZXR0aW5ncy5jb2xvcnMubGFiZWxzLFxuICAgICAgICAgICdvLWNoYXJ0X19sYWJlbCcsXG4gICAgICAgICAgJ28tY2hhcnRfX2xhYmVsLS15JyxcbiAgICAgICAgICAnby1jaGFydF9fbGFiZWwtLXJpZ2h0J1xuICAgICAgICBdLFxuICAgICAgICAndGlja3MnOiBbXG4gICAgICAgICAgJ3RpY2snLFxuICAgICAgICAgICdmaWxsLScgKyBzZXR0aW5ncy5jb2xvcnMuYXhpc1xuICAgICAgICBdLFxuICAgICAgICAnbGluZV94JzogW1xuICAgICAgICAgICdvLWNoYXJ0X19heGlzLWdhcC0teCcsXG4gICAgICAgICAgJ3N0cm9rZS0nICsgc2V0dGluZ3MuY29sb3JzLmF4aXNcbiAgICAgICAgXSxcbiAgICAgICAgJ2xpbmVfeSc6IFtcbiAgICAgICAgICAnby1jaGFydF9fYXhpcy1nYXAtLXknLFxuICAgICAgICAgICdzdHJva2UtJyArIHNldHRpbmdzLmNvbG9ycy5heGlzXG4gICAgICAgIF1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNbS0VZXS5qb2luKCcgJyk7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGUoKSB7XG5cbiAgICAgIGNoYXJ0LmF4aXMgPSB7fTtcblxuICAgICAgY2hhcnQuYXhpcy54ID0gY2hhcnQuZy5hcHBlbmQoJ2cnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCBfdGhpcy5heGlzLmNsYXNzZXMoJ2F4aXNfYm90dG9tJykpXG5cbiAgICAgIGNoYXJ0LmF4aXMueSA9IGNoYXJ0LmcuYXBwZW5kKCdnJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgX3RoaXMuYXhpcy5jbGFzc2VzKCdheGlzX2xlZnQnKSlcblxuICAgICAgX3RoaXMuYXhpcy51cGRhdGUoKTtcblxuICAgICAgX3RoaXMuYXhpcy5tb2RpZnkoKTtcblxuICAgICAgcmV0dXJuIF90aGlzLmF4aXMubGFiZWxzKCk7XG5cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XG5cbiAgICAgIGNoYXJ0LmF4aXMueC5jYWxsKHNldHRpbmdzLmF4aXMueClcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIF90aGlzLnRyYW5zbGF0ZSgwLCBzZXR0aW5ncy5pbm5lckhlaWdodCkpXG5cbiAgICAgIGNoYXJ0LmF4aXMueS5jYWxsKHNldHRpbmdzLmF4aXMueSk7XG5cbiAgICAgIGNoYXJ0LmF4aXMueC5zZWxlY3QoJy5vLWNoYXJ0X19heGlzLWdhcC0teCcpLmF0dHJzKHtcbiAgICAgICAgJ3gxJzogMCwgJ3kxJzogMCwgICd5Mic6IDAsXG4gICAgICAgICd4Mic6IHNldHRpbmdzLmlubmVyV2lkdGgsXG4gICAgICB9KTtcblxuICAgICAgY2hhcnQuYXhpcy55LnNlbGVjdCgnLm8tY2hhcnRfX2F4aXMtZ2FwLS15JykuYXR0cnMoe1xuICAgICAgICAneDEnOiAwLCAneTEnOiAwLCAneDInOiAwLFxuICAgICAgICAneTInOiBzZXR0aW5ncy5pbm5lckhlaWdodFxuICAgICAgfSk7XG5cbiAgICAgIGNoYXJ0Lmcuc2VsZWN0QWxsKCcudGljaycpLmF0dHIoJ2NsYXNzJywgX3RoaXMuYXhpcy5jbGFzc2VzKCd0aWNrcycpKTtcblxuICAgICAgLy8gcG9zaXRpb24gdGhlIHggYXhpcyBsYWJlbFxuICAgICAgY2hhcnQuZy5zZWxlY3QoJy5vLWNoYXJ0X19sYWJlbC0teCcpLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgeHQgPSBkMy5zZWxlY3QodGhpcykuc2VsZWN0KCd0ZXh0Jyk7XG4gICAgICAgIHZhciB4ID0gc2V0dGluZ3MubGVmdCArIChzZXR0aW5ncy5pbm5lcldpZHRoIC8gMik7XG4gICAgICAgIHZhciB5ID0gc2V0dGluZ3MuaGVpZ2h0IC0geHQubm9kZSgpLmdldEJCb3goKS5oZWlnaHRcbiAgICAgICAgcmV0dXJuIF90aGlzLnRyYW5zbGF0ZSh4LCB5KTtcbiAgICAgIH0pXG5cbiAgICAgIC8vIHBvc2l0aW9uIHRoZSB5IGF4aXMgbGFiZWxcbiAgICAgIGNoYXJ0Lmcuc2VsZWN0KCcuby1jaGFydF9fbGFiZWwtLXknKS5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHggPSAwIC0gc2V0dGluZ3MubWFyZ2luWzNdICsgKGQzLnNlbGVjdCh0aGlzKS5ub2RlKCkuZ2V0QkJveCgpLmhlaWdodCk7XG4gICAgICAgIHZhciB5ID0gc2V0dGluZ3MuaW5uZXJIZWlnaHQgLyAyO1xuICAgICAgICByZXR1cm4gW190aGlzLnRyYW5zbGF0ZSh4LCB5KSwgJ3JvdGF0ZSgnKyAtOTAgKycpJ10uam9pbignICcpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjaGFydDtcblxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxhYmVscygpIHtcblxuICAgICAgLy8gY3JlYXRlIGxhYmVsc1xuICAgICAgY2hhcnQuYXhpcy54LmxhYmVsID0gY2hhcnQuZy5hcHBlbmQoJ2cnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCBfdGhpcy5heGlzLmNsYXNzZXMoJ2xhYmVsX2JvdHRvbScpKTtcblxuICAgICAgY2hhcnQuYXhpcy54LmxhYmVsLmFwcGVuZCgndGV4dCcpLmF0dHJzKHtcbiAgICAgICAgJ3RleHQtYW5jaG9yJzogJ21pZGRsZSdcbiAgICAgIH0pO1xuXG4gICAgICBjaGFydC5heGlzLnkubGFiZWwgPSBjaGFydC5nLmFwcGVuZCgnZycpXG4gICAgICAgIC5hdHRyKCdjbGFzcycsIF90aGlzLmF4aXMuY2xhc3NlcygnbGFiZWxfbGVmdCcpKTtcblxuICAgICAgY2hhcnQuYXhpcy55LmxhYmVsLmFwcGVuZCgndGV4dCcpLmF0dHJzKHtcbiAgICAgICAgJ3RleHQtYW5jaG9yJzogJ21pZGRsZSdcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5heGlzLnRleHQoKTtcblxuICAgICAgcmV0dXJuIGNoYXJ0O1xuXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGV4dCgpIHtcblxuICAgICAgLy8gQWRkIHRleHQgdG8gdGhlIGxhYmVsIGNvbnRhaW5lcnNcbiAgICAgIGNoYXJ0Lmcuc2VsZWN0KCcuby1jaGFydF9fbGFiZWwtLXgnKS5zZWxlY3QoJ3RleHQnKVxuICAgICAgICAudGV4dChzZXR0aW5ncy5sYWJlbHMuYXhpcy54KTtcblxuICAgICAgY2hhcnQuZy5zZWxlY3QoJy5vLWNoYXJ0X19sYWJlbC0teScpLnNlbGVjdCgndGV4dCcpXG4gICAgICAgIC50ZXh0KHNldHRpbmdzLmxhYmVscy5heGlzLnkpO1xuXG4gICAgICBfdGhpcy5heGlzLnVwZGF0ZSgpO1xuXG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBuYXRpdmUgYXhpcyBzdHlsaW5nIG9mIEQzXG4gICAgZnVuY3Rpb24gbW9kaWZ5KCkge1xuXG4gICAgICAvLyBBZGQgbGluZXMgdGhhdCB2aXN1YWxseSBjb25uZWN0IHRoZSB4IGF4aXMgdG8gdGhlIGNvcm5lclxuICAgICAgY2hhcnQuYXhpcy54LmFwcGVuZCgnbGluZScpLmF0dHJzKHtcbiAgICAgICAgJ3gxJzogMCwgJ3kxJzogMCwgJ3kyJzogMCxcbiAgICAgICAgJ3gyJzogc2V0dGluZ3MuaW5uZXJXaWR0aCxcbiAgICAgICAgJ2NsYXNzJzogX3RoaXMuYXhpcy5jbGFzc2VzKCdsaW5lX3gnKVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGhpZGUgdGhlIG9yaWdpbmFsIHggYXhpcyBkb21haW5cbiAgICAgIGNoYXJ0LmF4aXMueC5zZWxlY3QoJy5kb21haW4nKS5hdHRyKCdkaXNwbGF5JywgJ25vbmUnKTtcblxuICAgICAgLy8gQWRkIGxpbmVzIHRoYXQgdmlzdWFsbHkgY29ubmVjdCB0aGUgeSBheGlzIHRvIHRoZSBjb3JuZXJcbiAgICAgIGNoYXJ0LmF4aXMueS5hcHBlbmQoJ2xpbmUnKS5hdHRycyh7XG4gICAgICAgICd4MSc6IDAsICd5MSc6IDAsICd4Mic6IDAsXG4gICAgICAgICd5Mic6IHNldHRpbmdzLmlubmVySGVpZ2h0LFxuICAgICAgICAnY2xhc3MnOiBfdGhpcy5heGlzLmNsYXNzZXMoJ2xpbmVfeScpXG4gICAgICB9KTtcblxuICAgICAgLy8gaGlkZSB0aGUgb3JpZ2luYWwgeSBheGlzIGRvbWFpblxuICAgICAgY2hhcnQuYXhpcy55LnNlbGVjdCgnLmRvbWFpbicpLmF0dHIoJ2Rpc3BsYXknLCAnbm9uZScpO1xuXG4gICAgfVxuXG4gIH1cblxuICAvLyBMZWdlbmRcblxufVxuXG5leHBvcnQgZGVmYXVsdCBvQ2hhcnRzOyIsIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IG9DaGFydHMgZnJvbSAnLi9tb2R1bGVzL28tY2hhcnRzJztcbi8qKiBpbXBvcnQgbW9kdWxlcyBoZXJlIGFzIHRoZXkgYXJlIHdyaXR0ZW4gKi9cblxuY2xhc3MgbnljbyB7XG5cbiAgY2hhcnRzKHNldHRpbmdzLCBkYXRhKSB7XG4gICAgcmV0dXJuIG5ldyBvQ2hhcnRzKHNldHRpbmdzLCBkYXRhKS5pbml0KCk7XG4gIH1cblxuICAvKiogYWRkIEFQSXMgaGVyZSBhcyB0aGV5IGFyZSB3cml0dGVuICovXG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgbnljbzsiXSwibmFtZXMiOlsiYXNjZW5kaW5nQ29tcGFyYXRvciIsImYiLCJkIiwieCIsImFzY2VuZGluZyIsInRpY2tJbmNyZW1lbnQiLCJzdGFydCIsInN0b3AiLCJjb3VudCIsInN0ZXAiLCJNYXRoIiwibWF4IiwicG93ZXIiLCJmbG9vciIsImxvZyIsIkxOMTAiLCJlcnJvciIsInBvdyIsImUxMCIsImU1IiwiZTIiLCJ0aWNrU3RlcCIsInN0ZXAwIiwiYWJzIiwic3RlcDEiLCJ0cmFuc2xhdGVYIiwidHJhbnNsYXRlWSIsInkiLCJjZW50ZXIiLCJzY2FsZSIsIm9mZnNldCIsImJhbmR3aWR0aCIsInJvdW5kIiwiZW50ZXJpbmciLCJ0aGlzIiwiX19heGlzIiwiYXhpcyIsIm9yaWVudCIsImNvbnRleHQiLCJ2YWx1ZXMiLCJ0aWNrVmFsdWVzIiwidGlja3MiLCJhcHBseSIsInRpY2tBcmd1bWVudHMiLCJkb21haW4iLCJmb3JtYXQiLCJ0aWNrRm9ybWF0IiwiaWRlbnRpdHkiLCJzcGFjaW5nIiwidGlja1NpemVJbm5lciIsInRpY2tQYWRkaW5nIiwicmFuZ2UiLCJyYW5nZTAiLCJyYW5nZTEiLCJsZW5ndGgiLCJwb3NpdGlvbiIsImNvcHkiLCJzZWxlY3Rpb24iLCJwYXRoIiwic2VsZWN0QWxsIiwiZGF0YSIsInRpY2siLCJvcmRlciIsInRpY2tFeGl0IiwiZXhpdCIsInRpY2tFbnRlciIsImVudGVyIiwiYXBwZW5kIiwiYXR0ciIsImxpbmUiLCJzZWxlY3QiLCJ0ZXh0IiwibWVyZ2UiLCJpbnNlcnQiLCJrIiwidG9wIiwiYm90dG9tIiwidHJhbnNpdGlvbiIsImVwc2lsb24iLCJpc0Zpbml0ZSIsInRyYW5zZm9ybSIsImdldEF0dHJpYnV0ZSIsInAiLCJwYXJlbnROb2RlIiwicmVtb3ZlIiwibGVmdCIsInJpZ2h0IiwidGlja1NpemVPdXRlciIsImZpbHRlciIsImVhY2giLCJfIiwiYXJndW1lbnRzIiwic2xpY2UiLCJjYWxsIiwidGlja1NpemUiLCJheGlzQm90dG9tIiwiYXhpc0xlZnQiLCJkaXNwYXRjaCIsInQiLCJpIiwibiIsIkVycm9yIiwiRGlzcGF0Y2giLCJwYXJzZVR5cGVuYW1lcyIsInR5cGVuYW1lcyIsInR5cGVzIiwidHJpbSIsInNwbGl0IiwibWFwIiwibmFtZSIsImluZGV4T2YiLCJoYXNPd25Qcm9wZXJ0eSIsInR5cGUiLCJnZXQiLCJjIiwidmFsdWUiLCJzZXQiLCJjYWxsYmFjayIsIm5vb3AiLCJjb25jYXQiLCJwdXNoIiwiY3JlYXRvckluaGVyaXQiLCJkb2N1bWVudCIsIm93bmVyRG9jdW1lbnQiLCJ1cmkiLCJuYW1lc3BhY2VVUkkiLCJ4aHRtbCIsImRvY3VtZW50RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJjcmVhdG9yRml4ZWQiLCJmdWxsbmFtZSIsInNwYWNlIiwibG9jYWwiLCJmaWx0ZXJDb250ZXh0TGlzdGVuZXIiLCJsaXN0ZW5lciIsImluZGV4IiwiZ3JvdXAiLCJjb250ZXh0TGlzdGVuZXIiLCJldmVudCIsInJlbGF0ZWQiLCJyZWxhdGVkVGFyZ2V0IiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJldmVudDEiLCJldmVudDAiLCJfX2RhdGFfXyIsIm9uUmVtb3ZlIiwidHlwZW5hbWUiLCJvbiIsIl9fb24iLCJvIiwiaiIsIm0iLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY2FwdHVyZSIsIm9uQWRkIiwid3JhcCIsImZpbHRlckV2ZW50cyIsImFkZEV2ZW50TGlzdGVuZXIiLCJub25lIiwiZW1wdHkiLCJFbnRlck5vZGUiLCJwYXJlbnQiLCJkYXR1bSIsIl9uZXh0IiwiX3BhcmVudCIsImJpbmRJbmRleCIsInVwZGF0ZSIsIm5vZGUiLCJncm91cExlbmd0aCIsImRhdGFMZW5ndGgiLCJiaW5kS2V5Iiwia2V5Iiwia2V5VmFsdWUiLCJub2RlQnlLZXlWYWx1ZSIsImtleVZhbHVlcyIsIkFycmF5Iiwia2V5UHJlZml4IiwiYSIsImIiLCJOYU4iLCJhdHRyUmVtb3ZlIiwicmVtb3ZlQXR0cmlidXRlIiwiYXR0clJlbW92ZU5TIiwicmVtb3ZlQXR0cmlidXRlTlMiLCJhdHRyQ29uc3RhbnQiLCJzZXRBdHRyaWJ1dGUiLCJhdHRyQ29uc3RhbnROUyIsInNldEF0dHJpYnV0ZU5TIiwiYXR0ckZ1bmN0aW9uIiwidiIsImF0dHJGdW5jdGlvbk5TIiwic3R5bGVSZW1vdmUiLCJzdHlsZSIsInJlbW92ZVByb3BlcnR5Iiwic3R5bGVDb25zdGFudCIsInByaW9yaXR5Iiwic2V0UHJvcGVydHkiLCJzdHlsZUZ1bmN0aW9uIiwic3R5bGVWYWx1ZSIsImdldFByb3BlcnR5VmFsdWUiLCJkZWZhdWx0VmlldyIsImdldENvbXB1dGVkU3R5bGUiLCJwcm9wZXJ0eVJlbW92ZSIsInByb3BlcnR5Q29uc3RhbnQiLCJwcm9wZXJ0eUZ1bmN0aW9uIiwiY2xhc3NBcnJheSIsInN0cmluZyIsImNsYXNzTGlzdCIsIkNsYXNzTGlzdCIsIl9ub2RlIiwiX25hbWVzIiwiY2xhc3NlZEFkZCIsIm5hbWVzIiwibGlzdCIsImFkZCIsImNsYXNzZWRSZW1vdmUiLCJjbGFzc2VkVHJ1ZSIsImNsYXNzZWRGYWxzZSIsImNsYXNzZWRGdW5jdGlvbiIsInRleHRSZW1vdmUiLCJ0ZXh0Q29udGVudCIsInRleHRDb25zdGFudCIsInRleHRGdW5jdGlvbiIsImh0bWxSZW1vdmUiLCJpbm5lckhUTUwiLCJodG1sQ29uc3RhbnQiLCJodG1sRnVuY3Rpb24iLCJyYWlzZSIsIm5leHRTaWJsaW5nIiwiYXBwZW5kQ2hpbGQiLCJsb3dlciIsInByZXZpb3VzU2libGluZyIsImluc2VydEJlZm9yZSIsImZpcnN0Q2hpbGQiLCJjb25zdGFudE51bGwiLCJyZW1vdmVDaGlsZCIsImRpc3BhdGNoRXZlbnQiLCJwYXJhbXMiLCJ3aW5kb3ciLCJDdXN0b21FdmVudCIsImNyZWF0ZUV2ZW50IiwiaW5pdEV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJkZXRhaWwiLCJkaXNwYXRjaENvbnN0YW50IiwiZGlzcGF0Y2hGdW5jdGlvbiIsIlNlbGVjdGlvbiIsImdyb3VwcyIsInBhcmVudHMiLCJfZ3JvdXBzIiwiX3BhcmVudHMiLCJyb290IiwiZXh0ZW5kIiwiZGVmaW5pdGlvbiIsInByb3RvdHlwZSIsIk9iamVjdCIsImNyZWF0ZSIsIkNvbG9yIiwiY29sb3IiLCJ0b0xvd2VyQ2FzZSIsInJlSGV4MyIsImV4ZWMiLCJwYXJzZUludCIsIlJnYiIsInJlSGV4NiIsInJnYm4iLCJyZVJnYkludGVnZXIiLCJyZVJnYlBlcmNlbnQiLCJyZVJnYmFJbnRlZ2VyIiwicmdiYSIsInJlUmdiYVBlcmNlbnQiLCJyZUhzbFBlcmNlbnQiLCJoc2xhIiwicmVIc2xhUGVyY2VudCIsIm5hbWVkIiwiciIsImciLCJyZ2JDb252ZXJ0IiwicmdiIiwib3BhY2l0eSIsImgiLCJzIiwibCIsIkhzbCIsImhzbENvbnZlcnQiLCJtaW4iLCJoc2wiLCJoc2wycmdiIiwibTEiLCJtMiIsImxhYkNvbnZlcnQiLCJMYWIiLCJIY2wiLCJkZWcycmFkIiwiY29zIiwic2luIiwicmdiMnh5eiIsInh5ejJsYWIiLCJYbiIsIlluIiwiWm4iLCJsYWIiLCJ0MyIsInQyIiwidDAiLCJsYWIyeHl6IiwidDEiLCJ4eXoycmdiIiwiaGNsQ29udmVydCIsImF0YW4yIiwicmFkMmRlZyIsInNxcnQiLCJoY2wiLCJjdWJlaGVsaXhDb252ZXJ0IiwiQ3ViZWhlbGl4IiwiQkNfREEiLCJFRCIsIkVCIiwiYmwiLCJFIiwiQyIsIkQiLCJjdWJlaGVsaXgiLCJsaW5lYXIiLCJleHBvbmVudGlhbCIsImh1ZSIsImNvbnN0YW50IiwiaXNOYU4iLCJnYW1tYSIsIm5vZ2FtbWEiLCJ6ZXJvIiwib25lIiwicGFyc2VDc3MiLCJjc3NOb2RlIiwiY3NzUm9vdCIsImNzc1ZpZXciLCJkZWNvbXBvc2UiLCJwYXJzZVN2ZyIsInN2Z05vZGUiLCJiYXNlVmFsIiwiY29uc29saWRhdGUiLCJtYXRyaXgiLCJlIiwiaW50ZXJwb2xhdGVUcmFuc2Zvcm0iLCJwYXJzZSIsInB4Q29tbWEiLCJweFBhcmVuIiwiZGVnUGFyZW4iLCJwb3AiLCJ0cmFuc2xhdGUiLCJ4YSIsInlhIiwieGIiLCJ5YiIsInEiLCJudW1iZXIiLCJyb3RhdGUiLCJza2V3WCIsInNjYWxlWCIsInNjYWxlWSIsImpvaW4iLCJjdWJlaGVsaXhHYW1tYSIsImVuZCIsImNvbG9yQ3ViZWhlbGl4Iiwibm93IiwiY2xvY2tOb3ciLCJzZXRGcmFtZSIsImNsZWFyTm93IiwiY2xvY2siLCJjbG9ja1NrZXciLCJUaW1lciIsIl9jYWxsIiwiX3RpbWUiLCJ0aW1lciIsImRlbGF5IiwidGltZSIsInJlc3RhcnQiLCJ0aW1lckZsdXNoIiwiZnJhbWUiLCJ0YXNrSGVhZCIsIndha2UiLCJjbG9ja0xhc3QiLCJ0aW1lb3V0IiwibmFwIiwicG9rZSIsInBva2VEZWxheSIsIkluZmluaXR5IiwidGFza1RhaWwiLCJzbGVlcCIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJpbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsImluaXQiLCJpZCIsInNjaGVkdWxlIiwiX190cmFuc2l0aW9uIiwic3RhdGUiLCJDUkVBVEVEIiwiU1RBUlRJTkciLCJzZWxmIiwiZWxhcHNlZCIsIlNDSEVEVUxFRCIsInNjaGVkdWxlcyIsIlNUQVJURUQiLCJSVU5OSU5HIiwiRU5ERUQiLCJ0d2VlbiIsImR1cmF0aW9uIiwiZWFzZSIsIkVORElORyIsInR3ZWVuUmVtb3ZlIiwidHdlZW4wIiwidHdlZW4xIiwic3BsaWNlIiwidHdlZW5GdW5jdGlvbiIsInR3ZWVuVmFsdWUiLCJfaWQiLCJpbnRlcnBvbGF0ZSIsInZhbHVlMSIsInZhbHVlMDAiLCJpbnRlcnBvbGF0ZTAiLCJ2YWx1ZTAiLCJnZXRBdHRyaWJ1dGVOUyIsInZhbHVlMTAiLCJhdHRyVHdlZW5OUyIsIl92YWx1ZSIsImF0dHJUd2VlbiIsImRlbGF5RnVuY3Rpb24iLCJkZWxheUNvbnN0YW50IiwiZHVyYXRpb25GdW5jdGlvbiIsImR1cmF0aW9uQ29uc3RhbnQiLCJlYXNlQ29uc3RhbnQiLCJldmVyeSIsIm9uRnVuY3Rpb24iLCJvbjAiLCJvbjEiLCJzaXQiLCJyZW1vdmVGdW5jdGlvbiIsInN0eWxlUmVtb3ZlRW5kIiwic3R5bGVUd2VlbiIsIlRyYW5zaXRpb24iLCJfbmFtZSIsIm5ld0lkIiwiY3ViaWNJbk91dCIsImluaGVyaXQiLCJ0aW1pbmciLCJkZWZhdWx0VGltaW5nIiwiUGF0aCIsIl94MCIsIl95MCIsIl94MSIsIl95MSIsIk1hcCIsIm9iamVjdCIsImlzQXJyYXkiLCJTZXQiLCJvYmplY3RDb252ZXJ0ZXIiLCJjb2x1bW5zIiwiRnVuY3Rpb24iLCJKU09OIiwic3RyaW5naWZ5IiwiY3VzdG9tQ29udmVydGVyIiwicm93IiwiaW5mZXJDb2x1bW5zIiwicm93cyIsImNvbHVtblNldCIsImZvckVhY2giLCJjb2x1bW4iLCJ0cmVlIiwieG0iLCJ5bSIsInhwIiwieXAiLCJfcm9vdCIsImxlYWYiLCJ4MCIsInkwIiwieDEiLCJ5MSIsIl94IiwiX3kiLCJuZXh0IiwiYWRkQWxsIiwieHoiLCJ5eiIsImNvdmVyIiwicmVtb3ZlQWxsIiwiZGVmYXVsdFgiLCJkZWZhdWx0WSIsInF1YWR0cmVlIiwibm9kZXMiLCJRdWFkdHJlZSIsInVuZGVmaW5lZCIsImxlYWZfY29weSIsImZvcm1hdFNwZWNpZmllciIsInNwZWNpZmllciIsIkZvcm1hdFNwZWNpZmllciIsIm1hdGNoIiwicmUiLCJmaWxsIiwiYWxpZ24iLCJzaWduIiwic3ltYm9sIiwid2lkdGgiLCJjb21tYSIsInByZWNpc2lvbiIsImZvcm1hdFR5cGVzIiwiQWRkZXIiLCJyZXNldCIsImFkZGVyIiwiYnYiLCJhdiIsImFjb3MiLCJwaSIsImFzaW4iLCJoYWxmUGkiLCJhemltdXRoYWxSYXciLCJjeCIsImN5IiwiYXppbXV0aGFsSW52ZXJ0IiwiYW5nbGUiLCJ6Iiwic2MiLCJjYyIsInN1bSIsImNoaWxkcmVuIiwibGVhc3RDb21tb25BbmNlc3RvciIsImFOb2RlcyIsImFuY2VzdG9ycyIsImJOb2RlcyIsImhpZXJhcmNoeSIsImNoaWxkIiwiY2hpbGRzIiwiTm9kZSIsInZhbHVlZCIsImRlZmF1bHRDaGlsZHJlbiIsImRlcHRoIiwiZWFjaEJlZm9yZSIsImNvbXB1dGVIZWlnaHQiLCJub2RlX2NvcHkiLCJjb3B5RGF0YSIsImhlaWdodCIsIlRyZWVOb2RlIiwiQSIsIl9zdGFydCIsIl90YXNrcyIsIl9lbmRlZCIsIl9hY3RpdmUiLCJhYm9ydCIsIl9kYXRhIiwiX3dhaXRpbmciLCJfc2l6ZSIsIm5vYWJvcnQiLCJfZXJyb3IiLCJtYXliZU5vdGlmeSIsImRlaW50ZXJwb2xhdGVMaW5lYXIiLCJkZWludGVycG9sYXRlQ2xhbXAiLCJkZWludGVycG9sYXRlIiwicmVpbnRlcnBvbGF0ZUNsYW1wIiwicmVpbnRlcnBvbGF0ZSIsImJpbWFwIiwiZDAiLCJkMSIsInIwIiwicjEiLCJwb2x5bWFwIiwicmV2ZXJzZSIsImJpc2VjdCIsInNvdXJjZSIsInRhcmdldCIsImNsYW1wIiwiY29udGludW91cyIsInJlc2NhbGUiLCJwaWVjZXdpc2UiLCJvdXRwdXQiLCJpbnB1dCIsInVuaXQiLCJpbnRlcnBvbGF0ZVZhbHVlIiwiaW52ZXJ0IiwicmFuZ2VSb3VuZCIsImludGVycG9sYXRlUm91bmQiLCJsaW5lYXJpc2giLCJuaWNlIiwiaTAiLCJpMSIsImNlaWwiLCJuZXdJbnRlcnZhbCIsImZsb29yaSIsIm9mZnNldGkiLCJmaWVsZCIsImRhdGUiLCJEYXRlIiwidGVzdCIsInNldFRpbWUiLCJ3ZWVrZGF5Iiwic2V0RGF0ZSIsImdldERhdGUiLCJnZXREYXkiLCJzZXRIb3VycyIsImdldFRpbWV6b25lT2Zmc2V0IiwiZHVyYXRpb25NaW51dGUiLCJkdXJhdGlvbldlZWsiLCJ1dGNXZWVrZGF5Iiwic2V0VVRDRGF0ZSIsImdldFVUQ0RhdGUiLCJnZXRVVENEYXkiLCJzZXRVVENIb3VycyIsImxvY2FsRGF0ZSIsIkgiLCJNIiwiUyIsIkwiLCJzZXRGdWxsWWVhciIsInV0Y0RhdGUiLCJVVEMiLCJzZXRVVENGdWxsWWVhciIsIm5ld1llYXIiLCJmb3JtYXRMb2NhbGUiLCJsb2NhbGUiLCJuZXdGb3JtYXQiLCJmb3JtYXRzIiwicGFkIiwiY2hhckNvZGVBdCIsInBhZHMiLCJjaGFyQXQiLCJuZXdQYXJzZSIsIm5ld0RhdGUiLCJwYXJzZVNwZWNpZmllciIsInciLCJkYXkiLCJXIiwiVSIsIloiLCJwYXJzZXMiLCJwYXJzZVBlcmlvZCIsInBlcmlvZFJlIiwicGVyaW9kTG9va3VwIiwicGFyc2VTaG9ydFdlZWtkYXkiLCJzaG9ydFdlZWtkYXlSZSIsInNob3J0V2Vla2RheUxvb2t1cCIsInBhcnNlV2Vla2RheSIsIndlZWtkYXlSZSIsIndlZWtkYXlMb29rdXAiLCJwYXJzZVNob3J0TW9udGgiLCJzaG9ydE1vbnRoUmUiLCJzaG9ydE1vbnRoTG9va3VwIiwicGFyc2VNb250aCIsIm1vbnRoUmUiLCJtb250aExvb2t1cCIsInBhcnNlTG9jYWxlRGF0ZVRpbWUiLCJsb2NhbGVfZGF0ZVRpbWUiLCJwYXJzZUxvY2FsZURhdGUiLCJsb2NhbGVfZGF0ZSIsInBhcnNlTG9jYWxlVGltZSIsImxvY2FsZV90aW1lIiwiZm9ybWF0U2hvcnRXZWVrZGF5IiwibG9jYWxlX3Nob3J0V2Vla2RheXMiLCJmb3JtYXRXZWVrZGF5IiwibG9jYWxlX3dlZWtkYXlzIiwiZm9ybWF0U2hvcnRNb250aCIsImxvY2FsZV9zaG9ydE1vbnRocyIsImdldE1vbnRoIiwiZm9ybWF0TW9udGgiLCJsb2NhbGVfbW9udGhzIiwiZm9ybWF0UGVyaW9kIiwibG9jYWxlX3BlcmlvZHMiLCJnZXRIb3VycyIsImZvcm1hdFVUQ1Nob3J0V2Vla2RheSIsImZvcm1hdFVUQ1dlZWtkYXkiLCJmb3JtYXRVVENTaG9ydE1vbnRoIiwiZ2V0VVRDTW9udGgiLCJmb3JtYXRVVENNb250aCIsImZvcm1hdFVUQ1BlcmlvZCIsImdldFVUQ0hvdXJzIiwiZGF0ZVRpbWUiLCJwZXJpb2RzIiwiZGF5cyIsInNob3J0RGF5cyIsIm1vbnRocyIsInNob3J0TW9udGhzIiwiZm9ybWF0UmUiLCJmb3JtYXRMb29rdXAiLCJCIiwiZm9ybWF0RGF5T2ZNb250aCIsImZvcm1hdEhvdXIyNCIsIkkiLCJmb3JtYXRIb3VyMTIiLCJmb3JtYXREYXlPZlllYXIiLCJmb3JtYXRNaWxsaXNlY29uZHMiLCJmb3JtYXRNb250aE51bWJlciIsImZvcm1hdE1pbnV0ZXMiLCJmb3JtYXRTZWNvbmRzIiwiZm9ybWF0V2Vla051bWJlclN1bmRheSIsImZvcm1hdFdlZWtkYXlOdW1iZXIiLCJmb3JtYXRXZWVrTnVtYmVyTW9uZGF5IiwiWCIsImZvcm1hdFllYXIiLCJZIiwiZm9ybWF0RnVsbFllYXIiLCJmb3JtYXRab25lIiwiJSIsImZvcm1hdExpdGVyYWxQZXJjZW50IiwidXRjRm9ybWF0cyIsImZvcm1hdFVUQ0RheU9mTW9udGgiLCJmb3JtYXRVVENIb3VyMjQiLCJmb3JtYXRVVENIb3VyMTIiLCJmb3JtYXRVVENEYXlPZlllYXIiLCJmb3JtYXRVVENNaWxsaXNlY29uZHMiLCJmb3JtYXRVVENNb250aE51bWJlciIsImZvcm1hdFVUQ01pbnV0ZXMiLCJmb3JtYXRVVENTZWNvbmRzIiwiZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSIsImZvcm1hdFVUQ1dlZWtkYXlOdW1iZXIiLCJmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5IiwiZm9ybWF0VVRDWWVhciIsImZvcm1hdFVUQ0Z1bGxZZWFyIiwiZm9ybWF0VVRDWm9uZSIsInBhcnNlRGF5T2ZNb250aCIsInBhcnNlSG91cjI0IiwicGFyc2VEYXlPZlllYXIiLCJwYXJzZU1pbGxpc2Vjb25kcyIsInBhcnNlTW9udGhOdW1iZXIiLCJwYXJzZU1pbnV0ZXMiLCJwYXJzZVNlY29uZHMiLCJwYXJzZVdlZWtOdW1iZXJTdW5kYXkiLCJwYXJzZVdlZWtkYXlOdW1iZXIiLCJwYXJzZVdlZWtOdW1iZXJNb25kYXkiLCJwYXJzZVllYXIiLCJwYXJzZUZ1bGxZZWFyIiwicGFyc2Vab25lIiwicGFyc2VMaXRlcmFsUGVyY2VudCIsInRvU3RyaW5nIiwidXRjRm9ybWF0IiwidXRjUGFyc2UiLCJyZXF1b3RlIiwicmVwbGFjZSIsInJlcXVvdGVSZSIsIlJlZ0V4cCIsIm51bWJlclJlIiwicGVyY2VudFJlIiwidGltZURheSIsInRpbWVZZWFyIiwiZ2V0TWlsbGlzZWNvbmRzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJ0aW1lU3VuZGF5IiwidGltZU1vbmRheSIsImdldEZ1bGxZZWFyIiwidXRjRGF5IiwidXRjWWVhciIsImdldFVUQ01pbGxpc2Vjb25kcyIsImdldFVUQ01pbnV0ZXMiLCJnZXRVVENTZWNvbmRzIiwidXRjU3VuZGF5IiwidXRjTW9uZGF5IiwiZ2V0VVRDRnVsbFllYXIiLCJmb3JtYXRJc29OYXRpdmUiLCJ0b0lTT1N0cmluZyIsInBhcnNlSXNvTmF0aXZlIiwiY2FsZW5kYXIiLCJ5ZWFyIiwibW9udGgiLCJ3ZWVrIiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiZm9ybWF0TWlsbGlzZWNvbmQiLCJmb3JtYXRTZWNvbmQiLCJmb3JtYXRNaW51dGUiLCJmb3JtYXRIb3VyIiwiZm9ybWF0RGF5IiwiZm9ybWF0V2VlayIsInRpY2tJbnRlcnZhbCIsImJpc2VjdG9yIiwidGlja0ludGVydmFscyIsImR1cmF0aW9uWWVhciIsImR1cmF0aW9uU2Vjb25kIiwiZHVyYXRpb25Ib3VyIiwiZHVyYXRpb25EYXkiLCJkdXJhdGlvbk1vbnRoIiwiTGluZWFyIiwiX2NvbnRleHQiLCJzbG9wZTMiLCJ0aGF0IiwieDIiLCJ5MiIsImgwIiwiaDEiLCJzMCIsInMxIiwic2xvcGUyIiwicG9pbnQiLCJkeCIsImJlemllckN1cnZlVG8iLCJNb25vdG9uZVgiLCJNb25vdG9uZVkiLCJSZWZsZWN0Q29udGV4dCIsImF0dHJzRnVuY3Rpb24iLCJhdHRyc09iamVjdCIsInN0eWxlc0Z1bmN0aW9uIiwic3R5bGVzT2JqZWN0IiwicHJvcGVydGllc0Z1bmN0aW9uIiwicHJvcGVydHkiLCJwcm9wZXJ0aWVzT2JqZWN0IiwiY29tcGFyZSIsImxvIiwiaGkiLCJtaWQiLCJiaXNlY3RSaWdodCIsInZhbHVlb2YiLCJjb25zdHJ1Y3RvciIsIlQiLCJhcmdzIiwic3ZnIiwieGxpbmsiLCJ4bWwiLCJ4bWxucyIsInByZWZpeCIsIm5hbWVzcGFjZXMiLCJuYW1lc3BhY2UiLCJtYXRjaGVyIiwic2VsZWN0b3IiLCJtYXRjaGVzIiwiZWxlbWVudCIsInZlbmRvck1hdGNoZXMiLCJ3ZWJraXRNYXRjaGVzU2VsZWN0b3IiLCJtc01hdGNoZXNTZWxlY3RvciIsIm1vek1hdGNoZXNTZWxlY3RvciIsIm9NYXRjaGVzU2VsZWN0b3IiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInF1ZXJ5U2VsZWN0b3IiLCJzdWJncm91cHMiLCJzdWJub2RlIiwic3ViZ3JvdXAiLCJxdWVyeVNlbGVjdG9yQWxsIiwic2VsZWN0b3JBbGwiLCJfZW50ZXIiLCJzcGFyc2UiLCJzaXplIiwiYmluZCIsImVudGVyR3JvdXAiLCJ1cGRhdGVHcm91cCIsInByZXZpb3VzIiwiX2V4aXQiLCJncm91cHMwIiwiZ3JvdXBzMSIsIm0wIiwibWVyZ2VzIiwiZ3JvdXAwIiwiZ3JvdXAxIiwiY29tcGFyZU5vZGUiLCJzb3J0Z3JvdXBzIiwic29ydGdyb3VwIiwic29ydCIsImNvbnRhaW5zIiwiY3JlYXRvciIsImJlZm9yZSIsInNlbGVjdGlvbl9zZWxlY3QiLCJzZWxlY3Rpb25fc2VsZWN0QWxsIiwic2VsZWN0aW9uX2ZpbHRlciIsInNlbGVjdGlvbl9kYXRhIiwic2VsZWN0aW9uX2VudGVyIiwic2VsZWN0aW9uX2V4aXQiLCJzZWxlY3Rpb25fbWVyZ2UiLCJzZWxlY3Rpb25fb3JkZXIiLCJzZWxlY3Rpb25fc29ydCIsInNlbGVjdGlvbl9jYWxsIiwic2VsZWN0aW9uX25vZGVzIiwic2VsZWN0aW9uX25vZGUiLCJzZWxlY3Rpb25fc2l6ZSIsInNlbGVjdGlvbl9lbXB0eSIsInNlbGVjdGlvbl9lYWNoIiwic2VsZWN0aW9uX2F0dHIiLCJzZWxlY3Rpb25fc3R5bGUiLCJzZWxlY3Rpb25fcHJvcGVydHkiLCJjbGFzc2VkIiwic2VsZWN0aW9uX2NsYXNzZWQiLCJzZWxlY3Rpb25fdGV4dCIsImh0bWwiLCJzZWxlY3Rpb25faHRtbCIsInNlbGVjdGlvbl9yYWlzZSIsInNlbGVjdGlvbl9sb3dlciIsInNlbGVjdGlvbl9hcHBlbmQiLCJzZWxlY3Rpb25faW5zZXJ0Iiwic2VsZWN0aW9uX3JlbW92ZSIsInNlbGVjdGlvbl9kYXR1bSIsInNlbGVjdGlvbl9vbiIsInNlbGVjdGlvbl9kaXNwYXRjaCIsImZhY3RvcnkiLCJyZUkiLCJyZU4iLCJyZVAiLCJhbGljZWJsdWUiLCJhbnRpcXVld2hpdGUiLCJhcXVhIiwiYXF1YW1hcmluZSIsImF6dXJlIiwiYmVpZ2UiLCJiaXNxdWUiLCJibGFjayIsImJsYW5jaGVkYWxtb25kIiwiYmx1ZSIsImJsdWV2aW9sZXQiLCJicm93biIsImJ1cmx5d29vZCIsImNhZGV0Ymx1ZSIsImNoYXJ0cmV1c2UiLCJjaG9jb2xhdGUiLCJjb3JhbCIsImNvcm5mbG93ZXJibHVlIiwiY29ybnNpbGsiLCJjcmltc29uIiwiY3lhbiIsImRhcmtibHVlIiwiZGFya2N5YW4iLCJkYXJrZ29sZGVucm9kIiwiZGFya2dyYXkiLCJkYXJrZ3JlZW4iLCJkYXJrZ3JleSIsImRhcmtraGFraSIsImRhcmttYWdlbnRhIiwiZGFya29saXZlZ3JlZW4iLCJkYXJrb3JhbmdlIiwiZGFya29yY2hpZCIsImRhcmtyZWQiLCJkYXJrc2FsbW9uIiwiZGFya3NlYWdyZWVuIiwiZGFya3NsYXRlYmx1ZSIsImRhcmtzbGF0ZWdyYXkiLCJkYXJrc2xhdGVncmV5IiwiZGFya3R1cnF1b2lzZSIsImRhcmt2aW9sZXQiLCJkZWVwcGluayIsImRlZXBza3libHVlIiwiZGltZ3JheSIsImRpbWdyZXkiLCJkb2RnZXJibHVlIiwiZmlyZWJyaWNrIiwiZmxvcmFsd2hpdGUiLCJmb3Jlc3RncmVlbiIsImZ1Y2hzaWEiLCJnYWluc2Jvcm8iLCJnaG9zdHdoaXRlIiwiZ29sZCIsImdvbGRlbnJvZCIsImdyYXkiLCJncmVlbiIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBpbmsiLCJwbHVtIiwicG93ZGVyYmx1ZSIsInB1cnBsZSIsInJlYmVjY2FwdXJwbGUiLCJyZWQiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZSIsIndoaXRlc21va2UiLCJ5ZWxsb3ciLCJ5ZWxsb3dncmVlbiIsImRlZmluZSIsImRpc3BsYXlhYmxlIiwiYnJpZ2h0ZXIiLCJkYXJrZXIiLCJQSSIsImNvc2giLCJzaW5oIiwicmdiR2FtbWEiLCJjb2xvclJnYiIsIm5iIiwibmEiLCJyZUEiLCJyZUIiLCJhbSIsImJtIiwiYnMiLCJiaSIsImxhc3RJbmRleCIsImFycmF5IiwidmFsdWVPZiIsImRlZ3JlZXMiLCJhdGFuIiwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MiLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyIsImN1YmVoZWxpeCQxIiwiY3ViZWhlbGl4TG9uZyIsInBlcmZvcm1hbmNlIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiVHlwZUVycm9yIiwiZW1wdHlPbiIsImVtcHR5VHdlZW4iLCJhY3RpdmUiLCJpbnRlcnJ1cHQiLCJpbnRlcnBvbGF0ZU51bWJlciIsImludGVycG9sYXRlUmdiIiwiaW50ZXJwb2xhdGVTdHJpbmciLCJpZDAiLCJpZDEiLCJzZWxlY3Rpb25fcHJvdG90eXBlIiwidHJhbnNpdGlvbl9zZWxlY3QiLCJ0cmFuc2l0aW9uX3NlbGVjdEFsbCIsInRyYW5zaXRpb25fZmlsdGVyIiwidHJhbnNpdGlvbl9tZXJnZSIsInRyYW5zaXRpb25fc2VsZWN0aW9uIiwidHJhbnNpdGlvbl90cmFuc2l0aW9uIiwidHJhbnNpdGlvbl9vbiIsInRyYW5zaXRpb25fYXR0ciIsInRyYW5zaXRpb25fYXR0clR3ZWVuIiwidHJhbnNpdGlvbl9zdHlsZSIsInRyYW5zaXRpb25fc3R5bGVUd2VlbiIsInRyYW5zaXRpb25fdGV4dCIsInRyYW5zaXRpb25fcmVtb3ZlIiwidHJhbnNpdGlvbl90d2VlbiIsInRyYW5zaXRpb25fZGVsYXkiLCJ0cmFuc2l0aW9uX2R1cmF0aW9uIiwidHJhbnNpdGlvbl9lYXNlIiwiY3VzdG9tIiwicG9seUluIiwiZXhwb25lbnQiLCJwb2x5T3V0IiwicG9seUluT3V0IiwiYmFja0luIiwib3ZlcnNob290IiwiYmFja091dCIsImJhY2tJbk91dCIsInRhdSIsImVsYXN0aWNJbiIsImFtcGxpdHVkZSIsInBlcmlvZCIsImVsYXN0aWNPdXQiLCJlbGFzdGljSW5PdXQiLCJlYXNlQ3ViaWNJbk91dCIsInNlbGVjdGlvbl9pbnRlcnJ1cHQiLCJzZWxlY3Rpb25fdHJhbnNpdGlvbiIsInRhdUVwc2lsb24iLCJtb3ZlVG8iLCJjbG9zZVBhdGgiLCJsaW5lVG8iLCJxdWFkcmF0aWNDdXJ2ZVRvIiwiYXJjVG8iLCJ4MjEiLCJ5MjEiLCJ4MDEiLCJ5MDEiLCJsMDFfMiIsIngyMCIsInkyMCIsImwyMV8yIiwibDIwXzIiLCJsMjEiLCJsMDEiLCJ0MDEiLCJ0MjEiLCJhcmMiLCJhMCIsImExIiwiY2N3IiwiZHkiLCJjdyIsImRhIiwicmVjdCIsImhhcyIsImNsZWFyIiwia2V5cyIsImVudHJpZXMiLCJwcm90byIsImRlbGltaXRlciIsImNvbnZlcnQiLCJwYXJzZVJvd3MiLCJ0b2tlbiIsIk4iLCJFT0YiLCJlb2wiLCJFT0wiLCJkZWxpbWl0ZXJDb2RlIiwiZm9ybWF0VmFsdWUiLCJmb3JtYXRSb3dzIiwiZm9ybWF0Um93IiwicmVGb3JtYXQiLCJkc3YiLCJ2aXNpdCIsInJhZGl1cyIsIngzIiwieTMiLCJxdWFkcyIsIlF1YWQiLCJkMiIsInJldGFpbmVyIiwidHJlZVByb3RvIiwidHJlZV9hZGQiLCJ0cmVlX2FkZEFsbCIsInRyZWVfY292ZXIiLCJ0cmVlX2RhdGEiLCJleHRlbnQiLCJ0cmVlX2V4dGVudCIsImZpbmQiLCJ0cmVlX2ZpbmQiLCJ0cmVlX3JlbW92ZSIsInRyZWVfcmVtb3ZlQWxsIiwidHJlZV9yb290IiwidHJlZV9zaXplIiwidHJlZV92aXNpdCIsInZpc2l0QWZ0ZXIiLCJ0cmVlX3Zpc2l0QWZ0ZXIiLCJ0cmVlX3giLCJ0cmVlX3kiLCJwcmVmaXhFeHBvbmVudCIsInRvRXhwb25lbnRpYWwiLCJjb2VmZmljaWVudCIsImZvcm1hdERlY2ltYWwiLCJncm91cGluZyIsInRob3VzYW5kcyIsInN1YnN0cmluZyIsIm51bWVyYWxzIiwib3V0IiwidG9QcmVjaXNpb24iLCJ0b0ZpeGVkIiwiZm9ybWF0Um91bmRlZCIsInRvVXBwZXJDYXNlIiwiZm9ybWF0UHJlZml4IiwicHJlZml4ZXMiLCJ2YWx1ZVByZWZpeCIsInZhbHVlU3VmZml4Iiwic3VmZml4IiwiZm9ybWF0VHlwZSIsInZhbHVlTmVnYXRpdmUiLCJtYXliZVN1ZmZpeCIsImRlY2ltYWwiLCJwYWRkaW5nIiwiY3VycmVuY3kiLCJwZXJjZW50IiwiZm9ybWF0R3JvdXAiLCJmb3JtYXROdW1lcmFscyIsInRlbXAiLCJyYWRpYW5zIiwiY3hjeSIsImVhY2hBZnRlciIsImN1cnJlbnQiLCJhbmNlc3RvciIsImxlYXZlcyIsImxpbmtzIiwibm9kZV9jb3VudCIsIm5vZGVfZWFjaCIsIm5vZGVfZWFjaEFmdGVyIiwibm9kZV9lYWNoQmVmb3JlIiwibm9kZV9zdW0iLCJub2RlX3NvcnQiLCJub2RlX3BhdGgiLCJub2RlX2FuY2VzdG9ycyIsImRlc2NlbmRhbnRzIiwibm9kZV9kZXNjZW5kYW50cyIsIm5vZGVfbGVhdmVzIiwibm9kZV9saW5rcyIsInByZWNpc2lvblByZWZpeCIsInByZWNpc2lvblJvdW5kIiwicHJlY2lzaW9uRml4ZWQiLCJzdW5kYXkiLCJtb25kYXkiLCJzZXRNb250aCIsInNldFVUQ1NlY29uZHMiLCJzZXRVVENNaW51dGVzIiwic2V0VVRDTW9udGgiLCJ0aW1lRm9ybWF0IiwidGltZVBhcnNlIiwiLSIsIjAiLCJ0aW1lTW9udGgiLCJ0aW1lV2VlayIsInRpbWVIb3VyIiwidGltZU1pbnV0ZSIsInRpbWVTZWNvbmQiLCJ0aW1lTWlsbGlzZWNvbmQiLCJjb2xvcnMiLCJpbnRlcnBvbGF0ZUN1YmVoZWxpeExvbmciLCJhcmVhU3RhcnQiLCJfbGluZSIsImFyZWFFbmQiLCJsaW5lU3RhcnQiLCJfcG9pbnQiLCJsaW5lRW5kIiwiYnVmZmVyIiwiZGVmaW5lZDAiLCJjdXJ2ZSIsImRlZmluZWQiLCJwb2ludFgiLCJwb2ludFkiLCJjdXJ2ZUxpbmVhciIsIl90MCIsImF0dHJzIiwic2VsZWN0aW9uX2F0dHJzIiwic3R5bGVzIiwic2VsZWN0aW9uX3N0eWxlcyIsInByb3BlcnRpZXMiLCJzZWxlY3Rpb25fcHJvcGVydGllcyIsIkNPTlNUQU5UUyIsIm9DaGFydHMiLCJzZXR0aW5ncyIsImNoYXJ0IiwiZDMiLCJUZXh0IiwicmVuZGVyIiwiX3RoaXMyIiwiZG9tYWlucyIsInBsb3RzIiwiY2xhc3NlcyIsIktFWSIsImJhY2tncm91bmQiLCJOQU1FU1BBQ0UiLCJiZyIsIl90aGlzIiwiZGVmcyIsInNlbGVjdGlvbnMiLCJDTEFTUyIsIlNUWUxFIiwibWFyZ2luIiwiZGVmaW5lTGF5b3V0IiwiZGVmaW5lU2NhbGVzIiwiZGVmaW5lQXhpcyIsImRlZmluZVBsb3RzIiwiaW5uZXJXaWR0aCIsImlubmVySGVpZ2h0Iiwic2NhbGVzIiwiYmFycyIsInNsdWciLCJsYWJlbCIsInBsb3QiLCJET1RTX1JBRElVUyIsImJhciIsIkJBUl9HQVAiLCJsYWJlbHMiLCJtb2RpZnkiLCJ4dCIsImdldEJCb3giXSwibWFwcGluZ3MiOiJpQ0E0QkEsU0FBU0EsRUFBb0JDLEdBQzNCLE9BQU8sU0FBU0MsRUFBR0MsR0FDakIsT0FBT0MsR0FBVUgsRUFBRUMsR0FBSUMsSUNFM0IsU0FBZ0JFLEVBQWNDLEVBQU9DLEVBQU1DLEdBQ3pDLElBQUlDLEdBQVFGLEVBQU9ELEdBQVNJLEtBQUtDLElBQUksRUFBR0gsR0FDcENJLEVBQVFGLEtBQUtHLE1BQU1ILEtBQUtJLElBQUlMLEdBQVFDLEtBQUtLLE1BQ3pDQyxFQUFRUCxFQUFPQyxLQUFLTyxJ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 diff --git a/dist/scripts/o-charts.js b/dist/scripts/o-charts.js deleted file mode 100644 index cb057697..00000000 --- a/dist/scripts/o-charts.js +++ /dev/null @@ -1,23219 +0,0 @@ -/******/ (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; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; -/******/ -/******/ // 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 = 0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -/******/ (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; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; -/******/ -/******/ // 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 = 168); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return epsilon; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return epsilon2; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return pi; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return halfPi; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return quarterPi; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return tau; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return degrees; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return radians; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return abs; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return atan; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return atan2; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return cos; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return ceil; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return exp; }); -/* unused harmony export floor */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return log; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return pow; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return sin; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return sign; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return sqrt; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return tan; }); -/* harmony export (immutable) */ __webpack_exports__["r"] = acos; -/* harmony export (immutable) */ __webpack_exports__["f"] = asin; -/* harmony export (immutable) */ __webpack_exports__["u"] = haversin; -var epsilon = 1e-6; -var epsilon2 = 1e-12; -var pi = Math.PI; -var halfPi = pi / 2; -var quarterPi = pi / 4; -var tau = pi * 2; - -var degrees = 180 / pi; -var radians = pi / 180; - -var abs = Math.abs; -var atan = Math.atan; -var atan2 = Math.atan2; -var cos = Math.cos; -var ceil = Math.ceil; -var exp = Math.exp; -var floor = Math.floor; -var log = Math.log; -var pow = Math.pow; -var sin = Math.sin; -var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }; -var sqrt = Math.sqrt; -var tan = Math.tan; - -function acos(x) { - return x > 1 ? 0 : x < -1 ? pi : Math.acos(x); -} - -function asin(x) { - return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x); -} - -function haversin(x) { - return (x = sin(x / 2)) * x; -} - - -/***/ }), -/* 1 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_creator__ = __webpack_require__(70); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_0__src_creator__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_local__ = __webpack_require__(352); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_1__src_local__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_matcher__ = __webpack_require__(140); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_2__src_matcher__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_mouse__ = __webpack_require__(353); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_3__src_mouse__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_namespace__ = __webpack_require__(71); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_4__src_namespace__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_namespaces__ = __webpack_require__(72); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_5__src_namespaces__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_select__ = __webpack_require__(354); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_6__src_select__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_selectAll__ = __webpack_require__(355); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_7__src_selectAll__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__src_selection_index__ = __webpack_require__(5); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_8__src_selection_index__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_selector__ = __webpack_require__(75); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_9__src_selector__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__src_selectorAll__ = __webpack_require__(144); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_10__src_selectorAll__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__src_selection_style__ = __webpack_require__(143); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_11__src_selection_style__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__src_touch__ = __webpack_require__(382); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_12__src_touch__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__src_touches__ = __webpack_require__(383); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_13__src_touches__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__src_window__ = __webpack_require__(77); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_14__src_window__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__src_selection_on__ = __webpack_require__(74); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return __WEBPACK_IMPORTED_MODULE_15__src_selection_on__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return __WEBPACK_IMPORTED_MODULE_15__src_selection_on__["c"]; }); - - - - - - - - - - - - - - - - - - -/***/ }), -/* 2 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = newInterval; -var t0 = new Date, - t1 = new Date; - -function newInterval(floori, offseti, count, field) { - - function interval(date) { - return floori(date = new Date(+date)), date; - } - - interval.floor = interval; - - interval.ceil = function(date) { - return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date; - }; - - interval.round = function(date) { - var d0 = interval(date), - d1 = interval.ceil(date); - return date - d0 < d1 - date ? d0 : d1; - }; - - interval.offset = function(date, step) { - return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date; - }; - - interval.range = function(start, stop, step) { - var range = []; - start = interval.ceil(start); - step = step == null ? 1 : Math.floor(step); - if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date - do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop) - return range; - }; - - interval.filter = function(test) { - return newInterval(function(date) { - if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1); - }, function(date, step) { - if (date >= date) while (--step >= 0) while (offseti(date, 1), !test(date)) {} // eslint-disable-line no-empty - }); - }; - - if (count) { - interval.count = function(start, end) { - t0.setTime(+start), t1.setTime(+end); - floori(t0), floori(t1); - return Math.floor(count(t0, t1)); - }; - - interval.every = function(step) { - step = Math.floor(step); - return !isFinite(step) || !(step > 0) ? null - : !(step > 1) ? interval - : interval.filter(field - ? function(d) { return field(d) % step === 0; } - : function(d) { return interval.count(0, d) % step === 0; }); - }; - } - - return interval; -} - - -/***/ }), -/* 3 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_bisect__ = __webpack_require__(88); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_bisect__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_0__src_bisect__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_0__src_bisect__["c"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_ascending__ = __webpack_require__(17); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_1__src_ascending__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_bisector__ = __webpack_require__(89); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_2__src_bisector__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_cross__ = __webpack_require__(170); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_3__src_cross__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_descending__ = __webpack_require__(171); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_4__src_descending__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_deviation__ = __webpack_require__(90); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_5__src_deviation__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_extent__ = __webpack_require__(91); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_6__src_extent__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_histogram__ = __webpack_require__(172); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_7__src_histogram__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__src_threshold_freedmanDiaconis__ = __webpack_require__(182); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_8__src_threshold_freedmanDiaconis__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_threshold_scott__ = __webpack_require__(183); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_9__src_threshold_scott__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__src_threshold_sturges__ = __webpack_require__(95); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_10__src_threshold_sturges__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__src_max__ = __webpack_require__(174); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_11__src_max__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__src_mean__ = __webpack_require__(175); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_12__src_mean__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__src_median__ = __webpack_require__(176); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return __WEBPACK_IMPORTED_MODULE_13__src_median__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__src_merge__ = __webpack_require__(177); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return __WEBPACK_IMPORTED_MODULE_14__src_merge__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__src_min__ = __webpack_require__(92); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return __WEBPACK_IMPORTED_MODULE_15__src_min__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__src_pairs__ = __webpack_require__(93); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return __WEBPACK_IMPORTED_MODULE_16__src_pairs__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__src_permute__ = __webpack_require__(178); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return __WEBPACK_IMPORTED_MODULE_17__src_permute__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__src_quantile__ = __webpack_require__(47); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return __WEBPACK_IMPORTED_MODULE_18__src_quantile__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__src_range__ = __webpack_require__(94); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return __WEBPACK_IMPORTED_MODULE_19__src_range__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__src_scan__ = __webpack_require__(179); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return __WEBPACK_IMPORTED_MODULE_20__src_scan__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__src_shuffle__ = __webpack_require__(180); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return __WEBPACK_IMPORTED_MODULE_21__src_shuffle__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__src_sum__ = __webpack_require__(181); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return __WEBPACK_IMPORTED_MODULE_22__src_sum__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__src_ticks__ = __webpack_require__(96); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return __WEBPACK_IMPORTED_MODULE_23__src_ticks__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return __WEBPACK_IMPORTED_MODULE_23__src_ticks__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return __WEBPACK_IMPORTED_MODULE_23__src_ticks__["c"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__src_transpose__ = __webpack_require__(97); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return __WEBPACK_IMPORTED_MODULE_24__src_transpose__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__src_variance__ = __webpack_require__(98); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return __WEBPACK_IMPORTED_MODULE_25__src_variance__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__src_zip__ = __webpack_require__(184); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "E", function() { return __WEBPACK_IMPORTED_MODULE_26__src_zip__["a"]; }); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/***/ }), -/* 4 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_value__ = __webpack_require__(66); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_0__src_value__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_array__ = __webpack_require__(127); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_1__src_array__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_basis__ = __webpack_require__(65); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_2__src_basis__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_basisClosed__ = __webpack_require__(128); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_3__src_basisClosed__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_date__ = __webpack_require__(130); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_4__src_date__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_number__ = __webpack_require__(37); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_5__src_number__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_object__ = __webpack_require__(131); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_6__src_object__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_round__ = __webpack_require__(293); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_7__src_round__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__src_string__ = __webpack_require__(133); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_8__src_string__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_transform_index__ = __webpack_require__(295); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_9__src_transform_index__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_9__src_transform_index__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__src_zoom__ = __webpack_require__(297); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_10__src_zoom__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__src_rgb__ = __webpack_require__(132); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_11__src_rgb__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_11__src_rgb__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_11__src_rgb__["c"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__src_hsl__ = __webpack_require__(290); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return __WEBPACK_IMPORTED_MODULE_12__src_hsl__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return __WEBPACK_IMPORTED_MODULE_12__src_hsl__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__src_lab__ = __webpack_require__(291); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return __WEBPACK_IMPORTED_MODULE_13__src_lab__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__src_hcl__ = __webpack_require__(289); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return __WEBPACK_IMPORTED_MODULE_14__src_hcl__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return __WEBPACK_IMPORTED_MODULE_14__src_hcl__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__src_cubehelix__ = __webpack_require__(288); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return __WEBPACK_IMPORTED_MODULE_15__src_cubehelix__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return __WEBPACK_IMPORTED_MODULE_15__src_cubehelix__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__src_quantize__ = __webpack_require__(292); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return __WEBPACK_IMPORTED_MODULE_16__src_quantize__["a"]; }); - - - - - - - - - - - - - - - - - - - -/***/ }), -/* 5 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return root; }); -/* harmony export (immutable) */ __webpack_exports__["b"] = Selection; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__select__ = __webpack_require__(377); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__selectAll__ = __webpack_require__(378); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__filter__ = __webpack_require__(366); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__data__ = __webpack_require__(360); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__enter__ = __webpack_require__(141); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__exit__ = __webpack_require__(365); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__merge__ = __webpack_require__(370); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__order__ = __webpack_require__(373); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__sort__ = __webpack_require__(380); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__call__ = __webpack_require__(358); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__nodes__ = __webpack_require__(372); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__node__ = __webpack_require__(371); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__size__ = __webpack_require__(379); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__empty__ = __webpack_require__(364); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__each__ = __webpack_require__(363); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__attr__ = __webpack_require__(357); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__style__ = __webpack_require__(143); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__property__ = __webpack_require__(374); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__classed__ = __webpack_require__(359); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__text__ = __webpack_require__(381); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__html__ = __webpack_require__(367); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__raise__ = __webpack_require__(375); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__lower__ = __webpack_require__(369); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__append__ = __webpack_require__(356); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__insert__ = __webpack_require__(368); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__remove__ = __webpack_require__(376); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__datum__ = __webpack_require__(361); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__on__ = __webpack_require__(74); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__dispatch__ = __webpack_require__(362); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -var root = [null]; - -function Selection(groups, parents) { - this._groups = groups; - this._parents = parents; -} - -function selection() { - return new Selection([[document.documentElement]], root); -} - -Selection.prototype = selection.prototype = { - constructor: Selection, - select: __WEBPACK_IMPORTED_MODULE_0__select__["a" /* default */], - selectAll: __WEBPACK_IMPORTED_MODULE_1__selectAll__["a" /* default */], - filter: __WEBPACK_IMPORTED_MODULE_2__filter__["a" /* default */], - data: __WEBPACK_IMPORTED_MODULE_3__data__["a" /* default */], - enter: __WEBPACK_IMPORTED_MODULE_4__enter__["a" /* default */], - exit: __WEBPACK_IMPORTED_MODULE_5__exit__["a" /* default */], - merge: __WEBPACK_IMPORTED_MODULE_6__merge__["a" /* default */], - order: __WEBPACK_IMPORTED_MODULE_7__order__["a" /* default */], - sort: __WEBPACK_IMPORTED_MODULE_8__sort__["a" /* default */], - call: __WEBPACK_IMPORTED_MODULE_9__call__["a" /* default */], - nodes: __WEBPACK_IMPORTED_MODULE_10__nodes__["a" /* default */], - node: __WEBPACK_IMPORTED_MODULE_11__node__["a" /* default */], - size: __WEBPACK_IMPORTED_MODULE_12__size__["a" /* default */], - empty: __WEBPACK_IMPORTED_MODULE_13__empty__["a" /* default */], - each: __WEBPACK_IMPORTED_MODULE_14__each__["a" /* default */], - attr: __WEBPACK_IMPORTED_MODULE_15__attr__["a" /* default */], - style: __WEBPACK_IMPORTED_MODULE_16__style__["a" /* default */], - property: __WEBPACK_IMPORTED_MODULE_17__property__["a" /* default */], - classed: __WEBPACK_IMPORTED_MODULE_18__classed__["a" /* default */], - text: __WEBPACK_IMPORTED_MODULE_19__text__["a" /* default */], - html: __WEBPACK_IMPORTED_MODULE_20__html__["a" /* default */], - raise: __WEBPACK_IMPORTED_MODULE_21__raise__["a" /* default */], - lower: __WEBPACK_IMPORTED_MODULE_22__lower__["a" /* default */], - append: __WEBPACK_IMPORTED_MODULE_23__append__["a" /* default */], - insert: __WEBPACK_IMPORTED_MODULE_24__insert__["a" /* default */], - remove: __WEBPACK_IMPORTED_MODULE_25__remove__["a" /* default */], - datum: __WEBPACK_IMPORTED_MODULE_26__datum__["a" /* default */], - on: __WEBPACK_IMPORTED_MODULE_27__on__["b" /* default */], - dispatch: __WEBPACK_IMPORTED_MODULE_28__dispatch__["a" /* default */] -}; - -/* harmony default export */ __webpack_exports__["a"] = (selection); - - -/***/ }), -/* 6 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* unused harmony export CREATED */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return SCHEDULED; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return STARTING; }); -/* unused harmony export STARTED */ -/* unused harmony export RUNNING */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return ENDING; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return ENDED; }); -/* harmony export (immutable) */ __webpack_exports__["g"] = init; -/* harmony export (immutable) */ __webpack_exports__["e"] = set; -/* harmony export (immutable) */ __webpack_exports__["f"] = get; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_dispatch__ = __webpack_require__(12); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_timer__ = __webpack_require__(44); - - - -var emptyOn = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_dispatch__["dispatch"])("start", "end", "interrupt"); -var emptyTween = []; - -var CREATED = 0; -var SCHEDULED = 1; -var STARTING = 2; -var STARTED = 3; -var RUNNING = 4; -var ENDING = 5; -var ENDED = 6; - -/* harmony default export */ __webpack_exports__["h"] = (function(node, name, id, index, group, timing) { - var schedules = node.__transition; - if (!schedules) node.__transition = {}; - else if (id in schedules) return; - create(node, id, { - name: name, - index: index, // For context during callback. - group: group, // For context during callback. - on: emptyOn, - tween: emptyTween, - time: timing.time, - delay: timing.delay, - duration: timing.duration, - ease: timing.ease, - timer: null, - state: CREATED - }); -}); - -function init(node, id) { - var schedule = node.__transition; - if (!schedule || !(schedule = schedule[id]) || schedule.state > CREATED) throw new Error("too late"); - return schedule; -} - -function set(node, id) { - var schedule = node.__transition; - if (!schedule || !(schedule = schedule[id]) || schedule.state > STARTING) throw new Error("too late"); - return schedule; -} - -function get(node, id) { - var schedule = node.__transition; - if (!schedule || !(schedule = schedule[id])) throw new Error("too late"); - return schedule; -} - -function create(node, id, self) { - var schedules = node.__transition, - tween; - - // Initialize the self timer when the transition is created. - // Note the actual delay is not known until the first callback! - schedules[id] = self; - self.timer = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_timer__["a" /* timer */])(schedule, 0, self.time); - - function schedule(elapsed) { - self.state = SCHEDULED; - self.timer.restart(start, self.delay, self.time); - - // If the elapsed delay is less than our first sleep, start immediately. - if (self.delay <= elapsed) start(elapsed - self.delay); - } - - function start(elapsed) { - var i, j, n, o; - - // If the state is not SCHEDULED, then we previously errored on start. - if (self.state !== SCHEDULED) return stop(); - - for (i in schedules) { - o = schedules[i]; - if (o.name !== self.name) continue; - - // While this element already has a starting transition during this frame, - // defer starting an interrupting transition until that transition has a - // chance to tick (and possibly end); see d3/d3-transition#54! - if (o.state === STARTED) return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_timer__["b" /* timeout */])(start); - - // Interrupt the active transition, if any. - // Dispatch the interrupt event. - if (o.state === RUNNING) { - o.state = ENDED; - o.timer.stop(); - o.on.call("interrupt", node, node.__data__, o.index, o.group); - delete schedules[i]; - } - - // Cancel any pre-empted transitions. No interrupt event is dispatched - // because the cancelled transitions never started. Note that this also - // removes this transition from the pending list! - else if (+i < id) { - o.state = ENDED; - o.timer.stop(); - delete schedules[i]; - } - } - - // Defer the first tick to end of the current frame; see d3/d3#1576. - // Note the transition may be canceled after start and before the first tick! - // Note this must be scheduled before the start event; see d3/d3-transition#16! - // Assuming this is successful, subsequent callbacks go straight to tick. - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_timer__["b" /* timeout */])(function() { - if (self.state === STARTED) { - self.state = RUNNING; - self.timer.restart(tick, self.delay, self.time); - tick(elapsed); - } - }); - - // Dispatch the start event. - // Note this must be done before the tween are initialized. - self.state = STARTING; - self.on.call("start", node, node.__data__, self.index, self.group); - if (self.state !== STARTING) return; // interrupted - self.state = STARTED; - - // Initialize the tween, deleting null tween. - tween = new Array(n = self.tween.length); - for (i = 0, j = -1; i < n; ++i) { - if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) { - tween[++j] = o; - } - } - tween.length = j + 1; - } - - function tick(elapsed) { - var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1), - i = -1, - n = tween.length; - - while (++i < n) { - tween[i].call(null, t); - } - - // Dispatch the end event. - if (self.state === ENDING) { - self.on.call("end", node, node.__data__, self.index, self.group); - stop(); - } - } - - function stop() { - self.state = ENDED; - self.timer.stop(); - delete schedules[id]; - for (var i in schedules) return; // eslint-disable-line no-unused-vars - delete node.__transition; - } -} - - -/***/ }), -/* 7 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_color__ = __webpack_require__(49); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_color__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_0__src_color__["h"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_0__src_color__["g"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_lab__ = __webpack_require__(205); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_1__src_lab__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_1__src_lab__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_cubehelix__ = __webpack_require__(204); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_2__src_cubehelix__["a"]; }); - - - - - -/***/ }), -/* 8 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = projection; -/* harmony export (immutable) */ __webpack_exports__["b"] = projectionMutator; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__clip_antimeridian__ = __webpack_require__(241); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__clip_circle__ = __webpack_require__(242); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__clip_extent__ = __webpack_require__(56); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__compose__ = __webpack_require__(115); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__identity__ = __webpack_require__(57); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__rotation__ = __webpack_require__(34); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__transform__ = __webpack_require__(35); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__fit__ = __webpack_require__(60); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__resample__ = __webpack_require__(263); - - - - - - - - - - - -var transformRadians = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__transform__["b" /* transformer */])({ - point: function(x, y) { - this.stream.point(x * __WEBPACK_IMPORTED_MODULE_5__math__["g" /* radians */], y * __WEBPACK_IMPORTED_MODULE_5__math__["g" /* radians */]); - } -}); - -function projection(project) { - return projectionMutator(function() { return project; })(); -} - -function projectionMutator(projectAt) { - var project, - k = 150, // scale - x = 480, y = 250, // translate - dx, dy, lambda = 0, phi = 0, // center - deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate - theta = null, preclip = __WEBPACK_IMPORTED_MODULE_0__clip_antimeridian__["a" /* default */], // clip angle - x0 = null, y0, x1, y1, postclip = __WEBPACK_IMPORTED_MODULE_4__identity__["a" /* default */], // clip extent - delta2 = 0.5, projectResample = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_9__resample__["a" /* default */])(projectTransform, delta2), // precision - cache, - cacheStream; - - function projection(point) { - point = projectRotate(point[0] * __WEBPACK_IMPORTED_MODULE_5__math__["g" /* radians */], point[1] * __WEBPACK_IMPORTED_MODULE_5__math__["g" /* radians */]); - return [point[0] * k + dx, dy - point[1] * k]; - } - - function invert(point) { - point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k); - return point && [point[0] * __WEBPACK_IMPORTED_MODULE_5__math__["h" /* degrees */], point[1] * __WEBPACK_IMPORTED_MODULE_5__math__["h" /* degrees */]]; - } - - function projectTransform(x, y) { - return x = project(x, y), [x[0] * k + dx, dy - x[1] * k]; - } - - projection.stream = function(stream) { - return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream)))); - }; - - projection.clipAngle = function(_) { - return arguments.length ? (preclip = +_ ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__clip_circle__["a" /* default */])(theta = _ * __WEBPACK_IMPORTED_MODULE_5__math__["g" /* radians */], 6 * __WEBPACK_IMPORTED_MODULE_5__math__["g" /* radians */]) : (theta = null, __WEBPACK_IMPORTED_MODULE_0__clip_antimeridian__["a" /* default */]), reset()) : theta * __WEBPACK_IMPORTED_MODULE_5__math__["h" /* degrees */]; - }; - - projection.clipExtent = function(_) { - return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, __WEBPACK_IMPORTED_MODULE_4__identity__["a" /* default */]) : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__clip_extent__["b" /* clipExtent */])(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; - }; - - projection.scale = function(_) { - return arguments.length ? (k = +_, recenter()) : k; - }; - - projection.translate = function(_) { - return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y]; - }; - - projection.center = function(_) { - return arguments.length ? (lambda = _[0] % 360 * __WEBPACK_IMPORTED_MODULE_5__math__["g" /* radians */], phi = _[1] % 360 * __WEBPACK_IMPORTED_MODULE_5__math__["g" /* radians */], recenter()) : [lambda * __WEBPACK_IMPORTED_MODULE_5__math__["h" /* degrees */], phi * __WEBPACK_IMPORTED_MODULE_5__math__["h" /* degrees */]]; - }; - - projection.rotate = function(_) { - return arguments.length ? (deltaLambda = _[0] % 360 * __WEBPACK_IMPORTED_MODULE_5__math__["g" /* radians */], deltaPhi = _[1] % 360 * __WEBPACK_IMPORTED_MODULE_5__math__["g" /* radians */], deltaGamma = _.length > 2 ? _[2] % 360 * __WEBPACK_IMPORTED_MODULE_5__math__["g" /* radians */] : 0, recenter()) : [deltaLambda * __WEBPACK_IMPORTED_MODULE_5__math__["h" /* degrees */], deltaPhi * __WEBPACK_IMPORTED_MODULE_5__math__["h" /* degrees */], deltaGamma * __WEBPACK_IMPORTED_MODULE_5__math__["h" /* degrees */]]; - }; - - projection.precision = function(_) { - return arguments.length ? (projectResample = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_9__resample__["a" /* default */])(projectTransform, delta2 = _ * _), reset()) : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__math__["n" /* sqrt */])(delta2); - }; - - projection.fitExtent = function(extent, object) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__fit__["a" /* fitExtent */])(projection, extent, object); - }; - - projection.fitSize = function(size, object) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__fit__["b" /* fitSize */])(projection, size, object); - }; - - function recenter() { - projectRotate = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__compose__["a" /* default */])(rotate = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_6__rotation__["b" /* rotateRadians */])(deltaLambda, deltaPhi, deltaGamma), project); - var center = project(lambda, phi); - dx = x - center[0] * k; - dy = y + center[1] * k; - return reset(); - } - - function reset() { - cache = cacheStream = null; - return projection; - } - - return function() { - project = projectAt.apply(this, arguments); - projection.invert = project.invert && invert; - return recenter(); - }; -} - - -/***/ }), -/* 9 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return durationSecond; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return durationMinute; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return durationHour; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return durationDay; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return durationWeek; }); -var durationSecond = 1e3; -var durationMinute = 6e4; -var durationHour = 36e5; -var durationDay = 864e5; -var durationWeek = 6048e5; - - -/***/ }), -/* 10 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = noop; -function noop() {} - - -/***/ }), -/* 11 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = Transition; -/* harmony export (immutable) */ __webpack_exports__["a"] = transition; -/* harmony export (immutable) */ __webpack_exports__["c"] = newId; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__attr__ = __webpack_require__(431); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__attrTween__ = __webpack_require__(432); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__delay__ = __webpack_require__(433); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__duration__ = __webpack_require__(434); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__ease__ = __webpack_require__(435); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__filter__ = __webpack_require__(436); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__merge__ = __webpack_require__(437); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__on__ = __webpack_require__(438); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__remove__ = __webpack_require__(439); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__select__ = __webpack_require__(440); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__selectAll__ = __webpack_require__(441); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__selection__ = __webpack_require__(442); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__style__ = __webpack_require__(443); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__styleTween__ = __webpack_require__(444); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__text__ = __webpack_require__(445); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__transition__ = __webpack_require__(446); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__tween__ = __webpack_require__(46); - - - - - - - - - - - - - - - - - - - -var id = 0; - -function Transition(groups, parents, name, id) { - this._groups = groups; - this._parents = parents; - this._name = name; - this._id = id; -} - -function transition(name) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_selection__["a" /* selection */])().transition(name); -} - -function newId() { - return ++id; -} - -var selection_prototype = __WEBPACK_IMPORTED_MODULE_0_d3_selection__["a" /* selection */].prototype; - -Transition.prototype = transition.prototype = { - constructor: Transition, - select: __WEBPACK_IMPORTED_MODULE_10__select__["a" /* default */], - selectAll: __WEBPACK_IMPORTED_MODULE_11__selectAll__["a" /* default */], - filter: __WEBPACK_IMPORTED_MODULE_6__filter__["a" /* default */], - merge: __WEBPACK_IMPORTED_MODULE_7__merge__["a" /* default */], - selection: __WEBPACK_IMPORTED_MODULE_12__selection__["a" /* default */], - transition: __WEBPACK_IMPORTED_MODULE_16__transition__["a" /* default */], - call: selection_prototype.call, - nodes: selection_prototype.nodes, - node: selection_prototype.node, - size: selection_prototype.size, - empty: selection_prototype.empty, - each: selection_prototype.each, - on: __WEBPACK_IMPORTED_MODULE_8__on__["a" /* default */], - attr: __WEBPACK_IMPORTED_MODULE_1__attr__["a" /* default */], - attrTween: __WEBPACK_IMPORTED_MODULE_2__attrTween__["a" /* default */], - style: __WEBPACK_IMPORTED_MODULE_13__style__["a" /* default */], - styleTween: __WEBPACK_IMPORTED_MODULE_14__styleTween__["a" /* default */], - text: __WEBPACK_IMPORTED_MODULE_15__text__["a" /* default */], - remove: __WEBPACK_IMPORTED_MODULE_9__remove__["a" /* default */], - tween: __WEBPACK_IMPORTED_MODULE_17__tween__["a" /* default */], - delay: __WEBPACK_IMPORTED_MODULE_3__delay__["a" /* default */], - duration: __WEBPACK_IMPORTED_MODULE_4__duration__["a" /* default */], - ease: __WEBPACK_IMPORTED_MODULE_5__ease__["a" /* default */] -}; - - -/***/ }), -/* 12 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_dispatch__ = __webpack_require__(206); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "dispatch", function() { return __WEBPACK_IMPORTED_MODULE_0__src_dispatch__["a"]; }); - - - -/***/ }), -/* 13 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function streamGeometry(geometry, stream) { - if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) { - streamGeometryType[geometry.type](geometry, stream); - } -} - -var streamObjectType = { - Feature: function(object, stream) { - streamGeometry(object.geometry, stream); - }, - FeatureCollection: function(object, stream) { - var features = object.features, i = -1, n = features.length; - while (++i < n) streamGeometry(features[i].geometry, stream); - } -}; - -var streamGeometryType = { - Sphere: function(object, stream) { - stream.sphere(); - }, - Point: function(object, stream) { - object = object.coordinates; - stream.point(object[0], object[1], object[2]); - }, - MultiPoint: function(object, stream) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]); - }, - LineString: function(object, stream) { - streamLine(object.coordinates, stream, 0); - }, - MultiLineString: function(object, stream) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) streamLine(coordinates[i], stream, 0); - }, - Polygon: function(object, stream) { - streamPolygon(object.coordinates, stream); - }, - MultiPolygon: function(object, stream) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) streamPolygon(coordinates[i], stream); - }, - GeometryCollection: function(object, stream) { - var geometries = object.geometries, i = -1, n = geometries.length; - while (++i < n) streamGeometry(geometries[i], stream); - } -}; - -function streamLine(coordinates, stream, closed) { - var i = -1, n = coordinates.length - closed, coordinate; - stream.lineStart(); - while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); - stream.lineEnd(); -} - -function streamPolygon(coordinates, stream) { - var i = -1, n = coordinates.length; - stream.polygonStart(); - while (++i < n) streamLine(coordinates[i], stream, 1); - stream.polygonEnd(); -} - -/* harmony default export */ __webpack_exports__["a"] = (function(object, stream) { - if (object && streamObjectType.hasOwnProperty(object.type)) { - streamObjectType[object.type](object, stream); - } else { - streamGeometry(object, stream); - } -}); - - -/***/ }), -/* 14 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_path__ = __webpack_require__(298); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_path__["a"]; }); - - - -/***/ }), -/* 15 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return map; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return slice; }); -var array = Array.prototype; - -var map = array.map; -var slice = array.slice; - - -/***/ }), -/* 16 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return function constant() { - return x; - }; -}); - - -/***/ }), -/* 17 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -}); - - -/***/ }), -/* 18 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -// Adds floating point numbers with twice the normal precision. -// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and -// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3) -// 305–363 (1997). -// Code adapted from GeographicLib by Charles F. F. Karney, -// http://geographiclib.sourceforge.net/ - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return new Adder; -}); - -function Adder() { - this.reset(); -} - -Adder.prototype = { - constructor: Adder, - reset: function() { - this.s = // rounded value - this.t = 0; // exact error - }, - add: function(y) { - add(temp, y, this.t); - add(this, temp.s, this.s); - if (this.s) this.t += temp.t; - else this.s = temp.t; - }, - valueOf: function() { - return this.s; - } -}; - -var temp = new Adder; - -function add(adder, a, b) { - var x = adder.s = a + b, - bv = x - a, - av = x - bv; - adder.t = (a - av) + (b - bv); -} - - -/***/ }), -/* 19 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() { - return Math.random(); -}); - - -/***/ }), -/* 20 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return x === null ? NaN : +x; -}); - - -/***/ }), -/* 21 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_nest__ = __webpack_require__(201); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "nest", function() { return __WEBPACK_IMPORTED_MODULE_0__src_nest__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_set__ = __webpack_require__(202); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "set", function() { return __WEBPACK_IMPORTED_MODULE_1__src_set__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_map__ = __webpack_require__(48); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "map", function() { return __WEBPACK_IMPORTED_MODULE_2__src_map__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_keys__ = __webpack_require__(200); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "keys", function() { return __WEBPACK_IMPORTED_MODULE_3__src_keys__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_values__ = __webpack_require__(203); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "values", function() { return __WEBPACK_IMPORTED_MODULE_4__src_values__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_entries__ = __webpack_require__(199); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "entries", function() { return __WEBPACK_IMPORTED_MODULE_5__src_entries__["a"]; }); - - - - - - - - -/***/ }), -/* 22 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return function() { - return x; - }; -}); - - -/***/ }), -/* 23 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["f"] = spherical; -/* harmony export (immutable) */ __webpack_exports__["a"] = cartesian; -/* harmony export (immutable) */ __webpack_exports__["c"] = cartesianDot; -/* harmony export (immutable) */ __webpack_exports__["b"] = cartesianCross; -/* harmony export (immutable) */ __webpack_exports__["e"] = cartesianAddInPlace; -/* harmony export (immutable) */ __webpack_exports__["d"] = cartesianScale; -/* harmony export (immutable) */ __webpack_exports__["g"] = cartesianNormalizeInPlace; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); - - -function spherical(cartesian) { - return [__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["e" /* atan2 */])(cartesian[1], cartesian[0]), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["f" /* asin */])(cartesian[2])]; -} - -function cartesian(spherical) { - var lambda = spherical[0], phi = spherical[1], cosPhi = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(phi); - return [cosPhi * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(lambda), cosPhi * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(lambda), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(phi)]; -} - -function cartesianDot(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; -} - -function cartesianCross(a, b) { - return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]; -} - -// TODO return a -function cartesianAddInPlace(a, b) { - a[0] += b[0], a[1] += b[1], a[2] += b[2]; -} - -function cartesianScale(vector, k) { - return [vector[0] * k, vector[1] * k, vector[2] * k]; -} - -// TODO return d -function cartesianNormalizeInPlace(d) { - var l = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["n" /* sqrt */])(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); - d[0] /= l, d[1] /= l, d[2] /= l; -} - - -/***/ }), -/* 24 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = azimuthalRaw; -/* harmony export (immutable) */ __webpack_exports__["a"] = azimuthalInvert; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); - - -function azimuthalRaw(scale) { - return function(x, y) { - var cx = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(x), - cy = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(y), - k = scale(cx * cy); - return [ - k * cy * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(x), - k * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(y) - ]; - } -} - -function azimuthalInvert(angle) { - return function(x, y) { - var z = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["n" /* sqrt */])(x * x + y * y), - c = angle(z), - sc = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(c), - cc = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(c); - return [ - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["e" /* atan2 */])(x * sc, z * cc), - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["f" /* asin */])(z && y * sc / z) - ]; - } -} - - -/***/ }), -/* 25 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(parent, x0, y0, x1, y1) { - var nodes = parent.children, - node, - i = -1, - n = nodes.length, - k = parent.value && (x1 - x0) / parent.value; - - while (++i < n) { - node = nodes[i], node.y0 = y0, node.y1 = y1; - node.x0 = x0, node.x1 = x0 += node.value * k; - } -}); - - -/***/ }), -/* 26 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = hue; -/* harmony export (immutable) */ __webpack_exports__["c"] = gamma; -/* harmony export (immutable) */ __webpack_exports__["a"] = nogamma; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constant__ = __webpack_require__(129); - - -function linear(a, d) { - return function(t) { - return a + t * d; - }; -} - -function exponential(a, b, y) { - return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { - return Math.pow(a + t * b, y); - }; -} - -function hue(a, b) { - var d = b - a; - return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(isNaN(a) ? b : a); -} - -function gamma(y) { - return (y = +y) === 1 ? nogamma : function(a, b) { - return b - a ? exponential(a, b, y) : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(isNaN(a) ? b : a); - }; -} - -function nogamma(a, b) { - var d = b - a; - return d ? linear(a, d) : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(isNaN(a) ? b : a); -} - - -/***/ }), -/* 27 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(s) { - return s.match(/.{6}/g).map(function(x) { - return "#" + x; - }); -}); - - -/***/ }), -/* 28 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = linearish; -/* harmony export (immutable) */ __webpack_exports__["a"] = linear; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_array__ = __webpack_require__(3); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__ = __webpack_require__(4); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__continuous__ = __webpack_require__(38); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__tickFormat__ = __webpack_require__(343); - - - - - -function linearish(scale) { - var domain = scale.domain; - - scale.ticks = function(count) { - var d = domain(); - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["z" /* ticks */])(d[0], d[d.length - 1], count == null ? 10 : count); - }; - - scale.tickFormat = function(count, specifier) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__tickFormat__["a" /* default */])(domain(), count, specifier); - }; - - scale.nice = function(count) { - if (count == null) count = 10; - - var d = domain(), - i0 = 0, - i1 = d.length - 1, - start = d[i0], - stop = d[i1], - step; - - if (stop < start) { - step = start, start = stop, stop = step; - step = i0, i0 = i1, i1 = step; - } - - step = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["A" /* tickIncrement */])(start, stop, count); - - if (step > 0) { - start = Math.floor(start / step) * step; - stop = Math.ceil(stop / step) * step; - step = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["A" /* tickIncrement */])(start, stop, count); - } else if (step < 0) { - start = Math.ceil(start * step) / step; - stop = Math.floor(stop * step) / step; - step = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["A" /* tickIncrement */])(start, stop, count); - } - - if (step > 0) { - d[i0] = Math.floor(start / step) * step; - d[i1] = Math.ceil(stop / step) * step; - domain(d); - } else if (step < 0) { - d[i0] = Math.ceil(start * step) / step; - d[i1] = Math.floor(stop * step) / step; - domain(d); - } - - return scale; - }; - - return scale; -} - -function linear() { - var scale = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__continuous__["a" /* default */])(__WEBPACK_IMPORTED_MODULE_2__continuous__["b" /* deinterpolateLinear */], __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__["b" /* interpolateNumber */]); - - scale.copy = function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__continuous__["c" /* copy */])(scale, linear()); - }; - - return linearish(scale); -} - - -/***/ }), -/* 29 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return abs; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return atan2; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return cos; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return max; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return min; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return sin; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return sqrt; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return epsilon; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return pi; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return halfPi; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return tau; }); -/* harmony export (immutable) */ __webpack_exports__["l"] = acos; -/* harmony export (immutable) */ __webpack_exports__["k"] = asin; -var abs = Math.abs; -var atan2 = Math.atan2; -var cos = Math.cos; -var max = Math.max; -var min = Math.min; -var sin = Math.sin; -var sqrt = Math.sqrt; - -var epsilon = 1e-12; -var pi = Math.PI; -var halfPi = pi / 2; -var tau = 2 * pi; - -function acos(x) { - return x > 1 ? 0 : x < -1 ? pi : Math.acos(x); -} - -function asin(x) { - return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x); -} - - -/***/ }), -/* 30 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(series, order) { - if (!((n = series.length) > 1)) return; - for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) { - s0 = s1, s1 = series[order[i]]; - for (j = 0; j < m; ++j) { - s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1]; - } - } -}); - - -/***/ }), -/* 31 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(series) { - var n = series.length, o = new Array(n); - while (--n >= 0) o[n] = n; - return o; -}); - - -/***/ }), -/* 32 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return epsilon; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return epsilon2; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return beaches; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return cells; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return circles; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return edges; }); -/* harmony export (immutable) */ __webpack_exports__["a"] = Diagram; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Beach__ = __webpack_require__(448); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Cell__ = __webpack_require__(162); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Circle__ = __webpack_require__(163); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Edge__ = __webpack_require__(85); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__RedBlackTree__ = __webpack_require__(86); - - - - - - -var epsilon = 1e-6; -var epsilon2 = 1e-12; -var beaches; -var cells; -var circles; -var edges; - -function triangleArea(a, b, c) { - return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]); -} - -function lexicographic(a, b) { - return b[1] - a[1] - || b[0] - a[0]; -} - -function Diagram(sites, extent) { - var site = sites.sort(lexicographic).pop(), - x, - y, - circle; - - edges = []; - cells = new Array(sites.length); - beaches = new __WEBPACK_IMPORTED_MODULE_4__RedBlackTree__["a" /* default */]; - circles = new __WEBPACK_IMPORTED_MODULE_4__RedBlackTree__["a" /* default */]; - - while (true) { - circle = __WEBPACK_IMPORTED_MODULE_2__Circle__["a" /* firstCircle */]; - if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) { - if (site[0] !== x || site[1] !== y) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__Beach__["a" /* addBeach */])(site); - x = site[0], y = site[1]; - } - site = sites.pop(); - } else if (circle) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__Beach__["b" /* removeBeach */])(circle.arc); - } else { - break; - } - } - - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__Cell__["a" /* sortCellHalfedges */])(); - - if (extent) { - var x0 = +extent[0][0], - y0 = +extent[0][1], - x1 = +extent[1][0], - y1 = +extent[1][1]; - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__Edge__["a" /* clipEdges */])(x0, y0, x1, y1); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__Cell__["b" /* clipCells */])(x0, y0, x1, y1); - } - - this.edges = edges; - this.cells = cells; - - beaches = - circles = - edges = - cells = null; -} - -Diagram.prototype = { - constructor: Diagram, - - polygons: function() { - var edges = this.edges; - - return this.cells.map(function(cell) { - var polygon = cell.halfedges.map(function(i) { return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__Cell__["c" /* cellHalfedgeStart */])(cell, edges[i]); }); - polygon.data = cell.site.data; - return polygon; - }); - }, - - triangles: function() { - var triangles = [], - edges = this.edges; - - this.cells.forEach(function(cell, i) { - if (!(m = (halfedges = cell.halfedges).length)) return; - var site = cell.site, - halfedges, - j = -1, - m, - s0, - e1 = edges[halfedges[m - 1]], - s1 = e1.left === site ? e1.right : e1.left; - - while (++j < m) { - s0 = s1; - e1 = edges[halfedges[j]]; - s1 = e1.left === site ? e1.right : e1.left; - if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) { - triangles.push([site.data, s0.data, s1.data]); - } - } - }); - - return triangles; - }, - - links: function() { - return this.edges.filter(function(edge) { - return edge.right; - }).map(function(edge) { - return { - source: edge.left.data, - target: edge.right.data - }; - }); - }, - - find: function(x, y, radius) { - var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell; - - // Use the previously-found cell, or start with an arbitrary one. - while (!(cell = that.cells[i1])) if (++i1 >= n) return null; - var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy; - - // Traverse the half-edges to find a closer cell, if any. - do { - cell = that.cells[i0 = i1], i1 = null; - cell.halfedges.forEach(function(e) { - var edge = that.edges[e], v = edge.left; - if ((v === cell.site || !v) && !(v = edge.right)) return; - var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy; - if (v2 < d2) d2 = v2, i1 = v.index; - }); - } while (i1 !== null); - - that._found = i0; - - return radius == null || d2 <= radius * radius ? cell.site : null; - } -} - - -/***/ }), -/* 33 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__formatDecimal__ = __webpack_require__(55); - - -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return x = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__formatDecimal__["a" /* default */])(Math.abs(x)), x ? x[1] : NaN; -}); - - -/***/ }), -/* 34 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = rotateRadians; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__compose__ = __webpack_require__(115); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__math__ = __webpack_require__(0); - - - -function rotationIdentity(lambda, phi) { - return [lambda > __WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */] ? lambda - __WEBPACK_IMPORTED_MODULE_1__math__["b" /* tau */] : lambda < -__WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */] ? lambda + __WEBPACK_IMPORTED_MODULE_1__math__["b" /* tau */] : lambda, phi]; -} - -rotationIdentity.invert = rotationIdentity; - -function rotateRadians(deltaLambda, deltaPhi, deltaGamma) { - return (deltaLambda %= __WEBPACK_IMPORTED_MODULE_1__math__["b" /* tau */]) ? (deltaPhi || deltaGamma ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__compose__["a" /* default */])(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) - : rotationLambda(deltaLambda)) - : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) - : rotationIdentity); -} - -function forwardRotationLambda(deltaLambda) { - return function(lambda, phi) { - return lambda += deltaLambda, [lambda > __WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */] ? lambda - __WEBPACK_IMPORTED_MODULE_1__math__["b" /* tau */] : lambda < -__WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */] ? lambda + __WEBPACK_IMPORTED_MODULE_1__math__["b" /* tau */] : lambda, phi]; - }; -} - -function rotationLambda(deltaLambda) { - var rotation = forwardRotationLambda(deltaLambda); - rotation.invert = forwardRotationLambda(-deltaLambda); - return rotation; -} - -function rotationPhiGamma(deltaPhi, deltaGamma) { - var cosDeltaPhi = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["c" /* cos */])(deltaPhi), - sinDeltaPhi = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(deltaPhi), - cosDeltaGamma = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["c" /* cos */])(deltaGamma), - sinDeltaGamma = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(deltaGamma); - - function rotation(lambda, phi) { - var cosPhi = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["c" /* cos */])(phi), - x = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["c" /* cos */])(lambda) * cosPhi, - y = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(lambda) * cosPhi, - z = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(phi), - k = z * cosDeltaPhi + x * sinDeltaPhi; - return [ - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["e" /* atan2 */])(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["f" /* asin */])(k * cosDeltaGamma + y * sinDeltaGamma) - ]; - } - - rotation.invert = function(lambda, phi) { - var cosPhi = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["c" /* cos */])(phi), - x = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["c" /* cos */])(lambda) * cosPhi, - y = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(lambda) * cosPhi, - z = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(phi), - k = z * cosDeltaGamma - y * sinDeltaGamma; - return [ - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["e" /* atan2 */])(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["f" /* asin */])(k * cosDeltaPhi - x * sinDeltaPhi) - ]; - }; - - return rotation; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(rotate) { - rotate = rotateRadians(rotate[0] * __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */], rotate[1] * __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */], rotate.length > 2 ? rotate[2] * __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */] : 0); - - function forward(coordinates) { - coordinates = rotate(coordinates[0] * __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */], coordinates[1] * __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */]); - return coordinates[0] *= __WEBPACK_IMPORTED_MODULE_1__math__["h" /* degrees */], coordinates[1] *= __WEBPACK_IMPORTED_MODULE_1__math__["h" /* degrees */], coordinates; - } - - forward.invert = function(coordinates) { - coordinates = rotate.invert(coordinates[0] * __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */], coordinates[1] * __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */]); - return coordinates[0] *= __WEBPACK_IMPORTED_MODULE_1__math__["h" /* degrees */], coordinates[1] *= __WEBPACK_IMPORTED_MODULE_1__math__["h" /* degrees */], coordinates; - }; - - return forward; -}); - - -/***/ }), -/* 35 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = transformer; -/* harmony default export */ __webpack_exports__["a"] = (function(methods) { - return { - stream: transformer(methods) - }; -}); - -function transformer(methods) { - return function(stream) { - var s = new TransformStream; - for (var key in methods) s[key] = methods[key]; - s.stream = stream; - return s; - }; -} - -function TransformStream() {} - -TransformStream.prototype = { - constructor: TransformStream, - point: function(x, y) { this.stream.point(x, y); }, - sphere: function() { this.stream.sphere(); }, - lineStart: function() { this.stream.lineStart(); }, - lineEnd: function() { this.stream.lineEnd(); }, - polygonStart: function() { this.stream.polygonStart(); }, - polygonEnd: function() { this.stream.polygonEnd(); } -}; - - -/***/ }), -/* 36 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(parent, x0, y0, x1, y1) { - var nodes = parent.children, - node, - i = -1, - n = nodes.length, - k = parent.value && (y1 - y0) / parent.value; - - while (++i < n) { - node = nodes[i], node.x0 = x0, node.x1 = x1; - node.y0 = y0, node.y1 = y0 += node.value * k; - } -}); - - -/***/ }), -/* 37 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(a, b) { - return a = +a, b -= a, function(t) { - return a + b * t; - }; -}); - - -/***/ }), -/* 38 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = deinterpolateLinear; -/* harmony export (immutable) */ __webpack_exports__["c"] = copy; -/* harmony export (immutable) */ __webpack_exports__["a"] = continuous; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_array__ = __webpack_require__(3); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__ = __webpack_require__(4); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__array__ = __webpack_require__(15); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__constant__ = __webpack_require__(69); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__number__ = __webpack_require__(137); - - - - - - -var unit = [0, 1]; - -function deinterpolateLinear(a, b) { - return (b -= (a = +a)) - ? function(x) { return (x - a) / b; } - : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__constant__["a" /* default */])(b); -} - -function deinterpolateClamp(deinterpolate) { - return function(a, b) { - var d = deinterpolate(a = +a, b = +b); - return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); }; - }; -} - -function reinterpolateClamp(reinterpolate) { - return function(a, b) { - var r = reinterpolate(a = +a, b = +b); - return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); }; - }; -} - -function bimap(domain, range, deinterpolate, reinterpolate) { - var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1]; - if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0); - else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1); - return function(x) { return r0(d0(x)); }; -} - -function polymap(domain, range, deinterpolate, reinterpolate) { - var j = Math.min(domain.length, range.length) - 1, - d = new Array(j), - r = new Array(j), - i = -1; - - // Reverse descending domains. - if (domain[j] < domain[0]) { - domain = domain.slice().reverse(); - range = range.slice().reverse(); - } - - while (++i < j) { - d[i] = deinterpolate(domain[i], domain[i + 1]); - r[i] = reinterpolate(range[i], range[i + 1]); - } - - return function(x) { - var i = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["a" /* bisect */])(domain, x, 1, j) - 1; - return r[i](d[i](x)); - }; -} - -function copy(source, target) { - return target - .domain(source.domain()) - .range(source.range()) - .interpolate(source.interpolate()) - .clamp(source.clamp()); -} - -// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1]. -// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b]. -function continuous(deinterpolate, reinterpolate) { - var domain = unit, - range = unit, - interpolate = __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__["f" /* interpolate */], - clamp = false, - piecewise, - output, - input; - - function rescale() { - piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap; - output = input = null; - return scale; - } - - function scale(x) { - return (output || (output = piecewise(domain, range, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate)))(+x); - } - - scale.invert = function(y) { - return (input || (input = piecewise(range, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y); - }; - - scale.domain = function(_) { - return arguments.length ? (domain = __WEBPACK_IMPORTED_MODULE_2__array__["a" /* map */].call(_, __WEBPACK_IMPORTED_MODULE_4__number__["a" /* default */]), rescale()) : domain.slice(); - }; - - scale.range = function(_) { - return arguments.length ? (range = __WEBPACK_IMPORTED_MODULE_2__array__["b" /* slice */].call(_), rescale()) : range.slice(); - }; - - scale.rangeRound = function(_) { - return range = __WEBPACK_IMPORTED_MODULE_2__array__["b" /* slice */].call(_), interpolate = __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__["l" /* interpolateRound */], rescale(); - }; - - scale.clamp = function(_) { - return arguments.length ? (clamp = !!_, rescale()) : clamp; - }; - - scale.interpolate = function(_) { - return arguments.length ? (interpolate = _, rescale()) : interpolate; - }; - - return rescale(); -} - - -/***/ }), -/* 39 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["c"] = point; -/* harmony export (immutable) */ __webpack_exports__["b"] = Basis; -function point(that, x, y) { - that._context.bezierCurveTo( - (2 * that._x0 + that._x1) / 3, - (2 * that._y0 + that._y1) / 3, - (that._x0 + 2 * that._x1) / 3, - (that._y0 + 2 * that._y1) / 3, - (that._x0 + 4 * that._x1 + x) / 6, - (that._y0 + 4 * that._y1 + y) / 6 - ); -} - -function Basis(context) { - this._context = context; -} - -Basis.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = - this._y0 = this._y1 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 3: point(this, this._x1, this._y1); // proceed - case 2: this._context.lineTo(this._x1, this._y1); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; break; - case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed - default: point(this, x, y); break; - } - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - } -}; - -/* harmony default export */ __webpack_exports__["a"] = (function(context) { - return new Basis(context); -}); - - -/***/ }), -/* 40 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["c"] = point; -/* harmony export (immutable) */ __webpack_exports__["b"] = Cardinal; -function point(that, x, y) { - that._context.bezierCurveTo( - that._x1 + that._k * (that._x2 - that._x0), - that._y1 + that._k * (that._y2 - that._y0), - that._x2 + that._k * (that._x1 - x), - that._y2 + that._k * (that._y1 - y), - that._x2, - that._y2 - ); -} - -function Cardinal(context, tension) { - this._context = context; - this._k = (1 - tension) / 6; -} - -Cardinal.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 2: this._context.lineTo(this._x2, this._y2); break; - case 3: point(this, this._x1, this._y1); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; this._x1 = x, this._y1 = y; break; - case 2: this._point = 3; // proceed - default: point(this, x, y); break; - } - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -/* harmony default export */ __webpack_exports__["a"] = ((function custom(tension) { - - function cardinal(context) { - return new Cardinal(context, tension); - } - - cardinal.tension = function(tension) { - return custom(+tension); - }; - - return cardinal; -})(0)); - - -/***/ }), -/* 41 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function Linear(context) { - this._context = context; -} - -Linear.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; // proceed - default: this._context.lineTo(x, y); break; - } - } -}; - -/* harmony default export */ __webpack_exports__["a"] = (function(context) { - return new Linear(context); -}); - - -/***/ }), -/* 42 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() {}); - - -/***/ }), -/* 43 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_interval__ = __webpack_require__(2); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_interval__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_millisecond__ = __webpack_require__(413); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__src_millisecond__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_1__src_millisecond__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_1__src_millisecond__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_1__src_millisecond__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_second__ = __webpack_require__(416); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_2__src_second__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_2__src_second__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_2__src_second__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_2__src_second__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_minute__ = __webpack_require__(414); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_3__src_minute__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_3__src_minute__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_hour__ = __webpack_require__(412); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_4__src_hour__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_4__src_hour__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_day__ = __webpack_require__(411); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_5__src_day__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_5__src_day__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_week__ = __webpack_require__(423); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["d"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["e"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["f"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["g"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["h"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["i"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["j"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["k"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["l"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["m"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "E", function() { return __WEBPACK_IMPORTED_MODULE_6__src_week__["n"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_month__ = __webpack_require__(415); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return __WEBPACK_IMPORTED_MODULE_7__src_month__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "G", function() { return __WEBPACK_IMPORTED_MODULE_7__src_month__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__src_year__ = __webpack_require__(424); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "H", function() { return __WEBPACK_IMPORTED_MODULE_8__src_year__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return __WEBPACK_IMPORTED_MODULE_8__src_year__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_utcMinute__ = __webpack_require__(419); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "J", function() { return __WEBPACK_IMPORTED_MODULE_9__src_utcMinute__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "K", function() { return __WEBPACK_IMPORTED_MODULE_9__src_utcMinute__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__src_utcHour__ = __webpack_require__(418); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "L", function() { return __WEBPACK_IMPORTED_MODULE_10__src_utcHour__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "M", function() { return __WEBPACK_IMPORTED_MODULE_10__src_utcHour__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__src_utcDay__ = __webpack_require__(417); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "N", function() { return __WEBPACK_IMPORTED_MODULE_11__src_utcDay__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "O", function() { return __WEBPACK_IMPORTED_MODULE_11__src_utcDay__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__ = __webpack_require__(421); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "P", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Q", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "R", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "S", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "T", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "U", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["d"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "V", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["e"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "W", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["f"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "X", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["g"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Y", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["h"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Z", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["i"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_0", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["j"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_1", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["k"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_2", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["l"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_3", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["m"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_4", function() { return __WEBPACK_IMPORTED_MODULE_12__src_utcWeek__["n"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__src_utcMonth__ = __webpack_require__(420); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_5", function() { return __WEBPACK_IMPORTED_MODULE_13__src_utcMonth__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_6", function() { return __WEBPACK_IMPORTED_MODULE_13__src_utcMonth__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__src_utcYear__ = __webpack_require__(422); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_7", function() { return __WEBPACK_IMPORTED_MODULE_14__src_utcYear__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "_8", function() { return __WEBPACK_IMPORTED_MODULE_14__src_utcYear__["b"]; }); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/***/ }), -/* 44 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_timer__ = __webpack_require__(84); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_0__src_timer__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_timer__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_0__src_timer__["d"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_timeout__ = __webpack_require__(426); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__src_timeout__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_interval__ = __webpack_require__(425); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_2__src_interval__["a"]; }); - - - - - - - -/***/ }), -/* 45 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_selection_index__ = __webpack_require__(428); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_transition_index__ = __webpack_require__(11); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_1__src_transition_index__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_active__ = __webpack_require__(427); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_2__src_active__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_interrupt__ = __webpack_require__(160); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_3__src_interrupt__["a"]; }); - - - - - - -/***/ }), -/* 46 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = tweenValue; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__schedule__ = __webpack_require__(6); - - -function tweenRemove(id, name) { - var tween0, tween1; - return function() { - var schedule = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__schedule__["e" /* set */])(this, id), - tween = schedule.tween; - - // If this node shared tween with the previous node, - // just assign the updated shared tween and we’re done! - // Otherwise, copy-on-write. - if (tween !== tween0) { - tween1 = tween0 = tween; - for (var i = 0, n = tween1.length; i < n; ++i) { - if (tween1[i].name === name) { - tween1 = tween1.slice(); - tween1.splice(i, 1); - break; - } - } - } - - schedule.tween = tween1; - }; -} - -function tweenFunction(id, name, value) { - var tween0, tween1; - if (typeof value !== "function") throw new Error; - return function() { - var schedule = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__schedule__["e" /* set */])(this, id), - tween = schedule.tween; - - // If this node shared tween with the previous node, - // just assign the updated shared tween and we’re done! - // Otherwise, copy-on-write. - if (tween !== tween0) { - tween1 = (tween0 = tween).slice(); - for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) { - if (tween1[i].name === name) { - tween1[i] = t; - break; - } - } - if (i === n) tween1.push(t); - } - - schedule.tween = tween1; - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(name, value) { - var id = this._id; - - name += ""; - - if (arguments.length < 2) { - var tween = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__schedule__["f" /* get */])(this.node(), id).tween; - for (var i = 0, n = tween.length, t; i < n; ++i) { - if ((t = tween[i]).name === name) { - return t.value; - } - } - return null; - } - - return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value)); -}); - -function tweenValue(transition, name, value) { - var id = transition._id; - - transition.each(function() { - var schedule = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__schedule__["e" /* set */])(this, id); - (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments); - }); - - return function(node) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__schedule__["f" /* get */])(node, id).value[name]; - }; -} - - -/***/ }), -/* 47 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__number__ = __webpack_require__(20); - - -/* harmony default export */ __webpack_exports__["a"] = (function(values, p, valueof) { - if (valueof == null) valueof = __WEBPACK_IMPORTED_MODULE_0__number__["a" /* default */]; - if (!(n = values.length)) return; - if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values); - if (p >= 1) return +valueof(values[n - 1], n - 1, values); - var n, - i = (n - 1) * p, - i0 = Math.floor(i), - value0 = +valueof(values[i0], i0, values), - value1 = +valueof(values[i0 + 1], i0 + 1, values); - return value0 + (value1 - value0) * (i - i0); -}); - - -/***/ }), -/* 48 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return prefix; }); -var prefix = "$"; - -function Map() {} - -Map.prototype = map.prototype = { - constructor: Map, - has: function(key) { - return (prefix + key) in this; - }, - get: function(key) { - return this[prefix + key]; - }, - set: function(key, value) { - this[prefix + key] = value; - return this; - }, - remove: function(key) { - var property = prefix + key; - return property in this && delete this[property]; - }, - clear: function() { - for (var property in this) if (property[0] === prefix) delete this[property]; - }, - keys: function() { - var keys = []; - for (var property in this) if (property[0] === prefix) keys.push(property.slice(1)); - return keys; - }, - values: function() { - var values = []; - for (var property in this) if (property[0] === prefix) values.push(this[property]); - return values; - }, - entries: function() { - var entries = []; - for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]}); - return entries; - }, - size: function() { - var size = 0; - for (var property in this) if (property[0] === prefix) ++size; - return size; - }, - empty: function() { - for (var property in this) if (property[0] === prefix) return false; - return true; - }, - each: function(f) { - for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this); - } -}; - -function map(object, f) { - var map = new Map; - - // Copy constructor. - if (object instanceof Map) object.each(function(value, key) { map.set(key, value); }); - - // Index array by numeric index or specified key function. - else if (Array.isArray(object)) { - var i = -1, - n = object.length, - o; - - if (f == null) while (++i < n) map.set(i, object[i]); - else while (++i < n) map.set(f(o = object[i], i, object), o); - } - - // Convert object to map. - else if (object) for (var key in object) map.set(key, object[key]); - - return map; -} - -/* harmony default export */ __webpack_exports__["a"] = (map); - - -/***/ }), -/* 49 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["d"] = Color; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return darker; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return brighter; }); -/* harmony export (immutable) */ __webpack_exports__["a"] = color; -/* harmony export (immutable) */ __webpack_exports__["c"] = rgbConvert; -/* harmony export (immutable) */ __webpack_exports__["h"] = rgb; -/* harmony export (immutable) */ __webpack_exports__["b"] = Rgb; -/* unused harmony export hslConvert */ -/* harmony export (immutable) */ __webpack_exports__["g"] = hsl; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__define__ = __webpack_require__(50); - - -function Color() {} - -var darker = 0.7; -var brighter = 1 / darker; - -var reI = "\\s*([+-]?\\d+)\\s*", - reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*", - reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*", - reHex3 = /^#([0-9a-f]{3})$/, - reHex6 = /^#([0-9a-f]{6})$/, - reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"), - reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"), - reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"), - reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"), - reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"), - reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$"); - -var named = { - aliceblue: 0xf0f8ff, - antiquewhite: 0xfaebd7, - aqua: 0x00ffff, - aquamarine: 0x7fffd4, - azure: 0xf0ffff, - beige: 0xf5f5dc, - bisque: 0xffe4c4, - black: 0x000000, - blanchedalmond: 0xffebcd, - blue: 0x0000ff, - blueviolet: 0x8a2be2, - brown: 0xa52a2a, - burlywood: 0xdeb887, - cadetblue: 0x5f9ea0, - chartreuse: 0x7fff00, - chocolate: 0xd2691e, - coral: 0xff7f50, - cornflowerblue: 0x6495ed, - cornsilk: 0xfff8dc, - crimson: 0xdc143c, - cyan: 0x00ffff, - darkblue: 0x00008b, - darkcyan: 0x008b8b, - darkgoldenrod: 0xb8860b, - darkgray: 0xa9a9a9, - darkgreen: 0x006400, - darkgrey: 0xa9a9a9, - darkkhaki: 0xbdb76b, - darkmagenta: 0x8b008b, - darkolivegreen: 0x556b2f, - darkorange: 0xff8c00, - darkorchid: 0x9932cc, - darkred: 0x8b0000, - darksalmon: 0xe9967a, - darkseagreen: 0x8fbc8f, - darkslateblue: 0x483d8b, - darkslategray: 0x2f4f4f, - darkslategrey: 0x2f4f4f, - darkturquoise: 0x00ced1, - darkviolet: 0x9400d3, - deeppink: 0xff1493, - deepskyblue: 0x00bfff, - dimgray: 0x696969, - dimgrey: 0x696969, - dodgerblue: 0x1e90ff, - firebrick: 0xb22222, - floralwhite: 0xfffaf0, - forestgreen: 0x228b22, - fuchsia: 0xff00ff, - gainsboro: 0xdcdcdc, - ghostwhite: 0xf8f8ff, - gold: 0xffd700, - goldenrod: 0xdaa520, - gray: 0x808080, - green: 0x008000, - greenyellow: 0xadff2f, - grey: 0x808080, - honeydew: 0xf0fff0, - hotpink: 0xff69b4, - indianred: 0xcd5c5c, - indigo: 0x4b0082, - ivory: 0xfffff0, - khaki: 0xf0e68c, - lavender: 0xe6e6fa, - lavenderblush: 0xfff0f5, - lawngreen: 0x7cfc00, - lemonchiffon: 0xfffacd, - lightblue: 0xadd8e6, - lightcoral: 0xf08080, - lightcyan: 0xe0ffff, - lightgoldenrodyellow: 0xfafad2, - lightgray: 0xd3d3d3, - lightgreen: 0x90ee90, - lightgrey: 0xd3d3d3, - lightpink: 0xffb6c1, - lightsalmon: 0xffa07a, - lightseagreen: 0x20b2aa, - lightskyblue: 0x87cefa, - lightslategray: 0x778899, - lightslategrey: 0x778899, - lightsteelblue: 0xb0c4de, - lightyellow: 0xffffe0, - lime: 0x00ff00, - limegreen: 0x32cd32, - linen: 0xfaf0e6, - magenta: 0xff00ff, - maroon: 0x800000, - mediumaquamarine: 0x66cdaa, - mediumblue: 0x0000cd, - mediumorchid: 0xba55d3, - mediumpurple: 0x9370db, - mediumseagreen: 0x3cb371, - mediumslateblue: 0x7b68ee, - mediumspringgreen: 0x00fa9a, - mediumturquoise: 0x48d1cc, - mediumvioletred: 0xc71585, - midnightblue: 0x191970, - mintcream: 0xf5fffa, - mistyrose: 0xffe4e1, - moccasin: 0xffe4b5, - navajowhite: 0xffdead, - navy: 0x000080, - oldlace: 0xfdf5e6, - olive: 0x808000, - olivedrab: 0x6b8e23, - orange: 0xffa500, - orangered: 0xff4500, - orchid: 0xda70d6, - palegoldenrod: 0xeee8aa, - palegreen: 0x98fb98, - paleturquoise: 0xafeeee, - palevioletred: 0xdb7093, - papayawhip: 0xffefd5, - peachpuff: 0xffdab9, - peru: 0xcd853f, - pink: 0xffc0cb, - plum: 0xdda0dd, - powderblue: 0xb0e0e6, - purple: 0x800080, - rebeccapurple: 0x663399, - red: 0xff0000, - rosybrown: 0xbc8f8f, - royalblue: 0x4169e1, - saddlebrown: 0x8b4513, - salmon: 0xfa8072, - sandybrown: 0xf4a460, - seagreen: 0x2e8b57, - seashell: 0xfff5ee, - sienna: 0xa0522d, - silver: 0xc0c0c0, - skyblue: 0x87ceeb, - slateblue: 0x6a5acd, - slategray: 0x708090, - slategrey: 0x708090, - snow: 0xfffafa, - springgreen: 0x00ff7f, - steelblue: 0x4682b4, - tan: 0xd2b48c, - teal: 0x008080, - thistle: 0xd8bfd8, - tomato: 0xff6347, - turquoise: 0x40e0d0, - violet: 0xee82ee, - wheat: 0xf5deb3, - white: 0xffffff, - whitesmoke: 0xf5f5f5, - yellow: 0xffff00, - yellowgreen: 0x9acd32 -}; - -__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__define__["a" /* default */])(Color, color, { - displayable: function() { - return this.rgb().displayable(); - }, - toString: function() { - return this.rgb() + ""; - } -}); - -function color(format) { - var m; - format = (format + "").trim().toLowerCase(); - return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00 - : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000 - : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0) - : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%) - : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1) - : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1) - : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%) - : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1) - : named.hasOwnProperty(format) ? rgbn(named[format]) - : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) - : null; -} - -function rgbn(n) { - return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1); -} - -function rgba(r, g, b, a) { - if (a <= 0) r = g = b = NaN; - return new Rgb(r, g, b, a); -} - -function rgbConvert(o) { - if (!(o instanceof Color)) o = color(o); - if (!o) return new Rgb; - o = o.rgb(); - return new Rgb(o.r, o.g, o.b, o.opacity); -} - -function rgb(r, g, b, opacity) { - return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); -} - -function Rgb(r, g, b, opacity) { - this.r = +r; - this.g = +g; - this.b = +b; - this.opacity = +opacity; -} - -__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__define__["a" /* default */])(Rgb, rgb, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__define__["b" /* extend */])(Color, { - brighter: function(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); - }, - darker: function(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); - }, - rgb: function() { - return this; - }, - displayable: function() { - return (0 <= this.r && this.r <= 255) - && (0 <= this.g && this.g <= 255) - && (0 <= this.b && this.b <= 255) - && (0 <= this.opacity && this.opacity <= 1); - }, - toString: function() { - var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); - return (a === 1 ? "rgb(" : "rgba(") - + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " - + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " - + Math.max(0, Math.min(255, Math.round(this.b) || 0)) - + (a === 1 ? ")" : ", " + a + ")"); - } -})); - -function hsla(h, s, l, a) { - if (a <= 0) h = s = l = NaN; - else if (l <= 0 || l >= 1) h = s = NaN; - else if (s <= 0) h = NaN; - return new Hsl(h, s, l, a); -} - -function hslConvert(o) { - if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); - if (!(o instanceof Color)) o = color(o); - if (!o) return new Hsl; - if (o instanceof Hsl) return o; - o = o.rgb(); - var r = o.r / 255, - g = o.g / 255, - b = o.b / 255, - min = Math.min(r, g, b), - max = Math.max(r, g, b), - h = NaN, - s = max - min, - l = (max + min) / 2; - if (s) { - if (r === max) h = (g - b) / s + (g < b) * 6; - else if (g === max) h = (b - r) / s + 2; - else h = (r - g) / s + 4; - s /= l < 0.5 ? max + min : 2 - max - min; - h *= 60; - } else { - s = l > 0 && l < 1 ? 0 : h; - } - return new Hsl(h, s, l, o.opacity); -} - -function hsl(h, s, l, opacity) { - return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); -} - -function Hsl(h, s, l, opacity) { - this.h = +h; - this.s = +s; - this.l = +l; - this.opacity = +opacity; -} - -__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__define__["a" /* default */])(Hsl, hsl, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__define__["b" /* extend */])(Color, { - brighter: function(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Hsl(this.h, this.s, this.l * k, this.opacity); - }, - darker: function(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Hsl(this.h, this.s, this.l * k, this.opacity); - }, - rgb: function() { - var h = this.h % 360 + (this.h < 0) * 360, - s = isNaN(h) || isNaN(this.s) ? 0 : this.s, - l = this.l, - m2 = l + (l < 0.5 ? l : 1 - l) * s, - m1 = 2 * l - m2; - return new Rgb( - hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), - hsl2rgb(h, m1, m2), - hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), - this.opacity - ); - }, - displayable: function() { - return (0 <= this.s && this.s <= 1 || isNaN(this.s)) - && (0 <= this.l && this.l <= 1) - && (0 <= this.opacity && this.opacity <= 1); - } -})); - -/* From FvD 13.37, CSS Color Module Level 3 */ -function hsl2rgb(h, m1, m2) { - return (h < 60 ? m1 + (m2 - m1) * h / 60 - : h < 180 ? m2 - : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 - : m1) * 255; -} - - -/***/ }), -/* 50 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = extend; -/* harmony default export */ __webpack_exports__["a"] = (function(constructor, factory, prototype) { - constructor.prototype = factory.prototype = prototype; - prototype.constructor = constructor; -}); - -function extend(parent, definition) { - var prototype = Object.create(parent.prototype); - for (var key in definition) prototype[key] = definition[key]; - return prototype; -} - - -/***/ }), -/* 51 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_drag__ = __webpack_require__(208); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_drag__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_nodrag__ = __webpack_require__(101); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__src_nodrag__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_1__src_nodrag__["b"]; }); - - - - -/***/ }), -/* 52 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function objectConverter(columns) { - return new Function("d", "return {" + columns.map(function(name, i) { - return JSON.stringify(name) + ": d[" + i + "]"; - }).join(",") + "}"); -} - -function customConverter(columns, f) { - var object = objectConverter(columns); - return function(row, i) { - return f(object(row), i, columns); - }; -} - -// Compute unique columns in order of discovery. -function inferColumns(rows) { - var columnSet = Object.create(null), - columns = []; - - rows.forEach(function(row) { - for (var column in row) { - if (!(column in columnSet)) { - columns.push(columnSet[column] = column); - } - } - }); - - return columns; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(delimiter) { - var reFormat = new RegExp("[\"" + delimiter + "\n\r]"), - delimiterCode = delimiter.charCodeAt(0); - - function parse(text, f) { - var convert, columns, rows = parseRows(text, function(row, i) { - if (convert) return convert(row, i - 1); - columns = row, convert = f ? customConverter(row, f) : objectConverter(row); - }); - rows.columns = columns; - return rows; - } - - function parseRows(text, f) { - var EOL = {}, // sentinel value for end-of-line - EOF = {}, // sentinel value for end-of-file - rows = [], // output rows - N = text.length, - I = 0, // current character index - n = 0, // the current line number - t, // the current token - eol; // is the current token followed by EOL? - - function token() { - if (I >= N) return EOF; // special case: end of file - if (eol) return eol = false, EOL; // special case: end of line - - // special case: quotes - var j = I, c; - if (text.charCodeAt(j) === 34) { - var i = j; - while (i++ < N) { - if (text.charCodeAt(i) === 34) { - if (text.charCodeAt(i + 1) !== 34) break; - ++i; - } - } - I = i + 2; - c = text.charCodeAt(i + 1); - if (c === 13) { - eol = true; - if (text.charCodeAt(i + 2) === 10) ++I; - } else if (c === 10) { - eol = true; - } - return text.slice(j + 1, i).replace(/""/g, "\""); - } - - // common case: find next delimiter or newline - while (I < N) { - var k = 1; - c = text.charCodeAt(I++); - if (c === 10) eol = true; // \n - else if (c === 13) { eol = true; if (text.charCodeAt(I) === 10) ++I, ++k; } // \r|\r\n - else if (c !== delimiterCode) continue; - return text.slice(j, I - k); - } - - // special case: last token before EOF - return text.slice(j); - } - - while ((t = token()) !== EOF) { - var a = []; - while (t !== EOL && t !== EOF) { - a.push(t); - t = token(); - } - if (f && (a = f(a, n++)) == null) continue; - rows.push(a); - } - - return rows; - } - - function format(rows, columns) { - if (columns == null) columns = inferColumns(rows); - return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) { - return columns.map(function(column) { - return formatValue(row[column]); - }).join(delimiter); - })).join("\n"); - } - - function formatRows(rows) { - return rows.map(formatRow).join("\n"); - } - - function formatRow(row) { - return row.map(formatValue).join(delimiter); - } - - function formatValue(text) { - return text == null ? "" - : reFormat.test(text += "") ? "\"" + text.replace(/\"/g, "\"\"") + "\"" - : text; - } - - return { - parse: parse, - parseRows: parseRows, - format: format, - formatRows: formatRows - }; -}); - - -/***/ }), -/* 53 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() { - return (Math.random() - 0.5) * 1e-6; -}); - - -/***/ }), -/* 54 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_defaultLocale__ = __webpack_require__(229); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_defaultLocale__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_0__src_defaultLocale__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_0__src_defaultLocale__["c"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_locale__ = __webpack_require__(109); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_1__src_locale__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_formatSpecifier__ = __webpack_require__(107); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_2__src_formatSpecifier__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_precisionFixed__ = __webpack_require__(235); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_3__src_precisionFixed__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_precisionPrefix__ = __webpack_require__(236); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_4__src_precisionPrefix__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_precisionRound__ = __webpack_require__(237); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_5__src_precisionRound__["a"]; }); - - - - - - - - -/***/ }), -/* 55 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -// Computes the decimal coefficient and exponent of the specified number x with -// significant digits p, where x is positive and p is in [1, 21] or undefined. -// For example, formatDecimal(1.23) returns ["123", 0]. -/* harmony default export */ __webpack_exports__["a"] = (function(x, p) { - if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity - var i, coefficient = x.slice(0, i); - - // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ - // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). - return [ - coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, - +x.slice(i + 1) - ]; -}); - - -/***/ }), -/* 56 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = clipExtent; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__buffer__ = __webpack_require__(112); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__line__ = __webpack_require__(243); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__polygon__ = __webpack_require__(114); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_d3_array__ = __webpack_require__(3); - - - - - - -var clipMax = 1e9, clipMin = -clipMax; - -// TODO Use d3-polygon’s polygonContains here for the ring check? -// TODO Eliminate duplicate buffering in clipBuffer and polygon.push? - -function clipExtent(x0, y0, x1, y1) { - - function visible(x, y) { - return x0 <= x && x <= x1 && y0 <= y && y <= y1; - } - - function interpolate(from, to, direction, stream) { - var a = 0, a1 = 0; - if (from == null - || (a = corner(from, direction)) !== (a1 = corner(to, direction)) - || comparePoint(from, to) < 0 ^ direction > 0) { - do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); - while ((a = (a + direction + 4) % 4) !== a1); - } else { - stream.point(to[0], to[1]); - } - } - - function corner(p, direction) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["p" /* abs */])(p[0] - x0) < __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */] ? direction > 0 ? 0 : 3 - : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["p" /* abs */])(p[0] - x1) < __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */] ? direction > 0 ? 2 : 1 - : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["p" /* abs */])(p[1] - y0) < __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */] ? direction > 0 ? 1 : 0 - : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon - } - - function compareIntersection(a, b) { - return comparePoint(a.x, b.x); - } - - function comparePoint(a, b) { - var ca = corner(a, 1), - cb = corner(b, 1); - return ca !== cb ? ca - cb - : ca === 0 ? b[1] - a[1] - : ca === 1 ? a[0] - b[0] - : ca === 2 ? a[1] - b[1] - : b[0] - a[0]; - } - - return function(stream) { - var activeStream = stream, - bufferStream = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__buffer__["a" /* default */])(), - segments, - polygon, - ring, - x__, y__, v__, // first point - x_, y_, v_, // previous point - first, - clean; - - var clipStream = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: polygonStart, - polygonEnd: polygonEnd - }; - - function point(x, y) { - if (visible(x, y)) activeStream.point(x, y); - } - - function polygonInside() { - var winding = 0; - - for (var i = 0, n = polygon.length; i < n; ++i) { - for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) { - a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1]; - if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; } - else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; } - } - } - - return winding; - } - - // Buffer geometry within a polygon and then clip it en masse. - function polygonStart() { - activeStream = bufferStream, segments = [], polygon = [], clean = true; - } - - function polygonEnd() { - var startInside = polygonInside(), - cleanInside = clean && startInside, - visible = (segments = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4_d3_array__["q" /* merge */])(segments)).length; - if (cleanInside || visible) { - stream.polygonStart(); - if (cleanInside) { - stream.lineStart(); - interpolate(null, null, 1, stream); - stream.lineEnd(); - } - if (visible) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__polygon__["a" /* default */])(segments, compareIntersection, startInside, interpolate, stream); - } - stream.polygonEnd(); - } - activeStream = stream, segments = polygon = ring = null; - } - - function lineStart() { - clipStream.point = linePoint; - if (polygon) polygon.push(ring = []); - first = true; - v_ = false; - x_ = y_ = NaN; - } - - // TODO rather than special-case polygons, simply handle them separately. - // Ideally, coincident intersection points should be jittered to avoid - // clipping issues. - function lineEnd() { - if (segments) { - linePoint(x__, y__); - if (v__ && v_) bufferStream.rejoin(); - segments.push(bufferStream.result()); - } - clipStream.point = point; - if (v_) activeStream.lineEnd(); - } - - function linePoint(x, y) { - var v = visible(x, y); - if (polygon) ring.push([x, y]); - if (first) { - x__ = x, y__ = y, v__ = v; - first = false; - if (v) { - activeStream.lineStart(); - activeStream.point(x, y); - } - } else { - if (v && v_) activeStream.point(x, y); - else { - var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], - b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))]; - if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__line__["a" /* default */])(a, b, x0, y0, x1, y1)) { - if (!v_) { - activeStream.lineStart(); - activeStream.point(a[0], a[1]); - } - activeStream.point(b[0], b[1]); - if (!v) activeStream.lineEnd(); - clean = false; - } else if (v) { - activeStream.lineStart(); - activeStream.point(x, y); - clean = false; - } - } - } - x_ = x, y_ = y, v_ = v; - } - - return clipStream; - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var x0 = 0, - y0 = 0, - x1 = 960, - y1 = 500, - cache, - cacheStream, - clip; - - return clip = { - stream: function(stream) { - return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream); - }, - extent: function(_) { - return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]]; - } - }; -}); - - -/***/ }), -/* 57 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return x; -}); - - -/***/ }), -/* 58 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = conicProjection; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__index__ = __webpack_require__(8); - - - -function conicProjection(projectAt) { - var phi0 = 0, - phi1 = __WEBPACK_IMPORTED_MODULE_0__math__["a" /* pi */] / 3, - m = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__index__["b" /* projectionMutator */])(projectAt), - p = m(phi0, phi1); - - p.parallels = function(_) { - return arguments.length ? m(phi0 = _[0] * __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */], phi1 = _[1] * __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */]) : [phi0 * __WEBPACK_IMPORTED_MODULE_0__math__["h" /* degrees */], phi1 * __WEBPACK_IMPORTED_MODULE_0__math__["h" /* degrees */]]; - }; - - return p; -} - - -/***/ }), -/* 59 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = conicEqualAreaRaw; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__conic__ = __webpack_require__(58); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__cylindricalEqualArea__ = __webpack_require__(259); - - - - -function conicEqualAreaRaw(y0, y1) { - var sy0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(y0), n = (sy0 + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(y1)) / 2; - - // Are the parallels symmetrical around the Equator? - if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["p" /* abs */])(n) < __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */]) return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__cylindricalEqualArea__["a" /* cylindricalEqualAreaRaw */])(y0); - - var c = 1 + sy0 * (2 * n - sy0), r0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["n" /* sqrt */])(c) / n; - - function project(x, y) { - var r = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["n" /* sqrt */])(c - 2 * n * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(y)) / n; - return [r * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(x *= n), r0 - r * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(x)]; - } - - project.invert = function(x, y) { - var r0y = r0 - y; - return [__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["e" /* atan2 */])(x, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["p" /* abs */])(r0y)) / n * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["s" /* sign */])(r0y), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["f" /* asin */])((c - (x * x + r0y * r0y) * n * n) / (2 * n))]; - }; - - return project; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__conic__["a" /* conicProjection */])(conicEqualAreaRaw) - .scale(155.424) - .center([0, 33.6442]); -}); - - -/***/ }), -/* 60 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = fitExtent; -/* harmony export (immutable) */ __webpack_exports__["b"] = fitSize; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__stream__ = __webpack_require__(13); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__path_bounds__ = __webpack_require__(118); - - - -function fitExtent(projection, extent, object) { - var w = extent[1][0] - extent[0][0], - h = extent[1][1] - extent[0][1], - clip = projection.clipExtent && projection.clipExtent(); - - projection - .scale(150) - .translate([0, 0]); - - if (clip != null) projection.clipExtent(null); - - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__stream__["a" /* default */])(object, projection.stream(__WEBPACK_IMPORTED_MODULE_1__path_bounds__["a" /* default */])); - - var b = __WEBPACK_IMPORTED_MODULE_1__path_bounds__["a" /* default */].result(), - k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), - x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, - y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2; - - if (clip != null) projection.clipExtent(clip); - - return projection - .scale(k * 150) - .translate([x, y]); -} - -function fitSize(projection, size, object) { - return fitExtent(projection, [[0, 0], size], object); -} - - -/***/ }), -/* 61 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = mercatorRaw; -/* harmony export (immutable) */ __webpack_exports__["c"] = mercatorProjection; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__rotation__ = __webpack_require__(34); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__index__ = __webpack_require__(8); - - - - -function mercatorRaw(lambda, phi) { - return [lambda, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["i" /* log */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["j" /* tan */])((__WEBPACK_IMPORTED_MODULE_0__math__["k" /* halfPi */] + phi) / 2))]; -} - -mercatorRaw.invert = function(x, y) { - return [x, 2 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["l" /* atan */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["m" /* exp */])(y)) - __WEBPACK_IMPORTED_MODULE_0__math__["k" /* halfPi */]]; -}; - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return mercatorProjection(mercatorRaw) - .scale(961 / __WEBPACK_IMPORTED_MODULE_0__math__["b" /* tau */]); -}); - -function mercatorProjection(project) { - var m = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__index__["a" /* default */])(project), - center = m.center, - scale = m.scale, - translate = m.translate, - clipExtent = m.clipExtent, - x0 = null, y0, x1, y1; // clip extent - - m.scale = function(_) { - return arguments.length ? (scale(_), reclip()) : scale(); - }; - - m.translate = function(_) { - return arguments.length ? (translate(_), reclip()) : translate(); - }; - - m.center = function(_) { - return arguments.length ? (center(_), reclip()) : center(); - }; - - m.clipExtent = function(_) { - return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]]; - }; - - function reclip() { - var k = __WEBPACK_IMPORTED_MODULE_0__math__["a" /* pi */] * scale(), - t = m(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__rotation__["a" /* default */])(m.rotate()).invert([0, 0])); - return clipExtent(x0 == null - ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw - ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]] - : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]); - } - - return reclip(); -} - - -/***/ }), -/* 62 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = optional; -/* harmony export (immutable) */ __webpack_exports__["a"] = required; -function optional(f) { - return f == null ? null : required(f); -} - -function required(f) { - if (typeof f !== "function") throw new Error; - return f; -} - - -/***/ }), -/* 63 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = hierarchy; -/* harmony export (immutable) */ __webpack_exports__["c"] = computeHeight; -/* harmony export (immutable) */ __webpack_exports__["b"] = Node; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__count__ = __webpack_require__(269); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__each__ = __webpack_require__(271); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__eachBefore__ = __webpack_require__(273); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__eachAfter__ = __webpack_require__(272); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__sum__ = __webpack_require__(278); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__sort__ = __webpack_require__(277); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__path__ = __webpack_require__(276); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__ancestors__ = __webpack_require__(268); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__descendants__ = __webpack_require__(270); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__leaves__ = __webpack_require__(274); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__links__ = __webpack_require__(275); - - - - - - - - - - - - -function hierarchy(data, children) { - var root = new Node(data), - valued = +data.value && (root.value = data.value), - node, - nodes = [root], - child, - childs, - i, - n; - - if (children == null) children = defaultChildren; - - while (node = nodes.pop()) { - if (valued) node.value = +node.data.value; - if ((childs = children(node.data)) && (n = childs.length)) { - node.children = new Array(n); - for (i = n - 1; i >= 0; --i) { - nodes.push(child = node.children[i] = new Node(childs[i])); - child.parent = node; - child.depth = node.depth + 1; - } - } - } - - return root.eachBefore(computeHeight); -} - -function node_copy() { - return hierarchy(this).eachBefore(copyData); -} - -function defaultChildren(d) { - return d.children; -} - -function copyData(node) { - node.data = node.data.data; -} - -function computeHeight(node) { - var height = 0; - do node.height = height; - while ((node = node.parent) && (node.height < ++height)); -} - -function Node(data) { - this.data = data; - this.depth = - this.height = 0; - this.parent = null; -} - -Node.prototype = hierarchy.prototype = { - constructor: Node, - count: __WEBPACK_IMPORTED_MODULE_0__count__["a" /* default */], - each: __WEBPACK_IMPORTED_MODULE_1__each__["a" /* default */], - eachAfter: __WEBPACK_IMPORTED_MODULE_3__eachAfter__["a" /* default */], - eachBefore: __WEBPACK_IMPORTED_MODULE_2__eachBefore__["a" /* default */], - sum: __WEBPACK_IMPORTED_MODULE_4__sum__["a" /* default */], - sort: __WEBPACK_IMPORTED_MODULE_5__sort__["a" /* default */], - path: __WEBPACK_IMPORTED_MODULE_6__path__["a" /* default */], - ancestors: __WEBPACK_IMPORTED_MODULE_7__ancestors__["a" /* default */], - descendants: __WEBPACK_IMPORTED_MODULE_8__descendants__["a" /* default */], - leaves: __WEBPACK_IMPORTED_MODULE_9__leaves__["a" /* default */], - links: __WEBPACK_IMPORTED_MODULE_10__links__["a" /* default */], - copy: node_copy -}; - - -/***/ }), -/* 64 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return phi; }); -/* harmony export (immutable) */ __webpack_exports__["b"] = squarifyRatio; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dice__ = __webpack_require__(25); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__slice__ = __webpack_require__(36); - - - -var phi = (1 + Math.sqrt(5)) / 2; - -function squarifyRatio(ratio, parent, x0, y0, x1, y1) { - var rows = [], - nodes = parent.children, - row, - nodeValue, - i0 = 0, - i1 = 0, - n = nodes.length, - dx, dy, - value = parent.value, - sumValue, - minValue, - maxValue, - newRatio, - minRatio, - alpha, - beta; - - while (i0 < n) { - dx = x1 - x0, dy = y1 - y0; - - // Find the next non-empty node. - do sumValue = nodes[i1++].value; while (!sumValue && i1 < n); - minValue = maxValue = sumValue; - alpha = Math.max(dy / dx, dx / dy) / (value * ratio); - beta = sumValue * sumValue * alpha; - minRatio = Math.max(maxValue / beta, beta / minValue); - - // Keep adding nodes while the aspect ratio maintains or improves. - for (; i1 < n; ++i1) { - sumValue += nodeValue = nodes[i1].value; - if (nodeValue < minValue) minValue = nodeValue; - if (nodeValue > maxValue) maxValue = nodeValue; - beta = sumValue * sumValue * alpha; - newRatio = Math.max(maxValue / beta, beta / minValue); - if (newRatio > minRatio) { sumValue -= nodeValue; break; } - minRatio = newRatio; - } - - // Position and record the row orientation. - rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)}); - if (row.dice) __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__dice__["a" /* default */])(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1); - else __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__slice__["a" /* default */])(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1); - value -= sumValue, i0 = i1; - } - - return rows; -} - -/* harmony default export */ __webpack_exports__["a"] = ((function custom(ratio) { - - function squarify(parent, x0, y0, x1, y1) { - squarifyRatio(ratio, parent, x0, y0, x1, y1); - } - - squarify.ratio = function(x) { - return custom((x = +x) > 1 ? x : 1); - }; - - return squarify; -})(phi)); - - -/***/ }), -/* 65 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = basis; -function basis(t1, v0, v1, v2, v3) { - var t2 = t1 * t1, t3 = t2 * t1; - return ((1 - 3 * t1 + 3 * t2 - t3) * v0 - + (4 - 6 * t2 + 3 * t3) * v1 - + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 - + t3 * v3) / 6; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(values) { - var n = values.length - 1; - return function(t) { - var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n), - v1 = values[i], - v2 = values[i + 1], - v0 = i > 0 ? values[i - 1] : 2 * v1 - v2, - v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1; - return basis((t - i / n) * n, v0, v1, v2, v3); - }; -}); - - -/***/ }), -/* 66 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_color__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__rgb__ = __webpack_require__(132); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__array__ = __webpack_require__(127); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__date__ = __webpack_require__(130); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__number__ = __webpack_require__(37); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__object__ = __webpack_require__(131); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__string__ = __webpack_require__(133); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__constant__ = __webpack_require__(129); - - - - - - - - - -/* harmony default export */ __webpack_exports__["a"] = (function(a, b) { - var t = typeof b, c; - return b == null || t === "boolean" ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__constant__["a" /* default */])(b) - : (t === "number" ? __WEBPACK_IMPORTED_MODULE_4__number__["a" /* default */] - : t === "string" ? ((c = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["a" /* color */])(b)) ? (b = c, __WEBPACK_IMPORTED_MODULE_1__rgb__["a" /* default */]) : __WEBPACK_IMPORTED_MODULE_6__string__["a" /* default */]) - : b instanceof __WEBPACK_IMPORTED_MODULE_0_d3_color__["a" /* color */] ? __WEBPACK_IMPORTED_MODULE_1__rgb__["a" /* default */] - : b instanceof Date ? __WEBPACK_IMPORTED_MODULE_3__date__["a" /* default */] - : Array.isArray(b) ? __WEBPACK_IMPORTED_MODULE_2__array__["a" /* default */] - : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? __WEBPACK_IMPORTED_MODULE_5__object__["a" /* default */] - : __WEBPACK_IMPORTED_MODULE_4__number__["a" /* default */])(a, b); -}); - - -/***/ }), -/* 67 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_quadtree__ = __webpack_require__(311); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_quadtree__["a"]; }); - - - -/***/ }), -/* 68 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(node, x0, y0, x1, y1) { - this.node = node; - this.x0 = x0; - this.y0 = y0; - this.x1 = x1; - this.y1 = y1; -}); - - -/***/ }), -/* 69 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return function() { - return x; - }; -}); - - -/***/ }), -/* 70 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__namespace__ = __webpack_require__(71); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__namespaces__ = __webpack_require__(72); - - - -function creatorInherit(name) { - return function() { - var document = this.ownerDocument, - uri = this.namespaceURI; - return uri === __WEBPACK_IMPORTED_MODULE_1__namespaces__["a" /* xhtml */] && document.documentElement.namespaceURI === __WEBPACK_IMPORTED_MODULE_1__namespaces__["a" /* xhtml */] - ? document.createElement(name) - : document.createElementNS(uri, name); - }; -} - -function creatorFixed(fullname) { - return function() { - return this.ownerDocument.createElementNS(fullname.space, fullname.local); - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(name) { - var fullname = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__namespace__["a" /* default */])(name); - return (fullname.local - ? creatorFixed - : creatorInherit)(fullname); -}); - - -/***/ }), -/* 71 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__namespaces__ = __webpack_require__(72); - - -/* harmony default export */ __webpack_exports__["a"] = (function(name) { - var prefix = name += "", i = prefix.indexOf(":"); - if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); - return __WEBPACK_IMPORTED_MODULE_0__namespaces__["b" /* default */].hasOwnProperty(prefix) ? {space: __WEBPACK_IMPORTED_MODULE_0__namespaces__["b" /* default */][prefix], local: name} : name; -}); - - -/***/ }), -/* 72 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return xhtml; }); -var xhtml = "http://www.w3.org/1999/xhtml"; - -/* harmony default export */ __webpack_exports__["b"] = ({ - svg: "http://www.w3.org/2000/svg", - xhtml: xhtml, - xlink: "http://www.w3.org/1999/xlink", - xml: "http://www.w3.org/XML/1998/namespace", - xmlns: "http://www.w3.org/2000/xmlns/" -}); - - -/***/ }), -/* 73 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(node, event) { - var svg = node.ownerSVGElement || node; - - if (svg.createSVGPoint) { - var point = svg.createSVGPoint(); - point.x = event.clientX, point.y = event.clientY; - point = point.matrixTransform(node.getScreenCTM().inverse()); - return [point.x, point.y]; - } - - var rect = node.getBoundingClientRect(); - return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; -}); - - -/***/ }), -/* 74 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return event; }); -/* harmony export (immutable) */ __webpack_exports__["c"] = customEvent; -var filterEvents = {}; - -var event = null; - -if (typeof document !== "undefined") { - var element = document.documentElement; - if (!("onmouseenter" in element)) { - filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"}; - } -} - -function filterContextListener(listener, index, group) { - listener = contextListener(listener, index, group); - return function(event) { - var related = event.relatedTarget; - if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) { - listener.call(this, event); - } - }; -} - -function contextListener(listener, index, group) { - return function(event1) { - var event0 = event; // Events can be reentrant (e.g., focus). - event = event1; - try { - listener.call(this, this.__data__, index, group); - } finally { - event = event0; - } - }; -} - -function parseTypenames(typenames) { - return typenames.trim().split(/^|\s+/).map(function(t) { - var name = "", i = t.indexOf("."); - if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); - return {type: t, name: name}; - }); -} - -function onRemove(typename) { - return function() { - var on = this.__on; - if (!on) return; - for (var j = 0, i = -1, m = on.length, o; j < m; ++j) { - if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { - this.removeEventListener(o.type, o.listener, o.capture); - } else { - on[++i] = o; - } - } - if (++i) on.length = i; - else delete this.__on; - }; -} - -function onAdd(typename, value, capture) { - var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener; - return function(d, i, group) { - var on = this.__on, o, listener = wrap(value, i, group); - if (on) for (var j = 0, m = on.length; j < m; ++j) { - if ((o = on[j]).type === typename.type && o.name === typename.name) { - this.removeEventListener(o.type, o.listener, o.capture); - this.addEventListener(o.type, o.listener = listener, o.capture = capture); - o.value = value; - return; - } - } - this.addEventListener(typename.type, listener, capture); - o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture}; - if (!on) this.__on = [o]; - else on.push(o); - }; -} - -/* harmony default export */ __webpack_exports__["b"] = (function(typename, value, capture) { - var typenames = parseTypenames(typename + ""), i, n = typenames.length, t; - - if (arguments.length < 2) { - var on = this.node().__on; - if (on) for (var j = 0, m = on.length, o; j < m; ++j) { - for (i = 0, o = on[j]; i < n; ++i) { - if ((t = typenames[i]).type === o.type && t.name === o.name) { - return o.value; - } - } - } - return; - } - - on = value ? onAdd : onRemove; - if (capture == null) capture = false; - for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture)); - return this; -}); - -function customEvent(event1, listener, that, args) { - var event0 = event; - event1.sourceEvent = event; - event = event1; - try { - return listener.apply(that, args); - } finally { - event = event0; - } -} - - -/***/ }), -/* 75 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function none() {} - -/* harmony default export */ __webpack_exports__["a"] = (function(selector) { - return selector == null ? none : function() { - return this.querySelector(selector); - }; -}); - - -/***/ }), -/* 76 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__selection_on__ = __webpack_require__(74); - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var current = __WEBPACK_IMPORTED_MODULE_0__selection_on__["a" /* event */], source; - while (source = current.sourceEvent) current = source; - return current; -}); - - -/***/ }), -/* 77 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(node) { - return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node - || (node.document && node) // node is a Window - || node.defaultView; // node is a Document -}); - - -/***/ }), -/* 78 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = point; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(29); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__cardinal__ = __webpack_require__(40); - - - -function point(that, x, y) { - var x1 = that._x1, - y1 = that._y1, - x2 = that._x2, - y2 = that._y2; - - if (that._l01_a > __WEBPACK_IMPORTED_MODULE_0__math__["a" /* epsilon */]) { - var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a, - n = 3 * that._l01_a * (that._l01_a + that._l12_a); - x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n; - y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n; - } - - if (that._l23_a > __WEBPACK_IMPORTED_MODULE_0__math__["a" /* epsilon */]) { - var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a, - m = 3 * that._l23_a * (that._l23_a + that._l12_a); - x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m; - y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m; - } - - that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2); -} - -function CatmullRom(context, alpha) { - this._context = context; - this._alpha = alpha; -} - -CatmullRom.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._l01_a = this._l12_a = this._l23_a = - this._l01_2a = this._l12_2a = this._l23_2a = - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 2: this._context.lineTo(this._x2, this._y2); break; - case 3: this.point(this._x2, this._y2); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - - if (this._point) { - var x23 = this._x2 - x, - y23 = this._y2 - y; - this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); - } - - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; break; - case 2: this._point = 3; // proceed - default: point(this, x, y); break; - } - - this._l01_a = this._l12_a, this._l12_a = this._l23_a; - this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -/* harmony default export */ __webpack_exports__["a"] = ((function custom(alpha) { - - function catmullRom(context) { - return alpha ? new CatmullRom(context, alpha) : new __WEBPACK_IMPORTED_MODULE_1__cardinal__["b" /* Cardinal */](context, 0); - } - - catmullRom.alpha = function(alpha) { - return custom(+alpha); - }; - - return catmullRom; -})(0.5)); - - -/***/ }), -/* 79 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_path__ = __webpack_require__(14); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__constant__ = __webpack_require__(16); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__curve_linear__ = __webpack_require__(41); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__point__ = __webpack_require__(81); - - - - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var x = __WEBPACK_IMPORTED_MODULE_3__point__["a" /* x */], - y = __WEBPACK_IMPORTED_MODULE_3__point__["b" /* y */], - defined = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(true), - context = null, - curve = __WEBPACK_IMPORTED_MODULE_2__curve_linear__["a" /* default */], - output = null; - - function line(data) { - var i, - n = data.length, - d, - defined0 = false, - buffer; - - if (context == null) output = curve(buffer = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_path__["a" /* path */])()); - - for (i = 0; i <= n; ++i) { - if (!(i < n && defined(d = data[i], i, data)) === defined0) { - if (defined0 = !defined0) output.lineStart(); - else output.lineEnd(); - } - if (defined0) output.point(+x(d, i, data), +y(d, i, data)); - } - - if (buffer) return output = null, buffer + "" || null; - } - - line.x = function(_) { - return arguments.length ? (x = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), line) : x; - }; - - line.y = function(_) { - return arguments.length ? (y = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), line) : y; - }; - - line.defined = function(_) { - return arguments.length ? (defined = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(!!_), line) : defined; - }; - - line.curve = function(_) { - return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve; - }; - - line.context = function(_) { - return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context; - }; - - return line; -}); - - -/***/ }), -/* 80 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = sum; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__none__ = __webpack_require__(31); - - -/* harmony default export */ __webpack_exports__["a"] = (function(series) { - var sums = series.map(sum); - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__none__["a" /* default */])(series).sort(function(a, b) { return sums[a] - sums[b]; }); -}); - -function sum(series) { - var s = 0, i = -1, n = series.length, v; - while (++i < n) if (v = +series[i][1]) s += v; - return s; -} - - -/***/ }), -/* 81 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = x; -/* harmony export (immutable) */ __webpack_exports__["b"] = y; -function x(p) { - return p[0]; -} - -function y(p) { - return p[1]; -} - - -/***/ }), -/* 82 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_defaultLocale__ = __webpack_require__(83); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_defaultLocale__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_0__src_defaultLocale__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_0__src_defaultLocale__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_0__src_defaultLocale__["d"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_0__src_defaultLocale__["e"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_locale__ = __webpack_require__(159); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_1__src_locale__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_isoFormat__ = __webpack_require__(158); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_2__src_isoFormat__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_isoParse__ = __webpack_require__(410); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_3__src_isoParse__["a"]; }); - - - - - - -/***/ }), -/* 83 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return timeFormat; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return timeParse; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return utcFormat; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return utcParse; }); -/* harmony export (immutable) */ __webpack_exports__["a"] = defaultLocale; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__locale__ = __webpack_require__(159); - - -var locale; -var timeFormat; -var timeParse; -var utcFormat; -var utcParse; - -defaultLocale({ - dateTime: "%x, %X", - date: "%-m/%-d/%Y", - time: "%-I:%M:%S %p", - periods: ["AM", "PM"], - days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], - shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], - shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] -}); - -function defaultLocale(definition) { - locale = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__locale__["a" /* default */])(definition); - timeFormat = locale.format; - timeParse = locale.parse; - utcFormat = locale.utcFormat; - utcParse = locale.utcParse; - return locale; -} - - -/***/ }), -/* 84 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["c"] = now; -/* harmony export (immutable) */ __webpack_exports__["b"] = Timer; -/* harmony export (immutable) */ __webpack_exports__["a"] = timer; -/* harmony export (immutable) */ __webpack_exports__["d"] = timerFlush; -var frame = 0, // is an animation frame pending? - timeout = 0, // is a timeout pending? - interval = 0, // are any timers active? - pokeDelay = 1000, // how frequently we check for clock skew - taskHead, - taskTail, - clockLast = 0, - clockNow = 0, - clockSkew = 0, - clock = typeof performance === "object" && performance.now ? performance : Date, - setFrame = typeof requestAnimationFrame === "function" ? requestAnimationFrame : function(f) { setTimeout(f, 17); }; - -function now() { - return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); -} - -function clearNow() { - clockNow = 0; -} - -function Timer() { - this._call = - this._time = - this._next = null; -} - -Timer.prototype = timer.prototype = { - constructor: Timer, - restart: function(callback, delay, time) { - if (typeof callback !== "function") throw new TypeError("callback is not a function"); - time = (time == null ? now() : +time) + (delay == null ? 0 : +delay); - if (!this._next && taskTail !== this) { - if (taskTail) taskTail._next = this; - else taskHead = this; - taskTail = this; - } - this._call = callback; - this._time = time; - sleep(); - }, - stop: function() { - if (this._call) { - this._call = null; - this._time = Infinity; - sleep(); - } - } -}; - -function timer(callback, delay, time) { - var t = new Timer; - t.restart(callback, delay, time); - return t; -} - -function timerFlush() { - now(); // Get the current time, if not already set. - ++frame; // Pretend we’ve set an alarm, if we haven’t already. - var t = taskHead, e; - while (t) { - if ((e = clockNow - t._time) >= 0) t._call.call(null, e); - t = t._next; - } - --frame; -} - -function wake() { - clockNow = (clockLast = clock.now()) + clockSkew; - frame = timeout = 0; - try { - timerFlush(); - } finally { - frame = 0; - nap(); - clockNow = 0; - } -} - -function poke() { - var now = clock.now(), delay = now - clockLast; - if (delay > pokeDelay) clockSkew -= delay, clockLast = now; -} - -function nap() { - var t0, t1 = taskHead, t2, time = Infinity; - while (t1) { - if (t1._call) { - if (time > t1._time) time = t1._time; - t0 = t1, t1 = t1._next; - } else { - t2 = t1._next, t1._next = null; - t1 = t0 ? t0._next = t2 : taskHead = t2; - } - } - taskTail = t0; - sleep(time); -} - -function sleep(time) { - if (frame) return; // Soonest alarm already set, or will be. - if (timeout) timeout = clearTimeout(timeout); - var delay = time - clockNow; - if (delay > 24) { - if (time < Infinity) timeout = setTimeout(wake, delay); - if (interval) interval = clearInterval(interval); - } else { - if (!interval) clockLast = clockNow, interval = setInterval(poke, pokeDelay); - frame = 1, setFrame(wake); - } -} - - -/***/ }), -/* 85 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["d"] = createEdge; -/* harmony export (immutable) */ __webpack_exports__["b"] = createBorderEdge; -/* harmony export (immutable) */ __webpack_exports__["c"] = setEdgeEnd; -/* harmony export (immutable) */ __webpack_exports__["a"] = clipEdges; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Diagram__ = __webpack_require__(32); - - -function createEdge(left, right, v0, v1) { - var edge = [null, null], - index = __WEBPACK_IMPORTED_MODULE_0__Diagram__["d" /* edges */].push(edge) - 1; - edge.left = left; - edge.right = right; - if (v0) setEdgeEnd(edge, left, right, v0); - if (v1) setEdgeEnd(edge, right, left, v1); - __WEBPACK_IMPORTED_MODULE_0__Diagram__["c" /* cells */][left.index].halfedges.push(index); - __WEBPACK_IMPORTED_MODULE_0__Diagram__["c" /* cells */][right.index].halfedges.push(index); - return edge; -} - -function createBorderEdge(left, v0, v1) { - var edge = [v0, v1]; - edge.left = left; - return edge; -} - -function setEdgeEnd(edge, left, right, vertex) { - if (!edge[0] && !edge[1]) { - edge[0] = vertex; - edge.left = left; - edge.right = right; - } else if (edge.left === right) { - edge[1] = vertex; - } else { - edge[0] = vertex; - } -} - -// Liang–Barsky line clipping. -function clipEdge(edge, x0, y0, x1, y1) { - var a = edge[0], - b = edge[1], - ax = a[0], - ay = a[1], - bx = b[0], - by = b[1], - t0 = 0, - t1 = 1, - dx = bx - ax, - dy = by - ay, - r; - - r = x0 - ax; - if (!dx && r > 0) return; - r /= dx; - if (dx < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dx > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = x1 - ax; - if (!dx && r < 0) return; - r /= dx; - if (dx < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dx > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - r = y0 - ay; - if (!dy && r > 0) return; - r /= dy; - if (dy < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dy > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = y1 - ay; - if (!dy && r < 0) return; - r /= dy; - if (dy < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dy > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check? - - if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy]; - if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy]; - return true; -} - -function connectEdge(edge, x0, y0, x1, y1) { - var v1 = edge[1]; - if (v1) return true; - - var v0 = edge[0], - left = edge.left, - right = edge.right, - lx = left[0], - ly = left[1], - rx = right[0], - ry = right[1], - fx = (lx + rx) / 2, - fy = (ly + ry) / 2, - fm, - fb; - - if (ry === ly) { - if (fx < x0 || fx >= x1) return; - if (lx > rx) { - if (!v0) v0 = [fx, y0]; - else if (v0[1] >= y1) return; - v1 = [fx, y1]; - } else { - if (!v0) v0 = [fx, y1]; - else if (v0[1] < y0) return; - v1 = [fx, y0]; - } - } else { - fm = (lx - rx) / (ry - ly); - fb = fy - fm * fx; - if (fm < -1 || fm > 1) { - if (lx > rx) { - if (!v0) v0 = [(y0 - fb) / fm, y0]; - else if (v0[1] >= y1) return; - v1 = [(y1 - fb) / fm, y1]; - } else { - if (!v0) v0 = [(y1 - fb) / fm, y1]; - else if (v0[1] < y0) return; - v1 = [(y0 - fb) / fm, y0]; - } - } else { - if (ly < ry) { - if (!v0) v0 = [x0, fm * x0 + fb]; - else if (v0[0] >= x1) return; - v1 = [x1, fm * x1 + fb]; - } else { - if (!v0) v0 = [x1, fm * x1 + fb]; - else if (v0[0] < x0) return; - v1 = [x0, fm * x0 + fb]; - } - } - } - - edge[0] = v0; - edge[1] = v1; - return true; -} - -function clipEdges(x0, y0, x1, y1) { - var i = __WEBPACK_IMPORTED_MODULE_0__Diagram__["d" /* edges */].length, - edge; - - while (i--) { - if (!connectEdge(edge = __WEBPACK_IMPORTED_MODULE_0__Diagram__["d" /* edges */][i], x0, y0, x1, y1) - || !clipEdge(edge, x0, y0, x1, y1) - || !(Math.abs(edge[0][0] - edge[1][0]) > __WEBPACK_IMPORTED_MODULE_0__Diagram__["b" /* epsilon */] - || Math.abs(edge[0][1] - edge[1][1]) > __WEBPACK_IMPORTED_MODULE_0__Diagram__["b" /* epsilon */])) { - delete __WEBPACK_IMPORTED_MODULE_0__Diagram__["d" /* edges */][i]; - } - } -} - - -/***/ }), -/* 86 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = RedBlackNode; -function RedBlackTree() { - this._ = null; // root node -} - -function RedBlackNode(node) { - node.U = // parent node - node.C = // color - true for red, false for black - node.L = // left node - node.R = // right node - node.P = // previous node - node.N = null; // next node -} - -RedBlackTree.prototype = { - constructor: RedBlackTree, - - insert: function(after, node) { - var parent, grandpa, uncle; - - if (after) { - node.P = after; - node.N = after.N; - if (after.N) after.N.P = node; - after.N = node; - if (after.R) { - after = after.R; - while (after.L) after = after.L; - after.L = node; - } else { - after.R = node; - } - parent = after; - } else if (this._) { - after = RedBlackFirst(this._); - node.P = null; - node.N = after; - after.P = after.L = node; - parent = after; - } else { - node.P = node.N = null; - this._ = node; - parent = null; - } - node.L = node.R = null; - node.U = parent; - node.C = true; - - after = node; - while (parent && parent.C) { - grandpa = parent.U; - if (parent === grandpa.L) { - uncle = grandpa.R; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.R) { - RedBlackRotateLeft(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - RedBlackRotateRight(this, grandpa); - } - } else { - uncle = grandpa.L; - if (uncle && uncle.C) { - parent.C = uncle.C = false; - grandpa.C = true; - after = grandpa; - } else { - if (after === parent.L) { - RedBlackRotateRight(this, parent); - after = parent; - parent = after.U; - } - parent.C = false; - grandpa.C = true; - RedBlackRotateLeft(this, grandpa); - } - } - parent = after.U; - } - this._.C = false; - }, - - remove: function(node) { - if (node.N) node.N.P = node.P; - if (node.P) node.P.N = node.N; - node.N = node.P = null; - - var parent = node.U, - sibling, - left = node.L, - right = node.R, - next, - red; - - if (!left) next = right; - else if (!right) next = left; - else next = RedBlackFirst(right); - - if (parent) { - if (parent.L === node) parent.L = next; - else parent.R = next; - } else { - this._ = next; - } - - if (left && right) { - red = next.C; - next.C = node.C; - next.L = left; - left.U = next; - if (next !== right) { - parent = next.U; - next.U = node.U; - node = next.R; - parent.L = node; - next.R = right; - right.U = next; - } else { - next.U = parent; - parent = next; - node = next.R; - } - } else { - red = node.C; - node = next; - } - - if (node) node.U = parent; - if (red) return; - if (node && node.C) { node.C = false; return; } - - do { - if (node === this._) break; - if (node === parent.L) { - sibling = parent.R; - if (sibling.C) { - sibling.C = false; - parent.C = true; - RedBlackRotateLeft(this, parent); - sibling = parent.R; - } - if ((sibling.L && sibling.L.C) - || (sibling.R && sibling.R.C)) { - if (!sibling.R || !sibling.R.C) { - sibling.L.C = false; - sibling.C = true; - RedBlackRotateRight(this, sibling); - sibling = parent.R; - } - sibling.C = parent.C; - parent.C = sibling.R.C = false; - RedBlackRotateLeft(this, parent); - node = this._; - break; - } - } else { - sibling = parent.L; - if (sibling.C) { - sibling.C = false; - parent.C = true; - RedBlackRotateRight(this, parent); - sibling = parent.L; - } - if ((sibling.L && sibling.L.C) - || (sibling.R && sibling.R.C)) { - if (!sibling.L || !sibling.L.C) { - sibling.R.C = false; - sibling.C = true; - RedBlackRotateLeft(this, sibling); - sibling = parent.L; - } - sibling.C = parent.C; - parent.C = sibling.L.C = false; - RedBlackRotateRight(this, parent); - node = this._; - break; - } - } - sibling.C = true; - node = parent; - parent = parent.U; - } while (!node.C); - - if (node) node.C = false; - } -}; - -function RedBlackRotateLeft(tree, node) { - var p = node, - q = node.R, - parent = p.U; - - if (parent) { - if (parent.L === p) parent.L = q; - else parent.R = q; - } else { - tree._ = q; - } - - q.U = parent; - p.U = q; - p.R = q.L; - if (p.R) p.R.U = p; - q.L = p; -} - -function RedBlackRotateRight(tree, node) { - var p = node, - q = node.L, - parent = p.U; - - if (parent) { - if (parent.L === p) parent.L = q; - else parent.R = q; - } else { - tree._ = q; - } - - q.U = parent; - p.U = q; - p.L = q.R; - if (p.L) p.L.U = p; - q.R = p; -} - -function RedBlackFirst(node) { - while (node.L) node = node.L; - return node; -} - -/* harmony default export */ __webpack_exports__["a"] = (RedBlackTree); - - -/***/ }), -/* 87 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return slice; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return map; }); -var array = Array.prototype; - -var slice = array.slice; -var map = array.map; - - -/***/ }), -/* 88 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return bisectRight; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return bisectLeft; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ascending__ = __webpack_require__(17); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__bisector__ = __webpack_require__(89); - - - -var ascendingBisect = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__bisector__["a" /* default */])(__WEBPACK_IMPORTED_MODULE_0__ascending__["a" /* default */]); -var bisectRight = ascendingBisect.right; -var bisectLeft = ascendingBisect.left; -/* harmony default export */ __webpack_exports__["a"] = (bisectRight); - - -/***/ }), -/* 89 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ascending__ = __webpack_require__(17); - - -/* harmony default export */ __webpack_exports__["a"] = (function(compare) { - if (compare.length === 1) compare = ascendingComparator(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; - } - return lo; - } - }; -}); - -function ascendingComparator(f) { - return function(d, x) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__ascending__["a" /* default */])(f(d), x); - }; -} - - -/***/ }), -/* 90 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__variance__ = __webpack_require__(98); - - -/* harmony default export */ __webpack_exports__["a"] = (function(array, f) { - var v = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__variance__["a" /* default */])(array, f); - return v ? Math.sqrt(v) : v; -}); - - -/***/ }), -/* 91 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(values, valueof) { - var n = values.length, - i = -1, - value, - min, - max; - - if (valueof == null) { - while (++i < n) { // Find the first comparable value. - if ((value = values[i]) != null && value >= value) { - min = max = value; - while (++i < n) { // Compare the remaining values. - if ((value = values[i]) != null) { - if (min > value) min = value; - if (max < value) max = value; - } - } - } - } - } - - else { - while (++i < n) { // Find the first comparable value. - if ((value = valueof(values[i], i, values)) != null && value >= value) { - min = max = value; - while (++i < n) { // Compare the remaining values. - if ((value = valueof(values[i], i, values)) != null) { - if (min > value) min = value; - if (max < value) max = value; - } - } - } - } - } - - return [min, max]; -}); - - -/***/ }), -/* 92 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(values, valueof) { - var n = values.length, - i = -1, - value, - min; - - if (valueof == null) { - while (++i < n) { // Find the first comparable value. - if ((value = values[i]) != null && value >= value) { - min = value; - while (++i < n) { // Compare the remaining values. - if ((value = values[i]) != null && min > value) { - min = value; - } - } - } - } - } - - else { - while (++i < n) { // Find the first comparable value. - if ((value = valueof(values[i], i, values)) != null && value >= value) { - min = value; - while (++i < n) { // Compare the remaining values. - if ((value = valueof(values[i], i, values)) != null && min > value) { - min = value; - } - } - } - } - } - - return min; -}); - - -/***/ }), -/* 93 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = pair; -/* harmony default export */ __webpack_exports__["a"] = (function(array, f) { - if (f == null) f = pair; - var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n); - while (i < n) pairs[i] = f(p, p = array[++i]); - return pairs; -}); - -function pair(a, b) { - return [a, b]; -} - - -/***/ }), -/* 94 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(start, stop, step) { - start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; - - var i = -1, - n = Math.max(0, Math.ceil((stop - start) / step)) | 0, - range = new Array(n); - - while (++i < n) { - range[i] = start + i * step; - } - - return range; -}); - - -/***/ }), -/* 95 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(values) { - return Math.ceil(Math.log(values.length) / Math.LN2) + 1; -}); - - -/***/ }), -/* 96 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = tickIncrement; -/* harmony export (immutable) */ __webpack_exports__["c"] = tickStep; -var e10 = Math.sqrt(50), - e5 = Math.sqrt(10), - e2 = Math.sqrt(2); - -/* harmony default export */ __webpack_exports__["a"] = (function(start, stop, count) { - var reverse = stop < start, - i = -1, - n, - ticks, - step; - - if (reverse) n = start, start = stop, stop = n; - - if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return []; - - if (step > 0) { - start = Math.ceil(start / step); - stop = Math.floor(stop / step); - ticks = new Array(n = Math.ceil(stop - start + 1)); - while (++i < n) ticks[i] = (start + i) * step; - } else { - start = Math.floor(start * step); - stop = Math.ceil(stop * step); - ticks = new Array(n = Math.ceil(start - stop + 1)); - while (++i < n) ticks[i] = (start - i) / step; - } - - if (reverse) ticks.reverse(); - - return ticks; -}); - -function tickIncrement(start, stop, count) { - var step = (stop - start) / Math.max(0, count), - power = Math.floor(Math.log(step) / Math.LN10), - error = step / Math.pow(10, power); - return power >= 0 - ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) - : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1); -} - -function tickStep(start, stop, count) { - var step0 = Math.abs(stop - start) / Math.max(0, count), - step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), - error = step0 / step1; - if (error >= e10) step1 *= 10; - else if (error >= e5) step1 *= 5; - else if (error >= e2) step1 *= 2; - return stop < start ? -step1 : step1; -} - - -/***/ }), -/* 97 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__min__ = __webpack_require__(92); - - -/* harmony default export */ __webpack_exports__["a"] = (function(matrix) { - if (!(n = matrix.length)) return []; - for (var i = -1, m = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__min__["a" /* default */])(matrix, length), transpose = new Array(m); ++i < m;) { - for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) { - row[j] = matrix[j][i]; - } - } - return transpose; -}); - -function length(d) { - return d.length; -} - - -/***/ }), -/* 98 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__number__ = __webpack_require__(20); - - -/* harmony default export */ __webpack_exports__["a"] = (function(values, valueof) { - var n = values.length, - m = 0, - i = -1, - mean = 0, - value, - delta, - sum = 0; - - if (valueof == null) { - while (++i < n) { - if (!isNaN(value = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__number__["a" /* default */])(values[i]))) { - delta = value - mean; - mean += delta / ++m; - sum += delta * (value - mean); - } - } - } - - else { - while (++i < n) { - if (!isNaN(value = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__number__["a" /* default */])(valueof(values[i], i, values)))) { - delta = value - mean; - mean += delta / ++m; - sum += delta * (value - mean); - } - } - } - - if (m > 1) return sum / (m - 1); -}); - - -/***/ }), -/* 99 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return cos; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return sin; }); -/* unused harmony export pi */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return halfPi; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return tau; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return max; }); -var cos = Math.cos; -var sin = Math.sin; -var pi = Math.PI; -var halfPi = pi / 2; -var tau = pi * 2; -var max = Math.max; - - -/***/ }), -/* 100 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return deg2rad; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return rad2deg; }); -var deg2rad = Math.PI / 180; -var rad2deg = 180 / Math.PI; - - -/***/ }), -/* 101 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = yesdrag; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__noevent__ = __webpack_require__(102); - - - -/* harmony default export */ __webpack_exports__["a"] = (function(view) { - var root = view.document.documentElement, - selection = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_selection__["b" /* select */])(view).on("dragstart.drag", __WEBPACK_IMPORTED_MODULE_1__noevent__["a" /* default */], true); - if ("onselectstart" in root) { - selection.on("selectstart.drag", __WEBPACK_IMPORTED_MODULE_1__noevent__["a" /* default */], true); - } else { - root.__noselect = root.style.MozUserSelect; - root.style.MozUserSelect = "none"; - } -}); - -function yesdrag(view, noclick) { - var root = view.document.documentElement, - selection = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_selection__["b" /* select */])(view).on("dragstart.drag", null); - if (noclick) { - selection.on("click.drag", __WEBPACK_IMPORTED_MODULE_1__noevent__["a" /* default */], true); - setTimeout(function() { selection.on("click.drag", null); }, 0); - } - if ("onselectstart" in root) { - selection.on("selectstart.drag", null); - } else { - root.style.MozUserSelect = root.__noselect; - delete root.__noselect; - } -} - - -/***/ }), -/* 102 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = nopropagation; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); - - -function nopropagation() { - __WEBPACK_IMPORTED_MODULE_0_d3_selection__["p" /* event */].stopImmediatePropagation(); -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - __WEBPACK_IMPORTED_MODULE_0_d3_selection__["p" /* event */].preventDefault(); - __WEBPACK_IMPORTED_MODULE_0_d3_selection__["p" /* event */].stopImmediatePropagation(); -}); - - -/***/ }), -/* 103 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_dsv__ = __webpack_require__(52); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "dsvFormat", function() { return __WEBPACK_IMPORTED_MODULE_0__src_dsv__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_csv__ = __webpack_require__(210); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "csvParse", function() { return __WEBPACK_IMPORTED_MODULE_1__src_csv__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "csvParseRows", function() { return __WEBPACK_IMPORTED_MODULE_1__src_csv__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "csvFormat", function() { return __WEBPACK_IMPORTED_MODULE_1__src_csv__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "csvFormatRows", function() { return __WEBPACK_IMPORTED_MODULE_1__src_csv__["d"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_tsv__ = __webpack_require__(211); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "tsvParse", function() { return __WEBPACK_IMPORTED_MODULE_2__src_tsv__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "tsvParseRows", function() { return __WEBPACK_IMPORTED_MODULE_2__src_tsv__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "tsvFormat", function() { return __WEBPACK_IMPORTED_MODULE_2__src_tsv__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "tsvFormatRows", function() { return __WEBPACK_IMPORTED_MODULE_2__src_tsv__["d"]; }); - - - - - -/***/ }), -/* 104 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_linear__ = __webpack_require__(218); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_0__src_linear__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_quad__ = __webpack_require__(220); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_1__src_quad__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_1__src_quad__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_1__src_quad__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_1__src_quad__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_cubic__ = __webpack_require__(215); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_2__src_cubic__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_2__src_cubic__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_2__src_cubic__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_2__src_cubic__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_poly__ = __webpack_require__(219); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_3__src_poly__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_3__src_poly__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_3__src_poly__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_3__src_poly__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_sin__ = __webpack_require__(221); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_4__src_sin__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_4__src_sin__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return __WEBPACK_IMPORTED_MODULE_4__src_sin__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return __WEBPACK_IMPORTED_MODULE_4__src_sin__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_exp__ = __webpack_require__(217); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return __WEBPACK_IMPORTED_MODULE_5__src_exp__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return __WEBPACK_IMPORTED_MODULE_5__src_exp__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return __WEBPACK_IMPORTED_MODULE_5__src_exp__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return __WEBPACK_IMPORTED_MODULE_5__src_exp__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_circle__ = __webpack_require__(214); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return __WEBPACK_IMPORTED_MODULE_6__src_circle__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return __WEBPACK_IMPORTED_MODULE_6__src_circle__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return __WEBPACK_IMPORTED_MODULE_6__src_circle__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return __WEBPACK_IMPORTED_MODULE_6__src_circle__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_bounce__ = __webpack_require__(213); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return __WEBPACK_IMPORTED_MODULE_7__src_bounce__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return __WEBPACK_IMPORTED_MODULE_7__src_bounce__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return __WEBPACK_IMPORTED_MODULE_7__src_bounce__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return __WEBPACK_IMPORTED_MODULE_7__src_bounce__["c"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__src_back__ = __webpack_require__(212); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return __WEBPACK_IMPORTED_MODULE_8__src_back__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "E", function() { return __WEBPACK_IMPORTED_MODULE_8__src_back__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return __WEBPACK_IMPORTED_MODULE_8__src_back__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "G", function() { return __WEBPACK_IMPORTED_MODULE_8__src_back__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_elastic__ = __webpack_require__(216); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "H", function() { return __WEBPACK_IMPORTED_MODULE_9__src_elastic__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return __WEBPACK_IMPORTED_MODULE_9__src_elastic__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "J", function() { return __WEBPACK_IMPORTED_MODULE_9__src_elastic__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "K", function() { return __WEBPACK_IMPORTED_MODULE_9__src_elastic__["c"]; }); - - - - - - - - - - - - - - - - - - - - - -/***/ }), -/* 105 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = x; -/* harmony export (immutable) */ __webpack_exports__["c"] = y; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_dispatch__ = __webpack_require__(12); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_collection__ = __webpack_require__(21); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_d3_timer__ = __webpack_require__(44); - - - - -function x(d) { - return d.x; -} - -function y(d) { - return d.y; -} - -var initialRadius = 10, - initialAngle = Math.PI * (3 - Math.sqrt(5)); - -/* harmony default export */ __webpack_exports__["a"] = (function(nodes) { - var simulation, - alpha = 1, - alphaMin = 0.001, - alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), - alphaTarget = 0, - velocityDecay = 0.6, - forces = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_collection__["map"])(), - stepper = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2_d3_timer__["a" /* timer */])(step), - event = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_dispatch__["dispatch"])("tick", "end"); - - if (nodes == null) nodes = []; - - function step() { - tick(); - event.call("tick", simulation); - if (alpha < alphaMin) { - stepper.stop(); - event.call("end", simulation); - } - } - - function tick() { - var i, n = nodes.length, node; - - alpha += (alphaTarget - alpha) * alphaDecay; - - forces.each(function(force) { - force(alpha); - }); - - for (i = 0; i < n; ++i) { - node = nodes[i]; - if (node.fx == null) node.x += node.vx *= velocityDecay; - else node.x = node.fx, node.vx = 0; - if (node.fy == null) node.y += node.vy *= velocityDecay; - else node.y = node.fy, node.vy = 0; - } - } - - function initializeNodes() { - for (var i = 0, n = nodes.length, node; i < n; ++i) { - node = nodes[i], node.index = i; - if (isNaN(node.x) || isNaN(node.y)) { - var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle; - node.x = radius * Math.cos(angle); - node.y = radius * Math.sin(angle); - } - if (isNaN(node.vx) || isNaN(node.vy)) { - node.vx = node.vy = 0; - } - } - } - - function initializeForce(force) { - if (force.initialize) force.initialize(nodes); - return force; - } - - initializeNodes(); - - return simulation = { - tick: tick, - - restart: function() { - return stepper.restart(step), simulation; - }, - - stop: function() { - return stepper.stop(), simulation; - }, - - nodes: function(_) { - return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes; - }, - - alpha: function(_) { - return arguments.length ? (alpha = +_, simulation) : alpha; - }, - - alphaMin: function(_) { - return arguments.length ? (alphaMin = +_, simulation) : alphaMin; - }, - - alphaDecay: function(_) { - return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay; - }, - - alphaTarget: function(_) { - return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget; - }, - - velocityDecay: function(_) { - return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay; - }, - - force: function(name, _) { - return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name); - }, - - find: function(x, y, radius) { - var i = 0, - n = nodes.length, - dx, - dy, - d2, - node, - closest; - - if (radius == null) radius = Infinity; - else radius *= radius; - - for (i = 0; i < n; ++i) { - node = nodes[i]; - dx = x - node.x; - dy = y - node.y; - d2 = dx * dx + dy * dy; - if (d2 < radius) closest = node, radius = d2; - } - - return closest; - }, - - on: function(name, _) { - return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name); - } - }; -}); - - -/***/ }), -/* 106 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return prefixExponent; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__formatDecimal__ = __webpack_require__(55); - - -var prefixExponent; - -/* harmony default export */ __webpack_exports__["a"] = (function(x, p) { - var d = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__formatDecimal__["a" /* default */])(x, p); - if (!d) return x + ""; - var coefficient = d[0], - exponent = d[1], - i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, - n = coefficient.length; - return i === n ? coefficient - : i > n ? coefficient + new Array(i - n + 1).join("0") - : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) - : "0." + new Array(1 - i).join("0") + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__formatDecimal__["a" /* default */])(x, Math.max(0, p + i - 1))[0]; // less than 1y! -}); - - -/***/ }), -/* 107 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = formatSpecifier; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__formatTypes__ = __webpack_require__(108); - - -// [[fill]align][sign][symbol][0][width][,][.precision][type] -var re = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i; - -function formatSpecifier(specifier) { - return new FormatSpecifier(specifier); -} - -formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof - -function FormatSpecifier(specifier) { - if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier); - - var match, - fill = match[1] || " ", - align = match[2] || ">", - sign = match[3] || "-", - symbol = match[4] || "", - zero = !!match[5], - width = match[6] && +match[6], - comma = !!match[7], - precision = match[8] && +match[8].slice(1), - type = match[9] || ""; - - // The "n" type is an alias for ",g". - if (type === "n") comma = true, type = "g"; - - // Map invalid types to the default format. - else if (!__WEBPACK_IMPORTED_MODULE_0__formatTypes__["a" /* default */][type]) type = ""; - - // If zero fill is specified, padding goes after sign and before digits. - if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "="; - - this.fill = fill; - this.align = align; - this.sign = sign; - this.symbol = symbol; - this.zero = zero; - this.width = width; - this.comma = comma; - this.precision = precision; - this.type = type; -} - -FormatSpecifier.prototype.toString = function() { - return this.fill - + this.align - + this.sign - + this.symbol - + (this.zero ? "0" : "") - + (this.width == null ? "" : Math.max(1, this.width | 0)) - + (this.comma ? "," : "") - + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0)) - + this.type; -}; - - -/***/ }), -/* 108 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__formatDefault__ = __webpack_require__(230); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__formatPrefixAuto__ = __webpack_require__(106); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__formatRounded__ = __webpack_require__(233); - - - - -/* harmony default export */ __webpack_exports__["a"] = ({ - "": __WEBPACK_IMPORTED_MODULE_0__formatDefault__["a" /* default */], - "%": function(x, p) { return (x * 100).toFixed(p); }, - "b": function(x) { return Math.round(x).toString(2); }, - "c": function(x) { return x + ""; }, - "d": function(x) { return Math.round(x).toString(10); }, - "e": function(x, p) { return x.toExponential(p); }, - "f": function(x, p) { return x.toFixed(p); }, - "g": function(x, p) { return x.toPrecision(p); }, - "o": function(x) { return Math.round(x).toString(8); }, - "p": function(x, p) { return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__formatRounded__["a" /* default */])(x * 100, p); }, - "r": __WEBPACK_IMPORTED_MODULE_2__formatRounded__["a" /* default */], - "s": __WEBPACK_IMPORTED_MODULE_1__formatPrefixAuto__["a" /* default */], - "X": function(x) { return Math.round(x).toString(16).toUpperCase(); }, - "x": function(x) { return Math.round(x).toString(16); } -}); - - -/***/ }), -/* 109 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__exponent__ = __webpack_require__(33); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__formatGroup__ = __webpack_require__(231); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__formatNumerals__ = __webpack_require__(232); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__formatSpecifier__ = __webpack_require__(107); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__formatTypes__ = __webpack_require__(108); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__formatPrefixAuto__ = __webpack_require__(106); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__identity__ = __webpack_require__(234); - - - - - - - - -var prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"]; - -/* harmony default export */ __webpack_exports__["a"] = (function(locale) { - var group = locale.grouping && locale.thousands ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__formatGroup__["a" /* default */])(locale.grouping, locale.thousands) : __WEBPACK_IMPORTED_MODULE_6__identity__["a" /* default */], - currency = locale.currency, - decimal = locale.decimal, - numerals = locale.numerals ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__formatNumerals__["a" /* default */])(locale.numerals) : __WEBPACK_IMPORTED_MODULE_6__identity__["a" /* default */], - percent = locale.percent || "%"; - - function newFormat(specifier) { - specifier = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__formatSpecifier__["a" /* default */])(specifier); - - var fill = specifier.fill, - align = specifier.align, - sign = specifier.sign, - symbol = specifier.symbol, - zero = specifier.zero, - width = specifier.width, - comma = specifier.comma, - precision = specifier.precision, - type = specifier.type; - - // Compute the prefix and suffix. - // For SI-prefix, the suffix is lazily computed. - var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", - suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? percent : ""; - - // What format function should we use? - // Is this an integer type? - // Can this type generate exponential notation? - var formatType = __WEBPACK_IMPORTED_MODULE_4__formatTypes__["a" /* default */][type], - maybeSuffix = !type || /[defgprs%]/.test(type); - - // Set the default precision if not specified, - // or clamp the specified precision to the supported range. - // For significant precision, it must be in [1, 21]. - // For fixed precision, it must be in [0, 20]. - precision = precision == null ? (type ? 6 : 12) - : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) - : Math.max(0, Math.min(20, precision)); - - function format(value) { - var valuePrefix = prefix, - valueSuffix = suffix, - i, n, c; - - if (type === "c") { - valueSuffix = formatType(value) + valueSuffix; - value = ""; - } else { - value = +value; - - // Perform the initial formatting. - var valueNegative = value < 0; - value = formatType(Math.abs(value), precision); - - // If a negative value rounds to zero during formatting, treat as positive. - if (valueNegative && +value === 0) valueNegative = false; - - // Compute the prefix and suffix. - valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix; - valueSuffix = valueSuffix + (type === "s" ? prefixes[8 + __WEBPACK_IMPORTED_MODULE_5__formatPrefixAuto__["b" /* prefixExponent */] / 3] : "") + (valueNegative && sign === "(" ? ")" : ""); - - // Break the formatted value into the integer “value” part that can be - // grouped, and fractional or exponential “suffix” part that is not. - if (maybeSuffix) { - i = -1, n = value.length; - while (++i < n) { - if (c = value.charCodeAt(i), 48 > c || c > 57) { - valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; - value = value.slice(0, i); - break; - } - } - } - } - - // If the fill character is not "0", grouping is applied before padding. - if (comma && !zero) value = group(value, Infinity); - - // Compute the padding. - var length = valuePrefix.length + value.length + valueSuffix.length, - padding = length < width ? new Array(width - length + 1).join(fill) : ""; - - // If the fill character is "0", grouping is applied after padding. - if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; - - // Reconstruct the final output based on the desired alignment. - switch (align) { - case "<": value = valuePrefix + value + valueSuffix + padding; break; - case "=": value = valuePrefix + padding + value + valueSuffix; break; - case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break; - default: value = padding + valuePrefix + value + valueSuffix; break; - } - - return numerals(value); - } - - format.toString = function() { - return specifier + ""; - }; - - return format; - } - - function formatPrefix(specifier, value) { - var f = newFormat((specifier = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__formatSpecifier__["a" /* default */])(specifier), specifier.type = "f", specifier)), - e = Math.max(-8, Math.min(8, Math.floor(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__exponent__["a" /* default */])(value) / 3))) * 3, - k = Math.pow(10, -e), - prefix = prefixes[8 + e / 3]; - return function(value) { - return f(k * value) + prefix; - }; - } - - return { - format: newFormat, - formatPrefix: formatPrefix - }; -}); - - -/***/ }), -/* 110 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return areaRingSum; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return areaStream; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__adder__ = __webpack_require__(18); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__noop__ = __webpack_require__(10); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__stream__ = __webpack_require__(13); - - - - - -var areaRingSum = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__adder__["a" /* default */])(); - -var areaSum = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__adder__["a" /* default */])(), - lambda00, - phi00, - lambda0, - cosPhi0, - sinPhi0; - -var areaStream = { - point: __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */], - lineStart: __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */], - lineEnd: __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */], - polygonStart: function() { - areaRingSum.reset(); - areaStream.lineStart = areaRingStart; - areaStream.lineEnd = areaRingEnd; - }, - polygonEnd: function() { - var areaRing = +areaRingSum; - areaSum.add(areaRing < 0 ? __WEBPACK_IMPORTED_MODULE_1__math__["b" /* tau */] + areaRing : areaRing); - this.lineStart = this.lineEnd = this.point = __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */]; - }, - sphere: function() { - areaSum.add(__WEBPACK_IMPORTED_MODULE_1__math__["b" /* tau */]); - } -}; - -function areaRingStart() { - areaStream.point = areaPointFirst; -} - -function areaRingEnd() { - areaPoint(lambda00, phi00); -} - -function areaPointFirst(lambda, phi) { - areaStream.point = areaPoint; - lambda00 = lambda, phi00 = phi; - lambda *= __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */], phi *= __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */]; - lambda0 = lambda, cosPhi0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["c" /* cos */])(phi = phi / 2 + __WEBPACK_IMPORTED_MODULE_1__math__["q" /* quarterPi */]), sinPhi0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(phi); -} - -function areaPoint(lambda, phi) { - lambda *= __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */], phi *= __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */]; - phi = phi / 2 + __WEBPACK_IMPORTED_MODULE_1__math__["q" /* quarterPi */]; // half the angular distance from south pole - - // Spherical excess E for a spherical triangle with vertices: south pole, - // previous point, current point. Uses a formula derived from Cagnoli’s - // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2). - var dLambda = lambda - lambda0, - sdLambda = dLambda >= 0 ? 1 : -1, - adLambda = sdLambda * dLambda, - cosPhi = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["c" /* cos */])(phi), - sinPhi = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(phi), - k = sinPhi0 * sinPhi, - u = cosPhi0 * cosPhi + k * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["c" /* cos */])(adLambda), - v = k * sdLambda * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(adLambda); - areaRingSum.add(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["e" /* atan2 */])(v, u)); - - // Advance the previous points. - lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(object) { - areaSum.reset(); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__stream__["a" /* default */])(object, areaStream); - return areaSum * 2; -}); - - -/***/ }), -/* 111 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = circleStream; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cartesian__ = __webpack_require__(23); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__constant__ = __webpack_require__(244); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__rotation__ = __webpack_require__(34); - - - - - -// Generates a circle centered at [0°, 0°], with a given radius and precision. -function circleStream(stream, radius, delta, direction, t0, t1) { - if (!delta) return; - var cosRadius = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["c" /* cos */])(radius), - sinRadius = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["d" /* sin */])(radius), - step = direction * delta; - if (t0 == null) { - t0 = radius + direction * __WEBPACK_IMPORTED_MODULE_2__math__["b" /* tau */]; - t1 = radius - step / 2; - } else { - t0 = circleRadius(cosRadius, t0); - t1 = circleRadius(cosRadius, t1); - if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * __WEBPACK_IMPORTED_MODULE_2__math__["b" /* tau */]; - } - for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) { - point = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["f" /* spherical */])([cosRadius, -sinRadius * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["c" /* cos */])(t), -sinRadius * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["d" /* sin */])(t)]); - stream.point(point[0], point[1]); - } -} - -// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0]. -function circleRadius(cosRadius, point) { - point = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["a" /* cartesian */])(point), point[0] -= cosRadius; - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["g" /* cartesianNormalizeInPlace */])(point); - var radius = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["r" /* acos */])(-point[1]); - return ((-point[2] < 0 ? -radius : radius) + __WEBPACK_IMPORTED_MODULE_2__math__["b" /* tau */] - __WEBPACK_IMPORTED_MODULE_2__math__["o" /* epsilon */]) % __WEBPACK_IMPORTED_MODULE_2__math__["b" /* tau */]; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var center = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])([0, 0]), - radius = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(90), - precision = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(6), - ring, - rotate, - stream = {point: point}; - - function point(x, y) { - ring.push(x = rotate(x, y)); - x[0] *= __WEBPACK_IMPORTED_MODULE_2__math__["h" /* degrees */], x[1] *= __WEBPACK_IMPORTED_MODULE_2__math__["h" /* degrees */]; - } - - function circle() { - var c = center.apply(this, arguments), - r = radius.apply(this, arguments) * __WEBPACK_IMPORTED_MODULE_2__math__["g" /* radians */], - p = precision.apply(this, arguments) * __WEBPACK_IMPORTED_MODULE_2__math__["g" /* radians */]; - ring = []; - rotate = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__rotation__["b" /* rotateRadians */])(-c[0] * __WEBPACK_IMPORTED_MODULE_2__math__["g" /* radians */], -c[1] * __WEBPACK_IMPORTED_MODULE_2__math__["g" /* radians */], 0).invert; - circleStream(stream, r, p, 1); - c = {type: "Polygon", coordinates: [ring]}; - ring = rotate = null; - return c; - } - - circle.center = function(_) { - return arguments.length ? (center = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])([+_[0], +_[1]]), circle) : center; - }; - - circle.radius = function(_) { - return arguments.length ? (radius = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), circle) : radius; - }; - - circle.precision = function(_) { - return arguments.length ? (precision = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), circle) : precision; - }; - - return circle; -}); - - -/***/ }), -/* 112 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__noop__ = __webpack_require__(10); - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var lines = [], - line; - return { - point: function(x, y) { - line.push([x, y]); - }, - lineStart: function() { - lines.push(line = []); - }, - lineEnd: __WEBPACK_IMPORTED_MODULE_0__noop__["a" /* default */], - rejoin: function() { - if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); - }, - result: function() { - var result = lines; - lines = []; - line = null; - return result; - } - }; -}); - - -/***/ }), -/* 113 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__buffer__ = __webpack_require__(112); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__polygon__ = __webpack_require__(114); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__polygonContains__ = __webpack_require__(120); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_d3_array__ = __webpack_require__(3); - - - - - - -/* harmony default export */ __webpack_exports__["a"] = (function(pointVisible, clipLine, interpolate, start) { - return function(rotate, sink) { - var line = clipLine(sink), - rotatedStart = rotate.invert(start[0], start[1]), - ringBuffer = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__buffer__["a" /* default */])(), - ringSink = clipLine(ringBuffer), - polygonStarted = false, - polygon, - segments, - ring; - - var clip = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - clip.point = pointRing; - clip.lineStart = ringStart; - clip.lineEnd = ringEnd; - segments = []; - polygon = []; - }, - polygonEnd: function() { - clip.point = point; - clip.lineStart = lineStart; - clip.lineEnd = lineEnd; - segments = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4_d3_array__["q" /* merge */])(segments); - var startInside = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__polygonContains__["a" /* default */])(polygon, rotatedStart); - if (segments.length) { - if (!polygonStarted) sink.polygonStart(), polygonStarted = true; - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__polygon__["a" /* default */])(segments, compareIntersection, startInside, interpolate, sink); - } else if (startInside) { - if (!polygonStarted) sink.polygonStart(), polygonStarted = true; - sink.lineStart(); - interpolate(null, null, 1, sink); - sink.lineEnd(); - } - if (polygonStarted) sink.polygonEnd(), polygonStarted = false; - segments = polygon = null; - }, - sphere: function() { - sink.polygonStart(); - sink.lineStart(); - interpolate(null, null, 1, sink); - sink.lineEnd(); - sink.polygonEnd(); - } - }; - - function point(lambda, phi) { - var point = rotate(lambda, phi); - if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi); - } - - function pointLine(lambda, phi) { - var point = rotate(lambda, phi); - line.point(point[0], point[1]); - } - - function lineStart() { - clip.point = pointLine; - line.lineStart(); - } - - function lineEnd() { - clip.point = point; - line.lineEnd(); - } - - function pointRing(lambda, phi) { - ring.push([lambda, phi]); - var point = rotate(lambda, phi); - ringSink.point(point[0], point[1]); - } - - function ringStart() { - ringSink.lineStart(); - ring = []; - } - - function ringEnd() { - pointRing(ring[0][0], ring[0][1]); - ringSink.lineEnd(); - - var clean = ringSink.clean(), - ringSegments = ringBuffer.result(), - i, n = ringSegments.length, m, - segment, - point; - - ring.pop(); - polygon.push(ring); - ring = null; - - if (!n) return; - - // No intersections. - if (clean & 1) { - segment = ringSegments[0]; - if ((m = segment.length - 1) > 0) { - if (!polygonStarted) sink.polygonStart(), polygonStarted = true; - sink.lineStart(); - for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]); - sink.lineEnd(); - } - return; - } - - // Rejoin connected segments. - // TODO reuse ringBuffer.rejoin()? - if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); - - segments.push(ringSegments.filter(validSegment)); - } - - return clip; - }; -}); - -function validSegment(segment) { - return segment.length > 1; -} - -// Intersections are sorted along the clip edge. For both antimeridian cutting -// and circle clipping, the same comparison is used. -function compareIntersection(a, b) { - return ((a = a.x)[0] < 0 ? a[1] - __WEBPACK_IMPORTED_MODULE_2__math__["k" /* halfPi */] - __WEBPACK_IMPORTED_MODULE_2__math__["o" /* epsilon */] : __WEBPACK_IMPORTED_MODULE_2__math__["k" /* halfPi */] - a[1]) - - ((b = b.x)[0] < 0 ? b[1] - __WEBPACK_IMPORTED_MODULE_2__math__["k" /* halfPi */] - __WEBPACK_IMPORTED_MODULE_2__math__["o" /* epsilon */] : __WEBPACK_IMPORTED_MODULE_2__math__["k" /* halfPi */] - b[1]); -} - - -/***/ }), -/* 114 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__pointEqual__ = __webpack_require__(119); - - -function Intersection(point, points, other, entry) { - this.x = point; - this.z = points; - this.o = other; // another intersection - this.e = entry; // is an entry? - this.v = false; // visited - this.n = this.p = null; // next & previous -} - -// A generalized polygon clipping algorithm: given a polygon that has been cut -// into its visible line segments, and rejoins the segments by interpolating -// along the clip edge. -/* harmony default export */ __webpack_exports__["a"] = (function(segments, compareIntersection, startInside, interpolate, stream) { - var subject = [], - clip = [], - i, - n; - - segments.forEach(function(segment) { - if ((n = segment.length - 1) <= 0) return; - var n, p0 = segment[0], p1 = segment[n], x; - - // If the first and last points of a segment are coincident, then treat as a - // closed ring. TODO if all rings are closed, then the winding order of the - // exterior ring should be checked. - if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__pointEqual__["a" /* default */])(p0, p1)) { - stream.lineStart(); - for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]); - stream.lineEnd(); - return; - } - - subject.push(x = new Intersection(p0, segment, null, true)); - clip.push(x.o = new Intersection(p0, null, x, false)); - subject.push(x = new Intersection(p1, segment, null, false)); - clip.push(x.o = new Intersection(p1, null, x, true)); - }); - - if (!subject.length) return; - - clip.sort(compareIntersection); - link(subject); - link(clip); - - for (i = 0, n = clip.length; i < n; ++i) { - clip[i].e = startInside = !startInside; - } - - var start = subject[0], - points, - point; - - while (1) { - // Find first unvisited intersection. - var current = start, - isSubject = true; - while (current.v) if ((current = current.n) === start) return; - points = current.z; - stream.lineStart(); - do { - current.v = current.o.v = true; - if (current.e) { - if (isSubject) { - for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.n.x, 1, stream); - } - current = current.n; - } else { - if (isSubject) { - points = current.p.z; - for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.p.x, -1, stream); - } - current = current.p; - } - current = current.o; - points = current.z; - isSubject = !isSubject; - } while (!current.v); - stream.lineEnd(); - } -}); - -function link(array) { - if (!(n = array.length)) return; - var n, - i = 0, - a = array[0], - b; - while (++i < n) { - a.n = b = array[i]; - b.p = a; - a = b; - } - a.n = b = array[0]; - b.p = a; -} - - -/***/ }), -/* 115 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(a, b) { - - function compose(x, y) { - return x = a(x, y), b(x[0], x[1]); - } - - if (a.invert && b.invert) compose.invert = function(x, y) { - return x = b.invert(x, y), x && a.invert(x[0], x[1]); - }; - - return compose; -}); - - -/***/ }), -/* 116 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__length__ = __webpack_require__(117); - - -var coordinates = [null, null], - object = {type: "LineString", coordinates: coordinates}; - -/* harmony default export */ __webpack_exports__["a"] = (function(a, b) { - coordinates[0] = a; - coordinates[1] = b; - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__length__["a" /* default */])(object); -}); - - -/***/ }), -/* 117 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__adder__ = __webpack_require__(18); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__noop__ = __webpack_require__(10); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__stream__ = __webpack_require__(13); - - - - - -var lengthSum = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__adder__["a" /* default */])(), - lambda0, - sinPhi0, - cosPhi0; - -var lengthStream = { - sphere: __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */], - point: __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */], - lineStart: lengthLineStart, - lineEnd: __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */], - polygonStart: __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */], - polygonEnd: __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */] -}; - -function lengthLineStart() { - lengthStream.point = lengthPointFirst; - lengthStream.lineEnd = lengthLineEnd; -} - -function lengthLineEnd() { - lengthStream.point = lengthStream.lineEnd = __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */]; -} - -function lengthPointFirst(lambda, phi) { - lambda *= __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */], phi *= __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */]; - lambda0 = lambda, sinPhi0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(phi), cosPhi0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["c" /* cos */])(phi); - lengthStream.point = lengthPoint; -} - -function lengthPoint(lambda, phi) { - lambda *= __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */], phi *= __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */]; - var sinPhi = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(phi), - cosPhi = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["c" /* cos */])(phi), - delta = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["p" /* abs */])(lambda - lambda0), - cosDelta = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["c" /* cos */])(delta), - sinDelta = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(delta), - x = cosPhi * sinDelta, - y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta, - z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta; - lengthSum.add(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["e" /* atan2 */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["n" /* sqrt */])(x * x + y * y), z)); - lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(object) { - lengthSum.reset(); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__stream__["a" /* default */])(object, lengthStream); - return +lengthSum; -}); - - -/***/ }), -/* 118 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__noop__ = __webpack_require__(10); - - -var x0 = Infinity, - y0 = x0, - x1 = -x0, - y1 = x1; - -var boundsStream = { - point: boundsPoint, - lineStart: __WEBPACK_IMPORTED_MODULE_0__noop__["a" /* default */], - lineEnd: __WEBPACK_IMPORTED_MODULE_0__noop__["a" /* default */], - polygonStart: __WEBPACK_IMPORTED_MODULE_0__noop__["a" /* default */], - polygonEnd: __WEBPACK_IMPORTED_MODULE_0__noop__["a" /* default */], - result: function() { - var bounds = [[x0, y0], [x1, y1]]; - x1 = y1 = -(y0 = x0 = Infinity); - return bounds; - } -}; - -function boundsPoint(x, y) { - if (x < x0) x0 = x; - if (x > x1) x1 = x; - if (y < y0) y0 = y; - if (y > y1) y1 = y; -} - -/* harmony default export */ __webpack_exports__["a"] = (boundsStream); - - -/***/ }), -/* 119 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); - - -/* harmony default export */ __webpack_exports__["a"] = (function(a, b) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["p" /* abs */])(a[0] - b[0]) < __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */] && __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["p" /* abs */])(a[1] - b[1]) < __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */]; -}); - - -/***/ }), -/* 120 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__adder__ = __webpack_require__(18); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__cartesian__ = __webpack_require__(23); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__math__ = __webpack_require__(0); - - - - -var sum = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__adder__["a" /* default */])(); - -/* harmony default export */ __webpack_exports__["a"] = (function(polygon, point) { - var lambda = point[0], - phi = point[1], - normal = [__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["d" /* sin */])(lambda), -__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["c" /* cos */])(lambda), 0], - angle = 0, - winding = 0; - - sum.reset(); - - for (var i = 0, n = polygon.length; i < n; ++i) { - if (!(m = (ring = polygon[i]).length)) continue; - var ring, - m, - point0 = ring[m - 1], - lambda0 = point0[0], - phi0 = point0[1] / 2 + __WEBPACK_IMPORTED_MODULE_2__math__["q" /* quarterPi */], - sinPhi0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["d" /* sin */])(phi0), - cosPhi0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["c" /* cos */])(phi0); - - for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) { - var point1 = ring[j], - lambda1 = point1[0], - phi1 = point1[1] / 2 + __WEBPACK_IMPORTED_MODULE_2__math__["q" /* quarterPi */], - sinPhi1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["d" /* sin */])(phi1), - cosPhi1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["c" /* cos */])(phi1), - delta = lambda1 - lambda0, - sign = delta >= 0 ? 1 : -1, - absDelta = sign * delta, - antimeridian = absDelta > __WEBPACK_IMPORTED_MODULE_2__math__["a" /* pi */], - k = sinPhi0 * sinPhi1; - - sum.add(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["e" /* atan2 */])(k * sign * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["d" /* sin */])(absDelta), cosPhi0 * cosPhi1 + k * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["c" /* cos */])(absDelta))); - angle += antimeridian ? delta + sign * __WEBPACK_IMPORTED_MODULE_2__math__["b" /* tau */] : delta; - - // Are the longitudes either side of the point’s meridian (lambda), - // and are the latitudes smaller than the parallel (phi)? - if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) { - var arc = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__cartesian__["b" /* cartesianCross */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__cartesian__["a" /* cartesian */])(point0), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__cartesian__["a" /* cartesian */])(point1)); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__cartesian__["g" /* cartesianNormalizeInPlace */])(arc); - var intersection = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__cartesian__["b" /* cartesianCross */])(normal, arc); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__cartesian__["g" /* cartesianNormalizeInPlace */])(intersection); - var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["f" /* asin */])(intersection[2]); - if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) { - winding += antimeridian ^ delta >= 0 ? 1 : -1; - } - } - } - } - - // First, determine whether the South pole is inside or outside: - // - // It is inside if: - // * the polygon winds around it in a clockwise direction. - // * the polygon does not (cumulatively) wind around it, but has a negative - // (counter-clockwise) area. - // - // Second, count the (signed) number of times a segment crosses a lambda - // from the point to the South pole. If it is zero, then the point is the - // same side as the South pole. - - return (angle < -__WEBPACK_IMPORTED_MODULE_2__math__["o" /* epsilon */] || angle < __WEBPACK_IMPORTED_MODULE_2__math__["o" /* epsilon */] && sum < -__WEBPACK_IMPORTED_MODULE_2__math__["o" /* epsilon */]) ^ (winding & 1); -}); - - -/***/ }), -/* 121 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__conicEqualArea__ = __webpack_require__(59); - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__conicEqualArea__["a" /* default */])() - .parallels([29.5, 45.5]) - .scale(1070) - .translate([480, 250]) - .rotate([96, 0]) - .center([-0.6, 38.7]); -}); - - -/***/ }), -/* 122 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = equirectangularRaw; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__index__ = __webpack_require__(8); - - -function equirectangularRaw(lambda, phi) { - return [lambda, phi]; -} - -equirectangularRaw.invert = equirectangularRaw; - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__index__["a" /* default */])(equirectangularRaw) - .scale(152.63); -}); - - -/***/ }), -/* 123 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = constantZero; -function constantZero() { - return 0; -} - -/* harmony default export */ __webpack_exports__["b"] = (function(x) { - return function() { - return x; - }; -}); - - -/***/ }), -/* 124 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__shuffle__ = __webpack_require__(280); - - -/* harmony default export */ __webpack_exports__["a"] = (function(circles) { - return encloseN(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__shuffle__["a" /* default */])(circles), []); -}); - -function encloses(a, b) { - var dx = b.x - a.x, - dy = b.y - a.y, - dr = a.r - b.r; - return dr * dr + 1e-6 > dx * dx + dy * dy; -} - -// Returns the smallest circle that contains circles L and intersects circles B. -function encloseN(L, B) { - var circle, - l0 = null, - l1 = L.head, - l2, - p1; - - switch (B.length) { - case 1: circle = enclose1(B[0]); break; - case 2: circle = enclose2(B[0], B[1]); break; - case 3: circle = enclose3(B[0], B[1], B[2]); break; - } - - while (l1) { - p1 = l1._, l2 = l1.next; - if (!circle || !encloses(circle, p1)) { - - // Temporarily truncate L before l1. - if (l0) L.tail = l0, l0.next = null; - else L.head = L.tail = null; - - B.push(p1); - circle = encloseN(L, B); // Note: reorders L! - B.pop(); - - // Move l1 to the front of L and reconnect the truncated list L. - if (L.head) l1.next = L.head, L.head = l1; - else l1.next = null, L.head = L.tail = l1; - l0 = L.tail, l0.next = l2; - - } else { - l0 = l1; - } - l1 = l2; - } - - L.tail = l0; - return circle; -} - -function enclose1(a) { - return { - x: a.x, - y: a.y, - r: a.r - }; -} - -function enclose2(a, b) { - var x1 = a.x, y1 = a.y, r1 = a.r, - x2 = b.x, y2 = b.y, r2 = b.r, - x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1, - l = Math.sqrt(x21 * x21 + y21 * y21); - return { - x: (x1 + x2 + x21 / l * r21) / 2, - y: (y1 + y2 + y21 / l * r21) / 2, - r: (l + r1 + r2) / 2 - }; -} - -function enclose3(a, b, c) { - var x1 = a.x, y1 = a.y, r1 = a.r, - x2 = b.x, y2 = b.y, r2 = b.r, - x3 = c.x, y3 = c.y, r3 = c.r, - a2 = 2 * (x1 - x2), - b2 = 2 * (y1 - y2), - c2 = 2 * (r2 - r1), - d2 = x1 * x1 + y1 * y1 - r1 * r1 - x2 * x2 - y2 * y2 + r2 * r2, - a3 = 2 * (x1 - x3), - b3 = 2 * (y1 - y3), - c3 = 2 * (r3 - r1), - d3 = x1 * x1 + y1 * y1 - r1 * r1 - x3 * x3 - y3 * y3 + r3 * r3, - ab = a3 * b2 - a2 * b3, - xa = (b2 * d3 - b3 * d2) / ab - x1, - xb = (b3 * c2 - b2 * c3) / ab, - ya = (a3 * d2 - a2 * d3) / ab - y1, - yb = (a2 * c3 - a3 * c2) / ab, - A = xb * xb + yb * yb - 1, - B = 2 * (xa * xb + ya * yb + r1), - C = xa * xa + ya * ya - r1 * r1, - r = (-B - Math.sqrt(B * B - 4 * A * C)) / (2 * A); - return { - x: xa + xb * r + x1, - y: ya + yb * r + y1, - r: r - }; -} - - -/***/ }), -/* 125 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = packEnclose; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__enclose__ = __webpack_require__(124); - - -function place(a, b, c) { - var ax = a.x, - ay = a.y, - da = b.r + c.r, - db = a.r + c.r, - dx = b.x - ax, - dy = b.y - ay, - dc = dx * dx + dy * dy; - if (dc) { - var x = 0.5 + ((db *= db) - (da *= da)) / (2 * dc), - y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc); - c.x = ax + x * dx + y * dy; - c.y = ay + x * dy - y * dx; - } else { - c.x = ax + db; - c.y = ay; - } -} - -function intersects(a, b) { - var dx = b.x - a.x, - dy = b.y - a.y, - dr = a.r + b.r; - return dr * dr - 1e-6 > dx * dx + dy * dy; -} - -function distance2(node, x, y) { - var a = node._, - b = node.next._, - ab = a.r + b.r, - dx = (a.x * b.r + b.x * a.r) / ab - x, - dy = (a.y * b.r + b.y * a.r) / ab - y; - return dx * dx + dy * dy; -} - -function Node(circle) { - this._ = circle; - this.next = null; - this.previous = null; -} - -function packEnclose(circles) { - if (!(n = circles.length)) return 0; - - var a, b, c, n; - - // Place the first circle. - a = circles[0], a.x = 0, a.y = 0; - if (!(n > 1)) return a.r; - - // Place the second circle. - b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0; - if (!(n > 2)) return a.r + b.r; - - // Place the third circle. - place(b, a, c = circles[2]); - - // Initialize the weighted centroid. - var aa = a.r * a.r, - ba = b.r * b.r, - ca = c.r * c.r, - oa = aa + ba + ca, - ox = aa * a.x + ba * b.x + ca * c.x, - oy = aa * a.y + ba * b.y + ca * c.y, - cx, cy, i, j, k, sj, sk; - - // Initialize the front-chain using the first three circles a, b and c. - a = new Node(a), b = new Node(b), c = new Node(c); - a.next = c.previous = b; - b.next = a.previous = c; - c.next = b.previous = a; - - // Attempt to place each remaining circle… - pack: for (i = 3; i < n; ++i) { - place(a._, b._, c = circles[i]), c = new Node(c); - - // Find the closest intersecting circle on the front-chain, if any. - // “Closeness” is determined by linear distance along the front-chain. - // “Ahead” or “behind” is likewise determined by linear distance. - j = b.next, k = a.previous, sj = b._.r, sk = a._.r; - do { - if (sj <= sk) { - if (intersects(j._, c._)) { - b = j, a.next = b, b.previous = a, --i; - continue pack; - } - sj += j._.r, j = j.next; - } else { - if (intersects(k._, c._)) { - a = k, a.next = b, b.previous = a, --i; - continue pack; - } - sk += k._.r, k = k.previous; - } - } while (j !== k.next); - - // Success! Insert the new circle c between a and b. - c.previous = a, c.next = b, a.next = b.previous = b = c; - - // Update the weighted centroid. - oa += ca = c._.r * c._.r; - ox += ca * c._.x; - oy += ca * c._.y; - - // Compute the new closest circle pair to the centroid. - aa = distance2(a, cx = ox / oa, cy = oy / oa); - while ((c = c.next) !== b) { - if ((ca = distance2(c, cx, cy)) < aa) { - a = c, aa = ca; - } - } - b = a.next; - } - - // Compute the enclosing circle of the front chain. - a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__enclose__["a" /* default */])(a); - - // Translate the circles to put the enclosing circle around the origin. - for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y; - - return c.r; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(circles) { - packEnclose(circles); - return circles; -}); - - -/***/ }), -/* 126 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(node) { - node.x0 = Math.round(node.x0); - node.y0 = Math.round(node.y0); - node.x1 = Math.round(node.x1); - node.y1 = Math.round(node.y1); -}); - - -/***/ }), -/* 127 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__value__ = __webpack_require__(66); - - -/* harmony default export */ __webpack_exports__["a"] = (function(a, b) { - var nb = b ? b.length : 0, - na = a ? Math.min(nb, a.length) : 0, - x = new Array(nb), - c = new Array(nb), - i; - - for (i = 0; i < na; ++i) x[i] = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__value__["a" /* default */])(a[i], b[i]); - for (; i < nb; ++i) c[i] = b[i]; - - return function(t) { - for (i = 0; i < na; ++i) c[i] = x[i](t); - return c; - }; -}); - - -/***/ }), -/* 128 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__basis__ = __webpack_require__(65); - - -/* harmony default export */ __webpack_exports__["a"] = (function(values) { - var n = values.length; - return function(t) { - var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n), - v0 = values[(i + n - 1) % n], - v1 = values[i % n], - v2 = values[(i + 1) % n], - v3 = values[(i + 2) % n]; - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__basis__["b" /* basis */])((t - i / n) * n, v0, v1, v2, v3); - }; -}); - - -/***/ }), -/* 129 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return function() { - return x; - }; -}); - - -/***/ }), -/* 130 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(a, b) { - var d = new Date; - return a = +a, b -= a, function(t) { - return d.setTime(a + b * t), d; - }; -}); - - -/***/ }), -/* 131 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__value__ = __webpack_require__(66); - - -/* harmony default export */ __webpack_exports__["a"] = (function(a, b) { - var i = {}, - c = {}, - k; - - if (a === null || typeof a !== "object") a = {}; - if (b === null || typeof b !== "object") b = {}; - - for (k in b) { - if (k in a) { - i[k] = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__value__["a" /* default */])(a[k], b[k]); - } else { - c[k] = b[k]; - } - } - - return function(t) { - for (k in i) c[k] = i[k](t); - return c; - }; -}); - - -/***/ }), -/* 132 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return rgbBasis; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return rgbBasisClosed; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_color__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__basis__ = __webpack_require__(65); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__basisClosed__ = __webpack_require__(128); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__color__ = __webpack_require__(26); - - - - - -/* harmony default export */ __webpack_exports__["a"] = ((function rgbGamma(y) { - var color = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__color__["c" /* gamma */])(y); - - function rgb(start, end) { - var r = color((start = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["f" /* rgb */])(start)).r, (end = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["f" /* rgb */])(end)).r), - g = color(start.g, end.g), - b = color(start.b, end.b), - opacity = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__color__["a" /* default */])(start.opacity, end.opacity); - return function(t) { - start.r = r(t); - start.g = g(t); - start.b = b(t); - start.opacity = opacity(t); - return start + ""; - }; - } - - rgb.gamma = rgbGamma; - - return rgb; -})(1)); - -function rgbSpline(spline) { - return function(colors) { - var n = colors.length, - r = new Array(n), - g = new Array(n), - b = new Array(n), - i, color; - for (i = 0; i < n; ++i) { - color = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["f" /* rgb */])(colors[i]); - r[i] = color.r || 0; - g[i] = color.g || 0; - b[i] = color.b || 0; - } - r = spline(r); - g = spline(g); - b = spline(b); - color.opacity = 1; - return function(t) { - color.r = r(t); - color.g = g(t); - color.b = b(t); - return color + ""; - }; - }; -} - -var rgbBasis = rgbSpline(__WEBPACK_IMPORTED_MODULE_1__basis__["a" /* default */]); -var rgbBasisClosed = rgbSpline(__WEBPACK_IMPORTED_MODULE_2__basisClosed__["a" /* default */]); - - -/***/ }), -/* 133 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__number__ = __webpack_require__(37); - - -var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, - reB = new RegExp(reA.source, "g"); - -function zero(b) { - return function() { - return b; - }; -} - -function one(b) { - return function(t) { - return b(t) + ""; - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(a, b) { - var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b - am, // current match in a - bm, // current match in b - bs, // string preceding current number in b, if any - i = -1, // index in s - s = [], // string constants and placeholders - q = []; // number interpolators - - // Coerce inputs to strings. - a = a + "", b = b + ""; - - // Interpolate pairs of numbers in a & b. - while ((am = reA.exec(a)) - && (bm = reB.exec(b))) { - if ((bs = bm.index) > bi) { // a string precedes the next number in b - bs = b.slice(bi, bs); - if (s[i]) s[i] += bs; // coalesce with previous string - else s[++i] = bs; - } - if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match - if (s[i]) s[i] += bm; // coalesce with previous string - else s[++i] = bm; - } else { // interpolate non-matching numbers - s[++i] = null; - q.push({i: i, x: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__number__["a" /* default */])(am, bm)}); - } - bi = reB.lastIndex; - } - - // Add remains of b. - if (bi < b.length) { - bs = b.slice(bi); - if (s[i]) s[i] += bs; // coalesce with previous string - else s[++i] = bs; - } - - // Special optimization for only a single match. - // Otherwise, interpolate each of the numbers and rejoin the string. - return s.length < 2 ? (q[0] - ? one(q[0].x) - : zero(b)) - : (b = q.length, function(t) { - for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }); -}); - - -/***/ }), -/* 134 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__defaultSource__ = __webpack_require__(19); - - -/* harmony default export */ __webpack_exports__["a"] = ((function sourceRandomIrwinHall(source) { - function randomIrwinHall(n) { - return function() { - for (var sum = 0, i = 0; i < n; ++i) sum += source(); - return sum; - }; - } - - randomIrwinHall.source = sourceRandomIrwinHall; - - return randomIrwinHall; -})(__WEBPACK_IMPORTED_MODULE_0__defaultSource__["a" /* default */])); - - -/***/ }), -/* 135 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__defaultSource__ = __webpack_require__(19); - - -/* harmony default export */ __webpack_exports__["a"] = ((function sourceRandomNormal(source) { - function randomNormal(mu, sigma) { - var x, r; - mu = mu == null ? 0 : +mu; - sigma = sigma == null ? 1 : +sigma; - return function() { - var y; - - // If available, use the second previously-generated uniform random. - if (x != null) y = x, x = null; - - // Otherwise, generate a new x and y. - else do { - x = source() * 2 - 1; - y = source() * 2 - 1; - r = x * x + y * y; - } while (!r || r > 1); - - return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r); - }; - } - - randomNormal.source = sourceRandomNormal; - - return randomNormal; -})(__WEBPACK_IMPORTED_MODULE_0__defaultSource__["a" /* default */])); - - -/***/ }), -/* 136 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(domain, interval) { - domain = domain.slice(); - - var i0 = 0, - i1 = domain.length - 1, - x0 = domain[i0], - x1 = domain[i1], - t; - - if (x1 < x0) { - t = i0, i0 = i1, i1 = t; - t = x0, x0 = x1, x1 = t; - } - - domain[i0] = interval.floor(x0); - domain[i1] = interval.ceil(x1); - return domain; -}); - - -/***/ }), -/* 137 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return +x; -}); - - -/***/ }), -/* 138 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return implicit; }); -/* harmony export (immutable) */ __webpack_exports__["a"] = ordinal; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_collection__ = __webpack_require__(21); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__array__ = __webpack_require__(15); - - - -var implicit = {name: "implicit"}; - -function ordinal(range) { - var index = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_collection__["map"])(), - domain = [], - unknown = implicit; - - range = range == null ? [] : __WEBPACK_IMPORTED_MODULE_1__array__["b" /* slice */].call(range); - - function scale(d) { - var key = d + "", i = index.get(key); - if (!i) { - if (unknown !== implicit) return unknown; - index.set(key, i = domain.push(d)); - } - return range[(i - 1) % range.length]; - } - - scale.domain = function(_) { - if (!arguments.length) return domain.slice(); - domain = [], index = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_collection__["map"])(); - var i = -1, n = _.length, d, key; - while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d)); - return scale; - }; - - scale.range = function(_) { - return arguments.length ? (range = __WEBPACK_IMPORTED_MODULE_1__array__["b" /* slice */].call(_), scale) : range.slice(); - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - scale.copy = function() { - return ordinal() - .domain(domain) - .range(range) - .unknown(unknown); - }; - - return scale; -} - - -/***/ }), -/* 139 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = calendar; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_array__ = __webpack_require__(3); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__ = __webpack_require__(4); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_d3_time__ = __webpack_require__(43); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_d3_time_format__ = __webpack_require__(82); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__array__ = __webpack_require__(15); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__continuous__ = __webpack_require__(38); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__nice__ = __webpack_require__(136); - - - - - - - - -var durationSecond = 1000, - durationMinute = durationSecond * 60, - durationHour = durationMinute * 60, - durationDay = durationHour * 24, - durationWeek = durationDay * 7, - durationMonth = durationDay * 30, - durationYear = durationDay * 365; - -function date(t) { - return new Date(t); -} - -function number(t) { - return t instanceof Date ? +t : +new Date(+t); -} - -function calendar(year, month, week, day, hour, minute, second, millisecond, format) { - var scale = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__continuous__["a" /* default */])(__WEBPACK_IMPORTED_MODULE_5__continuous__["b" /* deinterpolateLinear */], __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__["b" /* interpolateNumber */]), - invert = scale.invert, - domain = scale.domain; - - var formatMillisecond = format(".%L"), - formatSecond = format(":%S"), - formatMinute = format("%I:%M"), - formatHour = format("%I %p"), - formatDay = format("%a %d"), - formatWeek = format("%b %d"), - formatMonth = format("%B"), - formatYear = format("%Y"); - - var tickIntervals = [ - [second, 1, durationSecond], - [second, 5, 5 * durationSecond], - [second, 15, 15 * durationSecond], - [second, 30, 30 * durationSecond], - [minute, 1, durationMinute], - [minute, 5, 5 * durationMinute], - [minute, 15, 15 * durationMinute], - [minute, 30, 30 * durationMinute], - [ hour, 1, durationHour ], - [ hour, 3, 3 * durationHour ], - [ hour, 6, 6 * durationHour ], - [ hour, 12, 12 * durationHour ], - [ day, 1, durationDay ], - [ day, 2, 2 * durationDay ], - [ week, 1, durationWeek ], - [ month, 1, durationMonth ], - [ month, 3, 3 * durationMonth ], - [ year, 1, durationYear ] - ]; - - function tickFormat(date) { - return (second(date) < date ? formatMillisecond - : minute(date) < date ? formatSecond - : hour(date) < date ? formatMinute - : day(date) < date ? formatHour - : month(date) < date ? (week(date) < date ? formatDay : formatWeek) - : year(date) < date ? formatMonth - : formatYear)(date); - } - - function tickInterval(interval, start, stop, step) { - if (interval == null) interval = 10; - - // If a desired tick count is specified, pick a reasonable tick interval - // based on the extent of the domain and a rough estimate of tick size. - // Otherwise, assume interval is already a time interval and use it. - if (typeof interval === "number") { - var target = Math.abs(stop - start) / interval, - i = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["e" /* bisector */])(function(i) { return i[2]; }).right(tickIntervals, target); - if (i === tickIntervals.length) { - step = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["B" /* tickStep */])(start / durationYear, stop / durationYear, interval); - interval = year; - } else if (i) { - i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i]; - step = i[1]; - interval = i[0]; - } else { - step = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["B" /* tickStep */])(start, stop, interval); - interval = millisecond; - } - } - - return step == null ? interval : interval.every(step); - } - - scale.invert = function(y) { - return new Date(invert(y)); - }; - - scale.domain = function(_) { - return arguments.length ? domain(__WEBPACK_IMPORTED_MODULE_4__array__["a" /* map */].call(_, number)) : domain().map(date); - }; - - scale.ticks = function(interval, step) { - var d = domain(), - t0 = d[0], - t1 = d[d.length - 1], - r = t1 < t0, - t; - if (r) t = t0, t0 = t1, t1 = t; - t = tickInterval(interval, t0, t1, step); - t = t ? t.range(t0, t1 + 1) : []; // inclusive stop - return r ? t.reverse() : t; - }; - - scale.tickFormat = function(count, specifier) { - return specifier == null ? tickFormat : format(specifier); - }; - - scale.nice = function(interval, step) { - var d = domain(); - return (interval = tickInterval(interval, d[0], d[d.length - 1], step)) - ? domain(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_6__nice__["a" /* default */])(d, interval)) - : scale; - }; - - scale.copy = function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__continuous__["c" /* copy */])(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format)); - }; - - return scale; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return calendar(__WEBPACK_IMPORTED_MODULE_2_d3_time__["H" /* timeYear */], __WEBPACK_IMPORTED_MODULE_2_d3_time__["F" /* timeMonth */], __WEBPACK_IMPORTED_MODULE_2_d3_time__["p" /* timeWeek */], __WEBPACK_IMPORTED_MODULE_2_d3_time__["n" /* timeDay */], __WEBPACK_IMPORTED_MODULE_2_d3_time__["l" /* timeHour */], __WEBPACK_IMPORTED_MODULE_2_d3_time__["j" /* timeMinute */], __WEBPACK_IMPORTED_MODULE_2_d3_time__["f" /* timeSecond */], __WEBPACK_IMPORTED_MODULE_2_d3_time__["b" /* timeMillisecond */], __WEBPACK_IMPORTED_MODULE_3_d3_time_format__["b" /* timeFormat */]).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]); -}); - - -/***/ }), -/* 140 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -var matcher = function(selector) { - return function() { - return this.matches(selector); - }; -}; - -if (typeof document !== "undefined") { - var element = document.documentElement; - if (!element.matches) { - var vendorMatches = element.webkitMatchesSelector - || element.msMatchesSelector - || element.mozMatchesSelector - || element.oMatchesSelector; - matcher = function(selector) { - return function() { - return vendorMatches.call(this, selector); - }; - }; - } -} - -/* harmony default export */ __webpack_exports__["a"] = (matcher); - - -/***/ }), -/* 141 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = EnterNode; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__sparse__ = __webpack_require__(142); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__index__ = __webpack_require__(5); - - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return new __WEBPACK_IMPORTED_MODULE_1__index__["b" /* Selection */](this._enter || this._groups.map(__WEBPACK_IMPORTED_MODULE_0__sparse__["a" /* default */]), this._parents); -}); - -function EnterNode(parent, datum) { - this.ownerDocument = parent.ownerDocument; - this.namespaceURI = parent.namespaceURI; - this._next = null; - this._parent = parent; - this.__data__ = datum; -} - -EnterNode.prototype = { - constructor: EnterNode, - appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, - insertBefore: function(child, next) { return this._parent.insertBefore(child, next); }, - querySelector: function(selector) { return this._parent.querySelector(selector); }, - querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); } -}; - - -/***/ }), -/* 142 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(update) { - return new Array(update.length); -}); - - -/***/ }), -/* 143 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = styleValue; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__window__ = __webpack_require__(77); - - -function styleRemove(name) { - return function() { - this.style.removeProperty(name); - }; -} - -function styleConstant(name, value, priority) { - return function() { - this.style.setProperty(name, value, priority); - }; -} - -function styleFunction(name, value, priority) { - return function() { - var v = value.apply(this, arguments); - if (v == null) this.style.removeProperty(name); - else this.style.setProperty(name, v, priority); - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(name, value, priority) { - return arguments.length > 1 - ? this.each((value == null - ? styleRemove : typeof value === "function" - ? styleFunction - : styleConstant)(name, value, priority == null ? "" : priority)) - : styleValue(this.node(), name); -}); - -function styleValue(node, name) { - return node.style.getPropertyValue(name) - || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__window__["a" /* default */])(node).getComputedStyle(node, null).getPropertyValue(name); -} - - -/***/ }), -/* 144 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function empty() { - return []; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(selector) { - return selector == null ? empty : function() { - return this.querySelectorAll(selector); - }; -}); - - -/***/ }), -/* 145 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_path__ = __webpack_require__(14); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__constant__ = __webpack_require__(16); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__curve_linear__ = __webpack_require__(41); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__line__ = __webpack_require__(79); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__point__ = __webpack_require__(81); - - - - - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var x0 = __WEBPACK_IMPORTED_MODULE_4__point__["a" /* x */], - x1 = null, - y0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(0), - y1 = __WEBPACK_IMPORTED_MODULE_4__point__["b" /* y */], - defined = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(true), - context = null, - curve = __WEBPACK_IMPORTED_MODULE_2__curve_linear__["a" /* default */], - output = null; - - function area(data) { - var i, - j, - k, - n = data.length, - d, - defined0 = false, - buffer, - x0z = new Array(n), - y0z = new Array(n); - - if (context == null) output = curve(buffer = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_path__["a" /* path */])()); - - for (i = 0; i <= n; ++i) { - if (!(i < n && defined(d = data[i], i, data)) === defined0) { - if (defined0 = !defined0) { - j = i; - output.areaStart(); - output.lineStart(); - } else { - output.lineEnd(); - output.lineStart(); - for (k = i - 1; k >= j; --k) { - output.point(x0z[k], y0z[k]); - } - output.lineEnd(); - output.areaEnd(); - } - } - if (defined0) { - x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data); - output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]); - } - } - - if (buffer) return output = null, buffer + "" || null; - } - - function arealine() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__line__["a" /* default */])().defined(defined).curve(curve).context(context); - } - - area.x = function(_) { - return arguments.length ? (x0 = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), x1 = null, area) : x0; - }; - - area.x0 = function(_) { - return arguments.length ? (x0 = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), area) : x0; - }; - - area.x1 = function(_) { - return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), area) : x1; - }; - - area.y = function(_) { - return arguments.length ? (y0 = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), y1 = null, area) : y0; - }; - - area.y0 = function(_) { - return arguments.length ? (y0 = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), area) : y0; - }; - - area.y1 = function(_) { - return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), area) : y1; - }; - - area.lineX0 = - area.lineY0 = function() { - return arealine().x(x0).y(y0); - }; - - area.lineY1 = function() { - return arealine().x(x0).y(y1); - }; - - area.lineX1 = function() { - return arealine().x(x1).y(y0); - }; - - area.defined = function(_) { - return arguments.length ? (defined = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(!!_), area) : defined; - }; - - area.curve = function(_) { - return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve; - }; - - area.context = function(_) { - return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context; - }; - - return area; -}); - - -/***/ }), -/* 146 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return slice; }); -var slice = Array.prototype.slice; - - -/***/ }), -/* 147 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = CardinalClosed; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__noop__ = __webpack_require__(42); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__cardinal__ = __webpack_require__(40); - - - -function CardinalClosed(context, tension) { - this._context = context; - this._k = (1 - tension) / 6; -} - -CardinalClosed.prototype = { - areaStart: __WEBPACK_IMPORTED_MODULE_0__noop__["a" /* default */], - areaEnd: __WEBPACK_IMPORTED_MODULE_0__noop__["a" /* default */], - lineStart: function() { - this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = - this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 1: { - this._context.moveTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 2: { - this._context.lineTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 3: { - this.point(this._x3, this._y3); - this.point(this._x4, this._y4); - this.point(this._x5, this._y5); - break; - } - } - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._x3 = x, this._y3 = y; break; - case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; - case 2: this._point = 3; this._x5 = x, this._y5 = y; break; - default: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__cardinal__["c" /* point */])(this, x, y); break; - } - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -/* harmony default export */ __webpack_exports__["a"] = ((function custom(tension) { - - function cardinal(context) { - return new CardinalClosed(context, tension); - } - - cardinal.tension = function(tension) { - return custom(+tension); - }; - - return cardinal; -})(0)); - - -/***/ }), -/* 148 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = CardinalOpen; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cardinal__ = __webpack_require__(40); - - -function CardinalOpen(context, tension) { - this._context = context; - this._k = (1 - tension) / 6; -} - -CardinalOpen.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; break; - case 1: this._point = 2; break; - case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; - case 3: this._point = 4; // proceed - default: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cardinal__["c" /* point */])(this, x, y); break; - } - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -/* harmony default export */ __webpack_exports__["a"] = ((function custom(tension) { - - function cardinal(context) { - return new CardinalOpen(context, tension); - } - - cardinal.tension = function(tension) { - return custom(+tension); - }; - - return cardinal; -})(0)); - - -/***/ }), -/* 149 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return curveRadialLinear; }); -/* harmony export (immutable) */ __webpack_exports__["a"] = curveRadial; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__linear__ = __webpack_require__(41); - - -var curveRadialLinear = curveRadial(__WEBPACK_IMPORTED_MODULE_0__linear__["a" /* default */]); - -function Radial(curve) { - this._curve = curve; -} - -Radial.prototype = { - areaStart: function() { - this._curve.areaStart(); - }, - areaEnd: function() { - this._curve.areaEnd(); - }, - lineStart: function() { - this._curve.lineStart(); - }, - lineEnd: function() { - this._curve.lineEnd(); - }, - point: function(a, r) { - this._curve.point(r * Math.sin(a), r * -Math.cos(a)); - } -}; - -function curveRadial(curve) { - - function radial(context) { - return new Radial(curve(context)); - } - - radial._curve = curve; - - return radial; -} - - -/***/ }), -/* 150 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = radialLine; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__curve_radial__ = __webpack_require__(149); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__line__ = __webpack_require__(79); - - - -function radialLine(l) { - var c = l.curve; - - l.angle = l.x, delete l.x; - l.radius = l.y, delete l.y; - - l.curve = function(_) { - return arguments.length ? c(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__curve_radial__["a" /* default */])(_)) : c()._curve; - }; - - return l; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return radialLine(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__line__["a" /* default */])().curve(__WEBPACK_IMPORTED_MODULE_0__curve_radial__["b" /* curveRadialLinear */])); -}); - - -/***/ }), -/* 151 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(29); - - -/* harmony default export */ __webpack_exports__["a"] = ({ - draw: function(context, size) { - var r = Math.sqrt(size / __WEBPACK_IMPORTED_MODULE_0__math__["b" /* pi */]); - context.moveTo(r, 0); - context.arc(0, 0, r, 0, __WEBPACK_IMPORTED_MODULE_0__math__["c" /* tau */]); - } -}); - - -/***/ }), -/* 152 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = ({ - draw: function(context, size) { - var r = Math.sqrt(size / 5) / 2; - context.moveTo(-3 * r, -r); - context.lineTo(-r, -r); - context.lineTo(-r, -3 * r); - context.lineTo(r, -3 * r); - context.lineTo(r, -r); - context.lineTo(3 * r, -r); - context.lineTo(3 * r, r); - context.lineTo(r, r); - context.lineTo(r, 3 * r); - context.lineTo(-r, 3 * r); - context.lineTo(-r, r); - context.lineTo(-3 * r, r); - context.closePath(); - } -}); - - -/***/ }), -/* 153 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -var tan30 = Math.sqrt(1 / 3), - tan30_2 = tan30 * 2; - -/* harmony default export */ __webpack_exports__["a"] = ({ - draw: function(context, size) { - var y = Math.sqrt(size / tan30_2), - x = y * tan30; - context.moveTo(0, -y); - context.lineTo(x, 0); - context.lineTo(0, y); - context.lineTo(-x, 0); - context.closePath(); - } -}); - - -/***/ }), -/* 154 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = ({ - draw: function(context, size) { - var w = Math.sqrt(size), - x = -w / 2; - context.rect(x, x, w, w); - } -}); - - -/***/ }), -/* 155 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(29); - - -var ka = 0.89081309152928522810, - kr = Math.sin(__WEBPACK_IMPORTED_MODULE_0__math__["b" /* pi */] / 10) / Math.sin(7 * __WEBPACK_IMPORTED_MODULE_0__math__["b" /* pi */] / 10), - kx = Math.sin(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* tau */] / 10) * kr, - ky = -Math.cos(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* tau */] / 10) * kr; - -/* harmony default export */ __webpack_exports__["a"] = ({ - draw: function(context, size) { - var r = Math.sqrt(size * ka), - x = kx * r, - y = ky * r; - context.moveTo(0, -r); - context.lineTo(x, y); - for (var i = 1; i < 5; ++i) { - var a = __WEBPACK_IMPORTED_MODULE_0__math__["c" /* tau */] * i / 5, - c = Math.cos(a), - s = Math.sin(a); - context.lineTo(s * r, -c * r); - context.lineTo(c * x - s * y, s * x + c * y); - } - context.closePath(); - } -}); - - -/***/ }), -/* 156 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -var sqrt3 = Math.sqrt(3); - -/* harmony default export */ __webpack_exports__["a"] = ({ - draw: function(context, size) { - var y = -Math.sqrt(size / (sqrt3 * 3)); - context.moveTo(0, y * 2); - context.lineTo(-sqrt3 * y, -y); - context.lineTo(sqrt3 * y, -y); - context.closePath(); - } -}); - - -/***/ }), -/* 157 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -var c = -0.5, - s = Math.sqrt(3) / 2, - k = 1 / Math.sqrt(12), - a = (k / 2 + 1) * 3; - -/* harmony default export */ __webpack_exports__["a"] = ({ - draw: function(context, size) { - var r = Math.sqrt(size / a), - x0 = r / 2, - y0 = r * k, - x1 = x0, - y1 = r * k + r, - x2 = -x1, - y2 = y1; - context.moveTo(x0, y0); - context.lineTo(x1, y1); - context.lineTo(x2, y2); - context.lineTo(c * x0 - s * y0, s * x0 + c * y0); - context.lineTo(c * x1 - s * y1, s * x1 + c * y1); - context.lineTo(c * x2 - s * y2, s * x2 + c * y2); - context.lineTo(c * x0 + s * y0, c * y0 - s * x0); - context.lineTo(c * x1 + s * y1, c * y1 - s * x1); - context.lineTo(c * x2 + s * y2, c * y2 - s * x2); - context.closePath(); - } -}); - - -/***/ }), -/* 158 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return isoSpecifier; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__defaultLocale__ = __webpack_require__(83); - - -var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ"; - -function formatIsoNative(date) { - return date.toISOString(); -} - -var formatIso = Date.prototype.toISOString - ? formatIsoNative - : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__defaultLocale__["d" /* utcFormat */])(isoSpecifier); - -/* harmony default export */ __webpack_exports__["a"] = (formatIso); - - -/***/ }), -/* 159 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = formatLocale; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_time__ = __webpack_require__(43); - - -function localDate(d) { - if (0 <= d.y && d.y < 100) { - var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L); - date.setFullYear(d.y); - return date; - } - return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L); -} - -function utcDate(d) { - if (0 <= d.y && d.y < 100) { - var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L)); - date.setUTCFullYear(d.y); - return date; - } - return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L)); -} - -function newYear(y) { - return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0}; -} - -function formatLocale(locale) { - var locale_dateTime = locale.dateTime, - locale_date = locale.date, - locale_time = locale.time, - locale_periods = locale.periods, - locale_weekdays = locale.days, - locale_shortWeekdays = locale.shortDays, - locale_months = locale.months, - locale_shortMonths = locale.shortMonths; - - var periodRe = formatRe(locale_periods), - periodLookup = formatLookup(locale_periods), - weekdayRe = formatRe(locale_weekdays), - weekdayLookup = formatLookup(locale_weekdays), - shortWeekdayRe = formatRe(locale_shortWeekdays), - shortWeekdayLookup = formatLookup(locale_shortWeekdays), - monthRe = formatRe(locale_months), - monthLookup = formatLookup(locale_months), - shortMonthRe = formatRe(locale_shortMonths), - shortMonthLookup = formatLookup(locale_shortMonths); - - var formats = { - "a": formatShortWeekday, - "A": formatWeekday, - "b": formatShortMonth, - "B": formatMonth, - "c": null, - "d": formatDayOfMonth, - "e": formatDayOfMonth, - "H": formatHour24, - "I": formatHour12, - "j": formatDayOfYear, - "L": formatMilliseconds, - "m": formatMonthNumber, - "M": formatMinutes, - "p": formatPeriod, - "S": formatSeconds, - "U": formatWeekNumberSunday, - "w": formatWeekdayNumber, - "W": formatWeekNumberMonday, - "x": null, - "X": null, - "y": formatYear, - "Y": formatFullYear, - "Z": formatZone, - "%": formatLiteralPercent - }; - - var utcFormats = { - "a": formatUTCShortWeekday, - "A": formatUTCWeekday, - "b": formatUTCShortMonth, - "B": formatUTCMonth, - "c": null, - "d": formatUTCDayOfMonth, - "e": formatUTCDayOfMonth, - "H": formatUTCHour24, - "I": formatUTCHour12, - "j": formatUTCDayOfYear, - "L": formatUTCMilliseconds, - "m": formatUTCMonthNumber, - "M": formatUTCMinutes, - "p": formatUTCPeriod, - "S": formatUTCSeconds, - "U": formatUTCWeekNumberSunday, - "w": formatUTCWeekdayNumber, - "W": formatUTCWeekNumberMonday, - "x": null, - "X": null, - "y": formatUTCYear, - "Y": formatUTCFullYear, - "Z": formatUTCZone, - "%": formatLiteralPercent - }; - - var parses = { - "a": parseShortWeekday, - "A": parseWeekday, - "b": parseShortMonth, - "B": parseMonth, - "c": parseLocaleDateTime, - "d": parseDayOfMonth, - "e": parseDayOfMonth, - "H": parseHour24, - "I": parseHour24, - "j": parseDayOfYear, - "L": parseMilliseconds, - "m": parseMonthNumber, - "M": parseMinutes, - "p": parsePeriod, - "S": parseSeconds, - "U": parseWeekNumberSunday, - "w": parseWeekdayNumber, - "W": parseWeekNumberMonday, - "x": parseLocaleDate, - "X": parseLocaleTime, - "y": parseYear, - "Y": parseFullYear, - "Z": parseZone, - "%": parseLiteralPercent - }; - - // These recursive directive definitions must be deferred. - formats.x = newFormat(locale_date, formats); - formats.X = newFormat(locale_time, formats); - formats.c = newFormat(locale_dateTime, formats); - utcFormats.x = newFormat(locale_date, utcFormats); - utcFormats.X = newFormat(locale_time, utcFormats); - utcFormats.c = newFormat(locale_dateTime, utcFormats); - - function newFormat(specifier, formats) { - return function(date) { - var string = [], - i = -1, - j = 0, - n = specifier.length, - c, - pad, - format; - - if (!(date instanceof Date)) date = new Date(+date); - - while (++i < n) { - if (specifier.charCodeAt(i) === 37) { - string.push(specifier.slice(j, i)); - if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i); - else pad = c === "e" ? " " : "0"; - if (format = formats[c]) c = format(date, pad); - string.push(c); - j = i + 1; - } - } - - string.push(specifier.slice(j, i)); - return string.join(""); - }; - } - - function newParse(specifier, newDate) { - return function(string) { - var d = newYear(1900), - i = parseSpecifier(d, specifier, string += "", 0); - if (i != string.length) return null; - - // The am-pm flag is 0 for AM, and 1 for PM. - if ("p" in d) d.H = d.H % 12 + d.p * 12; - - // Convert day-of-week and week-of-year to day-of-year. - if ("W" in d || "U" in d) { - if (!("w" in d)) d.w = "W" in d ? 1 : 0; - var day = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay(); - d.m = 0; - d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7; - } - - // If a time zone is specified, all fields are interpreted as UTC and then - // offset according to the specified time zone. - if ("Z" in d) { - d.H += d.Z / 100 | 0; - d.M += d.Z % 100; - return utcDate(d); - } - - // Otherwise, all fields are in local time. - return newDate(d); - }; - } - - function parseSpecifier(d, specifier, string, j) { - var i = 0, - n = specifier.length, - m = string.length, - c, - parse; - - while (i < n) { - if (j >= m) return -1; - c = specifier.charCodeAt(i++); - if (c === 37) { - c = specifier.charAt(i++); - parse = parses[c in pads ? specifier.charAt(i++) : c]; - if (!parse || ((j = parse(d, string, j)) < 0)) return -1; - } else if (c != string.charCodeAt(j++)) { - return -1; - } - } - - return j; - } - - function parsePeriod(d, string, i) { - var n = periodRe.exec(string.slice(i)); - return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseShortWeekday(d, string, i) { - var n = shortWeekdayRe.exec(string.slice(i)); - return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseWeekday(d, string, i) { - var n = weekdayRe.exec(string.slice(i)); - return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseShortMonth(d, string, i) { - var n = shortMonthRe.exec(string.slice(i)); - return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseMonth(d, string, i) { - var n = monthRe.exec(string.slice(i)); - return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseLocaleDateTime(d, string, i) { - return parseSpecifier(d, locale_dateTime, string, i); - } - - function parseLocaleDate(d, string, i) { - return parseSpecifier(d, locale_date, string, i); - } - - function parseLocaleTime(d, string, i) { - return parseSpecifier(d, locale_time, string, i); - } - - function formatShortWeekday(d) { - return locale_shortWeekdays[d.getDay()]; - } - - function formatWeekday(d) { - return locale_weekdays[d.getDay()]; - } - - function formatShortMonth(d) { - return locale_shortMonths[d.getMonth()]; - } - - function formatMonth(d) { - return locale_months[d.getMonth()]; - } - - function formatPeriod(d) { - return locale_periods[+(d.getHours() >= 12)]; - } - - function formatUTCShortWeekday(d) { - return locale_shortWeekdays[d.getUTCDay()]; - } - - function formatUTCWeekday(d) { - return locale_weekdays[d.getUTCDay()]; - } - - function formatUTCShortMonth(d) { - return locale_shortMonths[d.getUTCMonth()]; - } - - function formatUTCMonth(d) { - return locale_months[d.getUTCMonth()]; - } - - function formatUTCPeriod(d) { - return locale_periods[+(d.getUTCHours() >= 12)]; - } - - return { - format: function(specifier) { - var f = newFormat(specifier += "", formats); - f.toString = function() { return specifier; }; - return f; - }, - parse: function(specifier) { - var p = newParse(specifier += "", localDate); - p.toString = function() { return specifier; }; - return p; - }, - utcFormat: function(specifier) { - var f = newFormat(specifier += "", utcFormats); - f.toString = function() { return specifier; }; - return f; - }, - utcParse: function(specifier) { - var p = newParse(specifier, utcDate); - p.toString = function() { return specifier; }; - return p; - } - }; -} - -var pads = {"-": "", "_": " ", "0": "0"}, - numberRe = /^\s*\d+/, // note: ignores next directive - percentRe = /^%/, - requoteRe = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g; - -function pad(value, fill, width) { - var sign = value < 0 ? "-" : "", - string = (sign ? -value : value) + "", - length = string.length; - return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); -} - -function requote(s) { - return s.replace(requoteRe, "\\$&"); -} - -function formatRe(names) { - return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i"); -} - -function formatLookup(names) { - var map = {}, i = -1, n = names.length; - while (++i < n) map[names[i].toLowerCase()] = i; - return map; -} - -function parseWeekdayNumber(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 1)); - return n ? (d.w = +n[0], i + n[0].length) : -1; -} - -function parseWeekNumberSunday(d, string, i) { - var n = numberRe.exec(string.slice(i)); - return n ? (d.U = +n[0], i + n[0].length) : -1; -} - -function parseWeekNumberMonday(d, string, i) { - var n = numberRe.exec(string.slice(i)); - return n ? (d.W = +n[0], i + n[0].length) : -1; -} - -function parseFullYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 4)); - return n ? (d.y = +n[0], i + n[0].length) : -1; -} - -function parseYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1; -} - -function parseZone(d, string, i) { - var n = /^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(string.slice(i, i + 6)); - return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1; -} - -function parseMonthNumber(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.m = n[0] - 1, i + n[0].length) : -1; -} - -function parseDayOfMonth(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.d = +n[0], i + n[0].length) : -1; -} - -function parseDayOfYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 3)); - return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1; -} - -function parseHour24(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.H = +n[0], i + n[0].length) : -1; -} - -function parseMinutes(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.M = +n[0], i + n[0].length) : -1; -} - -function parseSeconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.S = +n[0], i + n[0].length) : -1; -} - -function parseMilliseconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 3)); - return n ? (d.L = +n[0], i + n[0].length) : -1; -} - -function parseLiteralPercent(d, string, i) { - var n = percentRe.exec(string.slice(i, i + 1)); - return n ? i + n[0].length : -1; -} - -function formatDayOfMonth(d, p) { - return pad(d.getDate(), p, 2); -} - -function formatHour24(d, p) { - return pad(d.getHours(), p, 2); -} - -function formatHour12(d, p) { - return pad(d.getHours() % 12 || 12, p, 2); -} - -function formatDayOfYear(d, p) { - return pad(1 + __WEBPACK_IMPORTED_MODULE_0_d3_time__["n" /* timeDay */].count(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_time__["H" /* timeYear */])(d), d), p, 3); -} - -function formatMilliseconds(d, p) { - return pad(d.getMilliseconds(), p, 3); -} - -function formatMonthNumber(d, p) { - return pad(d.getMonth() + 1, p, 2); -} - -function formatMinutes(d, p) { - return pad(d.getMinutes(), p, 2); -} - -function formatSeconds(d, p) { - return pad(d.getSeconds(), p, 2); -} - -function formatWeekNumberSunday(d, p) { - return pad(__WEBPACK_IMPORTED_MODULE_0_d3_time__["r" /* timeSunday */].count(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_time__["H" /* timeYear */])(d), d), p, 2); -} - -function formatWeekdayNumber(d) { - return d.getDay(); -} - -function formatWeekNumberMonday(d, p) { - return pad(__WEBPACK_IMPORTED_MODULE_0_d3_time__["t" /* timeMonday */].count(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_time__["H" /* timeYear */])(d), d), p, 2); -} - -function formatYear(d, p) { - return pad(d.getFullYear() % 100, p, 2); -} - -function formatFullYear(d, p) { - return pad(d.getFullYear() % 10000, p, 4); -} - -function formatZone(d) { - var z = d.getTimezoneOffset(); - return (z > 0 ? "-" : (z *= -1, "+")) - + pad(z / 60 | 0, "0", 2) - + pad(z % 60, "0", 2); -} - -function formatUTCDayOfMonth(d, p) { - return pad(d.getUTCDate(), p, 2); -} - -function formatUTCHour24(d, p) { - return pad(d.getUTCHours(), p, 2); -} - -function formatUTCHour12(d, p) { - return pad(d.getUTCHours() % 12 || 12, p, 2); -} - -function formatUTCDayOfYear(d, p) { - return pad(1 + __WEBPACK_IMPORTED_MODULE_0_d3_time__["N" /* utcDay */].count(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_time__["_7" /* utcYear */])(d), d), p, 3); -} - -function formatUTCMilliseconds(d, p) { - return pad(d.getUTCMilliseconds(), p, 3); -} - -function formatUTCMonthNumber(d, p) { - return pad(d.getUTCMonth() + 1, p, 2); -} - -function formatUTCMinutes(d, p) { - return pad(d.getUTCMinutes(), p, 2); -} - -function formatUTCSeconds(d, p) { - return pad(d.getUTCSeconds(), p, 2); -} - -function formatUTCWeekNumberSunday(d, p) { - return pad(__WEBPACK_IMPORTED_MODULE_0_d3_time__["R" /* utcSunday */].count(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_time__["_7" /* utcYear */])(d), d), p, 2); -} - -function formatUTCWeekdayNumber(d) { - return d.getUTCDay(); -} - -function formatUTCWeekNumberMonday(d, p) { - return pad(__WEBPACK_IMPORTED_MODULE_0_d3_time__["T" /* utcMonday */].count(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_time__["_7" /* utcYear */])(d), d), p, 2); -} - -function formatUTCYear(d, p) { - return pad(d.getUTCFullYear() % 100, p, 2); -} - -function formatUTCFullYear(d, p) { - return pad(d.getUTCFullYear() % 10000, p, 4); -} - -function formatUTCZone() { - return "+0000"; -} - -function formatLiteralPercent() { - return "%"; -} - - -/***/ }), -/* 160 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__transition_schedule__ = __webpack_require__(6); - - -/* harmony default export */ __webpack_exports__["a"] = (function(node, name) { - var schedules = node.__transition, - schedule, - active, - empty = true, - i; - - if (!schedules) return; - - name = name == null ? null : name + ""; - - for (i in schedules) { - if ((schedule = schedules[i]).name !== name) { empty = false; continue; } - active = schedule.state > __WEBPACK_IMPORTED_MODULE_0__transition_schedule__["a" /* STARTING */] && schedule.state < __WEBPACK_IMPORTED_MODULE_0__transition_schedule__["b" /* ENDING */]; - schedule.state = __WEBPACK_IMPORTED_MODULE_0__transition_schedule__["c" /* ENDED */]; - schedule.timer.stop(); - if (active) schedule.on.call("interrupt", node, node.__data__, schedule.index, schedule.group); - delete schedules[i]; - } - - if (empty) delete node.__transition; -}); - - -/***/ }), -/* 161 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_color__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__ = __webpack_require__(4); - - - -/* harmony default export */ __webpack_exports__["a"] = (function(a, b) { - var c; - return (typeof b === "number" ? __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__["b" /* interpolateNumber */] - : b instanceof __WEBPACK_IMPORTED_MODULE_0_d3_color__["a" /* color */] ? __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__["c" /* interpolateRgb */] - : (c = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["a" /* color */])(b)) ? (b = c, __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__["c" /* interpolateRgb */]) - : __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__["d" /* interpolateString */])(a, b); -}); - - -/***/ }), -/* 162 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["d"] = createCell; -/* harmony export (immutable) */ __webpack_exports__["c"] = cellHalfedgeStart; -/* unused harmony export cellHalfedgeEnd */ -/* harmony export (immutable) */ __webpack_exports__["a"] = sortCellHalfedges; -/* harmony export (immutable) */ __webpack_exports__["b"] = clipCells; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__Edge__ = __webpack_require__(85); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Diagram__ = __webpack_require__(32); - - - -function createCell(site) { - return __WEBPACK_IMPORTED_MODULE_1__Diagram__["c" /* cells */][site.index] = { - site: site, - halfedges: [] - }; -} - -function cellHalfedgeAngle(cell, edge) { - var site = cell.site, - va = edge.left, - vb = edge.right; - if (site === vb) vb = va, va = site; - if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]); - if (site === va) va = edge[1], vb = edge[0]; - else va = edge[0], vb = edge[1]; - return Math.atan2(va[0] - vb[0], vb[1] - va[1]); -} - -function cellHalfedgeStart(cell, edge) { - return edge[+(edge.left !== cell.site)]; -} - -function cellHalfedgeEnd(cell, edge) { - return edge[+(edge.left === cell.site)]; -} - -function sortCellHalfedges() { - for (var i = 0, n = __WEBPACK_IMPORTED_MODULE_1__Diagram__["c" /* cells */].length, cell, halfedges, j, m; i < n; ++i) { - if ((cell = __WEBPACK_IMPORTED_MODULE_1__Diagram__["c" /* cells */][i]) && (m = (halfedges = cell.halfedges).length)) { - var index = new Array(m), - array = new Array(m); - for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, __WEBPACK_IMPORTED_MODULE_1__Diagram__["d" /* edges */][halfedges[j]]); - index.sort(function(i, j) { return array[j] - array[i]; }); - for (j = 0; j < m; ++j) array[j] = halfedges[index[j]]; - for (j = 0; j < m; ++j) halfedges[j] = array[j]; - } - } -} - -function clipCells(x0, y0, x1, y1) { - var nCells = __WEBPACK_IMPORTED_MODULE_1__Diagram__["c" /* cells */].length, - iCell, - cell, - site, - iHalfedge, - halfedges, - nHalfedges, - start, - startX, - startY, - end, - endX, - endY, - cover = true; - - for (iCell = 0; iCell < nCells; ++iCell) { - if (cell = __WEBPACK_IMPORTED_MODULE_1__Diagram__["c" /* cells */][iCell]) { - site = cell.site; - halfedges = cell.halfedges; - iHalfedge = halfedges.length; - - // Remove any dangling clipped edges. - while (iHalfedge--) { - if (!__WEBPACK_IMPORTED_MODULE_1__Diagram__["d" /* edges */][halfedges[iHalfedge]]) { - halfedges.splice(iHalfedge, 1); - } - } - - // Insert any border edges as necessary. - iHalfedge = 0, nHalfedges = halfedges.length; - while (iHalfedge < nHalfedges) { - end = cellHalfedgeEnd(cell, __WEBPACK_IMPORTED_MODULE_1__Diagram__["d" /* edges */][halfedges[iHalfedge]]), endX = end[0], endY = end[1]; - start = cellHalfedgeStart(cell, __WEBPACK_IMPORTED_MODULE_1__Diagram__["d" /* edges */][halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1]; - if (Math.abs(endX - startX) > __WEBPACK_IMPORTED_MODULE_1__Diagram__["b" /* epsilon */] || Math.abs(endY - startY) > __WEBPACK_IMPORTED_MODULE_1__Diagram__["b" /* epsilon */]) { - halfedges.splice(iHalfedge, 0, __WEBPACK_IMPORTED_MODULE_1__Diagram__["d" /* edges */].push(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__Edge__["b" /* createBorderEdge */])(site, end, - Math.abs(endX - x0) < __WEBPACK_IMPORTED_MODULE_1__Diagram__["b" /* epsilon */] && y1 - endY > __WEBPACK_IMPORTED_MODULE_1__Diagram__["b" /* epsilon */] ? [x0, Math.abs(startX - x0) < __WEBPACK_IMPORTED_MODULE_1__Diagram__["b" /* epsilon */] ? startY : y1] - : Math.abs(endY - y1) < __WEBPACK_IMPORTED_MODULE_1__Diagram__["b" /* epsilon */] && x1 - endX > __WEBPACK_IMPORTED_MODULE_1__Diagram__["b" /* epsilon */] ? [Math.abs(startY - y1) < __WEBPACK_IMPORTED_MODULE_1__Diagram__["b" /* epsilon */] ? startX : x1, y1] - : Math.abs(endX - x1) < __WEBPACK_IMPORTED_MODULE_1__Diagram__["b" /* epsilon */] && endY - y0 > __WEBPACK_IMPORTED_MODULE_1__Diagram__["b" /* epsilon */] ? [x1, Math.abs(startX - x1) < __WEBPACK_IMPORTED_MODULE_1__Diagram__["b" /* epsilon */] ? startY : y0] - : Math.abs(endY - y0) < __WEBPACK_IMPORTED_MODULE_1__Diagram__["b" /* epsilon */] && endX - x0 > __WEBPACK_IMPORTED_MODULE_1__Diagram__["b" /* epsilon */] ? [Math.abs(startY - y0) < __WEBPACK_IMPORTED_MODULE_1__Diagram__["b" /* epsilon */] ? startX : x0, y0] - : null)) - 1); - ++nHalfedges; - } - } - - if (nHalfedges) cover = false; - } - } - - // If there weren’t any edges, have the closest site cover the extent. - // It doesn’t matter which corner of the extent we measure! - if (cover) { - var dx, dy, d2, dc = Infinity; - - for (iCell = 0, cover = null; iCell < nCells; ++iCell) { - if (cell = __WEBPACK_IMPORTED_MODULE_1__Diagram__["c" /* cells */][iCell]) { - site = cell.site; - dx = site[0] - x0; - dy = site[1] - y0; - d2 = dx * dx + dy * dy; - if (d2 < dc) dc = d2, cover = cell; - } - } - - if (cover) { - var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0]; - cover.halfedges.push( - __WEBPACK_IMPORTED_MODULE_1__Diagram__["d" /* edges */].push(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__Edge__["b" /* createBorderEdge */])(site = cover.site, v00, v01)) - 1, - __WEBPACK_IMPORTED_MODULE_1__Diagram__["d" /* edges */].push(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__Edge__["b" /* createBorderEdge */])(site, v01, v11)) - 1, - __WEBPACK_IMPORTED_MODULE_1__Diagram__["d" /* edges */].push(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__Edge__["b" /* createBorderEdge */])(site, v11, v10)) - 1, - __WEBPACK_IMPORTED_MODULE_1__Diagram__["d" /* edges */].push(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__Edge__["b" /* createBorderEdge */])(site, v10, v00)) - 1 - ); - } - } - - // Lastly delete any cells with no edges; these were entirely clipped. - for (iCell = 0; iCell < nCells; ++iCell) { - if (cell = __WEBPACK_IMPORTED_MODULE_1__Diagram__["c" /* cells */][iCell]) { - if (!cell.halfedges.length) { - delete __WEBPACK_IMPORTED_MODULE_1__Diagram__["c" /* cells */][iCell]; - } - } - } -} - - -/***/ }), -/* 163 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return firstCircle; }); -/* harmony export (immutable) */ __webpack_exports__["c"] = attachCircle; -/* harmony export (immutable) */ __webpack_exports__["b"] = detachCircle; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__RedBlackTree__ = __webpack_require__(86); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Diagram__ = __webpack_require__(32); - - - -var circlePool = []; - -var firstCircle; - -function Circle() { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__RedBlackTree__["b" /* RedBlackNode */])(this); - this.x = - this.y = - this.arc = - this.site = - this.cy = null; -} - -function attachCircle(arc) { - var lArc = arc.P, - rArc = arc.N; - - if (!lArc || !rArc) return; - - var lSite = lArc.site, - cSite = arc.site, - rSite = rArc.site; - - if (lSite === rSite) return; - - var bx = cSite[0], - by = cSite[1], - ax = lSite[0] - bx, - ay = lSite[1] - by, - cx = rSite[0] - bx, - cy = rSite[1] - by; - - var d = 2 * (ax * cy - ay * cx); - if (d >= -__WEBPACK_IMPORTED_MODULE_1__Diagram__["f" /* epsilon2 */]) return; - - var ha = ax * ax + ay * ay, - hc = cx * cx + cy * cy, - x = (cy * ha - ay * hc) / d, - y = (ax * hc - cx * ha) / d; - - var circle = circlePool.pop() || new Circle; - circle.arc = arc; - circle.site = cSite; - circle.x = x + bx; - circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom - - arc.circle = circle; - - var before = null, - node = __WEBPACK_IMPORTED_MODULE_1__Diagram__["g" /* circles */]._; - - while (node) { - if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) { - if (node.L) node = node.L; - else { before = node.P; break; } - } else { - if (node.R) node = node.R; - else { before = node; break; } - } - } - - __WEBPACK_IMPORTED_MODULE_1__Diagram__["g" /* circles */].insert(before, circle); - if (!before) firstCircle = circle; -} - -function detachCircle(arc) { - var circle = arc.circle; - if (circle) { - if (!circle.P) firstCircle = circle.N; - __WEBPACK_IMPORTED_MODULE_1__Diagram__["g" /* circles */].remove(circle); - circlePool.push(circle); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__RedBlackTree__["b" /* RedBlackNode */])(circle); - arc.circle = null; - } -} - - -/***/ }), -/* 164 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["c"] = Transform; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return identity; }); -/* harmony export (immutable) */ __webpack_exports__["a"] = transform; -function Transform(k, x, y) { - this.k = k; - this.x = x; - this.y = y; -} - -Transform.prototype = { - constructor: Transform, - scale: function(k) { - return k === 1 ? this : new Transform(this.k * k, this.x, this.y); - }, - translate: function(x, y) { - return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y); - }, - apply: function(point) { - return [point[0] * this.k + this.x, point[1] * this.k + this.y]; - }, - applyX: function(x) { - return x * this.k + this.x; - }, - applyY: function(y) { - return y * this.k + this.y; - }, - invert: function(location) { - return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k]; - }, - invertX: function(x) { - return (x - this.x) / this.k; - }, - invertY: function(y) { - return (y - this.y) / this.k; - }, - rescaleX: function(x) { - return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x)); - }, - rescaleY: function(y) { - return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y)); - }, - toString: function() { - return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")"; - } -}; - -var identity = new Transform(1, 0, 0); - -transform.prototype = Transform.prototype; - -function transform(node) { - return node.__zoom || identity; -} - - -/***/ }), -/* 165 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var CONSTANTS = exports.CONSTANTS = { - 'NAMESPACE': 'http://www.w3.org/2000/svg', - 'CLASS': ['o-chart'], - 'STYLE': ['font-size: 13px', 'font-family: Helvetica Neue, Helvetica, Arial ,sans-serif', 'font-weight: 400', 'max-width: 100%'], - 'DOTS_RADIUS': 4, - 'LEGEND_MARGIN_TOP': 56, - 'LEGEND_MARGIN_BOTTOM': 10 -}; - -/***/ }), -/* 166 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_transition__ = __webpack_require__(45); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_selection_attrs__ = __webpack_require__(346); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_selection_styles__ = __webpack_require__(348); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_selection_properties__ = __webpack_require__(347); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_transition_attrs__ = __webpack_require__(349); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_transition_styles__ = __webpack_require__(350); - - - - - - - - -__WEBPACK_IMPORTED_MODULE_0_d3_selection__["a" /* selection */].prototype.attrs = __WEBPACK_IMPORTED_MODULE_2__src_selection_attrs__["a" /* default */]; -__WEBPACK_IMPORTED_MODULE_0_d3_selection__["a" /* selection */].prototype.styles = __WEBPACK_IMPORTED_MODULE_3__src_selection_styles__["a" /* default */]; -__WEBPACK_IMPORTED_MODULE_0_d3_selection__["a" /* selection */].prototype.properties = __WEBPACK_IMPORTED_MODULE_4__src_selection_properties__["a" /* default */]; -__WEBPACK_IMPORTED_MODULE_1_d3_transition__["a" /* transition */].prototype.attrs = __WEBPACK_IMPORTED_MODULE_5__src_transition_attrs__["a" /* default */]; -__WEBPACK_IMPORTED_MODULE_1_d3_transition__["a" /* transition */].prototype.styles = __WEBPACK_IMPORTED_MODULE_6__src_transition_styles__["a" /* default */]; - - -/***/ }), -/* 167 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__build_package__ = __webpack_require__(457); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "version", function() { return __WEBPACK_IMPORTED_MODULE_0__build_package__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_array__ = __webpack_require__(3); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "bisect", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "bisectRight", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "bisectLeft", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ascending", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "bisector", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["e"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "cross", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["f"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "descending", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["g"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "deviation", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["h"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "extent", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["i"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "histogram", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["j"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "thresholdFreedmanDiaconis", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["k"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "thresholdScott", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["l"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "thresholdSturges", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["m"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "max", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["n"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "mean", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["o"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "median", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["p"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["q"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "min", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["r"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "pairs", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["s"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "permute", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["t"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "quantile", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["u"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "range", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["v"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scan", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["w"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "shuffle", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["x"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "sum", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["y"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ticks", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["z"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "tickIncrement", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["A"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "tickStep", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["B"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "transpose", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["C"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "variance", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["D"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return __WEBPACK_IMPORTED_MODULE_1_d3_array__["E"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_d3_axis__ = __webpack_require__(185); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "axisTop", function() { return __WEBPACK_IMPORTED_MODULE_2_d3_axis__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "axisRight", function() { return __WEBPACK_IMPORTED_MODULE_2_d3_axis__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "axisBottom", function() { return __WEBPACK_IMPORTED_MODULE_2_d3_axis__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "axisLeft", function() { return __WEBPACK_IMPORTED_MODULE_2_d3_axis__["d"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_d3_brush__ = __webpack_require__(189); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "brush", function() { return __WEBPACK_IMPORTED_MODULE_3_d3_brush__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "brushX", function() { return __WEBPACK_IMPORTED_MODULE_3_d3_brush__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "brushY", function() { return __WEBPACK_IMPORTED_MODULE_3_d3_brush__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "brushSelection", function() { return __WEBPACK_IMPORTED_MODULE_3_d3_brush__["d"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_d3_chord__ = __webpack_require__(194); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "chord", function() { return __WEBPACK_IMPORTED_MODULE_4_d3_chord__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ribbon", function() { return __WEBPACK_IMPORTED_MODULE_4_d3_chord__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_d3_collection__ = __webpack_require__(21); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "nest", function() { return __WEBPACK_IMPORTED_MODULE_5_d3_collection__["nest"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "set", function() { return __WEBPACK_IMPORTED_MODULE_5_d3_collection__["set"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "map", function() { return __WEBPACK_IMPORTED_MODULE_5_d3_collection__["map"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "keys", function() { return __WEBPACK_IMPORTED_MODULE_5_d3_collection__["keys"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "values", function() { return __WEBPACK_IMPORTED_MODULE_5_d3_collection__["values"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "entries", function() { return __WEBPACK_IMPORTED_MODULE_5_d3_collection__["entries"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_d3_color__ = __webpack_require__(7); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "color", function() { return __WEBPACK_IMPORTED_MODULE_6_d3_color__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "rgb", function() { return __WEBPACK_IMPORTED_MODULE_6_d3_color__["f"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "hsl", function() { return __WEBPACK_IMPORTED_MODULE_6_d3_color__["e"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "lab", function() { return __WEBPACK_IMPORTED_MODULE_6_d3_color__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "hcl", function() { return __WEBPACK_IMPORTED_MODULE_6_d3_color__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "cubehelix", function() { return __WEBPACK_IMPORTED_MODULE_6_d3_color__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_d3_dispatch__ = __webpack_require__(12); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "dispatch", function() { return __WEBPACK_IMPORTED_MODULE_7_d3_dispatch__["dispatch"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8_d3_drag__ = __webpack_require__(51); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "drag", function() { return __WEBPACK_IMPORTED_MODULE_8_d3_drag__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "dragDisable", function() { return __WEBPACK_IMPORTED_MODULE_8_d3_drag__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "dragEnable", function() { return __WEBPACK_IMPORTED_MODULE_8_d3_drag__["c"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_d3_dsv__ = __webpack_require__(103); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "dsvFormat", function() { return __WEBPACK_IMPORTED_MODULE_9_d3_dsv__["dsvFormat"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "csvParse", function() { return __WEBPACK_IMPORTED_MODULE_9_d3_dsv__["csvParse"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "csvParseRows", function() { return __WEBPACK_IMPORTED_MODULE_9_d3_dsv__["csvParseRows"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "csvFormat", function() { return __WEBPACK_IMPORTED_MODULE_9_d3_dsv__["csvFormat"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "csvFormatRows", function() { return __WEBPACK_IMPORTED_MODULE_9_d3_dsv__["csvFormatRows"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "tsvParse", function() { return __WEBPACK_IMPORTED_MODULE_9_d3_dsv__["tsvParse"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "tsvParseRows", function() { return __WEBPACK_IMPORTED_MODULE_9_d3_dsv__["tsvParseRows"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "tsvFormat", function() { return __WEBPACK_IMPORTED_MODULE_9_d3_dsv__["tsvFormat"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "tsvFormatRows", function() { return __WEBPACK_IMPORTED_MODULE_9_d3_dsv__["tsvFormatRows"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_d3_ease__ = __webpack_require__(104); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeLinear", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeQuad", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeQuadIn", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeQuadOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["e"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeQuadInOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["f"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeCubic", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["g"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeCubicIn", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["h"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeCubicOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["i"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeCubicInOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easePoly", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["j"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easePolyIn", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["k"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easePolyOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["l"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easePolyInOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["m"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeSin", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["n"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeSinIn", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["o"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeSinOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["p"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeSinInOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["q"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeExp", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["r"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeExpIn", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["s"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeExpOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["t"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeExpInOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["u"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeCircle", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["v"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeCircleIn", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["w"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeCircleOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["x"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeCircleInOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["y"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeBounce", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["z"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeBounceIn", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["A"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeBounceOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["B"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeBounceInOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["C"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeBack", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["D"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeBackIn", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["E"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeBackOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["F"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeBackInOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["G"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeElastic", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["H"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeElasticIn", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["I"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeElasticOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["J"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "easeElasticInOut", function() { return __WEBPACK_IMPORTED_MODULE_10_d3_ease__["K"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11_d3_force__ = __webpack_require__(222); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "forceCenter", function() { return __WEBPACK_IMPORTED_MODULE_11_d3_force__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "forceCollide", function() { return __WEBPACK_IMPORTED_MODULE_11_d3_force__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "forceLink", function() { return __WEBPACK_IMPORTED_MODULE_11_d3_force__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "forceManyBody", function() { return __WEBPACK_IMPORTED_MODULE_11_d3_force__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "forceSimulation", function() { return __WEBPACK_IMPORTED_MODULE_11_d3_force__["e"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "forceX", function() { return __WEBPACK_IMPORTED_MODULE_11_d3_force__["f"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "forceY", function() { return __WEBPACK_IMPORTED_MODULE_11_d3_force__["g"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12_d3_format__ = __webpack_require__(54); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "formatDefaultLocale", function() { return __WEBPACK_IMPORTED_MODULE_12_d3_format__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "format", function() { return __WEBPACK_IMPORTED_MODULE_12_d3_format__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "formatPrefix", function() { return __WEBPACK_IMPORTED_MODULE_12_d3_format__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "formatLocale", function() { return __WEBPACK_IMPORTED_MODULE_12_d3_format__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "formatSpecifier", function() { return __WEBPACK_IMPORTED_MODULE_12_d3_format__["e"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "precisionFixed", function() { return __WEBPACK_IMPORTED_MODULE_12_d3_format__["f"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "precisionPrefix", function() { return __WEBPACK_IMPORTED_MODULE_12_d3_format__["g"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "precisionRound", function() { return __WEBPACK_IMPORTED_MODULE_12_d3_format__["h"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13_d3_geo__ = __webpack_require__(238); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoArea", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoBounds", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoCentroid", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoCircle", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoClipExtent", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["e"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoContains", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["f"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoDistance", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["g"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoGraticule", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["h"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoGraticule10", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["i"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoInterpolate", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["j"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoLength", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["k"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoPath", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["l"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoAlbers", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["m"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoAlbersUsa", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["n"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEqualArea", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["o"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEqualAreaRaw", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["p"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEquidistant", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["q"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoAzimuthalEquidistantRaw", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["r"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoConicConformal", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["s"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoConicConformalRaw", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["t"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoConicEqualArea", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["u"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoConicEqualAreaRaw", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["v"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoConicEquidistant", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["w"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoConicEquidistantRaw", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["x"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoEquirectangular", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["y"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoEquirectangularRaw", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["z"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoGnomonic", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["A"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoGnomonicRaw", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["B"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoIdentity", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["C"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoProjection", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["D"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoProjectionMutator", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["E"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoMercator", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["F"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoMercatorRaw", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["G"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoOrthographic", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["H"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoOrthographicRaw", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["I"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoStereographic", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["J"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoStereographicRaw", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["K"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoTransverseMercator", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["L"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoTransverseMercatorRaw", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["M"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoRotation", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["N"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoStream", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["O"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "geoTransform", function() { return __WEBPACK_IMPORTED_MODULE_13_d3_geo__["P"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__ = __webpack_require__(266); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "cluster", function() { return __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "hierarchy", function() { return __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "pack", function() { return __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "packSiblings", function() { return __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "packEnclose", function() { return __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__["e"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__["f"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "stratify", function() { return __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__["g"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "tree", function() { return __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__["h"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "treemap", function() { return __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__["i"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "treemapBinary", function() { return __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__["j"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "treemapDice", function() { return __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__["k"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "treemapSlice", function() { return __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__["l"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "treemapSliceDice", function() { return __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__["m"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "treemapSquarify", function() { return __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__["n"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "treemapResquarify", function() { return __WEBPACK_IMPORTED_MODULE_14_d3_hierarchy__["o"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__ = __webpack_require__(4); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolate", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["f"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateArray", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["g"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateBasis", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["h"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateBasisClosed", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["i"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateDate", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["j"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateNumber", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateObject", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["k"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateRound", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["l"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateString", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateTransformCss", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateTransformSvg", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["e"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateZoom", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["m"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateRgb", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateRgbBasis", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["n"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateRgbBasisClosed", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["o"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateHsl", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["p"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateHslLong", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["q"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateLab", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["r"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateHcl", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["s"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateHclLong", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["t"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateCubehelix", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["u"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateCubehelixLong", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["v"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "quantize", function() { return __WEBPACK_IMPORTED_MODULE_15_d3_interpolate__["w"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16_d3_path__ = __webpack_require__(14); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "path", function() { return __WEBPACK_IMPORTED_MODULE_16_d3_path__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17_d3_polygon__ = __webpack_require__(299); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "polygonArea", function() { return __WEBPACK_IMPORTED_MODULE_17_d3_polygon__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "polygonCentroid", function() { return __WEBPACK_IMPORTED_MODULE_17_d3_polygon__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "polygonHull", function() { return __WEBPACK_IMPORTED_MODULE_17_d3_polygon__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "polygonContains", function() { return __WEBPACK_IMPORTED_MODULE_17_d3_polygon__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "polygonLength", function() { return __WEBPACK_IMPORTED_MODULE_17_d3_polygon__["e"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18_d3_quadtree__ = __webpack_require__(67); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "quadtree", function() { return __WEBPACK_IMPORTED_MODULE_18_d3_quadtree__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19_d3_queue__ = __webpack_require__(319); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "queue", function() { return __WEBPACK_IMPORTED_MODULE_19_d3_queue__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20_d3_random__ = __webpack_require__(322); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "randomUniform", function() { return __WEBPACK_IMPORTED_MODULE_20_d3_random__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "randomNormal", function() { return __WEBPACK_IMPORTED_MODULE_20_d3_random__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "randomLogNormal", function() { return __WEBPACK_IMPORTED_MODULE_20_d3_random__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "randomBates", function() { return __WEBPACK_IMPORTED_MODULE_20_d3_random__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "randomIrwinHall", function() { return __WEBPACK_IMPORTED_MODULE_20_d3_random__["e"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "randomExponential", function() { return __WEBPACK_IMPORTED_MODULE_20_d3_random__["f"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21_d3_request__ = __webpack_require__(327); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21_d3_request___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_21_d3_request__); -/* harmony namespace reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in __WEBPACK_IMPORTED_MODULE_21_d3_request__) if(["version","bisect","bisectRight","bisectLeft","ascending","bisector","cross","descending","deviation","extent","histogram","thresholdFreedmanDiaconis","thresholdScott","thresholdSturges","max","mean","median","merge","min","pairs","permute","quantile","range","scan","shuffle","sum","ticks","tickIncrement","tickStep","transpose","variance","zip","axisTop","axisRight","axisBottom","axisLeft","brush","brushX","brushY","brushSelection","chord","ribbon","nest","set","map","keys","values","entries","color","rgb","hsl","lab","hcl","cubehelix","dispatch","drag","dragDisable","dragEnable","dsvFormat","csvParse","csvParseRows","csvFormat","csvFormatRows","tsvParse","tsvParseRows","tsvFormat","tsvFormatRows","easeLinear","easeQuad","easeQuadIn","easeQuadOut","easeQuadInOut","easeCubic","easeCubicIn","easeCubicOut","easeCubicInOut","easePoly","easePolyIn","easePolyOut","easePolyInOut","easeSin","easeSinIn","easeSinOut","easeSinInOut","easeExp","easeExpIn","easeExpOut","easeExpInOut","easeCircle","easeCircleIn","easeCircleOut","easeCircleInOut","easeBounce","easeBounceIn","easeBounceOut","easeBounceInOut","easeBack","easeBackIn","easeBackOut","easeBackInOut","easeElastic","easeElasticIn","easeElasticOut","easeElasticInOut","forceCenter","forceCollide","forceLink","forceManyBody","forceSimulation","forceX","forceY","formatDefaultLocale","format","formatPrefix","formatLocale","formatSpecifier","precisionFixed","precisionPrefix","precisionRound","geoArea","geoBounds","geoCentroid","geoCircle","geoClipExtent","geoContains","geoDistance","geoGraticule","geoGraticule10","geoInterpolate","geoLength","geoPath","geoAlbers","geoAlbersUsa","geoAzimuthalEqualArea","geoAzimuthalEqualAreaRaw","geoAzimuthalEquidistant","geoAzimuthalEquidistantRaw","geoConicConformal","geoConicConformalRaw","geoConicEqualArea","geoConicEqualAreaRaw","geoConicEquidistant","geoConicEquidistantRaw","geoEquirectangular","geoEquirectangularRaw","geoGnomonic","geoGnomonicRaw","geoIdentity","geoProjection","geoProjectionMutator","geoMercator","geoMercatorRaw","geoOrthographic","geoOrthographicRaw","geoStereographic","geoStereographicRaw","geoTransverseMercator","geoTransverseMercatorRaw","geoRotation","geoStream","geoTransform","cluster","hierarchy","pack","packSiblings","packEnclose","partition","stratify","tree","treemap","treemapBinary","treemapDice","treemapSlice","treemapSliceDice","treemapSquarify","treemapResquarify","interpolate","interpolateArray","interpolateBasis","interpolateBasisClosed","interpolateDate","interpolateNumber","interpolateObject","interpolateRound","interpolateString","interpolateTransformCss","interpolateTransformSvg","interpolateZoom","interpolateRgb","interpolateRgbBasis","interpolateRgbBasisClosed","interpolateHsl","interpolateHslLong","interpolateLab","interpolateHcl","interpolateHclLong","interpolateCubehelix","interpolateCubehelixLong","quantize","path","polygonArea","polygonCentroid","polygonHull","polygonContains","polygonLength","quadtree","queue","randomUniform","randomNormal","randomLogNormal","randomBates","randomIrwinHall","randomExponential","default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return __WEBPACK_IMPORTED_MODULE_21_d3_request__[key]; }) }(__WEBPACK_IMPORT_KEY__)); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22_d3_scale__ = __webpack_require__(328); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scaleBand", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scalePoint", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scaleIdentity", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scaleLinear", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scaleLog", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["e"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scaleOrdinal", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["f"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scaleImplicit", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["g"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scalePow", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["h"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scaleSqrt", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["i"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scaleQuantile", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["j"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scaleQuantize", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["k"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scaleThreshold", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["l"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scaleTime", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["m"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scaleUtc", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["n"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "schemeCategory10", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["o"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "schemeCategory20b", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["p"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "schemeCategory20c", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["q"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "schemeCategory20", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["r"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateCubehelixDefault", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["s"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateRainbow", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["t"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateWarm", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["u"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateCool", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["v"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateViridis", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["w"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateMagma", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["x"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolateInferno", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["y"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interpolatePlasma", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["z"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "scaleSequential", function() { return __WEBPACK_IMPORTED_MODULE_22_d3_scale__["A"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23_d3_selection__ = __webpack_require__(1); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "creator", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["h"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "local", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["i"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "matcher", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["e"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "mouse", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["j"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "namespace", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "namespaces", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["k"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "select", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "selectAll", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["l"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "selection", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "selector", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["g"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "selectorAll", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["f"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "style", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "touch", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["m"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "touches", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["n"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "window", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["o"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "event", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["p"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "customEvent", function() { return __WEBPACK_IMPORTED_MODULE_23_d3_selection__["q"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24_d3_shape__ = __webpack_require__(384); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "arc", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "area", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "line", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "pie", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "radialArea", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["e"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "radialLine", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["f"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "linkHorizontal", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["g"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "linkVertical", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["h"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "linkRadial", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["i"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "symbol", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["j"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "symbols", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["k"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "symbolCircle", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["l"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "symbolCross", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["m"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "symbolDiamond", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["n"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "symbolSquare", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["o"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "symbolStar", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["p"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "symbolTriangle", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["q"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "symbolWye", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["r"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveBasisClosed", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["s"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveBasisOpen", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["t"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveBasis", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["u"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveBundle", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["v"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveCardinalClosed", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["w"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveCardinalOpen", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["x"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveCardinal", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["y"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveCatmullRomClosed", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["z"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveCatmullRomOpen", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["A"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveCatmullRom", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["B"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveLinearClosed", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["C"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveLinear", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["D"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveMonotoneX", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["E"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveMonotoneY", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["F"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveNatural", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["G"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveStep", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["H"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveStepAfter", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["I"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "curveStepBefore", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["J"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "stack", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["K"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "stackOffsetExpand", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["L"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "stackOffsetDiverging", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["M"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "stackOffsetNone", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["N"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "stackOffsetSilhouette", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["O"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "stackOffsetWiggle", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["P"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "stackOrderAscending", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["Q"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "stackOrderDescending", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["R"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "stackOrderInsideOut", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["S"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "stackOrderNone", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["T"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "stackOrderReverse", function() { return __WEBPACK_IMPORTED_MODULE_24_d3_shape__["U"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25_d3_time__ = __webpack_require__(43); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeMillisecond", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeMilliseconds", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcMillisecond", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcMilliseconds", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["e"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeSecond", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["f"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeSeconds", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["g"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcSecond", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["h"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcSeconds", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["i"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeMinute", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["j"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeMinutes", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["k"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeHour", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["l"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeHours", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["m"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeDay", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["n"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeDays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["o"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeWeek", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["p"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeWeeks", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["q"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeSunday", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["r"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeSundays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["s"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeMonday", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["t"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeMondays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["u"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeTuesday", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["v"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeTuesdays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["w"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeWednesday", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["x"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeWednesdays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["y"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeThursday", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["z"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeThursdays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["A"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeFriday", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["B"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeFridays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["C"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeSaturday", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["D"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeSaturdays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["E"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeMonth", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["F"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeMonths", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["G"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeYear", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["H"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeYears", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["I"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcMinute", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["J"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcMinutes", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["K"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcHour", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["L"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcHours", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["M"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcDay", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["N"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcDays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["O"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcWeek", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["P"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcWeeks", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["Q"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcSunday", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["R"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcSundays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["S"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcMonday", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["T"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcMondays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["U"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcTuesday", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["V"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcTuesdays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["W"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcWednesday", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["X"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcWednesdays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["Y"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcThursday", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["Z"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcThursdays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["_0"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcFriday", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["_1"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcFridays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["_2"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcSaturday", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["_3"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcSaturdays", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["_4"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcMonth", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["_5"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcMonths", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["_6"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcYear", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["_7"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcYears", function() { return __WEBPACK_IMPORTED_MODULE_25_d3_time__["_8"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26_d3_time_format__ = __webpack_require__(82); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeFormatDefaultLocale", function() { return __WEBPACK_IMPORTED_MODULE_26_d3_time_format__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeFormat", function() { return __WEBPACK_IMPORTED_MODULE_26_d3_time_format__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeParse", function() { return __WEBPACK_IMPORTED_MODULE_26_d3_time_format__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcFormat", function() { return __WEBPACK_IMPORTED_MODULE_26_d3_time_format__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "utcParse", function() { return __WEBPACK_IMPORTED_MODULE_26_d3_time_format__["e"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeFormatLocale", function() { return __WEBPACK_IMPORTED_MODULE_26_d3_time_format__["f"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "isoFormat", function() { return __WEBPACK_IMPORTED_MODULE_26_d3_time_format__["g"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "isoParse", function() { return __WEBPACK_IMPORTED_MODULE_26_d3_time_format__["h"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27_d3_timer__ = __webpack_require__(44); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "now", function() { return __WEBPACK_IMPORTED_MODULE_27_d3_timer__["c"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timer", function() { return __WEBPACK_IMPORTED_MODULE_27_d3_timer__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timerFlush", function() { return __WEBPACK_IMPORTED_MODULE_27_d3_timer__["d"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return __WEBPACK_IMPORTED_MODULE_27_d3_timer__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interval", function() { return __WEBPACK_IMPORTED_MODULE_27_d3_timer__["e"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28_d3_transition__ = __webpack_require__(45); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "transition", function() { return __WEBPACK_IMPORTED_MODULE_28_d3_transition__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "active", function() { return __WEBPACK_IMPORTED_MODULE_28_d3_transition__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "interrupt", function() { return __WEBPACK_IMPORTED_MODULE_28_d3_transition__["c"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_29_d3_voronoi__ = __webpack_require__(447); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "voronoi", function() { return __WEBPACK_IMPORTED_MODULE_29_d3_voronoi__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_30_d3_zoom__ = __webpack_require__(452); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "zoom", function() { return __WEBPACK_IMPORTED_MODULE_30_d3_zoom__["a"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "zoomTransform", function() { return __WEBPACK_IMPORTED_MODULE_30_d3_zoom__["b"]; }); -/* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "zoomIdentity", function() { return __WEBPACK_IMPORTED_MODULE_30_d3_zoom__["c"]; }); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/***/ }), -/* 168 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _d = __webpack_require__(167); - -var d3 = _interopRequireWildcard(_d); - -__webpack_require__(166); - -var _oCharts = __webpack_require__(165); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -var ctrl = { - 'chart': {}, - 'svg': svg, - 'define': define, - 'domains': domains, - 'plots': plots, - 'axis': axis, - 'respond': respond, - 'translate': translate, - 'slug': slug -}; - -// make public -window.oChartInit = init; - -function translate(x, y) { - return 'translate(' + x + ',' + y + ')'; -} - -function slug(Text, space) { - return Text.toLowerCase().replace(/[^\w ]+/g, ' ').replace(/ +/g, space); -} - -function init(settings, data) { - - ctrl.data = data; - ctrl.settings = settings; - ctrl.chart.element = d3.select(ctrl.settings.selector); - ctrl.timeParse = d3.timeParse(ctrl.settings.formats.time); - - render({ - 'settings': ctrl.settings, - 'chart': ctrl.chart, - 'data': ctrl.data, - 'namespace': 'create' - } - - // Watch Window - );window.addEventListener('resize', ctrl.respond); -} - -function respond() { - - render({ - 'settings': ctrl.settings, - 'chart': ctrl.chart, - 'data': ctrl.data, - 'namespace': 'update' - }); -} - -function render(args) { - - var s = args.settings; - var c = args.chart; - var d = args.data; - var n = args.namespace; - - c = ctrl.svg(s, c)[n](); - s = ctrl.define(s, d); - s = ctrl.domains(s, d); - c = ctrl.plots(s, c, d)[n](); - c = ctrl.axis(s, c)[n](); -} - -// Create SVG -function svg(settings, chart) { - - var th = this; - - th.create = create; - th.update = update; - th.selections = selections; - th.classes = classes; - - function classes(KEY) { - - var c = { - 'background': ['o-chart__bg', 'fill-' + settings.colors.background] - }; - - return c[KEY].join(' '); - } - - function create() { - - chart.svg = chart.element.append('svg').attrs({ - 'xmlns': _oCharts.CONSTANTS.NAMESPACE - }); - - chart.bg = chart.svg.append('rect').attrs({ - 'class': th.classes('background') - }); - - chart.defs = chart.svg.append('defs'); - chart.g = chart.svg.append('g'); - - return th.update(); - } - - function update() { - - chart.svg = th.selections().svg; - chart.g = th.selections().g; - - settings.width = chart.element.property('clientWidth'); - - chart.svg.attrs({ - 'class': _oCharts.CONSTANTS.CLASS.join(' '), - 'style': _oCharts.CONSTANTS.STYLE.join(';'), - 'width': settings.width, - 'height': settings.height - }); - - chart.bg.attrs({ - 'width': settings.width, - 'height': settings.height - }); - - chart.g.attrs({ - 'transform': ctrl.translate(settings.margin[3], settings.margin[0]) - }); - - return chart; - } - - function selections() { - - chart.svg = chart.element.select('svg'); - - return { - 'element': chart.element, - 'svg': chart.svg, - 'g': chart.svg.select('g') - }; - } - - return th; -} - -function define(settings, data) { - - // this used tp be a promise chain, I'm not sure of it's importance to be so anymore - // - devowhippit - settings = defineLayout(settings); - settings = defineScales(settings); - settings = defineAxis(settings); - settings = definePlots(settings); - - return settings; -} - -function defineLayout(settings) { - - settings.innerWidth = settings.width - (settings.margin[1] + settings.margin[3]); - settings.innerHeight = settings.height - (settings.margin[0] + settings.margin[2]); - settings.top = settings.padding[0]; - settings.right = settings.innerWidth - (settings.padding[1] + settings.padding[3]); - settings.bottom = settings.innerHeight - (settings.padding[0] + settings.padding[2]); - settings.left = settings.padding[3]; - - return settings; -} - -function defineScales(settings) { - - settings.scales = {}; - settings.scales.x = d3.scaleTime().range([settings.left, settings.right]); - settings.scales.y = d3.scaleLinear().range([settings.bottom, settings.top]).clamp(true); - - return settings; -} - -function defineAxis(settings) { - - settings.axis = {}; - settings.axis.x = d3.axisBottom().scale(settings.scales.x); - settings.axis.y = d3.axisLeft().scale(settings.scales.y); - - return settings; -} - -function definePlots(settings) { - - settings.plots = {}; - settings.plots.line = d3.line().x(function (d) { - return settings.scales.x(ctrl.timeParse(d[0])); - }).y(function (d) { - return settings.scales.y(d[1]); - }); - - return settings; -} - -function domains(settings, data) { - - var min = function min(data, index) { - return d3.min(data, function (d) { - return d3.min(d.data, function (e) { - return e[index]; - }); - }); - }; - - var max = function max(data, index) { - return d3.max(data, function (d) { - return d3.max(d.data, function (e) { - return e[index]; - }); - }); - }; - - var x0 = ctrl.timeParse(min(data, 0)); - var x1 = ctrl.timeParse(max(data, 0)); - - var y0 = min(data, 1); - var y1 = max(data, 1); - - settings.scales.x.domain([x0, x1]); - settings.scales.y.domain([y0, y1]); - - return settings; -} - -function plots(settings, chart, data) { - - var th = this; - - th.create = create; - th.update = update; - th.classes = classes; - - function classes(KEY, name, id) { - - var c = { - 'plot': ['o-chart__plot', 'o-chart__plot--' + ctrl.slug(name, '-'), 'o-chart__plot--' + ctrl.slug(id, '-')], - 'line': ['o-chart__line', 'stroke-' + ctrl.slug(id, '-')], - 'dots': ['o-chart__dot', 'fill-' + ctrl.slug(id, '-'), 'stroke-' + settings.colors.background] - }; - - return c[KEY].join(' '); - } - - function create() { - - // create containers - chart.g.selectAll('.o-chart__plot').remove(); - - chart.plots = chart.g.selectAll('.o-chart__plot').data(data).enter().append('g').attr('class', function () { - var d = d3.select(this).data()[0]; - return th.classes('plot', d.label, d.label); - }); - - chart.plots.append('path').attr('class', function (d) { - return th.classes('line', '', d.color); - }).attr('d', function (d) { - return settings.plots.line(d.data); - }); - - chart.plots.selectAll('.o-chart__dot').data(function (d) { - return d.data; - }).enter().append('circle').attrs({ - 'cx': settings.plots.line.x(), - 'cy': settings.plots.line.y(), - 'r': _oCharts.CONSTANTS.DOTS_RADIUS - }).attr('class', function (d) { - var d = d3.select(this.parentNode).data()[0]; - return th.classes('dots', '', d.color); - }); - - return chart; - } - - function update() { - - return th.create(); - } - - return th; -} - -// Axis -function axis(settings, chart) { - - var th = this; - - th.create = create; - th.update = update; - th.labels = labels; - th.text = text; - th.modify = modify; - th.classes = classes; - - function classes(KEY) { - - var c = { - 'axis_top': ['o-chart__axis', 'o-chart__axis--x', 'o-chart__axis--top'], - 'axis_bottom': ['o-chart__axis', 'o-chart__axis--x', 'o-chart__axis--bottom'], - 'axis_left': ['o-chart__axis', 'o-chart__axis--y', 'o-chart__axis--left'], - 'axis_right': ['o-chart__axis', 'o-chart__axis--y', 'o-chart__axis--right'], - 'label_top': ['fill-' + settings.colors.labels, 'o-chart__label', 'o-chart__label--x', 'o-chart__label--top'], - 'label_bottom': ['fill-' + settings.colors.labels, 'o-chart__label', 'o-chart__label--x', 'o-chart__label--bottom'], - 'label_left': ['fill-' + settings.colors.labels, 'o-chart__label', 'o-chart__label--y', 'o-chart__label--left'], - 'label_right': ['fill-' + settings.colors.labels, 'o-chart__label', 'o-chart__label--y', 'o-chart__label--right'], - 'ticks': ['tick', 'fill-' + settings.colors.axis], - 'line_x': ['o-chart__axis-gap--x', 'stroke-' + settings.colors.axis], - 'line_y': ['o-chart__axis-gap--y', 'stroke-' + settings.colors.axis] - }; - - return c[KEY].join(' '); - } - - function create() { - - chart.axis = {}; - - chart.axis.x = chart.g.append('g').attr('class', th.classes('axis_bottom')); - - chart.axis.y = chart.g.append('g').attr('class', th.classes('axis_left')); - - th.update(); - - th.modify(); - - return th.labels(); - } - - function update() { - - chart.axis.x.call(settings.axis.x).attr('transform', ctrl.translate(0, settings.innerHeight)); - - chart.axis.y.call(settings.axis.y); - - chart.axis.x.select('.o-chart__axis-gap--x').attrs({ - 'x1': 0, 'y1': 0, 'y2': 0, - 'x2': settings.innerWidth - }); - - chart.axis.y.select('.o-chart__axis-gap--y').attrs({ - 'x1': 0, 'y1': 0, 'x2': 0, - 'y2': settings.innerHeight - }); - - chart.g.selectAll('.tick').attr('class', th.classes('ticks')); - - // position the x axis label - chart.g.select('.o-chart__label--x').attr('transform', function () { - var xt = d3.select(this).select('text'); - var x = settings.left + settings.innerWidth / 2; - var y = settings.height - xt.node().getBBox().height; - return ctrl.translate(x, y); - } - - // position the y axis label - );chart.g.select('.o-chart__label--y').attr('transform', function () { - var x = 0 - settings.margin[3] + d3.select(this).node().getBBox().height; - var y = settings.innerHeight / 2; - return [ctrl.translate(x, y), 'rotate(' + -90 + ')'].join(' '); - }); - - return chart; - } - - function labels() { - - // create labels - chart.axis.x.label = chart.g.append('g').attr('class', th.classes('label_bottom')); - - chart.axis.x.label.append('text').attrs({ - 'text-anchor': 'middle' - }); - - chart.axis.y.label = chart.g.append('g').attr('class', th.classes('label_left')); - - chart.axis.y.label.append('text').attrs({ - 'text-anchor': 'middle' - }); - - th.text(); - - return chart; - } - - function text() { - - // Add text to the label containers - chart.g.select('.o-chart__label--x').select('text').text(settings.labels.axis.x); - - chart.g.select('.o-chart__label--y').select('text').text(settings.labels.axis.y); - - th.update(); - } - - // This function changes the native axis styling of D3 - function modify() { - - // Add lines that visually connect the x axis to the corner - chart.axis.x.append('line').attrs({ - 'x1': 0, 'y1': 0, 'y2': 0, - 'x2': settings.innerWidth, - 'class': th.classes('line_x') - }); - - // hide the original x axis domain - chart.axis.x.select('.domain').attr('display', 'none'); - - // Add lines that visually connect the y axis to the corner - chart.axis.y.append('line').attrs({ - 'x1': 0, 'y1': 0, 'x2': 0, - 'y2': settings.innerHeight, - 'class': th.classes('line_y') - }); - - // hide the original y axis domain - chart.axis.y.select('.domain').attr('display', 'none'); - } - - return th; -} - -// Legend - -/***/ }), -/* 169 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return function() { - return x; - }; -}); - - -/***/ }), -/* 170 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__pairs__ = __webpack_require__(93); - - -/* harmony default export */ __webpack_exports__["a"] = (function(values0, values1, reduce) { - var n0 = values0.length, - n1 = values1.length, - values = new Array(n0 * n1), - i0, - i1, - i, - value0; - - if (reduce == null) reduce = __WEBPACK_IMPORTED_MODULE_0__pairs__["b" /* pair */]; - - for (i0 = i = 0; i0 < n0; ++i0) { - for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) { - values[i] = reduce(value0, values1[i1]); - } - } - - return values; -}); - - -/***/ }), -/* 171 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(a, b) { - return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; -}); - - -/***/ }), -/* 172 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__array__ = __webpack_require__(87); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__bisect__ = __webpack_require__(88); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__constant__ = __webpack_require__(169); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__extent__ = __webpack_require__(91); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__identity__ = __webpack_require__(173); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__range__ = __webpack_require__(94); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__ticks__ = __webpack_require__(96); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__threshold_sturges__ = __webpack_require__(95); - - - - - - - - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var value = __WEBPACK_IMPORTED_MODULE_4__identity__["a" /* default */], - domain = __WEBPACK_IMPORTED_MODULE_3__extent__["a" /* default */], - threshold = __WEBPACK_IMPORTED_MODULE_7__threshold_sturges__["a" /* default */]; - - function histogram(data) { - var i, - n = data.length, - x, - values = new Array(n); - - for (i = 0; i < n; ++i) { - values[i] = value(data[i], i, data); - } - - var xz = domain(values), - x0 = xz[0], - x1 = xz[1], - tz = threshold(values, x0, x1); - - // Convert number of thresholds into uniform thresholds. - if (!Array.isArray(tz)) { - tz = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_6__ticks__["c" /* tickStep */])(x0, x1, tz); - tz = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__range__["a" /* default */])(Math.ceil(x0 / tz) * tz, Math.floor(x1 / tz) * tz, tz); // exclusive - } - - // Remove any thresholds outside the domain. - var m = tz.length; - while (tz[0] <= x0) tz.shift(), --m; - while (tz[m - 1] > x1) tz.pop(), --m; - - var bins = new Array(m + 1), - bin; - - // Initialize bins. - for (i = 0; i <= m; ++i) { - bin = bins[i] = []; - bin.x0 = i > 0 ? tz[i - 1] : x0; - bin.x1 = i < m ? tz[i] : x1; - } - - // Assign data to bins by value, ignoring any outside the domain. - for (i = 0; i < n; ++i) { - x = values[i]; - if (x0 <= x && x <= x1) { - bins[__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__bisect__["a" /* default */])(tz, x, 0, m)].push(data[i]); - } - } - - return bins; - } - - histogram.value = function(_) { - return arguments.length ? (value = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__constant__["a" /* default */])(_), histogram) : value; - }; - - histogram.domain = function(_) { - return arguments.length ? (domain = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__constant__["a" /* default */])([_[0], _[1]]), histogram) : domain; - }; - - histogram.thresholds = function(_) { - return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__constant__["a" /* default */])(__WEBPACK_IMPORTED_MODULE_0__array__["b" /* slice */].call(_)) : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__constant__["a" /* default */])(_), histogram) : threshold; - }; - - return histogram; -}); - - -/***/ }), -/* 173 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return x; -}); - - -/***/ }), -/* 174 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(values, valueof) { - var n = values.length, - i = -1, - value, - max; - - if (valueof == null) { - while (++i < n) { // Find the first comparable value. - if ((value = values[i]) != null && value >= value) { - max = value; - while (++i < n) { // Compare the remaining values. - if ((value = values[i]) != null && value > max) { - max = value; - } - } - } - } - } - - else { - while (++i < n) { // Find the first comparable value. - if ((value = valueof(values[i], i, values)) != null && value >= value) { - max = value; - while (++i < n) { // Compare the remaining values. - if ((value = valueof(values[i], i, values)) != null && value > max) { - max = value; - } - } - } - } - } - - return max; -}); - - -/***/ }), -/* 175 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__number__ = __webpack_require__(20); - - -/* harmony default export */ __webpack_exports__["a"] = (function(values, valueof) { - var n = values.length, - m = n, - i = -1, - value, - sum = 0; - - if (valueof == null) { - while (++i < n) { - if (!isNaN(value = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__number__["a" /* default */])(values[i]))) sum += value; - else --m; - } - } - - else { - while (++i < n) { - if (!isNaN(value = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__number__["a" /* default */])(valueof(values[i], i, values)))) sum += value; - else --m; - } - } - - if (m) return sum / m; -}); - - -/***/ }), -/* 176 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ascending__ = __webpack_require__(17); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__number__ = __webpack_require__(20); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__quantile__ = __webpack_require__(47); - - - - -/* harmony default export */ __webpack_exports__["a"] = (function(values, valueof) { - var n = values.length, - i = -1, - value, - numbers = []; - - if (valueof == null) { - while (++i < n) { - if (!isNaN(value = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__number__["a" /* default */])(values[i]))) { - numbers.push(value); - } - } - } - - else { - while (++i < n) { - if (!isNaN(value = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__number__["a" /* default */])(valueof(values[i], i, values)))) { - numbers.push(value); - } - } - } - - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__quantile__["a" /* default */])(numbers.sort(__WEBPACK_IMPORTED_MODULE_0__ascending__["a" /* default */]), 0.5); -}); - - -/***/ }), -/* 177 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(arrays) { - var n = arrays.length, - m, - i = -1, - j = 0, - merged, - array; - - while (++i < n) j += arrays[i].length; - merged = new Array(j); - - while (--n >= 0) { - array = arrays[n]; - m = array.length; - while (--m >= 0) { - merged[--j] = array[m]; - } - } - - return merged; -}); - - -/***/ }), -/* 178 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(array, indexes) { - var i = indexes.length, permutes = new Array(i); - while (i--) permutes[i] = array[indexes[i]]; - return permutes; -}); - - -/***/ }), -/* 179 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ascending__ = __webpack_require__(17); - - -/* harmony default export */ __webpack_exports__["a"] = (function(values, compare) { - if (!(n = values.length)) return; - var n, - i = 0, - j = 0, - xi, - xj = values[j]; - - if (compare == null) compare = __WEBPACK_IMPORTED_MODULE_0__ascending__["a" /* default */]; - - while (++i < n) { - if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) { - xj = xi, j = i; - } - } - - if (compare(xj, xj) === 0) return j; -}); - - -/***/ }), -/* 180 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(array, i0, i1) { - var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0), - t, - i; - - while (m) { - i = Math.random() * m-- | 0; - t = array[m + i0]; - array[m + i0] = array[i + i0]; - array[i + i0] = t; - } - - return array; -}); - - -/***/ }), -/* 181 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(values, valueof) { - var n = values.length, - i = -1, - value, - sum = 0; - - if (valueof == null) { - while (++i < n) { - if (value = +values[i]) sum += value; // Note: zero and null are equivalent. - } - } - - else { - while (++i < n) { - if (value = +valueof(values[i], i, values)) sum += value; - } - } - - return sum; -}); - - -/***/ }), -/* 182 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__array__ = __webpack_require__(87); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ascending__ = __webpack_require__(17); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__number__ = __webpack_require__(20); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__quantile__ = __webpack_require__(47); - - - - - -/* harmony default export */ __webpack_exports__["a"] = (function(values, min, max) { - values = __WEBPACK_IMPORTED_MODULE_0__array__["a" /* map */].call(values, __WEBPACK_IMPORTED_MODULE_2__number__["a" /* default */]).sort(__WEBPACK_IMPORTED_MODULE_1__ascending__["a" /* default */]); - return Math.ceil((max - min) / (2 * (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__quantile__["a" /* default */])(values, 0.75) - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__quantile__["a" /* default */])(values, 0.25)) * Math.pow(values.length, -1 / 3))); -}); - - -/***/ }), -/* 183 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__deviation__ = __webpack_require__(90); - - -/* harmony default export */ __webpack_exports__["a"] = (function(values, min, max) { - return Math.ceil((max - min) / (3.5 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__deviation__["a" /* default */])(values) * Math.pow(values.length, -1 / 3))); -}); - - -/***/ }), -/* 184 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__transpose__ = __webpack_require__(97); - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__transpose__["a" /* default */])(arguments); -}); - - -/***/ }), -/* 185 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_axis__ = __webpack_require__(187); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_axis__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_0__src_axis__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_0__src_axis__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_0__src_axis__["d"]; }); - - - -/***/ }), -/* 186 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return slice; }); -var slice = Array.prototype.slice; - - -/***/ }), -/* 187 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = axisTop; -/* harmony export (immutable) */ __webpack_exports__["b"] = axisRight; -/* harmony export (immutable) */ __webpack_exports__["c"] = axisBottom; -/* harmony export (immutable) */ __webpack_exports__["d"] = axisLeft; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__array__ = __webpack_require__(186); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__identity__ = __webpack_require__(188); - - - -var top = 1, - right = 2, - bottom = 3, - left = 4, - epsilon = 1e-6; - -function translateX(x) { - return "translate(" + (x + 0.5) + ",0)"; -} - -function translateY(y) { - return "translate(0," + (y + 0.5) + ")"; -} - -function center(scale) { - var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset. - if (scale.round()) offset = Math.round(offset); - return function(d) { - return scale(d) + offset; - }; -} - -function entering() { - return !this.__axis; -} - -function axis(orient, scale) { - var tickArguments = [], - tickValues = null, - tickFormat = null, - tickSizeInner = 6, - tickSizeOuter = 6, - tickPadding = 3, - k = orient === top || orient === left ? -1 : 1, - x = orient === left || orient === right ? "x" : "y", - transform = orient === top || orient === bottom ? translateX : translateY; - - function axis(context) { - var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues, - format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : __WEBPACK_IMPORTED_MODULE_1__identity__["a" /* default */]) : tickFormat, - spacing = Math.max(tickSizeInner, 0) + tickPadding, - range = scale.range(), - range0 = range[0] + 0.5, - range1 = range[range.length - 1] + 0.5, - position = (scale.bandwidth ? center : __WEBPACK_IMPORTED_MODULE_1__identity__["a" /* default */])(scale.copy()), - selection = context.selection ? context.selection() : context, - path = selection.selectAll(".domain").data([null]), - tick = selection.selectAll(".tick").data(values, scale).order(), - tickExit = tick.exit(), - tickEnter = tick.enter().append("g").attr("class", "tick"), - line = tick.select("line"), - text = tick.select("text"); - - path = path.merge(path.enter().insert("path", ".tick") - .attr("class", "domain") - .attr("stroke", "#000")); - - tick = tick.merge(tickEnter); - - line = line.merge(tickEnter.append("line") - .attr("stroke", "#000") - .attr(x + "2", k * tickSizeInner)); - - text = text.merge(tickEnter.append("text") - .attr("fill", "#000") - .attr(x, k * spacing) - .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em")); - - if (context !== selection) { - path = path.transition(context); - tick = tick.transition(context); - line = line.transition(context); - text = text.transition(context); - - tickExit = tickExit.transition(context) - .attr("opacity", epsilon) - .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute("transform"); }); - - tickEnter - .attr("opacity", epsilon) - .attr("transform", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); }); - } - - tickExit.remove(); - - path - .attr("d", orient === left || orient == right - ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter - : "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter); - - tick - .attr("opacity", 1) - .attr("transform", function(d) { return transform(position(d)); }); - - line - .attr(x + "2", k * tickSizeInner); - - text - .attr(x, k * spacing) - .text(format); - - selection.filter(entering) - .attr("fill", "none") - .attr("font-size", 10) - .attr("font-family", "sans-serif") - .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle"); - - selection - .each(function() { this.__axis = position; }); - } - - axis.scale = function(_) { - return arguments.length ? (scale = _, axis) : scale; - }; - - axis.ticks = function() { - return tickArguments = __WEBPACK_IMPORTED_MODULE_0__array__["a" /* slice */].call(arguments), axis; - }; - - axis.tickArguments = function(_) { - return arguments.length ? (tickArguments = _ == null ? [] : __WEBPACK_IMPORTED_MODULE_0__array__["a" /* slice */].call(_), axis) : tickArguments.slice(); - }; - - axis.tickValues = function(_) { - return arguments.length ? (tickValues = _ == null ? null : __WEBPACK_IMPORTED_MODULE_0__array__["a" /* slice */].call(_), axis) : tickValues && tickValues.slice(); - }; - - axis.tickFormat = function(_) { - return arguments.length ? (tickFormat = _, axis) : tickFormat; - }; - - axis.tickSize = function(_) { - return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner; - }; - - axis.tickSizeInner = function(_) { - return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner; - }; - - axis.tickSizeOuter = function(_) { - return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter; - }; - - axis.tickPadding = function(_) { - return arguments.length ? (tickPadding = +_, axis) : tickPadding; - }; - - return axis; -} - -function axisTop(scale) { - return axis(top, scale); -} - -function axisRight(scale) { - return axis(right, scale); -} - -function axisBottom(scale) { - return axis(bottom, scale); -} - -function axisLeft(scale) { - return axis(left, scale); -} - - -/***/ }), -/* 188 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return x; -}); - - -/***/ }), -/* 189 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_brush__ = __webpack_require__(190); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_brush__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_0__src_brush__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_0__src_brush__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_0__src_brush__["d"]; }); - - - -/***/ }), -/* 190 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["d"] = brushSelection; -/* harmony export (immutable) */ __webpack_exports__["b"] = brushX; -/* harmony export (immutable) */ __webpack_exports__["c"] = brushY; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_dispatch__ = __webpack_require__(12); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_drag__ = __webpack_require__(51); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_d3_interpolate__ = __webpack_require__(4); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_d3_selection__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_d3_transition__ = __webpack_require__(45); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__constant__ = __webpack_require__(191); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__event__ = __webpack_require__(192); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__noevent__ = __webpack_require__(193); - - - - - - - - - -var MODE_DRAG = {name: "drag"}, - MODE_SPACE = {name: "space"}, - MODE_HANDLE = {name: "handle"}, - MODE_CENTER = {name: "center"}; - -var X = { - name: "x", - handles: ["e", "w"].map(type), - input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; }, - output: function(xy) { return xy && [xy[0][0], xy[1][0]]; } -}; - -var Y = { - name: "y", - handles: ["n", "s"].map(type), - input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; }, - output: function(xy) { return xy && [xy[0][1], xy[1][1]]; } -}; - -var XY = { - name: "xy", - handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(type), - input: function(xy) { return xy; }, - output: function(xy) { return xy; } -}; - -var cursors = { - overlay: "crosshair", - selection: "move", - n: "ns-resize", - e: "ew-resize", - s: "ns-resize", - w: "ew-resize", - nw: "nwse-resize", - ne: "nesw-resize", - se: "nwse-resize", - sw: "nesw-resize" -}; - -var flipX = { - e: "w", - w: "e", - nw: "ne", - ne: "nw", - se: "sw", - sw: "se" -}; - -var flipY = { - n: "s", - s: "n", - nw: "sw", - ne: "se", - se: "ne", - sw: "nw" -}; - -var signsX = { - overlay: +1, - selection: +1, - n: null, - e: +1, - s: null, - w: -1, - nw: -1, - ne: +1, - se: +1, - sw: -1 -}; - -var signsY = { - overlay: +1, - selection: +1, - n: -1, - e: null, - s: +1, - w: null, - nw: -1, - ne: -1, - se: +1, - sw: +1 -}; - -function type(t) { - return {type: t}; -} - -// Ignore right-click, since that should open the context menu. -function defaultFilter() { - return !__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].button; -} - -function defaultExtent() { - var svg = this.ownerSVGElement || this; - return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]]; -} - -// Like d3.local, but with the name “__brush” rather than auto-generated. -function local(node) { - while (!node.__brush) if (!(node = node.parentNode)) return; - return node.__brush; -} - -function empty(extent) { - return extent[0][0] === extent[1][0] - || extent[0][1] === extent[1][1]; -} - -function brushSelection(node) { - var state = node.__brush; - return state ? state.dim.output(state.selection) : null; -} - -function brushX() { - return brush(X); -} - -function brushY() { - return brush(Y); -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return brush(XY); -}); - -function brush(dim) { - var extent = defaultExtent, - filter = defaultFilter, - listeners = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_dispatch__["dispatch"])(brush, "start", "brush", "end"), - handleSize = 6, - touchending; - - function brush(group) { - var overlay = group - .property("__brush", initialize) - .selectAll(".overlay") - .data([type("overlay")]); - - overlay.enter().append("rect") - .attr("class", "overlay") - .attr("pointer-events", "all") - .attr("cursor", cursors.overlay) - .merge(overlay) - .each(function() { - var extent = local(this).extent; - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["b" /* select */])(this) - .attr("x", extent[0][0]) - .attr("y", extent[0][1]) - .attr("width", extent[1][0] - extent[0][0]) - .attr("height", extent[1][1] - extent[0][1]); - }); - - group.selectAll(".selection") - .data([type("selection")]) - .enter().append("rect") - .attr("class", "selection") - .attr("cursor", cursors.selection) - .attr("fill", "#777") - .attr("fill-opacity", 0.3) - .attr("stroke", "#fff") - .attr("shape-rendering", "crispEdges"); - - var handle = group.selectAll(".handle") - .data(dim.handles, function(d) { return d.type; }); - - handle.exit().remove(); - - handle.enter().append("rect") - .attr("class", function(d) { return "handle handle--" + d.type; }) - .attr("cursor", function(d) { return cursors[d.type]; }); - - group - .each(redraw) - .attr("fill", "none") - .attr("pointer-events", "all") - .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)") - .on("mousedown.brush touchstart.brush", started); - } - - brush.move = function(group, selection) { - if (group.selection) { - group - .on("start.brush", function() { emitter(this, arguments).beforestart().start(); }) - .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); }) - .tween("brush", function() { - var that = this, - state = that.__brush, - emit = emitter(that, arguments), - selection0 = state.selection, - selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent), - i = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2_d3_interpolate__["f" /* interpolate */])(selection0, selection1); - - function tween(t) { - state.selection = t === 1 && empty(selection1) ? null : i(t); - redraw.call(that); - emit.brush(); - } - - return selection0 && selection1 ? tween : tween(1); - }); - } else { - group - .each(function() { - var that = this, - args = arguments, - state = that.__brush, - selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent), - emit = emitter(that, args).beforestart(); - - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4_d3_transition__["c" /* interrupt */])(that); - state.selection = selection1 == null || empty(selection1) ? null : selection1; - redraw.call(that); - emit.start().brush().end(); - }); - } - }; - - function redraw() { - var group = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["b" /* select */])(this), - selection = local(this).selection; - - if (selection) { - group.selectAll(".selection") - .style("display", null) - .attr("x", selection[0][0]) - .attr("y", selection[0][1]) - .attr("width", selection[1][0] - selection[0][0]) - .attr("height", selection[1][1] - selection[0][1]); - - group.selectAll(".handle") - .style("display", null) - .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; }) - .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; }) - .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; }) - .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; }); - } - - else { - group.selectAll(".selection,.handle") - .style("display", "none") - .attr("x", null) - .attr("y", null) - .attr("width", null) - .attr("height", null); - } - } - - function emitter(that, args) { - return that.__brush.emitter || new Emitter(that, args); - } - - function Emitter(that, args) { - this.that = that; - this.args = args; - this.state = that.__brush; - this.active = 0; - } - - Emitter.prototype = { - beforestart: function() { - if (++this.active === 1) this.state.emitter = this, this.starting = true; - return this; - }, - start: function() { - if (this.starting) this.starting = false, this.emit("start"); - return this; - }, - brush: function() { - this.emit("brush"); - return this; - }, - end: function() { - if (--this.active === 0) delete this.state.emitter, this.emit("end"); - return this; - }, - emit: function(type) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["q" /* customEvent */])(new __WEBPACK_IMPORTED_MODULE_6__event__["a" /* default */](brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]); - } - }; - - function started() { - if (__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].touches) { if (__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].changedTouches.length < __WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].touches.length) return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__noevent__["a" /* default */])(); } - else if (touchending) return; - if (!filter.apply(this, arguments)) return; - - var that = this, - type = __WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].target.__data__.type, - mode = (__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].altKey ? MODE_CENTER : MODE_HANDLE), - signX = dim === Y ? null : signsX[type], - signY = dim === X ? null : signsY[type], - state = local(that), - extent = state.extent, - selection = state.selection, - W = extent[0][0], w0, w1, - N = extent[0][1], n0, n1, - E = extent[1][0], e0, e1, - S = extent[1][1], s0, s1, - dx, - dy, - moving, - shifting = signX && signY && __WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].shiftKey, - lockX, - lockY, - point0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["j" /* mouse */])(that), - point = point0, - emit = emitter(that, arguments).beforestart(); - - if (type === "overlay") { - state.selection = selection = [ - [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]], - [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0] - ]; - } else { - w0 = selection[0][0]; - n0 = selection[0][1]; - e0 = selection[1][0]; - s0 = selection[1][1]; - } - - w1 = w0; - n1 = n0; - e1 = e0; - s1 = s0; - - var group = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["b" /* select */])(that) - .attr("pointer-events", "none"); - - var overlay = group.selectAll(".overlay") - .attr("cursor", cursors[type]); - - if (__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].touches) { - group - .on("touchmove.brush", moved, true) - .on("touchend.brush touchcancel.brush", ended, true); - } else { - var view = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["b" /* select */])(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].view) - .on("keydown.brush", keydowned, true) - .on("keyup.brush", keyupped, true) - .on("mousemove.brush", moved, true) - .on("mouseup.brush", ended, true); - - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_drag__["b" /* dragDisable */])(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].view); - } - - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__noevent__["b" /* nopropagation */])(); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4_d3_transition__["c" /* interrupt */])(that); - redraw.call(that); - emit.start(); - - function moved() { - var point1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["j" /* mouse */])(that); - if (shifting && !lockX && !lockY) { - if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true; - else lockX = true; - } - point = point1; - moving = true; - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__noevent__["a" /* default */])(); - move(); - } - - function move() { - var t; - - dx = point[0] - point0[0]; - dy = point[1] - point0[1]; - - switch (mode) { - case MODE_SPACE: - case MODE_DRAG: { - if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx; - if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy; - break; - } - case MODE_HANDLE: { - if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0; - else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx; - if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0; - else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy; - break; - } - case MODE_CENTER: { - if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX)); - if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY)); - break; - } - } - - if (e1 < w1) { - signX *= -1; - t = w0, w0 = e0, e0 = t; - t = w1, w1 = e1, e1 = t; - if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]); - } - - if (s1 < n1) { - signY *= -1; - t = n0, n0 = s0, s0 = t; - t = n1, n1 = s1, s1 = t; - if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]); - } - - if (state.selection) selection = state.selection; // May be set by brush.move! - if (lockX) w1 = selection[0][0], e1 = selection[1][0]; - if (lockY) n1 = selection[0][1], s1 = selection[1][1]; - - if (selection[0][0] !== w1 - || selection[0][1] !== n1 - || selection[1][0] !== e1 - || selection[1][1] !== s1) { - state.selection = [[w1, n1], [e1, s1]]; - redraw.call(that); - emit.brush(); - } - } - - function ended() { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__noevent__["b" /* nopropagation */])(); - if (__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].touches) { - if (__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].touches.length) return; - if (touchending) clearTimeout(touchending); - touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! - group.on("touchmove.brush touchend.brush touchcancel.brush", null); - } else { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_drag__["c" /* dragEnable */])(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].view, moving); - view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null); - } - group.attr("pointer-events", "all"); - overlay.attr("cursor", cursors.overlay); - if (state.selection) selection = state.selection; // May be set by brush.move (on start)! - if (empty(selection)) state.selection = null, redraw.call(that); - emit.end(); - } - - function keydowned() { - switch (__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].keyCode) { - case 16: { // SHIFT - shifting = signX && signY; - break; - } - case 18: { // ALT - if (mode === MODE_HANDLE) { - if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; - if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; - mode = MODE_CENTER; - move(); - } - break; - } - case 32: { // SPACE; takes priority over ALT - if (mode === MODE_HANDLE || mode === MODE_CENTER) { - if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx; - if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy; - mode = MODE_SPACE; - overlay.attr("cursor", cursors.selection); - move(); - } - break; - } - default: return; - } - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__noevent__["a" /* default */])(); - } - - function keyupped() { - switch (__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].keyCode) { - case 16: { // SHIFT - if (shifting) { - lockX = lockY = shifting = false; - move(); - } - break; - } - case 18: { // ALT - if (mode === MODE_CENTER) { - if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; - if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; - mode = MODE_HANDLE; - move(); - } - break; - } - case 32: { // SPACE - if (mode === MODE_SPACE) { - if (__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].altKey) { - if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX; - if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY; - mode = MODE_CENTER; - } else { - if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1; - if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1; - mode = MODE_HANDLE; - } - overlay.attr("cursor", cursors[type]); - move(); - } - break; - } - default: return; - } - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__noevent__["a" /* default */])(); - } - } - - function initialize() { - var state = this.__brush || {selection: null}; - state.extent = extent.apply(this, arguments); - state.dim = dim; - return state; - } - - brush.extent = function(_) { - return arguments.length ? (extent = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__constant__["a" /* default */])([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent; - }; - - brush.filter = function(_) { - return arguments.length ? (filter = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__constant__["a" /* default */])(!!_), brush) : filter; - }; - - brush.handleSize = function(_) { - return arguments.length ? (handleSize = +_, brush) : handleSize; - }; - - brush.on = function() { - var value = listeners.on.apply(listeners, arguments); - return value === listeners ? brush : value; - }; - - return brush; -} - - -/***/ }), -/* 191 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return function() { - return x; - }; -}); - - -/***/ }), -/* 192 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(target, type, selection) { - this.target = target; - this.type = type; - this.selection = selection; -}); - - -/***/ }), -/* 193 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = nopropagation; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); - - -function nopropagation() { - __WEBPACK_IMPORTED_MODULE_0_d3_selection__["p" /* event */].stopImmediatePropagation(); -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - __WEBPACK_IMPORTED_MODULE_0_d3_selection__["p" /* event */].preventDefault(); - __WEBPACK_IMPORTED_MODULE_0_d3_selection__["p" /* event */].stopImmediatePropagation(); -}); - - -/***/ }), -/* 194 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_chord__ = __webpack_require__(196); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_chord__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_ribbon__ = __webpack_require__(198); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__src_ribbon__["a"]; }); - - - - -/***/ }), -/* 195 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return slice; }); -var slice = Array.prototype.slice; - - -/***/ }), -/* 196 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_array__ = __webpack_require__(3); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__math__ = __webpack_require__(99); - - - -function compareValue(compare) { - return function(a, b) { - return compare( - a.source.value + a.target.value, - b.source.value + b.target.value - ); - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var padAngle = 0, - sortGroups = null, - sortSubgroups = null, - sortChords = null; - - function chord(matrix) { - var n = matrix.length, - groupSums = [], - groupIndex = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["v" /* range */])(n), - subgroupIndex = [], - chords = [], - groups = chords.groups = new Array(n), - subgroups = new Array(n * n), - k, - x, - x0, - dx, - i, - j; - - // Compute the sum. - k = 0, i = -1; while (++i < n) { - x = 0, j = -1; while (++j < n) { - x += matrix[i][j]; - } - groupSums.push(x); - subgroupIndex.push(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["v" /* range */])(n)); - k += x; - } - - // Sort groups… - if (sortGroups) groupIndex.sort(function(a, b) { - return sortGroups(groupSums[a], groupSums[b]); - }); - - // Sort subgroups… - if (sortSubgroups) subgroupIndex.forEach(function(d, i) { - d.sort(function(a, b) { - return sortSubgroups(matrix[i][a], matrix[i][b]); - }); - }); - - // Convert the sum to scaling factor for [0, 2pi]. - // TODO Allow start and end angle to be specified? - // TODO Allow padding to be specified as percentage? - k = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* max */])(0, __WEBPACK_IMPORTED_MODULE_1__math__["e" /* tau */] - padAngle * n) / k; - dx = k ? padAngle : __WEBPACK_IMPORTED_MODULE_1__math__["e" /* tau */] / n; - - // Compute the start and end angle for each group and subgroup. - // Note: Opera has a bug reordering object literal properties! - x = 0, i = -1; while (++i < n) { - x0 = x, j = -1; while (++j < n) { - var di = groupIndex[i], - dj = subgroupIndex[di][j], - v = matrix[di][dj], - a0 = x, - a1 = x += v * k; - subgroups[dj * n + di] = { - index: di, - subindex: dj, - startAngle: a0, - endAngle: a1, - value: v - }; - } - groups[di] = { - index: di, - startAngle: x0, - endAngle: x, - value: groupSums[di] - }; - x += dx; - } - - // Generate chords for each (non-empty) subgroup-subgroup link. - i = -1; while (++i < n) { - j = i - 1; while (++j < n) { - var source = subgroups[j * n + i], - target = subgroups[i * n + j]; - if (source.value || target.value) { - chords.push(source.value < target.value - ? {source: target, target: source} - : {source: source, target: target}); - } - } - } - - return sortChords ? chords.sort(sortChords) : chords; - } - - chord.padAngle = function(_) { - return arguments.length ? (padAngle = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* max */])(0, _), chord) : padAngle; - }; - - chord.sortGroups = function(_) { - return arguments.length ? (sortGroups = _, chord) : sortGroups; - }; - - chord.sortSubgroups = function(_) { - return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups; - }; - - chord.sortChords = function(_) { - return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._; - }; - - return chord; -}); - - -/***/ }), -/* 197 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return function() { - return x; - }; -}); - - -/***/ }), -/* 198 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__array__ = __webpack_require__(195); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__constant__ = __webpack_require__(197); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__math__ = __webpack_require__(99); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_d3_path__ = __webpack_require__(14); - - - - - -function defaultSource(d) { - return d.source; -} - -function defaultTarget(d) { - return d.target; -} - -function defaultRadius(d) { - return d.radius; -} - -function defaultStartAngle(d) { - return d.startAngle; -} - -function defaultEndAngle(d) { - return d.endAngle; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var source = defaultSource, - target = defaultTarget, - radius = defaultRadius, - startAngle = defaultStartAngle, - endAngle = defaultEndAngle, - context = null; - - function ribbon() { - var buffer, - argv = __WEBPACK_IMPORTED_MODULE_0__array__["a" /* slice */].call(arguments), - s = source.apply(this, argv), - t = target.apply(this, argv), - sr = +radius.apply(this, (argv[0] = s, argv)), - sa0 = startAngle.apply(this, argv) - __WEBPACK_IMPORTED_MODULE_2__math__["a" /* halfPi */], - sa1 = endAngle.apply(this, argv) - __WEBPACK_IMPORTED_MODULE_2__math__["a" /* halfPi */], - sx0 = sr * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["b" /* cos */])(sa0), - sy0 = sr * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["c" /* sin */])(sa0), - tr = +radius.apply(this, (argv[0] = t, argv)), - ta0 = startAngle.apply(this, argv) - __WEBPACK_IMPORTED_MODULE_2__math__["a" /* halfPi */], - ta1 = endAngle.apply(this, argv) - __WEBPACK_IMPORTED_MODULE_2__math__["a" /* halfPi */]; - - if (!context) context = buffer = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_path__["a" /* path */])(); - - context.moveTo(sx0, sy0); - context.arc(0, 0, sr, sa0, sa1); - if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr? - context.quadraticCurveTo(0, 0, tr * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["b" /* cos */])(ta0), tr * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["c" /* sin */])(ta0)); - context.arc(0, 0, tr, ta0, ta1); - } - context.quadraticCurveTo(0, 0, sx0, sy0); - context.closePath(); - - if (buffer) return context = null, buffer + "" || null; - } - - ribbon.radius = function(_) { - return arguments.length ? (radius = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), ribbon) : radius; - }; - - ribbon.startAngle = function(_) { - return arguments.length ? (startAngle = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), ribbon) : startAngle; - }; - - ribbon.endAngle = function(_) { - return arguments.length ? (endAngle = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), ribbon) : endAngle; - }; - - ribbon.source = function(_) { - return arguments.length ? (source = _, ribbon) : source; - }; - - ribbon.target = function(_) { - return arguments.length ? (target = _, ribbon) : target; - }; - - ribbon.context = function(_) { - return arguments.length ? ((context = _ == null ? null : _), ribbon) : context; - }; - - return ribbon; -}); - - -/***/ }), -/* 199 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(map) { - var entries = []; - for (var key in map) entries.push({key: key, value: map[key]}); - return entries; -}); - - -/***/ }), -/* 200 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(map) { - var keys = []; - for (var key in map) keys.push(key); - return keys; -}); - - -/***/ }), -/* 201 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__map__ = __webpack_require__(48); - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var keys = [], - sortKeys = [], - sortValues, - rollup, - nest; - - function apply(array, depth, createResult, setResult) { - if (depth >= keys.length) return rollup != null - ? rollup(array) : (sortValues != null - ? array.sort(sortValues) - : array); - - var i = -1, - n = array.length, - key = keys[depth++], - keyValue, - value, - valuesByKey = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__map__["a" /* default */])(), - values, - result = createResult(); - - while (++i < n) { - if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) { - values.push(value); - } else { - valuesByKey.set(keyValue, [value]); - } - } - - valuesByKey.each(function(values, key) { - setResult(result, key, apply(values, depth, createResult, setResult)); - }); - - return result; - } - - function entries(map, depth) { - if (++depth > keys.length) return map; - var array, sortKey = sortKeys[depth - 1]; - if (rollup != null && depth >= keys.length) array = map.entries(); - else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); }); - return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array; - } - - return nest = { - object: function(array) { return apply(array, 0, createObject, setObject); }, - map: function(array) { return apply(array, 0, createMap, setMap); }, - entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); }, - key: function(d) { keys.push(d); return nest; }, - sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; }, - sortValues: function(order) { sortValues = order; return nest; }, - rollup: function(f) { rollup = f; return nest; } - }; -}); - -function createObject() { - return {}; -} - -function setObject(object, key, value) { - object[key] = value; -} - -function createMap() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__map__["a" /* default */])(); -} - -function setMap(map, key, value) { - map.set(key, value); -} - - -/***/ }), -/* 202 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__map__ = __webpack_require__(48); - - -function Set() {} - -var proto = __WEBPACK_IMPORTED_MODULE_0__map__["a" /* default */].prototype; - -Set.prototype = set.prototype = { - constructor: Set, - has: proto.has, - add: function(value) { - value += ""; - this[__WEBPACK_IMPORTED_MODULE_0__map__["b" /* prefix */] + value] = value; - return this; - }, - remove: proto.remove, - clear: proto.clear, - values: proto.keys, - size: proto.size, - empty: proto.empty, - each: proto.each -}; - -function set(object, f) { - var set = new Set; - - // Copy constructor. - if (object instanceof Set) object.each(function(value) { set.add(value); }); - - // Otherwise, assume it’s an array. - else if (object) { - var i = -1, n = object.length; - if (f == null) while (++i < n) set.add(object[i]); - else while (++i < n) set.add(f(object[i], i, object)); - } - - return set; -} - -/* harmony default export */ __webpack_exports__["a"] = (set); - - -/***/ }), -/* 203 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(map) { - var values = []; - for (var key in map) values.push(map[key]); - return values; -}); - - -/***/ }), -/* 204 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = cubehelix; -/* unused harmony export Cubehelix */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__define__ = __webpack_require__(50); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__color__ = __webpack_require__(49); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__math__ = __webpack_require__(100); - - - - -var A = -0.14861, - B = +1.78277, - C = -0.29227, - D = -0.90649, - E = +1.97294, - ED = E * D, - EB = E * B, - BC_DA = B * C - D * A; - -function cubehelixConvert(o) { - if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity); - if (!(o instanceof __WEBPACK_IMPORTED_MODULE_1__color__["b" /* Rgb */])) o = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__color__["c" /* rgbConvert */])(o); - var r = o.r / 255, - g = o.g / 255, - b = o.b / 255, - l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB), - bl = b - l, - k = (E * (g - l) - C * bl) / D, - s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1 - h = s ? Math.atan2(k, bl) * __WEBPACK_IMPORTED_MODULE_2__math__["a" /* rad2deg */] - 120 : NaN; - return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity); -} - -function cubehelix(h, s, l, opacity) { - return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity); -} - -function Cubehelix(h, s, l, opacity) { - this.h = +h; - this.s = +s; - this.l = +l; - this.opacity = +opacity; -} - -__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__define__["a" /* default */])(Cubehelix, cubehelix, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__define__["b" /* extend */])(__WEBPACK_IMPORTED_MODULE_1__color__["d" /* Color */], { - brighter: function(k) { - k = k == null ? __WEBPACK_IMPORTED_MODULE_1__color__["e" /* brighter */] : Math.pow(__WEBPACK_IMPORTED_MODULE_1__color__["e" /* brighter */], k); - return new Cubehelix(this.h, this.s, this.l * k, this.opacity); - }, - darker: function(k) { - k = k == null ? __WEBPACK_IMPORTED_MODULE_1__color__["f" /* darker */] : Math.pow(__WEBPACK_IMPORTED_MODULE_1__color__["f" /* darker */], k); - return new Cubehelix(this.h, this.s, this.l * k, this.opacity); - }, - rgb: function() { - var h = isNaN(this.h) ? 0 : (this.h + 120) * __WEBPACK_IMPORTED_MODULE_2__math__["b" /* deg2rad */], - l = +this.l, - a = isNaN(this.s) ? 0 : this.s * l * (1 - l), - cosh = Math.cos(h), - sinh = Math.sin(h); - return new __WEBPACK_IMPORTED_MODULE_1__color__["b" /* Rgb */]( - 255 * (l + a * (A * cosh + B * sinh)), - 255 * (l + a * (C * cosh + D * sinh)), - 255 * (l + a * (E * cosh)), - this.opacity - ); - } -})); - - -/***/ }), -/* 205 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = lab; -/* unused harmony export Lab */ -/* harmony export (immutable) */ __webpack_exports__["a"] = hcl; -/* unused harmony export Hcl */ -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__define__ = __webpack_require__(50); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__color__ = __webpack_require__(49); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__math__ = __webpack_require__(100); - - - - -var Kn = 18, - Xn = 0.950470, // D65 standard referent - Yn = 1, - Zn = 1.088830, - t0 = 4 / 29, - t1 = 6 / 29, - t2 = 3 * t1 * t1, - t3 = t1 * t1 * t1; - -function labConvert(o) { - if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity); - if (o instanceof Hcl) { - var h = o.h * __WEBPACK_IMPORTED_MODULE_2__math__["b" /* deg2rad */]; - return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity); - } - if (!(o instanceof __WEBPACK_IMPORTED_MODULE_1__color__["b" /* Rgb */])) o = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__color__["c" /* rgbConvert */])(o); - var b = rgb2xyz(o.r), - a = rgb2xyz(o.g), - l = rgb2xyz(o.b), - x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn), - y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn), - z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn); - return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity); -} - -function lab(l, a, b, opacity) { - return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity); -} - -function Lab(l, a, b, opacity) { - this.l = +l; - this.a = +a; - this.b = +b; - this.opacity = +opacity; -} - -__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__define__["a" /* default */])(Lab, lab, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__define__["b" /* extend */])(__WEBPACK_IMPORTED_MODULE_1__color__["d" /* Color */], { - brighter: function(k) { - return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity); - }, - darker: function(k) { - return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity); - }, - rgb: function() { - var y = (this.l + 16) / 116, - x = isNaN(this.a) ? y : y + this.a / 500, - z = isNaN(this.b) ? y : y - this.b / 200; - y = Yn * lab2xyz(y); - x = Xn * lab2xyz(x); - z = Zn * lab2xyz(z); - return new __WEBPACK_IMPORTED_MODULE_1__color__["b" /* Rgb */]( - xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB - xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z), - xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z), - this.opacity - ); - } -})); - -function xyz2lab(t) { - return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0; -} - -function lab2xyz(t) { - return t > t1 ? t * t * t : t2 * (t - t0); -} - -function xyz2rgb(x) { - return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055); -} - -function rgb2xyz(x) { - return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4); -} - -function hclConvert(o) { - if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity); - if (!(o instanceof Lab)) o = labConvert(o); - var h = Math.atan2(o.b, o.a) * __WEBPACK_IMPORTED_MODULE_2__math__["a" /* rad2deg */]; - return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity); -} - -function hcl(h, c, l, opacity) { - return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity); -} - -function Hcl(h, c, l, opacity) { - this.h = +h; - this.c = +c; - this.l = +l; - this.opacity = +opacity; -} - -__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__define__["a" /* default */])(Hcl, hcl, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__define__["b" /* extend */])(__WEBPACK_IMPORTED_MODULE_1__color__["d" /* Color */], { - brighter: function(k) { - return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity); - }, - darker: function(k) { - return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity); - }, - rgb: function() { - return labConvert(this).rgb(); - } -})); - - -/***/ }), -/* 206 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -var noop = {value: function() {}}; - -function dispatch() { - for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { - if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t); - _[t] = []; - } - return new Dispatch(_); -} - -function Dispatch(_) { - this._ = _; -} - -function parseTypenames(typenames, types) { - return typenames.trim().split(/^|\s+/).map(function(t) { - var name = "", i = t.indexOf("."); - if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); - if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); - return {type: t, name: name}; - }); -} - -Dispatch.prototype = dispatch.prototype = { - constructor: Dispatch, - on: function(typename, callback) { - var _ = this._, - T = parseTypenames(typename + "", _), - t, - i = -1, - n = T.length; - - // If no callback was specified, return the callback of the given type and name. - if (arguments.length < 2) { - while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t; - return; - } - - // If a type was specified, set the callback for the given type and name. - // Otherwise, if a null callback was specified, remove callbacks of the given name. - if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); - while (++i < n) { - if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback); - else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null); - } - - return this; - }, - copy: function() { - var copy = {}, _ = this._; - for (var t in _) copy[t] = _[t].slice(); - return new Dispatch(copy); - }, - call: function(type, that) { - if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; - if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); - for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); - }, - apply: function(type, that, args) { - if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); - for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); - } -}; - -function get(type, name) { - for (var i = 0, n = type.length, c; i < n; ++i) { - if ((c = type[i]).name === name) { - return c.value; - } - } -} - -function set(type, name, callback) { - for (var i = 0, n = type.length; i < n; ++i) { - if (type[i].name === name) { - type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1)); - break; - } - } - if (callback != null) type.push({name: name, value: callback}); - return type; -} - -/* harmony default export */ __webpack_exports__["a"] = (dispatch); - - -/***/ }), -/* 207 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return function() { - return x; - }; -}); - - -/***/ }), -/* 208 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_dispatch__ = __webpack_require__(12); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_selection__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__nodrag__ = __webpack_require__(101); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__noevent__ = __webpack_require__(102); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__constant__ = __webpack_require__(207); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__event__ = __webpack_require__(209); - - - - - - - -// Ignore right-click, since that should open the context menu. -function defaultFilter() { - return !__WEBPACK_IMPORTED_MODULE_1_d3_selection__["p" /* event */].button; -} - -function defaultContainer() { - return this.parentNode; -} - -function defaultSubject(d) { - return d == null ? {x: __WEBPACK_IMPORTED_MODULE_1_d3_selection__["p" /* event */].x, y: __WEBPACK_IMPORTED_MODULE_1_d3_selection__["p" /* event */].y} : d; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var filter = defaultFilter, - container = defaultContainer, - subject = defaultSubject, - gestures = {}, - listeners = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_dispatch__["dispatch"])("start", "drag", "end"), - active = 0, - mousedownx, - mousedowny, - mousemoving, - touchending, - clickDistance2 = 0; - - function drag(selection) { - selection - .on("mousedown.drag", mousedowned) - .on("touchstart.drag", touchstarted) - .on("touchmove.drag", touchmoved) - .on("touchend.drag touchcancel.drag", touchended) - .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); - } - - function mousedowned() { - if (touchending || !filter.apply(this, arguments)) return; - var gesture = beforestart("mouse", container.apply(this, arguments), __WEBPACK_IMPORTED_MODULE_1_d3_selection__["j" /* mouse */], this, arguments); - if (!gesture) return; - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_selection__["b" /* select */])(__WEBPACK_IMPORTED_MODULE_1_d3_selection__["p" /* event */].view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__nodrag__["a" /* default */])(__WEBPACK_IMPORTED_MODULE_1_d3_selection__["p" /* event */].view); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__noevent__["b" /* nopropagation */])(); - mousemoving = false; - mousedownx = __WEBPACK_IMPORTED_MODULE_1_d3_selection__["p" /* event */].clientX; - mousedowny = __WEBPACK_IMPORTED_MODULE_1_d3_selection__["p" /* event */].clientY; - gesture("start"); - } - - function mousemoved() { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__noevent__["a" /* default */])(); - if (!mousemoving) { - var dx = __WEBPACK_IMPORTED_MODULE_1_d3_selection__["p" /* event */].clientX - mousedownx, dy = __WEBPACK_IMPORTED_MODULE_1_d3_selection__["p" /* event */].clientY - mousedowny; - mousemoving = dx * dx + dy * dy > clickDistance2; - } - gestures.mouse("drag"); - } - - function mouseupped() { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_selection__["b" /* select */])(__WEBPACK_IMPORTED_MODULE_1_d3_selection__["p" /* event */].view).on("mousemove.drag mouseup.drag", null); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__nodrag__["b" /* yesdrag */])(__WEBPACK_IMPORTED_MODULE_1_d3_selection__["p" /* event */].view, mousemoving); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__noevent__["a" /* default */])(); - gestures.mouse("end"); - } - - function touchstarted() { - if (!filter.apply(this, arguments)) return; - var touches = __WEBPACK_IMPORTED_MODULE_1_d3_selection__["p" /* event */].changedTouches, - c = container.apply(this, arguments), - n = touches.length, i, gesture; - - for (i = 0; i < n; ++i) { - if (gesture = beforestart(touches[i].identifier, c, __WEBPACK_IMPORTED_MODULE_1_d3_selection__["m" /* touch */], this, arguments)) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__noevent__["b" /* nopropagation */])(); - gesture("start"); - } - } - } - - function touchmoved() { - var touches = __WEBPACK_IMPORTED_MODULE_1_d3_selection__["p" /* event */].changedTouches, - n = touches.length, i, gesture; - - for (i = 0; i < n; ++i) { - if (gesture = gestures[touches[i].identifier]) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__noevent__["a" /* default */])(); - gesture("drag"); - } - } - } - - function touchended() { - var touches = __WEBPACK_IMPORTED_MODULE_1_d3_selection__["p" /* event */].changedTouches, - n = touches.length, i, gesture; - - if (touchending) clearTimeout(touchending); - touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! - for (i = 0; i < n; ++i) { - if (gesture = gestures[touches[i].identifier]) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__noevent__["b" /* nopropagation */])(); - gesture("end"); - } - } - } - - function beforestart(id, container, point, that, args) { - var p = point(container, id), s, dx, dy, - sublisteners = listeners.copy(); - - if (!__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_selection__["q" /* customEvent */])(new __WEBPACK_IMPORTED_MODULE_5__event__["a" /* default */](drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() { - if ((__WEBPACK_IMPORTED_MODULE_1_d3_selection__["p" /* event */].subject = s = subject.apply(that, args)) == null) return false; - dx = s.x - p[0] || 0; - dy = s.y - p[1] || 0; - return true; - })) return; - - return function gesture(type) { - var p0 = p, n; - switch (type) { - case "start": gestures[id] = gesture, n = active++; break; - case "end": delete gestures[id], --active; // nobreak - case "drag": p = point(container, id), n = active; break; - } - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_selection__["q" /* customEvent */])(new __WEBPACK_IMPORTED_MODULE_5__event__["a" /* default */](drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]); - }; - } - - drag.filter = function(_) { - return arguments.length ? (filter = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__constant__["a" /* default */])(!!_), drag) : filter; - }; - - drag.container = function(_) { - return arguments.length ? (container = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__constant__["a" /* default */])(_), drag) : container; - }; - - drag.subject = function(_) { - return arguments.length ? (subject = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__constant__["a" /* default */])(_), drag) : subject; - }; - - drag.on = function() { - var value = listeners.on.apply(listeners, arguments); - return value === listeners ? drag : value; - }; - - drag.clickDistance = function(_) { - return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2); - }; - - return drag; -}); - - -/***/ }), -/* 209 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = DragEvent; -function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) { - this.target = target; - this.type = type; - this.subject = subject; - this.identifier = id; - this.active = active; - this.x = x; - this.y = y; - this.dx = dx; - this.dy = dy; - this._ = dispatch; -} - -DragEvent.prototype.on = function() { - var value = this._.on.apply(this._, arguments); - return value === this._ ? this : value; -}; - - -/***/ }), -/* 210 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return csvParse; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return csvParseRows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return csvFormat; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return csvFormatRows; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dsv__ = __webpack_require__(52); - - -var csv = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__dsv__["a" /* default */])(","); - -var csvParse = csv.parse; -var csvParseRows = csv.parseRows; -var csvFormat = csv.format; -var csvFormatRows = csv.formatRows; - - -/***/ }), -/* 211 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return tsvParse; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return tsvParseRows; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return tsvFormat; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return tsvFormatRows; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dsv__ = __webpack_require__(52); - - -var tsv = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__dsv__["a" /* default */])("\t"); - -var tsvParse = tsv.parse; -var tsvParseRows = tsv.parseRows; -var tsvFormat = tsv.format; -var tsvFormatRows = tsv.formatRows; - - -/***/ }), -/* 212 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return backIn; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return backOut; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return backInOut; }); -var overshoot = 1.70158; - -var backIn = (function custom(s) { - s = +s; - - function backIn(t) { - return t * t * ((s + 1) * t - s); - } - - backIn.overshoot = custom; - - return backIn; -})(overshoot); - -var backOut = (function custom(s) { - s = +s; - - function backOut(t) { - return --t * t * ((s + 1) * t + s) + 1; - } - - backOut.overshoot = custom; - - return backOut; -})(overshoot); - -var backInOut = (function custom(s) { - s = +s; - - function backInOut(t) { - return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2; - } - - backInOut.overshoot = custom; - - return backInOut; -})(overshoot); - - -/***/ }), -/* 213 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = bounceIn; -/* harmony export (immutable) */ __webpack_exports__["a"] = bounceOut; -/* harmony export (immutable) */ __webpack_exports__["c"] = bounceInOut; -var b1 = 4 / 11, - b2 = 6 / 11, - b3 = 8 / 11, - b4 = 3 / 4, - b5 = 9 / 11, - b6 = 10 / 11, - b7 = 15 / 16, - b8 = 21 / 22, - b9 = 63 / 64, - b0 = 1 / b1 / b1; - -function bounceIn(t) { - return 1 - bounceOut(1 - t); -} - -function bounceOut(t) { - return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9; -} - -function bounceInOut(t) { - return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2; -} - - -/***/ }), -/* 214 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = circleIn; -/* harmony export (immutable) */ __webpack_exports__["c"] = circleOut; -/* harmony export (immutable) */ __webpack_exports__["a"] = circleInOut; -function circleIn(t) { - return 1 - Math.sqrt(1 - t * t); -} - -function circleOut(t) { - return Math.sqrt(1 - --t * t); -} - -function circleInOut(t) { - return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2; -} - - -/***/ }), -/* 215 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = cubicIn; -/* harmony export (immutable) */ __webpack_exports__["c"] = cubicOut; -/* harmony export (immutable) */ __webpack_exports__["a"] = cubicInOut; -function cubicIn(t) { - return t * t * t; -} - -function cubicOut(t) { - return --t * t * t + 1; -} - -function cubicInOut(t) { - return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2; -} - - -/***/ }), -/* 216 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return elasticIn; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return elasticOut; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return elasticInOut; }); -var tau = 2 * Math.PI, - amplitude = 1, - period = 0.3; - -var elasticIn = (function custom(a, p) { - var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); - - function elasticIn(t) { - return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p); - } - - elasticIn.amplitude = function(a) { return custom(a, p * tau); }; - elasticIn.period = function(p) { return custom(a, p); }; - - return elasticIn; -})(amplitude, period); - -var elasticOut = (function custom(a, p) { - var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); - - function elasticOut(t) { - return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p); - } - - elasticOut.amplitude = function(a) { return custom(a, p * tau); }; - elasticOut.period = function(p) { return custom(a, p); }; - - return elasticOut; -})(amplitude, period); - -var elasticInOut = (function custom(a, p) { - var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau); - - function elasticInOut(t) { - return ((t = t * 2 - 1) < 0 - ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p) - : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2; - } - - elasticInOut.amplitude = function(a) { return custom(a, p * tau); }; - elasticInOut.period = function(p) { return custom(a, p); }; - - return elasticInOut; -})(amplitude, period); - - -/***/ }), -/* 217 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = expIn; -/* harmony export (immutable) */ __webpack_exports__["c"] = expOut; -/* harmony export (immutable) */ __webpack_exports__["a"] = expInOut; -function expIn(t) { - return Math.pow(2, 10 * t - 10); -} - -function expOut(t) { - return 1 - Math.pow(2, -10 * t); -} - -function expInOut(t) { - return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2; -} - - -/***/ }), -/* 218 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = linear; -function linear(t) { - return +t; -} - - -/***/ }), -/* 219 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return polyIn; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return polyOut; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return polyInOut; }); -var exponent = 3; - -var polyIn = (function custom(e) { - e = +e; - - function polyIn(t) { - return Math.pow(t, e); - } - - polyIn.exponent = custom; - - return polyIn; -})(exponent); - -var polyOut = (function custom(e) { - e = +e; - - function polyOut(t) { - return 1 - Math.pow(1 - t, e); - } - - polyOut.exponent = custom; - - return polyOut; -})(exponent); - -var polyInOut = (function custom(e) { - e = +e; - - function polyInOut(t) { - return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2; - } - - polyInOut.exponent = custom; - - return polyInOut; -})(exponent); - - -/***/ }), -/* 220 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = quadIn; -/* harmony export (immutable) */ __webpack_exports__["c"] = quadOut; -/* harmony export (immutable) */ __webpack_exports__["a"] = quadInOut; -function quadIn(t) { - return t * t; -} - -function quadOut(t) { - return t * (2 - t); -} - -function quadInOut(t) { - return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2; -} - - -/***/ }), -/* 221 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = sinIn; -/* harmony export (immutable) */ __webpack_exports__["c"] = sinOut; -/* harmony export (immutable) */ __webpack_exports__["a"] = sinInOut; -var pi = Math.PI, - halfPi = pi / 2; - -function sinIn(t) { - return 1 - Math.cos(t * halfPi); -} - -function sinOut(t) { - return Math.sin(t * halfPi); -} - -function sinInOut(t) { - return (1 - Math.cos(pi * t)) / 2; -} - - -/***/ }), -/* 222 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_center__ = __webpack_require__(223); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_center__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_collide__ = __webpack_require__(224); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__src_collide__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_link__ = __webpack_require__(225); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_2__src_link__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_manyBody__ = __webpack_require__(226); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_3__src_manyBody__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_simulation__ = __webpack_require__(105); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_4__src_simulation__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_x__ = __webpack_require__(227); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_5__src_x__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_y__ = __webpack_require__(228); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_6__src_y__["a"]; }); - - - - - - - - - -/***/ }), -/* 223 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x, y) { - var nodes; - - if (x == null) x = 0; - if (y == null) y = 0; - - function force() { - var i, - n = nodes.length, - node, - sx = 0, - sy = 0; - - for (i = 0; i < n; ++i) { - node = nodes[i], sx += node.x, sy += node.y; - } - - for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) { - node = nodes[i], node.x -= sx, node.y -= sy; - } - } - - force.initialize = function(_) { - nodes = _; - }; - - force.x = function(_) { - return arguments.length ? (x = +_, force) : x; - }; - - force.y = function(_) { - return arguments.length ? (y = +_, force) : y; - }; - - return force; -}); - - -/***/ }), -/* 224 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constant__ = __webpack_require__(22); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jiggle__ = __webpack_require__(53); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_d3_quadtree__ = __webpack_require__(67); - - - - -function x(d) { - return d.x + d.vx; -} - -function y(d) { - return d.y + d.vy; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(radius) { - var nodes, - radii, - strength = 1, - iterations = 1; - - if (typeof radius !== "function") radius = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(radius == null ? 1 : +radius); - - function force() { - var i, n = nodes.length, - tree, - node, - xi, - yi, - ri, - ri2; - - for (var k = 0; k < iterations; ++k) { - tree = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2_d3_quadtree__["a" /* quadtree */])(nodes, x, y).visitAfter(prepare); - for (i = 0; i < n; ++i) { - node = nodes[i]; - ri = radii[node.index], ri2 = ri * ri; - xi = node.x + node.vx; - yi = node.y + node.vy; - tree.visit(apply); - } - } - - function apply(quad, x0, y0, x1, y1) { - var data = quad.data, rj = quad.r, r = ri + rj; - if (data) { - if (data.index > node.index) { - var x = xi - data.x - data.vx, - y = yi - data.y - data.vy, - l = x * x + y * y; - if (l < r * r) { - if (x === 0) x = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__jiggle__["a" /* default */])(), l += x * x; - if (y === 0) y = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__jiggle__["a" /* default */])(), l += y * y; - l = (r - (l = Math.sqrt(l))) / l * strength; - node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj)); - node.vy += (y *= l) * r; - data.vx -= x * (r = 1 - r); - data.vy -= y * r; - } - } - return; - } - return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r; - } - } - - function prepare(quad) { - if (quad.data) return quad.r = radii[quad.data.index]; - for (var i = quad.r = 0; i < 4; ++i) { - if (quad[i] && quad[i].r > quad.r) { - quad.r = quad[i].r; - } - } - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length, node; - radii = new Array(n); - for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes); - } - - force.initialize = function(_) { - nodes = _; - initialize(); - }; - - force.iterations = function(_) { - return arguments.length ? (iterations = +_, force) : iterations; - }; - - force.strength = function(_) { - return arguments.length ? (strength = +_, force) : strength; - }; - - force.radius = function(_) { - return arguments.length ? (radius = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(+_), initialize(), force) : radius; - }; - - return force; -}); - - -/***/ }), -/* 225 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constant__ = __webpack_require__(22); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jiggle__ = __webpack_require__(53); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_d3_collection__ = __webpack_require__(21); - - - - -function index(d) { - return d.index; -} - -function find(nodeById, nodeId) { - var node = nodeById.get(nodeId); - if (!node) throw new Error("missing: " + nodeId); - return node; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(links) { - var id = index, - strength = defaultStrength, - strengths, - distance = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(30), - distances, - nodes, - count, - bias, - iterations = 1; - - if (links == null) links = []; - - function defaultStrength(link) { - return 1 / Math.min(count[link.source.index], count[link.target.index]); - } - - function force(alpha) { - for (var k = 0, n = links.length; k < iterations; ++k) { - for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) { - link = links[i], source = link.source, target = link.target; - x = target.x + target.vx - source.x - source.vx || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__jiggle__["a" /* default */])(); - y = target.y + target.vy - source.y - source.vy || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__jiggle__["a" /* default */])(); - l = Math.sqrt(x * x + y * y); - l = (l - distances[i]) / l * alpha * strengths[i]; - x *= l, y *= l; - target.vx -= x * (b = bias[i]); - target.vy -= y * b; - source.vx += x * (b = 1 - b); - source.vy += y * b; - } - } - } - - function initialize() { - if (!nodes) return; - - var i, - n = nodes.length, - m = links.length, - nodeById = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2_d3_collection__["map"])(nodes, id), - link; - - for (i = 0, count = new Array(n); i < m; ++i) { - link = links[i], link.index = i; - if (typeof link.source !== "object") link.source = find(nodeById, link.source); - if (typeof link.target !== "object") link.target = find(nodeById, link.target); - count[link.source.index] = (count[link.source.index] || 0) + 1; - count[link.target.index] = (count[link.target.index] || 0) + 1; - } - - for (i = 0, bias = new Array(m); i < m; ++i) { - link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]); - } - - strengths = new Array(m), initializeStrength(); - distances = new Array(m), initializeDistance(); - } - - function initializeStrength() { - if (!nodes) return; - - for (var i = 0, n = links.length; i < n; ++i) { - strengths[i] = +strength(links[i], i, links); - } - } - - function initializeDistance() { - if (!nodes) return; - - for (var i = 0, n = links.length; i < n; ++i) { - distances[i] = +distance(links[i], i, links); - } - } - - force.initialize = function(_) { - nodes = _; - initialize(); - }; - - force.links = function(_) { - return arguments.length ? (links = _, initialize(), force) : links; - }; - - force.id = function(_) { - return arguments.length ? (id = _, force) : id; - }; - - force.iterations = function(_) { - return arguments.length ? (iterations = +_, force) : iterations; - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(+_), initializeStrength(), force) : strength; - }; - - force.distance = function(_) { - return arguments.length ? (distance = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(+_), initializeDistance(), force) : distance; - }; - - return force; -}); - - -/***/ }), -/* 226 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constant__ = __webpack_require__(22); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__jiggle__ = __webpack_require__(53); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_d3_quadtree__ = __webpack_require__(67); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__simulation__ = __webpack_require__(105); - - - - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var nodes, - node, - alpha, - strength = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(-30), - strengths, - distanceMin2 = 1, - distanceMax2 = Infinity, - theta2 = 0.81; - - function force(_) { - var i, n = nodes.length, tree = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2_d3_quadtree__["a" /* quadtree */])(nodes, __WEBPACK_IMPORTED_MODULE_3__simulation__["b" /* x */], __WEBPACK_IMPORTED_MODULE_3__simulation__["c" /* y */]).visitAfter(accumulate); - for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply); - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length, node; - strengths = new Array(n); - for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes); - } - - function accumulate(quad) { - var strength = 0, q, c, x, y, i; - - // For internal nodes, accumulate forces from child quadrants. - if (quad.length) { - for (x = y = i = 0; i < 4; ++i) { - if ((q = quad[i]) && (c = q.value)) { - strength += c, x += c * q.x, y += c * q.y; - } - } - quad.x = x / strength; - quad.y = y / strength; - } - - // For leaf nodes, accumulate forces from coincident quadrants. - else { - q = quad; - q.x = q.data.x; - q.y = q.data.y; - do strength += strengths[q.data.index]; - while (q = q.next); - } - - quad.value = strength; - } - - function apply(quad, x1, _, x2) { - if (!quad.value) return true; - - var x = quad.x - node.x, - y = quad.y - node.y, - w = x2 - x1, - l = x * x + y * y; - - // Apply the Barnes-Hut approximation if possible. - // Limit forces for very close nodes; randomize direction if coincident. - if (w * w / theta2 < l) { - if (l < distanceMax2) { - if (x === 0) x = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__jiggle__["a" /* default */])(), l += x * x; - if (y === 0) y = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__jiggle__["a" /* default */])(), l += y * y; - if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); - node.vx += x * quad.value * alpha / l; - node.vy += y * quad.value * alpha / l; - } - return true; - } - - // Otherwise, process points directly. - else if (quad.length || l >= distanceMax2) return; - - // Limit forces for very close nodes; randomize direction if coincident. - if (quad.data !== node || quad.next) { - if (x === 0) x = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__jiggle__["a" /* default */])(), l += x * x; - if (y === 0) y = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__jiggle__["a" /* default */])(), l += y * y; - if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); - } - - do if (quad.data !== node) { - w = strengths[quad.data.index] * alpha / l; - node.vx += x * w; - node.vy += y * w; - } while (quad = quad.next); - } - - force.initialize = function(_) { - nodes = _; - initialize(); - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(+_), initialize(), force) : strength; - }; - - force.distanceMin = function(_) { - return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2); - }; - - force.distanceMax = function(_) { - return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2); - }; - - force.theta = function(_) { - return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2); - }; - - return force; -}); - - -/***/ }), -/* 227 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constant__ = __webpack_require__(22); - - -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - var strength = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(0.1), - nodes, - strengths, - xz; - - if (typeof x !== "function") x = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(x == null ? 0 : +x); - - function force(alpha) { - for (var i = 0, n = nodes.length, node; i < n; ++i) { - node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha; - } - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length; - strengths = new Array(n); - xz = new Array(n); - for (i = 0; i < n; ++i) { - strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); - } - } - - force.initialize = function(_) { - nodes = _; - initialize(); - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(+_), initialize(), force) : strength; - }; - - force.x = function(_) { - return arguments.length ? (x = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(+_), initialize(), force) : x; - }; - - return force; -}); - - -/***/ }), -/* 228 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constant__ = __webpack_require__(22); - - -/* harmony default export */ __webpack_exports__["a"] = (function(y) { - var strength = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(0.1), - nodes, - strengths, - yz; - - if (typeof y !== "function") y = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(y == null ? 0 : +y); - - function force(alpha) { - for (var i = 0, n = nodes.length, node; i < n; ++i) { - node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha; - } - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length; - strengths = new Array(n); - yz = new Array(n); - for (i = 0; i < n; ++i) { - strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); - } - } - - force.initialize = function(_) { - nodes = _; - initialize(); - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(+_), initialize(), force) : strength; - }; - - force.y = function(_) { - return arguments.length ? (y = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(+_), initialize(), force) : y; - }; - - return force; -}); - - -/***/ }), -/* 229 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return format; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return formatPrefix; }); -/* harmony export (immutable) */ __webpack_exports__["a"] = defaultLocale; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__locale__ = __webpack_require__(109); - - -var locale; -var format; -var formatPrefix; - -defaultLocale({ - decimal: ".", - thousands: ",", - grouping: [3], - currency: ["$", ""] -}); - -function defaultLocale(definition) { - locale = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__locale__["a" /* default */])(definition); - format = locale.format; - formatPrefix = locale.formatPrefix; - return locale; -} - - -/***/ }), -/* 230 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x, p) { - x = x.toPrecision(p); - - out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) { - switch (x[i]) { - case ".": i0 = i1 = i; break; - case "0": if (i0 === 0) i0 = i; i1 = i; break; - case "e": break out; - default: if (i0 > 0) i0 = 0; break; - } - } - - return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x; -}); - - -/***/ }), -/* 231 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(grouping, thousands) { - return function(value, width) { - var i = value.length, - t = [], - j = 0, - g = grouping[0], - length = 0; - - while (i > 0 && g > 0) { - if (length + g + 1 > width) g = Math.max(1, width - length); - t.push(value.substring(i -= g, i + g)); - if ((length += g + 1) > width) break; - g = grouping[j = (j + 1) % grouping.length]; - } - - return t.reverse().join(thousands); - }; -}); - - -/***/ }), -/* 232 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(numerals) { - return function(value) { - return value.replace(/[0-9]/g, function(i) { - return numerals[+i]; - }); - }; -}); - - -/***/ }), -/* 233 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__formatDecimal__ = __webpack_require__(55); - - -/* harmony default export */ __webpack_exports__["a"] = (function(x, p) { - var d = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__formatDecimal__["a" /* default */])(x, p); - if (!d) return x + ""; - var coefficient = d[0], - exponent = d[1]; - return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient - : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) - : coefficient + new Array(exponent - coefficient.length + 2).join("0"); -}); - - -/***/ }), -/* 234 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return x; -}); - - -/***/ }), -/* 235 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__exponent__ = __webpack_require__(33); - - -/* harmony default export */ __webpack_exports__["a"] = (function(step) { - return Math.max(0, -__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__exponent__["a" /* default */])(Math.abs(step))); -}); - - -/***/ }), -/* 236 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__exponent__ = __webpack_require__(33); - - -/* harmony default export */ __webpack_exports__["a"] = (function(step, value) { - return Math.max(0, Math.max(-8, Math.min(8, Math.floor(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__exponent__["a" /* default */])(value) / 3))) * 3 - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__exponent__["a" /* default */])(Math.abs(step))); -}); - - -/***/ }), -/* 237 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__exponent__ = __webpack_require__(33); - - -/* harmony default export */ __webpack_exports__["a"] = (function(step, max) { - step = Math.abs(step), max = Math.abs(max) - step; - return Math.max(0, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__exponent__["a" /* default */])(max) - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__exponent__["a" /* default */])(step)) + 1; -}); - - -/***/ }), -/* 238 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_area__ = __webpack_require__(110); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_area__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_bounds__ = __webpack_require__(239); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__src_bounds__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_centroid__ = __webpack_require__(240); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_2__src_centroid__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_circle__ = __webpack_require__(111); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_3__src_circle__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_clip_extent__ = __webpack_require__(56); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_4__src_clip_extent__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_contains__ = __webpack_require__(245); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_5__src_contains__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_distance__ = __webpack_require__(116); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_6__src_distance__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_graticule__ = __webpack_require__(246); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_7__src_graticule__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_7__src_graticule__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__src_interpolate__ = __webpack_require__(247); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_8__src_interpolate__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_length__ = __webpack_require__(117); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_9__src_length__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__src_path_index__ = __webpack_require__(251); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_10__src_path_index__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__src_projection_albers__ = __webpack_require__(121); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_11__src_projection_albers__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__src_projection_albersUsa__ = __webpack_require__(254); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_12__src_projection_albersUsa__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__src_projection_azimuthalEqualArea__ = __webpack_require__(255); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_13__src_projection_azimuthalEqualArea__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return __WEBPACK_IMPORTED_MODULE_13__src_projection_azimuthalEqualArea__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__src_projection_azimuthalEquidistant__ = __webpack_require__(256); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return __WEBPACK_IMPORTED_MODULE_14__src_projection_azimuthalEquidistant__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return __WEBPACK_IMPORTED_MODULE_14__src_projection_azimuthalEquidistant__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__src_projection_conicConformal__ = __webpack_require__(257); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return __WEBPACK_IMPORTED_MODULE_15__src_projection_conicConformal__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return __WEBPACK_IMPORTED_MODULE_15__src_projection_conicConformal__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__src_projection_conicEqualArea__ = __webpack_require__(59); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return __WEBPACK_IMPORTED_MODULE_16__src_projection_conicEqualArea__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return __WEBPACK_IMPORTED_MODULE_16__src_projection_conicEqualArea__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__src_projection_conicEquidistant__ = __webpack_require__(258); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return __WEBPACK_IMPORTED_MODULE_17__src_projection_conicEquidistant__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return __WEBPACK_IMPORTED_MODULE_17__src_projection_conicEquidistant__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__src_projection_equirectangular__ = __webpack_require__(122); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return __WEBPACK_IMPORTED_MODULE_18__src_projection_equirectangular__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return __WEBPACK_IMPORTED_MODULE_18__src_projection_equirectangular__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__src_projection_gnomonic__ = __webpack_require__(260); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return __WEBPACK_IMPORTED_MODULE_19__src_projection_gnomonic__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return __WEBPACK_IMPORTED_MODULE_19__src_projection_gnomonic__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__src_projection_identity__ = __webpack_require__(261); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return __WEBPACK_IMPORTED_MODULE_20__src_projection_identity__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__src_projection_index__ = __webpack_require__(8); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return __WEBPACK_IMPORTED_MODULE_21__src_projection_index__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "E", function() { return __WEBPACK_IMPORTED_MODULE_21__src_projection_index__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__src_projection_mercator__ = __webpack_require__(61); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return __WEBPACK_IMPORTED_MODULE_22__src_projection_mercator__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "G", function() { return __WEBPACK_IMPORTED_MODULE_22__src_projection_mercator__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__src_projection_orthographic__ = __webpack_require__(262); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "H", function() { return __WEBPACK_IMPORTED_MODULE_23__src_projection_orthographic__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return __WEBPACK_IMPORTED_MODULE_23__src_projection_orthographic__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__src_projection_stereographic__ = __webpack_require__(264); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "J", function() { return __WEBPACK_IMPORTED_MODULE_24__src_projection_stereographic__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "K", function() { return __WEBPACK_IMPORTED_MODULE_24__src_projection_stereographic__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__src_projection_transverseMercator__ = __webpack_require__(265); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "L", function() { return __WEBPACK_IMPORTED_MODULE_25__src_projection_transverseMercator__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "M", function() { return __WEBPACK_IMPORTED_MODULE_25__src_projection_transverseMercator__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__src_rotation__ = __webpack_require__(34); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "N", function() { return __WEBPACK_IMPORTED_MODULE_26__src_rotation__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__src_stream__ = __webpack_require__(13); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "O", function() { return __WEBPACK_IMPORTED_MODULE_27__src_stream__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__src_transform__ = __webpack_require__(35); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "P", function() { return __WEBPACK_IMPORTED_MODULE_28__src_transform__["a"]; }); - - - - - // DEPRECATED! Use d3.geoIdentity().clipExtent(…). - - - - - - - - - - - - - - - - - - - - - - - - - - -/***/ }), -/* 239 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__adder__ = __webpack_require__(18); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__area__ = __webpack_require__(110); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__cartesian__ = __webpack_require__(23); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__stream__ = __webpack_require__(13); - - - - - - -var lambda0, phi0, lambda1, phi1, // bounds - lambda2, // previous lambda-coordinate - lambda00, phi00, // first point - p0, // previous 3D point - deltaSum = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__adder__["a" /* default */])(), - ranges, - range; - -var boundsStream = { - point: boundsPoint, - lineStart: boundsLineStart, - lineEnd: boundsLineEnd, - polygonStart: function() { - boundsStream.point = boundsRingPoint; - boundsStream.lineStart = boundsRingStart; - boundsStream.lineEnd = boundsRingEnd; - deltaSum.reset(); - __WEBPACK_IMPORTED_MODULE_1__area__["b" /* areaStream */].polygonStart(); - }, - polygonEnd: function() { - __WEBPACK_IMPORTED_MODULE_1__area__["b" /* areaStream */].polygonEnd(); - boundsStream.point = boundsPoint; - boundsStream.lineStart = boundsLineStart; - boundsStream.lineEnd = boundsLineEnd; - if (__WEBPACK_IMPORTED_MODULE_1__area__["c" /* areaRingSum */] < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90); - else if (deltaSum > __WEBPACK_IMPORTED_MODULE_3__math__["o" /* epsilon */]) phi1 = 90; - else if (deltaSum < -__WEBPACK_IMPORTED_MODULE_3__math__["o" /* epsilon */]) phi0 = -90; - range[0] = lambda0, range[1] = lambda1; - } -}; - -function boundsPoint(lambda, phi) { - ranges.push(range = [lambda0 = lambda, lambda1 = lambda]); - if (phi < phi0) phi0 = phi; - if (phi > phi1) phi1 = phi; -} - -function linePoint(lambda, phi) { - var p = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__cartesian__["a" /* cartesian */])([lambda * __WEBPACK_IMPORTED_MODULE_3__math__["g" /* radians */], phi * __WEBPACK_IMPORTED_MODULE_3__math__["g" /* radians */]]); - if (p0) { - var normal = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__cartesian__["b" /* cartesianCross */])(p0, p), - equatorial = [normal[1], -normal[0], 0], - inflection = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__cartesian__["b" /* cartesianCross */])(equatorial, normal); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__cartesian__["g" /* cartesianNormalizeInPlace */])(inflection); - inflection = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__cartesian__["f" /* spherical */])(inflection); - var delta = lambda - lambda2, - sign = delta > 0 ? 1 : -1, - lambdai = inflection[0] * __WEBPACK_IMPORTED_MODULE_3__math__["h" /* degrees */] * sign, - phii, - antimeridian = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__math__["p" /* abs */])(delta) > 180; - if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { - phii = inflection[1] * __WEBPACK_IMPORTED_MODULE_3__math__["h" /* degrees */]; - if (phii > phi1) phi1 = phii; - } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { - phii = -inflection[1] * __WEBPACK_IMPORTED_MODULE_3__math__["h" /* degrees */]; - if (phii < phi0) phi0 = phii; - } else { - if (phi < phi0) phi0 = phi; - if (phi > phi1) phi1 = phi; - } - if (antimeridian) { - if (lambda < lambda2) { - if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda; - } else { - if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda; - } - } else { - if (lambda1 >= lambda0) { - if (lambda < lambda0) lambda0 = lambda; - if (lambda > lambda1) lambda1 = lambda; - } else { - if (lambda > lambda2) { - if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda; - } else { - if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda; - } - } - } - } else { - ranges.push(range = [lambda0 = lambda, lambda1 = lambda]); - } - if (phi < phi0) phi0 = phi; - if (phi > phi1) phi1 = phi; - p0 = p, lambda2 = lambda; -} - -function boundsLineStart() { - boundsStream.point = linePoint; -} - -function boundsLineEnd() { - range[0] = lambda0, range[1] = lambda1; - boundsStream.point = boundsPoint; - p0 = null; -} - -function boundsRingPoint(lambda, phi) { - if (p0) { - var delta = lambda - lambda2; - deltaSum.add(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__math__["p" /* abs */])(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta); - } else { - lambda00 = lambda, phi00 = phi; - } - __WEBPACK_IMPORTED_MODULE_1__area__["b" /* areaStream */].point(lambda, phi); - linePoint(lambda, phi); -} - -function boundsRingStart() { - __WEBPACK_IMPORTED_MODULE_1__area__["b" /* areaStream */].lineStart(); -} - -function boundsRingEnd() { - boundsRingPoint(lambda00, phi00); - __WEBPACK_IMPORTED_MODULE_1__area__["b" /* areaStream */].lineEnd(); - if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__math__["p" /* abs */])(deltaSum) > __WEBPACK_IMPORTED_MODULE_3__math__["o" /* epsilon */]) lambda0 = -(lambda1 = 180); - range[0] = lambda0, range[1] = lambda1; - p0 = null; -} - -// Finds the left-right distance between two longitudes. -// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want -// the distance between ±180° to be 360°. -function angle(lambda0, lambda1) { - return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1; -} - -function rangeCompare(a, b) { - return a[0] - b[0]; -} - -function rangeContains(range, x) { - return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(feature) { - var i, n, a, b, merged, deltaMax, delta; - - phi1 = lambda1 = -(lambda0 = phi0 = Infinity); - ranges = []; - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__stream__["a" /* default */])(feature, boundsStream); - - // First, sort ranges by their minimum longitudes. - if (n = ranges.length) { - ranges.sort(rangeCompare); - - // Then, merge any ranges that overlap. - for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) { - b = ranges[i]; - if (rangeContains(a, b[0]) || rangeContains(a, b[1])) { - if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; - if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; - } else { - merged.push(a = b); - } - } - - // Finally, find the largest gap between the merged ranges. - // The final bounding box will be the inverse of this gap. - for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) { - b = merged[i]; - if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1]; - } - } - - ranges = range = null; - - return lambda0 === Infinity || phi0 === Infinity - ? [[NaN, NaN], [NaN, NaN]] - : [[lambda0, phi0], [lambda1, phi1]]; -}); - - -/***/ }), -/* 240 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__noop__ = __webpack_require__(10); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__stream__ = __webpack_require__(13); - - - - -var W0, W1, - X0, Y0, Z0, - X1, Y1, Z1, - X2, Y2, Z2, - lambda00, phi00, // first point - x0, y0, z0; // previous point - -var centroidStream = { - sphere: __WEBPACK_IMPORTED_MODULE_1__noop__["a" /* default */], - point: centroidPoint, - lineStart: centroidLineStart, - lineEnd: centroidLineEnd, - polygonStart: function() { - centroidStream.lineStart = centroidRingStart; - centroidStream.lineEnd = centroidRingEnd; - }, - polygonEnd: function() { - centroidStream.lineStart = centroidLineStart; - centroidStream.lineEnd = centroidLineEnd; - } -}; - -// Arithmetic mean of Cartesian vectors. -function centroidPoint(lambda, phi) { - lambda *= __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */], phi *= __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */]; - var cosPhi = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(phi); - centroidPointCartesian(cosPhi * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(lambda), cosPhi * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(lambda), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(phi)); -} - -function centroidPointCartesian(x, y, z) { - ++W0; - X0 += (x - X0) / W0; - Y0 += (y - Y0) / W0; - Z0 += (z - Z0) / W0; -} - -function centroidLineStart() { - centroidStream.point = centroidLinePointFirst; -} - -function centroidLinePointFirst(lambda, phi) { - lambda *= __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */], phi *= __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */]; - var cosPhi = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(phi); - x0 = cosPhi * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(lambda); - y0 = cosPhi * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(lambda); - z0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(phi); - centroidStream.point = centroidLinePoint; - centroidPointCartesian(x0, y0, z0); -} - -function centroidLinePoint(lambda, phi) { - lambda *= __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */], phi *= __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */]; - var cosPhi = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(phi), - x = cosPhi * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(lambda), - y = cosPhi * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(lambda), - z = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(phi), - w = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["e" /* atan2 */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["n" /* sqrt */])((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); - W1 += w; - X1 += w * (x0 + (x0 = x)); - Y1 += w * (y0 + (y0 = y)); - Z1 += w * (z0 + (z0 = z)); - centroidPointCartesian(x0, y0, z0); -} - -function centroidLineEnd() { - centroidStream.point = centroidPoint; -} - -// See J. E. Brock, The Inertia Tensor for a Spherical Triangle, -// J. Applied Mechanics 42, 239 (1975). -function centroidRingStart() { - centroidStream.point = centroidRingPointFirst; -} - -function centroidRingEnd() { - centroidRingPoint(lambda00, phi00); - centroidStream.point = centroidPoint; -} - -function centroidRingPointFirst(lambda, phi) { - lambda00 = lambda, phi00 = phi; - lambda *= __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */], phi *= __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */]; - centroidStream.point = centroidRingPoint; - var cosPhi = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(phi); - x0 = cosPhi * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(lambda); - y0 = cosPhi * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(lambda); - z0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(phi); - centroidPointCartesian(x0, y0, z0); -} - -function centroidRingPoint(lambda, phi) { - lambda *= __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */], phi *= __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */]; - var cosPhi = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(phi), - x = cosPhi * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(lambda), - y = cosPhi * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(lambda), - z = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(phi), - cx = y0 * z - z0 * y, - cy = z0 * x - x0 * z, - cz = x0 * y - y0 * x, - m = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["n" /* sqrt */])(cx * cx + cy * cy + cz * cz), - w = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["f" /* asin */])(m), // line weight = angle - v = m && -w / m; // area weight multiplier - X2 += v * cx; - Y2 += v * cy; - Z2 += v * cz; - W1 += w; - X1 += w * (x0 + (x0 = x)); - Y1 += w * (y0 + (y0 = y)); - Z1 += w * (z0 + (z0 = z)); - centroidPointCartesian(x0, y0, z0); -} - -/* harmony default export */ __webpack_exports__["a"] = (function(object) { - W0 = W1 = - X0 = Y0 = Z0 = - X1 = Y1 = Z1 = - X2 = Y2 = Z2 = 0; - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__stream__["a" /* default */])(object, centroidStream); - - var x = X2, - y = Y2, - z = Z2, - m = x * x + y * y + z * z; - - // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid. - if (m < __WEBPACK_IMPORTED_MODULE_0__math__["w" /* epsilon2 */]) { - x = X1, y = Y1, z = Z1; - // If the feature has zero length, fall back to arithmetic mean of point vectors. - if (W1 < __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */]) x = X0, y = Y0, z = Z0; - m = x * x + y * y + z * z; - // If the feature still has an undefined ccentroid, then return. - if (m < __WEBPACK_IMPORTED_MODULE_0__math__["w" /* epsilon2 */]) return [NaN, NaN]; - } - - return [__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["e" /* atan2 */])(y, x) * __WEBPACK_IMPORTED_MODULE_0__math__["h" /* degrees */], __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["f" /* asin */])(z / __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["n" /* sqrt */])(m)) * __WEBPACK_IMPORTED_MODULE_0__math__["h" /* degrees */]]; -}); - - -/***/ }), -/* 241 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__index__ = __webpack_require__(113); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__math__ = __webpack_require__(0); - - - -/* harmony default export */ __webpack_exports__["a"] = (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__index__["a" /* default */])( - function() { return true; }, - clipAntimeridianLine, - clipAntimeridianInterpolate, - [-__WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */], -__WEBPACK_IMPORTED_MODULE_1__math__["k" /* halfPi */]] -)); - -// Takes a line and cuts into visible segments. Return values: 0 - there were -// intersections or the line was empty; 1 - no intersections; 2 - there were -// intersections, and the first and last segments should be rejoined. -function clipAntimeridianLine(stream) { - var lambda0 = NaN, - phi0 = NaN, - sign0 = NaN, - clean; // no intersections - - return { - lineStart: function() { - stream.lineStart(); - clean = 1; - }, - point: function(lambda1, phi1) { - var sign1 = lambda1 > 0 ? __WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */] : -__WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */], - delta = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["p" /* abs */])(lambda1 - lambda0); - if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["p" /* abs */])(delta - __WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */]) < __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */]) { // line crosses a pole - stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? __WEBPACK_IMPORTED_MODULE_1__math__["k" /* halfPi */] : -__WEBPACK_IMPORTED_MODULE_1__math__["k" /* halfPi */]); - stream.point(sign0, phi0); - stream.lineEnd(); - stream.lineStart(); - stream.point(sign1, phi0); - stream.point(lambda1, phi0); - clean = 0; - } else if (sign0 !== sign1 && delta >= __WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */]) { // line crosses antimeridian - if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["p" /* abs */])(lambda0 - sign0) < __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */]) lambda0 -= sign0 * __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */]; // handle degeneracies - if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["p" /* abs */])(lambda1 - sign1) < __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */]) lambda1 -= sign1 * __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */]; - phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1); - stream.point(sign0, phi0); - stream.lineEnd(); - stream.lineStart(); - stream.point(sign1, phi0); - clean = 0; - } - stream.point(lambda0 = lambda1, phi0 = phi1); - sign0 = sign1; - }, - lineEnd: function() { - stream.lineEnd(); - lambda0 = phi0 = NaN; - }, - clean: function() { - return 2 - clean; // if intersections, rejoin first and last segments - } - }; -} - -function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) { - var cosPhi0, - cosPhi1, - sinLambda0Lambda1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(lambda0 - lambda1); - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["p" /* abs */])(sinLambda0Lambda1) > __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */] - ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["l" /* atan */])((__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(phi0) * (cosPhi1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["c" /* cos */])(phi1)) * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(lambda1) - - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(phi1) * (cosPhi0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["c" /* cos */])(phi0)) * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["d" /* sin */])(lambda0)) - / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) - : (phi0 + phi1) / 2; -} - -function clipAntimeridianInterpolate(from, to, direction, stream) { - var phi; - if (from == null) { - phi = direction * __WEBPACK_IMPORTED_MODULE_1__math__["k" /* halfPi */]; - stream.point(-__WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */], phi); - stream.point(0, phi); - stream.point(__WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */], phi); - stream.point(__WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */], 0); - stream.point(__WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */], -phi); - stream.point(0, -phi); - stream.point(-__WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */], -phi); - stream.point(-__WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */], 0); - stream.point(-__WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */], phi); - } else if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["p" /* abs */])(from[0] - to[0]) > __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */]) { - var lambda = from[0] < to[0] ? __WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */] : -__WEBPACK_IMPORTED_MODULE_1__math__["a" /* pi */]; - phi = direction * lambda / 2; - stream.point(-lambda, phi); - stream.point(0, phi); - stream.point(lambda, phi); - } else { - stream.point(to[0], to[1]); - } -} - - -/***/ }), -/* 242 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cartesian__ = __webpack_require__(23); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__circle__ = __webpack_require__(111); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__pointEqual__ = __webpack_require__(119); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__index__ = __webpack_require__(113); - - - - - - -/* harmony default export */ __webpack_exports__["a"] = (function(radius, delta) { - var cr = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["c" /* cos */])(radius), - smallRadius = cr > 0, - notHemisphere = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["p" /* abs */])(cr) > __WEBPACK_IMPORTED_MODULE_2__math__["o" /* epsilon */]; // TODO optimise for this common case - - function interpolate(from, to, direction, stream) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__circle__["b" /* circleStream */])(stream, radius, delta, direction, from, to); - } - - function visible(lambda, phi) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["c" /* cos */])(lambda) * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["c" /* cos */])(phi) > cr; - } - - // Takes a line and cuts into visible segments. Return values used for polygon - // clipping: 0 - there were intersections or the line was empty; 1 - no - // intersections 2 - there were intersections, and the first and last segments - // should be rejoined. - function clipLine(stream) { - var point0, // previous point - c0, // code for previous point - v0, // visibility of previous point - v00, // visibility of first point - clean; // no intersections - return { - lineStart: function() { - v00 = v0 = false; - clean = 1; - }, - point: function(lambda, phi) { - var point1 = [lambda, phi], - point2, - v = visible(lambda, phi), - c = smallRadius - ? v ? 0 : code(lambda, phi) - : v ? code(lambda + (lambda < 0 ? __WEBPACK_IMPORTED_MODULE_2__math__["a" /* pi */] : -__WEBPACK_IMPORTED_MODULE_2__math__["a" /* pi */]), phi) : 0; - if (!point0 && (v00 = v0 = v)) stream.lineStart(); - // Handle degeneracies. - // TODO ignore if not clipping polygons. - if (v !== v0) { - point2 = intersect(point0, point1); - if (!point2 || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__pointEqual__["a" /* default */])(point0, point2) || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__pointEqual__["a" /* default */])(point1, point2)) { - point1[0] += __WEBPACK_IMPORTED_MODULE_2__math__["o" /* epsilon */]; - point1[1] += __WEBPACK_IMPORTED_MODULE_2__math__["o" /* epsilon */]; - v = visible(point1[0], point1[1]); - } - } - if (v !== v0) { - clean = 0; - if (v) { - // outside going in - stream.lineStart(); - point2 = intersect(point1, point0); - stream.point(point2[0], point2[1]); - } else { - // inside going out - point2 = intersect(point0, point1); - stream.point(point2[0], point2[1]); - stream.lineEnd(); - } - point0 = point2; - } else if (notHemisphere && point0 && smallRadius ^ v) { - var t; - // If the codes for two points are different, or are both zero, - // and there this segment intersects with the small circle. - if (!(c & c0) && (t = intersect(point1, point0, true))) { - clean = 0; - if (smallRadius) { - stream.lineStart(); - stream.point(t[0][0], t[0][1]); - stream.point(t[1][0], t[1][1]); - stream.lineEnd(); - } else { - stream.point(t[1][0], t[1][1]); - stream.lineEnd(); - stream.lineStart(); - stream.point(t[0][0], t[0][1]); - } - } - } - if (v && (!point0 || !__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__pointEqual__["a" /* default */])(point0, point1))) { - stream.point(point1[0], point1[1]); - } - point0 = point1, v0 = v, c0 = c; - }, - lineEnd: function() { - if (v0) stream.lineEnd(); - point0 = null; - }, - // Rejoin first and last segments if there were intersections and the first - // and last points were visible. - clean: function() { - return clean | ((v00 && v0) << 1); - } - }; - } - - // Intersects the great circle between a and b with the clip circle. - function intersect(a, b, two) { - var pa = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["a" /* cartesian */])(a), - pb = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["a" /* cartesian */])(b); - - // We have two planes, n1.p = d1 and n2.p = d2. - // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2). - var n1 = [1, 0, 0], // normal - n2 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["b" /* cartesianCross */])(pa, pb), - n2n2 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["c" /* cartesianDot */])(n2, n2), - n1n2 = n2[0], // cartesianDot(n1, n2), - determinant = n2n2 - n1n2 * n1n2; - - // Two polar points. - if (!determinant) return !two && a; - - var c1 = cr * n2n2 / determinant, - c2 = -cr * n1n2 / determinant, - n1xn2 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["b" /* cartesianCross */])(n1, n2), - A = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["d" /* cartesianScale */])(n1, c1), - B = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["d" /* cartesianScale */])(n2, c2); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["e" /* cartesianAddInPlace */])(A, B); - - // Solve |p(t)|^2 = 1. - var u = n1xn2, - w = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["c" /* cartesianDot */])(A, u), - uu = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["c" /* cartesianDot */])(u, u), - t2 = w * w - uu * (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["c" /* cartesianDot */])(A, A) - 1); - - if (t2 < 0) return; - - var t = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["n" /* sqrt */])(t2), - q = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["d" /* cartesianScale */])(u, (-w - t) / uu); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["e" /* cartesianAddInPlace */])(q, A); - q = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["f" /* spherical */])(q); - - if (!two) return q; - - // Two intersection points. - var lambda0 = a[0], - lambda1 = b[0], - phi0 = a[1], - phi1 = b[1], - z; - - if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z; - - var delta = lambda1 - lambda0, - polar = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["p" /* abs */])(delta - __WEBPACK_IMPORTED_MODULE_2__math__["a" /* pi */]) < __WEBPACK_IMPORTED_MODULE_2__math__["o" /* epsilon */], - meridian = polar || delta < __WEBPACK_IMPORTED_MODULE_2__math__["o" /* epsilon */]; - - if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z; - - // Check that the first point is between a and b. - if (meridian - ? polar - ? phi0 + phi1 > 0 ^ q[1] < (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["p" /* abs */])(q[0] - lambda0) < __WEBPACK_IMPORTED_MODULE_2__math__["o" /* epsilon */] ? phi0 : phi1) - : phi0 <= q[1] && q[1] <= phi1 - : delta > __WEBPACK_IMPORTED_MODULE_2__math__["a" /* pi */] ^ (lambda0 <= q[0] && q[0] <= lambda1)) { - var q1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["d" /* cartesianScale */])(u, (-w + t) / uu); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["e" /* cartesianAddInPlace */])(q1, A); - return [q, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["f" /* spherical */])(q1)]; - } - } - - // Generates a 4-bit vector representing the location of a point relative to - // the small circle's bounding box. - function code(lambda, phi) { - var r = smallRadius ? radius : __WEBPACK_IMPORTED_MODULE_2__math__["a" /* pi */] - radius, - code = 0; - if (lambda < -r) code |= 1; // left - else if (lambda > r) code |= 2; // right - if (phi < -r) code |= 4; // below - else if (phi > r) code |= 8; // above - return code; - } - - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__index__["a" /* default */])(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-__WEBPACK_IMPORTED_MODULE_2__math__["a" /* pi */], radius - __WEBPACK_IMPORTED_MODULE_2__math__["a" /* pi */]]); -}); - - -/***/ }), -/* 243 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(a, b, x0, y0, x1, y1) { - var ax = a[0], - ay = a[1], - bx = b[0], - by = b[1], - t0 = 0, - t1 = 1, - dx = bx - ax, - dy = by - ay, - r; - - r = x0 - ax; - if (!dx && r > 0) return; - r /= dx; - if (dx < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dx > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = x1 - ax; - if (!dx && r < 0) return; - r /= dx; - if (dx < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dx > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - r = y0 - ay; - if (!dy && r > 0) return; - r /= dy; - if (dy < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dy > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = y1 - ay; - if (!dy && r < 0) return; - r /= dy; - if (dy < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dy > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; - if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; - return true; -}); - - -/***/ }), -/* 244 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return function() { - return x; - }; -}); - - -/***/ }), -/* 245 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__polygonContains__ = __webpack_require__(120); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__distance__ = __webpack_require__(116); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__math__ = __webpack_require__(0); - - - - -var containsObjectType = { - Feature: function(object, point) { - return containsGeometry(object.geometry, point); - }, - FeatureCollection: function(object, point) { - var features = object.features, i = -1, n = features.length; - while (++i < n) if (containsGeometry(features[i].geometry, point)) return true; - return false; - } -}; - -var containsGeometryType = { - Sphere: function() { - return true; - }, - Point: function(object, point) { - return containsPoint(object.coordinates, point); - }, - MultiPoint: function(object, point) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) if (containsPoint(coordinates[i], point)) return true; - return false; - }, - LineString: function(object, point) { - return containsLine(object.coordinates, point); - }, - MultiLineString: function(object, point) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) if (containsLine(coordinates[i], point)) return true; - return false; - }, - Polygon: function(object, point) { - return containsPolygon(object.coordinates, point); - }, - MultiPolygon: function(object, point) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) if (containsPolygon(coordinates[i], point)) return true; - return false; - }, - GeometryCollection: function(object, point) { - var geometries = object.geometries, i = -1, n = geometries.length; - while (++i < n) if (containsGeometry(geometries[i], point)) return true; - return false; - } -}; - -function containsGeometry(geometry, point) { - return geometry && containsGeometryType.hasOwnProperty(geometry.type) - ? containsGeometryType[geometry.type](geometry, point) - : false; -} - -function containsPoint(coordinates, point) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__distance__["a" /* default */])(coordinates, point) === 0; -} - -function containsLine(coordinates, point) { - var ab = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__distance__["a" /* default */])(coordinates[0], coordinates[1]), - ao = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__distance__["a" /* default */])(coordinates[0], point), - ob = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__distance__["a" /* default */])(point, coordinates[1]); - return ao + ob <= ab + __WEBPACK_IMPORTED_MODULE_2__math__["o" /* epsilon */]; -} - -function containsPolygon(coordinates, point) { - return !!__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__polygonContains__["a" /* default */])(coordinates.map(ringRadians), pointRadians(point)); -} - -function ringRadians(ring) { - return ring = ring.map(pointRadians), ring.pop(), ring; -} - -function pointRadians(point) { - return [point[0] * __WEBPACK_IMPORTED_MODULE_2__math__["g" /* radians */], point[1] * __WEBPACK_IMPORTED_MODULE_2__math__["g" /* radians */]]; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(object, point) { - return (object && containsObjectType.hasOwnProperty(object.type) - ? containsObjectType[object.type] - : containsGeometry)(object, point); -}); - - -/***/ }), -/* 246 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = graticule; -/* harmony export (immutable) */ __webpack_exports__["b"] = graticule10; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_array__ = __webpack_require__(3); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__math__ = __webpack_require__(0); - - - -function graticuleX(y0, y1, dy) { - var y = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["v" /* range */])(y0, y1 - __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */], dy).concat(y1); - return function(x) { return y.map(function(y) { return [x, y]; }); }; -} - -function graticuleY(x0, x1, dx) { - var x = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["v" /* range */])(x0, x1 - __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */], dx).concat(x1); - return function(y) { return x.map(function(x) { return [x, y]; }); }; -} - -function graticule() { - var x1, x0, X1, X0, - y1, y0, Y1, Y0, - dx = 10, dy = dx, DX = 90, DY = 360, - x, y, X, Y, - precision = 2.5; - - function graticule() { - return {type: "MultiLineString", coordinates: lines()}; - } - - function lines() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["v" /* range */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["v" /* ceil */])(X0 / DX) * DX, X1, DX).map(X) - .concat(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["v" /* range */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["v" /* ceil */])(Y0 / DY) * DY, Y1, DY).map(Y)) - .concat(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["v" /* range */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["v" /* ceil */])(x0 / dx) * dx, x1, dx).filter(function(x) { return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["p" /* abs */])(x % DX) > __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */]; }).map(x)) - .concat(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["v" /* range */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["v" /* ceil */])(y0 / dy) * dy, y1, dy).filter(function(y) { return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["p" /* abs */])(y % DY) > __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */]; }).map(y)); - } - - graticule.lines = function() { - return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; }); - }; - - graticule.outline = function() { - return { - type: "Polygon", - coordinates: [ - X(X0).concat( - Y(Y1).slice(1), - X(X1).reverse().slice(1), - Y(Y0).reverse().slice(1)) - ] - }; - }; - - graticule.extent = function(_) { - if (!arguments.length) return graticule.extentMinor(); - return graticule.extentMajor(_).extentMinor(_); - }; - - graticule.extentMajor = function(_) { - if (!arguments.length) return [[X0, Y0], [X1, Y1]]; - X0 = +_[0][0], X1 = +_[1][0]; - Y0 = +_[0][1], Y1 = +_[1][1]; - if (X0 > X1) _ = X0, X0 = X1, X1 = _; - if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; - return graticule.precision(precision); - }; - - graticule.extentMinor = function(_) { - if (!arguments.length) return [[x0, y0], [x1, y1]]; - x0 = +_[0][0], x1 = +_[1][0]; - y0 = +_[0][1], y1 = +_[1][1]; - if (x0 > x1) _ = x0, x0 = x1, x1 = _; - if (y0 > y1) _ = y0, y0 = y1, y1 = _; - return graticule.precision(precision); - }; - - graticule.step = function(_) { - if (!arguments.length) return graticule.stepMinor(); - return graticule.stepMajor(_).stepMinor(_); - }; - - graticule.stepMajor = function(_) { - if (!arguments.length) return [DX, DY]; - DX = +_[0], DY = +_[1]; - return graticule; - }; - - graticule.stepMinor = function(_) { - if (!arguments.length) return [dx, dy]; - dx = +_[0], dy = +_[1]; - return graticule; - }; - - graticule.precision = function(_) { - if (!arguments.length) return precision; - precision = +_; - x = graticuleX(y0, y1, 90); - y = graticuleY(x0, x1, precision); - X = graticuleX(Y0, Y1, 90); - Y = graticuleY(X0, X1, precision); - return graticule; - }; - - return graticule - .extentMajor([[-180, -90 + __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */]], [180, 90 - __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */]]]) - .extentMinor([[-180, -80 - __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */]], [180, 80 + __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */]]]); -} - -function graticule10() { - return graticule()(); -} - - -/***/ }), -/* 247 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); - - -/* harmony default export */ __webpack_exports__["a"] = (function(a, b) { - var x0 = a[0] * __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */], - y0 = a[1] * __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */], - x1 = b[0] * __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */], - y1 = b[1] * __WEBPACK_IMPORTED_MODULE_0__math__["g" /* radians */], - cy0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(y0), - sy0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(y0), - cy1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(y1), - sy1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(y1), - kx0 = cy0 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(x0), - ky0 = cy0 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(x0), - kx1 = cy1 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(x1), - ky1 = cy1 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(x1), - d = 2 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["f" /* asin */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["n" /* sqrt */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["u" /* haversin */])(y1 - y0) + cy0 * cy1 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["u" /* haversin */])(x1 - x0))), - k = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(d); - - var interpolate = d ? function(t) { - var B = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(t *= d) / k, - A = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(d - t) / k, - x = A * kx0 + B * kx1, - y = A * ky0 + B * ky1, - z = A * sy0 + B * sy1; - return [ - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["e" /* atan2 */])(y, x) * __WEBPACK_IMPORTED_MODULE_0__math__["h" /* degrees */], - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["e" /* atan2 */])(z, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["n" /* sqrt */])(x * x + y * y)) * __WEBPACK_IMPORTED_MODULE_0__math__["h" /* degrees */] - ]; - } : function() { - return [x0 * __WEBPACK_IMPORTED_MODULE_0__math__["h" /* degrees */], y0 * __WEBPACK_IMPORTED_MODULE_0__math__["h" /* degrees */]]; - }; - - interpolate.distance = d; - - return interpolate; -}); - - -/***/ }), -/* 248 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__adder__ = __webpack_require__(18); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__noop__ = __webpack_require__(10); - - - - -var areaSum = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__adder__["a" /* default */])(), - areaRingSum = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__adder__["a" /* default */])(), - x00, - y00, - x0, - y0; - -var areaStream = { - point: __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */], - lineStart: __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */], - lineEnd: __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */], - polygonStart: function() { - areaStream.lineStart = areaRingStart; - areaStream.lineEnd = areaRingEnd; - }, - polygonEnd: function() { - areaStream.lineStart = areaStream.lineEnd = areaStream.point = __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */]; - areaSum.add(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["p" /* abs */])(areaRingSum)); - areaRingSum.reset(); - }, - result: function() { - var area = areaSum / 2; - areaSum.reset(); - return area; - } -}; - -function areaRingStart() { - areaStream.point = areaPointFirst; -} - -function areaPointFirst(x, y) { - areaStream.point = areaPoint; - x00 = x0 = x, y00 = y0 = y; -} - -function areaPoint(x, y) { - areaRingSum.add(y0 * x - x0 * y); - x0 = x, y0 = y; -} - -function areaRingEnd() { - areaPoint(x00, y00); -} - -/* harmony default export */ __webpack_exports__["a"] = (areaStream); - - -/***/ }), -/* 249 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); - - -// TODO Enforce positive area for exterior, negative area for interior? - -var X0 = 0, - Y0 = 0, - Z0 = 0, - X1 = 0, - Y1 = 0, - Z1 = 0, - X2 = 0, - Y2 = 0, - Z2 = 0, - x00, - y00, - x0, - y0; - -var centroidStream = { - point: centroidPoint, - lineStart: centroidLineStart, - lineEnd: centroidLineEnd, - polygonStart: function() { - centroidStream.lineStart = centroidRingStart; - centroidStream.lineEnd = centroidRingEnd; - }, - polygonEnd: function() { - centroidStream.point = centroidPoint; - centroidStream.lineStart = centroidLineStart; - centroidStream.lineEnd = centroidLineEnd; - }, - result: function() { - var centroid = Z2 ? [X2 / Z2, Y2 / Z2] - : Z1 ? [X1 / Z1, Y1 / Z1] - : Z0 ? [X0 / Z0, Y0 / Z0] - : [NaN, NaN]; - X0 = Y0 = Z0 = - X1 = Y1 = Z1 = - X2 = Y2 = Z2 = 0; - return centroid; - } -}; - -function centroidPoint(x, y) { - X0 += x; - Y0 += y; - ++Z0; -} - -function centroidLineStart() { - centroidStream.point = centroidPointFirstLine; -} - -function centroidPointFirstLine(x, y) { - centroidStream.point = centroidPointLine; - centroidPoint(x0 = x, y0 = y); -} - -function centroidPointLine(x, y) { - var dx = x - x0, dy = y - y0, z = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["n" /* sqrt */])(dx * dx + dy * dy); - X1 += z * (x0 + x) / 2; - Y1 += z * (y0 + y) / 2; - Z1 += z; - centroidPoint(x0 = x, y0 = y); -} - -function centroidLineEnd() { - centroidStream.point = centroidPoint; -} - -function centroidRingStart() { - centroidStream.point = centroidPointFirstRing; -} - -function centroidRingEnd() { - centroidPointRing(x00, y00); -} - -function centroidPointFirstRing(x, y) { - centroidStream.point = centroidPointRing; - centroidPoint(x00 = x0 = x, y00 = y0 = y); -} - -function centroidPointRing(x, y) { - var dx = x - x0, - dy = y - y0, - z = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["n" /* sqrt */])(dx * dx + dy * dy); - - X1 += z * (x0 + x) / 2; - Y1 += z * (y0 + y) / 2; - Z1 += z; - - z = y0 * x - x0 * y; - X2 += z * (x0 + x); - Y2 += z * (y0 + y); - Z2 += z * 3; - centroidPoint(x0 = x, y0 = y); -} - -/* harmony default export */ __webpack_exports__["a"] = (centroidStream); - - -/***/ }), -/* 250 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = PathContext; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__noop__ = __webpack_require__(10); - - - -function PathContext(context) { - this._context = context; -} - -PathContext.prototype = { - _radius: 4.5, - pointRadius: function(_) { - return this._radius = _, this; - }, - polygonStart: function() { - this._line = 0; - }, - polygonEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._line === 0) this._context.closePath(); - this._point = NaN; - }, - point: function(x, y) { - switch (this._point) { - case 0: { - this._context.moveTo(x, y); - this._point = 1; - break; - } - case 1: { - this._context.lineTo(x, y); - break; - } - default: { - this._context.moveTo(x + this._radius, y); - this._context.arc(x, y, this._radius, 0, __WEBPACK_IMPORTED_MODULE_0__math__["b" /* tau */]); - break; - } - } - }, - result: __WEBPACK_IMPORTED_MODULE_1__noop__["a" /* default */] -}; - - -/***/ }), -/* 251 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__identity__ = __webpack_require__(57); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__stream__ = __webpack_require__(13); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__area__ = __webpack_require__(248); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__bounds__ = __webpack_require__(118); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__centroid__ = __webpack_require__(249); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__context__ = __webpack_require__(250); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__measure__ = __webpack_require__(252); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__string__ = __webpack_require__(253); - - - - - - - - - -/* harmony default export */ __webpack_exports__["a"] = (function(projection, context) { - var pointRadius = 4.5, - projectionStream, - contextStream; - - function path(object) { - if (object) { - if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__stream__["a" /* default */])(object, projectionStream(contextStream)); - } - return contextStream.result(); - } - - path.area = function(object) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__stream__["a" /* default */])(object, projectionStream(__WEBPACK_IMPORTED_MODULE_2__area__["a" /* default */])); - return __WEBPACK_IMPORTED_MODULE_2__area__["a" /* default */].result(); - }; - - path.measure = function(object) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__stream__["a" /* default */])(object, projectionStream(__WEBPACK_IMPORTED_MODULE_6__measure__["a" /* default */])); - return __WEBPACK_IMPORTED_MODULE_6__measure__["a" /* default */].result(); - }; - - path.bounds = function(object) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__stream__["a" /* default */])(object, projectionStream(__WEBPACK_IMPORTED_MODULE_3__bounds__["a" /* default */])); - return __WEBPACK_IMPORTED_MODULE_3__bounds__["a" /* default */].result(); - }; - - path.centroid = function(object) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__stream__["a" /* default */])(object, projectionStream(__WEBPACK_IMPORTED_MODULE_4__centroid__["a" /* default */])); - return __WEBPACK_IMPORTED_MODULE_4__centroid__["a" /* default */].result(); - }; - - path.projection = function(_) { - return arguments.length ? (projectionStream = _ == null ? (projection = null, __WEBPACK_IMPORTED_MODULE_0__identity__["a" /* default */]) : (projection = _).stream, path) : projection; - }; - - path.context = function(_) { - if (!arguments.length) return context; - contextStream = _ == null ? (context = null, new __WEBPACK_IMPORTED_MODULE_7__string__["a" /* default */]) : new __WEBPACK_IMPORTED_MODULE_5__context__["a" /* default */](context = _); - if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); - return path; - }; - - path.pointRadius = function(_) { - if (!arguments.length) return pointRadius; - pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); - return path; - }; - - return path.projection(projection).context(context); -}); - - -/***/ }), -/* 252 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__adder__ = __webpack_require__(18); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__noop__ = __webpack_require__(10); - - - - -var lengthSum = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__adder__["a" /* default */])(), - lengthRing, - x00, - y00, - x0, - y0; - -var lengthStream = { - point: __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */], - lineStart: function() { - lengthStream.point = lengthPointFirst; - }, - lineEnd: function() { - if (lengthRing) lengthPoint(x00, y00); - lengthStream.point = __WEBPACK_IMPORTED_MODULE_2__noop__["a" /* default */]; - }, - polygonStart: function() { - lengthRing = true; - }, - polygonEnd: function() { - lengthRing = null; - }, - result: function() { - var length = +lengthSum; - lengthSum.reset(); - return length; - } -}; - -function lengthPointFirst(x, y) { - lengthStream.point = lengthPoint; - x00 = x0 = x, y00 = y0 = y; -} - -function lengthPoint(x, y) { - x0 -= x, y0 -= y; - lengthSum.add(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["n" /* sqrt */])(x0 * x0 + y0 * y0)); - x0 = x, y0 = y; -} - -/* harmony default export */ __webpack_exports__["a"] = (lengthStream); - - -/***/ }), -/* 253 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = PathString; -function PathString() { - this._string = []; -} - -PathString.prototype = { - _radius: 4.5, - _circle: circle(4.5), - pointRadius: function(_) { - if ((_ = +_) !== this._radius) this._radius = _, this._circle = null; - return this; - }, - polygonStart: function() { - this._line = 0; - }, - polygonEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._line === 0) this._string.push("Z"); - this._point = NaN; - }, - point: function(x, y) { - switch (this._point) { - case 0: { - this._string.push("M", x, ",", y); - this._point = 1; - break; - } - case 1: { - this._string.push("L", x, ",", y); - break; - } - default: { - if (this._circle == null) this._circle = circle(this._radius); - this._string.push("M", x, ",", y, this._circle); - break; - } - } - }, - result: function() { - if (this._string.length) { - var result = this._string.join(""); - this._string = []; - return result; - } else { - return null; - } - } -}; - -function circle(radius) { - return "m0," + radius - + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius - + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius - + "z"; -} - - -/***/ }), -/* 254 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__albers__ = __webpack_require__(121); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__conicEqualArea__ = __webpack_require__(59); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__fit__ = __webpack_require__(60); - - - - - -// The projections must have mutually exclusive clip regions on the sphere, -// as this will avoid emitting interleaving lines and polygons. -function multiplex(streams) { - var n = streams.length; - return { - point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); }, - sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); }, - lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); }, - lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); }, - polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); }, - polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); } - }; -} - -// A composite projection for the United States, configured by default for -// 960×500. The projection also works quite well at 960×600 if you change the -// scale to 1285 and adjust the translate accordingly. The set of standard -// parallels for each region comes from USGS, which is published here: -// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers -/* harmony default export */ __webpack_exports__["a"] = (function() { - var cache, - cacheStream, - lower48 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__albers__["a" /* default */])(), lower48Point, - alaska = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__conicEqualArea__["a" /* default */])().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338 - hawaii = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__conicEqualArea__["a" /* default */])().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007 - point, pointStream = {point: function(x, y) { point = [x, y]; }}; - - function albersUsa(coordinates) { - var x = coordinates[0], y = coordinates[1]; - return point = null, - (lower48Point.point(x, y), point) - || (alaskaPoint.point(x, y), point) - || (hawaiiPoint.point(x, y), point); - } - - albersUsa.invert = function(coordinates) { - var k = lower48.scale(), - t = lower48.translate(), - x = (coordinates[0] - t[0]) / k, - y = (coordinates[1] - t[1]) / k; - return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska - : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii - : lower48).invert(coordinates); - }; - - albersUsa.stream = function(stream) { - return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]); - }; - - albersUsa.precision = function(_) { - if (!arguments.length) return lower48.precision(); - lower48.precision(_), alaska.precision(_), hawaii.precision(_); - return reset(); - }; - - albersUsa.scale = function(_) { - if (!arguments.length) return lower48.scale(); - lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_); - return albersUsa.translate(lower48.translate()); - }; - - albersUsa.translate = function(_) { - if (!arguments.length) return lower48.translate(); - var k = lower48.scale(), x = +_[0], y = +_[1]; - - lower48Point = lower48 - .translate(_) - .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]]) - .stream(pointStream); - - alaskaPoint = alaska - .translate([x - 0.307 * k, y + 0.201 * k]) - .clipExtent([[x - 0.425 * k + __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */], y + 0.120 * k + __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */]], [x - 0.214 * k - __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */], y + 0.234 * k - __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */]]]) - .stream(pointStream); - - hawaiiPoint = hawaii - .translate([x - 0.205 * k, y + 0.212 * k]) - .clipExtent([[x - 0.214 * k + __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */], y + 0.166 * k + __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */]], [x - 0.115 * k - __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */], y + 0.234 * k - __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */]]]) - .stream(pointStream); - - return reset(); - }; - - albersUsa.fitExtent = function(extent, object) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__fit__["a" /* fitExtent */])(albersUsa, extent, object); - }; - - albersUsa.fitSize = function(size, object) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__fit__["b" /* fitSize */])(albersUsa, size, object); - }; - - function reset() { - cache = cacheStream = null; - return albersUsa; - } - - return albersUsa.scale(1070); -}); - - -/***/ }), -/* 255 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return azimuthalEqualAreaRaw; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__azimuthal__ = __webpack_require__(24); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__index__ = __webpack_require__(8); - - - - -var azimuthalEqualAreaRaw = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__azimuthal__["b" /* azimuthalRaw */])(function(cxcy) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["n" /* sqrt */])(2 / (1 + cxcy)); -}); - -azimuthalEqualAreaRaw.invert = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__azimuthal__["a" /* azimuthalInvert */])(function(z) { - return 2 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["f" /* asin */])(z / 2); -}); - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__index__["a" /* default */])(azimuthalEqualAreaRaw) - .scale(124.75) - .clipAngle(180 - 1e-3); -}); - - -/***/ }), -/* 256 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return azimuthalEquidistantRaw; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__azimuthal__ = __webpack_require__(24); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__index__ = __webpack_require__(8); - - - - -var azimuthalEquidistantRaw = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__azimuthal__["b" /* azimuthalRaw */])(function(c) { - return (c = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["r" /* acos */])(c)) && c / __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(c); -}); - -azimuthalEquidistantRaw.invert = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__azimuthal__["a" /* azimuthalInvert */])(function(z) { - return z; -}); - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__index__["a" /* default */])(azimuthalEquidistantRaw) - .scale(79.4188) - .clipAngle(180 - 1e-3); -}); - - -/***/ }), -/* 257 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = conicConformalRaw; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__conic__ = __webpack_require__(58); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__mercator__ = __webpack_require__(61); - - - - -function tany(y) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["j" /* tan */])((__WEBPACK_IMPORTED_MODULE_0__math__["k" /* halfPi */] + y) / 2); -} - -function conicConformalRaw(y0, y1) { - var cy0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(y0), - n = y0 === y1 ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(y0) : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["i" /* log */])(cy0 / __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(y1)) / __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["i" /* log */])(tany(y1) / tany(y0)), - f = cy0 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["t" /* pow */])(tany(y0), n) / n; - - if (!n) return __WEBPACK_IMPORTED_MODULE_2__mercator__["b" /* mercatorRaw */]; - - function project(x, y) { - if (f > 0) { if (y < -__WEBPACK_IMPORTED_MODULE_0__math__["k" /* halfPi */] + __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */]) y = -__WEBPACK_IMPORTED_MODULE_0__math__["k" /* halfPi */] + __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */]; } - else { if (y > __WEBPACK_IMPORTED_MODULE_0__math__["k" /* halfPi */] - __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */]) y = __WEBPACK_IMPORTED_MODULE_0__math__["k" /* halfPi */] - __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */]; } - var r = f / __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["t" /* pow */])(tany(y), n); - return [r * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(n * x), f - r * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(n * x)]; - } - - project.invert = function(x, y) { - var fy = f - y, r = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["s" /* sign */])(n) * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["n" /* sqrt */])(x * x + fy * fy); - return [__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["e" /* atan2 */])(x, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["p" /* abs */])(fy)) / n * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["s" /* sign */])(fy), 2 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["l" /* atan */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["t" /* pow */])(f / r, 1 / n)) - __WEBPACK_IMPORTED_MODULE_0__math__["k" /* halfPi */]]; - }; - - return project; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__conic__["a" /* conicProjection */])(conicConformalRaw) - .scale(109.5) - .parallels([30, 30]); -}); - - -/***/ }), -/* 258 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = conicEquidistantRaw; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__conic__ = __webpack_require__(58); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__equirectangular__ = __webpack_require__(122); - - - - -function conicEquidistantRaw(y0, y1) { - var cy0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(y0), - n = y0 === y1 ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(y0) : (cy0 - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(y1)) / (y1 - y0), - g = cy0 / n + y0; - - if (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["p" /* abs */])(n) < __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */]) return __WEBPACK_IMPORTED_MODULE_2__equirectangular__["b" /* equirectangularRaw */]; - - function project(x, y) { - var gy = g - y, nx = n * x; - return [gy * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(nx), g - gy * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(nx)]; - } - - project.invert = function(x, y) { - var gy = g - y; - return [__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["e" /* atan2 */])(x, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["p" /* abs */])(gy)) / n * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["s" /* sign */])(gy), g - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["s" /* sign */])(n) * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["n" /* sqrt */])(x * x + gy * gy)]; - }; - - return project; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__conic__["a" /* conicProjection */])(conicEquidistantRaw) - .scale(131.154) - .center([0, 13.9389]); -}); - - -/***/ }), -/* 259 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = cylindricalEqualAreaRaw; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); - - -function cylindricalEqualAreaRaw(phi0) { - var cosPhi0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(phi0); - - function forward(lambda, phi) { - return [lambda * cosPhi0, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(phi) / cosPhi0]; - } - - forward.invert = function(x, y) { - return [x / cosPhi0, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["f" /* asin */])(y * cosPhi0)]; - }; - - return forward; -} - - -/***/ }), -/* 260 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = gnomonicRaw; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__azimuthal__ = __webpack_require__(24); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__index__ = __webpack_require__(8); - - - - -function gnomonicRaw(x, y) { - var cy = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(y), k = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(x) * cy; - return [cy * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(x) / k, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(y) / k]; -} - -gnomonicRaw.invert = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__azimuthal__["a" /* azimuthalInvert */])(__WEBPACK_IMPORTED_MODULE_0__math__["l" /* atan */]); - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__index__["a" /* default */])(gnomonicRaw) - .scale(144.049) - .clipAngle(60); -}); - - -/***/ }), -/* 261 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__clip_extent__ = __webpack_require__(56); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__identity__ = __webpack_require__(57); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__transform__ = __webpack_require__(35); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__fit__ = __webpack_require__(60); - - - - - -function scaleTranslate(kx, ky, tx, ty) { - return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? __WEBPACK_IMPORTED_MODULE_1__identity__["a" /* default */] : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__transform__["b" /* transformer */])({ - point: function(x, y) { - this.stream.point(x * kx + tx, y * ky + ty); - } - }); -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = __WEBPACK_IMPORTED_MODULE_1__identity__["a" /* default */], // scale, translate and reflect - x0 = null, y0, x1, y1, clip = __WEBPACK_IMPORTED_MODULE_1__identity__["a" /* default */], // clip extent - cache, - cacheStream, - projection; - - function reset() { - cache = cacheStream = null; - return projection; - } - - return projection = { - stream: function(stream) { - return cache && cacheStream === stream ? cache : cache = transform(clip(cacheStream = stream)); - }, - clipExtent: function(_) { - return arguments.length ? (clip = _ == null ? (x0 = y0 = x1 = y1 = null, __WEBPACK_IMPORTED_MODULE_1__identity__["a" /* default */]) : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__clip_extent__["b" /* clipExtent */])(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; - }, - scale: function(_) { - return arguments.length ? (transform = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k; - }, - translate: function(_) { - return arguments.length ? (transform = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty]; - }, - reflectX: function(_) { - return arguments.length ? (transform = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0; - }, - reflectY: function(_) { - return arguments.length ? (transform = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0; - }, - fitExtent: function(extent, object) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__fit__["a" /* fitExtent */])(projection, extent, object); - }, - fitSize: function(size, object) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__fit__["b" /* fitSize */])(projection, size, object); - } - }; -}); - - -/***/ }), -/* 262 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = orthographicRaw; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__azimuthal__ = __webpack_require__(24); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__index__ = __webpack_require__(8); - - - - -function orthographicRaw(x, y) { - return [__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(y) * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(x), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(y)]; -} - -orthographicRaw.invert = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__azimuthal__["a" /* azimuthalInvert */])(__WEBPACK_IMPORTED_MODULE_0__math__["f" /* asin */]); - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__index__["a" /* default */])(orthographicRaw) - .scale(249.5) - .clipAngle(90 + __WEBPACK_IMPORTED_MODULE_0__math__["o" /* epsilon */]); -}); - - -/***/ }), -/* 263 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cartesian__ = __webpack_require__(23); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__transform__ = __webpack_require__(35); - - - - -var maxDepth = 16, // maximum depth of subdivision - cosMinDistance = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["c" /* cos */])(30 * __WEBPACK_IMPORTED_MODULE_1__math__["g" /* radians */]); // cos(minimum angular distance) - -/* harmony default export */ __webpack_exports__["a"] = (function(project, delta2) { - return +delta2 ? resample(project, delta2) : resampleNone(project); -}); - -function resampleNone(project) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__transform__["b" /* transformer */])({ - point: function(x, y) { - x = project(x, y); - this.stream.point(x[0], x[1]); - } - }); -} - -function resample(project, delta2) { - - function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) { - var dx = x1 - x0, - dy = y1 - y0, - d2 = dx * dx + dy * dy; - if (d2 > 4 * delta2 && depth--) { - var a = a0 + a1, - b = b0 + b1, - c = c0 + c1, - m = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["n" /* sqrt */])(a * a + b * b + c * c), - phi2 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["f" /* asin */])(c /= m), - lambda2 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["p" /* abs */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["p" /* abs */])(c) - 1) < __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */] || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["p" /* abs */])(lambda0 - lambda1) < __WEBPACK_IMPORTED_MODULE_1__math__["o" /* epsilon */] ? (lambda0 + lambda1) / 2 : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["e" /* atan2 */])(b, a), - p = project(lambda2, phi2), - x2 = p[0], - y2 = p[1], - dx2 = x2 - x0, - dy2 = y2 - y0, - dz = dy * dx2 - dx * dy2; - if (dz * dz / d2 > delta2 // perpendicular projected distance - || __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__math__["p" /* abs */])((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end - || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance - resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream); - stream.point(x2, y2); - resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream); - } - } - } - return function(stream) { - var lambda00, x00, y00, a00, b00, c00, // first point - lambda0, x0, y0, a0, b0, c0; // previous point - - var resampleStream = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; }, - polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; } - }; - - function point(x, y) { - x = project(x, y); - stream.point(x[0], x[1]); - } - - function lineStart() { - x0 = NaN; - resampleStream.point = linePoint; - stream.lineStart(); - } - - function linePoint(lambda, phi) { - var c = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cartesian__["a" /* cartesian */])([lambda, phi]), p = project(lambda, phi); - resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); - stream.point(x0, y0); - } - - function lineEnd() { - resampleStream.point = point; - stream.lineEnd(); - } - - function ringStart() { - lineStart(); - resampleStream.point = ringPoint; - resampleStream.lineEnd = ringEnd; - } - - function ringPoint(lambda, phi) { - linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; - resampleStream.point = linePoint; - } - - function ringEnd() { - resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream); - resampleStream.lineEnd = lineEnd; - lineEnd(); - } - - return resampleStream; - }; -} - - -/***/ }), -/* 264 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = stereographicRaw; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__azimuthal__ = __webpack_require__(24); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__index__ = __webpack_require__(8); - - - - -function stereographicRaw(x, y) { - var cy = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(y), k = 1 + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["c" /* cos */])(x) * cy; - return [cy * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(x) / k, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["d" /* sin */])(y) / k]; -} - -stereographicRaw.invert = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__azimuthal__["a" /* azimuthalInvert */])(function(z) { - return 2 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["l" /* atan */])(z); -}); - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__index__["a" /* default */])(stereographicRaw) - .scale(250) - .clipAngle(142); -}); - - -/***/ }), -/* 265 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = transverseMercatorRaw; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__math__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__mercator__ = __webpack_require__(61); - - - -function transverseMercatorRaw(lambda, phi) { - return [__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["i" /* log */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["j" /* tan */])((__WEBPACK_IMPORTED_MODULE_0__math__["k" /* halfPi */] + phi) / 2)), -lambda]; -} - -transverseMercatorRaw.invert = function(x, y) { - return [-y, 2 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["l" /* atan */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__math__["m" /* exp */])(x)) - __WEBPACK_IMPORTED_MODULE_0__math__["k" /* halfPi */]]; -}; - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var m = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__mercator__["c" /* mercatorProjection */])(transverseMercatorRaw), - center = m.center, - rotate = m.rotate; - - m.center = function(_) { - return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]); - }; - - m.rotate = function(_) { - return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]); - }; - - return rotate([0, 0, 90]) - .scale(159.155); -}); - - -/***/ }), -/* 266 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_cluster__ = __webpack_require__(267); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_cluster__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_hierarchy_index__ = __webpack_require__(63); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__src_hierarchy_index__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_pack_index__ = __webpack_require__(279); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_2__src_pack_index__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_pack_siblings__ = __webpack_require__(125); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_3__src_pack_siblings__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_pack_enclose__ = __webpack_require__(124); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_4__src_pack_enclose__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_partition__ = __webpack_require__(281); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_5__src_partition__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_stratify__ = __webpack_require__(282); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_6__src_stratify__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_tree__ = __webpack_require__(283); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_7__src_tree__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__src_treemap_index__ = __webpack_require__(285); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_8__src_treemap_index__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_treemap_binary__ = __webpack_require__(284); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_9__src_treemap_binary__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__src_treemap_dice__ = __webpack_require__(25); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_10__src_treemap_dice__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__src_treemap_slice__ = __webpack_require__(36); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_11__src_treemap_slice__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__src_treemap_sliceDice__ = __webpack_require__(287); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_12__src_treemap_sliceDice__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__src_treemap_squarify__ = __webpack_require__(64); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_13__src_treemap_squarify__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__src_treemap_resquarify__ = __webpack_require__(286); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_14__src_treemap_resquarify__["a"]; }); - - - - - - - - - - - - - - - - - -/***/ }), -/* 267 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function defaultSeparation(a, b) { - return a.parent === b.parent ? 1 : 2; -} - -function meanX(children) { - return children.reduce(meanXReduce, 0) / children.length; -} - -function meanXReduce(x, c) { - return x + c.x; -} - -function maxY(children) { - return 1 + children.reduce(maxYReduce, 0); -} - -function maxYReduce(y, c) { - return Math.max(y, c.y); -} - -function leafLeft(node) { - var children; - while (children = node.children) node = children[0]; - return node; -} - -function leafRight(node) { - var children; - while (children = node.children) node = children[children.length - 1]; - return node; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var separation = defaultSeparation, - dx = 1, - dy = 1, - nodeSize = false; - - function cluster(root) { - var previousNode, - x = 0; - - // First walk, computing the initial x & y values. - root.eachAfter(function(node) { - var children = node.children; - if (children) { - node.x = meanX(children); - node.y = maxY(children); - } else { - node.x = previousNode ? x += separation(node, previousNode) : 0; - node.y = 0; - previousNode = node; - } - }); - - var left = leafLeft(root), - right = leafRight(root), - x0 = left.x - separation(left, right) / 2, - x1 = right.x + separation(right, left) / 2; - - // Second walk, normalizing x & y to the desired size. - return root.eachAfter(nodeSize ? function(node) { - node.x = (node.x - root.x) * dx; - node.y = (root.y - node.y) * dy; - } : function(node) { - node.x = (node.x - x0) / (x1 - x0) * dx; - node.y = (1 - (root.y ? node.y / root.y : 1)) * dy; - }); - } - - cluster.separation = function(x) { - return arguments.length ? (separation = x, cluster) : separation; - }; - - cluster.size = function(x) { - return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]); - }; - - cluster.nodeSize = function(x) { - return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null); - }; - - return cluster; -}); - - -/***/ }), -/* 268 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() { - var node = this, nodes = [node]; - while (node = node.parent) { - nodes.push(node); - } - return nodes; -}); - - -/***/ }), -/* 269 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function count(node) { - var sum = 0, - children = node.children, - i = children && children.length; - if (!i) sum = 1; - else while (--i >= 0) sum += children[i].value; - node.value = sum; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return this.eachAfter(count); -}); - - -/***/ }), -/* 270 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() { - var nodes = []; - this.each(function(node) { - nodes.push(node); - }); - return nodes; -}); - - -/***/ }), -/* 271 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(callback) { - var node = this, current, next = [node], children, i, n; - do { - current = next.reverse(), next = []; - while (node = current.pop()) { - callback(node), children = node.children; - if (children) for (i = 0, n = children.length; i < n; ++i) { - next.push(children[i]); - } - } - } while (next.length); - return this; -}); - - -/***/ }), -/* 272 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(callback) { - var node = this, nodes = [node], next = [], children, i, n; - while (node = nodes.pop()) { - next.push(node), children = node.children; - if (children) for (i = 0, n = children.length; i < n; ++i) { - nodes.push(children[i]); - } - } - while (node = next.pop()) { - callback(node); - } - return this; -}); - - -/***/ }), -/* 273 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(callback) { - var node = this, nodes = [node], children, i; - while (node = nodes.pop()) { - callback(node), children = node.children; - if (children) for (i = children.length - 1; i >= 0; --i) { - nodes.push(children[i]); - } - } - return this; -}); - - -/***/ }), -/* 274 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() { - var leaves = []; - this.eachBefore(function(node) { - if (!node.children) { - leaves.push(node); - } - }); - return leaves; -}); - - -/***/ }), -/* 275 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() { - var root = this, links = []; - root.each(function(node) { - if (node !== root) { // Don’t include the root’s parent, if any. - links.push({source: node.parent, target: node}); - } - }); - return links; -}); - - -/***/ }), -/* 276 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(end) { - var start = this, - ancestor = leastCommonAncestor(start, end), - nodes = [start]; - while (start !== ancestor) { - start = start.parent; - nodes.push(start); - } - var k = nodes.length; - while (end !== ancestor) { - nodes.splice(k, 0, end); - end = end.parent; - } - return nodes; -}); - -function leastCommonAncestor(a, b) { - if (a === b) return a; - var aNodes = a.ancestors(), - bNodes = b.ancestors(), - c = null; - a = aNodes.pop(); - b = bNodes.pop(); - while (a === b) { - c = a; - a = aNodes.pop(); - b = bNodes.pop(); - } - return c; -} - - -/***/ }), -/* 277 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(compare) { - return this.eachBefore(function(node) { - if (node.children) { - node.children.sort(compare); - } - }); -}); - - -/***/ }), -/* 278 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(value) { - return this.eachAfter(function(node) { - var sum = +value(node.data) || 0, - children = node.children, - i = children && children.length; - while (--i >= 0) sum += children[i].value; - node.value = sum; - }); -}); - - -/***/ }), -/* 279 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__siblings__ = __webpack_require__(125); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__accessors__ = __webpack_require__(62); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__constant__ = __webpack_require__(123); - - - - -function defaultRadius(d) { - return Math.sqrt(d.value); -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var radius = null, - dx = 1, - dy = 1, - padding = __WEBPACK_IMPORTED_MODULE_2__constant__["a" /* constantZero */]; - - function pack(root) { - root.x = dx / 2, root.y = dy / 2; - if (radius) { - root.eachBefore(radiusLeaf(radius)) - .eachAfter(packChildren(padding, 0.5)) - .eachBefore(translateChild(1)); - } else { - root.eachBefore(radiusLeaf(defaultRadius)) - .eachAfter(packChildren(__WEBPACK_IMPORTED_MODULE_2__constant__["a" /* constantZero */], 1)) - .eachAfter(packChildren(padding, root.r / Math.min(dx, dy))) - .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r))); - } - return root; - } - - pack.radius = function(x) { - return arguments.length ? (radius = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__accessors__["b" /* optional */])(x), pack) : radius; - }; - - pack.size = function(x) { - return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy]; - }; - - pack.padding = function(x) { - return arguments.length ? (padding = typeof x === "function" ? x : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__constant__["b" /* default */])(+x), pack) : padding; - }; - - return pack; -}); - -function radiusLeaf(radius) { - return function(node) { - if (!node.children) { - node.r = Math.max(0, +radius(node) || 0); - } - }; -} - -function packChildren(padding, k) { - return function(node) { - if (children = node.children) { - var children, - i, - n = children.length, - r = padding(node) * k || 0, - e; - - if (r) for (i = 0; i < n; ++i) children[i].r += r; - e = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__siblings__["b" /* packEnclose */])(children); - if (r) for (i = 0; i < n; ++i) children[i].r -= r; - node.r = e + r; - } - }; -} - -function translateChild(k) { - return function(node) { - var parent = node.parent; - node.r *= k; - if (parent) { - node.x = parent.x + k * node.x; - node.y = parent.y + k * node.y; - } - }; -} - - -/***/ }), -/* 280 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function Node(value) { - this._ = value; - this.next = null; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(array) { - var i, - n = (array = array.slice()).length, - head = null, - node = head; - - while (n) { - var next = new Node(array[n - 1]); - if (node) node = node.next = next; - else node = head = next; - array[i] = array[--n]; - } - - return { - head: head, - tail: node - }; -}); - - -/***/ }), -/* 281 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__treemap_round__ = __webpack_require__(126); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__treemap_dice__ = __webpack_require__(25); - - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var dx = 1, - dy = 1, - padding = 0, - round = false; - - function partition(root) { - var n = root.height + 1; - root.x0 = - root.y0 = padding; - root.x1 = dx; - root.y1 = dy / n; - root.eachBefore(positionNode(dy, n)); - if (round) root.eachBefore(__WEBPACK_IMPORTED_MODULE_0__treemap_round__["a" /* default */]); - return root; - } - - function positionNode(dy, n) { - return function(node) { - if (node.children) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__treemap_dice__["a" /* default */])(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n); - } - var x0 = node.x0, - y0 = node.y0, - x1 = node.x1 - padding, - y1 = node.y1 - padding; - if (x1 < x0) x0 = x1 = (x0 + x1) / 2; - if (y1 < y0) y0 = y1 = (y0 + y1) / 2; - node.x0 = x0; - node.y0 = y0; - node.x1 = x1; - node.y1 = y1; - }; - } - - partition.round = function(x) { - return arguments.length ? (round = !!x, partition) : round; - }; - - partition.size = function(x) { - return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy]; - }; - - partition.padding = function(x) { - return arguments.length ? (padding = +x, partition) : padding; - }; - - return partition; -}); - - -/***/ }), -/* 282 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__accessors__ = __webpack_require__(62); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__hierarchy_index__ = __webpack_require__(63); - - - -var keyPrefix = "$", // Protect against keys like “__proto__”. - preroot = {depth: -1}, - ambiguous = {}; - -function defaultId(d) { - return d.id; -} - -function defaultParentId(d) { - return d.parentId; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var id = defaultId, - parentId = defaultParentId; - - function stratify(data) { - var d, - i, - n = data.length, - root, - parent, - node, - nodes = new Array(n), - nodeId, - nodeKey, - nodeByKey = {}; - - for (i = 0; i < n; ++i) { - d = data[i], node = nodes[i] = new __WEBPACK_IMPORTED_MODULE_1__hierarchy_index__["b" /* Node */](d); - if ((nodeId = id(d, i, data)) != null && (nodeId += "")) { - nodeKey = keyPrefix + (node.id = nodeId); - nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node; - } - } - - for (i = 0; i < n; ++i) { - node = nodes[i], nodeId = parentId(data[i], i, data); - if (nodeId == null || !(nodeId += "")) { - if (root) throw new Error("multiple roots"); - root = node; - } else { - parent = nodeByKey[keyPrefix + nodeId]; - if (!parent) throw new Error("missing: " + nodeId); - if (parent === ambiguous) throw new Error("ambiguous: " + nodeId); - if (parent.children) parent.children.push(node); - else parent.children = [node]; - node.parent = parent; - } - } - - if (!root) throw new Error("no root"); - root.parent = preroot; - root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(__WEBPACK_IMPORTED_MODULE_1__hierarchy_index__["c" /* computeHeight */]); - root.parent = null; - if (n > 0) throw new Error("cycle"); - - return root; - } - - stratify.id = function(x) { - return arguments.length ? (id = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__accessors__["a" /* required */])(x), stratify) : id; - }; - - stratify.parentId = function(x) { - return arguments.length ? (parentId = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__accessors__["a" /* required */])(x), stratify) : parentId; - }; - - return stratify; -}); - - -/***/ }), -/* 283 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__hierarchy_index__ = __webpack_require__(63); - - -function defaultSeparation(a, b) { - return a.parent === b.parent ? 1 : 2; -} - -// function radialSeparation(a, b) { -// return (a.parent === b.parent ? 1 : 2) / a.depth; -// } - -// This function is used to traverse the left contour of a subtree (or -// subforest). It returns the successor of v on this contour. This successor is -// either given by the leftmost child of v or by the thread of v. The function -// returns null if and only if v is on the highest level of its subtree. -function nextLeft(v) { - var children = v.children; - return children ? children[0] : v.t; -} - -// This function works analogously to nextLeft. -function nextRight(v) { - var children = v.children; - return children ? children[children.length - 1] : v.t; -} - -// Shifts the current subtree rooted at w+. This is done by increasing -// prelim(w+) and mod(w+) by shift. -function moveSubtree(wm, wp, shift) { - var change = shift / (wp.i - wm.i); - wp.c -= change; - wp.s += shift; - wm.c += change; - wp.z += shift; - wp.m += shift; -} - -// All other shifts, applied to the smaller subtrees between w- and w+, are -// performed by this function. To prepare the shifts, we have to adjust -// change(w+), shift(w+), and change(w-). -function executeShifts(v) { - var shift = 0, - change = 0, - children = v.children, - i = children.length, - w; - while (--i >= 0) { - w = children[i]; - w.z += shift; - w.m += shift; - shift += w.s + (change += w.c); - } -} - -// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise, -// returns the specified (default) ancestor. -function nextAncestor(vim, v, ancestor) { - return vim.a.parent === v.parent ? vim.a : ancestor; -} - -function TreeNode(node, i) { - this._ = node; - this.parent = null; - this.children = null; - this.A = null; // default ancestor - this.a = this; // ancestor - this.z = 0; // prelim - this.m = 0; // mod - this.c = 0; // change - this.s = 0; // shift - this.t = null; // thread - this.i = i; // number -} - -TreeNode.prototype = Object.create(__WEBPACK_IMPORTED_MODULE_0__hierarchy_index__["b" /* Node */].prototype); - -function treeRoot(root) { - var tree = new TreeNode(root, 0), - node, - nodes = [tree], - child, - children, - i, - n; - - while (node = nodes.pop()) { - if (children = node._.children) { - node.children = new Array(n = children.length); - for (i = n - 1; i >= 0; --i) { - nodes.push(child = node.children[i] = new TreeNode(children[i], i)); - child.parent = node; - } - } - } - - (tree.parent = new TreeNode(null, 0)).children = [tree]; - return tree; -} - -// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm -/* harmony default export */ __webpack_exports__["a"] = (function() { - var separation = defaultSeparation, - dx = 1, - dy = 1, - nodeSize = null; - - function tree(root) { - var t = treeRoot(root); - - // Compute the layout using Buchheim et al.’s algorithm. - t.eachAfter(firstWalk), t.parent.m = -t.z; - t.eachBefore(secondWalk); - - // If a fixed node size is specified, scale x and y. - if (nodeSize) root.eachBefore(sizeNode); - - // If a fixed tree size is specified, scale x and y based on the extent. - // Compute the left-most, right-most, and depth-most nodes for extents. - else { - var left = root, - right = root, - bottom = root; - root.eachBefore(function(node) { - if (node.x < left.x) left = node; - if (node.x > right.x) right = node; - if (node.depth > bottom.depth) bottom = node; - }); - var s = left === right ? 1 : separation(left, right) / 2, - tx = s - left.x, - kx = dx / (right.x + s + tx), - ky = dy / (bottom.depth || 1); - root.eachBefore(function(node) { - node.x = (node.x + tx) * kx; - node.y = node.depth * ky; - }); - } - - return root; - } - - // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is - // applied recursively to the children of v, as well as the function - // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the - // node v is placed to the midpoint of its outermost children. - function firstWalk(v) { - var children = v.children, - siblings = v.parent.children, - w = v.i ? siblings[v.i - 1] : null; - if (children) { - executeShifts(v); - var midpoint = (children[0].z + children[children.length - 1].z) / 2; - if (w) { - v.z = w.z + separation(v._, w._); - v.m = v.z - midpoint; - } else { - v.z = midpoint; - } - } else if (w) { - v.z = w.z + separation(v._, w._); - } - v.parent.A = apportion(v, w, v.parent.A || siblings[0]); - } - - // Computes all real x-coordinates by summing up the modifiers recursively. - function secondWalk(v) { - v._.x = v.z + v.parent.m; - v.m += v.parent.m; - } - - // The core of the algorithm. Here, a new subtree is combined with the - // previous subtrees. Threads are used to traverse the inside and outside - // contours of the left and right subtree up to the highest common level. The - // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the - // superscript o means outside and i means inside, the subscript - means left - // subtree and + means right subtree. For summing up the modifiers along the - // contour, we use respective variables si+, si-, so-, and so+. Whenever two - // nodes of the inside contours conflict, we compute the left one of the - // greatest uncommon ancestors using the function ANCESTOR and call MOVE - // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees. - // Finally, we add a new thread (if necessary). - function apportion(v, w, ancestor) { - if (w) { - var vip = v, - vop = v, - vim = w, - vom = vip.parent.children[0], - sip = vip.m, - sop = vop.m, - sim = vim.m, - som = vom.m, - shift; - while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) { - vom = nextLeft(vom); - vop = nextRight(vop); - vop.a = v; - shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); - if (shift > 0) { - moveSubtree(nextAncestor(vim, v, ancestor), v, shift); - sip += shift; - sop += shift; - } - sim += vim.m; - sip += vip.m; - som += vom.m; - sop += vop.m; - } - if (vim && !nextRight(vop)) { - vop.t = vim; - vop.m += sim - sop; - } - if (vip && !nextLeft(vom)) { - vom.t = vip; - vom.m += sip - som; - ancestor = v; - } - } - return ancestor; - } - - function sizeNode(node) { - node.x *= dx; - node.y = node.depth * dy; - } - - tree.separation = function(x) { - return arguments.length ? (separation = x, tree) : separation; - }; - - tree.size = function(x) { - return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]); - }; - - tree.nodeSize = function(x) { - return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null); - }; - - return tree; -}); - - -/***/ }), -/* 284 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(parent, x0, y0, x1, y1) { - var nodes = parent.children, - i, n = nodes.length, - sum, sums = new Array(n + 1); - - for (sums[0] = sum = i = 0; i < n; ++i) { - sums[i + 1] = sum += nodes[i].value; - } - - partition(0, n, parent.value, x0, y0, x1, y1); - - function partition(i, j, value, x0, y0, x1, y1) { - if (i >= j - 1) { - var node = nodes[i]; - node.x0 = x0, node.y0 = y0; - node.x1 = x1, node.y1 = y1; - return; - } - - var valueOffset = sums[i], - valueTarget = (value / 2) + valueOffset, - k = i + 1, - hi = j - 1; - - while (k < hi) { - var mid = k + hi >>> 1; - if (sums[mid] < valueTarget) k = mid + 1; - else hi = mid; - } - - if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k; - - var valueLeft = sums[k] - valueOffset, - valueRight = value - valueLeft; - - if ((x1 - x0) > (y1 - y0)) { - var xk = (x0 * valueRight + x1 * valueLeft) / value; - partition(i, k, valueLeft, x0, y0, xk, y1); - partition(k, j, valueRight, xk, y0, x1, y1); - } else { - var yk = (y0 * valueRight + y1 * valueLeft) / value; - partition(i, k, valueLeft, x0, y0, x1, yk); - partition(k, j, valueRight, x0, yk, x1, y1); - } - } -}); - - -/***/ }), -/* 285 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__round__ = __webpack_require__(126); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__squarify__ = __webpack_require__(64); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__accessors__ = __webpack_require__(62); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__constant__ = __webpack_require__(123); - - - - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var tile = __WEBPACK_IMPORTED_MODULE_1__squarify__["a" /* default */], - round = false, - dx = 1, - dy = 1, - paddingStack = [0], - paddingInner = __WEBPACK_IMPORTED_MODULE_3__constant__["a" /* constantZero */], - paddingTop = __WEBPACK_IMPORTED_MODULE_3__constant__["a" /* constantZero */], - paddingRight = __WEBPACK_IMPORTED_MODULE_3__constant__["a" /* constantZero */], - paddingBottom = __WEBPACK_IMPORTED_MODULE_3__constant__["a" /* constantZero */], - paddingLeft = __WEBPACK_IMPORTED_MODULE_3__constant__["a" /* constantZero */]; - - function treemap(root) { - root.x0 = - root.y0 = 0; - root.x1 = dx; - root.y1 = dy; - root.eachBefore(positionNode); - paddingStack = [0]; - if (round) root.eachBefore(__WEBPACK_IMPORTED_MODULE_0__round__["a" /* default */]); - return root; - } - - function positionNode(node) { - var p = paddingStack[node.depth], - x0 = node.x0 + p, - y0 = node.y0 + p, - x1 = node.x1 - p, - y1 = node.y1 - p; - if (x1 < x0) x0 = x1 = (x0 + x1) / 2; - if (y1 < y0) y0 = y1 = (y0 + y1) / 2; - node.x0 = x0; - node.y0 = y0; - node.x1 = x1; - node.y1 = y1; - if (node.children) { - p = paddingStack[node.depth + 1] = paddingInner(node) / 2; - x0 += paddingLeft(node) - p; - y0 += paddingTop(node) - p; - x1 -= paddingRight(node) - p; - y1 -= paddingBottom(node) - p; - if (x1 < x0) x0 = x1 = (x0 + x1) / 2; - if (y1 < y0) y0 = y1 = (y0 + y1) / 2; - tile(node, x0, y0, x1, y1); - } - } - - treemap.round = function(x) { - return arguments.length ? (round = !!x, treemap) : round; - }; - - treemap.size = function(x) { - return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy]; - }; - - treemap.tile = function(x) { - return arguments.length ? (tile = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__accessors__["a" /* required */])(x), treemap) : tile; - }; - - treemap.padding = function(x) { - return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner(); - }; - - treemap.paddingInner = function(x) { - return arguments.length ? (paddingInner = typeof x === "function" ? x : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__constant__["b" /* default */])(+x), treemap) : paddingInner; - }; - - treemap.paddingOuter = function(x) { - return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop(); - }; - - treemap.paddingTop = function(x) { - return arguments.length ? (paddingTop = typeof x === "function" ? x : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__constant__["b" /* default */])(+x), treemap) : paddingTop; - }; - - treemap.paddingRight = function(x) { - return arguments.length ? (paddingRight = typeof x === "function" ? x : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__constant__["b" /* default */])(+x), treemap) : paddingRight; - }; - - treemap.paddingBottom = function(x) { - return arguments.length ? (paddingBottom = typeof x === "function" ? x : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__constant__["b" /* default */])(+x), treemap) : paddingBottom; - }; - - treemap.paddingLeft = function(x) { - return arguments.length ? (paddingLeft = typeof x === "function" ? x : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__constant__["b" /* default */])(+x), treemap) : paddingLeft; - }; - - return treemap; -}); - - -/***/ }), -/* 286 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dice__ = __webpack_require__(25); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__slice__ = __webpack_require__(36); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__squarify__ = __webpack_require__(64); - - - - -/* harmony default export */ __webpack_exports__["a"] = ((function custom(ratio) { - - function resquarify(parent, x0, y0, x1, y1) { - if ((rows = parent._squarify) && (rows.ratio === ratio)) { - var rows, - row, - nodes, - i, - j = -1, - n, - m = rows.length, - value = parent.value; - - while (++j < m) { - row = rows[j], nodes = row.children; - for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value; - if (row.dice) __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__dice__["a" /* default */])(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value); - else __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__slice__["a" /* default */])(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1); - value -= row.value; - } - } else { - parent._squarify = rows = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__squarify__["b" /* squarifyRatio */])(ratio, parent, x0, y0, x1, y1); - rows.ratio = ratio; - } - } - - resquarify.ratio = function(x) { - return custom((x = +x) > 1 ? x : 1); - }; - - return resquarify; -})(__WEBPACK_IMPORTED_MODULE_2__squarify__["c" /* phi */])); - - -/***/ }), -/* 287 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__dice__ = __webpack_require__(25); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__slice__ = __webpack_require__(36); - - - -/* harmony default export */ __webpack_exports__["a"] = (function(parent, x0, y0, x1, y1) { - (parent.depth & 1 ? __WEBPACK_IMPORTED_MODULE_1__slice__["a" /* default */] : __WEBPACK_IMPORTED_MODULE_0__dice__["a" /* default */])(parent, x0, y0, x1, y1); -}); - - -/***/ }), -/* 288 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return cubehelixLong; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_color__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__color__ = __webpack_require__(26); - - - -function cubehelix(hue) { - return (function cubehelixGamma(y) { - y = +y; - - function cubehelix(start, end) { - var h = hue((start = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["b" /* cubehelix */])(start)).h, (end = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["b" /* cubehelix */])(end)).h), - s = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */])(start.s, end.s), - l = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */])(start.l, end.l), - opacity = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */])(start.opacity, end.opacity); - return function(t) { - start.h = h(t); - start.s = s(t); - start.l = l(Math.pow(t, y)); - start.opacity = opacity(t); - return start + ""; - }; - } - - cubehelix.gamma = cubehelixGamma; - - return cubehelix; - })(1); -} - -/* harmony default export */ __webpack_exports__["a"] = (cubehelix(__WEBPACK_IMPORTED_MODULE_1__color__["b" /* hue */])); -var cubehelixLong = cubehelix(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */]); - - -/***/ }), -/* 289 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return hclLong; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_color__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__color__ = __webpack_require__(26); - - - -function hcl(hue) { - return function(start, end) { - var h = hue((start = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["c" /* hcl */])(start)).h, (end = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["c" /* hcl */])(end)).h), - c = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */])(start.c, end.c), - l = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */])(start.l, end.l), - opacity = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */])(start.opacity, end.opacity); - return function(t) { - start.h = h(t); - start.c = c(t); - start.l = l(t); - start.opacity = opacity(t); - return start + ""; - }; - } -} - -/* harmony default export */ __webpack_exports__["a"] = (hcl(__WEBPACK_IMPORTED_MODULE_1__color__["b" /* hue */])); -var hclLong = hcl(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */]); - - -/***/ }), -/* 290 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return hslLong; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_color__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__color__ = __webpack_require__(26); - - - -function hsl(hue) { - return function(start, end) { - var h = hue((start = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["e" /* hsl */])(start)).h, (end = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["e" /* hsl */])(end)).h), - s = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */])(start.s, end.s), - l = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */])(start.l, end.l), - opacity = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */])(start.opacity, end.opacity); - return function(t) { - start.h = h(t); - start.s = s(t); - start.l = l(t); - start.opacity = opacity(t); - return start + ""; - }; - } -} - -/* harmony default export */ __webpack_exports__["a"] = (hsl(__WEBPACK_IMPORTED_MODULE_1__color__["b" /* hue */])); -var hslLong = hsl(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */]); - - -/***/ }), -/* 291 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = lab; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_color__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__color__ = __webpack_require__(26); - - - -function lab(start, end) { - var l = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */])((start = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["d" /* lab */])(start)).l, (end = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["d" /* lab */])(end)).l), - a = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */])(start.a, end.a), - b = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */])(start.b, end.b), - opacity = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__color__["a" /* default */])(start.opacity, end.opacity); - return function(t) { - start.l = l(t); - start.a = a(t); - start.b = b(t); - start.opacity = opacity(t); - return start + ""; - }; -} - - -/***/ }), -/* 292 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(interpolator, n) { - var samples = new Array(n); - for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1)); - return samples; -}); - - -/***/ }), -/* 293 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(a, b) { - return a = +a, b -= a, function(t) { - return Math.round(a + b * t); - }; -}); - - -/***/ }), -/* 294 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return identity; }); -var degrees = 180 / Math.PI; - -var identity = { - translateX: 0, - translateY: 0, - rotate: 0, - skewX: 0, - scaleX: 1, - scaleY: 1 -}; - -/* harmony default export */ __webpack_exports__["b"] = (function(a, b, c, d, e, f) { - var scaleX, scaleY, skewX; - if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX; - if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX; - if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY; - if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; - return { - translateX: e, - translateY: f, - rotate: Math.atan2(b, a) * degrees, - skewX: Math.atan(skewX) * degrees, - scaleX: scaleX, - scaleY: scaleY - }; -}); - - -/***/ }), -/* 295 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return interpolateTransformCss; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return interpolateTransformSvg; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__number__ = __webpack_require__(37); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__parse__ = __webpack_require__(296); - - - -function interpolateTransform(parse, pxComma, pxParen, degParen) { - - function pop(s) { - return s.length ? s.pop() + " " : ""; - } - - function translate(xa, ya, xb, yb, s, q) { - if (xa !== xb || ya !== yb) { - var i = s.push("translate(", null, pxComma, null, pxParen); - q.push({i: i - 4, x: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__number__["a" /* default */])(xa, xb)}, {i: i - 2, x: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__number__["a" /* default */])(ya, yb)}); - } else if (xb || yb) { - s.push("translate(" + xb + pxComma + yb + pxParen); - } - } - - function rotate(a, b, s, q) { - if (a !== b) { - if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path - q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__number__["a" /* default */])(a, b)}); - } else if (b) { - s.push(pop(s) + "rotate(" + b + degParen); - } - } - - function skewX(a, b, s, q) { - if (a !== b) { - q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__number__["a" /* default */])(a, b)}); - } else if (b) { - s.push(pop(s) + "skewX(" + b + degParen); - } - } - - function scale(xa, ya, xb, yb, s, q) { - if (xa !== xb || ya !== yb) { - var i = s.push(pop(s) + "scale(", null, ",", null, ")"); - q.push({i: i - 4, x: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__number__["a" /* default */])(xa, xb)}, {i: i - 2, x: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__number__["a" /* default */])(ya, yb)}); - } else if (xb !== 1 || yb !== 1) { - s.push(pop(s) + "scale(" + xb + "," + yb + ")"); - } - } - - return function(a, b) { - var s = [], // string constants and placeholders - q = []; // number interpolators - a = parse(a), b = parse(b); - translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q); - rotate(a.rotate, b.rotate, s, q); - skewX(a.skewX, b.skewX, s, q); - scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q); - a = b = null; // gc - return function(t) { - var i = -1, n = q.length, o; - while (++i < n) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }; - }; -} - -var interpolateTransformCss = interpolateTransform(__WEBPACK_IMPORTED_MODULE_1__parse__["a" /* parseCss */], "px, ", "px)", "deg)"); -var interpolateTransformSvg = interpolateTransform(__WEBPACK_IMPORTED_MODULE_1__parse__["b" /* parseSvg */], ", ", ")", ")"); - - -/***/ }), -/* 296 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = parseCss; -/* harmony export (immutable) */ __webpack_exports__["b"] = parseSvg; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__decompose__ = __webpack_require__(294); - - -var cssNode, - cssRoot, - cssView, - svgNode; - -function parseCss(value) { - if (value === "none") return __WEBPACK_IMPORTED_MODULE_0__decompose__["a" /* identity */]; - if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView; - cssNode.style.transform = value; - value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform"); - cssRoot.removeChild(cssNode); - value = value.slice(7, -1).split(","); - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__decompose__["b" /* default */])(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]); -} - -function parseSvg(value) { - if (value == null) return __WEBPACK_IMPORTED_MODULE_0__decompose__["a" /* identity */]; - if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); - svgNode.setAttribute("transform", value); - if (!(value = svgNode.transform.baseVal.consolidate())) return __WEBPACK_IMPORTED_MODULE_0__decompose__["a" /* identity */]; - value = value.matrix; - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__decompose__["b" /* default */])(value.a, value.b, value.c, value.d, value.e, value.f); -} - - -/***/ }), -/* 297 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -var rho = Math.SQRT2, - rho2 = 2, - rho4 = 4, - epsilon2 = 1e-12; - -function cosh(x) { - return ((x = Math.exp(x)) + 1 / x) / 2; -} - -function sinh(x) { - return ((x = Math.exp(x)) - 1 / x) / 2; -} - -function tanh(x) { - return ((x = Math.exp(2 * x)) - 1) / (x + 1); -} - -// p0 = [ux0, uy0, w0] -// p1 = [ux1, uy1, w1] -/* harmony default export */ __webpack_exports__["a"] = (function(p0, p1) { - var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], - ux1 = p1[0], uy1 = p1[1], w1 = p1[2], - dx = ux1 - ux0, - dy = uy1 - uy0, - d2 = dx * dx + dy * dy, - i, - S; - - // Special case for u0 ≅ u1. - if (d2 < epsilon2) { - S = Math.log(w1 / w0) / rho; - i = function(t) { - return [ - ux0 + t * dx, - uy0 + t * dy, - w0 * Math.exp(rho * t * S) - ]; - } - } - - // General case. - else { - var d1 = Math.sqrt(d2), - b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), - b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), - r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), - r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1); - S = (r1 - r0) / rho; - i = function(t) { - var s = t * S, - coshr0 = cosh(r0), - u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0)); - return [ - ux0 + u * dx, - uy0 + u * dy, - w0 * coshr0 / cosh(rho * s + r0) - ]; - } - } - - i.duration = S * 1000; - - return i; -}); - - -/***/ }), -/* 298 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -var pi = Math.PI, - tau = 2 * pi, - epsilon = 1e-6, - tauEpsilon = tau - epsilon; - -function Path() { - this._x0 = this._y0 = // start of current subpath - this._x1 = this._y1 = null; // end of current subpath - this._ = ""; -} - -function path() { - return new Path; -} - -Path.prototype = path.prototype = { - constructor: Path, - moveTo: function(x, y) { - this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y); - }, - closePath: function() { - if (this._x1 !== null) { - this._x1 = this._x0, this._y1 = this._y0; - this._ += "Z"; - } - }, - lineTo: function(x, y) { - this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y); - }, - quadraticCurveTo: function(x1, y1, x, y) { - this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y); - }, - bezierCurveTo: function(x1, y1, x2, y2, x, y) { - this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y); - }, - arcTo: function(x1, y1, x2, y2, r) { - x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r; - var x0 = this._x1, - y0 = this._y1, - x21 = x2 - x1, - y21 = y2 - y1, - x01 = x0 - x1, - y01 = y0 - y1, - l01_2 = x01 * x01 + y01 * y01; - - // Is the radius negative? Error. - if (r < 0) throw new Error("negative radius: " + r); - - // Is this path empty? Move to (x1,y1). - if (this._x1 === null) { - this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1); - } - - // Or, is (x1,y1) coincident with (x0,y0)? Do nothing. - else if (!(l01_2 > epsilon)) {} - - // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear? - // Equivalently, is (x1,y1) coincident with (x2,y2)? - // Or, is the radius zero? Line to (x1,y1). - else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) { - this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1); - } - - // Otherwise, draw an arc! - else { - var x20 = x2 - x0, - y20 = y2 - y0, - l21_2 = x21 * x21 + y21 * y21, - l20_2 = x20 * x20 + y20 * y20, - l21 = Math.sqrt(l21_2), - l01 = Math.sqrt(l01_2), - l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), - t01 = l / l01, - t21 = l / l21; - - // If the start tangent is not coincident with (x0,y0), line to. - if (Math.abs(t01 - 1) > epsilon) { - this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01); - } - - this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21); - } - }, - arc: function(x, y, r, a0, a1, ccw) { - x = +x, y = +y, r = +r; - var dx = r * Math.cos(a0), - dy = r * Math.sin(a0), - x0 = x + dx, - y0 = y + dy, - cw = 1 ^ ccw, - da = ccw ? a0 - a1 : a1 - a0; - - // Is the radius negative? Error. - if (r < 0) throw new Error("negative radius: " + r); - - // Is this path empty? Move to (x0,y0). - if (this._x1 === null) { - this._ += "M" + x0 + "," + y0; - } - - // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0). - else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) { - this._ += "L" + x0 + "," + y0; - } - - // Is this arc empty? We’re done. - if (!r) return; - - // Does the angle go the wrong way? Flip the direction. - if (da < 0) da = da % tau + tau; - - // Is this a complete circle? Draw two arcs to complete the circle. - if (da > tauEpsilon) { - this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0); - } - - // Is this arc non-empty? Draw an arc! - else if (da > epsilon) { - this._ += "A" + r + "," + r + ",0," + (+(da >= pi)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1)); - } - }, - rect: function(x, y, w, h) { - this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z"; - }, - toString: function() { - return this._; - } -}; - -/* harmony default export */ __webpack_exports__["a"] = (path); - - -/***/ }), -/* 299 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_area__ = __webpack_require__(300); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_area__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_centroid__ = __webpack_require__(301); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__src_centroid__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_hull__ = __webpack_require__(304); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_2__src_hull__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_contains__ = __webpack_require__(302); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_3__src_contains__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_length__ = __webpack_require__(305); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_4__src_length__["a"]; }); - - - - - - - -/***/ }), -/* 300 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(polygon) { - var i = -1, - n = polygon.length, - a, - b = polygon[n - 1], - area = 0; - - while (++i < n) { - a = b; - b = polygon[i]; - area += a[1] * b[0] - a[0] * b[1]; - } - - return area / 2; -}); - - -/***/ }), -/* 301 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(polygon) { - var i = -1, - n = polygon.length, - x = 0, - y = 0, - a, - b = polygon[n - 1], - c, - k = 0; - - while (++i < n) { - a = b; - b = polygon[i]; - k += c = a[0] * b[1] - b[0] * a[1]; - x += (a[0] + b[0]) * c; - y += (a[1] + b[1]) * c; - } - - return k *= 3, [x / k, y / k]; -}); - - -/***/ }), -/* 302 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(polygon, point) { - var n = polygon.length, - p = polygon[n - 1], - x = point[0], y = point[1], - x0 = p[0], y0 = p[1], - x1, y1, - inside = false; - - for (var i = 0; i < n; ++i) { - p = polygon[i], x1 = p[0], y1 = p[1]; - if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside; - x0 = x1, y0 = y1; - } - - return inside; -}); - - -/***/ }), -/* 303 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of -// the 3D cross product in a quadrant I Cartesian coordinate system (+x is -// right, +y is up). Returns a positive value if ABC is counter-clockwise, -// negative if clockwise, and zero if the points are collinear. -/* harmony default export */ __webpack_exports__["a"] = (function(a, b, c) { - return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]); -}); - - -/***/ }), -/* 304 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cross__ = __webpack_require__(303); - - -function lexicographicOrder(a, b) { - return a[0] - b[0] || a[1] - b[1]; -} - -// Computes the upper convex hull per the monotone chain algorithm. -// Assumes points.length >= 3, is sorted by x, unique in y. -// Returns an array of indices into points in left-to-right order. -function computeUpperHullIndexes(points) { - var n = points.length, - indexes = [0, 1], - size = 2; - - for (var i = 2; i < n; ++i) { - while (size > 1 && __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__cross__["a" /* default */])(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size; - indexes[size++] = i; - } - - return indexes.slice(0, size); // remove popped points -} - -/* harmony default export */ __webpack_exports__["a"] = (function(points) { - if ((n = points.length) < 3) return null; - - var i, - n, - sortedPoints = new Array(n), - flippedPoints = new Array(n); - - for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i]; - sortedPoints.sort(lexicographicOrder); - for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]]; - - var upperIndexes = computeUpperHullIndexes(sortedPoints), - lowerIndexes = computeUpperHullIndexes(flippedPoints); - - // Construct the hull polygon, removing possible duplicate endpoints. - var skipLeft = lowerIndexes[0] === upperIndexes[0], - skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1], - hull = []; - - // Add upper hull in right-to-l order. - // Then add lower hull in left-to-right order. - for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]); - for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]); - - return hull; -}); - - -/***/ }), -/* 305 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(polygon) { - var i = -1, - n = polygon.length, - b = polygon[n - 1], - xa, - ya, - xb = b[0], - yb = b[1], - perimeter = 0; - - while (++i < n) { - xa = xb; - ya = yb; - b = polygon[i]; - xb = b[0]; - yb = b[1]; - xa -= xb; - ya -= yb; - perimeter += Math.sqrt(xa * xa + ya * ya); - } - - return perimeter; -}); - - -/***/ }), -/* 306 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = addAll; -/* harmony default export */ __webpack_exports__["a"] = (function(d) { - var x = +this._x.call(null, d), - y = +this._y.call(null, d); - return add(this.cover(x, y), x, y, d); -}); - -function add(tree, x, y, d) { - if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points - - var parent, - node = tree._root, - leaf = {data: d}, - x0 = tree._x0, - y0 = tree._y0, - x1 = tree._x1, - y1 = tree._y1, - xm, - ym, - xp, - yp, - right, - bottom, - i, - j; - - // If the tree is empty, initialize the root as a leaf. - if (!node) return tree._root = leaf, tree; - - // Find the existing leaf for the new point, or add it. - while (node.length) { - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree; - } - - // Is the new point is exactly coincident with the existing point? - xp = +tree._x.call(null, node.data); - yp = +tree._y.call(null, node.data); - if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; - - // Otherwise, split the leaf node until the old and new point are separated. - do { - parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4); - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm))); - return parent[j] = node, parent[i] = leaf, tree; -} - -function addAll(data) { - var d, i, n = data.length, - x, - y, - xz = new Array(n), - yz = new Array(n), - x0 = Infinity, - y0 = Infinity, - x1 = -Infinity, - y1 = -Infinity; - - // Compute the points and their extent. - for (i = 0; i < n; ++i) { - if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue; - xz[i] = x; - yz[i] = y; - if (x < x0) x0 = x; - if (x > x1) x1 = x; - if (y < y0) y0 = y; - if (y > y1) y1 = y; - } - - // If there were no (valid) points, inherit the existing extent. - if (x1 < x0) x0 = this._x0, x1 = this._x1; - if (y1 < y0) y0 = this._y0, y1 = this._y1; - - // Expand the tree to cover the new points. - this.cover(x0, y0).cover(x1, y1); - - // Add the new points. - for (i = 0; i < n; ++i) { - add(this, xz[i], yz[i], data[i]); - } - - return this; -} - - -/***/ }), -/* 307 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x, y) { - if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points - - var x0 = this._x0, - y0 = this._y0, - x1 = this._x1, - y1 = this._y1; - - // If the quadtree has no extent, initialize them. - // Integer extent are necessary so that if we later double the extent, - // the existing quadrant boundaries don’t change due to floating point error! - if (isNaN(x0)) { - x1 = (x0 = Math.floor(x)) + 1; - y1 = (y0 = Math.floor(y)) + 1; - } - - // Otherwise, double repeatedly to cover. - else if (x0 > x || x > x1 || y0 > y || y > y1) { - var z = x1 - x0, - node = this._root, - parent, - i; - - switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) { - case 0: { - do parent = new Array(4), parent[i] = node, node = parent; - while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1); - break; - } - case 1: { - do parent = new Array(4), parent[i] = node, node = parent; - while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1); - break; - } - case 2: { - do parent = new Array(4), parent[i] = node, node = parent; - while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y); - break; - } - case 3: { - do parent = new Array(4), parent[i] = node, node = parent; - while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y); - break; - } - } - - if (this._root && this._root.length) this._root = node; - } - - // If the quadtree covers the point already, just return. - else return this; - - this._x0 = x0; - this._y0 = y0; - this._x1 = x1; - this._y1 = y1; - return this; -}); - - -/***/ }), -/* 308 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() { - var data = []; - this.visit(function(node) { - if (!node.length) do data.push(node.data); while (node = node.next) - }); - return data; -}); - - -/***/ }), -/* 309 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(_) { - return arguments.length - ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) - : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]]; -}); - - -/***/ }), -/* 310 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__quad__ = __webpack_require__(68); - - -/* harmony default export */ __webpack_exports__["a"] = (function(x, y, radius) { - var data, - x0 = this._x0, - y0 = this._y0, - x1, - y1, - x2, - y2, - x3 = this._x1, - y3 = this._y1, - quads = [], - node = this._root, - q, - i; - - if (node) quads.push(new __WEBPACK_IMPORTED_MODULE_0__quad__["a" /* default */](node, x0, y0, x3, y3)); - if (radius == null) radius = Infinity; - else { - x0 = x - radius, y0 = y - radius; - x3 = x + radius, y3 = y + radius; - radius *= radius; - } - - while (q = quads.pop()) { - - // Stop searching if this quadrant can’t contain a closer node. - if (!(node = q.node) - || (x1 = q.x0) > x3 - || (y1 = q.y0) > y3 - || (x2 = q.x1) < x0 - || (y2 = q.y1) < y0) continue; - - // Bisect the current quadrant. - if (node.length) { - var xm = (x1 + x2) / 2, - ym = (y1 + y2) / 2; - - quads.push( - new __WEBPACK_IMPORTED_MODULE_0__quad__["a" /* default */](node[3], xm, ym, x2, y2), - new __WEBPACK_IMPORTED_MODULE_0__quad__["a" /* default */](node[2], x1, ym, xm, y2), - new __WEBPACK_IMPORTED_MODULE_0__quad__["a" /* default */](node[1], xm, y1, x2, ym), - new __WEBPACK_IMPORTED_MODULE_0__quad__["a" /* default */](node[0], x1, y1, xm, ym) - ); - - // Visit the closest quadrant first. - if (i = (y >= ym) << 1 | (x >= xm)) { - q = quads[quads.length - 1]; - quads[quads.length - 1] = quads[quads.length - 1 - i]; - quads[quads.length - 1 - i] = q; - } - } - - // Visit this point. (Visiting coincident points isn’t necessary!) - else { - var dx = x - +this._x.call(null, node.data), - dy = y - +this._y.call(null, node.data), - d2 = dx * dx + dy * dy; - if (d2 < radius) { - var d = Math.sqrt(radius = d2); - x0 = x - d, y0 = y - d; - x3 = x + d, y3 = y + d; - data = node.data; - } - } - } - - return data; -}); - - -/***/ }), -/* 311 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = quadtree; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__add__ = __webpack_require__(306); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__cover__ = __webpack_require__(307); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__data__ = __webpack_require__(308); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__extent__ = __webpack_require__(309); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__find__ = __webpack_require__(310); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__remove__ = __webpack_require__(312); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__root__ = __webpack_require__(313); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__size__ = __webpack_require__(314); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__visit__ = __webpack_require__(315); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__visitAfter__ = __webpack_require__(316); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__x__ = __webpack_require__(317); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__y__ = __webpack_require__(318); - - - - - - - - - - - - - -function quadtree(nodes, x, y) { - var tree = new Quadtree(x == null ? __WEBPACK_IMPORTED_MODULE_10__x__["a" /* defaultX */] : x, y == null ? __WEBPACK_IMPORTED_MODULE_11__y__["a" /* defaultY */] : y, NaN, NaN, NaN, NaN); - return nodes == null ? tree : tree.addAll(nodes); -} - -function Quadtree(x, y, x0, y0, x1, y1) { - this._x = x; - this._y = y; - this._x0 = x0; - this._y0 = y0; - this._x1 = x1; - this._y1 = y1; - this._root = undefined; -} - -function leaf_copy(leaf) { - var copy = {data: leaf.data}, next = copy; - while (leaf = leaf.next) next = next.next = {data: leaf.data}; - return copy; -} - -var treeProto = quadtree.prototype = Quadtree.prototype; - -treeProto.copy = function() { - var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1), - node = this._root, - nodes, - child; - - if (!node) return copy; - - if (!node.length) return copy._root = leaf_copy(node), copy; - - nodes = [{source: node, target: copy._root = new Array(4)}]; - while (node = nodes.pop()) { - for (var i = 0; i < 4; ++i) { - if (child = node.source[i]) { - if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)}); - else node.target[i] = leaf_copy(child); - } - } - } - - return copy; -}; - -treeProto.add = __WEBPACK_IMPORTED_MODULE_0__add__["a" /* default */]; -treeProto.addAll = __WEBPACK_IMPORTED_MODULE_0__add__["b" /* addAll */]; -treeProto.cover = __WEBPACK_IMPORTED_MODULE_1__cover__["a" /* default */]; -treeProto.data = __WEBPACK_IMPORTED_MODULE_2__data__["a" /* default */]; -treeProto.extent = __WEBPACK_IMPORTED_MODULE_3__extent__["a" /* default */]; -treeProto.find = __WEBPACK_IMPORTED_MODULE_4__find__["a" /* default */]; -treeProto.remove = __WEBPACK_IMPORTED_MODULE_5__remove__["a" /* default */]; -treeProto.removeAll = __WEBPACK_IMPORTED_MODULE_5__remove__["b" /* removeAll */]; -treeProto.root = __WEBPACK_IMPORTED_MODULE_6__root__["a" /* default */]; -treeProto.size = __WEBPACK_IMPORTED_MODULE_7__size__["a" /* default */]; -treeProto.visit = __WEBPACK_IMPORTED_MODULE_8__visit__["a" /* default */]; -treeProto.visitAfter = __WEBPACK_IMPORTED_MODULE_9__visitAfter__["a" /* default */]; -treeProto.x = __WEBPACK_IMPORTED_MODULE_10__x__["b" /* default */]; -treeProto.y = __WEBPACK_IMPORTED_MODULE_11__y__["b" /* default */]; - - -/***/ }), -/* 312 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = removeAll; -/* harmony default export */ __webpack_exports__["a"] = (function(d) { - if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points - - var parent, - node = this._root, - retainer, - previous, - next, - x0 = this._x0, - y0 = this._y0, - x1 = this._x1, - y1 = this._y1, - x, - y, - xm, - ym, - right, - bottom, - i, - j; - - // If the tree is empty, initialize the root as a leaf. - if (!node) return this; - - // Find the leaf node for the point. - // While descending, also retain the deepest parent with a non-removed sibling. - if (node.length) while (true) { - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - if (!(parent = node, node = node[i = bottom << 1 | right])) return this; - if (!node.length) break; - if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i; - } - - // Find the point to remove. - while (node.data !== d) if (!(previous = node, node = node.next)) return this; - if (next = node.next) delete node.next; - - // If there are multiple coincident points, remove just the point. - if (previous) return (next ? previous.next = next : delete previous.next), this; - - // If this is the root point, remove it. - if (!parent) return this._root = next, this; - - // Remove this leaf. - next ? parent[i] = next : delete parent[i]; - - // If the parent now contains exactly one leaf, collapse superfluous parents. - if ((node = parent[0] || parent[1] || parent[2] || parent[3]) - && node === (parent[3] || parent[2] || parent[1] || parent[0]) - && !node.length) { - if (retainer) retainer[j] = node; - else this._root = node; - } - - return this; -}); - -function removeAll(data) { - for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); - return this; -} - - -/***/ }), -/* 313 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() { - return this._root; -}); - - -/***/ }), -/* 314 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() { - var size = 0; - this.visit(function(node) { - if (!node.length) do ++size; while (node = node.next) - }); - return size; -}); - - -/***/ }), -/* 315 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__quad__ = __webpack_require__(68); - - -/* harmony default export */ __webpack_exports__["a"] = (function(callback) { - var quads = [], q, node = this._root, child, x0, y0, x1, y1; - if (node) quads.push(new __WEBPACK_IMPORTED_MODULE_0__quad__["a" /* default */](node, this._x0, this._y0, this._x1, this._y1)); - while (q = quads.pop()) { - if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) { - var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; - if (child = node[3]) quads.push(new __WEBPACK_IMPORTED_MODULE_0__quad__["a" /* default */](child, xm, ym, x1, y1)); - if (child = node[2]) quads.push(new __WEBPACK_IMPORTED_MODULE_0__quad__["a" /* default */](child, x0, ym, xm, y1)); - if (child = node[1]) quads.push(new __WEBPACK_IMPORTED_MODULE_0__quad__["a" /* default */](child, xm, y0, x1, ym)); - if (child = node[0]) quads.push(new __WEBPACK_IMPORTED_MODULE_0__quad__["a" /* default */](child, x0, y0, xm, ym)); - } - } - return this; -}); - - -/***/ }), -/* 316 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__quad__ = __webpack_require__(68); - - -/* harmony default export */ __webpack_exports__["a"] = (function(callback) { - var quads = [], next = [], q; - if (this._root) quads.push(new __WEBPACK_IMPORTED_MODULE_0__quad__["a" /* default */](this._root, this._x0, this._y0, this._x1, this._y1)); - while (q = quads.pop()) { - var node = q.node; - if (node.length) { - var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; - if (child = node[0]) quads.push(new __WEBPACK_IMPORTED_MODULE_0__quad__["a" /* default */](child, x0, y0, xm, ym)); - if (child = node[1]) quads.push(new __WEBPACK_IMPORTED_MODULE_0__quad__["a" /* default */](child, xm, y0, x1, ym)); - if (child = node[2]) quads.push(new __WEBPACK_IMPORTED_MODULE_0__quad__["a" /* default */](child, x0, ym, xm, y1)); - if (child = node[3]) quads.push(new __WEBPACK_IMPORTED_MODULE_0__quad__["a" /* default */](child, xm, ym, x1, y1)); - } - next.push(q); - } - while (q = next.pop()) { - callback(q.node, q.x0, q.y0, q.x1, q.y1); - } - return this; -}); - - -/***/ }), -/* 317 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = defaultX; -function defaultX(d) { - return d[0]; -} - -/* harmony default export */ __webpack_exports__["b"] = (function(_) { - return arguments.length ? (this._x = _, this) : this._x; -}); - - -/***/ }), -/* 318 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = defaultY; -function defaultY(d) { - return d[1]; -} - -/* harmony default export */ __webpack_exports__["b"] = (function(_) { - return arguments.length ? (this._y = _, this) : this._y; -}); - - -/***/ }), -/* 319 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_queue__ = __webpack_require__(321); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_queue__["a"]; }); - - - -/***/ }), -/* 320 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return slice; }); -var slice = [].slice; - - -/***/ }), -/* 321 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = queue; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__array__ = __webpack_require__(320); - - -var noabort = {}; - -function Queue(size) { - this._size = size; - this._call = - this._error = null; - this._tasks = []; - this._data = []; - this._waiting = - this._active = - this._ended = - this._start = 0; // inside a synchronous task callback? -} - -Queue.prototype = queue.prototype = { - constructor: Queue, - defer: function(callback) { - if (typeof callback !== "function") throw new Error("invalid callback"); - if (this._call) throw new Error("defer after await"); - if (this._error != null) return this; - var t = __WEBPACK_IMPORTED_MODULE_0__array__["a" /* slice */].call(arguments, 1); - t.push(callback); - ++this._waiting, this._tasks.push(t); - poke(this); - return this; - }, - abort: function() { - if (this._error == null) abort(this, new Error("abort")); - return this; - }, - await: function(callback) { - if (typeof callback !== "function") throw new Error("invalid callback"); - if (this._call) throw new Error("multiple await"); - this._call = function(error, results) { callback.apply(null, [error].concat(results)); }; - maybeNotify(this); - return this; - }, - awaitAll: function(callback) { - if (typeof callback !== "function") throw new Error("invalid callback"); - if (this._call) throw new Error("multiple await"); - this._call = callback; - maybeNotify(this); - return this; - } -}; - -function poke(q) { - if (!q._start) { - try { start(q); } // let the current task complete - catch (e) { - if (q._tasks[q._ended + q._active - 1]) abort(q, e); // task errored synchronously - else if (!q._data) throw e; // await callback errored synchronously - } - } -} - -function start(q) { - while (q._start = q._waiting && q._active < q._size) { - var i = q._ended + q._active, - t = q._tasks[i], - j = t.length - 1, - c = t[j]; - t[j] = end(q, i); - --q._waiting, ++q._active; - t = c.apply(null, t); - if (!q._tasks[i]) continue; // task finished synchronously - q._tasks[i] = t || noabort; - } -} - -function end(q, i) { - return function(e, r) { - if (!q._tasks[i]) return; // ignore multiple callbacks - --q._active, ++q._ended; - q._tasks[i] = null; - if (q._error != null) return; // ignore secondary errors - if (e != null) { - abort(q, e); - } else { - q._data[i] = r; - if (q._waiting) poke(q); - else maybeNotify(q); - } - }; -} - -function abort(q, e) { - var i = q._tasks.length, t; - q._error = e; // ignore active callbacks - q._data = undefined; // allow gc - q._waiting = NaN; // prevent starting - - while (--i >= 0) { - if (t = q._tasks[i]) { - q._tasks[i] = null; - if (t.abort) { - try { t.abort(); } - catch (e) { /* ignore */ } - } - } - } - - q._active = NaN; // allow notification - maybeNotify(q); -} - -function maybeNotify(q) { - if (!q._active && q._call) { - var d = q._data; - q._data = undefined; // allow gc - q._call(q._error, d); - } -} - -function queue(concurrency) { - if (concurrency == null) concurrency = Infinity; - else if (!((concurrency = +concurrency) >= 1)) throw new Error("invalid concurrency"); - return new Queue(concurrency); -} - - -/***/ }), -/* 322 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_uniform__ = __webpack_require__(326); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_uniform__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_normal__ = __webpack_require__(135); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__src_normal__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_logNormal__ = __webpack_require__(325); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_2__src_logNormal__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_bates__ = __webpack_require__(323); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_3__src_bates__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_irwinHall__ = __webpack_require__(134); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_4__src_irwinHall__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_exponential__ = __webpack_require__(324); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_5__src_exponential__["a"]; }); - - - - - - - - -/***/ }), -/* 323 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__defaultSource__ = __webpack_require__(19); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__irwinHall__ = __webpack_require__(134); - - - -/* harmony default export */ __webpack_exports__["a"] = ((function sourceRandomBates(source) { - function randomBates(n) { - var randomIrwinHall = __WEBPACK_IMPORTED_MODULE_1__irwinHall__["a" /* default */].source(source)(n); - return function() { - return randomIrwinHall() / n; - }; - } - - randomBates.source = sourceRandomBates; - - return randomBates; -})(__WEBPACK_IMPORTED_MODULE_0__defaultSource__["a" /* default */])); - - -/***/ }), -/* 324 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__defaultSource__ = __webpack_require__(19); - - -/* harmony default export */ __webpack_exports__["a"] = ((function sourceRandomExponential(source) { - function randomExponential(lambda) { - return function() { - return -Math.log(1 - source()) / lambda; - }; - } - - randomExponential.source = sourceRandomExponential; - - return randomExponential; -})(__WEBPACK_IMPORTED_MODULE_0__defaultSource__["a" /* default */])); - - -/***/ }), -/* 325 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__defaultSource__ = __webpack_require__(19); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__normal__ = __webpack_require__(135); - - - -/* harmony default export */ __webpack_exports__["a"] = ((function sourceRandomLogNormal(source) { - function randomLogNormal() { - var randomNormal = __WEBPACK_IMPORTED_MODULE_1__normal__["a" /* default */].source(source).apply(this, arguments); - return function() { - return Math.exp(randomNormal()); - }; - } - - randomLogNormal.source = sourceRandomLogNormal; - - return randomLogNormal; -})(__WEBPACK_IMPORTED_MODULE_0__defaultSource__["a" /* default */])); - - -/***/ }), -/* 326 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__defaultSource__ = __webpack_require__(19); - - -/* harmony default export */ __webpack_exports__["a"] = ((function sourceRandomUniform(source) { - function randomUniform(min, max) { - min = min == null ? 0 : +min; - max = max == null ? 1 : +max; - if (arguments.length === 1) max = min, min = 0; - else max -= min; - return function() { - return source() * max + min; - }; - } - - randomUniform.source = sourceRandomUniform; - - return randomUniform; -})(__WEBPACK_IMPORTED_MODULE_0__defaultSource__["a" /* default */])); - - -/***/ }), -/* 327 */ -/***/ (function(module, exports, __webpack_require__) { - -// https://d3js.org/d3-request/ Version 1.0.5. Copyright 2017 Mike Bostock. -(function (global, factory) { - true ? factory(exports, __webpack_require__(21), __webpack_require__(12), __webpack_require__(103)) : - typeof define === 'function' && define.amd ? define(['exports', 'd3-collection', 'd3-dispatch', 'd3-dsv'], factory) : - (factory((global.d3 = global.d3 || {}),global.d3,global.d3,global.d3)); -}(this, (function (exports,d3Collection,d3Dispatch,d3Dsv) { 'use strict'; - -var request = function(url, callback) { - var request, - event = d3Dispatch.dispatch("beforesend", "progress", "load", "error"), - mimeType, - headers = d3Collection.map(), - xhr = new XMLHttpRequest, - user = null, - password = null, - response, - responseType, - timeout = 0; - - // If IE does not support CORS, use XDomainRequest. - if (typeof XDomainRequest !== "undefined" - && !("withCredentials" in xhr) - && /^(http(s)?:)?\/\//.test(url)) xhr = new XDomainRequest; - - "onload" in xhr - ? xhr.onload = xhr.onerror = xhr.ontimeout = respond - : xhr.onreadystatechange = function(o) { xhr.readyState > 3 && respond(o); }; - - function respond(o) { - var status = xhr.status, result; - if (!status && hasResponse(xhr) - || status >= 200 && status < 300 - || status === 304) { - if (response) { - try { - result = response.call(request, xhr); - } catch (e) { - event.call("error", request, e); - return; - } - } else { - result = xhr; - } - event.call("load", request, result); - } else { - event.call("error", request, o); - } - } - - xhr.onprogress = function(e) { - event.call("progress", request, e); - }; - - request = { - header: function(name, value) { - name = (name + "").toLowerCase(); - if (arguments.length < 2) return headers.get(name); - if (value == null) headers.remove(name); - else headers.set(name, value + ""); - return request; - }, - - // If mimeType is non-null and no Accept header is set, a default is used. - mimeType: function(value) { - if (!arguments.length) return mimeType; - mimeType = value == null ? null : value + ""; - return request; - }, - - // Specifies what type the response value should take; - // for instance, arraybuffer, blob, document, or text. - responseType: function(value) { - if (!arguments.length) return responseType; - responseType = value; - return request; - }, - - timeout: function(value) { - if (!arguments.length) return timeout; - timeout = +value; - return request; - }, - - user: function(value) { - return arguments.length < 1 ? user : (user = value == null ? null : value + "", request); - }, - - password: function(value) { - return arguments.length < 1 ? password : (password = value == null ? null : value + "", request); - }, - - // Specify how to convert the response content to a specific type; - // changes the callback value on "load" events. - response: function(value) { - response = value; - return request; - }, - - // Alias for send("GET", …). - get: function(data, callback) { - return request.send("GET", data, callback); - }, - - // Alias for send("POST", …). - post: function(data, callback) { - return request.send("POST", data, callback); - }, - - // If callback is non-null, it will be used for error and load events. - send: function(method, data, callback) { - xhr.open(method, url, true, user, password); - if (mimeType != null && !headers.has("accept")) headers.set("accept", mimeType + ",*/*"); - if (xhr.setRequestHeader) headers.each(function(value, name) { xhr.setRequestHeader(name, value); }); - if (mimeType != null && xhr.overrideMimeType) xhr.overrideMimeType(mimeType); - if (responseType != null) xhr.responseType = responseType; - if (timeout > 0) xhr.timeout = timeout; - if (callback == null && typeof data === "function") callback = data, data = null; - if (callback != null && callback.length === 1) callback = fixCallback(callback); - if (callback != null) request.on("error", callback).on("load", function(xhr) { callback(null, xhr); }); - event.call("beforesend", request, xhr); - xhr.send(data == null ? null : data); - return request; - }, - - abort: function() { - xhr.abort(); - return request; - }, - - on: function() { - var value = event.on.apply(event, arguments); - return value === event ? request : value; - } - }; - - if (callback != null) { - if (typeof callback !== "function") throw new Error("invalid callback: " + callback); - return request.get(callback); - } - - return request; -}; - -function fixCallback(callback) { - return function(error, xhr) { - callback(error == null ? xhr : null); - }; -} - -function hasResponse(xhr) { - var type = xhr.responseType; - return type && type !== "text" - ? xhr.response // null on error - : xhr.responseText; // "" on error -} - -var type = function(defaultMimeType, response) { - return function(url, callback) { - var r = request(url).mimeType(defaultMimeType).response(response); - if (callback != null) { - if (typeof callback !== "function") throw new Error("invalid callback: " + callback); - return r.get(callback); - } - return r; - }; -}; - -var html = type("text/html", function(xhr) { - return document.createRange().createContextualFragment(xhr.responseText); -}); - -var json = type("application/json", function(xhr) { - return JSON.parse(xhr.responseText); -}); - -var text = type("text/plain", function(xhr) { - return xhr.responseText; -}); - -var xml = type("application/xml", function(xhr) { - var xml = xhr.responseXML; - if (!xml) throw new Error("parse error"); - return xml; -}); - -var dsv = function(defaultMimeType, parse) { - return function(url, row, callback) { - if (arguments.length < 3) callback = row, row = null; - var r = request(url).mimeType(defaultMimeType); - r.row = function(_) { return arguments.length ? r.response(responseOf(parse, row = _)) : row; }; - r.row(row); - return callback ? r.get(callback) : r; - }; -}; - -function responseOf(parse, row) { - return function(request$$1) { - return parse(request$$1.responseText, row); - }; -} - -var csv = dsv("text/csv", d3Dsv.csvParse); - -var tsv = dsv("text/tab-separated-values", d3Dsv.tsvParse); - -exports.request = request; -exports.html = html; -exports.json = json; -exports.text = text; -exports.xml = xml; -exports.csv = csv; -exports.tsv = tsv; - -Object.defineProperty(exports, '__esModule', { value: true }); - -}))); - - -/***/ }), -/* 328 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_band__ = __webpack_require__(329); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_band__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_0__src_band__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_identity__ = __webpack_require__(335); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_1__src_identity__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_linear__ = __webpack_require__(28); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_2__src_linear__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_log__ = __webpack_require__(336); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_3__src_log__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_ordinal__ = __webpack_require__(138); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_4__src_ordinal__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_4__src_ordinal__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_pow__ = __webpack_require__(337); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_5__src_pow__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_5__src_pow__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_quantile__ = __webpack_require__(338); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_6__src_quantile__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_quantize__ = __webpack_require__(339); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_7__src_quantize__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__src_threshold__ = __webpack_require__(342); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_8__src_threshold__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_time__ = __webpack_require__(139); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_9__src_time__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__src_utcTime__ = __webpack_require__(344); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_10__src_utcTime__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__src_category10__ = __webpack_require__(330); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_11__src_category10__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__src_category20b__ = __webpack_require__(332); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return __WEBPACK_IMPORTED_MODULE_12__src_category20b__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__src_category20c__ = __webpack_require__(333); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return __WEBPACK_IMPORTED_MODULE_13__src_category20c__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__src_category20__ = __webpack_require__(331); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return __WEBPACK_IMPORTED_MODULE_14__src_category20__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__src_cubehelix__ = __webpack_require__(334); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return __WEBPACK_IMPORTED_MODULE_15__src_cubehelix__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__src_rainbow__ = __webpack_require__(340); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return __WEBPACK_IMPORTED_MODULE_16__src_rainbow__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return __WEBPACK_IMPORTED_MODULE_16__src_rainbow__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return __WEBPACK_IMPORTED_MODULE_16__src_rainbow__["c"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__src_viridis__ = __webpack_require__(345); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return __WEBPACK_IMPORTED_MODULE_17__src_viridis__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return __WEBPACK_IMPORTED_MODULE_17__src_viridis__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return __WEBPACK_IMPORTED_MODULE_17__src_viridis__["c"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return __WEBPACK_IMPORTED_MODULE_17__src_viridis__["d"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__src_sequential__ = __webpack_require__(341); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return __WEBPACK_IMPORTED_MODULE_18__src_sequential__["a"]; }); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/***/ }), -/* 329 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = band; -/* harmony export (immutable) */ __webpack_exports__["b"] = point; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_array__ = __webpack_require__(3); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ordinal__ = __webpack_require__(138); - - - -function band() { - var scale = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__ordinal__["a" /* default */])().unknown(undefined), - domain = scale.domain, - ordinalRange = scale.range, - range = [0, 1], - step, - bandwidth, - round = false, - paddingInner = 0, - paddingOuter = 0, - align = 0.5; - - delete scale.unknown; - - function rescale() { - var n = domain().length, - reverse = range[1] < range[0], - start = range[reverse - 0], - stop = range[1 - reverse]; - step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2); - if (round) step = Math.floor(step); - start += (stop - start - step * (n - paddingInner)) * align; - bandwidth = step * (1 - paddingInner); - if (round) start = Math.round(start), bandwidth = Math.round(bandwidth); - var values = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["v" /* range */])(n).map(function(i) { return start + step * i; }); - return ordinalRange(reverse ? values.reverse() : values); - } - - scale.domain = function(_) { - return arguments.length ? (domain(_), rescale()) : domain(); - }; - - scale.range = function(_) { - return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice(); - }; - - scale.rangeRound = function(_) { - return range = [+_[0], +_[1]], round = true, rescale(); - }; - - scale.bandwidth = function() { - return bandwidth; - }; - - scale.step = function() { - return step; - }; - - scale.round = function(_) { - return arguments.length ? (round = !!_, rescale()) : round; - }; - - scale.padding = function(_) { - return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner; - }; - - scale.paddingInner = function(_) { - return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner; - }; - - scale.paddingOuter = function(_) { - return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter; - }; - - scale.align = function(_) { - return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align; - }; - - scale.copy = function() { - return band() - .domain(domain()) - .range(range) - .round(round) - .paddingInner(paddingInner) - .paddingOuter(paddingOuter) - .align(align); - }; - - return rescale(); -} - -function pointish(scale) { - var copy = scale.copy; - - scale.padding = scale.paddingOuter; - delete scale.paddingInner; - delete scale.paddingOuter; - - scale.copy = function() { - return pointish(copy()); - }; - - return scale; -} - -function point() { - return pointish(band().paddingInner(1)); -} - - -/***/ }), -/* 330 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__colors__ = __webpack_require__(27); - - -/* harmony default export */ __webpack_exports__["a"] = (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__colors__["a" /* default */])("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf")); - - -/***/ }), -/* 331 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__colors__ = __webpack_require__(27); - - -/* harmony default export */ __webpack_exports__["a"] = (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__colors__["a" /* default */])("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5")); - - -/***/ }), -/* 332 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__colors__ = __webpack_require__(27); - - -/* harmony default export */ __webpack_exports__["a"] = (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__colors__["a" /* default */])("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6")); - - -/***/ }), -/* 333 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__colors__ = __webpack_require__(27); - - -/* harmony default export */ __webpack_exports__["a"] = (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__colors__["a" /* default */])("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9")); - - -/***/ }), -/* 334 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_color__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__ = __webpack_require__(4); - - - -/* harmony default export */ __webpack_exports__["a"] = (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_interpolate__["v" /* interpolateCubehelixLong */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["b" /* cubehelix */])(300, 0.5, 0.0), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["b" /* cubehelix */])(-240, 0.5, 1.0))); - - -/***/ }), -/* 335 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = identity; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__array__ = __webpack_require__(15); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__linear__ = __webpack_require__(28); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__number__ = __webpack_require__(137); - - - - -function identity() { - var domain = [0, 1]; - - function scale(x) { - return +x; - } - - scale.invert = scale; - - scale.domain = scale.range = function(_) { - return arguments.length ? (domain = __WEBPACK_IMPORTED_MODULE_0__array__["a" /* map */].call(_, __WEBPACK_IMPORTED_MODULE_2__number__["a" /* default */]), scale) : domain.slice(); - }; - - scale.copy = function() { - return identity().domain(domain); - }; - - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__linear__["b" /* linearish */])(scale); -} - - -/***/ }), -/* 336 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = log; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_array__ = __webpack_require__(3); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_format__ = __webpack_require__(54); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__constant__ = __webpack_require__(69); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__nice__ = __webpack_require__(136); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__continuous__ = __webpack_require__(38); - - - - - - -function deinterpolate(a, b) { - return (b = Math.log(b / a)) - ? function(x) { return Math.log(x / a) / b; } - : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__constant__["a" /* default */])(b); -} - -function reinterpolate(a, b) { - return a < 0 - ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); } - : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); }; -} - -function pow10(x) { - return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x; -} - -function powp(base) { - return base === 10 ? pow10 - : base === Math.E ? Math.exp - : function(x) { return Math.pow(base, x); }; -} - -function logp(base) { - return base === Math.E ? Math.log - : base === 10 && Math.log10 - || base === 2 && Math.log2 - || (base = Math.log(base), function(x) { return Math.log(x) / base; }); -} - -function reflect(f) { - return function(x) { - return -f(-x); - }; -} - -function log() { - var scale = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__continuous__["a" /* default */])(deinterpolate, reinterpolate).domain([1, 10]), - domain = scale.domain, - base = 10, - logs = logp(10), - pows = powp(10); - - function rescale() { - logs = logp(base), pows = powp(base); - if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows); - return scale; - } - - scale.base = function(_) { - return arguments.length ? (base = +_, rescale()) : base; - }; - - scale.domain = function(_) { - return arguments.length ? (domain(_), rescale()) : domain(); - }; - - scale.ticks = function(count) { - var d = domain(), - u = d[0], - v = d[d.length - 1], - r; - - if (r = v < u) i = u, u = v, v = i; - - var i = logs(u), - j = logs(v), - p, - k, - t, - n = count == null ? 10 : +count, - z = []; - - if (!(base % 1) && j - i < n) { - i = Math.round(i) - 1, j = Math.round(j) + 1; - if (u > 0) for (; i < j; ++i) { - for (k = 1, p = pows(i); k < base; ++k) { - t = p * k; - if (t < u) continue; - if (t > v) break; - z.push(t); - } - } else for (; i < j; ++i) { - for (k = base - 1, p = pows(i); k >= 1; --k) { - t = p * k; - if (t < u) continue; - if (t > v) break; - z.push(t); - } - } - } else { - z = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["z" /* ticks */])(i, j, Math.min(j - i, n)).map(pows); - } - - return r ? z.reverse() : z; - }; - - scale.tickFormat = function(count, specifier) { - if (specifier == null) specifier = base === 10 ? ".0e" : ","; - if (typeof specifier !== "function") specifier = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_format__["b" /* format */])(specifier); - if (count === Infinity) return specifier; - if (count == null) count = 10; - var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate? - return function(d) { - var i = d / pows(Math.round(logs(d))); - if (i * base < base - 0.5) i *= base; - return i <= k ? specifier(d) : ""; - }; - }; - - scale.nice = function() { - return domain(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__nice__["a" /* default */])(domain(), { - floor: function(x) { return pows(Math.floor(logs(x))); }, - ceil: function(x) { return pows(Math.ceil(logs(x))); } - })); - }; - - scale.copy = function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__continuous__["c" /* copy */])(scale, log().base(base)); - }; - - return scale; -} - - -/***/ }), -/* 337 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = pow; -/* harmony export (immutable) */ __webpack_exports__["b"] = sqrt; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constant__ = __webpack_require__(69); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__linear__ = __webpack_require__(28); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__continuous__ = __webpack_require__(38); - - - - -function raise(x, exponent) { - return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent); -} - -function pow() { - var exponent = 1, - scale = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__continuous__["a" /* default */])(deinterpolate, reinterpolate), - domain = scale.domain; - - function deinterpolate(a, b) { - return (b = raise(b, exponent) - (a = raise(a, exponent))) - ? function(x) { return (raise(x, exponent) - a) / b; } - : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(b); - } - - function reinterpolate(a, b) { - b = raise(b, exponent) - (a = raise(a, exponent)); - return function(t) { return raise(a + b * t, 1 / exponent); }; - } - - scale.exponent = function(_) { - return arguments.length ? (exponent = +_, domain(domain())) : exponent; - }; - - scale.copy = function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__continuous__["c" /* copy */])(scale, pow().exponent(exponent)); - }; - - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__linear__["b" /* linearish */])(scale); -} - -function sqrt() { - return pow().exponent(0.5); -} - - -/***/ }), -/* 338 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = quantile; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_array__ = __webpack_require__(3); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__array__ = __webpack_require__(15); - - - -function quantile() { - var domain = [], - range = [], - thresholds = []; - - function rescale() { - var i = 0, n = Math.max(1, range.length); - thresholds = new Array(n - 1); - while (++i < n) thresholds[i - 1] = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["u" /* quantile */])(domain, i / n); - return scale; - } - - function scale(x) { - if (!isNaN(x = +x)) return range[__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["a" /* bisect */])(thresholds, x)]; - } - - scale.invertExtent = function(y) { - var i = range.indexOf(y); - return i < 0 ? [NaN, NaN] : [ - i > 0 ? thresholds[i - 1] : domain[0], - i < thresholds.length ? thresholds[i] : domain[domain.length - 1] - ]; - }; - - scale.domain = function(_) { - if (!arguments.length) return domain.slice(); - domain = []; - for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d); - domain.sort(__WEBPACK_IMPORTED_MODULE_0_d3_array__["d" /* ascending */]); - return rescale(); - }; - - scale.range = function(_) { - return arguments.length ? (range = __WEBPACK_IMPORTED_MODULE_1__array__["b" /* slice */].call(_), rescale()) : range.slice(); - }; - - scale.quantiles = function() { - return thresholds.slice(); - }; - - scale.copy = function() { - return quantile() - .domain(domain) - .range(range); - }; - - return scale; -} - - -/***/ }), -/* 339 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = quantize; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_array__ = __webpack_require__(3); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__array__ = __webpack_require__(15); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__linear__ = __webpack_require__(28); - - - - -function quantize() { - var x0 = 0, - x1 = 1, - n = 1, - domain = [0.5], - range = [0, 1]; - - function scale(x) { - if (x <= x) return range[__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["a" /* bisect */])(domain, x, 0, n)]; - } - - function rescale() { - var i = -1; - domain = new Array(n); - while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1); - return scale; - } - - scale.domain = function(_) { - return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1]; - }; - - scale.range = function(_) { - return arguments.length ? (n = (range = __WEBPACK_IMPORTED_MODULE_1__array__["b" /* slice */].call(_)).length - 1, rescale()) : range.slice(); - }; - - scale.invertExtent = function(y) { - var i = range.indexOf(y); - return i < 0 ? [NaN, NaN] - : i < 1 ? [x0, domain[0]] - : i >= n ? [domain[n - 1], x1] - : [domain[i - 1], domain[i]]; - }; - - scale.copy = function() { - return quantize() - .domain([x0, x1]) - .range(range); - }; - - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__linear__["b" /* linearish */])(scale); -} - - -/***/ }), -/* 340 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return warm; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return cool; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_color__ = __webpack_require__(7); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_interpolate__ = __webpack_require__(4); - - - -var warm = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_interpolate__["v" /* interpolateCubehelixLong */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["b" /* cubehelix */])(-100, 0.75, 0.35), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["b" /* cubehelix */])(80, 1.50, 0.8)); - -var cool = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_interpolate__["v" /* interpolateCubehelixLong */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["b" /* cubehelix */])(260, 0.75, 0.35), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["b" /* cubehelix */])(80, 1.50, 0.8)); - -var rainbow = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_color__["b" /* cubehelix */])(); - -/* harmony default export */ __webpack_exports__["a"] = (function(t) { - if (t < 0 || t > 1) t -= Math.floor(t); - var ts = Math.abs(t - 0.5); - rainbow.h = 360 * t - 100; - rainbow.s = 1.5 - 1.5 * ts; - rainbow.l = 0.8 - 0.9 * ts; - return rainbow + ""; -}); - - -/***/ }), -/* 341 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = sequential; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__linear__ = __webpack_require__(28); - - -function sequential(interpolator) { - var x0 = 0, - x1 = 1, - clamp = false; - - function scale(x) { - var t = (x - x0) / (x1 - x0); - return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t); - } - - scale.domain = function(_) { - return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1]; - }; - - scale.clamp = function(_) { - return arguments.length ? (clamp = !!_, scale) : clamp; - }; - - scale.interpolator = function(_) { - return arguments.length ? (interpolator = _, scale) : interpolator; - }; - - scale.copy = function() { - return sequential(interpolator).domain([x0, x1]).clamp(clamp); - }; - - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__linear__["b" /* linearish */])(scale); -} - - -/***/ }), -/* 342 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = threshold; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_array__ = __webpack_require__(3); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__array__ = __webpack_require__(15); - - - -function threshold() { - var domain = [0.5], - range = [0, 1], - n = 1; - - function scale(x) { - if (x <= x) return range[__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["a" /* bisect */])(domain, x, 0, n)]; - } - - scale.domain = function(_) { - return arguments.length ? (domain = __WEBPACK_IMPORTED_MODULE_1__array__["b" /* slice */].call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice(); - }; - - scale.range = function(_) { - return arguments.length ? (range = __WEBPACK_IMPORTED_MODULE_1__array__["b" /* slice */].call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice(); - }; - - scale.invertExtent = function(y) { - var i = range.indexOf(y); - return [domain[i - 1], domain[i]]; - }; - - scale.copy = function() { - return threshold() - .domain(domain) - .range(range); - }; - - return scale; -} - - -/***/ }), -/* 343 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_array__ = __webpack_require__(3); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_format__ = __webpack_require__(54); - - - -/* harmony default export */ __webpack_exports__["a"] = (function(domain, count, specifier) { - var start = domain[0], - stop = domain[domain.length - 1], - step = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_array__["B" /* tickStep */])(start, stop, count == null ? 10 : count), - precision; - specifier = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_format__["e" /* formatSpecifier */])(specifier == null ? ",f" : specifier); - switch (specifier.type) { - case "s": { - var value = Math.max(Math.abs(start), Math.abs(stop)); - if (specifier.precision == null && !isNaN(precision = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_format__["g" /* precisionPrefix */])(step, value))) specifier.precision = precision; - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_format__["c" /* formatPrefix */])(specifier, value); - } - case "": - case "e": - case "g": - case "p": - case "r": { - if (specifier.precision == null && !isNaN(precision = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_format__["h" /* precisionRound */])(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e"); - break; - } - case "f": - case "%": { - if (specifier.precision == null && !isNaN(precision = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_format__["f" /* precisionFixed */])(step))) specifier.precision = precision - (specifier.type === "%") * 2; - break; - } - } - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_format__["b" /* format */])(specifier); -}); - - -/***/ }), -/* 344 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__time__ = __webpack_require__(139); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_time_format__ = __webpack_require__(82); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_d3_time__ = __webpack_require__(43); - - - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__time__["b" /* calendar */])(__WEBPACK_IMPORTED_MODULE_2_d3_time__["_7" /* utcYear */], __WEBPACK_IMPORTED_MODULE_2_d3_time__["_5" /* utcMonth */], __WEBPACK_IMPORTED_MODULE_2_d3_time__["P" /* utcWeek */], __WEBPACK_IMPORTED_MODULE_2_d3_time__["N" /* utcDay */], __WEBPACK_IMPORTED_MODULE_2_d3_time__["L" /* utcHour */], __WEBPACK_IMPORTED_MODULE_2_d3_time__["J" /* utcMinute */], __WEBPACK_IMPORTED_MODULE_2_d3_time__["h" /* utcSecond */], __WEBPACK_IMPORTED_MODULE_2_d3_time__["d" /* utcMillisecond */], __WEBPACK_IMPORTED_MODULE_1_d3_time_format__["d" /* utcFormat */]).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]); -}); - - -/***/ }), -/* 345 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return magma; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return inferno; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return plasma; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__colors__ = __webpack_require__(27); - - -function ramp(range) { - var n = range.length; - return function(t) { - return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (ramp(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__colors__["a" /* default */])("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"))); - -var magma = ramp(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__colors__["a" /* default */])("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")); - -var inferno = ramp(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__colors__["a" /* default */])("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")); - -var plasma = ramp(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__colors__["a" /* default */])("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")); - - -/***/ }), -/* 346 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); - - -function attrsFunction(selection, map) { - return selection.each(function() { - var x = map.apply(this, arguments), s = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_selection__["b" /* select */])(this); - for (var name in x) s.attr(name, x[name]); - }); -} - -function attrsObject(selection, map) { - for (var name in map) selection.attr(name, map[name]); - return selection; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(map) { - return (typeof map === "function" ? attrsFunction : attrsObject)(this, map); -}); - - -/***/ }), -/* 347 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); - - -function propertiesFunction(selection, map) { - return selection.each(function() { - var x = map.apply(this, arguments), s = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_selection__["b" /* select */])(this); - for (var name in x) s.property(name, x[name]); - }); -} - -function propertiesObject(selection, map) { - for (var name in map) selection.property(name, map[name]); - return selection; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(map) { - return (typeof map === "function" ? propertiesFunction : propertiesObject)(this, map); -}); - - -/***/ }), -/* 348 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); - - -function stylesFunction(selection, map, priority) { - return selection.each(function() { - var x = map.apply(this, arguments), s = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_selection__["b" /* select */])(this); - for (var name in x) s.style(name, x[name], priority); - }); -} - -function stylesObject(selection, map, priority) { - for (var name in map) selection.style(name, map[name], priority); - return selection; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(map, priority) { - return (typeof map === "function" ? stylesFunction : stylesObject)(this, map, priority == null ? "" : priority); -}); - - -/***/ }), -/* 349 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); - - -function attrsFunction(transition, map) { - return transition.each(function() { - var x = map.apply(this, arguments), t = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_selection__["b" /* select */])(this).transition(transition); - for (var name in x) t.attr(name, x[name]); - }); -} - -function attrsObject(transition, map) { - for (var name in map) transition.attr(name, map[name]); - return transition; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(map) { - return (typeof map === "function" ? attrsFunction : attrsObject)(this, map); -}); - - -/***/ }), -/* 350 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); - - -function stylesFunction(transition, map, priority) { - return transition.each(function() { - var x = map.apply(this, arguments), t = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_selection__["b" /* select */])(this).transition(transition); - for (var name in x) t.style(name, x[name], priority); - }); -} - -function stylesObject(transition, map, priority) { - for (var name in map) transition.style(name, map[name], priority); - return transition; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(map, priority) { - return (typeof map === "function" ? stylesFunction : stylesObject)(this, map, priority == null ? "" : priority); -}); - - -/***/ }), -/* 351 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return function() { - return x; - }; -}); - - -/***/ }), -/* 352 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = local; -var nextId = 0; - -function local() { - return new Local; -} - -function Local() { - this._ = "@" + (++nextId).toString(36); -} - -Local.prototype = local.prototype = { - constructor: Local, - get: function(node) { - var id = this._; - while (!(id in node)) if (!(node = node.parentNode)) return; - return node[id]; - }, - set: function(node, value) { - return node[this._] = value; - }, - remove: function(node) { - return this._ in node && delete node[this._]; - }, - toString: function() { - return this._; - } -}; - - -/***/ }), -/* 353 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__sourceEvent__ = __webpack_require__(76); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__point__ = __webpack_require__(73); - - - -/* harmony default export */ __webpack_exports__["a"] = (function(node) { - var event = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__sourceEvent__["a" /* default */])(); - if (event.changedTouches) event = event.changedTouches[0]; - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__point__["a" /* default */])(node, event); -}); - - -/***/ }), -/* 354 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__selection_index__ = __webpack_require__(5); - - -/* harmony default export */ __webpack_exports__["a"] = (function(selector) { - return typeof selector === "string" - ? new __WEBPACK_IMPORTED_MODULE_0__selection_index__["b" /* Selection */]([[document.querySelector(selector)]], [document.documentElement]) - : new __WEBPACK_IMPORTED_MODULE_0__selection_index__["b" /* Selection */]([[selector]], __WEBPACK_IMPORTED_MODULE_0__selection_index__["c" /* root */]); -}); - - -/***/ }), -/* 355 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__selection_index__ = __webpack_require__(5); - - -/* harmony default export */ __webpack_exports__["a"] = (function(selector) { - return typeof selector === "string" - ? new __WEBPACK_IMPORTED_MODULE_0__selection_index__["b" /* Selection */]([document.querySelectorAll(selector)], [document.documentElement]) - : new __WEBPACK_IMPORTED_MODULE_0__selection_index__["b" /* Selection */]([selector == null ? [] : selector], __WEBPACK_IMPORTED_MODULE_0__selection_index__["c" /* root */]); -}); - - -/***/ }), -/* 356 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__creator__ = __webpack_require__(70); - - -/* harmony default export */ __webpack_exports__["a"] = (function(name) { - var create = typeof name === "function" ? name : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__creator__["a" /* default */])(name); - return this.select(function() { - return this.appendChild(create.apply(this, arguments)); - }); -}); - - -/***/ }), -/* 357 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__namespace__ = __webpack_require__(71); - - -function attrRemove(name) { - return function() { - this.removeAttribute(name); - }; -} - -function attrRemoveNS(fullname) { - return function() { - this.removeAttributeNS(fullname.space, fullname.local); - }; -} - -function attrConstant(name, value) { - return function() { - this.setAttribute(name, value); - }; -} - -function attrConstantNS(fullname, value) { - return function() { - this.setAttributeNS(fullname.space, fullname.local, value); - }; -} - -function attrFunction(name, value) { - return function() { - var v = value.apply(this, arguments); - if (v == null) this.removeAttribute(name); - else this.setAttribute(name, v); - }; -} - -function attrFunctionNS(fullname, value) { - return function() { - var v = value.apply(this, arguments); - if (v == null) this.removeAttributeNS(fullname.space, fullname.local); - else this.setAttributeNS(fullname.space, fullname.local, v); - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(name, value) { - var fullname = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__namespace__["a" /* default */])(name); - - if (arguments.length < 2) { - var node = this.node(); - return fullname.local - ? node.getAttributeNS(fullname.space, fullname.local) - : node.getAttribute(fullname); - } - - return this.each((value == null - ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function" - ? (fullname.local ? attrFunctionNS : attrFunction) - : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value)); -}); - - -/***/ }), -/* 358 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() { - var callback = arguments[0]; - arguments[0] = this; - callback.apply(null, arguments); - return this; -}); - - -/***/ }), -/* 359 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function classArray(string) { - return string.trim().split(/^|\s+/); -} - -function classList(node) { - return node.classList || new ClassList(node); -} - -function ClassList(node) { - this._node = node; - this._names = classArray(node.getAttribute("class") || ""); -} - -ClassList.prototype = { - add: function(name) { - var i = this._names.indexOf(name); - if (i < 0) { - this._names.push(name); - this._node.setAttribute("class", this._names.join(" ")); - } - }, - remove: function(name) { - var i = this._names.indexOf(name); - if (i >= 0) { - this._names.splice(i, 1); - this._node.setAttribute("class", this._names.join(" ")); - } - }, - contains: function(name) { - return this._names.indexOf(name) >= 0; - } -}; - -function classedAdd(node, names) { - var list = classList(node), i = -1, n = names.length; - while (++i < n) list.add(names[i]); -} - -function classedRemove(node, names) { - var list = classList(node), i = -1, n = names.length; - while (++i < n) list.remove(names[i]); -} - -function classedTrue(names) { - return function() { - classedAdd(this, names); - }; -} - -function classedFalse(names) { - return function() { - classedRemove(this, names); - }; -} - -function classedFunction(names, value) { - return function() { - (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(name, value) { - var names = classArray(name + ""); - - if (arguments.length < 2) { - var list = classList(this.node()), i = -1, n = names.length; - while (++i < n) if (!list.contains(names[i])) return false; - return true; - } - - return this.each((typeof value === "function" - ? classedFunction : value - ? classedTrue - : classedFalse)(names, value)); -}); - - -/***/ }), -/* 360 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__index__ = __webpack_require__(5); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__enter__ = __webpack_require__(141); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__constant__ = __webpack_require__(351); - - - - -var keyPrefix = "$"; // Protect against keys like “__proto__”. - -function bindIndex(parent, group, enter, update, exit, data) { - var i = 0, - node, - groupLength = group.length, - dataLength = data.length; - - // Put any non-null nodes that fit into update. - // Put any null nodes into enter. - // Put any remaining data into enter. - for (; i < dataLength; ++i) { - if (node = group[i]) { - node.__data__ = data[i]; - update[i] = node; - } else { - enter[i] = new __WEBPACK_IMPORTED_MODULE_1__enter__["b" /* EnterNode */](parent, data[i]); - } - } - - // Put any non-null nodes that don’t fit into exit. - for (; i < groupLength; ++i) { - if (node = group[i]) { - exit[i] = node; - } - } -} - -function bindKey(parent, group, enter, update, exit, data, key) { - var i, - node, - nodeByKeyValue = {}, - groupLength = group.length, - dataLength = data.length, - keyValues = new Array(groupLength), - keyValue; - - // Compute the key for each node. - // If multiple nodes have the same key, the duplicates are added to exit. - for (i = 0; i < groupLength; ++i) { - if (node = group[i]) { - keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group); - if (keyValue in nodeByKeyValue) { - exit[i] = node; - } else { - nodeByKeyValue[keyValue] = node; - } - } - } - - // Compute the key for each datum. - // If there a node associated with this key, join and add it to update. - // If there is not (or the key is a duplicate), add it to enter. - for (i = 0; i < dataLength; ++i) { - keyValue = keyPrefix + key.call(parent, data[i], i, data); - if (node = nodeByKeyValue[keyValue]) { - update[i] = node; - node.__data__ = data[i]; - nodeByKeyValue[keyValue] = null; - } else { - enter[i] = new __WEBPACK_IMPORTED_MODULE_1__enter__["b" /* EnterNode */](parent, data[i]); - } - } - - // Add any remaining nodes that were not bound to data to exit. - for (i = 0; i < groupLength; ++i) { - if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) { - exit[i] = node; - } - } -} - -/* harmony default export */ __webpack_exports__["a"] = (function(value, key) { - if (!value) { - data = new Array(this.size()), j = -1; - this.each(function(d) { data[++j] = d; }); - return data; - } - - var bind = key ? bindKey : bindIndex, - parents = this._parents, - groups = this._groups; - - if (typeof value !== "function") value = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__constant__["a" /* default */])(value); - - for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) { - var parent = parents[j], - group = groups[j], - groupLength = group.length, - data = value.call(parent, parent && parent.__data__, j, parents), - dataLength = data.length, - enterGroup = enter[j] = new Array(dataLength), - updateGroup = update[j] = new Array(dataLength), - exitGroup = exit[j] = new Array(groupLength); - - bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); - - // Now connect the enter nodes to their following update node, such that - // appendChild can insert the materialized enter node before this node, - // rather than at the end of the parent node. - for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { - if (previous = enterGroup[i0]) { - if (i0 >= i1) i1 = i0 + 1; - while (!(next = updateGroup[i1]) && ++i1 < dataLength); - previous._next = next || null; - } - } - } - - update = new __WEBPACK_IMPORTED_MODULE_0__index__["b" /* Selection */](update, parents); - update._enter = enter; - update._exit = exit; - return update; -}); - - -/***/ }), -/* 361 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(value) { - return arguments.length - ? this.property("__data__", value) - : this.node().__data__; -}); - - -/***/ }), -/* 362 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__window__ = __webpack_require__(77); - - -function dispatchEvent(node, type, params) { - var window = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__window__["a" /* default */])(node), - event = window.CustomEvent; - - if (typeof event === "function") { - event = new event(type, params); - } else { - event = window.document.createEvent("Event"); - if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; - else event.initEvent(type, false, false); - } - - node.dispatchEvent(event); -} - -function dispatchConstant(type, params) { - return function() { - return dispatchEvent(this, type, params); - }; -} - -function dispatchFunction(type, params) { - return function() { - return dispatchEvent(this, type, params.apply(this, arguments)); - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(type, params) { - return this.each((typeof params === "function" - ? dispatchFunction - : dispatchConstant)(type, params)); -}); - - -/***/ }), -/* 363 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(callback) { - - for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { - for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { - if (node = group[i]) callback.call(node, node.__data__, i, group); - } - } - - return this; -}); - - -/***/ }), -/* 364 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() { - return !this.node(); -}); - - -/***/ }), -/* 365 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__sparse__ = __webpack_require__(142); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__index__ = __webpack_require__(5); - - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return new __WEBPACK_IMPORTED_MODULE_1__index__["b" /* Selection */](this._exit || this._groups.map(__WEBPACK_IMPORTED_MODULE_0__sparse__["a" /* default */]), this._parents); -}); - - -/***/ }), -/* 366 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__index__ = __webpack_require__(5); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__matcher__ = __webpack_require__(140); - - - -/* harmony default export */ __webpack_exports__["a"] = (function(match) { - if (typeof match !== "function") match = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__matcher__["a" /* default */])(match); - - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { - if ((node = group[i]) && match.call(node, node.__data__, i, group)) { - subgroup.push(node); - } - } - } - - return new __WEBPACK_IMPORTED_MODULE_0__index__["b" /* Selection */](subgroups, this._parents); -}); - - -/***/ }), -/* 367 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function htmlRemove() { - this.innerHTML = ""; -} - -function htmlConstant(value) { - return function() { - this.innerHTML = value; - }; -} - -function htmlFunction(value) { - return function() { - var v = value.apply(this, arguments); - this.innerHTML = v == null ? "" : v; - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(value) { - return arguments.length - ? this.each(value == null - ? htmlRemove : (typeof value === "function" - ? htmlFunction - : htmlConstant)(value)) - : this.node().innerHTML; -}); - - -/***/ }), -/* 368 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__creator__ = __webpack_require__(70); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__selector__ = __webpack_require__(75); - - - -function constantNull() { - return null; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(name, before) { - var create = typeof name === "function" ? name : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__creator__["a" /* default */])(name), - select = before == null ? constantNull : typeof before === "function" ? before : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__selector__["a" /* default */])(before); - return this.select(function() { - return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null); - }); -}); - - -/***/ }), -/* 369 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function lower() { - if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return this.each(lower); -}); - - -/***/ }), -/* 370 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__index__ = __webpack_require__(5); - - -/* harmony default export */ __webpack_exports__["a"] = (function(selection) { - - for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { - for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { - if (node = group0[i] || group1[i]) { - merge[i] = node; - } - } - } - - for (; j < m0; ++j) { - merges[j] = groups0[j]; - } - - return new __WEBPACK_IMPORTED_MODULE_0__index__["b" /* Selection */](merges, this._parents); -}); - - -/***/ }), -/* 371 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() { - - for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { - for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { - var node = group[i]; - if (node) return node; - } - } - - return null; -}); - - -/***/ }), -/* 372 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() { - var nodes = new Array(this.size()), i = -1; - this.each(function() { nodes[++i] = this; }); - return nodes; -}); - - -/***/ }), -/* 373 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() { - - for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) { - for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) { - if (node = group[i]) { - if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next); - next = node; - } - } - } - - return this; -}); - - -/***/ }), -/* 374 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function propertyRemove(name) { - return function() { - delete this[name]; - }; -} - -function propertyConstant(name, value) { - return function() { - this[name] = value; - }; -} - -function propertyFunction(name, value) { - return function() { - var v = value.apply(this, arguments); - if (v == null) delete this[name]; - else this[name] = v; - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(name, value) { - return arguments.length > 1 - ? this.each((value == null - ? propertyRemove : typeof value === "function" - ? propertyFunction - : propertyConstant)(name, value)) - : this.node()[name]; -}); - - -/***/ }), -/* 375 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function raise() { - if (this.nextSibling) this.parentNode.appendChild(this); -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return this.each(raise); -}); - - -/***/ }), -/* 376 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function remove() { - var parent = this.parentNode; - if (parent) parent.removeChild(this); -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return this.each(remove); -}); - - -/***/ }), -/* 377 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__index__ = __webpack_require__(5); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__selector__ = __webpack_require__(75); - - - -/* harmony default export */ __webpack_exports__["a"] = (function(select) { - if (typeof select !== "function") select = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__selector__["a" /* default */])(select); - - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { - if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { - if ("__data__" in node) subnode.__data__ = node.__data__; - subgroup[i] = subnode; - } - } - } - - return new __WEBPACK_IMPORTED_MODULE_0__index__["b" /* Selection */](subgroups, this._parents); -}); - - -/***/ }), -/* 378 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__index__ = __webpack_require__(5); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__selectorAll__ = __webpack_require__(144); - - - -/* harmony default export */ __webpack_exports__["a"] = (function(select) { - if (typeof select !== "function") select = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__selectorAll__["a" /* default */])(select); - - for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - subgroups.push(select.call(node, node.__data__, i, group)); - parents.push(node); - } - } - } - - return new __WEBPACK_IMPORTED_MODULE_0__index__["b" /* Selection */](subgroups, parents); -}); - - -/***/ }), -/* 379 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function() { - var size = 0; - this.each(function() { ++size; }); - return size; -}); - - -/***/ }), -/* 380 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__index__ = __webpack_require__(5); - - -/* harmony default export */ __webpack_exports__["a"] = (function(compare) { - if (!compare) compare = ascending; - - function compareNode(a, b) { - return a && b ? compare(a.__data__, b.__data__) : !a - !b; - } - - for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { - if (node = group[i]) { - sortgroup[i] = node; - } - } - sortgroup.sort(compareNode); - } - - return new __WEBPACK_IMPORTED_MODULE_0__index__["b" /* Selection */](sortgroups, this._parents).order(); -}); - -function ascending(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} - - -/***/ }), -/* 381 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function textRemove() { - this.textContent = ""; -} - -function textConstant(value) { - return function() { - this.textContent = value; - }; -} - -function textFunction(value) { - return function() { - var v = value.apply(this, arguments); - this.textContent = v == null ? "" : v; - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(value) { - return arguments.length - ? this.each(value == null - ? textRemove : (typeof value === "function" - ? textFunction - : textConstant)(value)) - : this.node().textContent; -}); - - -/***/ }), -/* 382 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__sourceEvent__ = __webpack_require__(76); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__point__ = __webpack_require__(73); - - - -/* harmony default export */ __webpack_exports__["a"] = (function(node, touches, identifier) { - if (arguments.length < 3) identifier = touches, touches = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__sourceEvent__["a" /* default */])().changedTouches; - - for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) { - if ((touch = touches[i]).identifier === identifier) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__point__["a" /* default */])(node, touch); - } - } - - return null; -}); - - -/***/ }), -/* 383 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__sourceEvent__ = __webpack_require__(76); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__point__ = __webpack_require__(73); - - - -/* harmony default export */ __webpack_exports__["a"] = (function(node, touches) { - if (touches == null) touches = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__sourceEvent__["a" /* default */])().touches; - - for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) { - points[i] = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__point__["a" /* default */])(node, touches[i]); - } - - return points; -}); - - -/***/ }), -/* 384 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_arc__ = __webpack_require__(385); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_arc__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_area__ = __webpack_require__(145); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__src_area__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__src_line__ = __webpack_require__(79); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_2__src_line__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_pie__ = __webpack_require__(405); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return __WEBPACK_IMPORTED_MODULE_3__src_pie__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__src_radialArea__ = __webpack_require__(406); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return __WEBPACK_IMPORTED_MODULE_4__src_radialArea__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__src_radialLine__ = __webpack_require__(150); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return __WEBPACK_IMPORTED_MODULE_5__src_radialLine__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__src_link_index__ = __webpack_require__(397); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return __WEBPACK_IMPORTED_MODULE_6__src_link_index__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return __WEBPACK_IMPORTED_MODULE_6__src_link_index__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return __WEBPACK_IMPORTED_MODULE_6__src_link_index__["c"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__src_symbol__ = __webpack_require__(409); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return __WEBPACK_IMPORTED_MODULE_7__src_symbol__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return __WEBPACK_IMPORTED_MODULE_7__src_symbol__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__src_symbol_circle__ = __webpack_require__(151); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return __WEBPACK_IMPORTED_MODULE_8__src_symbol_circle__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__src_symbol_cross__ = __webpack_require__(152); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return __WEBPACK_IMPORTED_MODULE_9__src_symbol_cross__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__src_symbol_diamond__ = __webpack_require__(153); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return __WEBPACK_IMPORTED_MODULE_10__src_symbol_diamond__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__src_symbol_square__ = __webpack_require__(154); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return __WEBPACK_IMPORTED_MODULE_11__src_symbol_square__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__src_symbol_star__ = __webpack_require__(155); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "p", function() { return __WEBPACK_IMPORTED_MODULE_12__src_symbol_star__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_13__src_symbol_triangle__ = __webpack_require__(156); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "q", function() { return __WEBPACK_IMPORTED_MODULE_13__src_symbol_triangle__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_14__src_symbol_wye__ = __webpack_require__(157); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "r", function() { return __WEBPACK_IMPORTED_MODULE_14__src_symbol_wye__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_15__src_curve_basisClosed__ = __webpack_require__(386); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "s", function() { return __WEBPACK_IMPORTED_MODULE_15__src_curve_basisClosed__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_16__src_curve_basisOpen__ = __webpack_require__(387); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "t", function() { return __WEBPACK_IMPORTED_MODULE_16__src_curve_basisOpen__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_17__src_curve_basis__ = __webpack_require__(39); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "u", function() { return __WEBPACK_IMPORTED_MODULE_17__src_curve_basis__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_18__src_curve_bundle__ = __webpack_require__(388); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "v", function() { return __WEBPACK_IMPORTED_MODULE_18__src_curve_bundle__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_19__src_curve_cardinalClosed__ = __webpack_require__(147); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "w", function() { return __WEBPACK_IMPORTED_MODULE_19__src_curve_cardinalClosed__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_20__src_curve_cardinalOpen__ = __webpack_require__(148); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "x", function() { return __WEBPACK_IMPORTED_MODULE_20__src_curve_cardinalOpen__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_21__src_curve_cardinal__ = __webpack_require__(40); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "y", function() { return __WEBPACK_IMPORTED_MODULE_21__src_curve_cardinal__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_22__src_curve_catmullRomClosed__ = __webpack_require__(389); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "z", function() { return __WEBPACK_IMPORTED_MODULE_22__src_curve_catmullRomClosed__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_23__src_curve_catmullRomOpen__ = __webpack_require__(390); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "A", function() { return __WEBPACK_IMPORTED_MODULE_23__src_curve_catmullRomOpen__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_24__src_curve_catmullRom__ = __webpack_require__(78); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "B", function() { return __WEBPACK_IMPORTED_MODULE_24__src_curve_catmullRom__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_25__src_curve_linearClosed__ = __webpack_require__(391); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "C", function() { return __WEBPACK_IMPORTED_MODULE_25__src_curve_linearClosed__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_26__src_curve_linear__ = __webpack_require__(41); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "D", function() { return __WEBPACK_IMPORTED_MODULE_26__src_curve_linear__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_27__src_curve_monotone__ = __webpack_require__(392); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "E", function() { return __WEBPACK_IMPORTED_MODULE_27__src_curve_monotone__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "F", function() { return __WEBPACK_IMPORTED_MODULE_27__src_curve_monotone__["b"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_28__src_curve_natural__ = __webpack_require__(393); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "G", function() { return __WEBPACK_IMPORTED_MODULE_28__src_curve_natural__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_29__src_curve_step__ = __webpack_require__(394); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "H", function() { return __WEBPACK_IMPORTED_MODULE_29__src_curve_step__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "I", function() { return __WEBPACK_IMPORTED_MODULE_29__src_curve_step__["b"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "J", function() { return __WEBPACK_IMPORTED_MODULE_29__src_curve_step__["c"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_30__src_stack__ = __webpack_require__(408); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "K", function() { return __WEBPACK_IMPORTED_MODULE_30__src_stack__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_31__src_offset_expand__ = __webpack_require__(399); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "L", function() { return __WEBPACK_IMPORTED_MODULE_31__src_offset_expand__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_32__src_offset_diverging__ = __webpack_require__(398); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "M", function() { return __WEBPACK_IMPORTED_MODULE_32__src_offset_diverging__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_33__src_offset_none__ = __webpack_require__(30); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "N", function() { return __WEBPACK_IMPORTED_MODULE_33__src_offset_none__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_34__src_offset_silhouette__ = __webpack_require__(400); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "O", function() { return __WEBPACK_IMPORTED_MODULE_34__src_offset_silhouette__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_35__src_offset_wiggle__ = __webpack_require__(401); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "P", function() { return __WEBPACK_IMPORTED_MODULE_35__src_offset_wiggle__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_36__src_order_ascending__ = __webpack_require__(80); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Q", function() { return __WEBPACK_IMPORTED_MODULE_36__src_order_ascending__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_37__src_order_descending__ = __webpack_require__(402); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "R", function() { return __WEBPACK_IMPORTED_MODULE_37__src_order_descending__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_38__src_order_insideOut__ = __webpack_require__(403); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "S", function() { return __WEBPACK_IMPORTED_MODULE_38__src_order_insideOut__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_39__src_order_none__ = __webpack_require__(31); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "T", function() { return __WEBPACK_IMPORTED_MODULE_39__src_order_none__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_40__src_order_reverse__ = __webpack_require__(404); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "U", function() { return __WEBPACK_IMPORTED_MODULE_40__src_order_reverse__["a"]; }); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/***/ }), -/* 385 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_path__ = __webpack_require__(14); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__constant__ = __webpack_require__(16); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__math__ = __webpack_require__(29); - - - - -function arcInnerRadius(d) { - return d.innerRadius; -} - -function arcOuterRadius(d) { - return d.outerRadius; -} - -function arcStartAngle(d) { - return d.startAngle; -} - -function arcEndAngle(d) { - return d.endAngle; -} - -function arcPadAngle(d) { - return d && d.padAngle; // Note: optional! -} - -function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { - var x10 = x1 - x0, y10 = y1 - y0, - x32 = x3 - x2, y32 = y3 - y2, - t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10); - return [x0 + t * x10, y0 + t * y10]; -} - -// Compute perpendicular offset line of length rc. -// http://mathworld.wolfram.com/Circle-LineIntersection.html -function cornerTangents(x0, y0, x1, y1, r1, rc, cw) { - var x01 = x0 - x1, - y01 = y0 - y1, - lo = (cw ? rc : -rc) / __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["d" /* sqrt */])(x01 * x01 + y01 * y01), - ox = lo * y01, - oy = -lo * x01, - x11 = x0 + ox, - y11 = y0 + oy, - x10 = x1 + ox, - y10 = y1 + oy, - x00 = (x11 + x10) / 2, - y00 = (y11 + y10) / 2, - dx = x10 - x11, - dy = y10 - y11, - d2 = dx * dx + dy * dy, - r = r1 - rc, - D = x11 * y10 - x10 * y11, - d = (dy < 0 ? -1 : 1) * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["d" /* sqrt */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["e" /* max */])(0, r * r * d2 - D * D)), - cx0 = (D * dy - dx * d) / d2, - cy0 = (-D * dx - dy * d) / d2, - cx1 = (D * dy + dx * d) / d2, - cy1 = (-D * dx + dy * d) / d2, - dx0 = cx0 - x00, - dy0 = cy0 - y00, - dx1 = cx1 - x00, - dy1 = cy1 - y00; - - // Pick the closer of the two intersection points. - // TODO Is there a faster way to determine which intersection to use? - if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; - - return { - cx: cx0, - cy: cy0, - x01: -ox, - y01: -oy, - x11: cx0 * (r1 / r - 1), - y11: cy0 * (r1 / r - 1) - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var innerRadius = arcInnerRadius, - outerRadius = arcOuterRadius, - cornerRadius = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(0), - padRadius = null, - startAngle = arcStartAngle, - endAngle = arcEndAngle, - padAngle = arcPadAngle, - context = null; - - function arc() { - var buffer, - r, - r0 = +innerRadius.apply(this, arguments), - r1 = +outerRadius.apply(this, arguments), - a0 = startAngle.apply(this, arguments) - __WEBPACK_IMPORTED_MODULE_2__math__["f" /* halfPi */], - a1 = endAngle.apply(this, arguments) - __WEBPACK_IMPORTED_MODULE_2__math__["f" /* halfPi */], - da = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["g" /* abs */])(a1 - a0), - cw = a1 > a0; - - if (!context) context = buffer = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_path__["a" /* path */])(); - - // Ensure that the outer radius is always larger than the inner radius. - if (r1 < r0) r = r1, r1 = r0, r0 = r; - - // Is it a point? - if (!(r1 > __WEBPACK_IMPORTED_MODULE_2__math__["a" /* epsilon */])) context.moveTo(0, 0); - - // Or is it a circle or annulus? - else if (da > __WEBPACK_IMPORTED_MODULE_2__math__["c" /* tau */] - __WEBPACK_IMPORTED_MODULE_2__math__["a" /* epsilon */]) { - context.moveTo(r1 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["h" /* cos */])(a0), r1 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["i" /* sin */])(a0)); - context.arc(0, 0, r1, a0, a1, !cw); - if (r0 > __WEBPACK_IMPORTED_MODULE_2__math__["a" /* epsilon */]) { - context.moveTo(r0 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["h" /* cos */])(a1), r0 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["i" /* sin */])(a1)); - context.arc(0, 0, r0, a1, a0, cw); - } - } - - // Or is it a circular or annular sector? - else { - var a01 = a0, - a11 = a1, - a00 = a0, - a10 = a1, - da0 = da, - da1 = da, - ap = padAngle.apply(this, arguments) / 2, - rp = (ap > __WEBPACK_IMPORTED_MODULE_2__math__["a" /* epsilon */]) && (padRadius ? +padRadius.apply(this, arguments) : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["d" /* sqrt */])(r0 * r0 + r1 * r1)), - rc = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["j" /* min */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["g" /* abs */])(r1 - r0) / 2, +cornerRadius.apply(this, arguments)), - rc0 = rc, - rc1 = rc, - t0, - t1; - - // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0. - if (rp > __WEBPACK_IMPORTED_MODULE_2__math__["a" /* epsilon */]) { - var p0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["k" /* asin */])(rp / r0 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["i" /* sin */])(ap)), - p1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["k" /* asin */])(rp / r1 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["i" /* sin */])(ap)); - if ((da0 -= p0 * 2) > __WEBPACK_IMPORTED_MODULE_2__math__["a" /* epsilon */]) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; - else da0 = 0, a00 = a10 = (a0 + a1) / 2; - if ((da1 -= p1 * 2) > __WEBPACK_IMPORTED_MODULE_2__math__["a" /* epsilon */]) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; - else da1 = 0, a01 = a11 = (a0 + a1) / 2; - } - - var x01 = r1 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["h" /* cos */])(a01), - y01 = r1 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["i" /* sin */])(a01), - x10 = r0 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["h" /* cos */])(a10), - y10 = r0 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["i" /* sin */])(a10); - - // Apply rounded corners? - if (rc > __WEBPACK_IMPORTED_MODULE_2__math__["a" /* epsilon */]) { - var x11 = r1 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["h" /* cos */])(a11), - y11 = r1 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["i" /* sin */])(a11), - x00 = r0 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["h" /* cos */])(a00), - y00 = r0 * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["i" /* sin */])(a00); - - // Restrict the corner radius according to the sector angle. - if (da < __WEBPACK_IMPORTED_MODULE_2__math__["b" /* pi */]) { - var oc = da0 > __WEBPACK_IMPORTED_MODULE_2__math__["a" /* epsilon */] ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10], - ax = x01 - oc[0], - ay = y01 - oc[1], - bx = x11 - oc[0], - by = y11 - oc[1], - kc = 1 / __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["i" /* sin */])(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["l" /* acos */])((ax * bx + ay * by) / (__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["d" /* sqrt */])(ax * ax + ay * ay) * __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["d" /* sqrt */])(bx * bx + by * by))) / 2), - lc = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["d" /* sqrt */])(oc[0] * oc[0] + oc[1] * oc[1]); - rc0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["j" /* min */])(rc, (r0 - lc) / (kc - 1)); - rc1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["j" /* min */])(rc, (r1 - lc) / (kc + 1)); - } - } - - // Is the sector collapsed to a line? - if (!(da1 > __WEBPACK_IMPORTED_MODULE_2__math__["a" /* epsilon */])) context.moveTo(x01, y01); - - // Does the sector’s outer ring have rounded corners? - else if (rc1 > __WEBPACK_IMPORTED_MODULE_2__math__["a" /* epsilon */]) { - t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw); - t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw); - - context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); - - // Have the corners merged? - if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t0.y01, t0.x01), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t1.y01, t1.x01), !cw); - - // Otherwise, draw the two corners and the ring. - else { - context.arc(t0.cx, t0.cy, rc1, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t0.y01, t0.x01), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t0.y11, t0.x11), !cw); - context.arc(0, 0, r1, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t0.cy + t0.y11, t0.cx + t0.x11), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t1.cy + t1.y11, t1.cx + t1.x11), !cw); - context.arc(t1.cx, t1.cy, rc1, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t1.y11, t1.x11), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t1.y01, t1.x01), !cw); - } - } - - // Or is the outer ring just a circular arc? - else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); - - // Is there no inner ring, and it’s a circular sector? - // Or perhaps it’s an annular sector collapsed due to padding? - if (!(r0 > __WEBPACK_IMPORTED_MODULE_2__math__["a" /* epsilon */]) || !(da0 > __WEBPACK_IMPORTED_MODULE_2__math__["a" /* epsilon */])) context.lineTo(x10, y10); - - // Does the sector’s inner ring (or point) have rounded corners? - else if (rc0 > __WEBPACK_IMPORTED_MODULE_2__math__["a" /* epsilon */]) { - t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw); - t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw); - - context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); - - // Have the corners merged? - if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t0.y01, t0.x01), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t1.y01, t1.x01), !cw); - - // Otherwise, draw the two corners and the ring. - else { - context.arc(t0.cx, t0.cy, rc0, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t0.y01, t0.x01), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t0.y11, t0.x11), !cw); - context.arc(0, 0, r0, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t0.cy + t0.y11, t0.cx + t0.x11), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t1.cy + t1.y11, t1.cx + t1.x11), cw); - context.arc(t1.cx, t1.cy, rc0, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t1.y11, t1.x11), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["m" /* atan2 */])(t1.y01, t1.x01), !cw); - } - } - - // Or is the inner ring just a circular arc? - else context.arc(0, 0, r0, a10, a00, cw); - } - - context.closePath(); - - if (buffer) return context = null, buffer + "" || null; - } - - arc.centroid = function() { - var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, - a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - __WEBPACK_IMPORTED_MODULE_2__math__["b" /* pi */] / 2; - return [__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["h" /* cos */])(a) * r, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__math__["i" /* sin */])(a) * r]; - }; - - arc.innerRadius = function(_) { - return arguments.length ? (innerRadius = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), arc) : innerRadius; - }; - - arc.outerRadius = function(_) { - return arguments.length ? (outerRadius = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), arc) : outerRadius; - }; - - arc.cornerRadius = function(_) { - return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), arc) : cornerRadius; - }; - - arc.padRadius = function(_) { - return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), arc) : padRadius; - }; - - arc.startAngle = function(_) { - return arguments.length ? (startAngle = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), arc) : startAngle; - }; - - arc.endAngle = function(_) { - return arguments.length ? (endAngle = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), arc) : endAngle; - }; - - arc.padAngle = function(_) { - return arguments.length ? (padAngle = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), arc) : padAngle; - }; - - arc.context = function(_) { - return arguments.length ? ((context = _ == null ? null : _), arc) : context; - }; - - return arc; -}); - - -/***/ }), -/* 386 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__noop__ = __webpack_require__(42); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__basis__ = __webpack_require__(39); - - - -function BasisClosed(context) { - this._context = context; -} - -BasisClosed.prototype = { - areaStart: __WEBPACK_IMPORTED_MODULE_0__noop__["a" /* default */], - areaEnd: __WEBPACK_IMPORTED_MODULE_0__noop__["a" /* default */], - lineStart: function() { - this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = - this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 1: { - this._context.moveTo(this._x2, this._y2); - this._context.closePath(); - break; - } - case 2: { - this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3); - this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3); - this._context.closePath(); - break; - } - case 3: { - this.point(this._x2, this._y2); - this.point(this._x3, this._y3); - this.point(this._x4, this._y4); - break; - } - } - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._x2 = x, this._y2 = y; break; - case 1: this._point = 2; this._x3 = x, this._y3 = y; break; - case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break; - default: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__basis__["c" /* point */])(this, x, y); break; - } - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - } -}; - -/* harmony default export */ __webpack_exports__["a"] = (function(context) { - return new BasisClosed(context); -}); - - -/***/ }), -/* 387 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__basis__ = __webpack_require__(39); - - -function BasisOpen(context) { - this._context = context; -} - -BasisOpen.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = - this._y0 = this._y1 = NaN; - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; break; - case 1: this._point = 2; break; - case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break; - case 3: this._point = 4; // proceed - default: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__basis__["c" /* point */])(this, x, y); break; - } - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - } -}; - -/* harmony default export */ __webpack_exports__["a"] = (function(context) { - return new BasisOpen(context); -}); - - -/***/ }), -/* 388 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__basis__ = __webpack_require__(39); - - -function Bundle(context, beta) { - this._basis = new __WEBPACK_IMPORTED_MODULE_0__basis__["b" /* Basis */](context); - this._beta = beta; -} - -Bundle.prototype = { - lineStart: function() { - this._x = []; - this._y = []; - this._basis.lineStart(); - }, - lineEnd: function() { - var x = this._x, - y = this._y, - j = x.length - 1; - - if (j > 0) { - var x0 = x[0], - y0 = y[0], - dx = x[j] - x0, - dy = y[j] - y0, - i = -1, - t; - - while (++i <= j) { - t = i / j; - this._basis.point( - this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), - this._beta * y[i] + (1 - this._beta) * (y0 + t * dy) - ); - } - } - - this._x = this._y = null; - this._basis.lineEnd(); - }, - point: function(x, y) { - this._x.push(+x); - this._y.push(+y); - } -}; - -/* harmony default export */ __webpack_exports__["a"] = ((function custom(beta) { - - function bundle(context) { - return beta === 1 ? new __WEBPACK_IMPORTED_MODULE_0__basis__["b" /* Basis */](context) : new Bundle(context, beta); - } - - bundle.beta = function(beta) { - return custom(+beta); - }; - - return bundle; -})(0.85)); - - -/***/ }), -/* 389 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cardinalClosed__ = __webpack_require__(147); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__noop__ = __webpack_require__(42); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__catmullRom__ = __webpack_require__(78); - - - - -function CatmullRomClosed(context, alpha) { - this._context = context; - this._alpha = alpha; -} - -CatmullRomClosed.prototype = { - areaStart: __WEBPACK_IMPORTED_MODULE_1__noop__["a" /* default */], - areaEnd: __WEBPACK_IMPORTED_MODULE_1__noop__["a" /* default */], - lineStart: function() { - this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = - this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; - this._l01_a = this._l12_a = this._l23_a = - this._l01_2a = this._l12_2a = this._l23_2a = - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 1: { - this._context.moveTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 2: { - this._context.lineTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 3: { - this.point(this._x3, this._y3); - this.point(this._x4, this._y4); - this.point(this._x5, this._y5); - break; - } - } - }, - point: function(x, y) { - x = +x, y = +y; - - if (this._point) { - var x23 = this._x2 - x, - y23 = this._y2 - y; - this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); - } - - switch (this._point) { - case 0: this._point = 1; this._x3 = x, this._y3 = y; break; - case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; - case 2: this._point = 3; this._x5 = x, this._y5 = y; break; - default: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__catmullRom__["b" /* point */])(this, x, y); break; - } - - this._l01_a = this._l12_a, this._l12_a = this._l23_a; - this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -/* harmony default export */ __webpack_exports__["a"] = ((function custom(alpha) { - - function catmullRom(context) { - return alpha ? new CatmullRomClosed(context, alpha) : new __WEBPACK_IMPORTED_MODULE_0__cardinalClosed__["b" /* CardinalClosed */](context, 0); - } - - catmullRom.alpha = function(alpha) { - return custom(+alpha); - }; - - return catmullRom; -})(0.5)); - - -/***/ }), -/* 390 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cardinalOpen__ = __webpack_require__(148); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__catmullRom__ = __webpack_require__(78); - - - -function CatmullRomOpen(context, alpha) { - this._context = context; - this._alpha = alpha; -} - -CatmullRomOpen.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._l01_a = this._l12_a = this._l23_a = - this._l01_2a = this._l12_2a = this._l23_2a = - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - - if (this._point) { - var x23 = this._x2 - x, - y23 = this._y2 - y; - this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); - } - - switch (this._point) { - case 0: this._point = 1; break; - case 1: this._point = 2; break; - case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; - case 3: this._point = 4; // proceed - default: __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__catmullRom__["b" /* point */])(this, x, y); break; - } - - this._l01_a = this._l12_a, this._l12_a = this._l23_a; - this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -/* harmony default export */ __webpack_exports__["a"] = ((function custom(alpha) { - - function catmullRom(context) { - return alpha ? new CatmullRomOpen(context, alpha) : new __WEBPACK_IMPORTED_MODULE_0__cardinalOpen__["b" /* CardinalOpen */](context, 0); - } - - catmullRom.alpha = function(alpha) { - return custom(+alpha); - }; - - return catmullRom; -})(0.5)); - - -/***/ }), -/* 391 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__noop__ = __webpack_require__(42); - - -function LinearClosed(context) { - this._context = context; -} - -LinearClosed.prototype = { - areaStart: __WEBPACK_IMPORTED_MODULE_0__noop__["a" /* default */], - areaEnd: __WEBPACK_IMPORTED_MODULE_0__noop__["a" /* default */], - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._point) this._context.closePath(); - }, - point: function(x, y) { - x = +x, y = +y; - if (this._point) this._context.lineTo(x, y); - else this._point = 1, this._context.moveTo(x, y); - } -}; - -/* harmony default export */ __webpack_exports__["a"] = (function(context) { - return new LinearClosed(context); -}); - - -/***/ }), -/* 392 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = monotoneX; -/* harmony export (immutable) */ __webpack_exports__["b"] = monotoneY; -function sign(x) { - return x < 0 ? -1 : 1; -} - -// Calculate the slopes of the tangents (Hermite-type interpolation) based on -// the following paper: Steffen, M. 1990. A Simple Method for Monotonic -// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO. -// NOV(II), P. 443, 1990. -function slope3(that, x2, y2) { - var h0 = that._x1 - that._x0, - h1 = x2 - that._x1, - s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0), - s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0), - p = (s0 * h1 + s1 * h0) / (h0 + h1); - return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0; -} - -// Calculate a one-sided slope. -function slope2(that, t) { - var h = that._x1 - that._x0; - return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t; -} - -// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations -// "you can express cubic Hermite interpolation in terms of cubic Bézier curves -// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1". -function point(that, t0, t1) { - var x0 = that._x0, - y0 = that._y0, - x1 = that._x1, - y1 = that._y1, - dx = (x1 - x0) / 3; - that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1); -} - -function MonotoneX(context) { - this._context = context; -} - -MonotoneX.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = - this._y0 = this._y1 = - this._t0 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 2: this._context.lineTo(this._x1, this._y1); break; - case 3: point(this, this._t0, slope2(this, this._t0)); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - var t1 = NaN; - - x = +x, y = +y; - if (x === this._x1 && y === this._y1) return; // Ignore coincident points. - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; break; - case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break; - default: point(this, this._t0, t1 = slope3(this, x, y)); break; - } - - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - this._t0 = t1; - } -} - -function MonotoneY(context) { - this._context = new ReflectContext(context); -} - -(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) { - MonotoneX.prototype.point.call(this, y, x); -}; - -function ReflectContext(context) { - this._context = context; -} - -ReflectContext.prototype = { - moveTo: function(x, y) { this._context.moveTo(y, x); }, - closePath: function() { this._context.closePath(); }, - lineTo: function(x, y) { this._context.lineTo(y, x); }, - bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); } -}; - -function monotoneX(context) { - return new MonotoneX(context); -} - -function monotoneY(context) { - return new MonotoneY(context); -} - - -/***/ }), -/* 393 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function Natural(context) { - this._context = context; -} - -Natural.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x = []; - this._y = []; - }, - lineEnd: function() { - var x = this._x, - y = this._y, - n = x.length; - - if (n) { - this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]); - if (n === 2) { - this._context.lineTo(x[1], y[1]); - } else { - var px = controlPoints(x), - py = controlPoints(y); - for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) { - this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]); - } - } - } - - if (this._line || (this._line !== 0 && n === 1)) this._context.closePath(); - this._line = 1 - this._line; - this._x = this._y = null; - }, - point: function(x, y) { - this._x.push(+x); - this._y.push(+y); - } -}; - -// See https://www.particleincell.com/2012/bezier-splines/ for derivation. -function controlPoints(x) { - var i, - n = x.length - 1, - m, - a = new Array(n), - b = new Array(n), - r = new Array(n); - a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1]; - for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; - a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n]; - for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; - a[n - 1] = r[n - 1] / b[n - 1]; - for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i]; - b[n - 1] = (x[n] + a[n - 1]) / 2; - for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1]; - return [a, b]; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(context) { - return new Natural(context); -}); - - -/***/ }), -/* 394 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["c"] = stepBefore; -/* harmony export (immutable) */ __webpack_exports__["b"] = stepAfter; -function Step(context, t) { - this._context = context; - this._t = t; -} - -Step.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x = this._y = NaN; - this._point = 0; - }, - lineEnd: function() { - if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y); - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; // proceed - default: { - if (this._t <= 0) { - this._context.lineTo(this._x, y); - this._context.lineTo(x, y); - } else { - var x1 = this._x * (1 - this._t) + x * this._t; - this._context.lineTo(x1, this._y); - this._context.lineTo(x1, y); - } - break; - } - } - this._x = x, this._y = y; - } -}; - -/* harmony default export */ __webpack_exports__["a"] = (function(context) { - return new Step(context, 0.5); -}); - -function stepBefore(context) { - return new Step(context, 0); -} - -function stepAfter(context) { - return new Step(context, 1); -} - - -/***/ }), -/* 395 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(a, b) { - return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; -}); - - -/***/ }), -/* 396 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(d) { - return d; -}); - - -/***/ }), -/* 397 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = linkHorizontal; -/* harmony export (immutable) */ __webpack_exports__["b"] = linkVertical; -/* harmony export (immutable) */ __webpack_exports__["c"] = linkRadial; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_path__ = __webpack_require__(14); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__array__ = __webpack_require__(146); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__constant__ = __webpack_require__(16); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__point__ = __webpack_require__(81); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__radialPoint__ = __webpack_require__(407); - - - - - - -function linkSource(d) { - return d.source; -} - -function linkTarget(d) { - return d.target; -} - -function link(curve) { - var source = linkSource, - target = linkTarget, - x = __WEBPACK_IMPORTED_MODULE_3__point__["a" /* x */], - y = __WEBPACK_IMPORTED_MODULE_3__point__["b" /* y */], - context = null; - - function link() { - var buffer, argv = __WEBPACK_IMPORTED_MODULE_1__array__["a" /* slice */].call(arguments), s = source.apply(this, argv), t = target.apply(this, argv); - if (!context) context = buffer = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_path__["a" /* path */])(); - curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv)); - if (buffer) return context = null, buffer + "" || null; - } - - link.source = function(_) { - return arguments.length ? (source = _, link) : source; - }; - - link.target = function(_) { - return arguments.length ? (target = _, link) : target; - }; - - link.x = function(_) { - return arguments.length ? (x = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__constant__["a" /* default */])(+_), link) : x; - }; - - link.y = function(_) { - return arguments.length ? (y = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__constant__["a" /* default */])(+_), link) : y; - }; - - link.context = function(_) { - return arguments.length ? ((context = _ == null ? null : _), link) : context; - }; - - return link; -} - -function curveHorizontal(context, x0, y0, x1, y1) { - context.moveTo(x0, y0); - context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1); -} - -function curveVertical(context, x0, y0, x1, y1) { - context.moveTo(x0, y0); - context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1); -} - -function curveRadial(context, x0, y0, x1, y1) { - var p0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__radialPoint__["a" /* default */])(x0, y0), - p1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__radialPoint__["a" /* default */])(x0, y0 = (y0 + y1) / 2), - p2 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__radialPoint__["a" /* default */])(x1, y0), - p3 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__radialPoint__["a" /* default */])(x1, y1); - context.moveTo(p0[0], p0[1]); - context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]); -} - -function linkHorizontal() { - return link(curveHorizontal); -} - -function linkVertical() { - return link(curveVertical); -} - -function linkRadial() { - var l = link(curveRadial); - l.angle = l.x, delete l.x; - l.radius = l.y, delete l.y; - return l; -} - - -/***/ }), -/* 398 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(series, order) { - if (!((n = series.length) > 1)) return; - for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) { - for (yp = yn = 0, i = 0; i < n; ++i) { - if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) { - d[0] = yp, d[1] = yp += dy; - } else if (dy < 0) { - d[1] = yn, d[0] = yn += dy; - } else { - d[0] = yp; - } - } - } -}); - - -/***/ }), -/* 399 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__none__ = __webpack_require__(30); - - -/* harmony default export */ __webpack_exports__["a"] = (function(series, order) { - if (!((n = series.length) > 0)) return; - for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) { - for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0; - if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y; - } - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__none__["a" /* default */])(series, order); -}); - - -/***/ }), -/* 400 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__none__ = __webpack_require__(30); - - -/* harmony default export */ __webpack_exports__["a"] = (function(series, order) { - if (!((n = series.length) > 0)) return; - for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) { - for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0; - s0[j][1] += s0[j][0] = -y / 2; - } - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__none__["a" /* default */])(series, order); -}); - - -/***/ }), -/* 401 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__none__ = __webpack_require__(30); - - -/* harmony default export */ __webpack_exports__["a"] = (function(series, order) { - if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return; - for (var y = 0, j = 1, s0, m, n; j < m; ++j) { - for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) { - var si = series[order[i]], - sij0 = si[j][1] || 0, - sij1 = si[j - 1][1] || 0, - s3 = (sij0 - sij1) / 2; - for (var k = 0; k < i; ++k) { - var sk = series[order[k]], - skj0 = sk[j][1] || 0, - skj1 = sk[j - 1][1] || 0; - s3 += skj0 - skj1; - } - s1 += sij0, s2 += s3 * sij0; - } - s0[j - 1][1] += s0[j - 1][0] = y; - if (s1) y -= s2 / s1; - } - s0[j - 1][1] += s0[j - 1][0] = y; - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__none__["a" /* default */])(series, order); -}); - - -/***/ }), -/* 402 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ascending__ = __webpack_require__(80); - - -/* harmony default export */ __webpack_exports__["a"] = (function(series) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__ascending__["a" /* default */])(series).reverse(); -}); - - -/***/ }), -/* 403 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__none__ = __webpack_require__(31); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ascending__ = __webpack_require__(80); - - - -/* harmony default export */ __webpack_exports__["a"] = (function(series) { - var n = series.length, - i, - j, - sums = series.map(__WEBPACK_IMPORTED_MODULE_1__ascending__["b" /* sum */]), - order = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__none__["a" /* default */])(series).sort(function(a, b) { return sums[b] - sums[a]; }), - top = 0, - bottom = 0, - tops = [], - bottoms = []; - - for (i = 0; i < n; ++i) { - j = order[i]; - if (top < bottom) { - top += sums[j]; - tops.push(j); - } else { - bottom += sums[j]; - bottoms.push(j); - } - } - - return bottoms.reverse().concat(tops); -}); - - -/***/ }), -/* 404 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__none__ = __webpack_require__(31); - - -/* harmony default export */ __webpack_exports__["a"] = (function(series) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__none__["a" /* default */])(series).reverse(); -}); - - -/***/ }), -/* 405 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constant__ = __webpack_require__(16); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__descending__ = __webpack_require__(395); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__identity__ = __webpack_require__(396); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__math__ = __webpack_require__(29); - - - - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var value = __WEBPACK_IMPORTED_MODULE_2__identity__["a" /* default */], - sortValues = __WEBPACK_IMPORTED_MODULE_1__descending__["a" /* default */], - sort = null, - startAngle = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(0), - endAngle = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(__WEBPACK_IMPORTED_MODULE_3__math__["c" /* tau */]), - padAngle = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(0); - - function pie(data) { - var i, - n = data.length, - j, - k, - sum = 0, - index = new Array(n), - arcs = new Array(n), - a0 = +startAngle.apply(this, arguments), - da = Math.min(__WEBPACK_IMPORTED_MODULE_3__math__["c" /* tau */], Math.max(-__WEBPACK_IMPORTED_MODULE_3__math__["c" /* tau */], endAngle.apply(this, arguments) - a0)), - a1, - p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)), - pa = p * (da < 0 ? -1 : 1), - v; - - for (i = 0; i < n; ++i) { - if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) { - sum += v; - } - } - - // Optionally sort the arcs by previously-computed values or by data. - if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); }); - else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); }); - - // Compute the arcs! They are stored in the original data's order. - for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) { - j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = { - data: data[j], - index: i, - value: v, - startAngle: a0, - endAngle: a1, - padAngle: p - }; - } - - return arcs; - } - - pie.value = function(_) { - return arguments.length ? (value = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(+_), pie) : value; - }; - - pie.sortValues = function(_) { - return arguments.length ? (sortValues = _, sort = null, pie) : sortValues; - }; - - pie.sort = function(_) { - return arguments.length ? (sort = _, sortValues = null, pie) : sort; - }; - - pie.startAngle = function(_) { - return arguments.length ? (startAngle = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(+_), pie) : startAngle; - }; - - pie.endAngle = function(_) { - return arguments.length ? (endAngle = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(+_), pie) : endAngle; - }; - - pie.padAngle = function(_) { - return arguments.length ? (padAngle = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(+_), pie) : padAngle; - }; - - return pie; -}); - - -/***/ }), -/* 406 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__curve_radial__ = __webpack_require__(149); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__area__ = __webpack_require__(145); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__radialLine__ = __webpack_require__(150); - - - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var a = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__area__["a" /* default */])().curve(__WEBPACK_IMPORTED_MODULE_0__curve_radial__["b" /* curveRadialLinear */]), - c = a.curve, - x0 = a.lineX0, - x1 = a.lineX1, - y0 = a.lineY0, - y1 = a.lineY1; - - a.angle = a.x, delete a.x; - a.startAngle = a.x0, delete a.x0; - a.endAngle = a.x1, delete a.x1; - a.radius = a.y, delete a.y; - a.innerRadius = a.y0, delete a.y0; - a.outerRadius = a.y1, delete a.y1; - a.lineStartAngle = function() { return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__radialLine__["b" /* radialLine */])(x0()); }, delete a.lineX0; - a.lineEndAngle = function() { return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__radialLine__["b" /* radialLine */])(x1()); }, delete a.lineX1; - a.lineInnerRadius = function() { return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__radialLine__["b" /* radialLine */])(y0()); }, delete a.lineY0; - a.lineOuterRadius = function() { return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__radialLine__["b" /* radialLine */])(y1()); }, delete a.lineY1; - - a.curve = function(_) { - return arguments.length ? c(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__curve_radial__["a" /* default */])(_)) : c()._curve; - }; - - return a; -}); - - -/***/ }), -/* 407 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x, y) { - return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)]; -}); - - -/***/ }), -/* 408 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__array__ = __webpack_require__(146); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__constant__ = __webpack_require__(16); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__offset_none__ = __webpack_require__(30); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__order_none__ = __webpack_require__(31); - - - - - -function stackValue(d, key) { - return d[key]; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var keys = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])([]), - order = __WEBPACK_IMPORTED_MODULE_3__order_none__["a" /* default */], - offset = __WEBPACK_IMPORTED_MODULE_2__offset_none__["a" /* default */], - value = stackValue; - - function stack(data) { - var kz = keys.apply(this, arguments), - i, - m = data.length, - n = kz.length, - sz = new Array(n), - oz; - - for (i = 0; i < n; ++i) { - for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) { - si[j] = sij = [0, +value(data[j], ki, j, data)]; - sij.data = data[j]; - } - si.key = ki; - } - - for (i = 0, oz = order(sz); i < n; ++i) { - sz[oz[i]].index = i; - } - - offset(sz, oz); - return sz; - } - - stack.keys = function(_) { - return arguments.length ? (keys = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(__WEBPACK_IMPORTED_MODULE_0__array__["a" /* slice */].call(_)), stack) : keys; - }; - - stack.value = function(_) { - return arguments.length ? (value = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(+_), stack) : value; - }; - - stack.order = function(_) { - return arguments.length ? (order = _ == null ? __WEBPACK_IMPORTED_MODULE_3__order_none__["a" /* default */] : typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__constant__["a" /* default */])(__WEBPACK_IMPORTED_MODULE_0__array__["a" /* slice */].call(_)), stack) : order; - }; - - stack.offset = function(_) { - return arguments.length ? (offset = _ == null ? __WEBPACK_IMPORTED_MODULE_2__offset_none__["a" /* default */] : _, stack) : offset; - }; - - return stack; -}); - - -/***/ }), -/* 409 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return symbols; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_path__ = __webpack_require__(14); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__symbol_circle__ = __webpack_require__(151); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__symbol_cross__ = __webpack_require__(152); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__symbol_diamond__ = __webpack_require__(153); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__symbol_star__ = __webpack_require__(155); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__symbol_square__ = __webpack_require__(154); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__symbol_triangle__ = __webpack_require__(156); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__symbol_wye__ = __webpack_require__(157); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__constant__ = __webpack_require__(16); - - - - - - - - - - -var symbols = [ - __WEBPACK_IMPORTED_MODULE_1__symbol_circle__["a" /* default */], - __WEBPACK_IMPORTED_MODULE_2__symbol_cross__["a" /* default */], - __WEBPACK_IMPORTED_MODULE_3__symbol_diamond__["a" /* default */], - __WEBPACK_IMPORTED_MODULE_5__symbol_square__["a" /* default */], - __WEBPACK_IMPORTED_MODULE_4__symbol_star__["a" /* default */], - __WEBPACK_IMPORTED_MODULE_6__symbol_triangle__["a" /* default */], - __WEBPACK_IMPORTED_MODULE_7__symbol_wye__["a" /* default */] -]; - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var type = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__constant__["a" /* default */])(__WEBPACK_IMPORTED_MODULE_1__symbol_circle__["a" /* default */]), - size = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__constant__["a" /* default */])(64), - context = null; - - function symbol() { - var buffer; - if (!context) context = buffer = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_path__["a" /* path */])(); - type.apply(this, arguments).draw(context, +size.apply(this, arguments)); - if (buffer) return context = null, buffer + "" || null; - } - - symbol.type = function(_) { - return arguments.length ? (type = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__constant__["a" /* default */])(_), symbol) : type; - }; - - symbol.size = function(_) { - return arguments.length ? (size = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__constant__["a" /* default */])(+_), symbol) : size; - }; - - symbol.context = function(_) { - return arguments.length ? (context = _ == null ? null : _, symbol) : context; - }; - - return symbol; -}); - - -/***/ }), -/* 410 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__isoFormat__ = __webpack_require__(158); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__defaultLocale__ = __webpack_require__(83); - - - -function parseIsoNative(string) { - var date = new Date(string); - return isNaN(date) ? null : date; -} - -var parseIso = +new Date("2000-01-01T00:00:00.000Z") - ? parseIsoNative - : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__defaultLocale__["e" /* utcParse */])(__WEBPACK_IMPORTED_MODULE_0__isoFormat__["b" /* isoSpecifier */]); - -/* harmony default export */ __webpack_exports__["a"] = (parseIso); - - -/***/ }), -/* 411 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return days; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__interval__ = __webpack_require__(2); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__duration__ = __webpack_require__(9); - - - -var day = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - date.setHours(0, 0, 0, 0); -}, function(date, step) { - date.setDate(date.getDate() + step); -}, function(start, end) { - return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * __WEBPACK_IMPORTED_MODULE_1__duration__["d" /* durationMinute */]) / __WEBPACK_IMPORTED_MODULE_1__duration__["b" /* durationDay */]; -}, function(date) { - return date.getDate() - 1; -}); - -/* harmony default export */ __webpack_exports__["a"] = (day); -var days = day.range; - - -/***/ }), -/* 412 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return hours; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__interval__ = __webpack_require__(2); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__duration__ = __webpack_require__(9); - - - -var hour = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - var offset = date.getTimezoneOffset() * __WEBPACK_IMPORTED_MODULE_1__duration__["d" /* durationMinute */] % __WEBPACK_IMPORTED_MODULE_1__duration__["c" /* durationHour */]; - if (offset < 0) offset += __WEBPACK_IMPORTED_MODULE_1__duration__["c" /* durationHour */]; - date.setTime(Math.floor((+date - offset) / __WEBPACK_IMPORTED_MODULE_1__duration__["c" /* durationHour */]) * __WEBPACK_IMPORTED_MODULE_1__duration__["c" /* durationHour */] + offset); -}, function(date, step) { - date.setTime(+date + step * __WEBPACK_IMPORTED_MODULE_1__duration__["c" /* durationHour */]); -}, function(start, end) { - return (end - start) / __WEBPACK_IMPORTED_MODULE_1__duration__["c" /* durationHour */]; -}, function(date) { - return date.getHours(); -}); - -/* harmony default export */ __webpack_exports__["a"] = (hour); -var hours = hour.range; - - -/***/ }), -/* 413 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return milliseconds; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__interval__ = __webpack_require__(2); - - -var millisecond = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function() { - // noop -}, function(date, step) { - date.setTime(+date + step); -}, function(start, end) { - return end - start; -}); - -// An optimized implementation for this simple case. -millisecond.every = function(k) { - k = Math.floor(k); - if (!isFinite(k) || !(k > 0)) return null; - if (!(k > 1)) return millisecond; - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - date.setTime(Math.floor(date / k) * k); - }, function(date, step) { - date.setTime(+date + step * k); - }, function(start, end) { - return (end - start) / k; - }); -}; - -/* harmony default export */ __webpack_exports__["a"] = (millisecond); -var milliseconds = millisecond.range; - - -/***/ }), -/* 414 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return minutes; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__interval__ = __webpack_require__(2); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__duration__ = __webpack_require__(9); - - - -var minute = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - date.setTime(Math.floor(date / __WEBPACK_IMPORTED_MODULE_1__duration__["d" /* durationMinute */]) * __WEBPACK_IMPORTED_MODULE_1__duration__["d" /* durationMinute */]); -}, function(date, step) { - date.setTime(+date + step * __WEBPACK_IMPORTED_MODULE_1__duration__["d" /* durationMinute */]); -}, function(start, end) { - return (end - start) / __WEBPACK_IMPORTED_MODULE_1__duration__["d" /* durationMinute */]; -}, function(date) { - return date.getMinutes(); -}); - -/* harmony default export */ __webpack_exports__["a"] = (minute); -var minutes = minute.range; - - -/***/ }), -/* 415 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return months; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__interval__ = __webpack_require__(2); - - -var month = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - date.setDate(1); - date.setHours(0, 0, 0, 0); -}, function(date, step) { - date.setMonth(date.getMonth() + step); -}, function(start, end) { - return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12; -}, function(date) { - return date.getMonth(); -}); - -/* harmony default export */ __webpack_exports__["a"] = (month); -var months = month.range; - - -/***/ }), -/* 416 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return seconds; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__interval__ = __webpack_require__(2); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__duration__ = __webpack_require__(9); - - - -var second = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - date.setTime(Math.floor(date / __WEBPACK_IMPORTED_MODULE_1__duration__["e" /* durationSecond */]) * __WEBPACK_IMPORTED_MODULE_1__duration__["e" /* durationSecond */]); -}, function(date, step) { - date.setTime(+date + step * __WEBPACK_IMPORTED_MODULE_1__duration__["e" /* durationSecond */]); -}, function(start, end) { - return (end - start) / __WEBPACK_IMPORTED_MODULE_1__duration__["e" /* durationSecond */]; -}, function(date) { - return date.getUTCSeconds(); -}); - -/* harmony default export */ __webpack_exports__["a"] = (second); -var seconds = second.range; - - -/***/ }), -/* 417 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return utcDays; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__interval__ = __webpack_require__(2); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__duration__ = __webpack_require__(9); - - - -var utcDay = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - date.setUTCHours(0, 0, 0, 0); -}, function(date, step) { - date.setUTCDate(date.getUTCDate() + step); -}, function(start, end) { - return (end - start) / __WEBPACK_IMPORTED_MODULE_1__duration__["b" /* durationDay */]; -}, function(date) { - return date.getUTCDate() - 1; -}); - -/* harmony default export */ __webpack_exports__["a"] = (utcDay); -var utcDays = utcDay.range; - - -/***/ }), -/* 418 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return utcHours; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__interval__ = __webpack_require__(2); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__duration__ = __webpack_require__(9); - - - -var utcHour = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - date.setUTCMinutes(0, 0, 0); -}, function(date, step) { - date.setTime(+date + step * __WEBPACK_IMPORTED_MODULE_1__duration__["c" /* durationHour */]); -}, function(start, end) { - return (end - start) / __WEBPACK_IMPORTED_MODULE_1__duration__["c" /* durationHour */]; -}, function(date) { - return date.getUTCHours(); -}); - -/* harmony default export */ __webpack_exports__["a"] = (utcHour); -var utcHours = utcHour.range; - - -/***/ }), -/* 419 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return utcMinutes; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__interval__ = __webpack_require__(2); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__duration__ = __webpack_require__(9); - - - -var utcMinute = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - date.setUTCSeconds(0, 0); -}, function(date, step) { - date.setTime(+date + step * __WEBPACK_IMPORTED_MODULE_1__duration__["d" /* durationMinute */]); -}, function(start, end) { - return (end - start) / __WEBPACK_IMPORTED_MODULE_1__duration__["d" /* durationMinute */]; -}, function(date) { - return date.getUTCMinutes(); -}); - -/* harmony default export */ __webpack_exports__["a"] = (utcMinute); -var utcMinutes = utcMinute.range; - - -/***/ }), -/* 420 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return utcMonths; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__interval__ = __webpack_require__(2); - - -var utcMonth = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - date.setUTCDate(1); - date.setUTCHours(0, 0, 0, 0); -}, function(date, step) { - date.setUTCMonth(date.getUTCMonth() + step); -}, function(start, end) { - return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12; -}, function(date) { - return date.getUTCMonth(); -}); - -/* harmony default export */ __webpack_exports__["a"] = (utcMonth); -var utcMonths = utcMonth.range; - - -/***/ }), -/* 421 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return utcSunday; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return utcMonday; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return utcTuesday; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return utcWednesday; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return utcThursday; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return utcFriday; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return utcSaturday; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return utcSundays; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return utcMondays; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return utcTuesdays; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return utcWednesdays; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return utcThursdays; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return utcFridays; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return utcSaturdays; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__interval__ = __webpack_require__(2); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__duration__ = __webpack_require__(9); - - - -function utcWeekday(i) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7); - date.setUTCHours(0, 0, 0, 0); - }, function(date, step) { - date.setUTCDate(date.getUTCDate() + step * 7); - }, function(start, end) { - return (end - start) / __WEBPACK_IMPORTED_MODULE_1__duration__["a" /* durationWeek */]; - }); -} - -var utcSunday = utcWeekday(0); -var utcMonday = utcWeekday(1); -var utcTuesday = utcWeekday(2); -var utcWednesday = utcWeekday(3); -var utcThursday = utcWeekday(4); -var utcFriday = utcWeekday(5); -var utcSaturday = utcWeekday(6); - -var utcSundays = utcSunday.range; -var utcMondays = utcMonday.range; -var utcTuesdays = utcTuesday.range; -var utcWednesdays = utcWednesday.range; -var utcThursdays = utcThursday.range; -var utcFridays = utcFriday.range; -var utcSaturdays = utcSaturday.range; - - -/***/ }), -/* 422 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return utcYears; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__interval__ = __webpack_require__(2); - - -var utcYear = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - date.setUTCMonth(0, 1); - date.setUTCHours(0, 0, 0, 0); -}, function(date, step) { - date.setUTCFullYear(date.getUTCFullYear() + step); -}, function(start, end) { - return end.getUTCFullYear() - start.getUTCFullYear(); -}, function(date) { - return date.getUTCFullYear(); -}); - -// An optimized implementation for this simple case. -utcYear.every = function(k) { - return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k); - date.setUTCMonth(0, 1); - date.setUTCHours(0, 0, 0, 0); - }, function(date, step) { - date.setUTCFullYear(date.getUTCFullYear() + step * k); - }); -}; - -/* harmony default export */ __webpack_exports__["a"] = (utcYear); -var utcYears = utcYear.range; - - -/***/ }), -/* 423 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return sunday; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return monday; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return tuesday; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return wednesday; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return thursday; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "k", function() { return friday; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "m", function() { return saturday; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return sundays; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return mondays; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return tuesdays; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return wednesdays; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "j", function() { return thursdays; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "l", function() { return fridays; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "n", function() { return saturdays; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__interval__ = __webpack_require__(2); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__duration__ = __webpack_require__(9); - - - -function weekday(i) { - return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7); - date.setHours(0, 0, 0, 0); - }, function(date, step) { - date.setDate(date.getDate() + step * 7); - }, function(start, end) { - return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * __WEBPACK_IMPORTED_MODULE_1__duration__["d" /* durationMinute */]) / __WEBPACK_IMPORTED_MODULE_1__duration__["a" /* durationWeek */]; - }); -} - -var sunday = weekday(0); -var monday = weekday(1); -var tuesday = weekday(2); -var wednesday = weekday(3); -var thursday = weekday(4); -var friday = weekday(5); -var saturday = weekday(6); - -var sundays = sunday.range; -var mondays = monday.range; -var tuesdays = tuesday.range; -var wednesdays = wednesday.range; -var thursdays = thursday.range; -var fridays = friday.range; -var saturdays = saturday.range; - - -/***/ }), -/* 424 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return years; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__interval__ = __webpack_require__(2); - - -var year = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - date.setMonth(0, 1); - date.setHours(0, 0, 0, 0); -}, function(date, step) { - date.setFullYear(date.getFullYear() + step); -}, function(start, end) { - return end.getFullYear() - start.getFullYear(); -}, function(date) { - return date.getFullYear(); -}); - -// An optimized implementation for this simple case. -year.every = function(k) { - return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interval__["a" /* default */])(function(date) { - date.setFullYear(Math.floor(date.getFullYear() / k) * k); - date.setMonth(0, 1); - date.setHours(0, 0, 0, 0); - }, function(date, step) { - date.setFullYear(date.getFullYear() + step * k); - }); -}; - -/* harmony default export */ __webpack_exports__["a"] = (year); -var years = year.range; - - -/***/ }), -/* 425 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__timer__ = __webpack_require__(84); - - -/* harmony default export */ __webpack_exports__["a"] = (function(callback, delay, time) { - var t = new __WEBPACK_IMPORTED_MODULE_0__timer__["b" /* Timer */], total = delay; - if (delay == null) return t.restart(callback, delay, time), t; - delay = +delay, time = time == null ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__timer__["c" /* now */])() : +time; - t.restart(function tick(elapsed) { - elapsed += total; - t.restart(tick, total += delay, time); - callback(elapsed); - }, delay, time); - return t; -}); - - -/***/ }), -/* 426 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__timer__ = __webpack_require__(84); - - -/* harmony default export */ __webpack_exports__["a"] = (function(callback, delay, time) { - var t = new __WEBPACK_IMPORTED_MODULE_0__timer__["b" /* Timer */]; - delay = delay == null ? 0 : +delay; - t.restart(function(elapsed) { - t.stop(); - callback(elapsed + delay); - }, delay, time); - return t; -}); - - -/***/ }), -/* 427 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__transition_index__ = __webpack_require__(11); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__transition_schedule__ = __webpack_require__(6); - - - -var root = [null]; - -/* harmony default export */ __webpack_exports__["a"] = (function(node, name) { - var schedules = node.__transition, - schedule, - i; - - if (schedules) { - name = name == null ? null : name + ""; - for (i in schedules) { - if ((schedule = schedules[i]).state > __WEBPACK_IMPORTED_MODULE_1__transition_schedule__["d" /* SCHEDULED */] && schedule.name === name) { - return new __WEBPACK_IMPORTED_MODULE_0__transition_index__["b" /* Transition */]([[node]], root, name, +i); - } - } - } - - return null; -}); - - -/***/ }), -/* 428 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__interrupt__ = __webpack_require__(429); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__transition__ = __webpack_require__(430); - - - - -__WEBPACK_IMPORTED_MODULE_0_d3_selection__["a" /* selection */].prototype.interrupt = __WEBPACK_IMPORTED_MODULE_1__interrupt__["a" /* default */]; -__WEBPACK_IMPORTED_MODULE_0_d3_selection__["a" /* selection */].prototype.transition = __WEBPACK_IMPORTED_MODULE_2__transition__["a" /* default */]; - - -/***/ }), -/* 429 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__interrupt__ = __webpack_require__(160); - - -/* harmony default export */ __webpack_exports__["a"] = (function(name) { - return this.each(function() { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__interrupt__["a" /* default */])(this, name); - }); -}); - - -/***/ }), -/* 430 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__transition_index__ = __webpack_require__(11); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__transition_schedule__ = __webpack_require__(6); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_d3_ease__ = __webpack_require__(104); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_d3_timer__ = __webpack_require__(44); - - - - - -var defaultTiming = { - time: null, // Set on use. - delay: 0, - duration: 250, - ease: __WEBPACK_IMPORTED_MODULE_2_d3_ease__["a" /* easeCubicInOut */] -}; - -function inherit(node, id) { - var timing; - while (!(timing = node.__transition) || !(timing = timing[id])) { - if (!(node = node.parentNode)) { - return defaultTiming.time = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_timer__["c" /* now */])(), defaultTiming; - } - } - return timing; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(name) { - var id, - timing; - - if (name instanceof __WEBPACK_IMPORTED_MODULE_0__transition_index__["b" /* Transition */]) { - id = name._id, name = name._name; - } else { - id = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__transition_index__["c" /* newId */])(), (timing = defaultTiming).time = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_timer__["c" /* now */])(), name = name == null ? null : name + ""; - } - - for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__transition_schedule__["h" /* default */])(node, name, id, i, group, timing || inherit(node, id)); - } - } - } - - return new __WEBPACK_IMPORTED_MODULE_0__transition_index__["b" /* Transition */](groups, this._parents, name, id); -}); - - -/***/ }), -/* 431 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_interpolate__ = __webpack_require__(4); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_selection__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__tween__ = __webpack_require__(46); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__interpolate__ = __webpack_require__(161); - - - - - -function attrRemove(name) { - return function() { - this.removeAttribute(name); - }; -} - -function attrRemoveNS(fullname) { - return function() { - this.removeAttributeNS(fullname.space, fullname.local); - }; -} - -function attrConstant(name, interpolate, value1) { - var value00, - interpolate0; - return function() { - var value0 = this.getAttribute(name); - return value0 === value1 ? null - : value0 === value00 ? interpolate0 - : interpolate0 = interpolate(value00 = value0, value1); - }; -} - -function attrConstantNS(fullname, interpolate, value1) { - var value00, - interpolate0; - return function() { - var value0 = this.getAttributeNS(fullname.space, fullname.local); - return value0 === value1 ? null - : value0 === value00 ? interpolate0 - : interpolate0 = interpolate(value00 = value0, value1); - }; -} - -function attrFunction(name, interpolate, value) { - var value00, - value10, - interpolate0; - return function() { - var value0, value1 = value(this); - if (value1 == null) return void this.removeAttribute(name); - value0 = this.getAttribute(name); - return value0 === value1 ? null - : value0 === value00 && value1 === value10 ? interpolate0 - : interpolate0 = interpolate(value00 = value0, value10 = value1); - }; -} - -function attrFunctionNS(fullname, interpolate, value) { - var value00, - value10, - interpolate0; - return function() { - var value0, value1 = value(this); - if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local); - value0 = this.getAttributeNS(fullname.space, fullname.local); - return value0 === value1 ? null - : value0 === value00 && value1 === value10 ? interpolate0 - : interpolate0 = interpolate(value00 = value0, value10 = value1); - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(name, value) { - var fullname = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_selection__["d" /* namespace */])(name), i = fullname === "transform" ? __WEBPACK_IMPORTED_MODULE_0_d3_interpolate__["e" /* interpolateTransformSvg */] : __WEBPACK_IMPORTED_MODULE_3__interpolate__["a" /* default */]; - return this.attrTween(name, typeof value === "function" - ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__tween__["b" /* tweenValue */])(this, "attr." + name, value)) - : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname) - : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value + "")); -}); - - -/***/ }), -/* 432 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); - - -function attrTweenNS(fullname, value) { - function tween() { - var node = this, i = value.apply(node, arguments); - return i && function(t) { - node.setAttributeNS(fullname.space, fullname.local, i(t)); - }; - } - tween._value = value; - return tween; -} - -function attrTween(name, value) { - function tween() { - var node = this, i = value.apply(node, arguments); - return i && function(t) { - node.setAttribute(name, i(t)); - }; - } - tween._value = value; - return tween; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(name, value) { - var key = "attr." + name; - if (arguments.length < 2) return (key = this.tween(key)) && key._value; - if (value == null) return this.tween(key, null); - if (typeof value !== "function") throw new Error; - var fullname = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_selection__["d" /* namespace */])(name); - return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value)); -}); - - -/***/ }), -/* 433 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__schedule__ = __webpack_require__(6); - - -function delayFunction(id, value) { - return function() { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__schedule__["g" /* init */])(this, id).delay = +value.apply(this, arguments); - }; -} - -function delayConstant(id, value) { - return value = +value, function() { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__schedule__["g" /* init */])(this, id).delay = value; - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(value) { - var id = this._id; - - return arguments.length - ? this.each((typeof value === "function" - ? delayFunction - : delayConstant)(id, value)) - : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__schedule__["f" /* get */])(this.node(), id).delay; -}); - - -/***/ }), -/* 434 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__schedule__ = __webpack_require__(6); - - -function durationFunction(id, value) { - return function() { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__schedule__["e" /* set */])(this, id).duration = +value.apply(this, arguments); - }; -} - -function durationConstant(id, value) { - return value = +value, function() { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__schedule__["e" /* set */])(this, id).duration = value; - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(value) { - var id = this._id; - - return arguments.length - ? this.each((typeof value === "function" - ? durationFunction - : durationConstant)(id, value)) - : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__schedule__["f" /* get */])(this.node(), id).duration; -}); - - -/***/ }), -/* 435 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__schedule__ = __webpack_require__(6); - - -function easeConstant(id, value) { - if (typeof value !== "function") throw new Error; - return function() { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__schedule__["e" /* set */])(this, id).ease = value; - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(value) { - var id = this._id; - - return arguments.length - ? this.each(easeConstant(id, value)) - : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__schedule__["f" /* get */])(this.node(), id).ease; -}); - - -/***/ }), -/* 436 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__index__ = __webpack_require__(11); - - - -/* harmony default export */ __webpack_exports__["a"] = (function(match) { - if (typeof match !== "function") match = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_selection__["e" /* matcher */])(match); - - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { - if ((node = group[i]) && match.call(node, node.__data__, i, group)) { - subgroup.push(node); - } - } - } - - return new __WEBPACK_IMPORTED_MODULE_1__index__["b" /* Transition */](subgroups, this._parents, this._name, this._id); -}); - - -/***/ }), -/* 437 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__index__ = __webpack_require__(11); - - -/* harmony default export */ __webpack_exports__["a"] = (function(transition) { - if (transition._id !== this._id) throw new Error; - - for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { - for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { - if (node = group0[i] || group1[i]) { - merge[i] = node; - } - } - } - - for (; j < m0; ++j) { - merges[j] = groups0[j]; - } - - return new __WEBPACK_IMPORTED_MODULE_0__index__["b" /* Transition */](merges, this._parents, this._name, this._id); -}); - - -/***/ }), -/* 438 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__schedule__ = __webpack_require__(6); - - -function start(name) { - return (name + "").trim().split(/^|\s+/).every(function(t) { - var i = t.indexOf("."); - if (i >= 0) t = t.slice(0, i); - return !t || t === "start"; - }); -} - -function onFunction(id, name, listener) { - var on0, on1, sit = start(name) ? __WEBPACK_IMPORTED_MODULE_0__schedule__["g" /* init */] : __WEBPACK_IMPORTED_MODULE_0__schedule__["e" /* set */]; - return function() { - var schedule = sit(this, id), - on = schedule.on; - - // If this node shared a dispatch with the previous node, - // just assign the updated shared dispatch and we’re done! - // Otherwise, copy-on-write. - if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener); - - schedule.on = on1; - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(name, listener) { - var id = this._id; - - return arguments.length < 2 - ? __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__schedule__["f" /* get */])(this.node(), id).on.on(name) - : this.each(onFunction(id, name, listener)); -}); - - -/***/ }), -/* 439 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function removeFunction(id) { - return function() { - var parent = this.parentNode; - for (var i in this.__transition) if (+i !== id) return; - if (parent) parent.removeChild(this); - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return this.on("end.remove", removeFunction(this._id)); -}); - - -/***/ }), -/* 440 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__index__ = __webpack_require__(11); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__schedule__ = __webpack_require__(6); - - - - -/* harmony default export */ __webpack_exports__["a"] = (function(select) { - var name = this._name, - id = this._id; - - if (typeof select !== "function") select = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_selection__["g" /* selector */])(select); - - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { - if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { - if ("__data__" in node) subnode.__data__ = node.__data__; - subgroup[i] = subnode; - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__schedule__["h" /* default */])(subgroup[i], name, id, i, subgroup, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__schedule__["f" /* get */])(node, id)); - } - } - } - - return new __WEBPACK_IMPORTED_MODULE_1__index__["b" /* Transition */](subgroups, this._parents, name, id); -}); - - -/***/ }), -/* 441 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__index__ = __webpack_require__(11); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__schedule__ = __webpack_require__(6); - - - - -/* harmony default export */ __webpack_exports__["a"] = (function(select) { - var name = this._name, - id = this._id; - - if (typeof select !== "function") select = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_selection__["f" /* selectorAll */])(select); - - for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - for (var children = select.call(node, node.__data__, i, group), child, inherit = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__schedule__["f" /* get */])(node, id), k = 0, l = children.length; k < l; ++k) { - if (child = children[k]) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__schedule__["h" /* default */])(child, name, id, k, children, inherit); - } - } - subgroups.push(children); - parents.push(node); - } - } - } - - return new __WEBPACK_IMPORTED_MODULE_1__index__["b" /* Transition */](subgroups, parents, name, id); -}); - - -/***/ }), -/* 442 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); - - -var Selection = __WEBPACK_IMPORTED_MODULE_0_d3_selection__["a" /* selection */].prototype.constructor; - -/* harmony default export */ __webpack_exports__["a"] = (function() { - return new Selection(this._groups, this._parents); -}); - - -/***/ }), -/* 443 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_interpolate__ = __webpack_require__(4); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_selection__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__tween__ = __webpack_require__(46); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__interpolate__ = __webpack_require__(161); - - - - - -function styleRemove(name, interpolate) { - var value00, - value10, - interpolate0; - return function() { - var value0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_selection__["c" /* style */])(this, name), - value1 = (this.style.removeProperty(name), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_selection__["c" /* style */])(this, name)); - return value0 === value1 ? null - : value0 === value00 && value1 === value10 ? interpolate0 - : interpolate0 = interpolate(value00 = value0, value10 = value1); - }; -} - -function styleRemoveEnd(name) { - return function() { - this.style.removeProperty(name); - }; -} - -function styleConstant(name, interpolate, value1) { - var value00, - interpolate0; - return function() { - var value0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_selection__["c" /* style */])(this, name); - return value0 === value1 ? null - : value0 === value00 ? interpolate0 - : interpolate0 = interpolate(value00 = value0, value1); - }; -} - -function styleFunction(name, interpolate, value) { - var value00, - value10, - interpolate0; - return function() { - var value0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_selection__["c" /* style */])(this, name), - value1 = value(this); - if (value1 == null) value1 = (this.style.removeProperty(name), __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_selection__["c" /* style */])(this, name)); - return value0 === value1 ? null - : value0 === value00 && value1 === value10 ? interpolate0 - : interpolate0 = interpolate(value00 = value0, value10 = value1); - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(name, value, priority) { - var i = (name += "") === "transform" ? __WEBPACK_IMPORTED_MODULE_0_d3_interpolate__["a" /* interpolateTransformCss */] : __WEBPACK_IMPORTED_MODULE_3__interpolate__["a" /* default */]; - return value == null ? this - .styleTween(name, styleRemove(name, i)) - .on("end.style." + name, styleRemoveEnd(name)) - : this.styleTween(name, typeof value === "function" - ? styleFunction(name, i, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__tween__["b" /* tweenValue */])(this, "style." + name, value)) - : styleConstant(name, i, value + ""), priority); -}); - - -/***/ }), -/* 444 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -function styleTween(name, value, priority) { - function tween() { - var node = this, i = value.apply(node, arguments); - return i && function(t) { - node.style.setProperty(name, i(t), priority); - }; - } - tween._value = value; - return tween; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(name, value, priority) { - var key = "style." + (name += ""); - if (arguments.length < 2) return (key = this.tween(key)) && key._value; - if (value == null) return this.tween(key, null); - if (typeof value !== "function") throw new Error; - return this.tween(key, styleTween(name, value, priority == null ? "" : priority)); -}); - - -/***/ }), -/* 445 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__tween__ = __webpack_require__(46); - - -function textConstant(value) { - return function() { - this.textContent = value; - }; -} - -function textFunction(value) { - return function() { - var value1 = value(this); - this.textContent = value1 == null ? "" : value1; - }; -} - -/* harmony default export */ __webpack_exports__["a"] = (function(value) { - return this.tween("text", typeof value === "function" - ? textFunction(__webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__tween__["b" /* tweenValue */])(this, "text", value)) - : textConstant(value == null ? "" : value + "")); -}); - - -/***/ }), -/* 446 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__index__ = __webpack_require__(11); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__schedule__ = __webpack_require__(6); - - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var name = this._name, - id0 = this._id, - id1 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__index__["c" /* newId */])(); - - for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - var inherit = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__schedule__["f" /* get */])(node, id0); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__schedule__["h" /* default */])(node, name, id1, i, group, { - time: inherit.time + inherit.delay + inherit.duration, - delay: 0, - duration: inherit.duration, - ease: inherit.ease - }); - } - } - } - - return new __WEBPACK_IMPORTED_MODULE_0__index__["b" /* Transition */](groups, this._parents, name, id1); -}); - - -/***/ }), -/* 447 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_voronoi__ = __webpack_require__(451); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_voronoi__["a"]; }); - - - -/***/ }), -/* 448 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = removeBeach; -/* harmony export (immutable) */ __webpack_exports__["a"] = addBeach; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__RedBlackTree__ = __webpack_require__(86); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__Cell__ = __webpack_require__(162); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Circle__ = __webpack_require__(163); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__Edge__ = __webpack_require__(85); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__Diagram__ = __webpack_require__(32); - - - - - - -var beachPool = []; - -function Beach() { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__RedBlackTree__["b" /* RedBlackNode */])(this); - this.edge = - this.site = - this.circle = null; -} - -function createBeach(site) { - var beach = beachPool.pop() || new Beach; - beach.site = site; - return beach; -} - -function detachBeach(beach) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__Circle__["b" /* detachCircle */])(beach); - __WEBPACK_IMPORTED_MODULE_4__Diagram__["e" /* beaches */].remove(beach); - beachPool.push(beach); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__RedBlackTree__["b" /* RedBlackNode */])(beach); -} - -function removeBeach(beach) { - var circle = beach.circle, - x = circle.x, - y = circle.cy, - vertex = [x, y], - previous = beach.P, - next = beach.N, - disappearing = [beach]; - - detachBeach(beach); - - var lArc = previous; - while (lArc.circle - && Math.abs(x - lArc.circle.x) < __WEBPACK_IMPORTED_MODULE_4__Diagram__["b" /* epsilon */] - && Math.abs(y - lArc.circle.cy) < __WEBPACK_IMPORTED_MODULE_4__Diagram__["b" /* epsilon */]) { - previous = lArc.P; - disappearing.unshift(lArc); - detachBeach(lArc); - lArc = previous; - } - - disappearing.unshift(lArc); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__Circle__["b" /* detachCircle */])(lArc); - - var rArc = next; - while (rArc.circle - && Math.abs(x - rArc.circle.x) < __WEBPACK_IMPORTED_MODULE_4__Diagram__["b" /* epsilon */] - && Math.abs(y - rArc.circle.cy) < __WEBPACK_IMPORTED_MODULE_4__Diagram__["b" /* epsilon */]) { - next = rArc.N; - disappearing.push(rArc); - detachBeach(rArc); - rArc = next; - } - - disappearing.push(rArc); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__Circle__["b" /* detachCircle */])(rArc); - - var nArcs = disappearing.length, - iArc; - for (iArc = 1; iArc < nArcs; ++iArc) { - rArc = disappearing[iArc]; - lArc = disappearing[iArc - 1]; - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__Edge__["c" /* setEdgeEnd */])(rArc.edge, lArc.site, rArc.site, vertex); - } - - lArc = disappearing[0]; - rArc = disappearing[nArcs - 1]; - rArc.edge = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__Edge__["d" /* createEdge */])(lArc.site, rArc.site, null, vertex); - - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__Circle__["c" /* attachCircle */])(lArc); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__Circle__["c" /* attachCircle */])(rArc); -} - -function addBeach(site) { - var x = site[0], - directrix = site[1], - lArc, - rArc, - dxl, - dxr, - node = __WEBPACK_IMPORTED_MODULE_4__Diagram__["e" /* beaches */]._; - - while (node) { - dxl = leftBreakPoint(node, directrix) - x; - if (dxl > __WEBPACK_IMPORTED_MODULE_4__Diagram__["b" /* epsilon */]) node = node.L; else { - dxr = x - rightBreakPoint(node, directrix); - if (dxr > __WEBPACK_IMPORTED_MODULE_4__Diagram__["b" /* epsilon */]) { - if (!node.R) { - lArc = node; - break; - } - node = node.R; - } else { - if (dxl > -__WEBPACK_IMPORTED_MODULE_4__Diagram__["b" /* epsilon */]) { - lArc = node.P; - rArc = node; - } else if (dxr > -__WEBPACK_IMPORTED_MODULE_4__Diagram__["b" /* epsilon */]) { - lArc = node; - rArc = node.N; - } else { - lArc = rArc = node; - } - break; - } - } - } - - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__Cell__["d" /* createCell */])(site); - var newArc = createBeach(site); - __WEBPACK_IMPORTED_MODULE_4__Diagram__["e" /* beaches */].insert(lArc, newArc); - - if (!lArc && !rArc) return; - - if (lArc === rArc) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__Circle__["b" /* detachCircle */])(lArc); - rArc = createBeach(lArc.site); - __WEBPACK_IMPORTED_MODULE_4__Diagram__["e" /* beaches */].insert(newArc, rArc); - newArc.edge = rArc.edge = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__Edge__["d" /* createEdge */])(lArc.site, newArc.site); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__Circle__["c" /* attachCircle */])(lArc); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__Circle__["c" /* attachCircle */])(rArc); - return; - } - - if (!rArc) { // && lArc - newArc.edge = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__Edge__["d" /* createEdge */])(lArc.site, newArc.site); - return; - } - - // else lArc !== rArc - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__Circle__["b" /* detachCircle */])(lArc); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__Circle__["b" /* detachCircle */])(rArc); - - var lSite = lArc.site, - ax = lSite[0], - ay = lSite[1], - bx = site[0] - ax, - by = site[1] - ay, - rSite = rArc.site, - cx = rSite[0] - ax, - cy = rSite[1] - ay, - d = 2 * (bx * cy - by * cx), - hb = bx * bx + by * by, - hc = cx * cx + cy * cy, - vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay]; - - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__Edge__["c" /* setEdgeEnd */])(rArc.edge, lSite, rSite, vertex); - newArc.edge = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__Edge__["d" /* createEdge */])(lSite, site, null, vertex); - rArc.edge = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3__Edge__["d" /* createEdge */])(site, rSite, null, vertex); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__Circle__["c" /* attachCircle */])(lArc); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__Circle__["c" /* attachCircle */])(rArc); -} - -function leftBreakPoint(arc, directrix) { - var site = arc.site, - rfocx = site[0], - rfocy = site[1], - pby2 = rfocy - directrix; - - if (!pby2) return rfocx; - - var lArc = arc.P; - if (!lArc) return -Infinity; - - site = lArc.site; - var lfocx = site[0], - lfocy = site[1], - plby2 = lfocy - directrix; - - if (!plby2) return lfocx; - - var hl = lfocx - rfocx, - aby2 = 1 / pby2 - 1 / plby2, - b = hl / plby2; - - if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; - - return (rfocx + lfocx) / 2; -} - -function rightBreakPoint(arc, directrix) { - var rArc = arc.N; - if (rArc) return leftBreakPoint(rArc, directrix); - var site = arc.site; - return site[1] === directrix ? site[0] : Infinity; -} - - -/***/ }), -/* 449 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return function() { - return x; - }; -}); - - -/***/ }), -/* 450 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = x; -/* harmony export (immutable) */ __webpack_exports__["b"] = y; -function x(d) { - return d[0]; -} - -function y(d) { - return d[1]; -} - - -/***/ }), -/* 451 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__constant__ = __webpack_require__(449); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__point__ = __webpack_require__(450); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__Diagram__ = __webpack_require__(32); - - - - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var x = __WEBPACK_IMPORTED_MODULE_1__point__["a" /* x */], - y = __WEBPACK_IMPORTED_MODULE_1__point__["b" /* y */], - extent = null; - - function voronoi(data) { - return new __WEBPACK_IMPORTED_MODULE_2__Diagram__["a" /* default */](data.map(function(d, i) { - var s = [Math.round(x(d, i, data) / __WEBPACK_IMPORTED_MODULE_2__Diagram__["b" /* epsilon */]) * __WEBPACK_IMPORTED_MODULE_2__Diagram__["b" /* epsilon */], Math.round(y(d, i, data) / __WEBPACK_IMPORTED_MODULE_2__Diagram__["b" /* epsilon */]) * __WEBPACK_IMPORTED_MODULE_2__Diagram__["b" /* epsilon */]]; - s.index = i; - s.data = d; - return s; - }), extent); - } - - voronoi.polygons = function(data) { - return voronoi(data).polygons(); - }; - - voronoi.links = function(data) { - return voronoi(data).links(); - }; - - voronoi.triangles = function(data) { - return voronoi(data).triangles(); - }; - - voronoi.x = function(_) { - return arguments.length ? (x = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(+_), voronoi) : x; - }; - - voronoi.y = function(_) { - return arguments.length ? (y = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__constant__["a" /* default */])(+_), voronoi) : y; - }; - - voronoi.extent = function(_) { - return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]]; - }; - - voronoi.size = function(_) { - return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]]; - }; - - return voronoi; -}); - - -/***/ }), -/* 452 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__src_zoom__ = __webpack_require__(456); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return __WEBPACK_IMPORTED_MODULE_0__src_zoom__["a"]; }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__src_transform__ = __webpack_require__(164); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return __WEBPACK_IMPORTED_MODULE_1__src_transform__["a"]; }); -/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return __WEBPACK_IMPORTED_MODULE_1__src_transform__["b"]; }); - - - - -/***/ }), -/* 453 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony default export */ __webpack_exports__["a"] = (function(x) { - return function() { - return x; - }; -}); - - -/***/ }), -/* 454 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["a"] = ZoomEvent; -function ZoomEvent(target, type, transform) { - this.target = target; - this.type = type; - this.transform = transform; -} - - -/***/ }), -/* 455 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony export (immutable) */ __webpack_exports__["b"] = nopropagation; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_selection__ = __webpack_require__(1); - - -function nopropagation() { - __WEBPACK_IMPORTED_MODULE_0_d3_selection__["p" /* event */].stopImmediatePropagation(); -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - __WEBPACK_IMPORTED_MODULE_0_d3_selection__["p" /* event */].preventDefault(); - __WEBPACK_IMPORTED_MODULE_0_d3_selection__["p" /* event */].stopImmediatePropagation(); -}); - - -/***/ }), -/* 456 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_d3_dispatch__ = __webpack_require__(12); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_d3_drag__ = __webpack_require__(51); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_d3_interpolate__ = __webpack_require__(4); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_d3_selection__ = __webpack_require__(1); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_d3_transition__ = __webpack_require__(45); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__constant__ = __webpack_require__(453); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__event__ = __webpack_require__(454); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__transform__ = __webpack_require__(164); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__noevent__ = __webpack_require__(455); - - - - - - - - - - -// Ignore right-click, since that should open the context menu. -function defaultFilter() { - return !__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].button; -} - -function defaultExtent() { - var e = this, w, h; - if (e instanceof SVGElement) { - e = e.ownerSVGElement || e; - w = e.width.baseVal.value; - h = e.height.baseVal.value; - } else { - w = e.clientWidth; - h = e.clientHeight; - } - return [[0, 0], [w, h]]; -} - -function defaultTransform() { - return this.__zoom || __WEBPACK_IMPORTED_MODULE_7__transform__["b" /* identity */]; -} - -/* harmony default export */ __webpack_exports__["a"] = (function() { - var filter = defaultFilter, - extent = defaultExtent, - k0 = 0, - k1 = Infinity, - x0 = -k1, - x1 = k1, - y0 = x0, - y1 = x1, - duration = 250, - interpolate = __WEBPACK_IMPORTED_MODULE_2_d3_interpolate__["m" /* interpolateZoom */], - gestures = [], - listeners = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0_d3_dispatch__["dispatch"])("start", "zoom", "end"), - touchstarting, - touchending, - touchDelay = 500, - wheelDelay = 150, - clickDistance2 = 0; - - function zoom(selection) { - selection - .on("wheel.zoom", wheeled) - .on("mousedown.zoom", mousedowned) - .on("dblclick.zoom", dblclicked) - .on("touchstart.zoom", touchstarted) - .on("touchmove.zoom", touchmoved) - .on("touchend.zoom touchcancel.zoom", touchended) - .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)") - .property("__zoom", defaultTransform); - } - - zoom.transform = function(collection, transform) { - var selection = collection.selection ? collection.selection() : collection; - selection.property("__zoom", defaultTransform); - if (collection !== selection) { - schedule(collection, transform); - } else { - selection.interrupt().each(function() { - gesture(this, arguments) - .start() - .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform) - .end(); - }); - } - }; - - zoom.scaleBy = function(selection, k) { - zoom.scaleTo(selection, function() { - var k0 = this.__zoom.k, - k1 = typeof k === "function" ? k.apply(this, arguments) : k; - return k0 * k1; - }); - }; - - zoom.scaleTo = function(selection, k) { - zoom.transform(selection, function() { - var e = extent.apply(this, arguments), - t0 = this.__zoom, - p0 = centroid(e), - p1 = t0.invert(p0), - k1 = typeof k === "function" ? k.apply(this, arguments) : k; - return constrain(translate(scale(t0, k1), p0, p1), e); - }); - }; - - zoom.translateBy = function(selection, x, y) { - zoom.transform(selection, function() { - return constrain(this.__zoom.translate( - typeof x === "function" ? x.apply(this, arguments) : x, - typeof y === "function" ? y.apply(this, arguments) : y - ), extent.apply(this, arguments)); - }); - }; - - function scale(transform, k) { - k = Math.max(k0, Math.min(k1, k)); - return k === transform.k ? transform : new __WEBPACK_IMPORTED_MODULE_7__transform__["c" /* Transform */](k, transform.x, transform.y); - } - - function translate(transform, p0, p1) { - var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k; - return x === transform.x && y === transform.y ? transform : new __WEBPACK_IMPORTED_MODULE_7__transform__["c" /* Transform */](transform.k, x, y); - } - - function constrain(transform, extent) { - var dx0 = transform.invertX(extent[0][0]) - x0, - dx1 = transform.invertX(extent[1][0]) - x1, - dy0 = transform.invertY(extent[0][1]) - y0, - dy1 = transform.invertY(extent[1][1]) - y1; - return transform.translate( - dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1), - dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1) - ); - } - - function centroid(extent) { - return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2]; - } - - function schedule(transition, transform, center) { - transition - .on("start.zoom", function() { gesture(this, arguments).start(); }) - .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); }) - .tween("zoom", function() { - var that = this, - args = arguments, - g = gesture(that, args), - e = extent.apply(that, args), - p = center || centroid(e), - w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]), - a = that.__zoom, - b = typeof transform === "function" ? transform.apply(that, args) : transform, - i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k)); - return function(t) { - if (t === 1) t = b; // Avoid rounding error on end. - else { var l = i(t), k = w / l[2]; t = new __WEBPACK_IMPORTED_MODULE_7__transform__["c" /* Transform */](k, p[0] - l[0] * k, p[1] - l[1] * k); } - g.zoom(null, t); - }; - }); - } - - function gesture(that, args) { - for (var i = 0, n = gestures.length, g; i < n; ++i) { - if ((g = gestures[i]).that === that) { - return g; - } - } - return new Gesture(that, args); - } - - function Gesture(that, args) { - this.that = that; - this.args = args; - this.index = -1; - this.active = 0; - this.extent = extent.apply(that, args); - } - - Gesture.prototype = { - start: function() { - if (++this.active === 1) { - this.index = gestures.push(this) - 1; - this.emit("start"); - } - return this; - }, - zoom: function(key, transform) { - if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]); - if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]); - if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]); - this.that.__zoom = transform; - this.emit("zoom"); - return this; - }, - end: function() { - if (--this.active === 0) { - gestures.splice(this.index, 1); - this.index = -1; - this.emit("end"); - } - return this; - }, - emit: function(type) { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["q" /* customEvent */])(new __WEBPACK_IMPORTED_MODULE_6__event__["a" /* default */](zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]); - } - }; - - function wheeled() { - if (!filter.apply(this, arguments)) return; - var g = gesture(this, arguments), - t = this.__zoom, - k = Math.max(k0, Math.min(k1, t.k * Math.pow(2, -__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].deltaY * (__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].deltaMode ? 120 : 1) / 500))), - p = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["j" /* mouse */])(this); - - // If the mouse is in the same location as before, reuse it. - // If there were recent wheel events, reset the wheel idle timeout. - if (g.wheel) { - if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) { - g.mouse[1] = t.invert(g.mouse[0] = p); - } - clearTimeout(g.wheel); - } - - // If this wheel event won’t trigger a transform change, ignore it. - else if (t.k === k) return; - - // Otherwise, capture the mouse point and location at the start. - else { - g.mouse = [p, t.invert(p)]; - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4_d3_transition__["c" /* interrupt */])(this); - g.start(); - } - - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__noevent__["a" /* default */])(); - g.wheel = setTimeout(wheelidled, wheelDelay); - g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent)); - - function wheelidled() { - g.wheel = null; - g.end(); - } - } - - function mousedowned() { - if (touchending || !filter.apply(this, arguments)) return; - var g = gesture(this, arguments), - v = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["b" /* select */])(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true), - p = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["j" /* mouse */])(this), - x0 = __WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].clientX, - y0 = __WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].clientY; - - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_drag__["b" /* dragDisable */])(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].view); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__noevent__["b" /* nopropagation */])(); - g.mouse = [p, this.__zoom.invert(p)]; - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4_d3_transition__["c" /* interrupt */])(this); - g.start(); - - function mousemoved() { - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__noevent__["a" /* default */])(); - if (!g.moved) { - var dx = __WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].clientX - x0, dy = __WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].clientY - y0; - g.moved = dx * dx + dy * dy > clickDistance2; - } - g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["j" /* mouse */])(g.that), g.mouse[1]), g.extent)); - } - - function mouseupped() { - v.on("mousemove.zoom mouseup.zoom", null); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_d3_drag__["c" /* dragEnable */])(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].view, g.moved); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__noevent__["a" /* default */])(); - g.end(); - } - } - - function dblclicked() { - if (!filter.apply(this, arguments)) return; - var t0 = this.__zoom, - p0 = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["j" /* mouse */])(this), - p1 = t0.invert(p0), - k1 = t0.k * (__WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].shiftKey ? 0.5 : 2), - t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments)); - - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__noevent__["a" /* default */])(); - if (duration > 0) __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["b" /* select */])(this).transition().duration(duration).call(schedule, t1, p0); - else __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["b" /* select */])(this).call(zoom.transform, t1); - } - - function touchstarted() { - if (!filter.apply(this, arguments)) return; - var g = gesture(this, arguments), - touches = __WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].changedTouches, - started, - n = touches.length, i, t, p; - - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__noevent__["b" /* nopropagation */])(); - for (i = 0; i < n; ++i) { - t = touches[i], p = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["m" /* touch */])(this, touches, t.identifier); - p = [p, this.__zoom.invert(p), t.identifier]; - if (!g.touch0) g.touch0 = p, started = true; - else if (!g.touch1) g.touch1 = p; - } - - // If this is a dbltap, reroute to the (optional) dblclick.zoom handler. - if (touchstarting) { - touchstarting = clearTimeout(touchstarting); - if (!g.touch1) { - g.end(); - p = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["b" /* select */])(this).on("dblclick.zoom"); - if (p) p.apply(this, arguments); - return; - } - } - - if (started) { - touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay); - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4_d3_transition__["c" /* interrupt */])(this); - g.start(); - } - } - - function touchmoved() { - var g = gesture(this, arguments), - touches = __WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].changedTouches, - n = touches.length, i, t, p, l; - - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__noevent__["a" /* default */])(); - if (touchstarting) touchstarting = clearTimeout(touchstarting); - for (i = 0; i < n; ++i) { - t = touches[i], p = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_3_d3_selection__["m" /* touch */])(this, touches, t.identifier); - if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p; - else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p; - } - t = g.that.__zoom; - if (g.touch1) { - var p0 = g.touch0[0], l0 = g.touch0[1], - p1 = g.touch1[0], l1 = g.touch1[1], - dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp, - dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl; - t = scale(t, Math.sqrt(dp / dl)); - p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2]; - l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2]; - } - else if (g.touch0) p = g.touch0[0], l = g.touch0[1]; - else return; - g.zoom("touch", constrain(translate(t, p, l), g.extent)); - } - - function touchended() { - var g = gesture(this, arguments), - touches = __WEBPACK_IMPORTED_MODULE_3_d3_selection__["p" /* event */].changedTouches, - n = touches.length, i, t; - - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_8__noevent__["b" /* nopropagation */])(); - if (touchending) clearTimeout(touchending); - touchending = setTimeout(function() { touchending = null; }, touchDelay); - for (i = 0; i < n; ++i) { - t = touches[i]; - if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0; - else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1; - } - if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1; - if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]); - else g.end(); - } - - zoom.filter = function(_) { - return arguments.length ? (filter = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__constant__["a" /* default */])(!!_), zoom) : filter; - }; - - zoom.extent = function(_) { - return arguments.length ? (extent = typeof _ === "function" ? _ : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_5__constant__["a" /* default */])([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent; - }; - - zoom.scaleExtent = function(_) { - return arguments.length ? (k0 = +_[0], k1 = +_[1], zoom) : [k0, k1]; - }; - - zoom.translateExtent = function(_) { - return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], zoom) : [[x0, y0], [x1, y1]]; - }; - - zoom.duration = function(_) { - return arguments.length ? (duration = +_, zoom) : duration; - }; - - zoom.interpolate = function(_) { - return arguments.length ? (interpolate = _, zoom) : interpolate; - }; - - zoom.on = function() { - var value = listeners.on.apply(listeners, arguments); - return value === listeners ? zoom : value; - }; - - zoom.clickDistance = function(_) { - return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2); - }; - - return zoom; -}); - - -/***/ }), -/* 457 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* unused harmony export name */ -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return version; }); -/* unused harmony export description */ -/* unused harmony export keywords */ -/* unused harmony export homepage */ -/* unused harmony export license */ -/* unused harmony export author */ -/* unused harmony export main */ -/* unused harmony export browser */ -/* unused harmony export module */ -/* unused harmony export repository */ -/* unused harmony export scripts */ -/* unused harmony export devDependencies */ -/* unused harmony export dependencies */ -var name = "d3"; -var version = "4.9.1"; -var description = "Data-Driven Documents"; -var keywords = ["dom","visualization","svg","animation","canvas"]; -var homepage = "https://d3js.org"; -var license = "BSD-3-Clause"; -var author = {"name":"Mike Bostock","url":"https://bost.ocks.org/mike"}; -var main = "build/d3.node.js"; -var browser = "build/d3.js"; -var module = "index"; -var repository = {"type":"git","url":"https://github.com/d3/d3.git"}; -var scripts = {"pretest":"rimraf build && mkdir build && json2module package.json > build/package.js && node rollup.node","test":"tape 'test/**/*-test.js'","prepublish":"npm run test && rollup -c --banner \"$(preamble)\" -f umd -n d3 -o build/d3.js -- index.js && uglifyjs --preamble \"$(preamble)\" build/d3.js -c negate_iife=false -m -o build/d3.min.js","postpublish":"git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3/build/d3.js d3.v4.js && cp ../d3/build/d3.min.js d3.v4.min.js && git add d3.v4.js d3.v4.min.js && git commit -m \"d3 ${npm_package_version}\" && git push && cd - && cd ../d3-bower && git pull && cp ../d3/LICENSE ../d3/README.md ../d3/build/d3.js ../d3/build/d3.min.js . && git add -- LICENSE README.md d3.js d3.min.js && git commit -m \"${npm_package_version}\" && git tag -am \"${npm_package_version}\" v${npm_package_version} && git push && git push --tags && cd - && zip -j build/d3.zip -- LICENSE README.md API.md CHANGES.md build/d3.js build/d3.min.js"}; -var devDependencies = {"json2module":"0.0","package-preamble":"0.1","rimraf":"2","rollup":"^0.41.4","rollup-plugin-ascii":"0.0","rollup-plugin-node-resolve":"3","tape":"4","uglify-js":"^2.8.11"}; -var dependencies = {"d3-array":"1.2.0","d3-axis":"1.0.7","d3-brush":"1.0.4","d3-chord":"1.0.4","d3-collection":"1.0.3","d3-color":"1.0.3","d3-dispatch":"1.0.3","d3-drag":"1.1.0","d3-dsv":"1.0.5","d3-ease":"1.0.3","d3-force":"1.0.6","d3-format":"1.2.0","d3-geo":"1.6.4","d3-hierarchy":"1.1.4","d3-interpolate":"1.1.5","d3-path":"1.0.5","d3-polygon":"1.0.3","d3-quadtree":"1.0.3","d3-queue":"3.0.7","d3-random":"1.1.0","d3-request":"1.0.5","d3-scale":"1.0.6","d3-selection":"1.1.0","d3-shape":"1.1.1","d3-time":"1.0.6","d3-time-format":"2.0.5","d3-timer":"1.0.5","d3-transition":"1.1.0","d3-voronoi":"1.1.2","d3-zoom":"1.2.0"}; - - -/***/ }) -/******/ ]); - -/***/ }) -/******/ ]); \ No newline at end of file diff --git a/dist/team-site.html b/dist/team-site.html index d290e00e..572850d2 100644 --- a/dist/team-site.html +++ b/dist/team-site.html @@ -1 +1 @@ -Team Site | NYC Opportunity Patterns

Team Site

This page imports the global team site stylesheet found on the nyc.gov. The stylesheet uses a partial import of Bootstrap 2.3.

Typography

Base Font Styles

font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif;
font-size: 16px;
line-height: 20px;

Headings

Heading 1

Heading 2

Heading 3

Heading 4

Heading 5
Heading 6

Paragraphs

Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper nulla non metus auctor fringilla. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec ullamcorper nulla non metus auctor fringilla.

Maecenas sed diam eget risus varius blandit sit amet non magna. Donec id elit non mi porta gravida at eget metus. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.

Lead

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.

Buttons

Default Button

Forms

Default Styles

Contact Us

*Indicates required fields

Grid

Live Grid Example

1
1
1
1
1
1
1
1
1
1
1
1
2
3
3
4
6
6
12
\ No newline at end of file +Team Site | NYC Opportunity Patterns

Team Site

This page imports the global team site stylesheet found on the nyc.gov. The stylesheet uses a partial import of Bootstrap 2.3.

Typography

Base Font Styles

font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif;
font-size: 16px;
line-height: 20px;

Headings

Heading 1

Heading 2

Heading 3

Heading 4

Heading 5
Heading 6

Paragraphs

Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper nulla non metus auctor fringilla. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec ullamcorper nulla non metus auctor fringilla.

Maecenas sed diam eget risus varius blandit sit amet non magna. Donec id elit non mi porta gravida at eget metus. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.

Lead

Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.

Buttons

Default Button

Forms

Default Styles

Contact Us

*Indicates required fields

Grid

Live Grid Example

1
1
1
1
1
1
1
1
1
1
1
1
2
3
3
4
6
6
12
\ No newline at end of file diff --git a/package-lock.json b/package-lock.json index c8d961fa..02aae76b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,6 +30,12 @@ "integrity": "sha1-Md5kX2mUbVi+nNFH/cktzdu1bVc=", "dev": true }, + "after": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.1.tgz", + "integrity": "sha1-q11PuIP1loFtNRX495HAr0ht1ic=", + "dev": true + }, "ajv": { "version": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", @@ -133,6 +139,12 @@ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "dev": true + }, "arrify": { "version": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", @@ -168,6 +180,12 @@ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, + "async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "dev": true + }, "async-foreach": { "version": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", @@ -1072,17 +1090,41 @@ "integrity": "sha1-EyfXCZULVY8gTlNSWH/QKQ+Njkg=", "dev": true }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, "balanced-match": { "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", "dev": true }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64id": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz", + "integrity": "sha1-As4P3u4M709ACA4ec+g08LG/zj8=", + "dev": true + }, "base64url": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=", "dev": true }, + "batch": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", + "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ=", + "dev": true + }, "bcrypt-pbkdf": { "version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", @@ -1092,6 +1134,15 @@ "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" } }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, "binary-extensions": { "version": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", @@ -1104,6 +1155,12 @@ "dev": true, "optional": true }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, "block-stream": { "version": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", @@ -1156,6 +1213,205 @@ } } }, + "browser-sync": { + "version": "2.18.13", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.18.13.tgz", + "integrity": "sha512-qhdrmgshVGwweogT/bdOKkZDxVxqiF4+9mibaDeAxvDBeoUtdgABk5x7YQ1KCcLRchAfv8AVtp9NuITl5CTNqg==", + "dev": true, + "requires": { + "browser-sync-client": "2.5.1", + "browser-sync-ui": "0.6.3", + "bs-recipes": "1.3.4", + "chokidar": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "connect": "3.5.0", + "dev-ip": "1.0.1", + "easy-extender": "2.3.2", + "eazy-logger": "3.0.2", + "emitter-steward": "1.0.0", + "fs-extra": "3.0.1", + "http-proxy": "1.15.2", + "immutable": "3.8.1", + "localtunnel": "1.8.3", + "micromatch": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "opn": "4.0.2", + "portscanner": "2.1.1", + "qs": "6.2.1", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "serve-index": "1.8.0", + "serve-static": "1.12.2", + "server-destroy": "1.0.1", + "socket.io": "1.6.0", + "socket.io-client": "1.6.0", + "ua-parser-js": "0.7.12", + "yargs": "6.4.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "debug": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.4.tgz", + "integrity": "sha1-dYaps8OXQcAoKuM0RcTorHRzT+A=", + "dev": true, + "requires": { + "ms": "0.7.3" + }, + "dependencies": { + "ms": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", + "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=", + "dev": true + } + } + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "jsonfile": "3.0.1", + "universalify": "0.1.1" + } + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" + } + }, + "ms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-1.0.0.tgz", + "integrity": "sha1-Wa3NIu3FQ/e1OBhi0xOHsfS8lHM=", + "dev": true + }, + "qs": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz", + "integrity": "sha1-zgPF/wk1vB2daanxTL0Y5WjWdiU=", + "dev": true + }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "send": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.15.2.tgz", + "integrity": "sha1-+R+rRAO8+H5xb3DOtdsvV4vcF9Y=", + "dev": true, + "requires": { + "debug": "2.6.4", + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", + "destroy": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "encodeurl": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "etag": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", + "fresh": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", + "mime": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "ms": "1.0.0", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "range-parser": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz" + } + }, + "serve-static": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.2.tgz", + "integrity": "sha1-5UbicmCBuBtLzsjpCAjrzdMjr7o=", + "dev": true, + "requires": { + "encodeurl": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "send": "0.15.2" + } + }, + "window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "dev": true + }, + "yargs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", + "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "get-caller-file": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "os-locale": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "read-pkg-up": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "require-directory": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "require-main-filename": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "set-blocking": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "which-module": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "window-size": "0.2.0", + "y18n": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "yargs-parser": "4.2.1" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + } + } + } + }, + "browser-sync-client": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.5.1.tgz", + "integrity": "sha1-7BrWmknC4tS2RbGLHAbCmz2a+Os=", + "dev": true, + "requires": { + "etag": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", + "fresh": "0.3.0" + }, + "dependencies": { + "fresh": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", + "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=", + "dev": true + } + } + }, + "browser-sync-ui": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-0.6.3.tgz", + "integrity": "sha1-ZApTfBgGiTA9W+krxHa568RBwLw=", + "dev": true, + "requires": { + "async-each-series": "0.1.1", + "connect-history-api-fallback": "1.5.0", + "immutable": "3.8.1", + "server-destroy": "1.0.1", + "stream-throttle": "0.1.3", + "weinre": "2.0.0-pre-I0Z7U9OV" + } + }, "browserslist": { "version": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", @@ -1165,11 +1421,23 @@ "electron-to-chromium": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.13.tgz" } }, + "bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", + "dev": true + }, "builtin-modules": { "version": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, "camelcase": { "version": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", @@ -1344,7 +1612,6 @@ "commander": { "version": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, "requires": { "graceful-readlink": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" } @@ -1381,11 +1648,104 @@ } } }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, "concat-map": { "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "concurrently": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-3.5.1.tgz", + "integrity": "sha512-689HrwGw8Rbk1xtV9C4dY6TPJAvIYZbRbnKSAtfJ7tHqICFGoZ0PCWYjxfmerRyxBG0o3sbG3pe7N8vqPwIHuQ==", + "dev": true, + "requires": { + "chalk": "0.5.1", + "commander": "2.6.0", + "date-fns": "1.29.0", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.16.6.tgz", + "rx": "2.3.24", + "spawn-command": "0.0.2-1", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "tree-kill": "1.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", + "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", + "dev": true + }, + "ansi-styles": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", + "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", + "dev": true + }, + "chalk": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", + "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", + "dev": true, + "requires": { + "ansi-styles": "1.1.0", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "0.1.0", + "strip-ansi": "0.3.0", + "supports-color": "0.2.0" + }, + "dependencies": { + "supports-color": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", + "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", + "dev": true + } + } + }, + "commander": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", + "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=", + "dev": true + }, + "has-ansi": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", + "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", + "dev": true, + "requires": { + "ansi-regex": "0.2.1" + } + }, + "strip-ansi": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", + "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", + "dev": true, + "requires": { + "ansi-regex": "0.2.1" + } + } + } + }, "configstore": { "version": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz", "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=", @@ -1408,6 +1768,54 @@ } } }, + "connect": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.5.0.tgz", + "integrity": "sha1-s1dSWgtMH1BZnNmD4dnv7qlncZg=", + "dev": true, + "requires": { + "debug": "2.2.0", + "finalhandler": "0.5.0", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", + "utils-merge": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "finalhandler": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.5.0.tgz", + "integrity": "sha1-6VCKvs6bbbqHGmlCodeRG5GRGsc=", + "dev": true, + "requires": { + "debug": "2.2.0", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "unpipe": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "dev": true + }, "console-control-strings": { "version": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", @@ -1540,7 +1948,6 @@ "d3": { "version": "https://registry.npmjs.org/d3/-/d3-4.9.1.tgz", "integrity": "sha1-+GC+klImGjwU7qZLHSWQ0U9NuDg=", - "dev": true, "requires": { "d3-array": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.0.tgz", "d3-axis": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.7.tgz", @@ -1576,18 +1983,15 @@ }, "d3-array": { "version": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.0.tgz", - "integrity": "sha1-FH0mlyDhdMQFen9CvosPPyulMQg=", - "dev": true + "integrity": "sha1-FH0mlyDhdMQFen9CvosPPyulMQg=" }, "d3-axis": { "version": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.7.tgz", - "integrity": "sha1-BIQz0wcGH2LR0kjikwwB17ZzjNg=", - "dev": true + "integrity": "sha1-BIQz0wcGH2LR0kjikwwB17ZzjNg=" }, "d3-brush": { "version": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz", "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=", - "dev": true, "requires": { "d3-dispatch": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", "d3-drag": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.1.0.tgz", @@ -1599,7 +2003,6 @@ "d3-chord": { "version": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz", "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=", - "dev": true, "requires": { "d3-array": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.0.tgz", "d3-path": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz" @@ -1607,23 +2010,19 @@ }, "d3-collection": { "version": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.3.tgz", - "integrity": "sha1-AL3qlPvBYo1DWruuL03CFk433TQ=", - "dev": true + "integrity": "sha1-AL3qlPvBYo1DWruuL03CFk433TQ=" }, "d3-color": { "version": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz", - "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs=", - "dev": true + "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs=" }, "d3-dispatch": { "version": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", - "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg=", - "dev": true + "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg=" }, "d3-drag": { "version": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.1.0.tgz", "integrity": "sha1-Skm013pC6ePVoO87SSsUqqLlpzM=", - "dev": true, "requires": { "d3-dispatch": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", "d3-selection": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.1.0.tgz" @@ -1632,7 +2031,6 @@ "d3-dsv": { "version": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.5.tgz", "integrity": "sha1-QZ99tH9ih4n8P9tjbmeESdCCETY=", - "dev": true, "requires": { "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.17.tgz", @@ -1641,13 +2039,11 @@ }, "d3-ease": { "version": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.3.tgz", - "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4=", - "dev": true + "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4=" }, "d3-force": { "version": "https://registry.npmjs.org/d3-force/-/d3-force-1.0.6.tgz", "integrity": "sha1-6n4bdzDiZkzTFPWU1nGMV8wTK3k=", - "dev": true, "requires": { "d3-collection": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.3.tgz", "d3-dispatch": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", @@ -1657,59 +2053,49 @@ }, "d3-format": { "version": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.0.tgz", - "integrity": "sha1-a0gLqohohdRlHcJIqPSsnaFtsHo=", - "dev": true + "integrity": "sha1-a0gLqohohdRlHcJIqPSsnaFtsHo=" }, "d3-geo": { "version": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.6.4.tgz", "integrity": "sha1-8g4eRhyxhF9ai+Vatvh2VCp+MZk=", - "dev": true, "requires": { "d3-array": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.0.tgz" } }, "d3-hierarchy": { "version": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.4.tgz", - "integrity": "sha1-lsOULz8hz5l6EbTt8A3eKne0xtA=", - "dev": true + "integrity": "sha1-lsOULz8hz5l6EbTt8A3eKne0xtA=" }, "d3-interpolate": { "version": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.5.tgz", "integrity": "sha1-aeCZ/zkhRxblY8muw+qdHqS4p58=", - "dev": true, "requires": { "d3-color": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz" } }, "d3-path": { "version": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz", - "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q=", - "dev": true + "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q=" }, "d3-polygon": { "version": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.3.tgz", - "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI=", - "dev": true + "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI=" }, "d3-quadtree": { "version": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.3.tgz", - "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg=", - "dev": true + "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg=" }, "d3-queue": { "version": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.7.tgz", - "integrity": "sha1-yTouVLQXwJWRKdfXP2z31Ckudhg=", - "dev": true + "integrity": "sha1-yTouVLQXwJWRKdfXP2z31Ckudhg=" }, "d3-random": { "version": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.0.tgz", - "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM=", - "dev": true + "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM=" }, "d3-request": { "version": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.5.tgz", "integrity": "sha1-TarpRtHdDVff4B8CKVY1SVjVHyM=", - "dev": true, "requires": { "d3-collection": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.3.tgz", "d3-dispatch": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", @@ -1720,7 +2106,6 @@ "d3-scale": { "version": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.6.tgz", "integrity": "sha1-vOGdqA06DPQiyVQ64zIghiILNO0=", - "dev": true, "requires": { "d3-array": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.0.tgz", "d3-collection": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.3.tgz", @@ -1733,13 +2118,11 @@ }, "d3-selection": { "version": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.1.0.tgz", - "integrity": "sha1-GZhoSJZIj4OcoDchI9o08dMYgJw=", - "dev": true + "integrity": "sha1-GZhoSJZIj4OcoDchI9o08dMYgJw=" }, "d3-selection-multi": { "version": "https://registry.npmjs.org/d3-selection-multi/-/d3-selection-multi-1.0.1.tgz", "integrity": "sha1-zWwlQT0EosuXRw54byzYd/PjT1g=", - "dev": true, "requires": { "d3-selection": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.1.0.tgz", "d3-transition": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.0.tgz" @@ -1748,33 +2131,28 @@ "d3-shape": { "version": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.1.1.tgz", "integrity": "sha1-UKEDfkinn1uP2dWM3lJ5musfdyM=", - "dev": true, "requires": { "d3-path": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz" } }, "d3-time": { "version": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.6.tgz", - "integrity": "sha1-pVsT19FdOhYK6RcIIy4INfHV6UU=", - "dev": true + "integrity": "sha1-pVsT19FdOhYK6RcIIy4INfHV6UU=" }, "d3-time-format": { "version": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.0.5.tgz", "integrity": "sha1-nXeAIE98kRnJFwsaVttN6aivly4=", - "dev": true, "requires": { "d3-time": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.6.tgz" } }, "d3-timer": { "version": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.5.tgz", - "integrity": "sha1-smbUdscbDSaeesXzUrQQo7b+bvA=", - "dev": true + "integrity": "sha1-smbUdscbDSaeesXzUrQQo7b+bvA=" }, "d3-transition": { "version": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.0.tgz", "integrity": "sha1-z8hcdOUjkyQpBUZiNXKZBWDDlm8=", - "dev": true, "requires": { "d3-color": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz", "d3-dispatch": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", @@ -1786,13 +2164,11 @@ }, "d3-voronoi": { "version": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", - "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw=", - "dev": true + "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw=" }, "d3-zoom": { "version": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.2.0.tgz", "integrity": "sha1-syMfT5OGJBR13v4cVXv9P94QZfs=", - "dev": true, "requires": { "d3-dispatch": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", "d3-drag": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.1.0.tgz", @@ -1816,6 +2192,12 @@ } } }, + "date-fns": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", + "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==", + "dev": true + }, "debug": { "version": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", @@ -1877,6 +2259,12 @@ "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz" } }, + "dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "dev": true + }, "duplexer": { "version": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", @@ -1893,6 +2281,32 @@ "stream-shift": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz" } }, + "easy-extender": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.2.tgz", + "integrity": "sha1-PTJI/r4rFZYHMW2PnPSRwWZIIh0=", + "dev": true, + "requires": { + "lodash": "3.10.1" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "eazy-logger": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", + "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=", + "dev": true, + "requires": { + "tfunk": "3.1.0" + } + }, "ecc-jsbn": { "version": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", @@ -1912,6 +2326,12 @@ "integrity": "sha1-GzperObgh7teJXoQCwy/6Bsokfw=", "dev": true }, + "emitter-steward": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/emitter-steward/-/emitter-steward-1.0.0.tgz", + "integrity": "sha1-80Ea3pdYp1Zd+Eiy2gy70bRsvWQ=", + "dev": true + }, "encodeurl": { "version": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", @@ -1935,6 +2355,111 @@ } } }, + "engine.io": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.0.tgz", + "integrity": "sha1-PutfJky3XbvsG6rqJtYfWk6s4qo=", + "dev": true, + "requires": { + "accepts": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "base64id": "0.1.0", + "cookie": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "debug": "2.3.3", + "engine.io-parser": "1.3.1", + "ws": "1.1.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.0.tgz", + "integrity": "sha1-e3MOQSdBQIdZbZvjyI0rxf22z1w=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.1", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.1.tgz", + "integrity": "sha1-lVTxrjMQfW+9FwylRm0vgz9qB88=", + "dev": true, + "requires": { + "after": "0.8.1", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.6", + "wtf-8": "1.0.0" + }, + "dependencies": { + "has-binary": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.6.tgz", + "integrity": "sha1-JTJvOc+k9hath4eJTjryz7x7bhA=", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, "error-ex": { "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", @@ -1999,6 +2524,12 @@ "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" } }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, "expand-brackets": { "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", @@ -2161,6 +2692,12 @@ "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz" } }, + "formidable": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.17.tgz", + "integrity": "sha1-71SRSQ+UM7cF+qdyScmQKa40hVk=", + "dev": true + }, "forwarded": { "version": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", "integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=", @@ -3342,8 +3879,7 @@ }, "graceful-readlink": { "version": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" }, "har-schema": { "version": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", @@ -3375,6 +3911,29 @@ "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" } }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, "has-flag": { "version": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", @@ -3431,6 +3990,16 @@ "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz" } }, + "http-proxy": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", + "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=", + "dev": true, + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } + }, "http-signature": { "version": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", @@ -3443,14 +4012,19 @@ }, "iconv-lite": { "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.17.tgz", - "integrity": "sha1-T9qjs4rLwsAxsEXQ7c3+HsqxjI0=", - "dev": true + "integrity": "sha1-T9qjs4rLwsAxsEXQ7c3+HsqxjI0=" }, "ignore-by-default": { "version": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", "dev": true }, + "immutable": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.1.tgz", + "integrity": "sha1-IAgH8Rqw9ycQ6khVQt4IgHX2jNI=", + "dev": true + }, "imurmurhash": { "version": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", @@ -3474,6 +4048,12 @@ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, "infinity-agent": { "version": "https://registry.npmjs.org/infinity-agent/-/infinity-agent-2.0.3.tgz", "integrity": "sha1-ReDi/3qesDCyfWK3SzdEt6esQhY=", @@ -3622,6 +4202,15 @@ "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" } }, + "is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "requires": { + "lodash.isfinite": "3.3.2" + } + }, "is-plain-obj": { "version": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", @@ -3785,6 +4374,12 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, "json5": { "version": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", @@ -3852,6 +4447,12 @@ "integrity": "sha1-kUS27ryl8dBoAWnxpncNzqYLdcM=", "dev": true }, + "limiter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.2.tgz", + "integrity": "sha512-JIKZ0xb6fZZYa3deZ0BgXCgX6HgV8Nx3mFGeFHmFWW8Fb2c08e0CyE+G3nalpD0xGvGssjGb1UdFr+PprxZEbw==", + "dev": true + }, "load-json-file": { "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", @@ -3864,6 +4465,40 @@ "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" } }, + "localtunnel": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.8.3.tgz", + "integrity": "sha1-3MWSL9hWUQN9S94k/ZMkjQsk6wU=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "openurl": "1.1.1", + "request": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "yargs": "3.29.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "yargs": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.29.0.tgz", + "integrity": "sha1-GquWYOrnnYuPZ1vK7qtu40ws9pw=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "os-locale": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "window-size": "0.1.4", + "y18n": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz" + } + } + } + }, "lodash": { "version": "https://registry.npmjs.org/lodash/-/lodash-4.16.6.tgz", "integrity": "sha1-0iyaxmAojzhD4Wun0rXQbMon13c=", @@ -3955,6 +4590,12 @@ "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", "dev": true }, + "lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, "lodash.keys": { "version": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", @@ -4293,6 +4934,18 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-path": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", + "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", + "dev": true + }, "object.omit": { "version": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", @@ -4318,6 +4971,28 @@ "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" } }, + "openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", + "dev": true + }, + "opn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", + "dev": true, + "requires": { + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, "os-homedir": { "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", @@ -4384,6 +5059,33 @@ "error-ex": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz" } }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, "parseurl": { "version": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", @@ -4454,6 +5156,24 @@ "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" } }, + "portscanner": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", + "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "dev": true, + "requires": { + "async": "1.5.2", + "is-number-like": "1.0.8" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, "postcss": { "version": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", @@ -5112,6 +5832,12 @@ "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", "dev": true }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, "resolve": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", @@ -5121,6 +5847,16 @@ "path-parse": "1.0.5" } }, + "resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + } + }, "rimraf": { "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", @@ -5213,7 +5949,12 @@ }, "rw": { "version": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" + }, + "rx": { + "version": "2.3.24", + "resolved": "https://registry.npmjs.org/rx/-/rx-2.3.24.tgz", + "integrity": "sha1-FPlQpCF9fjXapxu8vljv9o6ksrc=", "dev": true }, "safe-buffer": { @@ -5299,6 +6040,55 @@ } } }, + "serve-index": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.8.0.tgz", + "integrity": "sha1-fF2WwT+xMRAfk8HFd0+FFqHnjTs=", + "dev": true, + "requires": { + "accepts": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "batch": "0.5.3", + "debug": "2.2.0", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "http-errors": "1.5.1", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "http-errors": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz", + "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "setprototypeof": "1.0.2", + "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "setprototypeof": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz", + "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=", + "dev": true + } + } + }, "serve-static": { "version": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz", "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=", @@ -5310,6 +6100,12 @@ "send": "https://registry.npmjs.org/send/-/send-0.15.3.tgz" } }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", + "dev": true + }, "set-blocking": { "version": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", @@ -5365,6 +6161,148 @@ "hoek": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz" } }, + "socket.io": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.6.0.tgz", + "integrity": "sha1-PkDZMmN+a9kjmBslyvfFPoO24uE=", + "dev": true, + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.0", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.6.0", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "dev": true, + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-client": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.6.0.tgz", + "integrity": "sha1-W2aPT3cTBN/u0XkGRwg4b6ZxeFM=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.0", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "dev": true, + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, "sort-keys": { "version": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", @@ -5392,6 +6330,12 @@ "integrity": "sha1-5RjEC8c5my4jyOMxoRY1qXdQ6cM=", "dev": true }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, "spdx-correct": { "version": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", @@ -5472,6 +6416,16 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, + "stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "dev": true, + "requires": { + "commander": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "limiter": "1.1.2" + } + }, "strict-uri-encode": { "version": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", @@ -5569,6 +6523,16 @@ "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" } }, + "tfunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", + "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "object-path": "0.9.2" + } + }, "through": { "version": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", @@ -5615,6 +6579,12 @@ "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=", "dev": true }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, "to-fast-properties": { "version": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", @@ -5646,6 +6616,12 @@ "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" } }, + "tree-kill": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz", + "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==", + "dev": true + }, "trim-newlines": { "version": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", @@ -5679,6 +6655,12 @@ "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz" } }, + "ua-parser-js": { + "version": "0.7.12", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.12.tgz", + "integrity": "sha1-BMgamb3V3FImPqKdJMa/jUgYpLs=", + "dev": true + }, "uglify-js": { "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.15.tgz", "integrity": "sha1-qssyOoRrI0YCJw3q2KMkQaiAb0I=", @@ -5688,11 +6670,23 @@ "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz" } }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, "undefsafe": { "version": "https://registry.npmjs.org/undefsafe/-/undefsafe-0.0.3.tgz", "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=", "dev": true }, + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", + "dev": true + }, "uniq": { "version": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", @@ -5799,6 +6793,60 @@ "nan": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz" } }, + "weinre": { + "version": "2.0.0-pre-I0Z7U9OV", + "resolved": "https://registry.npmjs.org/weinre/-/weinre-2.0.0-pre-I0Z7U9OV.tgz", + "integrity": "sha1-/viqIjkh97QLu71MPtQwL2/QqBM=", + "dev": true, + "requires": { + "express": "2.5.11", + "nopt": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "underscore": "1.7.0" + }, + "dependencies": { + "connect": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/connect/-/connect-1.9.2.tgz", + "integrity": "sha1-QogKIulDiuWait105Df1iujlKAc=", + "dev": true, + "requires": { + "formidable": "1.0.17", + "mime": "1.2.4", + "qs": "0.4.2" + } + }, + "express": { + "version": "2.5.11", + "resolved": "https://registry.npmjs.org/express/-/express-2.5.11.tgz", + "integrity": "sha1-TOjqHzY15p5J8Ou0l7aksKUc5vA=", + "dev": true, + "requires": { + "connect": "1.9.2", + "mime": "1.2.4", + "mkdirp": "0.3.0", + "qs": "0.4.2" + } + }, + "mime": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.4.tgz", + "integrity": "sha1-EbX9rynCUJJVF2uArVIClPXekrc=", + "dev": true + }, + "mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", + "dev": true + }, + "qs": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.4.2.tgz", + "integrity": "sha1-PKxMhh43GoycR3CsI82o3mObjl8=", + "dev": true + } + } + }, "whet.extend": { "version": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", @@ -5825,6 +6873,12 @@ "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" } }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=", + "dev": true + }, "wrap-ansi": { "version": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", @@ -5854,6 +6908,22 @@ "integrity": "sha1-wlLXx8WxtAKJdjDjRTx7/mkNnKE=", "dev": true }, + "ws": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.1.tgz", + "integrity": "sha1-CC3bbGQehdS7RR8D1S8G6r2x8Bg=", + "dev": true, + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", + "dev": true + }, "xdg-basedir": { "version": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", @@ -5864,7 +6934,12 @@ }, "xmlhttprequest": { "version": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", "dev": true }, "xtend": { @@ -5924,6 +6999,12 @@ "dev": true } } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true } } } diff --git a/package.json b/package.json index e0f7a006..380adf22 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,19 @@ { "config": { + "port": "8080", "style_src": "src/scss/site.scss", "style_bundle": "bundle/styles/site.concat.css", "style_dist": "dist/styles/site.min.css" }, "name": "nyco-patterns", - "version": "0.0.2", + "version": "0.0.3", "description": "Agency patterns for the Mayor's Office for Economic Opportunity", "main": "index.js", "scripts": { "test": "", - "serve": "nodemon serve.js --ext slm --watch src", + "start": "PORT=$npm_package_config_port concurrently 'npm run styles-watch' 'npm run scripts-watch' 'npm run build-watch' 'npm run serve' 'npm run sync'", + "serve": "node serve.js --ext slm --watch src", + "sync": "browser-sync start --files 'src' --no-open --no-ui --reload-delay 1000 --proxy \"http://localhost:$npm_package_config_port\"", "build": "node build.js", "publish": "node publish.js", "build-watch": "nodemon --ext slm --watch src/views -x 'npm run build'", @@ -30,15 +33,15 @@ "bugs": { "url": "https://github.com/CityOfNewYork/nyco-patterns/issues" }, - "homepage": "https://github.com/CityOfNewYork/nyco-patterns#readme", + "homepage": "https://cityofnewyork.github.io/nyco-patterns/", "devDependencies": { "babel-core": "^6.25.0", "babel-plugin-external-helpers": "^6.22.0", "babel-preset-env": "^1.6.1", "babel-preset-es2015": "^6.24.1", + "browser-sync": "^2.18.13", + "concurrently": "^3.5.1", "cssnano-cli": "^1.0.5", - "d3": "^4.9.1", - "d3-selection-multi": "^1.0.1", "express": "^4.15.3", "gh-pages": "^1.1.0", "json-sass": "^1.3.5", @@ -52,5 +55,8 @@ "slm": "^1.0.0", "uglify-js": "^3.0.15" }, - "dependencies": {} + "dependencies": { + "d3": "^4.9.1", + "d3-selection-multi": "^1.0.1" + } } diff --git a/serve.js b/serve.js index 5de46a1b..aee9b32e 100644 --- a/serve.js +++ b/serve.js @@ -5,7 +5,7 @@ const EXPRESS = require('express'); const APP = EXPRESS(); const PATH = require('path'); -const PORT = process.env.PORT || 8080; +const PORT = process.env.PORT; const STATIC = PATH.join(__dirname, 'dist'); const VIEWS = PATH.join(__dirname, 'src/views'); const ENGINE = 'slm'; diff --git a/src/views/charts.slm b/src/views/charts.slm index e588b1f2..f807091a 100644 --- a/src/views/charts.slm +++ b/src/views/charts.slm @@ -13,7 +13,7 @@ html lang='en' = mixin('head', 'Chart Object | NYC Opportunity Patterns') -body +body style='visibility: hidden;' onload='load()' = mixin('o-header', 'Chart Object') diff --git a/src/views/colors.slm b/src/views/colors.slm index 459b9bdf..ca9f6f01 100644 --- a/src/views/colors.slm +++ b/src/views/colors.slm @@ -13,7 +13,7 @@ html lang='en' = mixin('head', 'Colors | NYC Opportunity Patterns') -body +body style='visibility: hidden;' onload='load()' = mixin('o-header', 'Colors') diff --git a/src/views/components.slm b/src/views/components.slm index 553545cb..52c5b88b 100644 --- a/src/views/components.slm +++ b/src/views/components.slm @@ -13,7 +13,7 @@ html lang='en' = mixin('head', 'CSS Components | NYC Opportunity Patterns') -body +body style='visibility: hidden;' onload='load()' = mixin('o-header', 'Components') @@ -32,13 +32,13 @@ body div class='${examples}' table class='c-table c-table-td-right b-primary-blue' - = partial('partials/c-table-content') + = partial('partials/table-content') div class='${subsections}' h3 Small Table div class='${examples}' table class='c-table c-table-small c-table-td-right b-primary-blue' - = partial('partials/c-table-content') + = partial('partials/table-content') div class='${subsections}' h3 Asides diff --git a/src/views/index.slm b/src/views/index.slm index 9c0fcc34..fff5ccee 100644 --- a/src/views/index.slm +++ b/src/views/index.slm @@ -13,7 +13,7 @@ html lang='en' = mixin('head', 'NYC Opportunity Patterns') -body +body style='visibility: hidden;' onload='load()' = mixin('o-header', 'Agency patterns for the Mayor\'s Office for Economic Opportunity') diff --git a/src/views/partials/head.mixin.slm b/src/views/partials/head.mixin.slm index 1515c326..2c060f55 100644 --- a/src/views/partials/head.mixin.slm +++ b/src/views/partials/head.mixin.slm @@ -6,4 +6,12 @@ link rel='stylesheet' href='styles/site.min.css' - title= this.title \ No newline at end of file + title= this.title + + noscript + + style + = 'body { visibility: visible !important; }' + + javascript: + function load() { document.body.style.visibility = 'visible' }; \ No newline at end of file diff --git a/src/views/partials/c-table-content.slm b/src/views/partials/table-content.slm similarity index 100% rename from src/views/partials/c-table-content.slm rename to src/views/partials/table-content.slm diff --git a/src/views/team-site.slm b/src/views/team-site.slm index c45b4f72..c30a3894 100644 --- a/src/views/team-site.slm +++ b/src/views/team-site.slm @@ -15,7 +15,7 @@ html lang='en' link href='styles/team-site.min.css' rel='stylesheet' -body +body style='visibility: hidden;' onload='load()' = mixin('o-header', 'Team Site')