-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
2 lines (2 loc) · 534 KB
/
main.js
1
2
(()=>{"use strict";const t=function(t){this.data=t};var e;!function(t){t[t.BOTTLE=0]="BOTTLE",t[t.FIRE=1]="FIRE"}(e||(e={}));const n=function(){function t(t,e,n,r){void 0===r&&(r=!0),this.id=Symbol(),this.type=t,this.x=e,this.y=n,this.held=!1,this.used=!1,this.collectible=r}return t.prototype.use=function(t,e){this.used=!0},t.prototype.drop=function(t,e){this.held=!1,this.x=t.x,this.y=t.y},t.prototype.moveTo=function(t,e){this.x=t,this.y=e},t.prototype.refurbish=function(){this.used=!1},t}();var r,o,i=Math.floor,a=Math.ceil,c=Math.random,l=(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});!function(t){t[t.AIR=0]="AIR",t[t.WATER=1]="WATER"}(o||(o={}));const u=function(t){function n(n,r,o,i,a){void 0===i&&(i=100),void 0===a&&(a=100);var c=t.call(this,e.BOTTLE,r,o)||this;return c._content=0,c.filledWith=n,c.volume=i,c.content=a,c}return l(n,t),Object.defineProperty(n.prototype,"content",{get:function(){return this._content},set:function(t){this._content=function(t,e,n){return Math.min(n,Math.max(0,t))}(t,0,this.volume),0===this._content&&(this.filledWith=o.AIR)},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"isEmpty",{get:function(){return 0===this.content||this.filledWith===o.AIR},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"hasContent",{get:function(){return this.isEmpty},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"isFull",{get:function(){return this.content===this.volume&&this.filledWith!==o.AIR},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"percentFull",{get:function(){return this.content/this.volume},enumerable:!1,configurable:!0}),n.prototype.canAdd=function(t){return!this.isFull&&(t===this.filledWith||this.filledWith===o.AIR)},n.prototype.fillWith=function(t,e){this.canAdd(t)||this.dump(),this.filledWith=t;var n=this.isEmpty?0:this.content,r=null!=e?e:this.volume;this.content=n+r},n.prototype.dump=function(){this.content=0,this.filledWith=o.AIR},n.prototype.resize=function(t){this.volume=t,this.content=this.content},n.prototype.use=function(t,e){switch(this.filledWith){case o.AIR:break;case o.WATER:var n=t.data.hydration;t.hydrate(this.content);var r=t.data.hydration-n;this.content-=r}this.isEmpty&&(this.used=!0)},n}(n);var s=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const p=function(t){function n(n,r){return t.call(this,e.FIRE,n,r,!1)||this}return s(n,t),n.prototype.use=function(e,n){t.prototype.use.call(this,e,n),this.refurbish(),e.data.sitting=!0,e.face(this.x,this.y)},n}(n);function f(t,e){for(var n=t.length-1;n>=0;n--)if(e(t[n],n))return t[n]}function h(t,e){var n=t.get(e);return n||(n=new Set,t.set(e,n)),n}function d(t,e){var n=new Int16Array(2);return n[0]=t,n[1]=e,n}function y(t,e,n,r){var o=n-t,i=r-e;return Math.sqrt(Math.pow(o,2)+Math.pow(i,2))}function _(t,e,n,r,o,i){return n<=t&&t<=n+i&&r<=e&&e<=r+o}function v(t,e,n,r){r||(r=n,n=0);var o,a=c()*(2*Math.PI),l=n/r,u=r*Math.sqrt((1,(o=Math.pow(l,2))+c()*(1-o)));return d(i(t+u*Math.cos(a)),i(e+u*Math.sin(a)))}const w=function(){function t(){this.itemsById=new Map,this.idsByType=new Map,this.graveyard=new Map}return t.prototype.add=function(t){this.itemsById.set(t.id,t),this.idsFor(t.type).add(t.id)},t.prototype.delete=function(t){this.itemsById.delete(t.id),this.idsFor(t.type).delete(t.id)},t.prototype.kill=function(t){this.graveyardFor(t.constructor).push(t),this.delete(t)},t.prototype.resurrect=function(t){var e=this.graveyardFor(t).pop();if(e)return e.refurbish(),e.held=!1,this.add(e),e},t.prototype.createBottle=function(t,e,n,r,o){var i=this.resurrect(u);return i?(i.moveTo(e,n),i.dump(),(r||0===r)&&i.resize(r),(o||0===o)&&i.fillWith(t,o),i):(i=new u(t,e,n,r,o),this.add(i),i)},t.prototype.createFire=function(t,e){var n=this.resurrect(p);if(!n){var r=new p(t,e);return this.add(r),r}return n.x=t,n.y=e,n},t.prototype.idsFor=function(t){return h(this.idsByType,t)},t.prototype.graveyardFor=function(t){return e=this.graveyard,n=t,(r=e.get(n))||(r=[],e.set(n,r)),r;var e,n,r},t.prototype.find=function(t){var e=this.itemsById.get(t);if(!e)throw new Error("No item registered for the given ID");return e},t.prototype.forEachOfType=function(t,e){var n=this;this.idsFor(t).forEach((function(t){e(n.find(t))}))},t.prototype.findOfType=function(t,e){for(var n=this.idsFor(t).values(),r=n.next();!r.done;){var o=this.find(r.value);if(e(o))return o;r=n.next()}},t.prototype.findInAllItems=function(t){for(var e=this.itemsById.values(),n=e.next();!n.done;){if(t(n.value))return n.value;n=e.next()}},t.prototype.findClosest=function(t,e,n,r){var o,i=void 0,a=this.findOfType(t,(function(t){if(t.held||r&&!r(t))return!1;if(t.x===e&&t.y===n)return!0;var a=y(e,n,t.x,t.y);return null!=i||(i=t),null!=o||(o=a),a<o&&(o=a,i=t),!1}));return null!=a?a:i},t.prototype.itemAt=function(t,e,n,r){var o=void 0,i=n+1,a=this.findInAllItems((function(n){if(n.held||r&&!r(n))return!1;if(n.x===t&&n.y===e)return!0;var a=y(t,e,n.x,n.y);return a<i&&(i=a,o=n),!1}));return null!=a?a:o},t}(),T=function(){function t(t,e,n){this.rowCount=t,this.colCount=e,this.colPower=a(Math.log2(e)),this.paddedColCount=1<<this.colPower;var r=t<<this.colPower;this.cells=new n(r)}return t.prototype.rowAtIndex=function(t){return t>>this.colPower},t.prototype.colAtIndex=function(t){return t&this.paddedColCount-1},t.prototype.indexAt=function(t,e){return(t<<this.colPower)+e},t.prototype.valueAt=function(t,e){var n=this.indexAt(t,e);return this.cells[n]},t.prototype.setValueAt=function(t,e,n){var r=this.indexAt(t,e);this.cells[r]=n},t.prototype.delValueAt=function(t,e){this.setValueAt(t,e,0)},t.prototype.clearValues=function(){this.cells.fill(0)},t.prototype.incValueAt=function(t,e){var n=this.indexAt(t,e);return++this.cells[n]},t.prototype.decValueAt=function(t,e){var n=this.indexAt(t,e);return--this.cells[n]},t.prototype.each=function(t){for(var e=0;e<this.rowCount;e++)for(var n=0;n<this.colCount;n++)t(e,n,this.valueAt(e,n))},t.prototype.fill=function(t){for(var e=0;e<this.rowCount;e++)for(var n=0;n<this.colCount;n++){var r=this.indexAt(e,n);this.cells[r]=t(e,n,this.cells[r])}},t}(),g=.5*(Math.sqrt(3)-1),b=(3-Math.sqrt(3))/6,O=1/6,I=(Math.sqrt(5)-1)/4,m=(5-Math.sqrt(5))/20,A=new Float32Array([1,1,0,-1,1,0,1,-1,0,-1,-1,0,1,0,1,-1,0,1,1,0,-1,-1,0,-1,0,1,1,0,-1,1,0,1,-1,0,-1,-1]),R=new Float32Array([0,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,1,0,1,1,1,0,1,-1,1,0,-1,1,1,0,-1,-1,-1,0,1,1,-1,0,1,-1,-1,0,-1,1,-1,0,-1,-1,1,1,0,1,1,1,0,-1,1,-1,0,1,1,-1,0,-1,-1,1,0,1,-1,1,0,-1,-1,-1,0,1,-1,-1,0,-1,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,0]),P=class{constructor(t=Math.random){const e="function"==typeof t?t:function(t){let e=0,n=0,r=0,o=1;const i=function(){let t=4022871197;return function(e){e=e.toString();for(let n=0;n<e.length;n++){t+=e.charCodeAt(n);let r=.02519603282416938*t;t=r>>>0,r-=t,r*=t,t=r>>>0,r-=t,t+=4294967296*r}return 2.3283064365386963e-10*(t>>>0)}}();return e=i(" "),n=i(" "),r=i(" "),e-=i(t),e<0&&(e+=1),n-=i(t),n<0&&(n+=1),r-=i(t),r<0&&(r+=1),function(){const t=2091639*e+2.3283064365386963e-10*o;return e=n,n=r,r=t-(o=0|t)}}(t);this.p=function(t){const e=new Uint8Array(256);for(let t=0;t<256;t++)e[t]=t;for(let n=0;n<255;n++){const r=n+~~(t()*(256-n)),o=e[n];e[n]=e[r],e[r]=o}return e}(e),this.perm=new Uint8Array(512),this.permMod12=new Uint8Array(512);for(let t=0;t<512;t++)this.perm[t]=this.p[255&t],this.permMod12[t]=this.perm[t]%12}noise2D(t,e){const n=this.permMod12,r=this.perm;let o=0,i=0,a=0;const c=(t+e)*g,l=Math.floor(t+c),u=Math.floor(e+c),s=(l+u)*b,p=t-(l-s),f=e-(u-s);let h,d;p>f?(h=1,d=0):(h=0,d=1);const y=p-h+b,_=f-d+b,v=p-1+2*b,w=f-1+2*b,T=255&l,O=255&u;let I=.5-p*p-f*f;if(I>=0){const t=3*n[T+r[O]];I*=I,o=I*I*(A[t]*p+A[t+1]*f)}let m=.5-y*y-_*_;if(m>=0){const t=3*n[T+h+r[O+d]];m*=m,i=m*m*(A[t]*y+A[t+1]*_)}let R=.5-v*v-w*w;if(R>=0){const t=3*n[T+1+r[O+1]];R*=R,a=R*R*(A[t]*v+A[t+1]*w)}return 70*(o+i+a)}noise3D(t,e,n){const r=this.permMod12,o=this.perm;let i,a,c,l;const u=.3333333333333333*(t+e+n),s=Math.floor(t+u),p=Math.floor(e+u),f=Math.floor(n+u),h=(s+p+f)*O,d=t-(s-h),y=e-(p-h),_=n-(f-h);let v,w,T,g,b,I;d>=y?y>=_?(v=1,w=0,T=0,g=1,b=1,I=0):d>=_?(v=1,w=0,T=0,g=1,b=0,I=1):(v=0,w=0,T=1,g=1,b=0,I=1):y<_?(v=0,w=0,T=1,g=0,b=1,I=1):d<_?(v=0,w=1,T=0,g=0,b=1,I=1):(v=0,w=1,T=0,g=1,b=1,I=0);const m=d-v+O,R=y-w+O,P=_-T+O,S=d-g+2*O,N=y-b+2*O,L=_-I+2*O,G=d-1+.5,F=y-1+.5,E=_-1+.5,C=255&s,j=255&p,W=255&f;let K=.6-d*d-y*y-_*_;if(K<0)i=0;else{const t=3*r[C+o[j+o[W]]];K*=K,i=K*K*(A[t]*d+A[t+1]*y+A[t+2]*_)}let M=.6-m*m-R*R-P*P;if(M<0)a=0;else{const t=3*r[C+v+o[j+w+o[W+T]]];M*=M,a=M*M*(A[t]*m+A[t+1]*R+A[t+2]*P)}let x=.6-S*S-N*N-L*L;if(x<0)c=0;else{const t=3*r[C+g+o[j+b+o[W+I]]];x*=x,c=x*x*(A[t]*S+A[t+1]*N+A[t+2]*L)}let B=.6-G*G-F*F-E*E;if(B<0)l=0;else{const t=3*r[C+1+o[j+1+o[W+1]]];B*=B,l=B*B*(A[t]*G+A[t+1]*F+A[t+2]*E)}return 32*(i+a+c+l)}noise4D(t,e,n,r){const o=this.perm;let i,a,c,l,u;const s=(t+e+n+r)*I,p=Math.floor(t+s),f=Math.floor(e+s),h=Math.floor(n+s),d=Math.floor(r+s),y=(p+f+h+d)*m,_=t-(p-y),v=e-(f-y),w=n-(h-y),T=r-(d-y);let g=0,b=0,O=0,A=0;_>v?g++:b++,_>w?g++:O++,_>T?g++:A++,v>w?b++:O++,v>T?b++:A++,w>T?O++:A++;const P=g>=3?1:0,S=b>=3?1:0,N=O>=3?1:0,L=A>=3?1:0,G=g>=2?1:0,F=b>=2?1:0,E=O>=2?1:0,C=A>=2?1:0,j=g>=1?1:0,W=b>=1?1:0,K=O>=1?1:0,M=A>=1?1:0,x=_-P+m,B=v-S+m,H=w-N+m,k=T-L+m,D=_-G+2*m,U=v-F+2*m,X=w-E+2*m,z=T-C+2*m,Y=_-j+3*m,V=v-W+3*m,q=w-K+3*m,J=T-M+3*m,Q=_-1+4*m,Z=v-1+4*m,$=w-1+4*m,tt=T-1+4*m,et=255&p,nt=255&f,rt=255&h,ot=255&d;let it=.6-_*_-v*v-w*w-T*T;if(it<0)i=0;else{const t=o[et+o[nt+o[rt+o[ot]]]]%32*4;it*=it,i=it*it*(R[t]*_+R[t+1]*v+R[t+2]*w+R[t+3]*T)}let at=.6-x*x-B*B-H*H-k*k;if(at<0)a=0;else{const t=o[et+P+o[nt+S+o[rt+N+o[ot+L]]]]%32*4;at*=at,a=at*at*(R[t]*x+R[t+1]*B+R[t+2]*H+R[t+3]*k)}let ct=.6-D*D-U*U-X*X-z*z;if(ct<0)c=0;else{const t=o[et+G+o[nt+F+o[rt+E+o[ot+C]]]]%32*4;ct*=ct,c=ct*ct*(R[t]*D+R[t+1]*U+R[t+2]*X+R[t+3]*z)}let lt=.6-Y*Y-V*V-q*q-J*J;if(lt<0)l=0;else{const t=o[et+j+o[nt+W+o[rt+K+o[ot+M]]]]%32*4;lt*=lt,l=lt*lt*(R[t]*Y+R[t+1]*V+R[t+2]*q+R[t+3]*J)}let ut=.6-Q*Q-Z*Z-$*$-tt*tt;if(ut<0)u=0;else{const t=o[et+1+o[nt+1+o[rt+1+o[ot+1]]]]%32*4;ut*=ut,u=ut*ut*(R[t]*Q+R[t+1]*Z+R[t+2]*$+R[t+3]*tt)}return 27*(i+a+c+l+u)}};var S=new P("continents"),N=new P("land"),L=new P("local");function G(t,e){return L.noise2D(t,e)}function F(t,e){return(1*function(t,e){return S.noise2D(t,e)}(1.75*t,1.75*e)+.75*function(t,e){return N.noise2D(t,e)}(5*t,5*e)+.25*G(16*t,16*e)+.25*G(32*t,32*e))/2.25}var E=new P("moisture");function C(t,e){return E.noise2D(t,e)}function j(t,e){void 0===e&&(e=.5);var n=1-e;return Math.pow(t,n)}var W=195+i(15),K=new P("flora"),M=function(t,e,n,r,o){this.x=t,this.y=e,this.distanceTraveled=n,this.distanceToEnd=r,this.parent=o,this.cost=n+r},x=function(){function t(t){this.cellBlocked=t,this.nodesToWalk=[],this.walkedNodes=[]}return t.prototype.reset=function(){this.nodesToWalk.length=0,this.walkedNodes.length=0},t.prototype.populatePath=function(t,e,n,r,o,a,c,l){var u=this;this.reset(),t.length=0,e=i(e),n=i(n),r=i(r),o=i(o),c=i(c);var s,p=this.nodesToWalk,h=this.walkedNodes,d=y(e,n,r,o);if(d>a&&(r=i(e+a/d*(r-e)),o=i(n+a/d*(o-n)),d=a),!this.cellBlocked(r,o))for(p.push(new M(e,n,0,d,null));p.length;){if((s=this.popLowestCostUnwalkedNode()).distanceToEnd<=c){var _=new M(r,o,s.distanceTraveled+s.distanceToEnd,0,s);return void this.unchainIntoPath(_,t,l)}if(s.distanceTraveled>4*a)return;h.push(s),this.forEachNeighborOf(s.x,s.y,c,(function(t,e,n){if(!u.cellBlocked(t,e)){var i=s.distanceTraveled+n;if(!f(h,(function(n){return n.x===t&&n.y===e}))){var a=f(p,(function(n){return n.x===t&&n.y===e}));if(a)a.parent=s,a.distanceTraveled=i,a.cost=i+a.distanceToEnd;else{var c=y(t,e,r,o);p.push(new M(t,e,i,c,s))}}}}))}},t.prototype.popLowestCostUnwalkedNode=function(){var t=this.nodesToWalk;if(0!==t.length){if(1===t.length)return t.pop();for(var e=0,n=t[e],r=1;r<t.length;r++){var o=t[r];o.cost<n.cost&&(e=r,n=o)}return t.splice(e,1),n}},t.prototype.unchainIntoPath=function(t,e,n){e.push(t),n&&n(t),t.parent&&this.unchainIntoPath(t.parent,e,n)},t.prototype.forEachNeighborOf=function(t,e,n,r){var o,i=n,a=1.4142135623730951*i;r(t-n,o=e-n,a),r(t,o,i),r(t+n,o,a),r(t-n,o=e,i),r(t+n,o,i),r(t-n,o=e+n,a),r(t,o,i),r(t+n,o,a)},t}();const B=x;var H;function k(t,e,n){return t<<31-n-e}function D(t,e,n){var r=31-e;return t%Math.pow(2,r)>>r-n}!function(t){t[t.NONE=0]="NONE",t[t.TREE=1]="TREE"}(H||(H={}));const U=function(){function t(t,e,n){var r=this;this.tileSize=n,this.grid=new T(t,e,Uint32Array),this.pathFinder=new B((function(t,e){return!r.walkableAt(t,e)}))}return t.fillWithTerrain=function(t){var e=this;t.fill((function(n,r,o){var a=r/t.colCount,c=n/t.rowCount,l=e.noiseToByte(F(a,c)),u=l<128,s=i(Math.max(l-191,0)/64*255),p=(128-Math.abs(l-128))/128*204,f=Math.max(p,e.noiseToByte(C(a,c))-s),h=function(t,e){return(1.5*F(t,e)+.25*C(t,e)+1*K.noise2D(20*t,20*e)+1*K.noise2D(70*t,70*e))/2.5}(a,c),d=h>.25&&l<W&&l-128>2?H.TREE:H.NONE;return e.tileValue(l,f,d,u)}))},t.eachTile=function(t,e){var n=this;t.each((function(t,r,o){e(t,r,n.elevationFromTileValue(o),n.moistureFromTileValue(o),n.structureFromTileValue(o),n.underwaterFromTileValue(o))}))},t.feedMapper=function(t,e,n,r){var o=t.valueAt(e,n);return r(e,n,this.elevationFromTileValue(o),this.moistureFromTileValue(o),this.structureFromTileValue(o),this.underwaterFromTileValue(o))},t.eachNeighboringTile=function(e,n,r,o){var i,a;i=n-1,a=r-1,t.feedMapper(e,i,a,o),a=r,t.feedMapper(e,i,a,o),a=r+1,t.feedMapper(e,i,a,o),i=n,a=r-1,t.feedMapper(e,i,a,o),a=r+1,t.feedMapper(e,i,a,o),i=n+1,a=r-1,t.feedMapper(e,i,a,o),a=r,t.feedMapper(e,i,a,o),a=r+1,t.feedMapper(e,i,a,o)},t.noiseToByte=function(t){return i(128*(t+1))},t.tileValue=function(t,e,n,r){return k(t,0,8)|k(e,8,8)|k(n,16,8)|k(r?1:0,24,1)},t.elevationFromTileValue=function(t){return D(t,0,8)},t.moistureFromTileValue=function(t){return D(t,8,8)},t.structureFromTileValue=function(t){return D(t,16,8)},t.underwaterFromTileValue=function(t){return Boolean(D(t,24,1))},t.walkableFromTileValue=function(t){return!this.underwaterFromTileValue(t)&&!this.structureFromTileValue(t)},Object.defineProperty(t.prototype,"rowCount",{get:function(){return this.grid.rowCount},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"colCount",{get:function(){return this.grid.colCount},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"width",{get:function(){return this.colCount*this.tileSize},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"height",{get:function(){return this.rowCount*this.tileSize},enumerable:!1,configurable:!0}),t.prototype.xToCol=function(t){return i(t/this.tileSize)},t.prototype.yToRow=function(t){return i(t/this.tileSize)},t.prototype.fillWithTerrain=function(){t.fillWithTerrain(this.grid)},t.prototype.eachTile=function(e){t.eachTile(this.grid,e)},t.prototype.eachNeighboringTile=function(e,n,r){t.eachNeighboringTile(this.grid,e,n,r)},t.prototype.randomCoordsOnLand=function(){for(var e=this.width,n=this.height,r=0,o=0,a=-1;a<129;)r=i(c()*e),o=i(c()*n),a=t.elevationFromTileValue(this.valueAt(r,o));return d(r,o)},t.prototype.randomWalkableCoords=function(){for(var e=this.width,n=this.height,r=0,o=0,a=!1;!a;)r=i(c()*e),o=i(c()*n),a=t.walkableFromTileValue(this.valueAt(r,o));return d(r,o)},t.prototype.randomWalkableTileCoords=function(){var t=this.randomWalkableCoords();return t[0]=i(t[0]/this.tileSize),t[1]=i(t[1]/this.tileSize),t},t.prototype.populatePath=function(t,e,n,r,o,i){this.pathFinder.populatePath(t,e,n,r,o,i,this.tileSize)},t.prototype.valueAt=function(t,e){return this.grid.valueAt(this.yToRow(e),this.xToCol(t))},t.prototype.valueAtTile=function(t,e){return this.grid.valueAt(t,e)},t.prototype.inBounds=function(t,e){return 0<=t&&0<=e&&t<this.width&&e<this.height},t.prototype.walkableAt=function(e,n){return!!this.inBounds(e,n)&&t.walkableFromTileValue(this.valueAt(e,n))},t.prototype.underwaterAt=function(e,n){return t.underwaterFromTileValue(this.valueAt(e,n))||!this.inBounds(e,n)},t.prototype.tileIsTouched=function(t,e,n,r,o,i){var a=o*t,c=(o+1)*t,l=r*t,u=(r+1)*t;if(a<e){if(l<n){var s=y(e,n,a,l),p=y(e,n,c,u);return s>=i&&i>=p}var f=y(e,n,c,l);return y(e,n,a,u)>=i&&i>=f}return l<n?(f=y(e,n,c,l),y(e,n,a,u)<=i&&i<=f):(s=y(e,n,a,l),p=y(e,n,c,u),s<=i&&i<=p)},t.prototype.eachTileAtDistanceFrom=function(e,n,r,o){for(var i=this.tileSize,a=this.xToCol(e),c=this.yToRow(n),l=this.xToCol(e-r),u=c,s=!1,p=l,f=u;!s||p!==l||f!==u;)if(s=!0,t.feedMapper(this.grid,f,p,o),p<a)if(f<c)if(this.tileIsTouched(i,e,n,f-1,p,r))f-=1;else if(this.tileIsTouched(i,e,n,f,p+1,r))p+=1;else{if(!this.tileIsTouched(i,e,n,f-1,p+1,r))throw new Error("How the hell did that happen?");f-=1,p+=1}else if(this.tileIsTouched(i,e,n,f,p-1,r))p-=1;else if(this.tileIsTouched(i,e,n,f-1,p,r))f-=1;else{if(!this.tileIsTouched(i,e,n,f-1,p-1,r))throw new Error("How the hell did that happen?");f-=1,p-=1}else if(f<c)if(this.tileIsTouched(i,e,n,f,p+1,r))p+=1;else if(this.tileIsTouched(i,e,n,f+1,p,r))f+=1;else{if(!this.tileIsTouched(i,e,n,f+1,p+1,r))throw new Error("How the hell did that happen?");f+=1,p+=1}else if(this.tileIsTouched(i,e,n,f+1,p,r))f+=1;else if(this.tileIsTouched(i,e,n,f,p-1,r))p-=1;else{if(!this.tileIsTouched(i,e,n,f+1,p-1,r))throw new Error("How the hell did that happen?");f+=1,p-=1}},t}();var X=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),z=function(t){function e(e){return t.call(this,e)||this}return X(e,t),e.isDawn=function(t){return.2<=t&&t<=.3},e.isDay=function(t){return.25<=t&&t<=.75},e.isDusk=function(t){return.7<=t&&t<=.8},e.isNight=function(t){return!e.isDay(t)},Object.defineProperty(e.prototype,"dayElapsed",{get:function(){var t=this.data,e=t.timestamp,n=t.dayLength;return(e+t.dayOffset)%n/n},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isDawn",{get:function(){return e.isDawn(this.dayElapsed)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isDay",{get:function(){return e.isDay(this.dayElapsed)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isDusk",{get:function(){return e.isDusk(this.dayElapsed)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isNight",{get:function(){return e.isNight(this.dayElapsed)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"daylight",{get:function(){return this.isDawn?(this.dayElapsed-.2)/.1:this.isDusk?1-(this.dayElapsed-.7)/.1:this.isDay?1:0},enumerable:!1,configurable:!0}),e.prototype.rotateWorld=function(t){this.data.dayOffset+=i(t*this.data.dayLength)},e.prototype.letItBeDay=function(){this.isDawn||(this.isDay?this.setTimeOfDay(.25):this.setTimeOfDay(.2))},e.prototype.letItBeNight=function(){this.isDusk||(this.isNight?this.setTimeOfDay(.75):this.setTimeOfDay(.7))},e.prototype.setTimeOfDay=function(t){var e=this.data,n=e.timestamp,r=e.dayLength,o=e.dayOffset,a=i(t*r),c=(n+o)%r;this.data.dayOffset+=a-c},e.prototype.findClosestMudman=function(t,e,n){var r=this.data.mudmen,o=r.length;if(0!==o){if(1===o){var i=r[0];return!n||n(i)?i:void 0}for(var a=void 0,c=void 0,l=0;l<o;l++)if(i=r[l],!n||n(i)){if(i.local.x===t&&i.local.y===e)return i;var u=y(t,e,i.local.x,i.local.y);(!c||u<c)&&(a=i,c=u)}return a}},e.prototype.findClosestFellowMudman=function(t){return this.findClosestMudman(t.x,t.y,(function(e){return e.local!==t}))},e}(t),Y=new w,V=new U(512,512,32);V.fillWithTerrain();for(var q=0;q<1e3;q++){var J=V.randomWalkableCoords();Y.createBottle(o.WATER,J[0],J[1],100,i(100*Math.random()))}for(q=0;q<1e3;q++)J=V.randomWalkableCoords(),Y.createFire(J[0],J[1]);Y.createFire(300,210);var Q=new z({timestamp:0,map:V,items:Y,mudmen:[],dayLength:24e3,dayOffset:6e3});const Z=function(){function t(t,e,n){this.root=t,this.current=t,this.world=n,this.local=e}return t.prototype.tick=function(){this.current.run(this.local,this.world)},t}();var $=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const tt=function(t){function e(n){return t.call(this,null!=n?n:e.defaults)||this}return $(e,t),Object.defineProperty(e,"defaults",{get:function(){return{currentX:0,currentY:0,path:[],unreachable:[],size:16,moveSpeed:5,hydration:10,warmth:50,social:0,eyesight:300,inventory:new Map,xDirection:1,yDirection:1,sitting:!1,targetedItem:null,talkingTo:null,movingTarget:null}},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"x",{get:function(){return this.data.currentX},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"y",{get:function(){return this.data.currentY},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"hasPath",{get:function(){return this.data.path.length>0},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"destination",{get:function(){return this.data.path[0]},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"isNearDestination",{get:function(){var t=this.destination;return!t||this.isNear(t.x,t.y)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"nearbyThreshold",{get:function(){return 5*this.data.moveSpeed},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"crowdingThreshold",{get:function(){return this.data.size},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"percentHydrated",{get:function(){return this.data.hydration/100},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"percentWarm",{get:function(){return this.data.warmth/100},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"percentSocial",{get:function(){return this.data.social/100},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"talking",{get:function(){return!!this.data.talkingTo},enumerable:!1,configurable:!0}),e.prototype.clearPath=function(){this.data.path.length=0,this.data.unreachable.length=0},e.prototype.setCurrentPosition=function(t,e){t=i(t),e=i(e),this.face(t,e),this.data.currentX===t&&this.data.currentY===e||(this.data.sitting=!1,this.data.talkingTo=null),this.data.currentX=t,this.data.currentY=e},e.prototype.face=function(t,e){var n=this.data,r=n.currentX,o=n.currentY;r===t?o!==e&&(this.data.xDirection=0):this.data.xDirection=r<t?1:-1,o!==e&&(this.data.yDirection=o<e?1:-1)},e.prototype.moveToward=function(t,e,n){var r=this.data,o=r.currentX,i=r.currentY,a=null!=n?n:this.data.moveSpeed,c=d(t-o,e-i),l=c[0],u=c[1],s=Math.sqrt(Math.pow(l,2)+Math.pow(u,2)),p=a>s?1:a/s,f=p*l,h=p*u;this.setCurrentPosition(o+f,i+h)},e.prototype.followPath=function(t){var e=this.data.path,n=null!=t?t:this.data.moveSpeed,r=e[e.length-1];if(r){if(r.x===this.x&&r.y===this.y)return e.pop(),void this.followPath(n);var o=y(this.x,this.y,r.x,r.y);o>n?this.moveToward(r.x,r.y,n):o<=n&&(this.setCurrentPosition(r.x,r.y),e.pop(),this.followPath(n-o))}else this.data.unreachable.length=0},e.prototype.dehydrate=function(t){void 0===t&&(t=1),this.data.hydration=Math.max(this.data.hydration-t,0)},e.prototype.hydrate=function(t){void 0===t&&(t=1),this.data.hydration=Math.min(this.data.hydration+t,100)},e.prototype.chill=function(t){void 0===t&&(t=1),this.data.warmth=Math.max(this.data.warmth-t,0)},e.prototype.toast=function(t){void 0===t&&(t=1),this.data.warmth=Math.min(this.data.warmth+t,100)},e.prototype.feelLonely=function(t){void 0===t&&(t=1),this.data.social=Math.min(this.data.social-t,100)},e.prototype.feelSocial=function(t){void 0===t&&(t=1),this.data.social=Math.min(this.data.social+t,100)},e.prototype.inventoryOf=function(t){return h(this.data.inventory,t)},e.prototype.isHoldingItem=function(t){return this.inventoryOf(t.type).has(t)},e.prototype.pickUp=function(t){t.collectible&&(t.held=!0,this.inventoryOf(t.type).add(t))},e.prototype.unusedFromInventory=function(t){for(var e=this.inventoryOf(t).values(),n=e.next();!n.done;){if(!n.value.used)return n.value;n=e.next()}},e.prototype.isUnreachable=function(t,e){return!!this.data.unreachable.find((function(n){return n[0]===t&&n[1]===e}))},e.prototype.isWithinEyesight=function(t,e){return y(this.x,this.y,t,e)<=this.data.eyesight},e.prototype.isNear=function(t,e){return y(this.x,this.y,t,e)<=this.nearbyThreshold},e.prototype.isCrowding=function(t,e){return y(this.x,this.y,t,e)<=this.crowdingThreshold},e.prototype.isAt=function(t,e){return this.x===t&&this.y===e},e.prototype.isOneStepAwayFrom=function(t,e){return y(this.x,this.y,t,e)<=this.data.moveSpeed},e.prototype.distanceTo=function(t,e){return y(this.x,this.y,t,e)},e.prototype.talkTo=function(t){if(this!==t.local){var e=t.local.data.talkingTo;e?this===e.local?this.data.talkingTo=t:this.data.talkingTo=e:(this.data.talkingTo=t,t.local.face(this.x,this.y));var n=this.data.talkingTo;this.face(n.local.x,n.local.y)}},e}(t);var et;!function(t){t[t.RUNNING=0]="RUNNING",t[t.SUCCESS=1]="SUCCESS",t[t.FAILURE=2]="FAILURE"}(et||(et={}));const nt=et,rt=function(){function t(){this.status=nt.RUNNING,this.level=0}return t.prototype.init=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e]},t.prototype.process=function(t,e){throw new Error("Method #process must be implemented by node classes.")},t.prototype.run=function(e,n){if(t.debug){var r=" |".repeat(this.level);console.log(r+"Processing node: "+this.constructor.name),this.process(e,n),console.log(r+"Processed. Result: "+this.status)}else this.process(e,n)},t.prototype.incrementLevel=function(){this.level+=1},Object.defineProperty(t.prototype,"succeeded",{get:function(){return this.status===nt.SUCCESS},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"failed",{get:function(){return this.status===nt.FAILURE},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"running",{get:function(){return this.status===nt.RUNNING},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"finished",{get:function(){return!this.running},enumerable:!1,configurable:!0}),t.prototype.succeed=function(){this.status=nt.SUCCESS},t.prototype.fail=function(){this.status=nt.FAILURE},t.prototype.reset=function(){this.status=nt.RUNNING},t.debug=!1,t}();var ot=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const it=function(t){function e(){for(var e,n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var o=t.call(this)||this;return o.shuffle=!1,1===n.length?(o.shuffle=!1,o.children=n[0]):(o.shuffle=null!==(e=n[0].shuffle)&&void 0!==e&&e,o.children=n[1]),o.children.forEach((function(t){return t.incrementLevel()})),o}return ot(e,t),e.prototype.reset=function(){t.prototype.reset.call(this),this.children.forEach((function(t){t.reset()}))},e.prototype.incrementLevel=function(){t.prototype.incrementLevel.call(this),this.children.forEach((function(t){return t.incrementLevel()}))},e.prototype.shuffleIfNecessary=function(){this.shuffle&&function(t){for(var e=0;e<t.length;e++){var n=e+i(c()*(t.length-e)),r=t[e];t[e]=t[n],t[n]=r}}(this.children)},e}(rt);var at=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),ct=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return at(e,t),e.prototype.process=function(t,e){this.shuffleIfNecessary();for(var n=0;n<this.children.length;n++){var r=this.children[n];if(r.run(t,e),r.failed&&this.fail(),r.running||this.failed)return}this.succeed()},e}(it);const lt=ct;var ut=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),st=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return ut(e,t),e.prototype.process=function(t,e){this.shuffleIfNecessary();for(var n=0;n<this.children.length;n++){var r=this.children[n];if(r.run(t,e),r.succeeded&&this.succeed(),r.running||this.succeeded)return}this.fail()},e}(it);const pt=st;var ft=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const ht=function(t){function e(e){var n=t.call(this)||this;return n.child=e,n.child.incrementLevel(),n}return ft(e,t),e.prototype.reset=function(){t.prototype.reset.call(this),this.child.reset()},e.prototype.incrementLevel=function(){t.prototype.incrementLevel.call(this),this.child.incrementLevel()},e.prototype.process=function(t,e){this.child.run(t,e),this.status=this.child.status},e}(rt);var dt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const yt=function(t){function e(e){var n=t.call(this)||this;return n.lambda=e,n}return dt(e,t),e.prototype.process=function(t,e){var n=this.lambda(t,e);this.status=!0===n?nt.SUCCESS:!1===n?nt.FAILURE:nt.RUNNING},e}(rt);var _t=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const vt=function(t){function e(){return t.call(this,(function(){return null}))||this}return _t(e,t),e}(yt);var wt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Tt=function(t){function e(e){return t.call(this,null!=e?e:new vt)||this}return wt(e,t),e.prototype.process=function(t,e){this.child.run(t,e),this.fail()},e}(ht);var gt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const bt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return gt(e,t),e.prototype.process=function(t,e){this.reset(),this.child.run(t,e),this.succeed()},e}(ht);var Ot=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const It=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Ot(e,t),e}(rt);var mt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const At=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return mt(e,t),e.prototype.process=function(t,e){t.hasPath?(t.followPath(),t.hasPath||this.succeed()):this.succeed()},e}(It);function Rt(t,e,n,r,o){if(r.isAt(e,n))return r.clearPath(),void t.succeed();var i=r.destination;if(i){if(i.x===e&&i.y===n)return void t.succeed();if(!r.isWithinEyesight(e,n))return void t.succeed();r.clearPath()}if(r.isOneStepAwayFrom(e,n)){var a=new M(e,n,r.distanceTo(e,n),0,null);return r.data.path.push(a),void t.succeed()}if(!r.isWithinEyesight(e,n)){for(var c=r.data,l=c.eyesight,u=c.path,s=0;!r.hasPath&&s<25;){s+=1;var p=v(r.x,r.y,l);o.data.map.populatePath(u,r.x,r.y,p[0],p[1],l)}return r.hasPath?void t.succeed():void t.fail()}o.data.map.populatePath(r.data.path,r.x,r.y,e,n,r.data.eyesight),r.hasPath?t.succeed():(r.data.unreachable.push(d(e,n)),t.fail())}var Pt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const St=function(t){function e(e){var n=t.call(this)||this;return n.itemType=e,n}return Pt(e,t),e.prototype.process=function(t,e){var n=e.data.items.findClosest(this.itemType,t.x,t.y,(function(e){return!t.isUnreachable(e.x,e.y)}));n?Rt(this,n.x,n.y,t,e):this.fail()},e}(It);function Nt(t,e,n,r,o){if(r.isNear(e,n))return r.clearPath(),void t.succeed();var c=r.destination;if(c){if(y(c.x,c.y,e,n)<=r.nearbyThreshold)return void t.succeed();if(!r.isWithinEyesight(e,n))return void t.succeed();r.clearPath()}for(var l=e-r.x,u=n-r.y,s=Math.sqrt(Math.pow(l,2)+Math.pow(u,2)),p=(s-r.nearbyThreshold)/s,f=r.x+(l<0?i(p*l):a(p*l)),h=r.y+(u<0?i(p*u):a(p*u)),_=0;!o.data.map.walkableAt(f,h);){if(_>25)return r.data.unreachable.push(d(e,n)),void t.fail();_+=1;var w=v(e,n,r.data.moveSpeed,r.nearbyThreshold);f=w[0],h=w[1]}if(!r.isWithinEyesight(f,h)){for(var T=r.data,g=T.eyesight,b=T.path,O=0;!r.hasPath&&O<25;){O+=1;var I=v(r.x,r.y,g);o.data.map.populatePath(b,r.x,r.y,I[0],I[1],g)}return r.hasPath?void t.succeed():void t.fail()}o.data.map.populatePath(r.data.path,r.x,r.y,f,h,r.data.eyesight),r.hasPath?t.succeed():(r.data.unreachable.push(d(e,n)),t.fail())}var Lt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Gt=function(t){function e(e){var n=t.call(this)||this;return n.itemType=e,n}return Lt(e,t),e.prototype.process=function(t,e){var n=e.data.items.findClosest(this.itemType,t.x,t.y,(function(e){return!t.isUnreachable(e.x,e.y)}));n?Nt(this,n.x,n.y,t,e):this.fail()},e}(It);var Ft=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Et=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Ft(e,t),e.prototype.process=function(t,e){t.data.hydration>0?this.succeed():this.fail()},e}(It);var Ct=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const jt=function(t){function e(e){var n=t.call(this)||this;return n.itemType=e,n}return Ct(e,t),e.prototype.process=function(t,e){var n=e.data.items.findOfType(this.itemType,(function(e){return!e.used&&!e.held&&e.x===t.x&&e.y===t.y}));n?(t.pickUp(n),this.succeed()):this.fail()},e}(It);var Wt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Kt=function(t){function e(e){var n=t.call(this)||this;return n.itemType=e,n}return Wt(e,t),e.prototype.process=function(t,e){var n=t.unusedFromInventory(this.itemType);n&&!n.used?(n.use(t,e),this.succeed()):this.fail()},e}(rt);var Mt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const xt=function(t){function n(){return t.call(this,new pt([new Et,new Kt(e.BOTTLE),new lt([new jt(e.BOTTLE),new Kt(e.BOTTLE)])]))||this}return Mt(n,t),n}(ht);var Bt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Ht=function(t){function e(e){var n=t.call(this)||this;return n.itemType=e,n}return Bt(e,t),e.prototype.process=function(t,e){var n=e.data.items.findClosest(this.itemType,t.x,t.y);n?(t.face(n.x,n.y),this.succeed()):this.fail()},e}(It);var kt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Dt=function(t){function n(){return t.call(this,new Ht(e.FIRE))||this}return kt(n,t),n}(ht);var Ut=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Xt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Ut(e,t),e.prototype.process=function(t,e){e.isDay?this.succeed():this.fail()},e}(It);var zt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Yt=function(t){function e(e){var n=t.call(this)||this;return n.itemType=e,n}return zt(e,t),e.prototype.process=function(t,e){var n=e.data.items.findClosest(this.itemType,t.x,t.y);n&&t.isNear(n.x,n.y)?this.succeed():this.fail()},e}(It);var Vt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const qt=function(t){function n(){return t.call(this,new Yt(e.FIRE))||this}return Vt(n,t),n}(ht);var Jt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Qt=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Jt(e,t),e.prototype.process=function(t,e){t.percentWarm>.5?this.succeed():this.fail()},e}(It);var Zt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const $t=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Zt(e,t),e.prototype.process=function(t){t.clearPath(),t.data.sitting=!0,this.succeed()},e}(It);var te=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const ee=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return te(n,t),n.prototype.process=function(t,n){var r=n.findClosestFellowMudman(t),o=n.data.items.findClosest(e.FIRE,t.x,t.y);(r||o)&&(r&&t.isCrowding(r.local.x,r.local.y)||o&&t.isCrowding(o.x,o.y))?this.fail():this.succeed()},n}(It);var ne=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const re=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return ne(e,t),e.prototype.process=function(t,e){t.hasPath?this.succeed():this.fail()},e}(It);var oe=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const ie=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return oe(e,t),e.prototype.process=function(t,e){for(var n=v(t.x,t.y,t.crowdingThreshold,2*t.crowdingThreshold),r=0;!t.hasPath;){if(r>25)return void this.fail();Rt(this,n[0],n[1],t,e),r+=1}this.succeed()},e}(It);var ae=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const ce=function(t){function e(){return t.call(this,new pt([new re,new ee,new ie]))||this}return ae(e,t),e}(ht);var le=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const ue=function(t){function e(){return t.call(this,new pt([new Qt,new Xt,new lt([new qt,new ce,new Dt,new $t])]))||this}return le(e,t),e}(ht);var se=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const pe=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return se(e,t),e.prototype.process=function(t,e){var n=t.data.targetedItem;n?Rt(this,n.x,n.y,t,e):this.fail()},e}(It);var fe=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const he=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return fe(e,t),e.prototype.process=function(t,e){this.child.run(t,e),this.child.failed?this.succeed():this.child.succeeded&&this.fail()},e}(ht);var de=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const ye=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return de(e,t),e.prototype.process=function(t,e){t.data.targetedItem?this.succeed():this.fail()},e}(It);var _e=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const ve=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return _e(e,t),e.prototype.process=function(t,e){var n=t.data.targetedItem;n&&t.isAt(n.x,n.y)&&!n.held?(t.pickUp(n),this.succeed()):this.fail()},e}(It);var we=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Te=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return we(e,t),e.prototype.process=function(t,e){var n=t.data.targetedItem;n&&(t.isHoldingItem(n)||!n.collectible&&t.isNear(n.x,n.y))?(n.used||n.use(t,e),t.data.targetedItem=null,this.succeed()):this.fail()},e}(It);var ge=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const be=function(t){function e(){return t.call(this,new pt([new he(new ye),new Te,new lt([new ve,new Te])]))||this}return ge(e,t),e}(ht);var Oe=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Ie=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Oe(e,t),e.prototype.process=function(t,e){t.data.talkingTo?this.succeed():this.fail()},e}(It);var me=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Ae=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return me(e,t),e.prototype.process=function(t,e){var n=e.findClosestFellowMudman(t);n&&t.isNear(n.local.x,n.local.y)?(t.talkTo(n),this.succeed()):this.fail()},e}(It);var Re=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Pe=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Re(e,t),e.prototype.process=function(t,e){var n=e.findClosestFellowMudman(t);n?(t.isNear(n.local.x,n.local.y)||(t.data.movingTarget=n.local),this.succeed()):this.fail()},e}(It);var Se=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Ne=function(t){function e(){return t.call(this,new pt([new Ie,new Ae,new Pe]))||this}return Se(e,t),e}(ht);var Le=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),Ge=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Le(e,t),e.prototype.process=function(t,e){this.shuffleIfNecessary();for(var n=0;n<this.children.length;n++){var r=this.children[n];if(r.run(t,e),r.running)return}this.succeed()},e}(it);const Fe=Ge;var Ee=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Ce=function(t){function e(e){var n=t.call(this)||this;return n.amount=e,n}return Ee(e,t),e.prototype.process=function(t,e){t.dehydrate(this.amount),this.succeed()},e}(It);var je=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const We=function(t){function e(e){var n=t.call(this)||this;return n.amount=e,n}return je(e,t),e.prototype.process=function(t,e){t.toast(this.amount),this.succeed()},e}(It);var Ke=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Me=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Ke(e,t),e.prototype.process=function(t,e){e.isNight?this.succeed():this.fail()},e}(It);var xe=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Be=function(t){function e(e){var n=t.call(this)||this;return n.amount=e,n}return xe(e,t),e.prototype.process=function(t,e){t.chill(this.amount),this.succeed()},e}(It);var He=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const ke=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return He(e,t),e.prototype.process=function(t,e){var n=t.data.talkingTo;n&&!t.isNear(n.local.x,n.local.y)?this.succeed():this.fail()},e}(It);var De=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Ue=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return De(e,t),e.prototype.process=function(t,e){t.data.talkingTo=null},e}(It);var Xe=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const ze=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Xe(e,t),e.prototype.process=function(t,e){var n=t.data.movingTarget;if(n){if(!t.isWithinEyesight(n.x,n.y))return t.data.movingTarget=null,void this.succeed();if(t.isNear(n.x,n.y))return t.data.movingTarget=null,void this.succeed();var r=t.destination;r&&y(r.x,r.y,n.x,n.y)<t.nearbyThreshold?this.succeed():(t.clearPath(),Nt(this,n.x,n.y,t,e))}else this.succeed()},e}(It);var Ye=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Ve=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Ye(e,t),e.prototype.process=function(t,e){t.data.movingTarget=null,this.succeed()},e}(It);var qe=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Je=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return qe(e,t),e.prototype.process=function(t,e){t.data.sitting=!1,this.succeed()},e}(It);var Qe=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const Ze=function(t){function e(e){var n=t.call(this)||this;return n.amount=e,n}return Qe(e,t),e.prototype.process=function(t,e){t.feelSocial(this.amount),this.succeed()},e}(It);var $e=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const tn=function(t){function e(e){var n=t.call(this)||this;return n.amount=e,n}return $e(e,t),e.prototype.process=function(t,e){t.feelLonely(this.amount),this.succeed()},e}(It);var en=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const nn=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return en(e,t),e.prototype.process=function(t,e){t.percentSocial<.25?this.succeed():this.fail()},e}(It);var rn=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const on=function(t){function e(){return t.call(this,new he(new nn))||this}return rn(e,t),e}(ht);var an=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();const cn=function(t){function n(){return t.call(this,new bt(new lt([new bt(new Fe([new Ce(.1),new lt([new Xt,new We(.1)]),new pt([new lt([new qt,new We(.5)]),new lt([new Me,new Be(.5)])]),new lt([new Ie,new pt([new lt([new ke,new Ue])])]),new pt([new lt([new Ie,new Ze(1)]),new tn(.1)]),new ze,new ce])),new At,new pt([new lt([new pt([new be,new Tt(new pe)]),new pt([new xt,new Tt(new St(e.BOTTLE))]),new pt([new ue,new Tt(new Gt(e.FIRE))])]),new Tt(new Fe([new Ve,new Ue,new Je,new Tt]))]),new pt([new on,new Ne])])))||this}return an(n,t),n}(ht);var ln=0;const un=function(){function t(t,e,n,r){this.id=ln+=1;var o=new cn,i=tt.defaults;(t||0===t)&&(i.currentX=t),(e||0===e)&&(i.currentY=e),(n||0===n)&&(i.eyesight=n),r&&(i.size=r),this.local=new tt(i),this.behaviorTree=new Z(o,this.local,Q)}return t.prototype.tick=function(){this.behaviorTree.tick()},t}(),sn=function(){function t(t,e,n,r){void 0===r&&(r=24),this.lastFrameAt=0,this.canvas=t;var o=this.canvas.getContext("2d");if(!o)throw new Error("CanvasRenderingContext2D not supported");this.setCanvasSize(e,n),this.ctx=o,this.fps=r}return Object.defineProperty(t.prototype,"msPerFrame",{get:function(){return 1e3/this.fps},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"nextFrameAt",{get:function(){return this.lastFrameAt+this.msPerFrame},enumerable:!1,configurable:!0}),t.prototype.setCanvasSize=function(t,e){this.canvas.width=t,this.canvas.height=e,this.canvas.style.width=t+"px",this.canvas.style.height=e+"px"},t.prototype.drawLoop=function(t){var e=this,n=function(r){requestAnimationFrame(n),r<e.nextFrameAt||(e.lastFrameAt=r,t(e.ctx,r))};requestAnimationFrame(n)},t.prototype.drawOnce=function(t){var e=this;requestAnimationFrame((function(n){t(e.ctx,n)}))},t}();var pn,fn="rgb(165, 42, 42)",hn="rgb(120, 50, 0)",dn="rgb(244, 164, 96)",yn="rgb(47, 79, 79)",_n="rgb(0, 100, 200)",vn="rgb(0, 0, 0)",wn="rgb(200, 50, 0)",Tn="rgb(0, 100, 0)",gn="rgb(255, 255, 255)",bn="rgba(255, 255, 255, 0.5)";function On(t,e){return e===pn.NONE?t===pn.NONE:(t&e)===e}!function(t){t[t.NONE=0]="NONE",t[t.TOP_LEFT=128]="TOP_LEFT",t[t.TOP=64]="TOP",t[t.TOP_RIGHT=32]="TOP_RIGHT",t[t.RIGHT=16]="RIGHT",t[t.BOTTOM_RIGHT=8]="BOTTOM_RIGHT",t[t.BOTTOM=4]="BOTTOM",t[t.BOTTOM_LEFT=2]="BOTTOM_LEFT",t[t.LEFT=1]="LEFT"}(pn||(pn={}));const In=function(){function t(t,e,n){void 0===n&&(n=24),this.defaultSpriteWidth=t,this.defaultSpriteHeight=e,this.fps=n,this.spriteRenderers=[],this.defaultSpriteWidth=i(t),this.defaultSpriteHeight=i(e)}return t.prototype.addSprite=function(t,e,n,r,o){var a,c,l;"function"==typeof n?(a=this.defaultSpriteWidth,c=this.defaultSpriteHeight,l=n):"function"==typeof r?(a=i(n),c=a,l=r):(a=i(n),c=i(r),l=o);var u=new sn(document.createElement("canvas"),a+2*e,c+2*e,this.fps);this.spriteRenderers[t]=u,u.drawOnce((function(t){l(t,a,c,i(a/2),i(c/2),0+e,a-e,c-e,0+e)}))},t.prototype.mirrorSprite=function(t,e){var n=this.spriteRenderers[t],r=n.canvas,o=r.width,i=r.height,a=new sn(document.createElement("canvas"),o,i,n.fps);this.spriteRenderers[e]=a,a.drawOnce((function(t){t.save(),t.scale(-1,1),t.drawImage(n.canvas,0,0,-1*o,i),t.restore()}))},t.prototype.drawSprite=function(t,e,n,r,o,a,c){void 0===o&&(o=0),void 0===a&&(a=0),void 0===c&&(c=1);var l=this.spriteRenderers[t].canvas,u=l.width,s=l.height,p=i(n-.5*u+o),f=i(r-.5*s+a),h=i(u*c),d=i(s*c);e.drawImage(l,0,0,u,s,p,f,h,d)},t}();var mn;!function(t){t[t.STANDING_FRONT=0]="STANDING_FRONT",t[t.STANDING_BACK=1]="STANDING_BACK",t[t.STANDING_RIGHT_FRONT=2]="STANDING_RIGHT_FRONT",t[t.STANDING_RIGHT_BACK=3]="STANDING_RIGHT_BACK",t[t.STANDING_LEFT_FRONT=4]="STANDING_LEFT_FRONT",t[t.STANDING_LEFT_BACK=5]="STANDING_LEFT_BACK",t[t.SITTING_FRONT=6]="SITTING_FRONT",t[t.SITTING_BACK=7]="SITTING_BACK",t[t.SITTING_RIGHT_FRONT=8]="SITTING_RIGHT_FRONT",t[t.SITTING_RIGHT_BACK=9]="SITTING_RIGHT_BACK",t[t.SITTING_LEFT_FRONT=10]="SITTING_LEFT_FRONT",t[t.SITTING_LEFT_BACK=11]="SITTING_LEFT_BACK",t[t.WALKING_1_FRONT=12]="WALKING_1_FRONT",t[t.WALKING_2_FRONT=13]="WALKING_2_FRONT",t[t.WALKING_3_FRONT=14]="WALKING_3_FRONT",t[t.WALKING_4_FRONT=15]="WALKING_4_FRONT",t[t.WALKING_1_BACK=16]="WALKING_1_BACK",t[t.WALKING_2_BACK=17]="WALKING_2_BACK",t[t.WALKING_3_BACK=18]="WALKING_3_BACK",t[t.WALKING_4_BACK=19]="WALKING_4_BACK",t[t.WALKING_RIGHT_1_FRONT=20]="WALKING_RIGHT_1_FRONT",t[t.WALKING_RIGHT_2_FRONT=21]="WALKING_RIGHT_2_FRONT",t[t.WALKING_RIGHT_3_FRONT=22]="WALKING_RIGHT_3_FRONT",t[t.WALKING_RIGHT_4_FRONT=23]="WALKING_RIGHT_4_FRONT",t[t.WALKING_RIGHT_1_BACK=24]="WALKING_RIGHT_1_BACK",t[t.WALKING_RIGHT_2_BACK=25]="WALKING_RIGHT_2_BACK",t[t.WALKING_RIGHT_3_BACK=26]="WALKING_RIGHT_3_BACK",t[t.WALKING_RIGHT_4_BACK=27]="WALKING_RIGHT_4_BACK",t[t.WALKING_LEFT_1_FRONT=28]="WALKING_LEFT_1_FRONT",t[t.WALKING_LEFT_2_FRONT=29]="WALKING_LEFT_2_FRONT",t[t.WALKING_LEFT_3_FRONT=30]="WALKING_LEFT_3_FRONT",t[t.WALKING_LEFT_4_FRONT=31]="WALKING_LEFT_4_FRONT",t[t.WALKING_LEFT_1_BACK=32]="WALKING_LEFT_1_BACK",t[t.WALKING_LEFT_2_BACK=33]="WALKING_LEFT_2_BACK",t[t.WALKING_LEFT_3_BACK=34]="WALKING_LEFT_3_BACK",t[t.WALKING_LEFT_4_BACK=35]="WALKING_LEFT_4_BACK"}(mn||(mn={}));var An,Rn=[mn.WALKING_1_FRONT,mn.WALKING_2_FRONT,mn.WALKING_3_FRONT,mn.WALKING_4_FRONT],Pn=[mn.WALKING_1_BACK,mn.WALKING_2_BACK,mn.WALKING_3_BACK,mn.WALKING_4_BACK],Sn=[mn.WALKING_RIGHT_1_FRONT,mn.WALKING_RIGHT_2_FRONT,mn.WALKING_RIGHT_3_FRONT,mn.WALKING_RIGHT_4_FRONT],Nn=[mn.WALKING_RIGHT_1_BACK,mn.WALKING_RIGHT_2_BACK,mn.WALKING_RIGHT_3_BACK,mn.WALKING_RIGHT_4_BACK],Ln=[mn.WALKING_LEFT_1_FRONT,mn.WALKING_LEFT_2_FRONT,mn.WALKING_LEFT_3_FRONT,mn.WALKING_LEFT_4_FRONT],Gn=[mn.WALKING_LEFT_1_BACK,mn.WALKING_LEFT_2_BACK,mn.WALKING_LEFT_3_BACK,mn.WALKING_LEFT_4_BACK];!function(t){t[t.BLANK=0]="BLANK",t[t.TALKING_1=1]="TALKING_1",t[t.TALKING_2=2]="TALKING_2",t[t.TALKING_3=3]="TALKING_3",t[t.TALKING_4=4]="TALKING_4",t[t.TALKING_5=5]="TALKING_5",t[t.TALKING_6=6]="TALKING_6",t[t.TALKING_7=7]="TALKING_7",t[t.TALKING_8=8]="TALKING_8",t[t.TALKING_9=9]="TALKING_9",t[t.TALKING_10=10]="TALKING_10",t[t.TALKING_11=11]="TALKING_11",t[t.TALKING_12=12]="TALKING_12"}(An||(An={}));var Fn=[An.TALKING_1,An.TALKING_2,An.TALKING_3,An.TALKING_4,An.TALKING_5,An.TALKING_6,An.TALKING_7,An.TALKING_8,An.TALKING_9,An.TALKING_10,An.TALKING_11,An.TALKING_12],En=function(){function t(t,e){void 0===t&&(t=20),void 0===e&&(e=24),this.mudmanSize=t,this.mudmanSize=i(t),this.spriteRenderer=new In(this.canvasWidth,this.canvasHeight,e),this.convoRenderer=new In(i(this.canvasWidth/2),i(this.canvasHeight/3),e),this.addStandingSprites(),this.addSittingSprites(),this.addWalkingSprites(),this.addConvoSprites()}return Object.defineProperty(t.prototype,"canvasWidth",{get:function(){return 2*this.mudmanSize},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"canvasHeight",{get:function(){return 3*this.mudmanSize},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"bodyCenterX",{get:function(){return i(this.canvasWidth/2)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"bodyCenterY",{get:function(){return i(this.canvasHeight/2)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"bodyTopY",{get:function(){return i(this.bodyCenterY-this.bodyHeight/2)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"bodyBottomY",{get:function(){return this.bodyTopY+this.bodyHeight},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"bodyLeftX",{get:function(){return i(this.bodyCenterX-this.bodyWidth/2)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"bodyRightX",{get:function(){return this.bodyLeftX+this.bodyWidth},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"bodyWidth",{get:function(){return this.mudmanSize},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"bodyHeight",{get:function(){return i(this.mudmanSize/2)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"buttRadius",{get:function(){return i(this.mudmanSize/4)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"buttBottomY",{get:function(){return this.bodyBottomY+this.buttRadius},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"buttLeftInnerX",{get:function(){return this.bodyLeftX+this.buttRadius},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"buttRightInnerX",{get:function(){return this.bodyRightX-this.buttRadius},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"legWidth",{get:function(){return i(this.mudmanSize/4)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"legHeight",{get:function(){return i(this.mudmanSize/2)},enumerable:!1,configurable:!0}),t.prototype.drawUpperBody=function(t,e){var n=this,r=n.bodyWidth,o=n.bodyCenterX,a=n.bodyTopY,c=n.bodyBottomY,l=n.bodyLeftX,u=n.bodyRightX,s=n.buttRadius,p=n.buttBottomY,f=n.buttLeftInnerX,h=n.buttRightInnerX;t.fillStyle=fn,t.beginPath(),t.arc(o,a,i(r/2),0,Math.PI,!0),t.lineTo(l,c),t.arcTo(l,p,f,p,s),t.lineTo(f,p),e?t.lineTo(u,p):(t.lineTo(h,p),t.arcTo(u,p,u,c,s),t.lineTo(u,c)),t.lineTo(u,a),t.closePath(),t.fill()},t.prototype.drawFace=function(t){var e=this,n=e.bodyWidth,r=e.bodyTopY,o=e.bodyRightX,a=i(.33*n),c=i(.3*a),l=o-a-i((n-a)/6),u=r,s=l-a+2*c,p=l+a-i(1.5*c);if(t.fillStyle=dn,t.beginPath(),t.arc(l,u,a,0,2*Math.PI),t.fill(),t.fillStyle=fn,t.beginPath(),t.arc(l,u,a+1,-.2*Math.PI,-.8*Math.PI,!0),t.closePath(),t.fill(),t.fillStyle=yn,t.beginPath(),t.arc(s,u,c,0,2*Math.PI),t.fill(),t.beginPath(),t.arc(p,u,c,0,2*Math.PI),t.fill(),n>24){var f=p-s+2*c,h=c,d=s-c,y=u-i(.75*c)-h,_=p-s-3*c,v=c,w=l-i(.5*_),T=u+i(1.5*c);t.fillStyle=fn,t.fillRect(d,y,f,h),t.fillStyle=wn,t.fillRect(w,T,_,v)}},t.prototype.drawSimpleFace=function(t,e){var n,r=this,o=r.bodyWidth,a=r.bodyTopY,c=r.bodyRightX,l=r.bodyCenterX,u=i(.33*o),s=i(.3*u),p=a,f=(n=e?c-u:l)+u,h=n-u+i(u/2),d=f-i(u/2);t.fillStyle=yn,t.beginPath(),t.arc(h,p,s,0,2*Math.PI),t.fill(),t.beginPath(),t.arc(d,p,s,0,2*Math.PI),t.fill()},t.prototype.drawStanding=function(t,e){this.drawUpperBody(t,!1),e&&this.drawSimpleFace(t,!1);var n=this,r=n.buttLeftInnerX,o=n.buttRightInnerX,a=n.buttRadius,c=n.bodyBottomY,l=n.legWidth,u=n.legHeight;t.fillStyle=fn,t.fillRect(r-i(l/2),c,l,u+a),t.fillRect(o-i(l/2),c,l,u+a)},t.prototype.drawStandingRight=function(t,e){this.drawUpperBody(t,!0),e&&this.drawSimpleFace(t,!0);var n=this,r=n.bodyRightX,o=n.buttLeftInnerX,i=n.buttBottomY,a=n.legWidth,c=n.legHeight;t.fillStyle=fn,t.fillRect(o,i,a,c),t.fillRect(r-a,i,a,c)},t.prototype.drawSitting=function(t,e){var n=this,r=n.buttLeftInnerX,o=n.buttRightInnerX,a=n.buttBottomY,c=n.legWidth,l=n.legHeight;if(t.save(),t.translate(0,l),this.drawUpperBody(t,!1),e){this.drawSimpleFace(t,!1),t.fillStyle=fn;var u=r-i(c/2),s=r,p=o-i(c/2),f=o,h=a-i(.75*l),d=h+l,y=i(c/2);t.fillRect(u,h,c,l),t.beginPath(),t.arc(s,d,y,0,Math.PI),t.fill(),t.fillStyle=hn,t.beginPath(),t.arc(s,d,y,0,2*Math.PI),t.fill(),t.fillStyle=fn,t.fillRect(p,h,c,l),t.beginPath(),t.arc(f,d,y,0,Math.PI),t.fill(),t.fillStyle=hn,t.beginPath(),t.arc(f,d,y,0,2*Math.PI),t.fill(),t.restore()}},t.prototype.drawSittingRight=function(t,e){var n=this,r=n.bodyCenterX,o=n.bodyRightX,a=n.buttBottomY,c=n.legWidth,l=n.legHeight;t.save(),t.translate(0,l),this.drawUpperBody(t,!0),e&&this.drawSimpleFace(t,!0),t.fillStyle=fn;var u=i(c/2),s=o-i(l/2),p=a-c,f=a,h=s+l;if(t.fillRect(s,a-c,l,c),t.beginPath(),t.arc(h,p,u,Math.PI,0),t.lineTo(h+u,f-u),t.arc(h,f-u,u,0,.5*Math.PI),t.fill(),!e)return t.fillStyle=hn,t.beginPath(),t.arc(o,p-u,u,.5*Math.PI,0,!0),t.lineTo(o+u,p-c),t.arc(o,p-c,u,0,-.5*Math.PI,!0),void t.fill();var d=i(1.5*c),y=i(d/2),_=r-i(d/2),v=r,w=v+i(d/2),T=a-i(.75*l),g=T+l;t.fillRect(_,T,d,l),t.beginPath(),t.arc(v,g,y,0,Math.PI),t.fill(),t.fillStyle=hn,t.beginPath(),t.arc(w-u,g+y-u,u,Math.PI,0,!0),t.lineTo(w,g-i(.25*c)),t.arc(w-u,g-i(.25*c),u,0,Math.PI,!0),t.closePath(),t.fill()},t.prototype.drawWalking1=function(t,e){var n=this,r=n.buttLeftInnerX,o=n.buttRightInnerX,a=n.buttRadius,c=n.bodyBottomY,l=n.legWidth,u=n.legHeight;t.fillStyle=fn,t.fillRect(r-i(l/2),c,l,u+a),t.fillStyle=hn,t.fillRect(o-i(l/2),c-i(.75*u),l,u+a),this.drawUpperBody(t,!1),e&&this.drawSimpleFace(t,!1)},t.prototype.drawWalking2=function(t,e){var n=this,r=n.buttLeftInnerX,o=n.buttRightInnerX,a=n.buttRadius,c=n.bodyBottomY,l=n.legWidth,u=n.legHeight;t.fillStyle=hn,t.fillRect(r-i(l/2),c-i(.5*u),l,u+a),t.fillStyle=fn,t.fillRect(o-i(l/2),c-i(.5*u),l,u+a),this.drawUpperBody(t,!1),e&&this.drawSimpleFace(t,!1)},t.prototype.drawWalking3=function(t,e){var n=this,r=n.buttLeftInnerX,o=n.buttRightInnerX,a=n.buttRadius,c=n.bodyBottomY,l=n.legWidth,u=n.legHeight;t.fillStyle=hn,t.fillRect(r-i(l/2),c-i(.75*u),l,u+a),t.fillStyle=fn,t.fillRect(o-i(l/2),c,l,u+a),this.drawUpperBody(t,!1),e&&this.drawSimpleFace(t,!1)},t.prototype.drawWalking4=function(t,e){var n=this,r=n.buttLeftInnerX,o=n.buttRightInnerX,a=n.buttRadius,c=n.bodyBottomY,l=n.legWidth,u=n.legHeight;t.fillStyle=fn,t.fillRect(r-i(l/2),c-i(.5*u),l,u+a),t.fillStyle=hn,t.fillRect(o-i(l/2),c-i(.5*u),l,u+a),this.drawUpperBody(t,!1),e&&this.drawSimpleFace(t,!1)},t.prototype.drawWalkingRight1=function(t,e){var n=this,r=n.bodyRightX,o=n.buttLeftInnerX,a=n.buttBottomY,c=n.legWidth,l=n.legHeight;t.fillStyle=fn,t.fillRect(o,a-i(l/2),c,l),t.fillStyle=fn,t.fillRect(r-c,a,c,l),this.drawUpperBody(t,!0),e&&this.drawSimpleFace(t,!0)},t.prototype.drawWalkingRight2=function(t,e){var n=this,r=n.buttLeftInnerX,o=n.bodyCenterX,a=n.buttBottomY,c=n.legWidth,l=n.legHeight;t.fillStyle=hn,t.fillRect(r+i(c/2),a-i(.75*l),c,l),t.fillStyle=fn,t.fillRect(o+i(.25*c),a,c,l),this.drawUpperBody(t,!0),e&&this.drawSimpleFace(t,!0)},t.prototype.drawWalkingRight3=function(t,e){var n=this,r=n.buttLeftInnerX,o=n.bodyCenterX,a=n.buttBottomY,c=n.legWidth,l=n.legHeight;t.fillStyle=hn,t.fillRect(o+i(.25*c),a-i(.75*l),c,l),t.fillStyle=fn,t.fillRect(r+i(c/2),a,c,l),this.drawUpperBody(t,!0),e&&this.drawSimpleFace(t,!0)},t.prototype.drawWalkingRight4=function(t,e){var n=this,r=n.bodyRightX,o=n.buttLeftInnerX,a=n.buttBottomY,c=n.legWidth,l=n.legHeight;t.fillStyle=fn,t.fillRect(o,a,c,l),t.fillStyle=fn,t.fillRect(r-c,a-i(l/2),c,l),this.drawUpperBody(t,!0),e&&this.drawSimpleFace(t,!0)},t.prototype.addStandingSprites=function(){var t=this;this.spriteRenderer.addSprite(mn.STANDING_BACK,0,(function(e){t.drawStanding(e,!1)})),this.spriteRenderer.addSprite(mn.STANDING_FRONT,0,(function(e){t.drawStanding(e,!0)})),this.spriteRenderer.addSprite(mn.STANDING_RIGHT_BACK,0,(function(e){t.drawStandingRight(e,!1)})),this.spriteRenderer.addSprite(mn.STANDING_RIGHT_FRONT,0,(function(e){t.drawStandingRight(e,!0)})),this.spriteRenderer.mirrorSprite(mn.STANDING_RIGHT_BACK,mn.STANDING_LEFT_BACK),this.spriteRenderer.mirrorSprite(mn.STANDING_RIGHT_FRONT,mn.STANDING_LEFT_FRONT)},t.prototype.addSittingSprites=function(){var t=this;this.spriteRenderer.addSprite(mn.SITTING_BACK,0,(function(e){t.drawSitting(e,!1)})),this.spriteRenderer.addSprite(mn.SITTING_FRONT,0,(function(e){t.drawSitting(e,!0)})),this.spriteRenderer.addSprite(mn.SITTING_RIGHT_BACK,0,(function(e){t.drawSittingRight(e,!1)})),this.spriteRenderer.addSprite(mn.SITTING_RIGHT_FRONT,0,(function(e){t.drawSittingRight(e,!0)})),this.spriteRenderer.mirrorSprite(mn.SITTING_RIGHT_BACK,mn.SITTING_LEFT_BACK),this.spriteRenderer.mirrorSprite(mn.SITTING_RIGHT_FRONT,mn.SITTING_LEFT_FRONT)},t.prototype.addWalkingSprites=function(){var t=this;this.spriteRenderer.addSprite(mn.WALKING_1_BACK,0,(function(e){t.drawWalking1(e,!1)})),this.spriteRenderer.addSprite(mn.WALKING_2_BACK,0,(function(e){t.drawWalking2(e,!1)})),this.spriteRenderer.addSprite(mn.WALKING_3_BACK,0,(function(e){t.drawWalking3(e,!1)})),this.spriteRenderer.addSprite(mn.WALKING_4_BACK,0,(function(e){t.drawWalking4(e,!1)})),this.spriteRenderer.addSprite(mn.WALKING_1_FRONT,0,(function(e){t.drawWalking1(e,!0)})),this.spriteRenderer.addSprite(mn.WALKING_2_FRONT,0,(function(e){t.drawWalking2(e,!0)})),this.spriteRenderer.addSprite(mn.WALKING_3_FRONT,0,(function(e){t.drawWalking3(e,!0)})),this.spriteRenderer.addSprite(mn.WALKING_4_FRONT,0,(function(e){t.drawWalking4(e,!0)})),this.spriteRenderer.addSprite(mn.WALKING_RIGHT_1_BACK,0,(function(e){t.drawWalkingRight1(e,!1)})),this.spriteRenderer.addSprite(mn.WALKING_RIGHT_2_BACK,0,(function(e){t.drawWalkingRight2(e,!1)})),this.spriteRenderer.addSprite(mn.WALKING_RIGHT_3_BACK,0,(function(e){t.drawWalkingRight3(e,!1)})),this.spriteRenderer.addSprite(mn.WALKING_RIGHT_4_BACK,0,(function(e){t.drawWalkingRight4(e,!1)})),this.spriteRenderer.addSprite(mn.WALKING_RIGHT_1_FRONT,0,(function(e){t.drawWalkingRight1(e,!0)})),this.spriteRenderer.addSprite(mn.WALKING_RIGHT_2_FRONT,0,(function(e){t.drawWalkingRight2(e,!0)})),this.spriteRenderer.addSprite(mn.WALKING_RIGHT_3_FRONT,0,(function(e){t.drawWalkingRight3(e,!0)})),this.spriteRenderer.addSprite(mn.WALKING_RIGHT_4_FRONT,0,(function(e){t.drawWalkingRight4(e,!0)})),this.spriteRenderer.mirrorSprite(mn.WALKING_RIGHT_1_BACK,mn.WALKING_LEFT_1_BACK),this.spriteRenderer.mirrorSprite(mn.WALKING_RIGHT_2_BACK,mn.WALKING_LEFT_2_BACK),this.spriteRenderer.mirrorSprite(mn.WALKING_RIGHT_3_BACK,mn.WALKING_LEFT_3_BACK),this.spriteRenderer.mirrorSprite(mn.WALKING_RIGHT_4_BACK,mn.WALKING_LEFT_4_BACK),this.spriteRenderer.mirrorSprite(mn.WALKING_RIGHT_1_FRONT,mn.WALKING_LEFT_1_FRONT),this.spriteRenderer.mirrorSprite(mn.WALKING_RIGHT_2_FRONT,mn.WALKING_LEFT_2_FRONT),this.spriteRenderer.mirrorSprite(mn.WALKING_RIGHT_3_FRONT,mn.WALKING_LEFT_3_FRONT),this.spriteRenderer.mirrorSprite(mn.WALKING_RIGHT_4_FRONT,mn.WALKING_LEFT_4_FRONT)},t.prototype.addConvoSprites=function(){var t=this,e=function(t,e,n,r,o,a,c,l,u){var s=i(e/6),p=l,f=u+s,h=p-2*s;t.fillStyle=gn,t.strokeStyle="rgb(90, 90, 90)",t.lineWidth=1,t.beginPath(),t.moveTo(f,h),t.arc(u+s,h-s,s,.5*Math.PI,Math.PI),t.lineTo(u,a+s),t.arc(u+s,a+s,s,Math.PI,-.5*Math.PI),t.lineTo(c-s,a),t.arc(c-s,a+s,s,-.5*Math.PI,0),t.lineTo(c,h-s),t.arc(c-s,h-s,s,0,.5*Math.PI),t.lineTo(f,p),t.arc(f,p-s,s,.5*Math.PI,-.5*Math.PI,!0),t.closePath(),t.fill(),t.stroke()};this.convoRenderer.addSprite(An.BLANK,1,(function(t,n,r,o,i,a,c,l,u){e(t,n,0,0,0,a,c,l,u)})),Fn.forEach((function(n){t.convoRenderer.addSprite(n,1,(function(t,n,r,o,c,l,u,s,p){e(t,n,0,0,0,l,u,s,p);for(var f=i(n/6),h=l+f,d=p+f,y=r-2*f-2*f-2,_=n-2*f-2,v=i(3*Math.random())+1,w=a(y/8),T=0;T<v;T++){var g=i(y/v),b=h+T*g+i(g/2)-i(w/2);t.fillStyle=vn,t.fillRect(d,b,_,w);for(var O=i(3*Math.random()),I=0;I<O;I++){var m=d+Math.max(2,i(Math.random()*(_-2)));t.fillStyle=gn,t.fillRect(m,b,2,w)}}}))}))},t.prototype.mirrorRenderer=function(t){var e=this.canvasWidth,n=this.canvasHeight,r=new sn(document.createElement("canvas"),e,n,t.fps);return r.drawOnce((function(r){r.save(),r.scale(-1,1),r.drawImage(t.canvas,0,0,-1*e,n),r.restore()})),r},t.prototype.drawMudman=function(t,e,n,r,o){var a,c=e.local.data,l=c.xDirection,u=c.yDirection;if(e.local.hasPath){var s=i(o%200*4/200);a=(0===l?u<0?Pn:Rn:l<0?u<0?Gn:Ln:u<0?Nn:Sn)[s]}else a=e.local.data.sitting?0===l?u<0?mn.SITTING_BACK:mn.SITTING_FRONT:l<0?u<0?mn.SITTING_LEFT_BACK:mn.SITTING_LEFT_FRONT:u<0?mn.SITTING_RIGHT_BACK:mn.SITTING_RIGHT_FRONT:0===l?u<0?mn.STANDING_BACK:mn.STANDING_FRONT:l<0?u<0?mn.STANDING_LEFT_BACK:mn.STANDING_LEFT_FRONT:u<0?mn.STANDING_RIGHT_BACK:mn.STANDING_RIGHT_FRONT;this.spriteRenderer.drawSprite(a,t,n,r,0,-.25*this.mudmanSize)},t.prototype.drawConvo=function(t,e,n,r,o){var a=e.local.data.talkingTo;if(a&&!a.local.hasPath){var c=i(Fn.length*(o%4e3)/4e3),l=Fn[(e.id+c)%Fn.length];this.convoRenderer.drawSprite(l,t,n,r,1*this.mudmanSize,-1*this.mudmanSize)}},t}();const Cn=En;var jn,Wn=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();!function(t){t[t.EMPTY=0]="EMPTY",t[t.WATER_FULL=1]="WATER_FULL",t[t.WATER_PARTIAL=2]="WATER_PARTIAL"}(jn||(jn={}));const Kn=function(t){function e(n){var r=t.call(this,n/2.5,n/2)||this;return r.tileSize=n,r.addSprite(jn.EMPTY,1,(function(t,n,r,o,i,a,c,l,u){var s=e.createBottlePath(n,r,o,i,a,c,l,u);t.strokeStyle=gn,t.lineWidth=1,t.stroke(s)})),r.addSprite(jn.WATER_FULL,1,(function(t,n,r,o,a,c,l,u,s){var p=e.createBottlePath(n,r,o,a,c,l,u,s);t.save(),t.clip(p),t.fillStyle=_n,t.fillRect(s,c+i(r/4),n,r),t.restore(),t.strokeStyle=gn,t.lineWidth=1,t.stroke(p)})),r.addSprite(jn.WATER_PARTIAL,1,(function(t,n,r,o,a,c,l,u,s){var p=e.createBottlePath(n,r,o,a,c,l,u,s);t.save(),t.clip(p),t.fillStyle=_n,t.fillRect(s,u-i(r/4),n,r),t.restore(),t.strokeStyle=gn,t.lineWidth=1,t.stroke(p)})),r}return Wn(e,t),e.createBottlePath=function(t,e,n,r,o,a,c,l){var u=i(t/2),s=n-i(u/2),p=n+i(u/2),f=i(t/4),h=o+i(e/8),d=o+i(e/4),y=i((d-h)/2),_=new Path2D;return _.moveTo(s,o),_.lineTo(p,o),_.lineTo(p,h),_.arc(p,h+y,y,-.5*Math.PI,.5*Math.PI,!0),_.lineTo(a,d),_.lineTo(a,c-f),_.arc(a-f,c-f,f,0,.5*Math.PI),_.lineTo(l+f,c),_.arc(l+f,c-f,f,.5*Math.PI,Math.PI),_.lineTo(l,d),_.lineTo(l+i((t-u)/2),d),_.arc(s,h+y,y,.5*Math.PI,-.5*Math.PI,!0),_.lineTo(s,o),_.closePath(),_},e.prototype.drawBottle=function(t,e,n,r,o,i,a){var c=e.isEmpty?jn.EMPTY:e.percentFull<.67?jn.WATER_PARTIAL:jn.WATER_FULL;this.drawSprite(c,t,n,r,o,i,a)},e}(In);var Mn,xn=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();!function(t){t[t.FLAME_1=0]="FLAME_1",t[t.FLAME_2=1]="FLAME_2",t[t.FLAME_3=2]="FLAME_3",t[t.FLAME_4=3]="FLAME_4",t[t.FLAME_5=4]="FLAME_5",t[t.FLAME_6=5]="FLAME_6",t[t.FLAME_7=6]="FLAME_7",t[t.FLAME_8=7]="FLAME_8"}(Mn||(Mn={}));var Bn=[Mn.FLAME_1,Mn.FLAME_2,Mn.FLAME_3,Mn.FLAME_4,Mn.FLAME_5,Mn.FLAME_6,Mn.FLAME_7,Mn.FLAME_8];const Hn=function(t){function e(n){var r=t.call(this,n,2*n)||this;return r.tileSize=n,Bn.forEach((function(t){r.addSprite(t,0,(function(t,n,r,o,a,l,u,s,p){var f=a-i(r/16);e.drawRandomFlameComponent(t,n,o,f,"red"),e.drawRandomFlameComponent(t,n,o,f,"yellow"),e.drawRandomFlameComponent(t,n,o,f,"orange"),e.drawRandomFlameComponent(t,n/2,o,f-i(.25*c()*r),"red"),e.drawRandomFlameComponent(t,n/2,o,f-i(.25*c()*r),"red")}))})),r}return xn(e,t),e.drawRandomFlameComponent=function(t,e,n,r,o){var a,l,u=i(.1*e+.25*c()*e),s=i(u/2),p=(c()-.5)*u,f=(a=c(),void 0===l&&(l=.5),(1-j(1-a,l)-.5)*u),h=c()*(2*Math.PI),d=i(n-s+p),y=i(r-s+f);t.translate(n,r),t.rotate(h),t.translate(-1*n,-1*r),t.fillStyle=o,t.globalAlpha=.25+.75*c(),t.fillRect(d,y,u,u),t.globalAlpha=1,t.setTransform(1,0,0,1,0,0)},e.prototype.drawAnimated=function(t,e,n,r,o,a,c){var l=Bn[i(Bn.length*(e%2e3/2e3))];this.drawSprite(l,t,n,r,o,a,c)},e}(In);var kn,Dn=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();!function(t){t[t.STUMP=0]="STUMP",t[t.BOUGHS_1=1]="BOUGHS_1",t[t.BOUGHS_2=2]="BOUGHS_2",t[t.BOUGHS_3=3]="BOUGHS_3",t[t.BOUGHS_4=4]="BOUGHS_4"}(kn||(kn={}));var Un=[kn.BOUGHS_1,kn.BOUGHS_2,kn.BOUGHS_3,kn.BOUGHS_4],Xn=function(t){function e(n){var r=t.call(this,4*n,4*n)||this;return r.tileSize=n,r.addSprite(kn.STUMP,1,n,n,(function(t,e,n,r,o,a,c,l,u){var s=i(e/4),p=l-s,f=p-i(n/3);t.fillStyle=hn,t.lineWidth=2,t.strokeStyle=hn,t.beginPath(),t.arc(r,p,s,0,Math.PI),t.lineTo(r-s,f),t.lineTo(r+s,f),t.lineTo(r+s,p),t.fill(),t.stroke(),t.fillStyle=dn,t.beginPath(),t.arc(r,f,s,0,2*Math.PI),t.fill(),t.stroke(),t.fillStyle="rgb(205, 133, 63)",t.beginPath(),t.arc(r,f,i(s/2),0,2*Math.PI),t.fill()})),Un.forEach((function(t){var n=r.tileSize;r.addSprite(t,1,(function(t,r,o,a,c,l,u,s,p){var f=c-i(n/8),h=i(n/3);e.drawRandomBoughComponent(t,a,f,h,h,1,1,Tn,0);for(var d=0;d<5;d++)e.drawRandomBoughComponent(t,a,f-h,i(n/2),i(n/1.5),.5,1,Tn,1);for(d=0;d<5;d++)e.drawRandomBoughComponent(t,a,f-h,i(n/16),i(n/2),.1,.5,"rgb(34, 139, 34)",3)}))})),r}return Dn(e,t),e.drawRandomBoughComponent=function(t,e,n,r,o,a,l,u,s){var p=i(r+c()*(o-r)),f=(o+r)/2,h=i((c()-.5)*f*s),d=i(-.5*c()*f*s),y=a+c()*(l-a);t.fillStyle=u,t.globalAlpha=y,t.beginPath(),t.arc(e+h,n+d,p,0,2*Math.PI),t.fill(),t.globalAlpha=1},e}(In);const zn=Xn;var Yn=function(){function t(t,e,n){var r=this;void 0===n&&(n=24),this.overlayFullMap=!1,this.heroIndex=0,this.world=e,this.worldRenderer=new sn(document.createElement("canvas"),e.data.map.width,e.data.map.height,n),this.spaceRenderer=new sn(document.createElement("canvas"),t.width,t.height,n),this.viewportRenderer=new sn(t,t.width,t.height,n),this.hudRenderer=new sn(document.createElement("canvas"),t.width,t.height,6),this.nightRenderer=new sn(document.createElement("canvas"),t.width,t.height,n),this.firelightRenderer=new sn(document.createElement("canvas"),this.firelightSize,this.firelightSize,12),this.flameRenderer=new Hn(this.tileSize),this.bottleRenderer=new Kn(this.tileSize),this.treeRenderer=new zn(this.tileSize);var o=i(this.tileSize/2);this.mudmanRenderer=new Cn(o,n);for(var a=function(t,e){if("number"!=typeof t||"number"!=typeof e){var n=r.world.data.map.randomWalkableCoords();t=n[0],e=n[1]}var i=new un(t,e,20*r.world.data.map.tileSize,o);r.world.data.mudmen.push(i)},c=0;c<1e3;c++)a()}return Object.defineProperty(t.prototype,"fps",{set:function(t){this.viewportRenderer.fps=t},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"hero",{get:function(){return this.world.data.mudmen[this.heroIndex]},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"worldWidth",{get:function(){return this.worldRenderer.canvas.width},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"worldHeight",{get:function(){return this.worldRenderer.canvas.height},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"spaceWidth",{get:function(){return this.spaceRenderer.canvas.width},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"spaceHeight",{get:function(){return this.spaceRenderer.canvas.height},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"viewportWidth",{get:function(){return this.viewportRenderer.canvas.width},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"viewportHeight",{get:function(){return this.viewportRenderer.canvas.height},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"tileSize",{get:function(){return this.world.data.map.tileSize},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"firelightSize",{get:function(){return 4*this.tileSize},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"nightCtx",{get:function(){return this.nightRenderer.ctx},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"viewportOriginX",{get:function(){return this.hero.local.x-i(this.viewportWidth/2)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"viewportOriginY",{get:function(){return this.hero.local.y-i(this.viewportHeight/2)},enumerable:!1,configurable:!0}),t.prototype.eachItemOfTypeInViewport=function(t,e,n,r,o,i,a,c){void 0===o&&(o=0),void 0===i&&(i=0),void 0===a&&(a=0),void 0===c&&(c=0);var l=this,u=l.tileSize,s=l.viewportWidth,p=l.viewportHeight,f=e-u*c,h=s+u*(c+i),d=n-u*o,y=p+u*(o+a);this.world.data.items.forEachOfType(t,(function(t){t.used||t.held||_(t.x,t.y,f,d,h,y)&&r(t,t.x-e,t.y-n)}))},t.prototype.eachMudmanInViewport=function(t,e,n){var r=this.viewportWidth,o=this.viewportHeight;this.world.data.mudmen.forEach((function(i){_(i.local.x,i.local.y,t,e,r,o)&&n(i,i.local.x-t,i.local.y-e)}))},t.prototype.eachTileInViewport=function(t,e,n,r,o,i,a){void 0===r&&(r=0),void 0===o&&(o=0),void 0===i&&(i=0),void 0===a&&(a=0);for(var c=this.world.data.map,l=this.tileSize,u=Math.max(0,c.xToCol(t)-a),s=Math.min(c.colCount-1,c.xToCol(t+this.viewportWidth)+o),p=Math.max(0,c.yToRow(e)-r),f=Math.min(c.rowCount-1,c.yToRow(e+this.viewportHeight)+i),h=u;h<=s;h++)for(var d=p;d<=f;d++){var y=h*l,_=d*l;n(d,h,y,_,y-t,_-e,l)}},t.prototype.drawTile=function(t,e,n,r,o,a,c,l){var u=n*r,s=e*r,p=o/1.5,f=a,h=o/2.5;if(l)t.fillStyle="rgb(0, 100, 200)",t.fillRect(u,s,r,r),function(t,e,n,r,o,i,a,c,l,u){void 0===c&&(c=0),void 0===l&&(l=200),void 0===u&&(u=0);var s=function(t,e,n,r){var o,i,a=pn.NONE;return o=e-r,i=t-r,n.underwaterAt(i,o)||(a|=pn.TOP_LEFT),i=t,n.underwaterAt(i,o)||(a|=pn.TOP),i=t+r,n.underwaterAt(i,o)||(a|=pn.TOP_RIGHT),o=e,i=t-r,n.underwaterAt(i,o)||(a|=pn.LEFT),i=t+r,n.underwaterAt(i,o)||(a|=pn.RIGHT),o=e+r,i=t-r,n.underwaterAt(i,o)||(a|=pn.BOTTOM_LEFT),i=t,n.underwaterAt(i,o)||(a|=pn.BOTTOM),i=t+r,n.underwaterAt(i,o)||(a|=pn.BOTTOM_RIGHT),a}(n,r,e,a);if(!On(s,pn.NONE)){var p,f,h,d,y=a/2,_=o,v=_+a,w=i,T=i+a,g=_+y,b=i+y,O=a/4,I=w+O,m=w+(a-O),A=_+O,R=_+(a-O),P=On(s,pn.TOP),S=On(s,pn.RIGHT),N=On(s,pn.BOTTOM),L=On(s,pn.LEFT);if(t.fillStyle="rgb("+c+", "+l+", "+u+")",P){if(t.fillRect(_,w,a,O),N){if(t.fillRect(_,m,a,O),S||L){S&&t.fillRect(g,w,y,a),L&&t.fillRect(_,w,y,a);var G=t.fillStyle;t.fillStyle="rgb(0, 100, 200)",t.beginPath(),t.arc(g,b,O,0,2*Math.PI),t.fill(),t.fillStyle=G}return}if(S)return t.beginPath(),t.moveTo(g,w),t.lineTo(g,I),t.arcTo(R,I,R,T,O),t.lineTo(R,T),t.lineTo(v,T),t.lineTo(v,w),t.closePath(),t.fill(),L?(t.beginPath(),t.moveTo(g,w),t.lineTo(g,I),t.arcTo(A,I,A,T,O),t.lineTo(A,T),t.lineTo(_,T),t.lineTo(_,w),t.closePath(),void t.fill()):(null!=d||(d=On(s,pn.BOTTOM_LEFT)),void(d&&(t.beginPath(),t.arc(_,T,O,-.5*Math.PI,0),t.lineTo(_,T),t.closePath(),t.fill())));if(L)return t.beginPath(),t.moveTo(g,w),t.lineTo(g,I),t.arcTo(A,I,A,T,O),t.lineTo(A,T),t.lineTo(_,T),t.lineTo(_,w),t.closePath(),t.fill(),null!=h||(h=On(s,pn.BOTTOM_RIGHT)),void(h&&(t.beginPath(),t.arc(v,T,O,Math.PI,-.5*Math.PI),t.lineTo(v,T),t.closePath(),t.fill()));null!=d||(d=On(s,pn.BOTTOM_LEFT)),null!=h||(h=On(s,pn.BOTTOM_RIGHT)),d&&(t.beginPath(),t.arc(_,T,O,-.5*Math.PI,0),t.lineTo(_,T),t.closePath(),t.fill()),h&&(t.beginPath(),t.arc(v,T,O,Math.PI,-.5*Math.PI),t.lineTo(v,T),t.closePath(),t.fill())}else if(N){if(t.fillRect(_,m,a,O),L)return t.beginPath(),t.moveTo(g,T),t.lineTo(g,m),t.arcTo(A,m,A,w,O),t.lineTo(A,w),t.lineTo(_,w),t.lineTo(_,T),t.closePath(),t.fill(),S?(t.beginPath(),t.moveTo(g,T),t.lineTo(g,m),t.arcTo(R,m,R,w,O),t.lineTo(R,w),t.lineTo(v,w),t.lineTo(v,T),t.closePath(),void t.fill()):(null!=f||(f=On(s,pn.TOP_RIGHT)),void(f&&(t.beginPath(),t.arc(v,w,O,.5*Math.PI,Math.PI),t.lineTo(v,w),t.closePath(),t.fill())));if(S)return t.beginPath(),t.moveTo(g,T),t.lineTo(g,m),t.arcTo(R,m,R,w,O),t.lineTo(R,w),t.lineTo(v,w),t.lineTo(v,T),t.closePath(),t.fill(),null!=p||(p=On(s,pn.TOP_LEFT)),void(p&&(t.beginPath(),t.arc(_,w,O,0,.5*Math.PI),t.lineTo(_,w),t.closePath(),t.fill()));null!=p||(p=On(s,pn.TOP_LEFT)),null!=f||(f=On(s,pn.TOP_RIGHT)),p&&(t.beginPath(),t.arc(_,w,O,0,.5*Math.PI),t.lineTo(_,w),t.closePath(),t.fill()),f&&(t.beginPath(),t.arc(v,w,O,.5*Math.PI,Math.PI),t.lineTo(v,w),t.closePath(),t.fill())}else if(L){if(t.fillRect(_,w,O,a),S)return void t.fillRect(R,w,O,a);null!=f||(f=On(s,pn.TOP_RIGHT)),null!=h||(h=On(s,pn.BOTTOM_RIGHT)),f&&(t.beginPath(),t.arc(v,w,O,.5*Math.PI,Math.PI),t.lineTo(v,w),t.closePath(),t.fill()),h&&(t.beginPath(),t.arc(v,T,O,Math.PI,-.5*Math.PI),t.lineTo(v,T),t.closePath(),t.fill())}else S?(t.fillRect(R,w,O,a),null!=p||(p=On(s,pn.TOP_LEFT)),null!=d||(d=On(s,pn.BOTTOM_LEFT)),p&&(t.beginPath(),t.arc(_,w,O,0,.5*Math.PI),t.lineTo(_,w),t.closePath(),t.fill()),d&&(t.beginPath(),t.arc(_,T,O,-.5*Math.PI,0),t.lineTo(_,T),t.closePath(),t.fill())):(null!=p||(p=On(s,pn.TOP_LEFT)),null!=d||(d=On(s,pn.BOTTOM_LEFT)),null!=f||(f=On(s,pn.TOP_RIGHT)),null!=h||(h=On(s,pn.BOTTOM_RIGHT)),p&&(t.beginPath(),t.arc(_,w,O,0,.5*Math.PI),t.lineTo(_,w),t.closePath(),t.fill()),f&&(t.beginPath(),t.arc(v,w,O,.5*Math.PI,Math.PI),t.lineTo(v,w),t.closePath(),t.fill()),h&&(t.beginPath(),t.arc(v,T,O,Math.PI,-.5*Math.PI),t.lineTo(v,T),t.closePath(),t.fill()),d&&(t.beginPath(),t.arc(_,T,O,-.5*Math.PI,0),t.lineTo(_,T),t.closePath(),t.fill()))}}(t,this.world.data.map,u,s,u,s,r,p,f,h);else{var d=function(t){return 255*j(Math.max((t-195)/60,0),.75)}(o),y=i(Math.max(d,p)),_=i(Math.max(d,f)),v=i(Math.max(d,h));t.fillStyle="rgb("+y+", "+_+", "+v+")",t.fillRect(u,s,r,r)}t.strokeStyle="rgba(0, 0, 0, 0.05)",t.strokeRect(u,s,r,r)},t.prototype.drawWorld=function(){var t=this;this.worldRenderer.drawOnce((function(e,n){e.clearRect(0,0,t.worldWidth,t.worldHeight);var r=t.tileSize;t.world.data.map.eachTile((function(n,o,i,a,c,l){t.drawTile(e,n,o,r,i,a,c,l)}))}))},t.prototype.drawSpace=function(){var t=this;this.spaceRenderer.drawOnce((function(e,n){var r=t,o=r.spaceWidth,a=r.spaceHeight;e.clearRect(0,0,o,a);for(var l=0;l<1e3;l++){var u=i(c()*o),s=i(c()*a),p=i(4*(1-Math.sqrt(c()))),f=Math.sqrt(c()).toFixed(2);e.fillStyle="rgba(255, 255, 255, "+f+")",e.fillRect(u,s,p,p)}}))},t.prototype.createEmptyFillBar=function(t,e,n,r){var o=e+r,a=t+i(n/2),c=a+i(n/2),l=i(n/2),u=e+l,s=o-l,p=new Path2D;return p.arc(a,u,l,Math.PI,0),p.lineTo(c,s),p.arc(a,s,l,0,Math.PI),p.lineTo(t,u),p},t.prototype.drawHud=function(){var t=this,e=this,n=e.tileSize,r=e.viewportWidth,o=e.viewportHeight,a=i(n/4),c=i(1.5*n),l=i(n/2),u=l+c,s=r-i(n/2)-i(a/2),p=s-2*a,f=p-2*a,h=new Path2D,d=this.createEmptyFillBar(s,l,a,c);h.addPath(d);var y=this.createEmptyFillBar(p,l,a,c);h.addPath(y);var _=this.createEmptyFillBar(f,l,a,c);h.addPath(_),this.hudRenderer.ctx.clip(h),this.hudRenderer.drawLoop((function(e,n){e.clearRect(0,0,r,o),e.fillStyle="rgba(0, 0, 0, 0.25)",e.fill(h),e.fillStyle=_n;var l=i(t.hero.local.percentHydrated*c),d=u-l;e.fillRect(s,d,a,l),e.fillStyle=wn;var y=i(t.hero.local.percentWarm*c),_=u-y;e.fillRect(p,_,a,y),e.fillStyle="rgb(255, 215, 0)";var v=i(t.hero.local.percentSocial*c),w=u-v;e.fillRect(f,w,a,v),e.strokeStyle="rgb(50, 50, 50)",e.lineWidth=2,e.stroke(h)}))},t.prototype.drawFirelight=function(){var t=this,e=this.firelightSize,n=i(e/2),r=n,o=n;this.firelightRenderer.drawLoop((function(a,l){var u=t.world.daylight;if(1!==u){a.clearRect(0,0,e,e);var s=(1-u)*(n*(.9+.1*c())),p=a.createRadialGradient(r,o,i(s/5),r,o,s);p.addColorStop(0,gn),p.addColorStop(.2,gn),p.addColorStop(.4,bn),p.addColorStop(.6,bn),p.addColorStop(.75,"rgba(255, 255, 255, 0.25)"),p.addColorStop(1,"transparent"),a.fillStyle=p,a.fillRect(0,0,e,e)}}))},t.prototype.drawNightInto=function(t,n){var r=this,o=this.world.daylight;if(1!==o){var a=this,c=a.nightCtx,l=a.viewportWidth,u=a.viewportHeight,s=a.viewportOriginX,p=a.viewportOriginY,f=a.firelightSize;c.clearRect(0,0,l,u),c.fillStyle=vn,c.fillRect(0,0,l,u);var h=c.globalCompositeOperation;c.globalCompositeOperation="destination-out";var d=this.firelightRenderer.canvas,y=i(f/2);this.eachItemOfTypeInViewport(e.FIRE,s,p,(function(e,o,i){c.drawImage(d,0,0,f,f,o-y,i-y,f,f),r.flameRenderer.drawAnimated(t,n,o,i)}),1,1,1,1),c.globalCompositeOperation=h,t.globalAlpha=.35*(1-o),t.drawImage(this.nightRenderer.canvas,0,0,l,u,0,0,l,u),t.globalAlpha=1}},t.prototype.drawGroundLevel=function(t,e){var n=this,r=n.viewportWidth,o=n.viewportHeight,a=n.worldWidth,c=n.worldHeight,l=n.viewportOriginX,u=n.viewportOriginY;if(t.fillStyle="black",t.fillRect(0,0,r,o),l<0||u<0||l+r>a||u+o>c){var s=this.spaceWidth,p=this.spaceHeight;t.drawImage(this.spaceRenderer.canvas,0,0,s,p,0,0,r,o);var f=l<0?Math.abs(l):0,h=u<0?Math.abs(u):0,d=l+r>a?a-l:r,y=u+o>c?c-u:o,_=i(r/40);t.fillStyle="rgba(0, 0, 0, 0.5)",t.fillRect(f-_/2,h-_/2,d+_,y+_),t.fillRect(f-_,h-_,d+2*_,y+2*_),t.shadowOffsetX=0,t.shadowOffsetY=0,t.shadowColor="rgb(0, 0, 255)",t.shadowBlur=50,t.fillStyle="rgb(0, 0, 255)",t.fillRect(f-.5,h-.5,d+1,y+1),t.shadowOffsetX=0,t.shadowOffsetY=0,t.shadowColor="transparent",t.shadowBlur=0}t.drawImage(this.worldRenderer.canvas,l,u,r,o,0,0,r,o)},t.prototype.drawKneeLevel=function(t,n){var r=this,o=this,a=(o.viewportWidth,o.viewportHeight,o.viewportOriginX),c=o.viewportOriginY,l=o.tileSize;this.eachItemOfTypeInViewport(e.BOTTLE,a,c,(function(e,n,o){r.bottleRenderer.drawBottle(t,e,n,o)})),this.eachItemOfTypeInViewport(e.FIRE,a,c,(function(e,n,r){t.fillStyle=hn,t.fillRect(n-5,r-5,10,10),t.fillStyle="orangered",t.fillRect(n-4,r-5,8,6)}));var u=this.world.data.map,s=i(l/2);this.eachTileInViewport(a,c,(function(e,n,o,i,a,c){var l=u.valueAtTile(e,n);switch(U.structureFromTileValue(l)){case H.NONE:break;case H.TREE:r.treeRenderer.drawSprite(kn.STUMP,t,a+s,c+s)}}))},t.prototype.drawEyeLevel=function(t,e){var n=this,r=this.viewportOriginX,o=this.viewportOriginY;this.eachMudmanInViewport(r,o,(function(r,o,i){n.mudmanRenderer.drawMudman(t,r,o,i,e)}))},t.prototype.drawCanopyLevel=function(t,e){var n=this,r=this.world.data.map,o=this,a=o.tileSize,c=o.viewportOriginX,l=o.viewportOriginY,u=i(a/2),s=Un.length;this.eachTileInViewport(c,l,(function(e,o,i,a,c,l){var p=r.valueAtTile(e,o);switch(U.structureFromTileValue(p)){case H.NONE:break;case H.TREE:n.treeRenderer.drawSprite(Un[(e+3*o)%s],t,c+u,l+u)}}),0,1,1,1),this.eachMudmanInViewport(c,l,(function(r,o,i){n.mudmanRenderer.drawConvo(t,r,o,i,e)}))},t.prototype.drawBirdLevel=function(t,e){},t.prototype.drawCloudLevel=function(t,e){this.drawNightInto(t,e)},t.prototype.drawOrbitLevel=function(t,e){var n=this,r=n.viewportOriginX,o=n.viewportOriginY,a=n.viewportWidth,c=n.viewportHeight,l=this.hero.local.data.movingTarget,u=this.hero.local.destination;if(l){var s=e%500/500;t.strokeStyle=wn,t.globalAlpha=1-s,t.beginPath(),t.arc(l.x-r,l.y-o,i(.5*this.tileSize*s),0,2*Math.PI),t.stroke(),t.globalAlpha=1}else u&&(s=e%500/500,t.strokeStyle=yn,t.globalAlpha=1-s,t.beginPath(),t.arc(u.x-r,u.y-o,i(.5*this.tileSize*s),0,2*Math.PI),t.stroke(),t.globalAlpha=1);t.drawImage(this.hudRenderer.canvas,0,0,a,c,0,0,a,c)},t.prototype.drawLoop=function(){var t=this,e=this,n=e.viewportWidth,r=e.viewportHeight,o=e.worldWidth,i=e.worldHeight;this.viewportRenderer.drawLoop((function(e,a){if(t.world.data.timestamp=a,t.overlayFullMap)return e.clearRect(0,0,n,r),void e.drawImage(t.worldRenderer.canvas,0,0,o,i,0,0,n,r);t.drawGroundLevel(e,a),t.drawKneeLevel(e,a),t.drawEyeLevel(e,a),t.drawCanopyLevel(e,a),t.drawBirdLevel(e,a),t.drawCloudLevel(e,a),t.drawOrbitLevel(e,a),t.eachMudmanInViewport(t.viewportOriginX,t.viewportOriginY,(function(t,e,n){t.tick()}))}))},t.prototype.start=function(){this.drawWorld(),this.drawSpace(),this.drawHud(),this.drawFirelight(),this.drawLoop()},t.prototype.nextHero=function(){this.heroIndex=(this.heroIndex+1)%this.world.data.mudmen.length},t.prototype.prevHero=function(){this.heroIndex=0===this.heroIndex?this.world.data.mudmen.length-1:this.heroIndex-1},t}();const Vn=Yn;window.addEventListener("DOMContentLoaded",(function(){var t=document.getElementById("viewport"),e=new Vn(t,Q,24);e.start(),document.body.addEventListener("keydown",(function(t){switch(t.key){case"ArrowRight":e.nextHero();break;case"ArrowLeft":e.prevHero();break;case"m":e.overlayFullMap=!e.overlayFullMap;break;case"d":e.world.letItBeDay();break;case"n":e.world.letItBeNight()}})),t.addEventListener("click",(function(t){var n=e.hero.local,r=n.x,o=n.y,i=n.data,a=r-e.viewportWidth/2,c=o-e.viewportHeight/2,l=a+t.offsetX,u=c+t.offsetY;e.world.data.map.populatePath(i.path,r,o,l,u,i.eyesight);var s=e.world.data.items.itemAt(l,u,e.tileSize);s&&(e.hero.local.data.targetedItem=s)})),window.renderer=e,window.pathFinder=e.world.data.map.pathFinder}))})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUltUCxlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL2Jhc2UvZGF0YS9CbGFja2JvYXJkLnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9tb2RlbHMvSXRlbS50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvdXRpbGl0aWVzL21hdGgudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL21vZGVscy9pdGVtcy9jb250YWluZXJzL0JvdHRsZS50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvbW9kZWxzL2l0ZW1zL0ZpcmUudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL3V0aWxpdGllcy9jb2xsZWN0aW9ucy50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvdXRpbGl0aWVzL2dlby50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvbWFwbWFraW5nL211ZHdvcmxkL0l0ZW1EYXRhYmFzZS50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvbWFwbWFraW5nL2Jhc2UvR3JpZC50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9ub2RlX21vZHVsZXMvLnBucG0vc2ltcGxleC1ub2lzZUAzLjAuMC9ub2RlX21vZHVsZXMvc2ltcGxleC1ub2lzZS9kaXN0L2VzbS9zaW1wbGV4LW5vaXNlLmpzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9tYXBtYWtpbmcvbXVkd29ybGQvZ2VuZXJhdG9ycy9lbGV2YXRpb25Ob2lzZS50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvbWFwbWFraW5nL211ZHdvcmxkL2dlbmVyYXRvcnMvbW9pc3R1cmVOb2lzZS50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvdXRpbGl0aWVzL3dlaWdodC50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvbWFwbWFraW5nL211ZHdvcmxkL2dlbmVyYXRvcnMvc25vd2luZXNzLnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9tYXBtYWtpbmcvbXVkd29ybGQvZ2VuZXJhdG9ycy9mbG9yYU5vaXNlLnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9wYXRoZmluZGluZy9iYXNlL1BhdGhGaW5kZXIudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL21hcG1ha2luZy9tdWR3b3JsZC9NdWR3b3JsZE1hcC50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkd29ybGRCbGFja2JvYXJkLnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9iZWhhdmlvci9iYXNlL0JlaGF2aW9yVHJlZS50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZC50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvYmFzZS9CZWhhdmlvclN0YXR1cy50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvYmFzZS9ub2Rlcy9CYXNlTm9kZS50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvYmFzZS9ub2Rlcy9Db21wb3NpdGVOb2RlLnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9iZWhhdmlvci9iYXNlL25vZGVzL2NvbXBvc2l0ZXMvQWxsLnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9iZWhhdmlvci9iYXNlL25vZGVzL2NvbXBvc2l0ZXMvQW55LnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9iZWhhdmlvci9iYXNlL25vZGVzL0RlY29yYXRvck5vZGUudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvQW5vbnltb3VzTm9kZS50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvYmFzZS9ub2Rlcy9sZWF2ZXMvTm9PcC50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvYmFzZS9ub2Rlcy9kZWNvcmF0b3JzL0ZhaWwudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvZGVjb3JhdG9ycy9SZXBlYXQudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvTGVhZk5vZGUudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvRm9sbG93UGF0aC50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL3Byb2Nlc3Nlcy9wcm9jZXNzU2V0UGF0aFRvLnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL1NldFBhdGhUb0l0ZW0udHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9wcm9jZXNzZXMvcHJvY2Vzc1NldFBhdGhUb05lYXIudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvU2V0UGF0aFRvTmVhckl0ZW0udHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvSXNIeWRyYXRlZC50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9QaWNrVXBJdGVtLnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL1VzZUl0ZW0udHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9TdGF5SHlkcmF0ZWQudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvRmFjZUl0ZW0udHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvRmFjZUZpcmUudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvSXNEYXkudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvSXNOZWFySXRlbS50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9Jc05lYXJGaXJlLnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL0lzV2FybS50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9TaXQudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvSGFzUGVyc29uYWxTcGFjZS50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9Jc01vdmluZy50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9XYW5kZXJDbG9zZUJ5LnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9iZWhhdmlvci9tdWRtYW4vbm9kZXMvTWFrZVJvb21Gb3JPdGhlcnMudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9TdGF5V2FybS50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9TZXRQYXRoVG9UYXJnZXRlZEl0ZW0udHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvZGVjb3JhdG9ycy9JbnZlcnQudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvSGFzVGFyZ2V0ZWRJdGVtLnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL1BpY2tVcFRhcmdldGVkSXRlbS50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9Vc2VUYXJnZXRlZEl0ZW0udHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9IYW5kbGVUYXJnZXRlZEl0ZW0udHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvSXNUYWxraW5nLnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL1RhbGtUb05lYXJieU11ZG1hbi50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9UYXJnZXROZWFyYnlNdWRtYW4udHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9IYW5nT3V0LnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9iZWhhdmlvci9iYXNlL25vZGVzL2NvbXBvc2l0ZXMvRWFjaC50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9EZWh5ZHJhdGUudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvVG9hc3QudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvSXNOaWdodC50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9DaGlsbC50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9Jc1RhbGtpbmdUb0Zhck9mZk11ZG1hbi50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9TdG9wVGFsa2luZy50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9DaGFzZU1vdmluZ1RhcmdldC50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9DbGVhck1vdmluZ1RhcmdldC50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9HZXRVcC50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9GZWVsU29jaWFsLnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL0ZlZWxMb25lbHkudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvSXNMb25lbHkudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvSXNOb3RMb25lbHkudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9NdWRtYW5CZWhhdmlvci50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvdXRpbGl0aWVzL2lkZW50aWZpY2F0aW9uLnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9tb2RlbHMvTXVkbWFuLnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9yZW5kZXJpbmcvYmFzZS9SZW5kZXJlci50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvcmVuZGVyaW5nL211ZHN0dWZmL2NvbG9ycy50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvcmVuZGVyaW5nL211ZHN0dWZmL1Nob3JlbGluZS50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvcmVuZGVyaW5nL2Jhc2UvU3ByaXRlUmVuZGVyZXIudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL3JlbmRlcmluZy9tdWRzdHVmZi9NdWRtYW5SZW5kZXJlci50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvcmVuZGVyaW5nL211ZHN0dWZmL3Nwcml0ZXMvQm90dGxlUmVuZGVyZXIudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL3JlbmRlcmluZy9tdWRzdHVmZi9zcHJpdGVzL0ZsYW1lUmVuZGVyZXIudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL3JlbmRlcmluZy9tdWRzdHVmZi9zcHJpdGVzL1RyZWVSZW5kZXJlci50cyIsIndlYnBhY2s6Ly9tdWRtZW4vLi9zcmMvcmVuZGVyaW5nL211ZHN0dWZmL011ZHdvcmxkUmVuZGVyZXIudHMiLCJ3ZWJwYWNrOi8vbXVkbWVuLy4vc3JjL3JlbmRlcmluZy9tdWRzdHVmZi9kcmF3U2hvcmVsaW5lLnRzIiwid2VicGFjazovL211ZG1lbi8uL3NyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGNsYXNzIEJsYWNrYm9hcmQ8RGF0YSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gIHB1YmxpYyBkYXRhOiBEYXRhO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IERhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG59XG4iLCJpbXBvcnQgTXVkbWFuQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWRtYW5CbGFja2JvYXJkXCI7XG5pbXBvcnQgTXVkd29ybGRCbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZHdvcmxkQmxhY2tib2FyZFwiO1xuXG4vLyBUT0RPOiBJdGVtVHlwZSBpcyBubyBsb25nZXIgdXNlZnVsIGFzIGl0IGlzIGN1cnJlbnRseSBiZWluZyB1c2VkLiBUaGUgcGxhY2VzXG4vLyAgICAgICB3aGVyZSBpdCBpcyB1c2VkIHNob3VsZCBiZSByZWZhY3RvcmVkIHRvIHVzZSB0aGUgY2xhc3MgY29uc3RhbnQgaW5zdGVhZFxuLy8gICAgICAgYW5kIEl0ZW0gc2hvdWxkIGJlIG1hZGUgaW50byBhbiBhYnN0cmFjdCBjbGFzcy5cbmV4cG9ydCBjb25zdCBlbnVtIEl0ZW1UeXBlIHtcbiAgQk9UVExFLFxuICBGSVJFLFxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJdGVtIHtcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBzeW1ib2w7XG5cbiAgcHVibGljIHR5cGU6IEl0ZW1UeXBlO1xuICBwdWJsaWMgeDogbnVtYmVyO1xuICBwdWJsaWMgeTogbnVtYmVyO1xuICBwdWJsaWMgaGVsZDogYm9vbGVhbjtcbiAgcHVibGljIHVzZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBjb2xsZWN0aWJsZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcih0eXBlOiBJdGVtVHlwZSwgeDogbnVtYmVyLCB5OiBudW1iZXIsIGNvbGxlY3RpYmxlID0gdHJ1ZSkge1xuICAgIHRoaXMuaWQgPSBTeW1ib2woKTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgICB0aGlzLmhlbGQgPSBmYWxzZTtcbiAgICB0aGlzLnVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNvbGxlY3RpYmxlID0gY29sbGVjdGlibGU7XG4gIH1cblxuICB1c2UobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICB0aGlzLnVzZWQgPSB0cnVlO1xuICB9XG5cbiAgZHJvcChsb2NhbDogTXVkbWFuQmxhY2tib2FyZCwgd29ybGQ6IE11ZHdvcmxkQmxhY2tib2FyZCk6IHZvaWQge1xuICAgIHRoaXMuaGVsZCA9IGZhbHNlO1xuICAgIHRoaXMueCA9IGxvY2FsLng7XG4gICAgdGhpcy55ID0gbG9jYWwueTtcbiAgfVxuXG4gIG1vdmVUbyh4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMueCA9IHg7XG4gICAgdGhpcy55ID0geTtcbiAgfVxuXG4gIHJlZnVyYmlzaCgpOiB2b2lkIHtcbiAgICAvLyB0aGlzLnVzZWRBdCA9IG51bGw7XG4gICAgdGhpcy51c2VkID0gZmFsc2U7XG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBmID0gTWF0aC5mbG9vcjtcbmV4cG9ydCBjb25zdCBjID0gTWF0aC5jZWlsO1xuZXhwb3J0IGNvbnN0IHJhbmQgPSBNYXRoLnJhbmRvbTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRCZXR3ZWVuKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikge1xuICByZXR1cm4gbWluICsgKHJhbmQoKSAqIChtYXggLSBtaW4pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvdW5kKHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgdmFsdWUpKTtcbn1cbiIsImltcG9ydCBNdWRtYW5CbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZG1hbkJsYWNrYm9hcmRcIjtcbmltcG9ydCBNdWR3b3JsZEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkd29ybGRCbGFja2JvYXJkXCI7XG5pbXBvcnQgSXRlbSwgeyBJdGVtVHlwZSB9IGZyb20gXCJAL21vZGVscy9JdGVtXCI7XG5pbXBvcnQgeyBib3VuZCB9IGZyb20gXCJAL3V0aWxpdGllcy9tYXRoXCI7XG5cbmV4cG9ydCBjb25zdCBlbnVtIEZsdWlkVHlwZSB7XG4gIEFJUixcbiAgV0FURVIsXG59XG5cbi8vIFRoaXMgbWlnaHQgYmUgYSBiYWQgaWRlYVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm90dGxlIGV4dGVuZHMgSXRlbSB7XG4gIHB1YmxpYyBmaWxsZWRXaXRoOiBGbHVpZFR5cGU7XG4gIHB1YmxpYyB2b2x1bWU6IG51bWJlcjtcblxuICBwcml2YXRlIF9jb250ZW50ID0gMDtcblxuICBjb25zdHJ1Y3RvcihmaWxsZWRXaXRoOiBGbHVpZFR5cGUsIHg6IG51bWJlciwgeTogbnVtYmVyLCB2b2x1bWUgPSAxMDAsIGNvbnRlbnQgPSAxMDApIHtcbiAgICBzdXBlcihJdGVtVHlwZS5CT1RUTEUsIHgsIHkpO1xuICAgIHRoaXMuZmlsbGVkV2l0aCA9IGZpbGxlZFdpdGg7XG4gICAgdGhpcy52b2x1bWUgPSB2b2x1bWU7XG4gICAgdGhpcy5jb250ZW50ID0gY29udGVudDtcbiAgfVxuXG4gIGdldCBjb250ZW50KCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9jb250ZW50IH1cbiAgc2V0IGNvbnRlbnQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2NvbnRlbnQgPSBib3VuZCh2YWx1ZSwgMCwgdGhpcy52b2x1bWUpO1xuICAgIGlmICh0aGlzLl9jb250ZW50ID09PSAwKSB0aGlzLmZpbGxlZFdpdGggPSBGbHVpZFR5cGUuQUlSO1xuICB9XG5cbiAgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbnRlbnQgPT09IDAgfHwgdGhpcy5maWxsZWRXaXRoID09PSBGbHVpZFR5cGUuQUlSIH1cbiAgZ2V0IGhhc0NvbnRlbnQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmlzRW1wdHkgfVxuICBnZXQgaXNGdWxsKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb250ZW50ID09PSB0aGlzLnZvbHVtZSAmJiB0aGlzLmZpbGxlZFdpdGggIT09IEZsdWlkVHlwZS5BSVIgfVxuICBnZXQgcGVyY2VudEZ1bGwoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuY29udGVudCAvIHRoaXMudm9sdW1lIH1cblxuICBjYW5BZGQoaXRlbVR5cGU6IEZsdWlkVHlwZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc0Z1bGwgJiYgKGl0ZW1UeXBlID09PSB0aGlzLmZpbGxlZFdpdGggfHwgdGhpcy5maWxsZWRXaXRoID09PSBGbHVpZFR5cGUuQUlSKTtcbiAgfVxuXG4gIC8vIENhcmVmdWw7IHRoaXMgd2lsbCBkdW1wIG91dCBhbnkgcmVtYWluaW5nIGNvbnRlbnQgb2YgYSBkaWZmZXJlbnQgdHlwZVxuICAvLyBiZWZvcmUgZmlsbGluZyB3aXRoIHRoZSBnaXZlbiB0eXBlLCBpZiBhbnkgc3VjaCBjb250ZW50IGV4aXN0cy5cbiAgZmlsbFdpdGgoaXRlbVR5cGU6IEZsdWlkVHlwZSwgYW1vdW50PzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhbkFkZChpdGVtVHlwZSkpIHRoaXMuZHVtcCgpO1xuXG4gICAgdGhpcy5maWxsZWRXaXRoID0gaXRlbVR5cGU7XG4gICAgY29uc3QgaW5pdGlhbENvbnRlbnQgPSB0aGlzLmlzRW1wdHkgPyAwIDogdGhpcy5jb250ZW50OyAvLyBpbiBjYXNlIGl0J3MgZmlsbGVkIHdpdGggbm9uLXplcm8gY29udGVudCBvZiBhaXJcbiAgICBjb25zdCBjb250ZW50VG9BZGQgPSBhbW91bnQgPz8gdGhpcy52b2x1bWU7IC8vIGlmIG5vIGFtb3VudCB3YXMgZ2l2ZW4sIGZpbGwgJ2VyIHVwXG4gICAgdGhpcy5jb250ZW50ID0gaW5pdGlhbENvbnRlbnQgKyBjb250ZW50VG9BZGQ7XG4gIH1cblxuICBkdW1wKCk6IHZvaWQge1xuICAgIHRoaXMuY29udGVudCA9IDA7XG4gICAgdGhpcy5maWxsZWRXaXRoID0gRmx1aWRUeXBlLkFJUjsgLy8gaW1wbGllZCBieSBwcmV2aW91cyBsaW5lLCBidXQgd2hhdGV2ZXJcbiAgfVxuXG4gIHJlc2l6ZSh2b2x1bWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudm9sdW1lID0gdm9sdW1lO1xuICAgIHRoaXMuY29udGVudCA9IHRoaXMuY29udGVudDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWFzc2lnblxuICB9XG5cbiAgdXNlKGxvY2FsOiBNdWRtYW5CbGFja2JvYXJkLCB3b3JsZDogTXVkd29ybGRCbGFja2JvYXJkKTogdm9pZCB7XG4gICAgLy8gaWYgKHRoaXMuaXNFbXB0eSkgcmV0dXJuO1xuXG4gICAgc3dpdGNoICh0aGlzLmZpbGxlZFdpdGgpIHtcbiAgICAgIGNhc2UgRmx1aWRUeXBlLkFJUjogYnJlYWs7XG4gICAgICBjYXNlIEZsdWlkVHlwZS5XQVRFUjoge1xuICAgICAgICBjb25zdCBvbGRIeWRyYXRpb24gPSBsb2NhbC5kYXRhLmh5ZHJhdGlvbjtcbiAgICAgICAgbG9jYWwuaHlkcmF0ZSh0aGlzLmNvbnRlbnQpO1xuICAgICAgICBjb25zdCBuZXdIeWRyYXRpb24gPSBsb2NhbC5kYXRhLmh5ZHJhdGlvbjtcbiAgICAgICAgY29uc3QgaHlkcmF0aW9uQW1vdW50ID0gbmV3SHlkcmF0aW9uIC0gb2xkSHlkcmF0aW9uO1xuICAgICAgICB0aGlzLmNvbnRlbnQgLT0gaHlkcmF0aW9uQW1vdW50O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIGNhc2UgRmx1aWRUeXBlLkFMQ09IT0w6IHtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICAvLyB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNFbXB0eSkgdGhpcy51c2VkID0gdHJ1ZTtcblxuICAgIC8vIFRPRE86IHJlbW92ZVxuICAgIC8vIFRPRE86IHJlbW92ZVxuICAgIC8vIFRPRE86IHJlbW92ZVxuICAgIC8vIFRPRE86IHJlbW92ZVxuICAgIC8vIFRPRE86IHJlbW92ZVxuICAgIC8vIFRPRE86IHJlbW92ZVxuICAgIC8vIHRoaXMuZHJvcChsb2NhbCwgd29ybGQpO1xuICB9XG59XG4iLCJpbXBvcnQgTXVkbWFuQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWRtYW5CbGFja2JvYXJkXCI7XG5pbXBvcnQgTXVkd29ybGRCbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZHdvcmxkQmxhY2tib2FyZFwiO1xuaW1wb3J0IEl0ZW0sIHsgSXRlbVR5cGUgfSBmcm9tIFwiQC9tb2RlbHMvSXRlbVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaXJlIGV4dGVuZHMgSXRlbSB7XG4gIGNvbnN0cnVjdG9yKHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgc3VwZXIoSXRlbVR5cGUuRklSRSwgeCwgeSwgZmFsc2UpO1xuICB9XG5cbiAgdXNlKGxvY2FsOiBNdWRtYW5CbGFja2JvYXJkLCB3b3JsZDogTXVkd29ybGRCbGFja2JvYXJkKTogdm9pZCB7XG4gICAgc3VwZXIudXNlKGxvY2FsLCB3b3JsZCk7IC8vIGluIGNhc2UgdGhlcmUncyBvdGhlciBzaGl0IHRoYXQgc2hvdWxkIGhhcHBlbiwgYnV0Li4uXG4gICAgdGhpcy5yZWZ1cmJpc2goKTsgLy8gLi4ud2UgZG9uJ3Qgd2FudCB0byBtYXJrIGEgZmlyZSBhcyBcInVzZWQuXCJcblxuICAgIGxvY2FsLmRhdGEuc2l0dGluZyA9IHRydWU7XG4gICAgbG9jYWwuZmFjZSh0aGlzLngsIHRoaXMueSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IGYsIHJhbmQgfSBmcm9tIFwiQC91dGlsaXRpZXMvbWF0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZUluUGxhY2U8VD4obGlzdDogVFtdKTogVFtdIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgaiA9IGkgKyBmKHJhbmQoKSAqIChsaXN0Lmxlbmd0aCAtIGkpKTtcbiAgICBjb25zdCBpdGVtID0gbGlzdFtpXTtcbiAgICBsaXN0W2ldID0gbGlzdFtqXTtcbiAgICBsaXN0W2pdID0gaXRlbTtcbiAgfVxuXG4gIHJldHVybiBsaXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2h1ZmZsZTxUPihsaXN0OiBUW10pOiBUW10ge1xuICByZXR1cm4gc2h1ZmZsZUluUGxhY2UoWy4uLmxpc3RdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJldmVyc2VGaW5kPFQ+KGxpc3Q6IFRbXSwgbWFwcGVyOiAoaXRlbTogVCwgaW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbik6IFQgfCB1bmRlZmluZWQge1xuICBmb3IgKGxldCBpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChtYXBwZXIobGlzdFtpXSwgaSkpIHJldHVybiBsaXN0W2ldO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBwZWRTZXRGb3I8S2V5LCBWYWx1ZT4obWFwOiBNYXA8S2V5LCBTZXQ8VmFsdWU+Piwga2V5OiBLZXkpOiBTZXQ8VmFsdWU+IHtcbiAgbGV0IHZhbHVlcyA9IG1hcC5nZXQoa2V5KTtcblxuICBpZiAoIXZhbHVlcykge1xuICAgIHZhbHVlcyA9IG5ldyBTZXQoKTtcbiAgICBtYXAuc2V0KGtleSwgdmFsdWVzKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb01hcHBlZFNldEZvcjxLZXksIFZhbHVlPihtYXA6IE1hcDxLZXksIFNldDxWYWx1ZT4+LCBrZXk6IEtleSwgdmFsdWU6IFZhbHVlKTogdm9pZCB7XG4gIG1hcHBlZFNldEZvcihtYXAsIGtleSkuYWRkKHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcHBlZEFycmF5Rm9yPEtleSwgVmFsdWU+KG1hcDogTWFwPEtleSwgVmFsdWVbXT4sIGtleTogS2V5KTogVmFsdWVbXSB7XG4gIGxldCB2YWx1ZXMgPSBtYXAuZ2V0KGtleSk7XG5cbiAgaWYgKCF2YWx1ZXMpIHtcbiAgICB2YWx1ZXMgPSBbXTtcbiAgICBtYXAuc2V0KGtleSwgdmFsdWVzKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb01hcHBlZEFycmF5Rm9yPEtleSwgVmFsdWU+KG1hcDogTWFwPEtleSwgVmFsdWVbXT4sIGtleTogS2V5LCB2YWx1ZTogVmFsdWUpOiB2b2lkIHtcbiAgbWFwcGVkQXJyYXlGb3IobWFwLCBrZXkpLnB1c2godmFsdWUpO1xufVxuIiwiLy8gTk9URTogQ29vcmRpbmF0ZSBzeXN0ZW0gaXMgbG9ja2VkIHRvIC0zMjc2OC4uLiszMjc2NyBmb3IgeCBhbmQgeSBkaW1lbnNpb25zXG4vLyBUT0RPOiBSZWNvbnNpZGVyIHRoaXNcblxuaW1wb3J0IHsgZiwgcmFuZCwgcmFuZEJldHdlZW4gfSBmcm9tIFwiQC91dGlsaXRpZXMvbWF0aFwiO1xuXG5leHBvcnQgdHlwZSBDb29yZHMgPSBJbnQxNkFycmF5O1xuZXhwb3J0IGludGVyZmFjZSBQb3NpdGlvbiB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29vcmRzKHg6IG51bWJlciwgeTogbnVtYmVyKTogQ29vcmRzIHtcbiAgY29uc3QgY29vcmRzID0gbmV3IEludDE2QXJyYXkoMik7XG4gIGNvb3Jkc1swXSA9IHg7XG4gIGNvb3Jkc1sxXSA9IHk7XG4gIHJldHVybiBjb29yZHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUJldHdlZW4ob3JpZ2luWDogbnVtYmVyLCBvcmlnaW5ZOiBudW1iZXIsIHRhcmdldFg6IG51bWJlciwgdGFyZ2V0WTogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgZHggPSB0YXJnZXRYIC0gb3JpZ2luWDtcbiAgY29uc3QgZHkgPSB0YXJnZXRZIC0gb3JpZ2luWTtcbiAgcmV0dXJuIE1hdGguc3FydCgoZHggKiogMikgKyAoZHkgKiogMikpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmVjdG9yQmV0d2VlbihvcmlnaW5YOiBudW1iZXIsIG9yaWdpblk6IG51bWJlciwgdGFyZ2V0WDogbnVtYmVyLCB0YXJnZXRZOiBudW1iZXIpOiBDb29yZHMge1xuICByZXR1cm4gY29vcmRzKHRhcmdldFggLSBvcmlnaW5YLCB0YXJnZXRZIC0gb3JpZ2luWSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZXN0UG9zaXRpb25lZDxUIGV4dGVuZHMgUG9zaXRpb24+KHg6IG51bWJlciwgeTogbnVtYmVyLCBsaXN0OiBUW10pOiBUIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgbGV0IGNsb3Nlc3RJdGVtID0gbGlzdFswXTtcbiAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSByZXR1cm4gY2xvc2VzdEl0ZW07XG5cbiAgbGV0IGNsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2Vlbih4LCB5LCBjbG9zZXN0SXRlbS54LCBjbG9zZXN0SXRlbS55KTtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBpdGVtID0gbGlzdFtpXTtcbiAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2Vlbih4LCB5LCBpdGVtLngsIGl0ZW0ueSk7XG5cbiAgICBpZiAoZGlzdGFuY2UgPCBjbG9zZXN0RGlzdGFuY2UpIHtcbiAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgY2xvc2VzdEl0ZW0gPSBpdGVtO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbG9zZXN0SXRlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluc2lkZVJlY3QoXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICBvcmlnaW5YOiBudW1iZXIsXG4gIG9yaWdpblk6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIHdpZHRoOiBudW1iZXIsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIG9yaWdpblggPD0geFxuICAgICYmIHggPD0gKG9yaWdpblggKyB3aWR0aClcbiAgICAmJiBvcmlnaW5ZIDw9IHlcbiAgICAmJiB5IDw9IChvcmlnaW5ZICsgaGVpZ2h0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVBvaW50SW5DaXJjbGUoeDogbnVtYmVyLCB5OiBudW1iZXIsIHJhZGl1czogbnVtYmVyKTogQ29vcmRzO1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVBvaW50SW5DaXJjbGUoeDogbnVtYmVyLCB5OiBudW1iZXIsIG1pblJhZGl1czogbnVtYmVyLCBtYXhSYWRpdXM6IG51bWJlcik6IENvb3JkcztcbmV4cG9ydCBmdW5jdGlvbiByYW5kb21Qb2ludEluQ2lyY2xlKHg6IG51bWJlciwgeTogbnVtYmVyLCBtaW5SYWRpdXM6IG51bWJlciwgbWF4UmFkaXVzPzogbnVtYmVyKTogQ29vcmRzIHtcbiAgaWYgKCFtYXhSYWRpdXMpIHtcbiAgICBtYXhSYWRpdXMgPSBtaW5SYWRpdXM7XG4gICAgbWluUmFkaXVzID0gMDtcbiAgfVxuXG4gIC8vIEJhc2ljIFwiUmFuZG9tIHBvaW50IGluIGEgY2lyY2xlXCIgYWRhcHRlZCBmcm9tIHRoaXMgZ3JlYXQgU08gYW5zd2VyOlxuICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTA3NDY0MDkvNzQ2OTY5MVxuICAvL1xuICAvLyBcIlJhbmRvbSBwb2ludCBiZXR3ZWVuIHR3byBjb25jZW50cmljIGNpcmNsZXNcIiBhZGFwdGVkIGZyb20uLi4gbXkgdGhyb2JiaW5nXG4gIC8vIGhlYWQuIEhvbHkgc2hpdCwgdGhpcyB0b29rIGEgd2hpbGUgdG8gZmlndXJlIG91dC5cbiAgLy9cbiAgY29uc3QgcmFuZEFuZ2xlID0gcmFuZCgpICogKDIgKiBNYXRoLlBJKTtcbiAgY29uc3QgbWluUmFkaXVzUGVyY2VudCA9IG1pblJhZGl1cyAvIG1heFJhZGl1cztcbiAgY29uc3QgcmFuZFJhZGl1cyA9IG1heFJhZGl1cyAqIE1hdGguc3FydChyYW5kQmV0d2VlbihtaW5SYWRpdXNQZXJjZW50ICoqIDIsIDEpKTtcblxuICByZXR1cm4gY29vcmRzKFxuICAgIGYoeCArIChyYW5kUmFkaXVzICogTWF0aC5jb3MocmFuZEFuZ2xlKSkpLFxuICAgIGYoeSArIChyYW5kUmFkaXVzICogTWF0aC5zaW4ocmFuZEFuZ2xlKSkpLFxuICApO1xufVxuIiwiaW1wb3J0IEl0ZW0sIHsgSXRlbVR5cGUgfSBmcm9tIFwiQC9tb2RlbHMvSXRlbVwiO1xuaW1wb3J0IEJvdHRsZSwgeyBGbHVpZFR5cGUgfSBmcm9tIFwiQC9tb2RlbHMvaXRlbXMvY29udGFpbmVycy9Cb3R0bGVcIjtcbmltcG9ydCBGaXJlIGZyb20gXCJAL21vZGVscy9pdGVtcy9GaXJlXCI7XG4vLyBpbXBvcnQgV2F0ZXIgZnJvbSBcIkAvbW9kZWxzL2l0ZW1zL1dhdGVyXCI7XG5pbXBvcnQgeyBtYXBwZWRBcnJheUZvciwgbWFwcGVkU2V0Rm9yIH0gZnJvbSBcIkAvdXRpbGl0aWVzL2NvbGxlY3Rpb25zXCI7XG5pbXBvcnQgeyBkaXN0YW5jZUJldHdlZW4gfSBmcm9tIFwiQC91dGlsaXRpZXMvZ2VvXCI7XG5cbnR5cGUgSXRlbUNvbnN0cnVjdG9yPEkgZXh0ZW5kcyBJdGVtID0gSXRlbT4gPSB7IG5ldyguLi5hcmdzOiBhbnlbXSk6IEkgfTtcbnR5cGUgR3JhdmV5YXJkPEkgZXh0ZW5kcyBJdGVtID0gSXRlbT4gPSBNYXA8SXRlbUNvbnN0cnVjdG9yPEk+LCBJW10+O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJdGVtRGF0YWJhc2Uge1xuICBwcml2YXRlIGl0ZW1zQnlJZDogTWFwPHN5bWJvbCwgSXRlbT47XG4gIHByaXZhdGUgaWRzQnlUeXBlOiBNYXA8SXRlbVR5cGUsIFNldDxzeW1ib2w+PjtcbiAgcHJpdmF0ZSBncmF2ZXlhcmQ6IEdyYXZleWFyZDsgLy8gcG9vbCBmb3IgcmUtdXNpbmcgb2JqZWN0c1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaXRlbXNCeUlkID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuaWRzQnlUeXBlID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuZ3JhdmV5YXJkID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGQoaXRlbTogSXRlbSk6IHZvaWQge1xuICAgIHRoaXMuaXRlbXNCeUlkLnNldChpdGVtLmlkLCBpdGVtKTtcbiAgICB0aGlzLmlkc0ZvcihpdGVtLnR5cGUpLmFkZChpdGVtLmlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlKGl0ZW06IEl0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1zQnlJZC5kZWxldGUoaXRlbS5pZCk7XG4gICAgdGhpcy5pZHNGb3IoaXRlbS50eXBlKS5kZWxldGUoaXRlbS5pZCk7XG4gIH1cblxuICBraWxsPEkgZXh0ZW5kcyBJdGVtPihpdGVtOiBJKTogdm9pZCB7XG4gICAgdGhpcy5ncmF2ZXlhcmRGb3IoaXRlbS5jb25zdHJ1Y3RvciBhcyBJdGVtQ29uc3RydWN0b3I8ST4pLnB1c2goaXRlbSk7XG4gICAgdGhpcy5kZWxldGUoaXRlbSk7XG4gIH1cblxuICByZXN1cnJlY3Q8SSBleHRlbmRzIEl0ZW0+KGl0ZW1DbGFzczogSXRlbUNvbnN0cnVjdG9yPEk+KTogSSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgem9tYmllID0gdGhpcy5ncmF2ZXlhcmRGb3IoaXRlbUNsYXNzKS5wb3AoKTtcbiAgICBpZiAoIXpvbWJpZSkgcmV0dXJuO1xuXG4gICAgem9tYmllLnJlZnVyYmlzaCgpO1xuICAgIHpvbWJpZS5oZWxkID0gZmFsc2U7XG4gICAgdGhpcy5hZGQoem9tYmllKTtcbiAgICByZXR1cm4gem9tYmllO1xuICB9XG5cbiAgY3JlYXRlQm90dGxlKGZpbGxlZFdpdGg6IEZsdWlkVHlwZSwgeDogbnVtYmVyLCB5OiBudW1iZXIsIHZvbHVtZT86IG51bWJlciwgY29udGVudD86IG51bWJlcik6IEJvdHRsZSB7XG4gICAgbGV0IGJvdHRsZSA9IHRoaXMucmVzdXJyZWN0KEJvdHRsZSk7XG5cbiAgICBpZiAoIWJvdHRsZSkge1xuICAgICAgYm90dGxlID0gbmV3IEJvdHRsZShmaWxsZWRXaXRoLCB4LCB5LCB2b2x1bWUsIGNvbnRlbnQpO1xuICAgICAgdGhpcy5hZGQoYm90dGxlKTtcbiAgICAgIHJldHVybiBib3R0bGU7XG4gICAgfVxuXG4gICAgYm90dGxlLm1vdmVUbyh4LCB5KTtcbiAgICBib3R0bGUuZHVtcCgpO1xuICAgIGlmICh2b2x1bWUgfHwgdm9sdW1lID09PSAwKSBib3R0bGUucmVzaXplKHZvbHVtZSk7XG4gICAgaWYgKGNvbnRlbnQgfHwgY29udGVudCA9PT0gMCkgYm90dGxlLmZpbGxXaXRoKGZpbGxlZFdpdGgsIGNvbnRlbnQpO1xuXG4gICAgcmV0dXJuIGJvdHRsZTtcbiAgfVxuXG4gIC8vIGNyZWF0ZVdhdGVyKHZvbHVtZTogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlcik6IFdhdGVyIHtcbiAgLy8gICBjb25zdCB6b21iaWUgPSB0aGlzLnJlc3VycmVjdChXYXRlcik7XG5cbiAgLy8gICBpZiAoIXpvbWJpZSkge1xuICAvLyAgICAgY29uc3Qgd2F0ZXIgPSBuZXcgV2F0ZXIodm9sdW1lLCB4LCB5KTtcbiAgLy8gICAgIHRoaXMuYWRkKHdhdGVyKTtcbiAgLy8gICAgIHJldHVybiB3YXRlcjtcbiAgLy8gICB9XG5cbiAgLy8gICB6b21iaWUudm9sdW1lID0gdm9sdW1lO1xuICAvLyAgIHpvbWJpZS54ID0geDtcbiAgLy8gICB6b21iaWUueSA9IHk7XG4gIC8vICAgcmV0dXJuIHpvbWJpZTtcbiAgLy8gfVxuXG4gIGNyZWF0ZUZpcmUoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBGaXJlIHtcbiAgICBjb25zdCB6b21iaWUgPSB0aGlzLnJlc3VycmVjdChGaXJlKTtcblxuICAgIGlmICghem9tYmllKSB7XG4gICAgICBjb25zdCBmaXJlID0gbmV3IEZpcmUoeCwgeSk7XG4gICAgICB0aGlzLmFkZChmaXJlKTtcbiAgICAgIHJldHVybiBmaXJlO1xuICAgIH1cblxuICAgIHpvbWJpZS54ID0geDtcbiAgICB6b21iaWUueSA9IHk7XG4gICAgcmV0dXJuIHpvbWJpZTtcbiAgfVxuXG4gIHByaXZhdGUgaWRzRm9yKGl0ZW1UeXBlOiBJdGVtVHlwZSk6IFNldDxzeW1ib2w+IHtcbiAgICByZXR1cm4gbWFwcGVkU2V0Rm9yKHRoaXMuaWRzQnlUeXBlLCBpdGVtVHlwZSk7XG4gIH1cblxuICBncmF2ZXlhcmRGb3I8SSBleHRlbmRzIEl0ZW0+KGl0ZW1DbGFzczogSXRlbUNvbnN0cnVjdG9yPEk+KTogSVtdIHtcbiAgICByZXR1cm4gbWFwcGVkQXJyYXlGb3IodGhpcy5ncmF2ZXlhcmQgYXMgR3JhdmV5YXJkPEk+LCBpdGVtQ2xhc3MpO1xuICB9XG5cbiAgZmluZChpZDogc3ltYm9sKTogSXRlbSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXNCeUlkLmdldChpZCk7XG4gICAgaWYgKCFpdGVtKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBpdGVtIHJlZ2lzdGVyZWQgZm9yIHRoZSBnaXZlbiBJRFwiKTtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIGZvckVhY2hPZlR5cGUoaXRlbVR5cGU6IEl0ZW1UeXBlLCBtYXBwZXI6IChpdGVtOiBJdGVtKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5pZHNGb3IoaXRlbVR5cGUpLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICBtYXBwZXIodGhpcy5maW5kKGlkKSk7XG4gICAgfSk7XG4gIH1cblxuICBmaW5kT2ZUeXBlKGl0ZW1UeXBlOiBJdGVtVHlwZSwgdGVzdDogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW4pOiBJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpZEl0ZXJhdG9yID0gdGhpcy5pZHNGb3IoaXRlbVR5cGUpLnZhbHVlcygpO1xuICAgIGxldCBlbnRyeSA9IGlkSXRlcmF0b3IubmV4dCgpO1xuXG4gICAgd2hpbGUgKCFlbnRyeS5kb25lKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5maW5kKGVudHJ5LnZhbHVlKTtcbiAgICAgIGlmICh0ZXN0KGl0ZW0pKSByZXR1cm4gaXRlbTtcblxuICAgICAgZW50cnkgPSBpZEl0ZXJhdG9yLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICAvLyBDYXJlZnVsOyB0aGlzIGdvZXMgdGhyb3VnaCBfYWxsXyBpdGVtc1xuICBmaW5kSW5BbGxJdGVtcyh0ZXN0OiAoaXRlbTogSXRlbSkgPT4gYm9vbGVhbik6IEl0ZW0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGl0ZW1JdGVyYXRvciA9IHRoaXMuaXRlbXNCeUlkLnZhbHVlcygpO1xuICAgIGxldCBlbnRyeSA9IGl0ZW1JdGVyYXRvci5uZXh0KCk7XG5cbiAgICB3aGlsZSAoIWVudHJ5LmRvbmUpIHtcbiAgICAgIGlmICh0ZXN0KGVudHJ5LnZhbHVlKSkgcmV0dXJuIGVudHJ5LnZhbHVlO1xuXG4gICAgICBlbnRyeSA9IGl0ZW1JdGVyYXRvci5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgZmluZENsb3Nlc3QoaXRlbVR5cGU6IEl0ZW1UeXBlLCB4OiBudW1iZXIsIHk6IG51bWJlciwgZmlsdGVyPzogKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW4pOiBJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgY2xvc2VzdEl0ZW06IEl0ZW0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGNsb3Nlc3REaXN0YW5jZTogbnVtYmVyO1xuXG4gICAgY29uc3QgaXRlbU9uU3BvdCA9IHRoaXMuZmluZE9mVHlwZShpdGVtVHlwZSwgKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLmhlbGQgfHwgKGZpbHRlciAmJiAhZmlsdGVyKGl0ZW0pKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGl0ZW0ueCA9PT0geCAmJiBpdGVtLnkgPT09IHkpIHJldHVybiB0cnVlO1xuXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2Vlbih4LCB5LCBpdGVtLngsIGl0ZW0ueSk7XG4gICAgICBjbG9zZXN0SXRlbSA/Pz0gaXRlbTtcbiAgICAgIGNsb3Nlc3REaXN0YW5jZSA/Pz0gZGlzdGFuY2U7XG5cbiAgICAgIGlmIChkaXN0YW5jZSA8IGNsb3Nlc3REaXN0YW5jZSkge1xuICAgICAgICBjbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgICAgY2xvc2VzdEl0ZW0gPSBpdGVtO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXRlbU9uU3BvdCA/PyBjbG9zZXN0SXRlbTtcbiAgfVxuXG4gIC8vIENhcmVmdWw7IHRoaXMgZ29lcyB0aHJvdWdoIF9hbGxfIGl0ZW1zXG4gIGl0ZW1BdCh4OiBudW1iZXIsIHk6IG51bWJlciwgcmFkaXVzOiBudW1iZXIsIGZpbHRlcj86IChpdGVtOiBJdGVtKSA9PiBib29sZWFuKTogSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGNsb3Nlc3RJdGVtOiBJdGVtIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBjbG9zZXN0RGlzdGFuY2UgPSByYWRpdXMgKyAxOyAvLyBpIGFtIGdlbWl1c1xuXG4gICAgY29uc3QgaXRlbU9uU3BvdCA9IHRoaXMuZmluZEluQWxsSXRlbXMoKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLmhlbGQgfHwgKGZpbHRlciAmJiAhZmlsdGVyKGl0ZW0pKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGl0ZW0ueCA9PT0geCAmJiBpdGVtLnkgPT09IHkpIHJldHVybiB0cnVlO1xuXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2Vlbih4LCB5LCBpdGVtLngsIGl0ZW0ueSk7XG5cbiAgICAgIGlmIChkaXN0YW5jZSA8IGNsb3Nlc3REaXN0YW5jZSkge1xuICAgICAgICBjbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgICAgY2xvc2VzdEl0ZW0gPSBpdGVtO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXRlbU9uU3BvdCA/PyBjbG9zZXN0SXRlbTtcbiAgfVxufVxuIiwiLy8gSW5zcGlyZWQgYnkgdGhlIGBHcmlkYCBjbGFzcyBkZXNjcmliZWQgaGVyZTpcbi8vIGh0dHBzOi8vbWVkaXVtLmNvbS9AemFuZGFxby9zdHJ1Y3R1cmFlLWRhdGEtc3RydWN0dXJlcy1mb3ItaGlnaC1wZXJmb3JtYW5jZS1qYXZhc2NyaXB0LTliN2RhNGM3M2Y4XG5cbmltcG9ydCB7IGMgfSBmcm9tIFwiQC91dGlsaXRpZXMvbWF0aFwiO1xuXG50eXBlIFR5cGVkQXJyYXkgPSBJbnQ4QXJyYXlcbiAgfCBVaW50OEFycmF5XG4gIHwgVWludDhDbGFtcGVkQXJyYXlcbiAgfCBJbnQxNkFycmF5XG4gIHwgVWludDE2QXJyYXlcbiAgfCBJbnQzMkFycmF5XG4gIHwgVWludDMyQXJyYXlcbiAgfCBGbG9hdDMyQXJyYXlcbiAgfCBGbG9hdDY0QXJyYXk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdyaWQ8VCBleHRlbmRzIFR5cGVkQXJyYXkgPSBUeXBlZEFycmF5PiB7XG4gIHB1YmxpYyByZWFkb25seSByb3dDb3VudDogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgY29sQ291bnQ6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IHBhZGRlZENvbENvdW50OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBjZWxsczogVDtcbiAgcHJpdmF0ZSBjb2xQb3dlcjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHJvd0NvdW50OiBudW1iZXIsIGNvbENvdW50OiBudW1iZXIsIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcjogeyBuZXcgKC4uLmFyZ3M6IGFueVtdKTogVCB9KSB7XG4gICAgdGhpcy5yb3dDb3VudCA9IHJvd0NvdW50O1xuICAgIHRoaXMuY29sQ291bnQgPSBjb2xDb3VudDtcblxuICAgIC8vIFNuYXBwaW5nIHRoZSBcInJlYWxcIiBjb2x1bW4gY291bnQgdG8gcG93ZXJzIG9mIDIgc28gd2UgY2FuIGRvIGJpdHdpc2VcbiAgICAvLyBzaGlmdCBvcGVyYXRpb25zLi4uIHNvLCBlLmcuLCBhIGBjb2xDb3VudGAgb2YgMTAwIHdvdWxkIG1ha2UgdGhlIF9hY3R1YWxfXG4gICAgLy8gY29sdW1uIGNvdW50IDEyOC5cbiAgICB0aGlzLmNvbFBvd2VyID0gYyhNYXRoLmxvZzIoY29sQ291bnQpKTtcbiAgICB0aGlzLnBhZGRlZENvbENvdW50ID0gMSA8PCB0aGlzLmNvbFBvd2VyO1xuICAgIGNvbnN0IGNlbGxDb3VudCA9IHJvd0NvdW50IDw8IHRoaXMuY29sUG93ZXI7XG5cbiAgICB0aGlzLmNlbGxzID0gbmV3IFR5cGVkQXJyYXlDb25zdHJ1Y3RvcihjZWxsQ291bnQpO1xuICB9XG5cbiAgcm93QXRJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXggPj4gdGhpcy5jb2xQb3dlcjtcbiAgfVxuXG4gIGNvbEF0SW5kZXgoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4ICYgKHRoaXMucGFkZGVkQ29sQ291bnQgLSAxKTtcbiAgfVxuXG4gIGluZGV4QXQocm93OiBudW1iZXIsIGNvbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHJvdyA8PCB0aGlzLmNvbFBvd2VyKSArIGNvbDtcbiAgfVxuXG4gIHZhbHVlQXQocm93OiBudW1iZXIsIGNvbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXhBdChyb3csIGNvbCk7XG4gICAgcmV0dXJuIHRoaXMuY2VsbHNbaW5kZXhdO1xuICB9XG5cbiAgc2V0VmFsdWVBdChyb3c6IG51bWJlciwgY29sOiBudW1iZXIsIHZhbDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4QXQocm93LCBjb2wpO1xuICAgIHRoaXMuY2VsbHNbaW5kZXhdID0gdmFsO1xuICB9XG5cbiAgZGVsVmFsdWVBdChyb3c6IG51bWJlciwgY29sOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnNldFZhbHVlQXQocm93LCBjb2wsIDApO1xuICB9XG5cbiAgY2xlYXJWYWx1ZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jZWxscy5maWxsKDApO1xuICB9XG5cbiAgaW5jVmFsdWVBdChyb3c6IG51bWJlciwgY29sOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbmRleEF0KHJvdywgY29sKTtcbiAgICByZXR1cm4gKyt0aGlzLmNlbGxzW2luZGV4XTtcbiAgfVxuXG4gIGRlY1ZhbHVlQXQocm93OiBudW1iZXIsIGNvbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXhBdChyb3csIGNvbCk7XG4gICAgcmV0dXJuIC0tdGhpcy5jZWxsc1tpbmRleF07XG4gIH1cblxuICBlYWNoKG1hcHBlcjogKHJvdzogbnVtYmVyLCBjb2w6IG51bWJlciwgdmFsOiBudW1iZXIpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0aGlzLnJvd0NvdW50OyByb3crKykge1xuICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgdGhpcy5jb2xDb3VudDsgY29sKyspIHtcbiAgICAgICAgbWFwcGVyKHJvdywgY29sLCB0aGlzLnZhbHVlQXQocm93LCBjb2wpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaWxsKG1hcHBlcjogKHJvdzogbnVtYmVyLCBjb2w6IG51bWJlciwgdmFsOiBudW1iZXIpID0+IG51bWJlcik6IHZvaWQge1xuICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRoaXMucm93Q291bnQ7IHJvdysrKSB7XG4gICAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCB0aGlzLmNvbENvdW50OyBjb2wrKykge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaW5kZXhBdChyb3csIGNvbCk7XG4gICAgICAgIHRoaXMuY2VsbHNbaW5kZXhdID0gbWFwcGVyKHJvdywgY29sLCB0aGlzLmNlbGxzW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKlxuICogQSBmYXN0IGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb24gb2Ygc2ltcGxleCBub2lzZSBieSBKb25hcyBXYWduZXJcblxuQmFzZWQgb24gYSBzcGVlZC1pbXByb3ZlZCBzaW1wbGV4IG5vaXNlIGFsZ29yaXRobSBmb3IgMkQsIDNEIGFuZCA0RCBpbiBKYXZhLlxuV2hpY2ggaXMgYmFzZWQgb24gZXhhbXBsZSBjb2RlIGJ5IFN0ZWZhbiBHdXN0YXZzb24gKHN0ZWd1QGl0bi5saXUuc2UpLlxuV2l0aCBPcHRpbWlzYXRpb25zIGJ5IFBldGVyIEVhc3RtYW4gKHBlYXN0bWFuQGRyaXp6bGUuc3RhbmZvcmQuZWR1KS5cbkJldHRlciByYW5rIG9yZGVyaW5nIG1ldGhvZCBieSBTdGVmYW4gR3VzdGF2c29uIGluIDIwMTIuXG5cbiBDb3B5cmlnaHQgKGMpIDIwMjEgSm9uYXMgV2FnbmVyXG5cbiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiBTT0ZUV0FSRS5cbiAqL1xuY29uc3QgRjIgPSAwLjUgKiAoTWF0aC5zcXJ0KDMuMCkgLSAxLjApO1xuY29uc3QgRzIgPSAoMy4wIC0gTWF0aC5zcXJ0KDMuMCkpIC8gNi4wO1xuY29uc3QgRjMgPSAxLjAgLyAzLjA7XG5jb25zdCBHMyA9IDEuMCAvIDYuMDtcbmNvbnN0IEY0ID0gKE1hdGguc3FydCg1LjApIC0gMS4wKSAvIDQuMDtcbmNvbnN0IEc0ID0gKDUuMCAtIE1hdGguc3FydCg1LjApKSAvIDIwLjA7XG5jb25zdCBncmFkMyA9IG5ldyBGbG9hdDMyQXJyYXkoWzEsIDEsIDAsXG4gICAgLTEsIDEsIDAsXG4gICAgMSwgLTEsIDAsXG4gICAgLTEsIC0xLCAwLFxuICAgIDEsIDAsIDEsXG4gICAgLTEsIDAsIDEsXG4gICAgMSwgMCwgLTEsXG4gICAgLTEsIDAsIC0xLFxuICAgIDAsIDEsIDEsXG4gICAgMCwgLTEsIDEsXG4gICAgMCwgMSwgLTEsXG4gICAgMCwgLTEsIC0xXSk7XG5jb25zdCBncmFkNCA9IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDEsIDEsIDEsIDAsIDEsIDEsIC0xLCAwLCAxLCAtMSwgMSwgMCwgMSwgLTEsIC0xLFxuICAgIDAsIC0xLCAxLCAxLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSwgMSwgMCwgLTEsIC0xLCAtMSxcbiAgICAxLCAwLCAxLCAxLCAxLCAwLCAxLCAtMSwgMSwgMCwgLTEsIDEsIDEsIDAsIC0xLCAtMSxcbiAgICAtMSwgMCwgMSwgMSwgLTEsIDAsIDEsIC0xLCAtMSwgMCwgLTEsIDEsIC0xLCAwLCAtMSwgLTEsXG4gICAgMSwgMSwgMCwgMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAxLCAxLCAtMSwgMCwgLTEsXG4gICAgLTEsIDEsIDAsIDEsIC0xLCAxLCAwLCAtMSwgLTEsIC0xLCAwLCAxLCAtMSwgLTEsIDAsIC0xLFxuICAgIDEsIDEsIDEsIDAsIDEsIDEsIC0xLCAwLCAxLCAtMSwgMSwgMCwgMSwgLTEsIC0xLCAwLFxuICAgIC0xLCAxLCAxLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSwgMSwgMCwgLTEsIC0xLCAtMSwgMF0pO1xuLyoqIERldGVybWluaXN0aWMgc2ltcGxleCBub2lzZSBnZW5lcmF0b3Igc3VpdGFibGUgZm9yIDJELCAzRCBhbmQgNEQgc3BhY2VzLiAqL1xuZXhwb3J0IGNsYXNzIFNpbXBsZXhOb2lzZSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBgU2ltcGxleE5vaXNlYCBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGludm9sdmVzIHNvbWUgc2V0dXAuIFlvdSBjYW4gc2F2ZSBhIGZldyBjcHUgY3ljbGVzIGJ5IHJldXNpbmcgdGhlIHNhbWUgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHJhbmRvbU9yU2VlZCBBIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIG9yIGEgc2VlZCAoc3RyaW5nfG51bWJlcikuXG4gICAgICogRGVmYXVsdHMgdG8gTWF0aC5yYW5kb20gKHJhbmRvbSBpcnJlcHJvZHVjaWJsZSBpbml0aWFsaXphdGlvbikuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocmFuZG9tT3JTZWVkID0gTWF0aC5yYW5kb20pIHtcbiAgICAgICAgY29uc3QgcmFuZG9tID0gdHlwZW9mIHJhbmRvbU9yU2VlZCA9PSAnZnVuY3Rpb24nID8gcmFuZG9tT3JTZWVkIDogYWxlYShyYW5kb21PclNlZWQpO1xuICAgICAgICB0aGlzLnAgPSBidWlsZFBlcm11dGF0aW9uVGFibGUocmFuZG9tKTtcbiAgICAgICAgdGhpcy5wZXJtID0gbmV3IFVpbnQ4QXJyYXkoNTEyKTtcbiAgICAgICAgdGhpcy5wZXJtTW9kMTIgPSBuZXcgVWludDhBcnJheSg1MTIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUxMjsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnBlcm1baV0gPSB0aGlzLnBbaSAmIDI1NV07XG4gICAgICAgICAgICB0aGlzLnBlcm1Nb2QxMltpXSA9IHRoaXMucGVybVtpXSAlIDEyO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNhbXBsZXMgdGhlIG5vaXNlIGZpZWxkIGluIDIgZGltZW5zaW9uc1xuICAgICAqIEBwYXJhbSB4XG4gICAgICogQHBhcmFtIHlcbiAgICAgKiBAcmV0dXJucyBhIG51bWJlciBpbiB0aGUgaW50ZXJ2YWwgWy0xLCAxXVxuICAgICAqL1xuICAgIG5vaXNlMkQoeCwgeSkge1xuICAgICAgICBjb25zdCBwZXJtTW9kMTIgPSB0aGlzLnBlcm1Nb2QxMjtcbiAgICAgICAgY29uc3QgcGVybSA9IHRoaXMucGVybTtcbiAgICAgICAgbGV0IG4wID0gMDsgLy8gTm9pc2UgY29udHJpYnV0aW9ucyBmcm9tIHRoZSB0aHJlZSBjb3JuZXJzXG4gICAgICAgIGxldCBuMSA9IDA7XG4gICAgICAgIGxldCBuMiA9IDA7XG4gICAgICAgIC8vIFNrZXcgdGhlIGlucHV0IHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBzaW1wbGV4IGNlbGwgd2UncmUgaW5cbiAgICAgICAgY29uc3QgcyA9ICh4ICsgeSkgKiBGMjsgLy8gSGFpcnkgZmFjdG9yIGZvciAyRFxuICAgICAgICBjb25zdCBpID0gTWF0aC5mbG9vcih4ICsgcyk7XG4gICAgICAgIGNvbnN0IGogPSBNYXRoLmZsb29yKHkgKyBzKTtcbiAgICAgICAgY29uc3QgdCA9IChpICsgaikgKiBHMjtcbiAgICAgICAgY29uc3QgWDAgPSBpIC0gdDsgLy8gVW5za2V3IHRoZSBjZWxsIG9yaWdpbiBiYWNrIHRvICh4LHkpIHNwYWNlXG4gICAgICAgIGNvbnN0IFkwID0gaiAtIHQ7XG4gICAgICAgIGNvbnN0IHgwID0geCAtIFgwOyAvLyBUaGUgeCx5IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgICBjb25zdCB5MCA9IHkgLSBZMDtcbiAgICAgICAgLy8gRm9yIHRoZSAyRCBjYXNlLCB0aGUgc2ltcGxleCBzaGFwZSBpcyBhbiBlcXVpbGF0ZXJhbCB0cmlhbmdsZS5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggd2UgYXJlIGluLlxuICAgICAgICBsZXQgaTEsIGoxOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgKG1pZGRsZSkgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaikgY29vcmRzXG4gICAgICAgIGlmICh4MCA+IHkwKSB7XG4gICAgICAgICAgICBpMSA9IDE7XG4gICAgICAgICAgICBqMSA9IDA7XG4gICAgICAgIH0gLy8gbG93ZXIgdHJpYW5nbGUsIFhZIG9yZGVyOiAoMCwwKS0+KDEsMCktPigxLDEpXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgICAgajEgPSAxO1xuICAgICAgICB9IC8vIHVwcGVyIHRyaWFuZ2xlLCBZWCBvcmRlcjogKDAsMCktPigwLDEpLT4oMSwxKVxuICAgICAgICAvLyBBIHN0ZXAgb2YgKDEsMCkgaW4gKGksaikgbWVhbnMgYSBzdGVwIG9mICgxLWMsLWMpIGluICh4LHkpLCBhbmRcbiAgICAgICAgLy8gYSBzdGVwIG9mICgwLDEpIGluIChpLGopIG1lYW5zIGEgc3RlcCBvZiAoLWMsMS1jKSBpbiAoeCx5KSwgd2hlcmVcbiAgICAgICAgLy8gYyA9ICgzLXNxcnQoMykpLzZcbiAgICAgICAgY29uc3QgeDEgPSB4MCAtIGkxICsgRzI7IC8vIE9mZnNldHMgZm9yIG1pZGRsZSBjb3JuZXIgaW4gKHgseSkgdW5za2V3ZWQgY29vcmRzXG4gICAgICAgIGNvbnN0IHkxID0geTAgLSBqMSArIEcyO1xuICAgICAgICBjb25zdCB4MiA9IHgwIC0gMS4wICsgMi4wICogRzI7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkpIHVuc2tld2VkIGNvb3Jkc1xuICAgICAgICBjb25zdCB5MiA9IHkwIC0gMS4wICsgMi4wICogRzI7XG4gICAgICAgIC8vIFdvcmsgb3V0IHRoZSBoYXNoZWQgZ3JhZGllbnQgaW5kaWNlcyBvZiB0aGUgdGhyZWUgc2ltcGxleCBjb3JuZXJzXG4gICAgICAgIGNvbnN0IGlpID0gaSAmIDI1NTtcbiAgICAgICAgY29uc3QgamogPSBqICYgMjU1O1xuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSB0aHJlZSBjb3JuZXJzXG4gICAgICAgIGxldCB0MCA9IDAuNSAtIHgwICogeDAgLSB5MCAqIHkwO1xuICAgICAgICBpZiAodDAgPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgZ2kwID0gcGVybU1vZDEyW2lpICsgcGVybVtqal1dICogMztcbiAgICAgICAgICAgIHQwICo9IHQwO1xuICAgICAgICAgICAgbjAgPSB0MCAqIHQwICogKGdyYWQzW2dpMF0gKiB4MCArIGdyYWQzW2dpMCArIDFdICogeTApOyAvLyAoeCx5KSBvZiBncmFkMyB1c2VkIGZvciAyRCBncmFkaWVudFxuICAgICAgICB9XG4gICAgICAgIGxldCB0MSA9IDAuNSAtIHgxICogeDEgLSB5MSAqIHkxO1xuICAgICAgICBpZiAodDEgPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgZ2kxID0gcGVybU1vZDEyW2lpICsgaTEgKyBwZXJtW2pqICsgajFdXSAqIDM7XG4gICAgICAgICAgICB0MSAqPSB0MTtcbiAgICAgICAgICAgIG4xID0gdDEgKiB0MSAqIChncmFkM1tnaTFdICogeDEgKyBncmFkM1tnaTEgKyAxXSAqIHkxKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdDIgPSAwLjUgLSB4MiAqIHgyIC0geTIgKiB5MjtcbiAgICAgICAgaWYgKHQyID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGdpMiA9IHBlcm1Nb2QxMltpaSArIDEgKyBwZXJtW2pqICsgMV1dICogMztcbiAgICAgICAgICAgIHQyICo9IHQyO1xuICAgICAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQzW2dpMl0gKiB4MiArIGdyYWQzW2dpMiArIDFdICogeTIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFkZCBjb250cmlidXRpb25zIGZyb20gZWFjaCBjb3JuZXIgdG8gZ2V0IHRoZSBmaW5hbCBub2lzZSB2YWx1ZS5cbiAgICAgICAgLy8gVGhlIHJlc3VsdCBpcyBzY2FsZWQgdG8gcmV0dXJuIHZhbHVlcyBpbiB0aGUgaW50ZXJ2YWwgWy0xLDFdLlxuICAgICAgICByZXR1cm4gNzAuMCAqIChuMCArIG4xICsgbjIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTYW1wbGVzIHRoZSBub2lzZSBmaWVsZCBpbiAzIGRpbWVuc2lvbnNcbiAgICAgKiBAcGFyYW0geFxuICAgICAqIEBwYXJhbSB5XG4gICAgICogQHBhcmFtIHpcbiAgICAgKiBAcmV0dXJucyBhIG51bWJlciBpbiB0aGUgaW50ZXJ2YWwgWy0xLCAxXVxuICAgICAqL1xuICAgIG5vaXNlM0QoeCwgeSwgeikge1xuICAgICAgICBjb25zdCBwZXJtTW9kMTIgPSB0aGlzLnBlcm1Nb2QxMjtcbiAgICAgICAgY29uc3QgcGVybSA9IHRoaXMucGVybTtcbiAgICAgICAgbGV0IG4wLCBuMSwgbjIsIG4zOyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIGZvdXIgY29ybmVyc1xuICAgICAgICAvLyBTa2V3IHRoZSBpbnB1dCBzcGFjZSB0byBkZXRlcm1pbmUgd2hpY2ggc2ltcGxleCBjZWxsIHdlJ3JlIGluXG4gICAgICAgIGNvbnN0IHMgPSAoeCArIHkgKyB6KSAqIEYzOyAvLyBWZXJ5IG5pY2UgYW5kIHNpbXBsZSBza2V3IGZhY3RvciBmb3IgM0RcbiAgICAgICAgY29uc3QgaSA9IE1hdGguZmxvb3IoeCArIHMpO1xuICAgICAgICBjb25zdCBqID0gTWF0aC5mbG9vcih5ICsgcyk7XG4gICAgICAgIGNvbnN0IGsgPSBNYXRoLmZsb29yKHogKyBzKTtcbiAgICAgICAgY29uc3QgdCA9IChpICsgaiArIGspICogRzM7XG4gICAgICAgIGNvbnN0IFgwID0gaSAtIHQ7IC8vIFVuc2tldyB0aGUgY2VsbCBvcmlnaW4gYmFjayB0byAoeCx5LHopIHNwYWNlXG4gICAgICAgIGNvbnN0IFkwID0gaiAtIHQ7XG4gICAgICAgIGNvbnN0IFowID0gayAtIHQ7XG4gICAgICAgIGNvbnN0IHgwID0geCAtIFgwOyAvLyBUaGUgeCx5LHogZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICAgIGNvbnN0IHkwID0geSAtIFkwO1xuICAgICAgICBjb25zdCB6MCA9IHogLSBaMDtcbiAgICAgICAgLy8gRm9yIHRoZSAzRCBjYXNlLCB0aGUgc2ltcGxleCBzaGFwZSBpcyBhIHNsaWdodGx5IGlycmVndWxhciB0ZXRyYWhlZHJvbi5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggd2UgYXJlIGluLlxuICAgICAgICBsZXQgaTEsIGoxLCBrMTsgLy8gT2Zmc2V0cyBmb3Igc2Vjb25kIGNvcm5lciBvZiBzaW1wbGV4IGluIChpLGosaykgY29vcmRzXG4gICAgICAgIGxldCBpMiwgajIsIGsyOyAvLyBPZmZzZXRzIGZvciB0aGlyZCBjb3JuZXIgb2Ygc2ltcGxleCBpbiAoaSxqLGspIGNvb3Jkc1xuICAgICAgICBpZiAoeDAgPj0geTApIHtcbiAgICAgICAgICAgIGlmICh5MCA+PSB6MCkge1xuICAgICAgICAgICAgICAgIGkxID0gMTtcbiAgICAgICAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgICAgICAgazEgPSAwO1xuICAgICAgICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgICAgICAgazIgPSAwO1xuICAgICAgICAgICAgfSAvLyBYIFkgWiBvcmRlclxuICAgICAgICAgICAgZWxzZSBpZiAoeDAgPj0gejApIHtcbiAgICAgICAgICAgICAgICBpMSA9IDE7XG4gICAgICAgICAgICAgICAgajEgPSAwO1xuICAgICAgICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICAgICAgICBpMiA9IDE7XG4gICAgICAgICAgICAgICAgajIgPSAwO1xuICAgICAgICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgICAgIH0gLy8gWCBaIFkgb3JkZXJcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGkxID0gMDtcbiAgICAgICAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgICAgICAgazEgPSAxO1xuICAgICAgICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICAgICAgICBqMiA9IDA7XG4gICAgICAgICAgICAgICAgazIgPSAxO1xuICAgICAgICAgICAgfSAvLyBaIFggWSBvcmRlclxuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAvLyB4MDx5MFxuICAgICAgICAgICAgaWYgKHkwIDwgejApIHtcbiAgICAgICAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgICAgICAgajEgPSAwO1xuICAgICAgICAgICAgICAgIGsxID0gMTtcbiAgICAgICAgICAgICAgICBpMiA9IDA7XG4gICAgICAgICAgICAgICAgajIgPSAxO1xuICAgICAgICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgICAgIH0gLy8gWiBZIFggb3JkZXJcbiAgICAgICAgICAgIGVsc2UgaWYgKHgwIDwgejApIHtcbiAgICAgICAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgICAgICAgajEgPSAxO1xuICAgICAgICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICAgICAgICBpMiA9IDA7XG4gICAgICAgICAgICAgICAgajIgPSAxO1xuICAgICAgICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgICAgIH0gLy8gWSBaIFggb3JkZXJcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGkxID0gMDtcbiAgICAgICAgICAgICAgICBqMSA9IDE7XG4gICAgICAgICAgICAgICAgazEgPSAwO1xuICAgICAgICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgICAgICAgazIgPSAwO1xuICAgICAgICAgICAgfSAvLyBZIFggWiBvcmRlclxuICAgICAgICB9XG4gICAgICAgIC8vIEEgc3RlcCBvZiAoMSwwLDApIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgxLWMsLWMsLWMpIGluICh4LHkseiksXG4gICAgICAgIC8vIGEgc3RlcCBvZiAoMCwxLDApIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgtYywxLWMsLWMpIGluICh4LHkseiksIGFuZFxuICAgICAgICAvLyBhIHN0ZXAgb2YgKDAsMCwxKSBpbiAoaSxqLGspIG1lYW5zIGEgc3RlcCBvZiAoLWMsLWMsMS1jKSBpbiAoeCx5LHopLCB3aGVyZVxuICAgICAgICAvLyBjID0gMS82LlxuICAgICAgICBjb25zdCB4MSA9IHgwIC0gaTEgKyBHMzsgLy8gT2Zmc2V0cyBmb3Igc2Vjb25kIGNvcm5lciBpbiAoeCx5LHopIGNvb3Jkc1xuICAgICAgICBjb25zdCB5MSA9IHkwIC0gajEgKyBHMztcbiAgICAgICAgY29uc3QgejEgPSB6MCAtIGsxICsgRzM7XG4gICAgICAgIGNvbnN0IHgyID0geDAgLSBpMiArIDIuMCAqIEczOyAvLyBPZmZzZXRzIGZvciB0aGlyZCBjb3JuZXIgaW4gKHgseSx6KSBjb29yZHNcbiAgICAgICAgY29uc3QgeTIgPSB5MCAtIGoyICsgMi4wICogRzM7XG4gICAgICAgIGNvbnN0IHoyID0gejAgLSBrMiArIDIuMCAqIEczO1xuICAgICAgICBjb25zdCB4MyA9IHgwIC0gMS4wICsgMy4wICogRzM7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkseikgY29vcmRzXG4gICAgICAgIGNvbnN0IHkzID0geTAgLSAxLjAgKyAzLjAgKiBHMztcbiAgICAgICAgY29uc3QgejMgPSB6MCAtIDEuMCArIDMuMCAqIEczO1xuICAgICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIGZvdXIgc2ltcGxleCBjb3JuZXJzXG4gICAgICAgIGNvbnN0IGlpID0gaSAmIDI1NTtcbiAgICAgICAgY29uc3QgamogPSBqICYgMjU1O1xuICAgICAgICBjb25zdCBrayA9IGsgJiAyNTU7XG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgY29udHJpYnV0aW9uIGZyb20gdGhlIGZvdXIgY29ybmVyc1xuICAgICAgICBsZXQgdDAgPSAwLjYgLSB4MCAqIHgwIC0geTAgKiB5MCAtIHowICogejA7XG4gICAgICAgIGlmICh0MCA8IDApXG4gICAgICAgICAgICBuMCA9IDAuMDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBnaTAgPSBwZXJtTW9kMTJbaWkgKyBwZXJtW2pqICsgcGVybVtra11dXSAqIDM7XG4gICAgICAgICAgICB0MCAqPSB0MDtcbiAgICAgICAgICAgIG4wID0gdDAgKiB0MCAqIChncmFkM1tnaTBdICogeDAgKyBncmFkM1tnaTAgKyAxXSAqIHkwICsgZ3JhZDNbZ2kwICsgMl0gKiB6MCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHQxID0gMC42IC0geDEgKiB4MSAtIHkxICogeTEgLSB6MSAqIHoxO1xuICAgICAgICBpZiAodDEgPCAwKVxuICAgICAgICAgICAgbjEgPSAwLjA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZ2kxID0gcGVybU1vZDEyW2lpICsgaTEgKyBwZXJtW2pqICsgajEgKyBwZXJtW2trICsgazFdXV0gKiAzO1xuICAgICAgICAgICAgdDEgKj0gdDE7XG4gICAgICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDNbZ2kxXSAqIHgxICsgZ3JhZDNbZ2kxICsgMV0gKiB5MSArIGdyYWQzW2dpMSArIDJdICogejEpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB0MiA9IDAuNiAtIHgyICogeDIgLSB5MiAqIHkyIC0gejIgKiB6MjtcbiAgICAgICAgaWYgKHQyIDwgMClcbiAgICAgICAgICAgIG4yID0gMC4wO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGdpMiA9IHBlcm1Nb2QxMltpaSArIGkyICsgcGVybVtqaiArIGoyICsgcGVybVtrayArIGsyXV1dICogMztcbiAgICAgICAgICAgIHQyICo9IHQyO1xuICAgICAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQzW2dpMl0gKiB4MiArIGdyYWQzW2dpMiArIDFdICogeTIgKyBncmFkM1tnaTIgKyAyXSAqIHoyKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdDMgPSAwLjYgLSB4MyAqIHgzIC0geTMgKiB5MyAtIHozICogejM7XG4gICAgICAgIGlmICh0MyA8IDApXG4gICAgICAgICAgICBuMyA9IDAuMDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBnaTMgPSBwZXJtTW9kMTJbaWkgKyAxICsgcGVybVtqaiArIDEgKyBwZXJtW2trICsgMV1dXSAqIDM7XG4gICAgICAgICAgICB0MyAqPSB0MztcbiAgICAgICAgICAgIG4zID0gdDMgKiB0MyAqIChncmFkM1tnaTNdICogeDMgKyBncmFkM1tnaTMgKyAxXSAqIHkzICsgZ3JhZDNbZ2kzICsgMl0gKiB6Myk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWRkIGNvbnRyaWJ1dGlvbnMgZnJvbSBlYWNoIGNvcm5lciB0byBnZXQgdGhlIGZpbmFsIG5vaXNlIHZhbHVlLlxuICAgICAgICAvLyBUaGUgcmVzdWx0IGlzIHNjYWxlZCB0byBzdGF5IGp1c3QgaW5zaWRlIFstMSwxXVxuICAgICAgICByZXR1cm4gMzIuMCAqIChuMCArIG4xICsgbjIgKyBuMyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNhbXBsZXMgdGhlIG5vaXNlIGZpZWxkIGluIDQgZGltZW5zaW9uc1xuICAgICAqIEBwYXJhbSB4XG4gICAgICogQHBhcmFtIHlcbiAgICAgKiBAcGFyYW0gelxuICAgICAqIEByZXR1cm5zIGEgbnVtYmVyIGluIHRoZSBpbnRlcnZhbCBbLTEsIDFdXG4gICAgICovXG4gICAgbm9pc2U0RCh4LCB5LCB6LCB3KSB7XG4gICAgICAgIGNvbnN0IHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICAgIGxldCBuMCwgbjEsIG4yLCBuMywgbjQ7IC8vIE5vaXNlIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgZml2ZSBjb3JuZXJzXG4gICAgICAgIC8vIFNrZXcgdGhlICh4LHkseix3KSBzcGFjZSB0byBkZXRlcm1pbmUgd2hpY2ggY2VsbCBvZiAyNCBzaW1wbGljZXMgd2UncmUgaW5cbiAgICAgICAgY29uc3QgcyA9ICh4ICsgeSArIHogKyB3KSAqIEY0OyAvLyBGYWN0b3IgZm9yIDREIHNrZXdpbmdcbiAgICAgICAgY29uc3QgaSA9IE1hdGguZmxvb3IoeCArIHMpO1xuICAgICAgICBjb25zdCBqID0gTWF0aC5mbG9vcih5ICsgcyk7XG4gICAgICAgIGNvbnN0IGsgPSBNYXRoLmZsb29yKHogKyBzKTtcbiAgICAgICAgY29uc3QgbCA9IE1hdGguZmxvb3IodyArIHMpO1xuICAgICAgICBjb25zdCB0ID0gKGkgKyBqICsgayArIGwpICogRzQ7IC8vIEZhY3RvciBmb3IgNEQgdW5za2V3aW5nXG4gICAgICAgIGNvbnN0IFgwID0gaSAtIHQ7IC8vIFVuc2tldyB0aGUgY2VsbCBvcmlnaW4gYmFjayB0byAoeCx5LHosdykgc3BhY2VcbiAgICAgICAgY29uc3QgWTAgPSBqIC0gdDtcbiAgICAgICAgY29uc3QgWjAgPSBrIC0gdDtcbiAgICAgICAgY29uc3QgVzAgPSBsIC0gdDtcbiAgICAgICAgY29uc3QgeDAgPSB4IC0gWDA7IC8vIFRoZSB4LHkseix3IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgICBjb25zdCB5MCA9IHkgLSBZMDtcbiAgICAgICAgY29uc3QgejAgPSB6IC0gWjA7XG4gICAgICAgIGNvbnN0IHcwID0gdyAtIFcwO1xuICAgICAgICAvLyBGb3IgdGhlIDREIGNhc2UsIHRoZSBzaW1wbGV4IGlzIGEgNEQgc2hhcGUgSSB3b24ndCBldmVuIHRyeSB0byBkZXNjcmliZS5cbiAgICAgICAgLy8gVG8gZmluZCBvdXQgd2hpY2ggb2YgdGhlIDI0IHBvc3NpYmxlIHNpbXBsaWNlcyB3ZSdyZSBpbiwgd2UgbmVlZCB0b1xuICAgICAgICAvLyBkZXRlcm1pbmUgdGhlIG1hZ25pdHVkZSBvcmRlcmluZyBvZiB4MCwgeTAsIHowIGFuZCB3MC5cbiAgICAgICAgLy8gU2l4IHBhaXItd2lzZSBjb21wYXJpc29ucyBhcmUgcGVyZm9ybWVkIGJldHdlZW4gZWFjaCBwb3NzaWJsZSBwYWlyXG4gICAgICAgIC8vIG9mIHRoZSBmb3VyIGNvb3JkaW5hdGVzLCBhbmQgdGhlIHJlc3VsdHMgYXJlIHVzZWQgdG8gcmFuayB0aGUgbnVtYmVycy5cbiAgICAgICAgbGV0IHJhbmt4ID0gMDtcbiAgICAgICAgbGV0IHJhbmt5ID0gMDtcbiAgICAgICAgbGV0IHJhbmt6ID0gMDtcbiAgICAgICAgbGV0IHJhbmt3ID0gMDtcbiAgICAgICAgaWYgKHgwID4geTApXG4gICAgICAgICAgICByYW5reCsrO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByYW5reSsrO1xuICAgICAgICBpZiAoeDAgPiB6MClcbiAgICAgICAgICAgIHJhbmt4Kys7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJhbmt6Kys7XG4gICAgICAgIGlmICh4MCA+IHcwKVxuICAgICAgICAgICAgcmFua3grKztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmFua3crKztcbiAgICAgICAgaWYgKHkwID4gejApXG4gICAgICAgICAgICByYW5reSsrO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByYW5reisrO1xuICAgICAgICBpZiAoeTAgPiB3MClcbiAgICAgICAgICAgIHJhbmt5Kys7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJhbmt3Kys7XG4gICAgICAgIGlmICh6MCA+IHcwKVxuICAgICAgICAgICAgcmFua3orKztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmFua3crKztcbiAgICAgICAgLy8gc2ltcGxleFtjXSBpcyBhIDQtdmVjdG9yIHdpdGggdGhlIG51bWJlcnMgMCwgMSwgMiBhbmQgMyBpbiBzb21lIG9yZGVyLlxuICAgICAgICAvLyBNYW55IHZhbHVlcyBvZiBjIHdpbGwgbmV2ZXIgb2NjdXIsIHNpbmNlIGUuZy4geD55Pno+dyBtYWtlcyB4PHosIHk8dyBhbmQgeDx3XG4gICAgICAgIC8vIGltcG9zc2libGUuIE9ubHkgdGhlIDI0IGluZGljZXMgd2hpY2ggaGF2ZSBub24temVybyBlbnRyaWVzIG1ha2UgYW55IHNlbnNlLlxuICAgICAgICAvLyBXZSB1c2UgYSB0aHJlc2hvbGRpbmcgdG8gc2V0IHRoZSBjb29yZGluYXRlcyBpbiB0dXJuIGZyb20gdGhlIGxhcmdlc3QgbWFnbml0dWRlLlxuICAgICAgICAvLyBSYW5rIDMgZGVub3RlcyB0aGUgbGFyZ2VzdCBjb29yZGluYXRlLlxuICAgICAgICAvLyBSYW5rIDIgZGVub3RlcyB0aGUgc2Vjb25kIGxhcmdlc3QgY29vcmRpbmF0ZS5cbiAgICAgICAgLy8gUmFuayAxIGRlbm90ZXMgdGhlIHNlY29uZCBzbWFsbGVzdCBjb29yZGluYXRlLlxuICAgICAgICAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgc2Vjb25kIHNpbXBsZXggY29ybmVyXG4gICAgICAgIGNvbnN0IGkxID0gcmFua3ggPj0gMyA/IDEgOiAwO1xuICAgICAgICBjb25zdCBqMSA9IHJhbmt5ID49IDMgPyAxIDogMDtcbiAgICAgICAgY29uc3QgazEgPSByYW5reiA+PSAzID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IGwxID0gcmFua3cgPj0gMyA/IDEgOiAwO1xuICAgICAgICAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgdGhpcmQgc2ltcGxleCBjb3JuZXJcbiAgICAgICAgY29uc3QgaTIgPSByYW5reCA+PSAyID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IGoyID0gcmFua3kgPj0gMiA/IDEgOiAwO1xuICAgICAgICBjb25zdCBrMiA9IHJhbmt6ID49IDIgPyAxIDogMDtcbiAgICAgICAgY29uc3QgbDIgPSByYW5rdyA+PSAyID8gMSA6IDA7XG4gICAgICAgIC8vIFRoZSBpbnRlZ2VyIG9mZnNldHMgZm9yIHRoZSBmb3VydGggc2ltcGxleCBjb3JuZXJcbiAgICAgICAgY29uc3QgaTMgPSByYW5reCA+PSAxID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IGozID0gcmFua3kgPj0gMSA/IDEgOiAwO1xuICAgICAgICBjb25zdCBrMyA9IHJhbmt6ID49IDEgPyAxIDogMDtcbiAgICAgICAgY29uc3QgbDMgPSByYW5rdyA+PSAxID8gMSA6IDA7XG4gICAgICAgIC8vIFRoZSBmaWZ0aCBjb3JuZXIgaGFzIGFsbCBjb29yZGluYXRlIG9mZnNldHMgPSAxLCBzbyBubyBuZWVkIHRvIGNvbXB1dGUgdGhhdC5cbiAgICAgICAgY29uc3QgeDEgPSB4MCAtIGkxICsgRzQ7IC8vIE9mZnNldHMgZm9yIHNlY29uZCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgICBjb25zdCB5MSA9IHkwIC0gajEgKyBHNDtcbiAgICAgICAgY29uc3QgejEgPSB6MCAtIGsxICsgRzQ7XG4gICAgICAgIGNvbnN0IHcxID0gdzAgLSBsMSArIEc0O1xuICAgICAgICBjb25zdCB4MiA9IHgwIC0gaTIgKyAyLjAgKiBHNDsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgICAgY29uc3QgeTIgPSB5MCAtIGoyICsgMi4wICogRzQ7XG4gICAgICAgIGNvbnN0IHoyID0gejAgLSBrMiArIDIuMCAqIEc0O1xuICAgICAgICBjb25zdCB3MiA9IHcwIC0gbDIgKyAyLjAgKiBHNDtcbiAgICAgICAgY29uc3QgeDMgPSB4MCAtIGkzICsgMy4wICogRzQ7IC8vIE9mZnNldHMgZm9yIGZvdXJ0aCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgICBjb25zdCB5MyA9IHkwIC0gajMgKyAzLjAgKiBHNDtcbiAgICAgICAgY29uc3QgejMgPSB6MCAtIGszICsgMy4wICogRzQ7XG4gICAgICAgIGNvbnN0IHczID0gdzAgLSBsMyArIDMuMCAqIEc0O1xuICAgICAgICBjb25zdCB4NCA9IHgwIC0gMS4wICsgNC4wICogRzQ7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgICAgY29uc3QgeTQgPSB5MCAtIDEuMCArIDQuMCAqIEc0O1xuICAgICAgICBjb25zdCB6NCA9IHowIC0gMS4wICsgNC4wICogRzQ7XG4gICAgICAgIGNvbnN0IHc0ID0gdzAgLSAxLjAgKyA0LjAgKiBHNDtcbiAgICAgICAgLy8gV29yayBvdXQgdGhlIGhhc2hlZCBncmFkaWVudCBpbmRpY2VzIG9mIHRoZSBmaXZlIHNpbXBsZXggY29ybmVyc1xuICAgICAgICBjb25zdCBpaSA9IGkgJiAyNTU7XG4gICAgICAgIGNvbnN0IGpqID0gaiAmIDI1NTtcbiAgICAgICAgY29uc3Qga2sgPSBrICYgMjU1O1xuICAgICAgICBjb25zdCBsbCA9IGwgJiAyNTU7XG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgY29udHJpYnV0aW9uIGZyb20gdGhlIGZpdmUgY29ybmVyc1xuICAgICAgICBsZXQgdDAgPSAwLjYgLSB4MCAqIHgwIC0geTAgKiB5MCAtIHowICogejAgLSB3MCAqIHcwO1xuICAgICAgICBpZiAodDAgPCAwKVxuICAgICAgICAgICAgbjAgPSAwLjA7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZ2kwID0gKHBlcm1baWkgKyBwZXJtW2pqICsgcGVybVtrayArIHBlcm1bbGxdXV1dICUgMzIpICogNDtcbiAgICAgICAgICAgIHQwICo9IHQwO1xuICAgICAgICAgICAgbjAgPSB0MCAqIHQwICogKGdyYWQ0W2dpMF0gKiB4MCArIGdyYWQ0W2dpMCArIDFdICogeTAgKyBncmFkNFtnaTAgKyAyXSAqIHowICsgZ3JhZDRbZ2kwICsgM10gKiB3MCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHQxID0gMC42IC0geDEgKiB4MSAtIHkxICogeTEgLSB6MSAqIHoxIC0gdzEgKiB3MTtcbiAgICAgICAgaWYgKHQxIDwgMClcbiAgICAgICAgICAgIG4xID0gMC4wO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGdpMSA9IChwZXJtW2lpICsgaTEgKyBwZXJtW2pqICsgajEgKyBwZXJtW2trICsgazEgKyBwZXJtW2xsICsgbDFdXV1dICUgMzIpICogNDtcbiAgICAgICAgICAgIHQxICo9IHQxO1xuICAgICAgICAgICAgbjEgPSB0MSAqIHQxICogKGdyYWQ0W2dpMV0gKiB4MSArIGdyYWQ0W2dpMSArIDFdICogeTEgKyBncmFkNFtnaTEgKyAyXSAqIHoxICsgZ3JhZDRbZ2kxICsgM10gKiB3MSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHQyID0gMC42IC0geDIgKiB4MiAtIHkyICogeTIgLSB6MiAqIHoyIC0gdzIgKiB3MjtcbiAgICAgICAgaWYgKHQyIDwgMClcbiAgICAgICAgICAgIG4yID0gMC4wO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGdpMiA9IChwZXJtW2lpICsgaTIgKyBwZXJtW2pqICsgajIgKyBwZXJtW2trICsgazIgKyBwZXJtW2xsICsgbDJdXV1dICUgMzIpICogNDtcbiAgICAgICAgICAgIHQyICo9IHQyO1xuICAgICAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQ0W2dpMl0gKiB4MiArIGdyYWQ0W2dpMiArIDFdICogeTIgKyBncmFkNFtnaTIgKyAyXSAqIHoyICsgZ3JhZDRbZ2kyICsgM10gKiB3Mik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHQzID0gMC42IC0geDMgKiB4MyAtIHkzICogeTMgLSB6MyAqIHozIC0gdzMgKiB3MztcbiAgICAgICAgaWYgKHQzIDwgMClcbiAgICAgICAgICAgIG4zID0gMC4wO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGdpMyA9IChwZXJtW2lpICsgaTMgKyBwZXJtW2pqICsgajMgKyBwZXJtW2trICsgazMgKyBwZXJtW2xsICsgbDNdXV1dICUgMzIpICogNDtcbiAgICAgICAgICAgIHQzICo9IHQzO1xuICAgICAgICAgICAgbjMgPSB0MyAqIHQzICogKGdyYWQ0W2dpM10gKiB4MyArIGdyYWQ0W2dpMyArIDFdICogeTMgKyBncmFkNFtnaTMgKyAyXSAqIHozICsgZ3JhZDRbZ2kzICsgM10gKiB3Myk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHQ0ID0gMC42IC0geDQgKiB4NCAtIHk0ICogeTQgLSB6NCAqIHo0IC0gdzQgKiB3NDtcbiAgICAgICAgaWYgKHQ0IDwgMClcbiAgICAgICAgICAgIG40ID0gMC4wO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGdpNCA9IChwZXJtW2lpICsgMSArIHBlcm1bamogKyAxICsgcGVybVtrayArIDEgKyBwZXJtW2xsICsgMV1dXV0gJSAzMikgKiA0O1xuICAgICAgICAgICAgdDQgKj0gdDQ7XG4gICAgICAgICAgICBuNCA9IHQ0ICogdDQgKiAoZ3JhZDRbZ2k0XSAqIHg0ICsgZ3JhZDRbZ2k0ICsgMV0gKiB5NCArIGdyYWQ0W2dpNCArIDJdICogejQgKyBncmFkNFtnaTQgKyAzXSAqIHc0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTdW0gdXAgYW5kIHNjYWxlIHRoZSByZXN1bHQgdG8gY292ZXIgdGhlIHJhbmdlIFstMSwxXVxuICAgICAgICByZXR1cm4gMjcuMCAqIChuMCArIG4xICsgbjIgKyBuMyArIG40KTtcbiAgICB9XG59XG5leHBvcnQgZGVmYXVsdCBTaW1wbGV4Tm9pc2U7XG4vKipcbiAqIEJ1aWxkcyBhIHJhbmRvbSBwZXJtdXRhdGlvbiB0YWJsZS5cbiAqIFRoaXMgaXMgZXhwb3J0ZWQgb25seSBmb3IgKGludGVybmFsKSB0ZXN0aW5nIHB1cnBvc2VzLlxuICogRG8gbm90IHJlbHkgb24gdGhpcyBleHBvcnQuXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQZXJtdXRhdGlvblRhYmxlKHJhbmRvbSkge1xuICAgIGNvbnN0IHAgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgICAgcFtpXSA9IGk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU1OyBpKyspIHtcbiAgICAgICAgY29uc3QgciA9IGkgKyB+fihyYW5kb20oKSAqICgyNTYgLSBpKSk7XG4gICAgICAgIGNvbnN0IGF1eCA9IHBbaV07XG4gICAgICAgIHBbaV0gPSBwW3JdO1xuICAgICAgICBwW3JdID0gYXV4O1xuICAgIH1cbiAgICByZXR1cm4gcDtcbn1cbi8qXG5UaGUgQUxFQSBQUk5HIGFuZCBtYXNoZXIgY29kZSB1c2VkIGJ5IHNpbXBsZXgtbm9pc2UuanNcbmlzIGJhc2VkIG9uIGNvZGUgYnkgSm9oYW5uZXMgQmFhZ8O4ZSwgbW9kaWZpZWQgYnkgSm9uYXMgV2FnbmVyLlxuU2VlIGFsZWEubWQgZm9yIHRoZSBmdWxsIGxpY2Vuc2UuXG4qL1xuZnVuY3Rpb24gYWxlYShzZWVkKSB7XG4gICAgbGV0IHMwID0gMDtcbiAgICBsZXQgczEgPSAwO1xuICAgIGxldCBzMiA9IDA7XG4gICAgbGV0IGMgPSAxO1xuICAgIGNvbnN0IG1hc2ggPSBtYXNoZXIoKTtcbiAgICBzMCA9IG1hc2goJyAnKTtcbiAgICBzMSA9IG1hc2goJyAnKTtcbiAgICBzMiA9IG1hc2goJyAnKTtcbiAgICBzMCAtPSBtYXNoKHNlZWQpO1xuICAgIGlmIChzMCA8IDApIHtcbiAgICAgICAgczAgKz0gMTtcbiAgICB9XG4gICAgczEgLT0gbWFzaChzZWVkKTtcbiAgICBpZiAoczEgPCAwKSB7XG4gICAgICAgIHMxICs9IDE7XG4gICAgfVxuICAgIHMyIC09IG1hc2goc2VlZCk7XG4gICAgaWYgKHMyIDwgMCkge1xuICAgICAgICBzMiArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCB0ID0gMjA5MTYzOSAqIHMwICsgYyAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXG4gICAgICAgIHMwID0gczE7XG4gICAgICAgIHMxID0gczI7XG4gICAgICAgIHJldHVybiBzMiA9IHQgLSAoYyA9IHQgfCAwKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gbWFzaGVyKCkge1xuICAgIGxldCBuID0gMHhlZmM4MjQ5ZDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgZGF0YSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBuICs9IGRhdGEuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIGxldCBoID0gMC4wMjUxOTYwMzI4MjQxNjkzOCAqIG47XG4gICAgICAgICAgICBuID0gaCA+Pj4gMDtcbiAgICAgICAgICAgIGggLT0gbjtcbiAgICAgICAgICAgIGggKj0gbjtcbiAgICAgICAgICAgIG4gPSBoID4+PiAwO1xuICAgICAgICAgICAgaCAtPSBuO1xuICAgICAgICAgICAgbiArPSBoICogMHgxMDAwMDAwMDA7IC8vIDJeMzJcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2ltcGxleC1ub2lzZS5qcy5tYXAiLCJpbXBvcnQgU2ltcGxleE5vaXNlIGZyb20gXCJzaW1wbGV4LW5vaXNlXCI7XG5cbi8vIFRPRE86IFNlZWRzIHNob3VsZCBwcm9iYWJseSBiZSBjb25maWd1cmFibGUsIG9yIGZyb20gYSBicm93c2VyIGZpbmdlcnByaW50LFxuLy8gb3IgY2FjaGVkIGluIGxvY2FsU3RvcmFnZSAobGF0dGVyIHR3byBmb3IgcmVwZWF0YWJpbGl0eSwgZm9ybWVyIGZvciBuZXcgbWFwcylcbmNvbnN0IGNvbnRpbmVudFNpbXBsZXggPSBuZXcgU2ltcGxleE5vaXNlKFwiY29udGluZW50c1wiKTtcbmNvbnN0IGxhbmRTaW1wbGV4ID0gbmV3IFNpbXBsZXhOb2lzZShcImxhbmRcIik7XG5jb25zdCBsb2NhbFNpbXBsZXggPSBuZXcgU2ltcGxleE5vaXNlKFwibG9jYWxcIik7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250aW5lbnRFbGV2YXRpb25Ob2lzZSh4OiBudW1iZXIsIHk6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBjb250aW5lbnRTaW1wbGV4Lm5vaXNlMkQoeCwgeSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYW5kRWxldmF0aW9uTm9pc2UoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gbGFuZFNpbXBsZXgubm9pc2UyRCh4LCB5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsRWxldmF0aW9uTm9pc2UoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gbG9jYWxTaW1wbGV4Lm5vaXNlMkQoeCwgeSk7XG59XG5cbi8vIGV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGVsZXZhdGlvbk5vaXNlKHg6IG51bWJlciwgeTogbnVtYmVyKTogbnVtYmVyIHtcbi8vICAgcmV0dXJuIChcbi8vICAgICAoMC43NSAqIGNvbnRpbmVudEVsZXZhdGlvbk5vaXNlKDEuNzUgKiB4LCAxLjc1ICogeSkpXG4vLyAgICAgKyAoMC43NSAqIGxhbmRFbGV2YXRpb25Ob2lzZSg1ICogeCwgNSAqIHkpKVxuLy8gICAgICsgKDAuMjUgKiBsb2NhbEVsZXZhdGlvbk5vaXNlKDE2ICogeCwgMTYgKiB5KSlcbi8vICAgKSAvIDEuNzU7XG4vLyB9XG5cbi8vIGNvbnN0IENPTlRJTkVOVF9XRUlHSFQgPSAwLjc1O1xuLy8gY29uc3QgTEFORF9XRUlHSFQgPSAwLjc1O1xuLy8gY29uc3QgTE9DQUxfV0VJR0hUID0gMC4yNTtcbi8vIGNvbnN0IFRPVEFMX1dFSUdIVCA9IENPTlRJTkVOVF9XRUlHSFQgKyBMQU5EX1dFSUdIVCArIExPQ0FMX1dFSUdIVDtcblxuLy8gZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZWxldmF0aW9uTm9pc2UoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBudW1iZXIge1xuLy8gICByZXR1cm4gKFxuLy8gICAgIChDT05USU5FTlRfV0VJR0hUICogY29udGluZW50RWxldmF0aW9uTm9pc2UoMS43NSAqIHgsIDEuNzUgKiB5KSlcbi8vICAgICArIChMQU5EX1dFSUdIVCAqIGxhbmRFbGV2YXRpb25Ob2lzZSg1ICogeCwgNSAqIHkpKVxuLy8gICAgICsgKExPQ0FMX1dFSUdIVCAqIGxvY2FsRWxldmF0aW9uTm9pc2UoMTYgKiB4LCAxNiAqIHkpKVxuLy8gICApIC8gVE9UQUxfV0VJR0hUO1xuLy8gfVxuXG5jb25zdCBDT05USU5FTlRfV0VJR0hUID0gMTtcbmNvbnN0IExBTkRfV0VJR0hUID0gMC43NTtcbmNvbnN0IExPQ0FMX1dFSUdIVCA9IDAuMjU7XG5jb25zdCBST0NLWV9XRUlHSFQgPSAwLjI1O1xuY29uc3QgVE9UQUxfV0VJR0hUID0gQ09OVElORU5UX1dFSUdIVCArIExBTkRfV0VJR0hUICsgTE9DQUxfV0VJR0hUICsgUk9DS1lfV0VJR0hUO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbGV2YXRpb25Ob2lzZSh4OiBudW1iZXIsIHk6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAoXG4gICAgKENPTlRJTkVOVF9XRUlHSFQgKiBjb250aW5lbnRFbGV2YXRpb25Ob2lzZSgxLjc1ICogeCwgMS43NSAqIHkpKVxuICAgICsgKExBTkRfV0VJR0hUICogbGFuZEVsZXZhdGlvbk5vaXNlKDUgKiB4LCA1ICogeSkpXG4gICAgKyAoTE9DQUxfV0VJR0hUICogbG9jYWxFbGV2YXRpb25Ob2lzZSgxNiAqIHgsIDE2ICogeSkpXG4gICAgKyAoUk9DS1lfV0VJR0hUICogbG9jYWxFbGV2YXRpb25Ob2lzZSgzMiAqIHgsIDMyICogeSkpXG4gICkgLyBUT1RBTF9XRUlHSFQ7XG59XG4iLCJpbXBvcnQgU2ltcGxleE5vaXNlIGZyb20gXCJzaW1wbGV4LW5vaXNlXCI7XG5cbi8vIFRPRE86IFNlZWRzIHNob3VsZCBwcm9iYWJseSBiZSBjb25maWd1cmFibGUsIG9yIGZyb20gYSBicm93c2VyIGZpbmdlcnByaW50LFxuLy8gb3IgY2FjaGVkIGluIGxvY2FsU3RvcmFnZSAobGF0dGVyIHR3byBmb3IgcmVwZWF0YWJpbGl0eSwgZm9ybWVyIGZvciBuZXcgbWFwcylcbmNvbnN0IG1vaXN0dXJlU2ltcGxleCA9IG5ldyBTaW1wbGV4Tm9pc2UoXCJtb2lzdHVyZVwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbW9pc3R1cmVOb2lzZSh4OiBudW1iZXIsIHk6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBtb2lzdHVyZVNpbXBsZXgubm9pc2UyRCh4LCB5KTtcbn1cbiIsIi8vIFRha2VzIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLCBhbmQgcmV0dXJucyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMSwgd2VpZ2h0ZWRcbi8vIHRvd2FyZHMgMS4gSW5wdXRzIGNsb3NlIHRvIDAgd2lsbCBvdXRwdXQgbG93LCBidXQgbWlkLSB0byB1cHBlci1yYW5nZSB2YWx1ZXNcbi8vIHdpbGwgdGVuZCB0byAxLiBQb3dlciBzaG91bGQgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxIGFzIHdlbGw7IGxvdyB2YWx1ZXNcbi8vIG9mIGBwb3dlcmAgd2lsbCByZXN1bHQgaW4gYSBtb3JlIGV2ZW4gZGlzdHJpYnV0aW9uLCB3aGVyZWFzIGhpZ2hlciB2YWx1ZXMgb2Zcbi8vIGBwb3dlcmAgd2lsbCByZXN1bHQgaW4gb3V0cHV0IHRoYXQgdGVuZHMgbW9yZSBoZWF2aWx5IHRvIDEuXG5leHBvcnQgZnVuY3Rpb24gd2VpZ2h0SGlnaChwZXJjZW50OiBudW1iZXIsIHBvd2VyID0gMC41KTogbnVtYmVyIHtcbiAgY29uc3QgZXhwb25lbnQgPSAxIC0gcG93ZXI7XG4gIHJldHVybiBwZXJjZW50ICoqIChleHBvbmVudCk7XG59XG5cbi8vIFRha2VzIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLCBhbmQgcmV0dXJucyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMSwgd2VpZ2h0ZWRcbi8vIHRvd2FyZHMgMC4gSW5wdXRzIGNsb3NlIHRvIDEgd2lsbCBvdXRwdXQgaGlnaCwgYnV0IG1pZC0gdG8gbG93LXJhbmdlIHZhbHVlc1xuLy8gd2lsbCB0ZW5kIHRvIDAuIFBvd2VyIHNob3VsZCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEgYXMgd2VsbDsgbG93IHZhbHVlc1xuLy8gb2YgYHBvd2VyYCB3aWxsIHJlc3VsdCBpbiBhIG1vcmUgZXZlbiBkaXN0cmlidXRpb24sIHdoZXJlYXMgaGlnaGVyIHZhbHVlcyBvZlxuLy8gYHBvd2VyYCB3aWxsIHJlc3VsdCBpbiBvdXRwdXQgdGhhdCB0ZW5kcyBtb3JlIGhlYXZpbHkgdG8gMC5cbmV4cG9ydCBmdW5jdGlvbiB3ZWlnaHRMb3cocGVyY2VudDogbnVtYmVyLCBwb3dlciA9IDAuNSk6IG51bWJlciB7XG4gIHJldHVybiAxIC0gd2VpZ2h0SGlnaCgxIC0gcGVyY2VudCwgcG93ZXIpO1xufVxuXG4vLyBUYWtlcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMSwgYW5kIHJldHVybnMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEsIHdlaWdodGVkXG4vLyB0b3dhcmRzIDAuNSAoY2VudGVyKS4gUG93ZXIgc2hvdWxkIGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSBhcyB3ZWxsOyBsb3dcbi8vIHZhbHVlcyBvZiBgcG93ZXJgIHdpbGwgcmVzdWx0IGluIGEgbW9yZSBldmVuIGRpc3RyaWJ1dGlvbiwgd2hlcmVhcyBoaWdoZXJcbi8vIHZhbHVlcyBvZiBgcG93ZXJgIHdpbGwgcmVzdWx0IGluIG91dHB1dCB0aGF0IHRlbmRzIG1vcmUgaGVhdmlseSB0byAwLjUuXG5leHBvcnQgZnVuY3Rpb24gd2VpZ2h0TWlkKHBlcmNlbnQ6IG51bWJlciwgcG93ZXIgPSAwLjUpOiBudW1iZXIge1xuICBjb25zdCBwZXJjZW50RnJvbUNlbnRlciA9IDIgKiBNYXRoLmFicyhwZXJjZW50IC0gMC41KTtcbiAgY29uc3Qgd2VpZ2h0ZWRWYWx1ZSA9IHdlaWdodExvdyhwZXJjZW50RnJvbUNlbnRlciwgcG93ZXIpIC8gMjtcbiAgcmV0dXJuIHBlcmNlbnQgPCAwLjUgPyAwLjUgLSB3ZWlnaHRlZFZhbHVlIDogMC41ICsgd2VpZ2h0ZWRWYWx1ZTtcbn1cblxuLy8gVGFrZXMgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDEsIGFuZCByZXR1cm5zIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAxLCB3ZWlnaHRlZFxuLy8gdG93YXJkcyAwIG9yIDEgKHRoZSBleHRyZW1lcykuIElucHV0cyBhYm92ZSAwLjUgd2lsbCB0ZW5kIG1vcmUgdG93YXJkIDEsIGFuZFxuLy8gaW5wdXRzIGJlbG93IDAuNSB3aWxsIHRlbmQgbW9yZSB0b3dhcmQgemVyby4gUG93ZXIgc2hvdWxkIGJlIGEgbnVtYmVyIGJldHdlZW5cbi8vIDAgYW5kIDEgYXMgd2VsbDsgbG93IHZhbHVlcyBvZiBgcG93ZXJgIHdpbGwgcmVzdWx0IGluIGEgbW9yZSBldmVuXG4vLyBkaXN0cmlidXRpb24sIHdoZXJlYXMgaGlnaGVyIHZhbHVlcyBvZiBgcG93ZXJgIHdpbGwgcmVzdWx0IGluIG91dHB1dCB0aGF0XG4vLyB0ZW5kcyBtb3JlIGhlYXZpbHkgdG8gMCBvciAxLlxuZXhwb3J0IGZ1bmN0aW9uIHdlaWdodEV4dHJlbWUocGVyY2VudDogbnVtYmVyLCBwb3dlciA9IDAuNSk6IG51bWJlciB7XG4gIGNvbnN0IGRpc3RhbmNlRnJvbUNlbnRlciA9IDIgKiBNYXRoLmFicyhwZXJjZW50IC0gMC41KTtcbiAgY29uc3Qgd2VpZ2h0ZWRWYWx1ZSA9IHdlaWdodEhpZ2goZGlzdGFuY2VGcm9tQ2VudGVyLCBwb3dlcikgLyAyO1xuICByZXR1cm4gcGVyY2VudCA8IDAuNSA/IDAuNSAtIHdlaWdodGVkVmFsdWUgOiAwLjUgKyB3ZWlnaHRlZFZhbHVlO1xufVxuIiwiaW1wb3J0IHsgd2VpZ2h0SGlnaCB9IGZyb20gXCJAL3V0aWxpdGllcy93ZWlnaHRcIjtcblxuZXhwb3J0IGNvbnN0IFNOT1dfTElORSA9IDE5NTtcblxuLy8gVGFrZXMgYW4gZWxldmF0aW9uIGZyb20gMC0yNTUgYW5kIHJldHVybnMgYSBudW1iZXIgZnJvbSAwLTI1NVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc25vd2luZXNzKGVsZXZhdGlvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgcGVyY2VudEVsZXZhdGVkT3ZlclNub3dMaW5lID0gTWF0aC5tYXgoKGVsZXZhdGlvbiAtIFNOT1dfTElORSkgLyAoMjU1IC0gU05PV19MSU5FKSwgMCk7XG4gIHJldHVybiAyNTUgKiB3ZWlnaHRIaWdoKHBlcmNlbnRFbGV2YXRlZE92ZXJTbm93TGluZSwgMC43NSk7XG59XG4iLCJpbXBvcnQgZWxldmF0aW9uTm9pc2UgZnJvbSBcIkAvbWFwbWFraW5nL211ZHdvcmxkL2dlbmVyYXRvcnMvZWxldmF0aW9uTm9pc2VcIjtcbmltcG9ydCBtb2lzdHVyZU5vaXNlIGZyb20gXCJAL21hcG1ha2luZy9tdWR3b3JsZC9nZW5lcmF0b3JzL21vaXN0dXJlTm9pc2VcIjtcbmltcG9ydCB7IFNOT1dfTElORSB9IGZyb20gXCJAL21hcG1ha2luZy9tdWR3b3JsZC9nZW5lcmF0b3JzL3Nub3dpbmVzc1wiO1xuaW1wb3J0IHsgZiB9IGZyb20gXCJAL3V0aWxpdGllcy9tYXRoXCI7XG5pbXBvcnQgU2ltcGxleE5vaXNlIGZyb20gXCJzaW1wbGV4LW5vaXNlXCI7XG5cbmV4cG9ydCBjb25zdCBUUkVFX0xJTkUgPSBTTk9XX0xJTkUgKyBmKCgyNTUgLSBTTk9XX0xJTkUpIC8gNCk7XG5cbi8vIFRPRE86IFNlZWRzIHNob3VsZCBwcm9iYWJseSBiZSBjb25maWd1cmFibGUsIG9yIGZyb20gYSBicm93c2VyIGZpbmdlcnByaW50LFxuLy8gb3IgY2FjaGVkIGluIGxvY2FsU3RvcmFnZSAobGF0dGVyIHR3byBmb3IgcmVwZWF0YWJpbGl0eSwgZm9ybWVyIGZvciBuZXcgbWFwcylcbmNvbnN0IGZsb3JhU2ltcGxleCA9IG5ldyBTaW1wbGV4Tm9pc2UoXCJmbG9yYVwiKTtcblxuY29uc3QgRUxFVkFUSU9OX1dFSUdIVCA9IDEuNTtcbmNvbnN0IE1PSVNUVVJFX1dFSUdIVCA9IDAuMjU7XG4vLyBjb25zdCBGTE9SQV9XRUlHSFQgPSAwO1xuY29uc3QgRkxPUkFfV0VJR0hUID0gMTtcbi8vIGNvbnN0IEZMT1JBX1dFSUdIVCA9IDAuNzU7XG5jb25zdCBGTE9SQV9GUkVRVUVOQ1kgPSAyMDtcbi8vIGNvbnN0IEdST1ZFU19XRUlHSFQgPSAwLjU7XG5jb25zdCBHUk9WRVNfV0VJR0hUID0gMTtcbi8vIGNvbnN0IEdST1ZFU19GUkVRVUVOQ1kgPSA0MDtcbmNvbnN0IEdST1ZFU19GUkVRVUVOQ1kgPSA3MDtcbmNvbnN0IFRPVEFMX1dFSUdIVCA9IEVMRVZBVElPTl9XRUlHSFQgKyBGTE9SQV9XRUlHSFQ7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZsb3JhTm9pc2UoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gKFxuICAgIChFTEVWQVRJT05fV0VJR0hUICogZWxldmF0aW9uTm9pc2UoeCwgeSkpXG4gICAgKyAoTU9JU1RVUkVfV0VJR0hUICogbW9pc3R1cmVOb2lzZSh4LCB5KSlcbiAgICArIChGTE9SQV9XRUlHSFQgKiBmbG9yYVNpbXBsZXgubm9pc2UyRChGTE9SQV9GUkVRVUVOQ1kgKiB4LCBGTE9SQV9GUkVRVUVOQ1kgKiB5KSlcbiAgICArIChHUk9WRVNfV0VJR0hUICogZmxvcmFTaW1wbGV4Lm5vaXNlMkQoR1JPVkVTX0ZSRVFVRU5DWSAqIHgsIEdST1ZFU19GUkVRVUVOQ1kgKiB5KSlcbiAgKSAvIFRPVEFMX1dFSUdIVDtcbn1cbiIsImltcG9ydCB7IHJldmVyc2VGaW5kIH0gZnJvbSBcIkAvdXRpbGl0aWVzL2NvbGxlY3Rpb25zXCI7XG5pbXBvcnQgeyBkaXN0YW5jZUJldHdlZW4gfSBmcm9tIFwiQC91dGlsaXRpZXMvZ2VvXCI7XG5pbXBvcnQgeyBmIH0gZnJvbSBcIkAvdXRpbGl0aWVzL21hdGhcIjtcblxuZXhwb3J0IGNsYXNzIFBhdGhOb2RlIHtcbiAgcHVibGljIGNvc3Q6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgeDogbnVtYmVyLFxuICAgIHB1YmxpYyB5OiBudW1iZXIsXG4gICAgcHVibGljIGRpc3RhbmNlVHJhdmVsZWQ6IG51bWJlcixcbiAgICBwdWJsaWMgZGlzdGFuY2VUb0VuZDogbnVtYmVyLFxuICAgIHB1YmxpYyBwYXJlbnQ6IFBhdGhOb2RlIHwgbnVsbCxcbiAgKSB7XG4gICAgdGhpcy5jb3N0ID0gZGlzdGFuY2VUcmF2ZWxlZCArIGRpc3RhbmNlVG9FbmQ7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGF0aEZpbmRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbm9kZXNUb1dhbGs6IFBhdGhOb2RlW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSB3YWxrZWROb2RlczogUGF0aE5vZGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2VsbEJsb2NrZWQ6ICh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4gYm9vbGVhbixcbiAgKSB7fVxuXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMubm9kZXNUb1dhbGsubGVuZ3RoID0gMDtcbiAgICB0aGlzLndhbGtlZE5vZGVzLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvLyBOT1RFOiBQb3B1bGF0ZXMgcGF0aCBhcnJheSBpbiByZXZlcnNlIChlbmQgb2YgdGhlIGxpc3QgaXMgdGhlIHN0YXJ0IG9mIHRoZVxuICAvLyBwYXRoLCBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgaXMgdGhlIGRlc3RpbmF0aW9uKS5cbiAgLy9cbiAgLy8gTkI6IFNvbWV0aGluZyB3ZWlyZCBoYXBwZW5pbmc/IFNlZSBpZiBhbnkgY29vcmRpbmF0ZXMgaW4geW91ciBzeXN0ZW0vY2FsY3NcbiAgLy8gICAgIGFyZSBub24taW50ZWdlciB2YWx1ZXMuXG4gIC8vXG4gIHBvcHVsYXRlUGF0aChcbiAgICBwYXRoOiBQYXRoTm9kZVtdLFxuICAgIHN0YXJ0WDogbnVtYmVyLFxuICAgIHN0YXJ0WTogbnVtYmVyLFxuICAgIGRlc3RYOiBudW1iZXIsXG4gICAgZGVzdFk6IG51bWJlcixcbiAgICBleWVzaWdodDogbnVtYmVyLFxuICAgIHN0ZXBEaXN0YW5jZTogbnVtYmVyLFxuICAgIG1hcHBlcj86IChwYXRoTm9kZTogUGF0aE5vZGUpID0+IHZvaWQsXG4gICk6IHZvaWQge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgICBwYXRoLmxlbmd0aCA9IDA7XG4gICAgc3RhcnRYID0gZihzdGFydFgpO1xuICAgIHN0YXJ0WSA9IGYoc3RhcnRZKTtcbiAgICBkZXN0WCA9IGYoZGVzdFgpO1xuICAgIGRlc3RZID0gZihkZXN0WSk7XG4gICAgc3RlcERpc3RhbmNlID0gZihzdGVwRGlzdGFuY2UpO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiUkVTRVRcIik7XG5cbiAgICBjb25zdCB7IG5vZGVzVG9XYWxrLCB3YWxrZWROb2RlcyB9ID0gdGhpcztcbiAgICBsZXQgdG90YWxEaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlbihzdGFydFgsIHN0YXJ0WSwgZGVzdFgsIGRlc3RZKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0b3RhbERpc3RhbmNlKTtcblxuICAgIGlmICh0b3RhbERpc3RhbmNlID4gZXllc2lnaHQpIHtcbiAgICAgIGRlc3RYID0gZihzdGFydFggKyAoKGRlc3RYIC0gc3RhcnRYKSAqIChleWVzaWdodCAvIHRvdGFsRGlzdGFuY2UpKSk7XG4gICAgICBkZXN0WSA9IGYoc3RhcnRZICsgKChkZXN0WSAtIHN0YXJ0WSkgKiAoZXllc2lnaHQgLyB0b3RhbERpc3RhbmNlKSkpO1xuICAgICAgdG90YWxEaXN0YW5jZSA9IGV5ZXNpZ2h0O1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygyKTtcblxuICAgIGlmICh0aGlzLmNlbGxCbG9ja2VkKGRlc3RYLCBkZXN0WSkpIHJldHVybjtcbiAgICAvLyBjb25zb2xlLmxvZygzKTtcblxuICAgIG5vZGVzVG9XYWxrLnB1c2gobmV3IFBhdGhOb2RlKHN0YXJ0WCwgc3RhcnRZLCAwLCB0b3RhbERpc3RhbmNlLCBudWxsKSk7XG5cbiAgICBsZXQgY3VycmVudDogUGF0aE5vZGU7XG5cbiAgICB3aGlsZSAobm9kZXNUb1dhbGsubGVuZ3RoKSB7XG4gICAgICBjdXJyZW50ID0gdGhpcy5wb3BMb3dlc3RDb3N0VW53YWxrZWROb2RlKCkhO1xuICAgICAgLy8gY29uc29sZS5sb2coNCwgbm9kZXNUb1dhbGsubGVuZ3RoKTtcblxuICAgICAgaWYgKGN1cnJlbnQuZGlzdGFuY2VUb0VuZCA8PSBzdGVwRGlzdGFuY2UpIHtcbiAgICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBuZXcgUGF0aE5vZGUoXG4gICAgICAgICAgZGVzdFgsXG4gICAgICAgICAgZGVzdFksXG4gICAgICAgICAgY3VycmVudC5kaXN0YW5jZVRyYXZlbGVkICsgY3VycmVudC5kaXN0YW5jZVRvRW5kLFxuICAgICAgICAgIDAsXG4gICAgICAgICAgY3VycmVudCxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBjb25zb2xlLmxvZyg1KTtcbiAgICAgICAgdGhpcy51bmNoYWluSW50b1BhdGgoZGVzdGluYXRpb24sIHBhdGgsIG1hcHBlcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gY29uc29sZS5sb2coNik7XG4gICAgICBpZiAoY3VycmVudC5kaXN0YW5jZVRyYXZlbGVkID4gKGV5ZXNpZ2h0ICogNCkpIHJldHVybjtcbiAgICAgIC8vIGNvbnNvbGUubG9nKDcpO1xuXG4gICAgICB3YWxrZWROb2Rlcy5wdXNoKGN1cnJlbnQpO1xuXG4gICAgICB0aGlzLmZvckVhY2hOZWlnaGJvck9mKGN1cnJlbnQueCwgY3VycmVudC55LCBzdGVwRGlzdGFuY2UsICh4LCB5LCBkaXN0YW5jZVRvVHJhdmVsKSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKDgpO1xuICAgICAgICBpZiAodGhpcy5jZWxsQmxvY2tlZCh4LCB5KSkgcmV0dXJuO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyg5KTtcblxuICAgICAgICBjb25zdCBkaXN0YW5jZVRyYXZlbGVkID0gY3VycmVudC5kaXN0YW5jZVRyYXZlbGVkICsgZGlzdGFuY2VUb1RyYXZlbDtcbiAgICAgICAgY29uc3Qgd2Fsa2VkTm9kZSA9IHJldmVyc2VGaW5kKHdhbGtlZE5vZGVzLCB3YWxrZWQgPT4gd2Fsa2VkLnggPT09IHggJiYgd2Fsa2VkLnkgPT09IHkpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygxMCk7XG4gICAgICAgIC8vIGlmICh3YWxrZWROb2RlICYmIHdhbGtlZE5vZGUuZGlzdGFuY2VUcmF2ZWxlZCA+PSBkaXN0YW5jZVRyYXZlbGVkKSByZXR1cm47XG4gICAgICAgIGlmICh3YWxrZWROb2RlKSByZXR1cm47XG5cbiAgICAgICAgLy8gY29uc29sZS5sb2coMTEpO1xuICAgICAgICBjb25zdCB1bndhbGtlZE5vZGUgPSByZXZlcnNlRmluZChub2Rlc1RvV2FsaywgdW53YWxrZWQgPT4gdW53YWxrZWQueCA9PT0geCAmJiB1bndhbGtlZC55ID09PSB5KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coMTIpO1xuICAgICAgICBpZiAodW53YWxrZWROb2RlKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coMTMpO1xuICAgICAgICAgIHVud2Fsa2VkTm9kZS5wYXJlbnQgPSBjdXJyZW50O1xuICAgICAgICAgIHVud2Fsa2VkTm9kZS5kaXN0YW5jZVRyYXZlbGVkID0gZGlzdGFuY2VUcmF2ZWxlZDtcbiAgICAgICAgICB1bndhbGtlZE5vZGUuY29zdCA9IGRpc3RhbmNlVHJhdmVsZWQgKyB1bndhbGtlZE5vZGUuZGlzdGFuY2VUb0VuZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygxNCk7XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VUb0VuZCA9IGRpc3RhbmNlQmV0d2Vlbih4LCB5LCBkZXN0WCwgZGVzdFkpO1xuICAgICAgICAgIG5vZGVzVG9XYWxrLnB1c2gobmV3IFBhdGhOb2RlKHgsIHksIGRpc3RhbmNlVHJhdmVsZWQsIGRpc3RhbmNlVG9FbmQsIGN1cnJlbnQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogTWlnaHQgd2FudCB0byBvcmdhbml6ZSB0aGUgdW53YWxrZWQgbm9kZXMgbGlzdCBieSBjb3N0IHVwIGZyb250IHNvIHdlXG4gIC8vICAgICAgIGRvbid0IGhhdmUgdG8gaXRlcmF0ZSBvdmVyIGFzIG1hbnkgZWFjaCB0aW1lLlxuICBwcml2YXRlIHBvcExvd2VzdENvc3RVbndhbGtlZE5vZGUoKTogUGF0aE5vZGUgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHsgbm9kZXNUb1dhbGsgfSA9IHRoaXM7XG5cbiAgICBpZiAobm9kZXNUb1dhbGsubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgaWYgKG5vZGVzVG9XYWxrLmxlbmd0aCA9PT0gMSkgcmV0dXJuIG5vZGVzVG9XYWxrLnBvcCgpO1xuXG4gICAgbGV0IGxvd2VzdEluZGV4ID0gMDtcbiAgICBsZXQgbG93ZXN0ID0gbm9kZXNUb1dhbGtbbG93ZXN0SW5kZXhdO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbm9kZXNUb1dhbGsubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBub2Rlc1RvV2Fsa1tpXTtcbiAgICAgIGlmIChjdXJyZW50LmNvc3QgPCBsb3dlc3QuY29zdCkge1xuICAgICAgICBsb3dlc3RJbmRleCA9IGk7XG4gICAgICAgIGxvd2VzdCA9IGN1cnJlbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZXNUb1dhbGsuc3BsaWNlKGxvd2VzdEluZGV4LCAxKTtcbiAgICByZXR1cm4gbG93ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSB1bmNoYWluSW50b1BhdGgobm9kZTogUGF0aE5vZGUsIHBhdGg6IFBhdGhOb2RlW10sIG1hcHBlcj86IChwYXRoTm9kZTogUGF0aE5vZGUpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBwYXRoLnB1c2gobm9kZSk7XG4gICAgaWYgKG1hcHBlcikgbWFwcGVyKG5vZGUpO1xuICAgIGlmIChub2RlLnBhcmVudCkgdGhpcy51bmNoYWluSW50b1BhdGgobm9kZS5wYXJlbnQsIHBhdGgsIG1hcHBlcik7XG4gIH1cblxuICBwcml2YXRlIGZvckVhY2hOZWlnaGJvck9mKFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgc3RlcERpc3RhbmNlOiBudW1iZXIsXG4gICAgLy8gTk9URTogZGlzdGFuY2Ugd2lsbCBiZSAxIGZvciBjYXJkaW5hbCBkaXJlY3Rpb25zIGFuZCAxLjQxNCAoZXN0aW1hdGUgb2ZcbiAgICAvLyAgICAgICBNYXRoLnNxcnQoMikgdG8gYXZvaWQgdGhlIGNhbGN1bGF0aW9uKSBmb3IgZGlhZ29uYWxzLlxuICAgIG1hcHBlcjogKHg6IG51bWJlciwgeTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyKSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICBsZXQgbnk6IG51bWJlcjtcbiAgICBsZXQgbng6IG51bWJlcjtcblxuICAgIC8vIGNvbnN0IGNhcmRpbmFsV2VpZ2h0ID0gMTY7IC8vIFRPRE86IHJlcGxhY2Ugd2l0aCBkeW5hbWljIHRpbGUgc2l6ZVxuICAgIC8vIGNvbnN0IGNhcmRpbmFsV2VpZ2h0ID0gMTtcbiAgICBjb25zdCBjYXJkaW5hbFdlaWdodCA9IHN0ZXBEaXN0YW5jZTtcbiAgICAvLyBjb25zdCBkaWFnb25hbFdlaWdodCA9IGNhcmRpbmFsV2VpZ2h0ICogMS40O1xuICAgIGNvbnN0IGRpYWdvbmFsV2VpZ2h0ID0gY2FyZGluYWxXZWlnaHQgKiAxLjQxNDIxMzU2MjM3MzA5NTE7XG5cbiAgICAvLyA9PT0gVE9QIFJPVyA9PT1cbiAgICBueSA9IHkgLSBzdGVwRGlzdGFuY2U7XG5cbiAgICAvLyB0b3AgbGVmdFxuICAgIG54ID0geCAtIHN0ZXBEaXN0YW5jZTtcbiAgICBtYXBwZXIobngsIG55LCBkaWFnb25hbFdlaWdodCk7XG5cbiAgICAvLyB0b3BcbiAgICBueCA9IHg7XG4gICAgbWFwcGVyKG54LCBueSwgY2FyZGluYWxXZWlnaHQpO1xuXG4gICAgLy8gdG9wIHJpZ2h0XG4gICAgbnggPSB4ICsgc3RlcERpc3RhbmNlO1xuICAgIG1hcHBlcihueCwgbnksIGRpYWdvbmFsV2VpZ2h0KTtcblxuICAgIC8vID09PSBMRUZUIEFORCBSSUdIVCBTSURFUyA9PT1cbiAgICBueSA9IHk7XG5cbiAgICAvLyBsZWZ0XG4gICAgbnggPSB4IC0gc3RlcERpc3RhbmNlO1xuICAgIG1hcHBlcihueCwgbnksIGNhcmRpbmFsV2VpZ2h0KTtcblxuICAgIC8vIHJpZ2h0XG4gICAgbnggPSB4ICsgc3RlcERpc3RhbmNlO1xuICAgIG1hcHBlcihueCwgbnksIGNhcmRpbmFsV2VpZ2h0KTtcblxuICAgIC8vID09PSBCT1RUT00gUk9XID09PVxuICAgIG55ID0geSArIHN0ZXBEaXN0YW5jZTtcblxuICAgIC8vIGJvdHRvbSBsZWZ0XG4gICAgbnggPSB4IC0gc3RlcERpc3RhbmNlO1xuICAgIG1hcHBlcihueCwgbnksIGRpYWdvbmFsV2VpZ2h0KTtcblxuICAgIC8vIGJvdHRvbVxuICAgIG54ID0geDtcbiAgICBtYXBwZXIobngsIG55LCBjYXJkaW5hbFdlaWdodCk7XG5cbiAgICAvLyBib3R0b20gcmlnaHRcbiAgICBueCA9IHggKyBzdGVwRGlzdGFuY2U7XG4gICAgbWFwcGVyKG54LCBueSwgZGlhZ29uYWxXZWlnaHQpO1xuICB9XG59XG4iLCJpbXBvcnQgR3JpZCBmcm9tIFwiQC9tYXBtYWtpbmcvYmFzZS9HcmlkXCI7XG5pbXBvcnQgZWxldmF0aW9uTm9pc2UgZnJvbSBcIkAvbWFwbWFraW5nL211ZHdvcmxkL2dlbmVyYXRvcnMvZWxldmF0aW9uTm9pc2VcIjtcbmltcG9ydCBmbG9yYU5vaXNlLCB7IFRSRUVfTElORSB9IGZyb20gXCJAL21hcG1ha2luZy9tdWR3b3JsZC9nZW5lcmF0b3JzL2Zsb3JhTm9pc2VcIjtcbmltcG9ydCBtb2lzdHVyZU5vaXNlIGZyb20gXCJAL21hcG1ha2luZy9tdWR3b3JsZC9nZW5lcmF0b3JzL21vaXN0dXJlTm9pc2VcIjtcbmltcG9ydCB7IFNOT1dfTElORSB9IGZyb20gXCJAL21hcG1ha2luZy9tdWR3b3JsZC9nZW5lcmF0b3JzL3Nub3dpbmVzc1wiO1xuaW1wb3J0IFBhdGhGaW5kZXIsIHsgUGF0aE5vZGUgfSBmcm9tIFwiQC9wYXRoZmluZGluZy9iYXNlL1BhdGhGaW5kZXJcIjtcbmltcG9ydCB7IGNvb3JkcywgQ29vcmRzLCBkaXN0YW5jZUJldHdlZW4gfSBmcm9tIFwiQC91dGlsaXRpZXMvZ2VvXCI7XG5pbXBvcnQgeyBmLCByYW5kIH0gZnJvbSBcIkAvdXRpbGl0aWVzL21hdGhcIjtcblxuLy8gY29uc3QgVElMRV9XSURUSCA9IDE2O1xuXG5leHBvcnQgY29uc3QgZW51bSBTdHJ1Y3R1cmUge1xuICBOT05FLFxuICBUUkVFLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG8zMkJpdHModmFsdWU6IG51bWJlciwgcGxhY2U6IG51bWJlciwgYml0czogbnVtYmVyKSB7XG4gIHJldHVybiB2YWx1ZSA8PCAoMzEgLSBiaXRzIC0gcGxhY2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZnJvbTMyQml0cyh2YWx1ZTogbnVtYmVyLCBwbGFjZTogbnVtYmVyLCBiaXRzOiBudW1iZXIpIHtcbiAgLy8gcmV0dXJuIHZhbHVlID4+ICgzMSAtIGJpdHMgLSBwbGFjZSk7XG4gIGNvbnN0IG9mZnNldCA9IDMxIC0gcGxhY2U7XG4gIC8vIHRoZXJlJ3Mgbm8gd2F5IHRoaXMgaXMgdGhlIHNpbXBsZXN0IHdheSB0byBkbyB0aGlzXG4gIHJldHVybiAodmFsdWUgJSAoMiAqKiBvZmZzZXQpID4+IChvZmZzZXQgLSBiaXRzKSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVkd29ybGRNYXBwZXI8UiA9IHZvaWQ+IHtcbiAgKFxuICAgIHJvdzogbnVtYmVyLFxuICAgIGNvbDogbnVtYmVyLFxuICAgIGVsZXZhdGlvbjogbnVtYmVyLFxuICAgIG1vaXN0dXJlOiBudW1iZXIsXG4gICAgc3RydWN0dXJlOiBudW1iZXIsXG4gICAgdW5kZXJ3YXRlcjogYm9vbGVhbixcbiAgKTogUjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXVkd29ybGRNYXAge1xuICBwdWJsaWMgZ3JpZDogR3JpZDxVaW50MzJBcnJheT47XG4gIHB1YmxpYyBwYXRoRmluZGVyOiBQYXRoRmluZGVyO1xuICBwdWJsaWMgdGlsZVNpemU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcihyb3dDb3VudDogbnVtYmVyLCBjb2xDb3VudDogbnVtYmVyLCB0aWxlU2l6ZTogbnVtYmVyKSB7XG4gICAgdGhpcy50aWxlU2l6ZSA9IHRpbGVTaXplO1xuICAgIHRoaXMuZ3JpZCA9IG5ldyBHcmlkKHJvd0NvdW50LCBjb2xDb3VudCwgVWludDMyQXJyYXkpO1xuICAgIHRoaXMucGF0aEZpbmRlciA9IG5ldyBQYXRoRmluZGVyKCh4LCB5KSA9PiAhdGhpcy53YWxrYWJsZUF0KHgsIHkpKTtcbiAgfVxuXG4gIHN0YXRpYyBmaWxsV2l0aFRlcnJhaW4oZ3JpZDogR3JpZCk6IHZvaWQge1xuICAgIGdyaWQuZmlsbCgocm93LCBjb2wsIF92YWwpID0+IHtcbiAgICAgIGNvbnN0IHggPSBjb2wgLyBncmlkLmNvbENvdW50O1xuICAgICAgY29uc3QgeSA9IHJvdyAvIGdyaWQucm93Q291bnQ7XG5cbiAgICAgIC8vIGBlbGV2YXRpb25gIHdpbGwgYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NSwgd2hlcmUgMTI4IGlzIHNlYSBsZXZlbFxuICAgICAgY29uc3QgZWxldmF0aW9uID0gdGhpcy5ub2lzZVRvQnl0ZShlbGV2YXRpb25Ob2lzZSh4LCB5KSk7XG4gICAgICBjb25zdCB1bmRlcndhdGVyID0gZWxldmF0aW9uIDwgMTI4O1xuXG4gICAgICAvLyAyNTUgLSA2NCA9IDE5MSwgc28gb25jZSB5b3UgZ2V0IHdpdGhpbiA2NCBvZiB0aGUgY2VpbGluZyBpdCBnZXRzIGRyaWVyXG4gICAgICAvLyBhbmQgZHJpZXIuLi5cbiAgICAgIGNvbnN0IGRyeW5lc3MgPSBmKDI1NSAqIChNYXRoLm1heChlbGV2YXRpb24gLSAxOTEsIDApIC8gNjQpKTtcbiAgICAgIC8vIGplc3VzIGNocmlzdFxuICAgICAgY29uc3Qgd2V0bmVzcyA9IDAuOCAqIDI1NSAqICgoMTI4IC0gTWF0aC5hYnMoZWxldmF0aW9uIC0gMTI4KSkgLyAxMjgpO1xuXG4gICAgICBjb25zdCBtb2lzdHVyZSA9IE1hdGgubWF4KHdldG5lc3MsIHRoaXMubm9pc2VUb0J5dGUobW9pc3R1cmVOb2lzZSh4LCB5KSkgLSBkcnluZXNzKTtcblxuICAgICAgY29uc3QgZmxvcmFsaXR5ID0gZmxvcmFOb2lzZSh4LCB5KTsgLy8gZmxvcmFsaXR5IGNvdWxkIGJlIGFueXdoZXJlIGZyb20gLTEgdG8gMVxuICAgICAgY29uc3QgZGlzdGFuY2VUb1NlYUxldmVsID0gZWxldmF0aW9uIC0gMTI4O1xuICAgICAgY29uc3Qgc3RydWN0dXJlID0gZmxvcmFsaXR5ID4gMC4yNSAmJiBlbGV2YXRpb24gPCBUUkVFX0xJTkUgJiYgZGlzdGFuY2VUb1NlYUxldmVsID4gMlxuICAgICAgICA/IFN0cnVjdHVyZS5UUkVFXG4gICAgICAgIDogU3RydWN0dXJlLk5PTkU7XG5cbiAgICAgIHJldHVybiB0aGlzLnRpbGVWYWx1ZShcbiAgICAgICAgZWxldmF0aW9uLFxuICAgICAgICBtb2lzdHVyZSxcbiAgICAgICAgc3RydWN0dXJlLFxuICAgICAgICB1bmRlcndhdGVyLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBlYWNoVGlsZShncmlkOiBHcmlkLCBtYXBwZXI6IE11ZHdvcmxkTWFwcGVyPHZvaWQ+KTogdm9pZCB7XG4gICAgZ3JpZC5lYWNoKChyb3csIGNvbCwgdmFsKSA9PiB7XG4gICAgICBtYXBwZXIoXG4gICAgICAgIHJvdyxcbiAgICAgICAgY29sLFxuICAgICAgICB0aGlzLmVsZXZhdGlvbkZyb21UaWxlVmFsdWUodmFsKSxcbiAgICAgICAgdGhpcy5tb2lzdHVyZUZyb21UaWxlVmFsdWUodmFsKSxcbiAgICAgICAgdGhpcy5zdHJ1Y3R1cmVGcm9tVGlsZVZhbHVlKHZhbCksXG4gICAgICAgIHRoaXMudW5kZXJ3YXRlckZyb21UaWxlVmFsdWUodmFsKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZmVlZE1hcHBlcjxUPihncmlkOiBHcmlkLCByb3c6IG51bWJlciwgY29sOiBudW1iZXIsIG1hcHBlcjogTXVkd29ybGRNYXBwZXI8VD4pOiBUIHtcbiAgICBjb25zdCB2YWx1ZSA9IGdyaWQudmFsdWVBdChyb3csIGNvbCk7XG4gICAgcmV0dXJuIG1hcHBlcihcbiAgICAgIHJvdyxcbiAgICAgIGNvbCxcbiAgICAgIHRoaXMuZWxldmF0aW9uRnJvbVRpbGVWYWx1ZSh2YWx1ZSksXG4gICAgICB0aGlzLm1vaXN0dXJlRnJvbVRpbGVWYWx1ZSh2YWx1ZSksXG4gICAgICB0aGlzLnN0cnVjdHVyZUZyb21UaWxlVmFsdWUodmFsdWUpLFxuICAgICAgdGhpcy51bmRlcndhdGVyRnJvbVRpbGVWYWx1ZSh2YWx1ZSksXG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyBlYWNoTmVpZ2hib3JpbmdUaWxlKGdyaWQ6IEdyaWQsIHJvdzogbnVtYmVyLCBjb2w6IG51bWJlciwgbWFwcGVyOiBNdWR3b3JsZE1hcHBlcjx2b2lkPik6IHZvaWQge1xuICAgIGxldCBuUm93OiBudW1iZXI7XG4gICAgbGV0IG5Db2w6IG51bWJlcjtcblxuICAgIC8vID09PSBUT1AgUk9XID09PVxuICAgIG5Sb3cgPSByb3cgLSAxO1xuXG4gICAgLy8gdG9wIGxlZnRcbiAgICBuQ29sID0gY29sIC0gMTtcbiAgICBNdWR3b3JsZE1hcC5mZWVkTWFwcGVyKGdyaWQsIG5Sb3csIG5Db2wsIG1hcHBlcik7XG5cbiAgICAvLyB0b3BcbiAgICBuQ29sID0gY29sO1xuICAgIE11ZHdvcmxkTWFwLmZlZWRNYXBwZXIoZ3JpZCwgblJvdywgbkNvbCwgbWFwcGVyKTtcblxuICAgIC8vIHRvcCByaWdodFxuICAgIG5Db2wgPSBjb2wgKyAxO1xuICAgIE11ZHdvcmxkTWFwLmZlZWRNYXBwZXIoZ3JpZCwgblJvdywgbkNvbCwgbWFwcGVyKTtcblxuICAgIC8vID09PSBMRUZUIEFORCBSSUdIVCBTSURFUyA9PT1cbiAgICBuUm93ID0gcm93O1xuXG4gICAgLy8gbGVmdFxuICAgIG5Db2wgPSBjb2wgLSAxO1xuICAgIE11ZHdvcmxkTWFwLmZlZWRNYXBwZXIoZ3JpZCwgblJvdywgbkNvbCwgbWFwcGVyKTtcblxuICAgIC8vIHJpZ2h0XG4gICAgbkNvbCA9IGNvbCArIDE7XG4gICAgTXVkd29ybGRNYXAuZmVlZE1hcHBlcihncmlkLCBuUm93LCBuQ29sLCBtYXBwZXIpO1xuXG4gICAgLy8gPT09IEJPVFRPTSBST1cgPT09XG4gICAgblJvdyA9IHJvdyArIDE7XG5cbiAgICAvLyBib3R0b20gbGVmdFxuICAgIG5Db2wgPSBjb2wgLSAxO1xuICAgIE11ZHdvcmxkTWFwLmZlZWRNYXBwZXIoZ3JpZCwgblJvdywgbkNvbCwgbWFwcGVyKTtcblxuICAgIC8vIGJvdHRvbVxuICAgIG5Db2wgPSBjb2w7XG4gICAgTXVkd29ybGRNYXAuZmVlZE1hcHBlcihncmlkLCBuUm93LCBuQ29sLCBtYXBwZXIpO1xuXG4gICAgLy8gYm90dG9tIHJpZ2h0XG4gICAgbkNvbCA9IGNvbCArIDE7XG4gICAgTXVkd29ybGRNYXAuZmVlZE1hcHBlcihncmlkLCBuUm93LCBuQ29sLCBtYXBwZXIpO1xuICB9XG5cbiAgLy8gV2hlcmUgYG5vaXNlTW9kaWZpZXJgIGlzIGEgdmFsdWUgYmV0d2VlbiAtMSBhbmQgMSAoZXhjbHVzaXZlKSwgcmV0dXJucyBhXG4gIC8vIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxuICBzdGF0aWMgbm9pc2VUb0J5dGUobm9pc2VNb2RpZmllcjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZigobm9pc2VNb2RpZmllciArIDEpICogMTI4KTtcbiAgfVxuXG4gIHN0YXRpYyB0aWxlVmFsdWUoXG4gICAgZWxldmF0aW9uOiBudW1iZXIsIC8vIDggYml0cyAoMSBieXRlOyAwLTI1NSlcbiAgICBtb2lzdHVyZTogbnVtYmVyLCAvLyA4IGJpdHMgKDEgYnl0ZTsgMC0yNTUpXG4gICAgc3RydWN0dXJlOiBudW1iZXIsIC8vIDggYml0cyAoMSBieXRlOyAwLTI1NSlcbiAgICB1bmRlcndhdGVyOiBib29sZWFuLCAvLyAxIGJpdCAodHJ1ZSBvciBmYWxzZSlcbiAgICAvLyB1bmtub3duMjogYm9vbGVhbiwgLy8gMSBiaXQgKHRydWUgb3IgZmFsc2UpXG4gICAgLy8gdW5rbm93bjM6IGJvb2xlYW4sIC8vIDEgYml0ICh0cnVlIG9yIGZhbHNlKVxuICAgIC8vIHVua25vd240OiBib29sZWFuLCAvLyAxIGJpdCAodHJ1ZSBvciBmYWxzZSlcbiAgICAvLyB1bmtub3duNTogYm9vbGVhbiwgLy8gMSBiaXQgKHRydWUgb3IgZmFsc2UpXG4gICAgLy8gdW5rbm93bjY6IGJvb2xlYW4sIC8vIDEgYml0ICh0cnVlIG9yIGZhbHNlKVxuICAgIC8vIHVua25vd243OiBib29sZWFuLCAvLyAxIGJpdCAodHJ1ZSBvciBmYWxzZSlcbiAgICAvLyB1bmtub3duODogYm9vbGVhbiwgLy8gMSBiaXQgKHRydWUgb3IgZmFsc2UpXG4gICk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRvMzJCaXRzKGVsZXZhdGlvbiwgMCwgOClcbiAgICAgIHwgdG8zMkJpdHMobW9pc3R1cmUsIDgsIDgpXG4gICAgICB8IHRvMzJCaXRzKHN0cnVjdHVyZSwgMTYsIDgpXG4gICAgICB8IHRvMzJCaXRzKHVuZGVyd2F0ZXIgPyAxIDogMCwgMjQsIDEpO1xuICAgIC8vIHwgdG8zMkJpdHModW5rbm93bjIgPyAxIDogMCwgMjUsIDEpXG4gICAgLy8gfCB0bzMyQml0cyh1bmtub3duMyA/IDEgOiAwLCAyNiwgMSlcbiAgICAvLyB8IHRvMzJCaXRzKHVua25vd240ID8gMSA6IDAsIDI3LCAxKVxuICAgIC8vIHwgdG8zMkJpdHModW5rbm93bjUgPyAxIDogMCwgMjgsIDEpXG4gICAgLy8gfCB0bzMyQml0cyh1bmtub3duNiA/IDEgOiAwLCAyOSwgMSlcbiAgICAvLyB8IHRvMzJCaXRzKHVua25vd243ID8gMSA6IDAsIDMwLCAxKVxuICAgIC8vIHwgdG8zMkJpdHModW5rbm93bjggPyAxIDogMCwgMzEsIDEpO1xuICB9XG5cbiAgc3RhdGljIGVsZXZhdGlvbkZyb21UaWxlVmFsdWUodGlsZVZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBmcm9tMzJCaXRzKHRpbGVWYWx1ZSwgMCwgOCk7XG4gIH1cblxuICBzdGF0aWMgbW9pc3R1cmVGcm9tVGlsZVZhbHVlKHRpbGVWYWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZnJvbTMyQml0cyh0aWxlVmFsdWUsIDgsIDgpO1xuICB9XG5cbiAgc3RhdGljIHN0cnVjdHVyZUZyb21UaWxlVmFsdWUodGlsZVZhbHVlOiBudW1iZXIpOiBTdHJ1Y3R1cmUge1xuICAgIHJldHVybiBmcm9tMzJCaXRzKHRpbGVWYWx1ZSwgMTYsIDgpO1xuICB9XG5cbiAgc3RhdGljIHVuZGVyd2F0ZXJGcm9tVGlsZVZhbHVlKHRpbGVWYWx1ZTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4oZnJvbTMyQml0cyh0aWxlVmFsdWUsIDI0LCAxKSk7XG4gIH1cblxuICAvLyBUT0RPOiBjb21iaW5lIHRoZXNlIGludG8gYSBib29sZWFuIGJpdCBzbyBpdCBjYW4ganVzdCBiZSBzZXQgYXJiaXRyYXJpbHlcbiAgc3RhdGljIHdhbGthYmxlRnJvbVRpbGVWYWx1ZSh0aWxlVmFsdWU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy51bmRlcndhdGVyRnJvbVRpbGVWYWx1ZSh0aWxlVmFsdWUpXG4gICAgICAmJiAhdGhpcy5zdHJ1Y3R1cmVGcm9tVGlsZVZhbHVlKHRpbGVWYWx1ZSk7XG4gIH1cblxuICBnZXQgcm93Q291bnQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuZ3JpZC5yb3dDb3VudCB9XG4gIGdldCBjb2xDb3VudCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5ncmlkLmNvbENvdW50IH1cblxuICAvLyBnZXQgdGlsZVNpemUoKTogbnVtYmVyIHsgcmV0dXJuIFRJTEVfV0lEVEggfVxuXG4gIGdldCB3aWR0aCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb2xDb3VudCAqIHRoaXMudGlsZVNpemUgfVxuICBnZXQgaGVpZ2h0KCk6IG51bWJlciB7IHJldHVybiB0aGlzLnJvd0NvdW50ICogdGhpcy50aWxlU2l6ZSB9XG5cbiAgeFRvQ29sKHg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGYoeCAvIHRoaXMudGlsZVNpemUpO1xuICB9XG5cbiAgeVRvUm93KHk6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGYoeSAvIHRoaXMudGlsZVNpemUpO1xuICB9XG5cbiAgZmlsbFdpdGhUZXJyYWluKCk6IHZvaWQge1xuICAgIE11ZHdvcmxkTWFwLmZpbGxXaXRoVGVycmFpbih0aGlzLmdyaWQpO1xuICB9XG5cbiAgZWFjaFRpbGUobWFwcGVyOiBNdWR3b3JsZE1hcHBlcjx2b2lkPik6IHZvaWQge1xuICAgIE11ZHdvcmxkTWFwLmVhY2hUaWxlKHRoaXMuZ3JpZCwgbWFwcGVyKTtcbiAgfVxuXG4gIGVhY2hOZWlnaGJvcmluZ1RpbGUocm93OiBudW1iZXIsIGNvbDogbnVtYmVyLCBtYXBwZXI6IE11ZHdvcmxkTWFwcGVyPHZvaWQ+KTogdm9pZCB7XG4gICAgTXVkd29ybGRNYXAuZWFjaE5laWdoYm9yaW5nVGlsZSh0aGlzLmdyaWQsIHJvdywgY29sLCBtYXBwZXIpO1xuICB9XG5cbiAgLy8gTk9URTogbm90IGd1YXJhbnRlZWQgdG8gYmUgd2Fsa2FibGVcbiAgcmFuZG9tQ29vcmRzT25MYW5kKCk6IENvb3JkcyB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzO1xuICAgIGxldCB4ID0gMDtcbiAgICBsZXQgeSA9IDA7XG4gICAgbGV0IGVsZXZhdGlvbiA9IC0xO1xuXG4gICAgd2hpbGUgKGVsZXZhdGlvbiA8IDEyOSkge1xuICAgICAgeCA9IGYocmFuZCgpICogd2lkdGgpO1xuICAgICAgeSA9IGYocmFuZCgpICogaGVpZ2h0KTtcbiAgICAgIGVsZXZhdGlvbiA9IE11ZHdvcmxkTWFwLmVsZXZhdGlvbkZyb21UaWxlVmFsdWUodGhpcy52YWx1ZUF0KHgsIHkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29vcmRzKHgsIHkpO1xuICB9XG5cbiAgcmFuZG9tV2Fsa2FibGVDb29yZHMoKTogQ29vcmRzIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXM7XG4gICAgbGV0IHggPSAwO1xuICAgIGxldCB5ID0gMDtcbiAgICBsZXQgd2Fsa2FibGUgPSBmYWxzZTtcblxuICAgIHdoaWxlICghd2Fsa2FibGUpIHtcbiAgICAgIHggPSBmKHJhbmQoKSAqIHdpZHRoKTtcbiAgICAgIHkgPSBmKHJhbmQoKSAqIGhlaWdodCk7XG4gICAgICB3YWxrYWJsZSA9IE11ZHdvcmxkTWFwLndhbGthYmxlRnJvbVRpbGVWYWx1ZSh0aGlzLnZhbHVlQXQoeCwgeSkpO1xuICAgIH1cblxuICAgIHJldHVybiBjb29yZHMoeCwgeSk7XG4gIH1cblxuICAvLyBOT1RFOiBUaGlzIHJldHVybnMgVElMRSBjb29yZHMsIG5vdCB3b3JsZCBjb29yZHMuXG4gIHJhbmRvbVdhbGthYmxlVGlsZUNvb3JkcygpOiBDb29yZHMge1xuICAgIGNvbnN0IHdvcmxkQ29vcmRzID0gdGhpcy5yYW5kb21XYWxrYWJsZUNvb3JkcygpO1xuICAgIHdvcmxkQ29vcmRzWzBdID0gZih3b3JsZENvb3Jkc1swXSAvIHRoaXMudGlsZVNpemUpO1xuICAgIHdvcmxkQ29vcmRzWzFdID0gZih3b3JsZENvb3Jkc1sxXSAvIHRoaXMudGlsZVNpemUpO1xuICAgIHJldHVybiB3b3JsZENvb3JkcztcbiAgfVxuXG4gIC8vIE5PVEU6IHBvcHVsYXRlcyBpbiByZXZlcnNlIChlbmQgb2YgbGlzdCBpcyBzdGFydCwgYmVnaW5uaW5nIG9mIGxpc3QgaXMgZGVzdClcbiAgcG9wdWxhdGVQYXRoKHBhdGg6IFBhdGhOb2RlW10sIHN0YXJ0WDogbnVtYmVyLCBzdGFydFk6IG51bWJlciwgZGVzdFg6IG51bWJlciwgZGVzdFk6IG51bWJlciwgZXllc2lnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGF0aEZpbmRlci5wb3B1bGF0ZVBhdGgocGF0aCwgc3RhcnRYLCBzdGFydFksIGRlc3RYLCBkZXN0WSwgZXllc2lnaHQsIHRoaXMudGlsZVNpemUpO1xuICB9XG5cbiAgdmFsdWVBdCh4OiBudW1iZXIsIHk6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZC52YWx1ZUF0KHRoaXMueVRvUm93KHkpLCB0aGlzLnhUb0NvbCh4KSk7XG4gIH1cblxuICB2YWx1ZUF0VGlsZShyb3c6IG51bWJlciwgY29sOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdyaWQudmFsdWVBdChyb3csIGNvbCk7XG4gIH1cblxuICBpbkJvdW5kcyh4OiBudW1iZXIsIHk6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAwIDw9IHggJiYgMCA8PSB5ICYmIHggPCB0aGlzLndpZHRoICYmIHkgPCB0aGlzLmhlaWdodDtcbiAgfVxuXG4gIHdhbGthYmxlQXQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbkJvdW5kcyh4LCB5KVxuICAgICAgPyBNdWR3b3JsZE1hcC53YWxrYWJsZUZyb21UaWxlVmFsdWUodGhpcy52YWx1ZUF0KHgsIHkpKVxuICAgICAgOiBmYWxzZTtcbiAgfVxuXG4gIHVuZGVyd2F0ZXJBdCh4OiBudW1iZXIsIHk6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBNdWR3b3JsZE1hcC51bmRlcndhdGVyRnJvbVRpbGVWYWx1ZSh0aGlzLnZhbHVlQXQoeCwgeSkpXG4gICAgICB8fCAhdGhpcy5pbkJvdW5kcyh4LCB5KTtcbiAgfVxuXG4gIHRpbGVJc1RvdWNoZWQodGlsZVNpemU6IG51bWJlciwgb3JpZ2luWDogbnVtYmVyLCBvcmlnaW5ZOiBudW1iZXIsIHJvdzogbnVtYmVyLCBjb2w6IG51bWJlciwgZGlzdGFuY2U6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxlZnRYID0gY29sICogdGlsZVNpemU7XG4gICAgY29uc3QgcmlnaHRYID0gKGNvbCArIDEpICogdGlsZVNpemU7XG4gICAgY29uc3QgdG9wWSA9IHJvdyAqIHRpbGVTaXplO1xuICAgIGNvbnN0IGJvdHRvbVkgPSAocm93ICsgMSkgKiB0aWxlU2l6ZTtcblxuICAgIGlmIChsZWZ0WCA8IG9yaWdpblgpIHtcbiAgICAgIGlmICh0b3BZIDwgb3JpZ2luWSkge1xuICAgICAgICAvLyB0b3AgbGVmdCBxdWFkcmFudFxuICAgICAgICBjb25zdCBkaXN0YW5jZVRvVG9wTGVmdCA9IGRpc3RhbmNlQmV0d2VlbihvcmlnaW5YLCBvcmlnaW5ZLCBsZWZ0WCwgdG9wWSk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlVG9Cb3R0b21SaWdodCA9IGRpc3RhbmNlQmV0d2VlbihvcmlnaW5YLCBvcmlnaW5ZLCByaWdodFgsIGJvdHRvbVkpO1xuICAgICAgICByZXR1cm4gKGRpc3RhbmNlVG9Ub3BMZWZ0ID49IGRpc3RhbmNlICYmIGRpc3RhbmNlID49IGRpc3RhbmNlVG9Cb3R0b21SaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBib3R0b20gbGVmdCBxdWFkcmFudFxuICAgICAgICBjb25zdCBkaXN0YW5jZVRvVG9wUmlnaHQgPSBkaXN0YW5jZUJldHdlZW4ob3JpZ2luWCwgb3JpZ2luWSwgcmlnaHRYLCB0b3BZKTtcbiAgICAgICAgY29uc3QgZGlzdGFuY2VUb0JvdHRvbUxlZnQgPSBkaXN0YW5jZUJldHdlZW4ob3JpZ2luWCwgb3JpZ2luWSwgbGVmdFgsIGJvdHRvbVkpO1xuICAgICAgICByZXR1cm4gKGRpc3RhbmNlVG9Cb3R0b21MZWZ0ID49IGRpc3RhbmNlICYmIGRpc3RhbmNlID49IGRpc3RhbmNlVG9Ub3BSaWdodCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0b3BZIDwgb3JpZ2luWSkge1xuICAgICAgICAvLyB0b3AgcmlnaHQgcXVhZHJhbnRcbiAgICAgICAgY29uc3QgZGlzdGFuY2VUb1RvcFJpZ2h0ID0gZGlzdGFuY2VCZXR3ZWVuKG9yaWdpblgsIG9yaWdpblksIHJpZ2h0WCwgdG9wWSk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlVG9Cb3R0b21MZWZ0ID0gZGlzdGFuY2VCZXR3ZWVuKG9yaWdpblgsIG9yaWdpblksIGxlZnRYLCBib3R0b21ZKTtcbiAgICAgICAgcmV0dXJuIChkaXN0YW5jZVRvQm90dG9tTGVmdCA8PSBkaXN0YW5jZSAmJiBkaXN0YW5jZSA8PSBkaXN0YW5jZVRvVG9wUmlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYm90dG9tIHJpZ2h0IHF1YWRyYW50XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlVG9Ub3BMZWZ0ID0gZGlzdGFuY2VCZXR3ZWVuKG9yaWdpblgsIG9yaWdpblksIGxlZnRYLCB0b3BZKTtcbiAgICAgICAgY29uc3QgZGlzdGFuY2VUb0JvdHRvbVJpZ2h0ID0gZGlzdGFuY2VCZXR3ZWVuKG9yaWdpblgsIG9yaWdpblksIHJpZ2h0WCwgYm90dG9tWSk7XG4gICAgICAgIHJldHVybiAoZGlzdGFuY2VUb1RvcExlZnQgPD0gZGlzdGFuY2UgJiYgZGlzdGFuY2UgPD0gZGlzdGFuY2VUb0JvdHRvbVJpZ2h0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlYWNoVGlsZUF0RGlzdGFuY2VGcm9tKHg6IG51bWJlciwgeTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyLCBtYXBwZXI6IE11ZHdvcmxkTWFwcGVyPHZvaWQ+KTogdm9pZCB7XG4gICAgY29uc3QgeyB0aWxlU2l6ZSB9ID0gdGhpcztcblxuICAgIC8vIHN0YXJ0IGF0IGZhciBsZWZ0IG9mIGNpcmNsZSwgZ29pbmcgY2xvY2t3aXNlXG4gICAgY29uc3QgY2VudGVyQ29sID0gdGhpcy54VG9Db2woeCk7XG4gICAgY29uc3QgY2VudGVyUm93ID0gdGhpcy55VG9Sb3coeSk7XG4gICAgY29uc3Qgc3RhcnRDb2wgPSB0aGlzLnhUb0NvbCh4IC0gZGlzdGFuY2UpO1xuICAgIGNvbnN0IHN0YXJ0Um93ID0gY2VudGVyUm93O1xuXG4gICAgLy8gd2UnbGwgc3RvcCB3aGVuIHdlIGhpdCBvdXIgc3RhcnRpbmcgdGlsZSBhZ2FpblxuICAgIGxldCBzdGFydGVkID0gZmFsc2U7XG4gICAgbGV0IGNvbCA9IHN0YXJ0Q29sO1xuICAgIGxldCByb3cgPSBzdGFydFJvdztcblxuICAgIC8vIEkgZG91YnQgdGhpcyBpcyB0aGUgXCJjb3JyZWN0XCIgd2F5IG9mIGRvaW5nIHRoaXMsIGJ1dCBJIGdpdmUgdXAuIFRvIGJlXG4gICAgLy8gY2xlYXI6IHRoaXMgaXMgbm90IGp1c3QgYSBwcm9ibGVtIG9mIGdyYXBoaW5nIGEgY2lyY2xlIG9udG8gYSBncmlkOyBpdCdzXG4gICAgLy8gZ3JhcGhpbmcgYSBjaXJjbGUgb250byBhIGxvd2VyLXJlc29sdXRpb24gZ3JpZCB3aGlsZSBrZWVwaW5nIHRoZSBmaWRlbGl0eVxuICAgIC8vIG9mIHRoZSByZXNvbHV0aW9uIG9mIHRoZSBzdGFydGluZyBwb2ludCwgaW4gdGhlIG1vc3QgZWZmaWNpZW50IG1hbm5lci4uLlxuICAgIC8vIGxpa2UsIHRoZSBjZW50ZXIgcG9pbnQgY291bGQgYmUgYW55d2hlcmUgaW4gdGhlIGNlbnRlciB0aWxlLCBhbmQgd2Ugd2FudFxuICAgIC8vIHRvIGdyYXBoIGV2ZXJ5IHRpbGUgaW50ZXJzZWN0ZWQgYnkgYSBjaXJjbGUgb2YgcmFkaXVzIGBkaXN0YW5jZWAgZnJvbSB0aGVcbiAgICAvLyBjZW50ZXIgcG9pbnQuIFdlIGRvbid0IHdhbnQgdG8gZG8gdGhlIG5haXZlIHRoaW5nIGFuZCBsb29wIHRocm91Z2ggZXZlcnlcbiAgICAvLyBzaW5nbGUgdGlsZSBpbiB0aGUgZ3JpZCBib3VuZGVkIGJ5IGEgc3F1YXJlIGNpcmN1bXNjcmliaW5nIHRoZSBjaXJjbGUsXG4gICAgLy8gYmVjYXVzZSB0aGF0J3Mgd2F5IHRvbyB3YXN0ZWZ1bC4gV2UgYWxzbyBkb24ndCB3YW50IHRvIGp1c3Qgc3RhcnQgd2l0aCBhXG4gICAgLy8gdGlsZSBvbiB0aGUgY2lyY2xlIGFuZCB0aGVuIGNoZWNrIGFsbCBlaWdodCBhZGphY2VudCBwb2ludHMgaW4gdGhlIHNhbWVcbiAgICAvLyBvcmRlciwgZWl0aGVyLCBiZWNhdXNlIHdoaWxlIHRoYXQgd291bGQgYmUgYmV0dGVyIHRoYW4gdGhlIGZvcm1lclxuICAgIC8vIHNvbHV0aW9uIGl0IHdvdWxkIGFsc28gY291bnQgdW5uZWNlc3NhcnkgdGlsZXMuIFdoYXQgd2UncmUgZG9pbmcgaGVyZSxcbiAgICAvLyBpbnN0ZWFkLCBpcyBzdGFydGluZyB3aXRoIGEgdGlsZSBvbiB0aGUgY2lyY2xlLCBub3RpbmcgdGhlIGRpcmVjdGlvbiB3ZVxuICAgIC8vIHdhbnQgdG8gZ28gaW4gKHRhbmdlbnQgdG8gdGhlIGNpcmNsZSksIGFuZCBjaGVja2luZyB0aGUgdGhyZWUgdGlsZXNcbiAgICAvLyBhZGphY2VudCB0byB0aGF0IG9uZSB3aGljaCBjb3VsZCBwb3NzaWJseSBjb250YWluIHRoZSBuZXh0IHRvdWNoZWQgcG9pbnQuXG4gICAgLy8gR29vZCBlbm91Z2ggZm9yIG1lLiBJZiB0aGVyZSdzIGEgYmV0dGVyIHdheSwgSSBkb24ndCByZWFsbHkgZ2l2ZSBhIHNoaXQuXG4gICAgd2hpbGUgKCFzdGFydGVkIHx8IGNvbCAhPT0gc3RhcnRDb2wgfHwgcm93ICE9PSBzdGFydFJvdykge1xuICAgICAgc3RhcnRlZCA9IHRydWU7XG5cbiAgICAgIE11ZHdvcmxkTWFwLmZlZWRNYXBwZXIodGhpcy5ncmlkLCByb3csIGNvbCwgbWFwcGVyKTtcblxuICAgICAgaWYgKGNvbCA8IGNlbnRlckNvbCkge1xuICAgICAgICBpZiAocm93IDwgY2VudGVyUm93KSB7XG4gICAgICAgICAgLy8gdG9wIGxlZnQgcXVhZHJhbnRcbiAgICAgICAgICBpZiAodGhpcy50aWxlSXNUb3VjaGVkKHRpbGVTaXplLCB4LCB5LCByb3cgLSAxLCBjb2wsIGRpc3RhbmNlKSkge1xuICAgICAgICAgICAgcm93IC09IDE7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRpbGVJc1RvdWNoZWQodGlsZVNpemUsIHgsIHksIHJvdywgY29sICsgMSwgZGlzdGFuY2UpKSB7XG4gICAgICAgICAgICBjb2wgKz0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudGlsZUlzVG91Y2hlZCh0aWxlU2l6ZSwgeCwgeSwgcm93IC0gMSwgY29sICsgMSwgZGlzdGFuY2UpKSB7XG4gICAgICAgICAgICByb3cgLT0gMTtcbiAgICAgICAgICAgIGNvbCArPSAxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJIb3cgdGhlIGhlbGwgZGlkIHRoYXQgaGFwcGVuP1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYm90dG9tIGxlZnQgcXVhZHJhbnRcbiAgICAgICAgICBpZiAodGhpcy50aWxlSXNUb3VjaGVkKHRpbGVTaXplLCB4LCB5LCByb3csIGNvbCAtIDEsIGRpc3RhbmNlKSkge1xuICAgICAgICAgICAgY29sIC09IDE7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRpbGVJc1RvdWNoZWQodGlsZVNpemUsIHgsIHksIHJvdyAtIDEsIGNvbCwgZGlzdGFuY2UpKSB7XG4gICAgICAgICAgICByb3cgLT0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudGlsZUlzVG91Y2hlZCh0aWxlU2l6ZSwgeCwgeSwgcm93IC0gMSwgY29sIC0gMSwgZGlzdGFuY2UpKSB7XG4gICAgICAgICAgICByb3cgLT0gMTtcbiAgICAgICAgICAgIGNvbCAtPSAxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJIb3cgdGhlIGhlbGwgZGlkIHRoYXQgaGFwcGVuP1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChyb3cgPCBjZW50ZXJSb3cpIHtcbiAgICAgICAgICAvLyB0b3AgcmlnaHQgcXVhZHJhbnRcbiAgICAgICAgICBpZiAodGhpcy50aWxlSXNUb3VjaGVkKHRpbGVTaXplLCB4LCB5LCByb3csIGNvbCArIDEsIGRpc3RhbmNlKSkge1xuICAgICAgICAgICAgY29sICs9IDE7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRpbGVJc1RvdWNoZWQodGlsZVNpemUsIHgsIHksIHJvdyArIDEsIGNvbCwgZGlzdGFuY2UpKSB7XG4gICAgICAgICAgICByb3cgKz0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudGlsZUlzVG91Y2hlZCh0aWxlU2l6ZSwgeCwgeSwgcm93ICsgMSwgY29sICsgMSwgZGlzdGFuY2UpKSB7XG4gICAgICAgICAgICByb3cgKz0gMTtcbiAgICAgICAgICAgIGNvbCArPSAxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJIb3cgdGhlIGhlbGwgZGlkIHRoYXQgaGFwcGVuP1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gYm90dG9tIHJpZ2h0IHF1YWRyYW50XG4gICAgICAgICAgaWYgKHRoaXMudGlsZUlzVG91Y2hlZCh0aWxlU2l6ZSwgeCwgeSwgcm93ICsgMSwgY29sLCBkaXN0YW5jZSkpIHtcbiAgICAgICAgICAgIHJvdyArPSAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy50aWxlSXNUb3VjaGVkKHRpbGVTaXplLCB4LCB5LCByb3csIGNvbCAtIDEsIGRpc3RhbmNlKSkge1xuICAgICAgICAgICAgY29sIC09IDE7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRpbGVJc1RvdWNoZWQodGlsZVNpemUsIHgsIHksIHJvdyArIDEsIGNvbCAtIDEsIGRpc3RhbmNlKSkge1xuICAgICAgICAgICAgcm93ICs9IDE7XG4gICAgICAgICAgICBjb2wgLT0gMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSG93IHRoZSBoZWxsIGRpZCB0aGF0IGhhcHBlbj9cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gY2xvc2VzdFNob3JlbGluZVRvKHg6IG51bWJlciwgeTogbnVtYmVyKTogQ29vcmRzIHtcbiAgLy8gICAvLyB0aGlzLmVhY2hcbiAgLy8gfVxufVxuIiwiaW1wb3J0IEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9kYXRhL0JsYWNrYm9hcmRcIjtcbmltcG9ydCBNdWRtYW5CbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZG1hbkJsYWNrYm9hcmRcIjtcbmltcG9ydCBJdGVtRGF0YWJhc2UgZnJvbSBcIkAvbWFwbWFraW5nL211ZHdvcmxkL0l0ZW1EYXRhYmFzZVwiO1xuaW1wb3J0IE11ZHdvcmxkTWFwIGZyb20gXCJAL21hcG1ha2luZy9tdWR3b3JsZC9NdWR3b3JsZE1hcFwiO1xuaW1wb3J0IHsgSXRlbVR5cGUgfSBmcm9tIFwiQC9tb2RlbHMvSXRlbVwiO1xuaW1wb3J0IHsgRmx1aWRUeXBlIH0gZnJvbSBcIkAvbW9kZWxzL2l0ZW1zL2NvbnRhaW5lcnMvQm90dGxlXCI7XG5pbXBvcnQgRmlyZSBmcm9tIFwiQC9tb2RlbHMvaXRlbXMvRmlyZVwiO1xuLy8gaW1wb3J0IFdhdGVyIGZyb20gXCJAL21vZGVscy9pdGVtcy9XYXRlclwiO1xuaW1wb3J0IE11ZG1hbiBmcm9tIFwiQC9tb2RlbHMvTXVkbWFuXCI7XG5pbXBvcnQgeyBkaXN0YW5jZUJldHdlZW4gfSBmcm9tIFwiQC91dGlsaXRpZXMvZ2VvXCI7XG5pbXBvcnQgeyBmIH0gZnJvbSBcIkAvdXRpbGl0aWVzL21hdGhcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNdWR3b3JsZEJsYWNrYm9hcmREYXRhIHtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIG1hcDogTXVkd29ybGRNYXA7XG4gIGl0ZW1zOiBJdGVtRGF0YWJhc2U7XG4gIG11ZG1lbjogTXVkbWFuW107XG4gIGRheUxlbmd0aDogbnVtYmVyO1xuICBkYXlPZmZzZXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXVkd29ybGRCbGFja2JvYXJkIGV4dGVuZHMgQmxhY2tib2FyZDxNdWR3b3JsZEJsYWNrYm9hcmREYXRhPiB7XG4gIGNvbnN0cnVjdG9yKGRhdGE6IE11ZHdvcmxkQmxhY2tib2FyZERhdGEpIHtcbiAgICBzdXBlcihkYXRhKTtcbiAgfVxuXG4gIHN0YXRpYyBpc0Rhd24oZGF5RWxhcHNlZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIDAuMiA8PSBkYXlFbGFwc2VkICYmIGRheUVsYXBzZWQgPD0gMC4zO1xuICB9XG5cbiAgc3RhdGljIGlzRGF5KGRheUVsYXBzZWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAwLjI1IDw9IGRheUVsYXBzZWQgJiYgZGF5RWxhcHNlZCA8PSAwLjc1O1xuICB9XG5cbiAgc3RhdGljIGlzRHVzayhkYXlFbGFwc2VkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gMC43IDw9IGRheUVsYXBzZWQgJiYgZGF5RWxhcHNlZCA8PSAwLjg7XG4gIH1cblxuICBzdGF0aWMgaXNOaWdodChkYXlFbGFwc2VkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIU11ZHdvcmxkQmxhY2tib2FyZC5pc0RheShkYXlFbGFwc2VkKTtcbiAgfVxuXG4gIC8vIFZhbHVlIGJldHdlZW4gMCAoaW5jbHVzaXZlKSBhbmQgMSAoZXhjbHVzaXZlKTsgcGVyY2VudCBvZiB0aGUgZGF5IHRoYXQgaGFzXG4gIC8vIGVsYXBzZWQuIDAgYW5kIDEgYXJlIG1pZG5pZ2h0LCAwLjUgaXMgbm9vbi5cbiAgZ2V0IGRheUVsYXBzZWQoKTogbnVtYmVyIHtcbiAgICBjb25zdCB7IHRpbWVzdGFtcCwgZGF5TGVuZ3RoLCBkYXlPZmZzZXQgfSA9IHRoaXMuZGF0YTtcbiAgICAvLyByZXR1cm4gKCh0aW1lc3RhbXAgKyAwLjI1ICogZGF5TGVuZ3RoKSAlIGRheUxlbmd0aCkgLyBkYXlMZW5ndGg7XG4gICAgcmV0dXJuICgodGltZXN0YW1wICsgZGF5T2Zmc2V0KSAlIGRheUxlbmd0aCkgLyBkYXlMZW5ndGg7XG4gIH1cblxuICBnZXQgaXNEYXduKCk6IGJvb2xlYW4geyByZXR1cm4gTXVkd29ybGRCbGFja2JvYXJkLmlzRGF3bih0aGlzLmRheUVsYXBzZWQpIH1cbiAgZ2V0IGlzRGF5KCk6IGJvb2xlYW4geyByZXR1cm4gTXVkd29ybGRCbGFja2JvYXJkLmlzRGF5KHRoaXMuZGF5RWxhcHNlZCkgfVxuICBnZXQgaXNEdXNrKCk6IGJvb2xlYW4geyByZXR1cm4gTXVkd29ybGRCbGFja2JvYXJkLmlzRHVzayh0aGlzLmRheUVsYXBzZWQpIH1cbiAgZ2V0IGlzTmlnaHQoKTogYm9vbGVhbiB7IHJldHVybiBNdWR3b3JsZEJsYWNrYm9hcmQuaXNOaWdodCh0aGlzLmRheUVsYXBzZWQpIH1cblxuICAvLyBWYWx1ZSBiZXR3ZWVuIDAgYW5kIDE7IHBlcmNlbnQgc3VubGlnaHQuIDAgZm9yIG1vc3Qgb2YgdGhlIG5pZ2h0LCAxIGZvclxuICAvLyBtb3N0IG9mIHRoZSBkYXksIGFuZCBpbiBiZXR3ZWVuIGR1cmluZyB0aGUgdHJhbnNpdGlvbnMuXG4gIGdldCBkYXlsaWdodCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmlzRGF3bikgcmV0dXJuICh0aGlzLmRheUVsYXBzZWQgLSAwLjIpIC8gMC4xO1xuICAgIGlmICh0aGlzLmlzRHVzaykgcmV0dXJuIDEgLSAoKHRoaXMuZGF5RWxhcHNlZCAtIDAuNykgLyAwLjEpO1xuICAgIHJldHVybiB0aGlzLmlzRGF5ID8gMSA6IDA7XG4gIH1cblxuICByb3RhdGVXb3JsZChwZXJjZW50T2ZEYXk6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGF0YS5kYXlPZmZzZXQgKz0gZihwZXJjZW50T2ZEYXkgKiB0aGlzLmRhdGEuZGF5TGVuZ3RoKTtcbiAgfVxuXG4gIGxldEl0QmVEYXkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEYXduKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5pc0RheSkge1xuICAgICAgLy8gc2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YgZGF5XG4gICAgICB0aGlzLnNldFRpbWVPZkRheSgwLjI1KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2V0IHRvIHRoZSBiZWdpbm5pbmcgb2YgZGF3blxuICAgICAgdGhpcy5zZXRUaW1lT2ZEYXkoMC4yKTtcbiAgICB9XG4gIH1cblxuICBsZXRJdEJlTmlnaHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEdXNrKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5pc05pZ2h0KSB7XG4gICAgICAvLyBzZXQgdG8gdGhlIGJlZ2lubmluZyBvZiBuaWdodFxuICAgICAgdGhpcy5zZXRUaW1lT2ZEYXkoMC43NSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNldCB0byB0aGUgYmVnaW5uaW5nIG9mIGR1c2tcbiAgICAgIHRoaXMuc2V0VGltZU9mRGF5KDAuNyk7XG4gICAgfVxuICB9XG5cbiAgc2V0VGltZU9mRGF5KHBlcmNlbnRPZkRheTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgeyB0aW1lc3RhbXAsIGRheUxlbmd0aCwgZGF5T2Zmc2V0IH0gPSB0aGlzLmRhdGE7XG4gICAgY29uc3QgdGFyZ2V0RGF5TXMgPSBmKHBlcmNlbnRPZkRheSAqIGRheUxlbmd0aCk7XG4gICAgY29uc3QgY3VycmVudERheU1zID0gKHRpbWVzdGFtcCArIGRheU9mZnNldCkgJSBkYXlMZW5ndGg7XG4gICAgdGhpcy5kYXRhLmRheU9mZnNldCArPSAodGFyZ2V0RGF5TXMgLSBjdXJyZW50RGF5TXMpO1xuICB9XG5cbiAgZmluZENsb3Nlc3RNdWRtYW4oeDogbnVtYmVyLCB5OiBudW1iZXIsIGZpbHRlcj86IChtdWRtYW46IE11ZG1hbikgPT4gYm9vbGVhbik6IE11ZG1hbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgeyBtdWRtZW4gfSA9IHRoaXMuZGF0YTtcbiAgICBjb25zdCBwb3B1bGF0aW9uID0gbXVkbWVuLmxlbmd0aDtcbiAgICBpZiAocG9wdWxhdGlvbiA9PT0gMCkgcmV0dXJuO1xuICAgIGlmIChwb3B1bGF0aW9uID09PSAxKSB7XG4gICAgICBjb25zdCBtdWRtYW4gPSBtdWRtZW5bMF07XG4gICAgICByZXR1cm4gKCFmaWx0ZXIgfHwgZmlsdGVyKG11ZG1hbikpID8gbXVkbWFuIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGxldCBjbG9zZXN0TXVkbWFuOiBNdWRtYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgLy8gbGV0IGNsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2Vlbih4LCB5LCBjbG9zZXN0TXVkbWFuLmxvY2FsLngsIGNsb3Nlc3RNdWRtYW4ubG9jYWwueSk7XG4gICAgbGV0IGNsb3Nlc3REaXN0YW5jZTogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3B1bGF0aW9uOyBpKyspIHtcbiAgICAgIGNvbnN0IG11ZG1hbiA9IG11ZG1lbltpXTtcblxuICAgICAgaWYgKCFmaWx0ZXIgfHwgZmlsdGVyKG11ZG1hbikpIHtcbiAgICAgICAgaWYgKG11ZG1hbi5sb2NhbC54ID09PSB4ICYmIG11ZG1hbi5sb2NhbC55ID09PSB5KSByZXR1cm4gbXVkbWFuO1xuXG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuKHgsIHksIG11ZG1hbi5sb2NhbC54LCBtdWRtYW4ubG9jYWwueSk7XG4gICAgICAgIGlmICghY2xvc2VzdERpc3RhbmNlIHx8IGRpc3RhbmNlIDwgY2xvc2VzdERpc3RhbmNlKSB7XG4gICAgICAgICAgY2xvc2VzdE11ZG1hbiA9IG11ZG1hbjtcbiAgICAgICAgICBjbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbG9zZXN0TXVkbWFuO1xuICB9XG5cbiAgZmluZENsb3Nlc3RGZWxsb3dNdWRtYW4obG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQpOiBNdWRtYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZpbmRDbG9zZXN0TXVkbWFuKGxvY2FsLngsIGxvY2FsLnksIChtdWRtYW4pID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG11ZG1hbi5sb2NhbCAhPT0gbG9jYWw7XG4gICAgICAvLyBpZiAocmVzdWx0KSBjb25zb2xlLmxvZyhcInRoZXJlIEkgYW1cIik7XG4gICAgICAvLyBpZiAobG9jYWwgPT09ICh3aW5kb3cgYXMgYW55KS5yZW5kZXJlci5oZXJvLmxvY2FsICYmICFyZXN1bHQpIGNvbnNvbGUubG9nKFwidGhlcmUgSSBhbVwiKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IG11ZHdvcmxkSXRlbXMgPSBuZXcgSXRlbURhdGFiYXNlKCk7XG4vLyBleHBvcnQgY29uc3QgbXVkd29ybGRNYXAgPSBuZXcgTXVkd29ybGRNYXAoNTEyLCA1MTIsIDMyKTtcbmV4cG9ydCBjb25zdCBtdWR3b3JsZE1hcCA9IG5ldyBNdWR3b3JsZE1hcCg1MTIsIDUxMiwgMzIpO1xuLy8gZXhwb3J0IGNvbnN0IG11ZHdvcmxkTWFwID0gbmV3IE11ZHdvcmxkTWFwKDUxMiwgNTEyLCAyKTtcbi8vIGV4cG9ydCBjb25zdCBtdWR3b3JsZE1hcCA9IG5ldyBNdWR3b3JsZE1hcCg1MTIsIDUxMiwgMSk7XG5cbm11ZHdvcmxkTWFwLmZpbGxXaXRoVGVycmFpbigpO1xuXG4vLyBjb25zdCBXQVRFUlMgPSA1MDA7XG5jb25zdCBXQVRFUlMgPSAxMDAwO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IFdBVEVSUzsgaSsrKSB7XG4gIGNvbnN0IGNvb3JkcyA9IG11ZHdvcmxkTWFwLnJhbmRvbVdhbGthYmxlQ29vcmRzKCk7XG4gIC8vIG11ZHdvcmxkSXRlbXMuYWRkKG5ldyBXYXRlcigxMDAsIGNvb3Jkc1swXSwgY29vcmRzWzFdKSk7XG4gIC8vIG11ZHdvcmxkSXRlbXMuY3JlYXRlV2F0ZXIoMTAwLCBjb29yZHNbMF0sIGNvb3Jkc1sxXSk7XG4gIG11ZHdvcmxkSXRlbXMuY3JlYXRlQm90dGxlKEZsdWlkVHlwZS5XQVRFUiwgY29vcmRzWzBdLCBjb29yZHNbMV0sIDEwMCwgZihNYXRoLnJhbmRvbSgpICogMTAwKSk7XG59XG5cbmNvbnN0IEZJUkVTID0gMTAwMDtcblxuZm9yIChsZXQgaSA9IDA7IGkgPCBGSVJFUzsgaSsrKSB7XG4gIGNvbnN0IGNvb3JkcyA9IG11ZHdvcmxkTWFwLnJhbmRvbVdhbGthYmxlQ29vcmRzKCk7XG4gIC8vIG11ZHdvcmxkSXRlbXMuYWRkKG5ldyBGaXJlKGNvb3Jkc1swXSwgY29vcmRzWzFdKSk7XG4gIG11ZHdvcmxkSXRlbXMuY3JlYXRlRmlyZShjb29yZHNbMF0sIGNvb3Jkc1sxXSk7XG59XG4vLyBtdWR3b3JsZEl0ZW1zLmFkZChuZXcgRmlyZSgzMDAsIDIxMCkpO1xubXVkd29ybGRJdGVtcy5jcmVhdGVGaXJlKDMwMCwgMjEwKTtcblxuLy8gbXVkd29ybGRJdGVtcy5hZGQobmV3IFdhdGVyKDEwMCwgMzI1LCAzMDApKTtcbi8vIG11ZHdvcmxkSXRlbXMuYWRkKG5ldyBXYXRlcigxMDAsIDUzNSwgMzAwKSk7XG5cbmV4cG9ydCBjb25zdCBtdWR3b3JsZCA9IG5ldyBNdWR3b3JsZEJsYWNrYm9hcmQoe1xuICB0aW1lc3RhbXA6IDAsXG4gIG1hcDogbXVkd29ybGRNYXAsXG4gIGl0ZW1zOiBtdWR3b3JsZEl0ZW1zLFxuICBtdWRtZW46IFtdLFxuICAvLyBkYXlMZW5ndGg6IDEyMDAwLFxuICBkYXlMZW5ndGg6IDI0MDAwLFxuICAvLyBkYXlMZW5ndGg6IDQ4MDAwLFxuICBkYXlPZmZzZXQ6IDYwMDAsXG59KTtcbiIsImltcG9ydCBCbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2UvZGF0YS9CbGFja2JvYXJkXCI7XG5pbXBvcnQgQmFzZU5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9CYXNlTm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCZWhhdmlvclRyZWU8XG4gIFJvb3ROb2RlIGV4dGVuZHMgQmFzZU5vZGUgPSBCYXNlTm9kZSxcbiAgTG9jYWxCbGFja2JvYXJkIGV4dGVuZHMgQmxhY2tib2FyZCA9IEJsYWNrYm9hcmQsXG4gIFdvcmxkQmxhY2tib2FyZCBleHRlbmRzIEJsYWNrYm9hcmQgPSBCbGFja2JvYXJkLFxuPiB7XG4gIHB1YmxpYyB3b3JsZDogV29ybGRCbGFja2JvYXJkO1xuICBwdWJsaWMgbG9jYWw6IExvY2FsQmxhY2tib2FyZDtcbiAgcHVibGljIHJvb3Q6IFJvb3ROb2RlO1xuICBwdWJsaWMgY3VycmVudDogUm9vdE5vZGU7XG5cbiAgY29uc3RydWN0b3Iocm9vdDogUm9vdE5vZGUsIGxvY2FsOiBMb2NhbEJsYWNrYm9hcmQsIHdvcmxkOiBXb3JsZEJsYWNrYm9hcmQpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMuY3VycmVudCA9IHJvb3Q7XG4gICAgdGhpcy53b3JsZCA9IHdvcmxkO1xuICAgIHRoaXMubG9jYWwgPSBsb2NhbDtcbiAgfVxuXG4gIHRpY2soKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50LnJ1bih0aGlzLmxvY2FsLCB0aGlzLndvcmxkKTtcbiAgfVxufVxuIiwiaW1wb3J0IEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9kYXRhL0JsYWNrYm9hcmRcIjtcbmltcG9ydCBJdGVtLCB7IEl0ZW1UeXBlIH0gZnJvbSBcIkAvbW9kZWxzL0l0ZW1cIjtcbmltcG9ydCBNdWRtYW4gZnJvbSBcIkAvbW9kZWxzL011ZG1hblwiO1xuaW1wb3J0IHsgUGF0aE5vZGUgfSBmcm9tIFwiQC9wYXRoZmluZGluZy9iYXNlL1BhdGhGaW5kZXJcIjtcbmltcG9ydCB7IG1hcHBlZFNldEZvciB9IGZyb20gXCJAL3V0aWxpdGllcy9jb2xsZWN0aW9uc1wiO1xuaW1wb3J0IHsgQ29vcmRzLCBkaXN0YW5jZUJldHdlZW4sIFBvc2l0aW9uLCB2ZWN0b3JCZXR3ZWVuIH0gZnJvbSBcIkAvdXRpbGl0aWVzL2dlb1wiO1xuaW1wb3J0IHsgZiB9IGZyb20gXCJAL3V0aWxpdGllcy9tYXRoXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVkbWFuRGF0YSB7XG4gIGN1cnJlbnRYOiBudW1iZXI7XG4gIGN1cnJlbnRZOiBudW1iZXI7XG4gIHBhdGg6IFBhdGhOb2RlW107XG4gIHVucmVhY2hhYmxlOiBDb29yZHNbXTtcbiAgc2l6ZTogbnVtYmVyO1xuICBtb3ZlU3BlZWQ6IG51bWJlcjtcbiAgaHlkcmF0aW9uOiBudW1iZXI7XG4gIHdhcm10aDogbnVtYmVyO1xuICBzb2NpYWw6IG51bWJlcjtcbiAgZXllc2lnaHQ6IG51bWJlcjtcbiAgaW52ZW50b3J5OiBNYXA8SXRlbVR5cGUsIFNldDxJdGVtPj47XG4gIHhEaXJlY3Rpb246IG51bWJlcjtcbiAgeURpcmVjdGlvbjogbnVtYmVyO1xuICBzaXR0aW5nOiBib29sZWFuO1xuICB0YXJnZXRlZEl0ZW06IEl0ZW0gfCBudWxsO1xuICB0YWxraW5nVG86IE11ZG1hbiB8IG51bGw7XG4gIG1vdmluZ1RhcmdldDogUG9zaXRpb24gfCBudWxsOyAvLyBjb3VsZCBiZSBhbnl0aGluZyB0aGF0IGltcGxlbWVudHMgYFBvc2l0aW9uYFxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNdWRtYW5CbGFja2JvYXJkIGV4dGVuZHMgQmxhY2tib2FyZDxNdWRtYW5EYXRhPiB7XG4gIGNvbnN0cnVjdG9yKGRhdGE/OiBNdWRtYW5EYXRhKSB7XG4gICAgc3VwZXIoZGF0YSA/PyBNdWRtYW5CbGFja2JvYXJkLmRlZmF1bHRzKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdHMoKTogTXVkbWFuRGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRYOiAwLFxuICAgICAgY3VycmVudFk6IDAsXG4gICAgICBwYXRoOiBbXSxcbiAgICAgIHVucmVhY2hhYmxlOiBbXSxcbiAgICAgIHNpemU6IDE2LFxuICAgICAgbW92ZVNwZWVkOiA1LFxuICAgICAgaHlkcmF0aW9uOiAxMCxcbiAgICAgIHdhcm10aDogNTAsXG4gICAgICBzb2NpYWw6IDAsXG4gICAgICAvLyBleWVzaWdodDogMjAwLFxuICAgICAgZXllc2lnaHQ6IDMwMCxcbiAgICAgIC8vIGV5ZXNpZ2h0OiAxNSxcbiAgICAgIGludmVudG9yeTogbmV3IE1hcCgpLFxuICAgICAgeERpcmVjdGlvbjogMSxcbiAgICAgIHlEaXJlY3Rpb246IDEsXG4gICAgICBzaXR0aW5nOiBmYWxzZSxcbiAgICAgIHRhcmdldGVkSXRlbTogbnVsbCxcbiAgICAgIHRhbGtpbmdUbzogbnVsbCxcbiAgICAgIG1vdmluZ1RhcmdldDogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0IHgoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuZGF0YS5jdXJyZW50WCB9XG4gIGdldCB5KCk6IG51bWJlciB7IHJldHVybiB0aGlzLmRhdGEuY3VycmVudFkgfVxuXG4gIGdldCBoYXNQYXRoKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5kYXRhLnBhdGgubGVuZ3RoID4gMCB9XG4gIGdldCBkZXN0aW5hdGlvbigpOiBQYXRoTm9kZSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLmRhdGEucGF0aFswXSB9XG5cbiAgZ2V0IGlzTmVhckRlc3RpbmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgZGVzdGluYXRpb24gfSA9IHRoaXM7XG4gICAgcmV0dXJuIGRlc3RpbmF0aW9uID8gdGhpcy5pc05lYXIoZGVzdGluYXRpb24ueCwgZGVzdGluYXRpb24ueSkgOiB0cnVlO1xuICB9XG5cbiAgZ2V0IG5lYXJieVRocmVzaG9sZCgpOiBudW1iZXIgeyByZXR1cm4gNSAqIHRoaXMuZGF0YS5tb3ZlU3BlZWQgfVxuICBnZXQgY3Jvd2RpbmdUaHJlc2hvbGQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuZGF0YS5zaXplIH1cbiAgZ2V0IHBlcmNlbnRIeWRyYXRlZCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5kYXRhLmh5ZHJhdGlvbiAvIDEwMCB9XG4gIGdldCBwZXJjZW50V2FybSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5kYXRhLndhcm10aCAvIDEwMCB9XG4gIGdldCBwZXJjZW50U29jaWFsKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmRhdGEuc29jaWFsIC8gMTAwIH1cbiAgZ2V0IHRhbGtpbmcoKTogYm9vbGVhbiB7IHJldHVybiAhIXRoaXMuZGF0YS50YWxraW5nVG8gfVxuXG4gIGNsZWFyUGF0aCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGEucGF0aC5sZW5ndGggPSAwO1xuICAgIC8vIFRPRE86IGlzIHRoaXMgYSBnb29kIHNwb3QgdG8gY2xlYXIgdGhlIHVucmVhY2hhYmxlcz9cbiAgICB0aGlzLmRhdGEudW5yZWFjaGFibGUubGVuZ3RoID0gMDtcbiAgfVxuXG4gIHNldEN1cnJlbnRQb3NpdGlvbih4OiBudW1iZXIsIHk6IG51bWJlcik6IHZvaWQge1xuICAgIHggPSBmKHgpO1xuICAgIHkgPSBmKHkpO1xuXG4gICAgdGhpcy5mYWNlKHgsIHkpO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5jdXJyZW50WCAhPT0geCB8fCB0aGlzLmRhdGEuY3VycmVudFkgIT09IHkpIHtcbiAgICAgIHRoaXMuZGF0YS5zaXR0aW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGEudGFsa2luZ1RvID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuY3VycmVudFggPSB4O1xuICAgIHRoaXMuZGF0YS5jdXJyZW50WSA9IHk7XG4gIH1cblxuICBmYWNlKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgeyBjdXJyZW50WCwgY3VycmVudFkgfSA9IHRoaXMuZGF0YTtcblxuICAgIGlmIChjdXJyZW50WCA9PT0geCkge1xuICAgICAgaWYgKGN1cnJlbnRZICE9PSB5KSB0aGlzLmRhdGEueERpcmVjdGlvbiA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YS54RGlyZWN0aW9uID0gY3VycmVudFggPCB4ID8gMSA6IC0xO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50WSAhPT0geSkgdGhpcy5kYXRhLnlEaXJlY3Rpb24gPSBjdXJyZW50WSA8IHkgPyAxIDogLTE7XG4gIH1cblxuICBtb3ZlVG93YXJkKHg6IG51bWJlciwgeTogbnVtYmVyLCBzcGVlZD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHsgY3VycmVudFgsIGN1cnJlbnRZIH0gPSB0aGlzLmRhdGE7XG4gICAgY29uc3QgbW92ZVNwZWVkID0gc3BlZWQgPz8gdGhpcy5kYXRhLm1vdmVTcGVlZDtcblxuICAgIGNvbnN0IHZlY3RvciA9IHZlY3RvckJldHdlZW4oY3VycmVudFgsIGN1cnJlbnRZLCB4LCB5KTtcbiAgICBjb25zdCB2ZWN0b3JYID0gdmVjdG9yWzBdO1xuICAgIGNvbnN0IHZlY3RvclkgPSB2ZWN0b3JbMV07XG4gICAgY29uc3QgdG90YWxEaXN0YW5jZSA9IE1hdGguc3FydCgodmVjdG9yWCAqKiAyKSArICh2ZWN0b3JZICoqIDIpKTtcbiAgICBjb25zdCBzY2FsZSA9IChtb3ZlU3BlZWQgPiB0b3RhbERpc3RhbmNlKSA/IDEgOiAobW92ZVNwZWVkIC8gdG90YWxEaXN0YW5jZSk7XG4gICAgY29uc3QgZHggPSBzY2FsZSAqIHZlY3Rvclg7XG4gICAgY29uc3QgZHkgPSBzY2FsZSAqIHZlY3Rvclk7XG5cbiAgICB0aGlzLnNldEN1cnJlbnRQb3NpdGlvbihjdXJyZW50WCArIGR4LCBjdXJyZW50WSArIGR5KTtcbiAgfVxuXG4gIGZvbGxvd1BhdGgoc3BlZWRMaW1pdD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHsgcGF0aCB9ID0gdGhpcy5kYXRhO1xuICAgIGNvbnN0IG1vdmVTcGVlZCA9IHNwZWVkTGltaXQgPz8gdGhpcy5kYXRhLm1vdmVTcGVlZDtcbiAgICBjb25zdCBuZXh0UGF0aE5vZGUgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgaWYgKCFuZXh0UGF0aE5vZGUpIHtcbiAgICAgIC8vIFRPRE86IGlzIHRoaXMgYSBnb29kIHNwb3QgdG8gY2xlYXIgdGhlIHVucmVhY2hhYmxlcz9cbiAgICAgIHRoaXMuZGF0YS51bnJlYWNoYWJsZS5sZW5ndGggPSAwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChuZXh0UGF0aE5vZGUueCA9PT0gdGhpcy54ICYmIG5leHRQYXRoTm9kZS55ID09PSB0aGlzLnkpIHtcbiAgICAgIHBhdGgucG9wKCk7XG4gICAgICB0aGlzLmZvbGxvd1BhdGgobW92ZVNwZWVkKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkaXN0YW5jZVRvTm9kZSA9IGRpc3RhbmNlQmV0d2Vlbih0aGlzLngsIHRoaXMueSwgbmV4dFBhdGhOb2RlLngsIG5leHRQYXRoTm9kZS55KTtcbiAgICBpZiAoZGlzdGFuY2VUb05vZGUgPiBtb3ZlU3BlZWQpIHtcbiAgICAgIHRoaXMubW92ZVRvd2FyZChuZXh0UGF0aE5vZGUueCwgbmV4dFBhdGhOb2RlLnksIG1vdmVTcGVlZCk7XG4gICAgfSBlbHNlIGlmIChkaXN0YW5jZVRvTm9kZSA8PSBtb3ZlU3BlZWQpIHtcbiAgICAgIHRoaXMuc2V0Q3VycmVudFBvc2l0aW9uKG5leHRQYXRoTm9kZS54LCBuZXh0UGF0aE5vZGUueSk7XG4gICAgICBwYXRoLnBvcCgpO1xuICAgICAgdGhpcy5mb2xsb3dQYXRoKG1vdmVTcGVlZCAtIGRpc3RhbmNlVG9Ob2RlKTtcbiAgICB9XG4gIH1cblxuICBkZWh5ZHJhdGUoYW1vdW50ID0gMSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YS5oeWRyYXRpb24gPSBNYXRoLm1heCh0aGlzLmRhdGEuaHlkcmF0aW9uIC0gYW1vdW50LCAwKTtcbiAgfVxuXG4gIGh5ZHJhdGUoYW1vdW50ID0gMSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YS5oeWRyYXRpb24gPSBNYXRoLm1pbih0aGlzLmRhdGEuaHlkcmF0aW9uICsgYW1vdW50LCAxMDApO1xuICB9XG5cbiAgY2hpbGwoYW1vdW50ID0gMSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YS53YXJtdGggPSBNYXRoLm1heCh0aGlzLmRhdGEud2FybXRoIC0gYW1vdW50LCAwKTtcbiAgfVxuXG4gIHRvYXN0KGFtb3VudCA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGEud2FybXRoID0gTWF0aC5taW4odGhpcy5kYXRhLndhcm10aCArIGFtb3VudCwgMTAwKTtcbiAgfVxuXG4gIGZlZWxMb25lbHkoYW1vdW50ID0gMSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YS5zb2NpYWwgPSBNYXRoLm1pbih0aGlzLmRhdGEuc29jaWFsIC0gYW1vdW50LCAxMDApO1xuICB9XG5cbiAgZmVlbFNvY2lhbChhbW91bnQgPSAxKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhLnNvY2lhbCA9IE1hdGgubWluKHRoaXMuZGF0YS5zb2NpYWwgKyBhbW91bnQsIDEwMCk7XG4gIH1cblxuICBpbnZlbnRvcnlPZihpdGVtVHlwZTogSXRlbVR5cGUpOiBTZXQ8SXRlbT4ge1xuICAgIHJldHVybiBtYXBwZWRTZXRGb3IodGhpcy5kYXRhLmludmVudG9yeSwgaXRlbVR5cGUpO1xuICB9XG5cbiAgaXNIb2xkaW5nSXRlbShpdGVtOiBJdGVtKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5T2YoaXRlbS50eXBlKS5oYXMoaXRlbSk7XG4gIH1cblxuICBwaWNrVXAoaXRlbTogSXRlbSk6IHZvaWQge1xuICAgIGlmICghaXRlbS5jb2xsZWN0aWJsZSkgcmV0dXJuO1xuXG4gICAgaXRlbS5oZWxkID0gdHJ1ZTtcbiAgICB0aGlzLmludmVudG9yeU9mKGl0ZW0udHlwZSkuYWRkKGl0ZW0pO1xuICB9XG5cbiAgdW51c2VkRnJvbUludmVudG9yeShpdGVtVHlwZTogSXRlbVR5cGUpOiBJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpdGVtc0l0ZXJhdG9yID0gdGhpcy5pbnZlbnRvcnlPZihpdGVtVHlwZSkudmFsdWVzKCk7XG4gICAgbGV0IGVudHJ5ID0gaXRlbXNJdGVyYXRvci5uZXh0KCk7XG5cbiAgICB3aGlsZSAoIWVudHJ5LmRvbmUpIHtcbiAgICAgIGlmICghZW50cnkudmFsdWUudXNlZCkgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICAgICAgZW50cnkgPSBpdGVtc0l0ZXJhdG9yLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBpc1VucmVhY2hhYmxlKHg6IG51bWJlciwgeTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgLy8gcmV0dXJuIGRpc3RhbmNlQmV0d2Vlbih0aGlzLngsIHRoaXMueSwgeCwgeSkgPiB0aGlzLmRhdGEuZXllc2lnaHRcbiAgICAvLyAgIHx8ICEhdGhpcy5kYXRhLnVucmVhY2hhYmxlLmZpbmQoKGNvb3JkcykgPT4gY29vcmRzWzBdID09PSB4ICYmIGNvb3Jkc1sxXSA9PT0geSk7XG4gICAgcmV0dXJuICEhdGhpcy5kYXRhLnVucmVhY2hhYmxlLmZpbmQoKGNvb3JkcykgPT4gY29vcmRzWzBdID09PSB4ICYmIGNvb3Jkc1sxXSA9PT0geSk7XG4gIH1cblxuICBpc1dpdGhpbkV5ZXNpZ2h0KHg6IG51bWJlciwgeTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRpc3RhbmNlQmV0d2Vlbih0aGlzLngsIHRoaXMueSwgeCwgeSkgPD0gdGhpcy5kYXRhLmV5ZXNpZ2h0O1xuICB9XG5cbiAgaXNOZWFyKHg6IG51bWJlciwgeTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRpc3RhbmNlQmV0d2Vlbih0aGlzLngsIHRoaXMueSwgeCwgeSkgPD0gdGhpcy5uZWFyYnlUaHJlc2hvbGQ7XG4gIH1cblxuICBpc0Nyb3dkaW5nKHg6IG51bWJlciwgeTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRpc3RhbmNlQmV0d2Vlbih0aGlzLngsIHRoaXMueSwgeCwgeSkgPD0gdGhpcy5jcm93ZGluZ1RocmVzaG9sZDtcbiAgfVxuXG4gIGlzQXQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy54ID09PSB4ICYmIHRoaXMueSA9PT0geTtcbiAgfVxuXG4gIGlzT25lU3RlcEF3YXlGcm9tKHg6IG51bWJlciwgeTogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRpc3RhbmNlQmV0d2Vlbih0aGlzLngsIHRoaXMueSwgeCwgeSkgPD0gdGhpcy5kYXRhLm1vdmVTcGVlZDtcbiAgfVxuXG4gIGRpc3RhbmNlVG8oeDogbnVtYmVyLCB5OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBkaXN0YW5jZUJldHdlZW4odGhpcy54LCB0aGlzLnksIHgsIHkpO1xuICB9XG5cbiAgdGFsa1RvKGNvbXBhdHJpb3Q6IE11ZG1hbik6IHZvaWQge1xuICAgIC8vIERvbid0IHRhbGsgdG8geW91cnNlbGYuIEl0J3MgdW5iZWNvbWluZy5cbiAgICBpZiAodGhpcyA9PT0gY29tcGF0cmlvdC5sb2NhbCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29tcGF0cmlvdFRhbGtpbmdUbyA9IGNvbXBhdHJpb3QubG9jYWwuZGF0YS50YWxraW5nVG87XG4gICAgLy8gSWYgdGhleSdyZSBhbHJlYWR5IHRhbGtpbmcgdG8gc29tZW9uZS4uLlxuICAgIGlmIChjb21wYXRyaW90VGFsa2luZ1RvKSB7XG4gICAgICAvLyAuLi5hbmQgdGhhdCBzb21lb25lIGlzICptZSwqIHRoZW4ganVzdCB0YWxrIHRvIHRoZW0uIE90aGVyd2lzZSwgdGFsayB0b1xuICAgICAgLy8gdGhlIG11ZG1hbiAqdGhleSogYXJlIHRhbGtpbmcgdG8uXG4gICAgICBpZiAodGhpcyA9PT0gY29tcGF0cmlvdFRhbGtpbmdUby5sb2NhbCkge1xuICAgICAgICB0aGlzLmRhdGEudGFsa2luZ1RvID0gY29tcGF0cmlvdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YS50YWxraW5nVG8gPSBjb21wYXRyaW90VGFsa2luZ1RvO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBub3QsIHRoZW4ganVzdCB0YWxrIHRvIHRoZW0uXG4gICAgICB0aGlzLmRhdGEudGFsa2luZ1RvID0gY29tcGF0cmlvdDtcbiAgICAgIC8vIEFsc28sIG1ha2UgdGhlbSBmYWNlIHlvdS5cbiAgICAgIGNvbXBhdHJpb3QubG9jYWwuZmFjZSh0aGlzLngsIHRoaXMueSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyB0YWxraW5nVG8gfSA9IHRoaXMuZGF0YTtcbiAgICB0aGlzLmZhY2UodGFsa2luZ1RvLmxvY2FsLngsIHRhbGtpbmdUby5sb2NhbC55KTtcbiAgfVxufVxuIiwiY29uc3QgZW51bSBCZWhhdmlvclN0YXR1cyB7XG4gIFJVTk5JTkcsXG4gIFNVQ0NFU1MsXG4gIEZBSUxVUkUsXG59XG5cbmV4cG9ydCBkZWZhdWx0IEJlaGF2aW9yU3RhdHVzO1xuIiwiaW1wb3J0IEJlaGF2aW9yU3RhdHVzIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2UvQmVoYXZpb3JTdGF0dXNcIjtcbmltcG9ydCBCbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2UvZGF0YS9CbGFja2JvYXJkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VOb2RlIHtcbiAgcHVibGljIHN0YXRpYyBkZWJ1ZyA9IGZhbHNlO1xuICAvLyBwdWJsaWMgc3RhdGljIGRlYnVnID0gdHJ1ZTtcblxuICBwdWJsaWMgc3RhdHVzOiBCZWhhdmlvclN0YXR1cyA9IEJlaGF2aW9yU3RhdHVzLlJVTk5JTkc7XG4gIHB1YmxpYyBsZXZlbCA9IDA7XG5cbiAgaW5pdCguLi5fYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAvKiBpbXBsZW1lbnQgb24gY2xhc3NlcyBleHRlbmRpbmcgdGhpcyBvbmUsIGlmIGRlc2lyZWQgKi9cbiAgfVxuXG4gIHByb2Nlc3MoX2xvY2FsOiBCbGFja2JvYXJkLCBfd29ybGQ6IEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2QgI3Byb2Nlc3MgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBub2RlIGNsYXNzZXMuXCIpO1xuICB9XG5cbiAgcnVuKGxvY2FsOiBCbGFja2JvYXJkLCB3b3JsZDogQmxhY2tib2FyZCk6IHZvaWQge1xuICAgIGlmIChCYXNlTm9kZS5kZWJ1Zykge1xuICAgICAgY29uc3QgaW5kZW50ID0gJyB8Jy5yZXBlYXQodGhpcy5sZXZlbCk7XG4gICAgICBjb25zb2xlLmxvZyhgJHtpbmRlbnR9UHJvY2Vzc2luZyBub2RlOiAke3RoaXMuY29uc3RydWN0b3IubmFtZX1gKTtcbiAgICAgIHRoaXMucHJvY2Vzcyhsb2NhbCwgd29ybGQpO1xuICAgICAgY29uc29sZS5sb2coYCR7aW5kZW50fVByb2Nlc3NlZC4gUmVzdWx0OiAke3RoaXMuc3RhdHVzfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb2Nlc3MobG9jYWwsIHdvcmxkKTtcbiAgICB9XG4gIH1cblxuICBpbmNyZW1lbnRMZXZlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmxldmVsICs9IDE7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5jb25zdHJ1Y3Rvci5uYW1lLCB0aGlzLmxldmVsKVxuICB9XG5cbiAgZ2V0IHN1Y2NlZWRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IEJlaGF2aW9yU3RhdHVzLlNVQ0NFU1M7XG4gIH1cblxuICBnZXQgZmFpbGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gQmVoYXZpb3JTdGF0dXMuRkFJTFVSRTtcbiAgfVxuXG4gIGdldCBydW5uaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gQmVoYXZpb3JTdGF0dXMuUlVOTklORztcbiAgfVxuXG4gIGdldCBmaW5pc2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMucnVubmluZztcbiAgfVxuXG4gIHN1Y2NlZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0dXMgPSBCZWhhdmlvclN0YXR1cy5TVUNDRVNTO1xuICB9XG5cbiAgZmFpbCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXR1cyA9IEJlaGF2aW9yU3RhdHVzLkZBSUxVUkU7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXR1cyA9IEJlaGF2aW9yU3RhdHVzLlJVTk5JTkc7XG4gIH1cbn1cbiIsImltcG9ydCB7IHNodWZmbGVJblBsYWNlIH0gZnJvbSBcIkAvdXRpbGl0aWVzL2NvbGxlY3Rpb25zXCI7XG5pbXBvcnQgQmFzZU5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9CYXNlTm9kZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvc2l0ZU5vZGVPcHRpb25zIHtcbiAgc2h1ZmZsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbXBvc2l0ZU5vZGU8XG4gIENoaWxkTm9kZSBleHRlbmRzIEJhc2VOb2RlID0gQmFzZU5vZGUsXG4gIE9wdGlvbnMgZXh0ZW5kcyBDb21wb3NpdGVOb2RlT3B0aW9ucyA9IENvbXBvc2l0ZU5vZGVPcHRpb25zXG4+IGV4dGVuZHMgQmFzZU5vZGUge1xuICBwdWJsaWMgY2hpbGRyZW46IENoaWxkTm9kZVtdO1xuICBwdWJsaWMgc2h1ZmZsZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IFtvcHRpb25zOiBPcHRpb25zLCBjaGlsZHJlbjogQ2hpbGROb2RlW11dKTtcbiAgY29uc3RydWN0b3IoLi4uYXJnczogW2NoaWxkcmVuOiBDaGlsZE5vZGVbXV0pO1xuICBjb25zdHJ1Y3RvciguLi5hcmdzOiBbb3B0aW9uczogT3B0aW9ucywgY2hpbGRyZW46IENoaWxkTm9kZVtdXSB8IFtjaGlsZHJlbjogQ2hpbGROb2RlW11dKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5zaHVmZmxlID0gZmFsc2U7XG4gICAgICB0aGlzLmNoaWxkcmVuID0gYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaHVmZmxlID0gYXJnc1swXS5zaHVmZmxlID8/IGZhbHNlO1xuICAgICAgdGhpcy5jaGlsZHJlbiA9IGFyZ3NbMV07XG4gICAgfVxuXG4gICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLmluY3JlbWVudExldmVsKCkpO1xuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgc3VwZXIucmVzZXQoKTtcbiAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7IGNoaWxkLnJlc2V0KCkgfSk7XG4gIH1cblxuICBpbmNyZW1lbnRMZXZlbCgpOiB2b2lkIHtcbiAgICBzdXBlci5pbmNyZW1lbnRMZXZlbCgpO1xuICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiBjaGlsZC5pbmNyZW1lbnRMZXZlbCgpKTtcbiAgfVxuXG4gIHNodWZmbGVJZk5lY2Vzc2FyeSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaHVmZmxlKSBzaHVmZmxlSW5QbGFjZSh0aGlzLmNoaWxkcmVuKTtcbiAgfVxufVxuIiwiaW1wb3J0IENvbXBvc2l0ZU5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9Db21wb3NpdGVOb2RlXCI7XG5pbXBvcnQgQmFzZU5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9CYXNlTm9kZVwiO1xuaW1wb3J0IEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9kYXRhL0JsYWNrYm9hcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWxsPFQgZXh0ZW5kcyBCYXNlTm9kZT4gZXh0ZW5kcyBDb21wb3NpdGVOb2RlPFQ+IHtcbiAgLy8gVGhpcyBub2RlIHN1Y2NlZWRzIGlmIGVpdGhlci4uLlxuICAvL1xuICAvLyAgIGEpIGFsbCBvZiBpdHMgY2hpbGRyZW4gc3VjY2VlZCwgb3JcbiAgLy8gICBiKSBpdCBoYXMgbm8gY2hpbGRyZW4uXG4gIC8vXG4gIC8vIFRoaXMgbm9kZSBmYWlscyBhbmQgc3RvcHMgaWYgYW55IGNoaWxkIGZhaWxzLlxuICAvL1xuICAvLyBUaGlzIG5vZGUgc3RvcHMgYW5kIHdhaXRzIGlmIGEgY2hpbGQgY29udGludWVzIHJ1bm5pbmcuXG4gIC8vXG4gIHByb2Nlc3MobG9jYWw6IEJsYWNrYm9hcmQsIHdvcmxkOiBCbGFja2JvYXJkKSB7XG4gICAgdGhpcy5zaHVmZmxlSWZOZWNlc3NhcnkoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgY2hpbGQucnVuKGxvY2FsLCB3b3JsZCk7XG5cbiAgICAgIGlmIChjaGlsZC5mYWlsZWQpIHRoaXMuZmFpbCgpO1xuICAgICAgaWYgKGNoaWxkLnJ1bm5pbmcgfHwgdGhpcy5mYWlsZWQpIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN1Y2NlZWQoKTtcbiAgfVxufVxuIiwiaW1wb3J0IENvbXBvc2l0ZU5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9Db21wb3NpdGVOb2RlXCI7XG5pbXBvcnQgQmFzZU5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9CYXNlTm9kZVwiO1xuaW1wb3J0IEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9kYXRhL0JsYWNrYm9hcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQW55PFQgZXh0ZW5kcyBCYXNlTm9kZT4gZXh0ZW5kcyBDb21wb3NpdGVOb2RlPFQ+IHtcbiAgLy8gVGhpcyBub2RlIHN1Y2NlZWRzIGFuZCBzdG9wcyBpZiBhbnkgY2hpbGQgc3VjY2VlZHMuXG4gIC8vXG4gIC8vIFRoaXMgbm9kZSBmYWlscyBpZiBlaXRoZXIuLi5cbiAgLy9cbiAgLy8gICBhKSBhbGwgb2YgaXRzIGNoaWxkcmVuIGZhaWwsIG9yXG4gIC8vICAgYikgaXQgaGFzIG5vIGNoaWxkcmVuLlxuICAvL1xuICAvLyBUaGlzIG5vZGUgc3RvcHMgYW5kIHdhaXRzIGlmIGEgY2hpbGQgY29udGludWVzIHJ1bm5pbmcuXG4gIC8vXG4gIHByb2Nlc3MobG9jYWw6IEJsYWNrYm9hcmQsIHdvcmxkOiBCbGFja2JvYXJkKTogdm9pZCB7XG4gICAgdGhpcy5zaHVmZmxlSWZOZWNlc3NhcnkoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldO1xuICAgICAgY2hpbGQucnVuKGxvY2FsLCB3b3JsZCk7XG5cbiAgICAgIGlmIChjaGlsZC5zdWNjZWVkZWQpIHRoaXMuc3VjY2VlZCgpO1xuICAgICAgaWYgKGNoaWxkLnJ1bm5pbmcgfHwgdGhpcy5zdWNjZWVkZWQpIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZhaWwoKTtcbiAgfVxufVxuIiwiaW1wb3J0IEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9kYXRhL0JsYWNrYm9hcmRcIjtcbmltcG9ydCBCYXNlTm9kZSBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL0Jhc2VOb2RlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlY29yYXRvck5vZGU8Q2hpbGROb2RlIGV4dGVuZHMgQmFzZU5vZGUgPSBCYXNlTm9kZT4gZXh0ZW5kcyBCYXNlTm9kZSB7XG4gIHB1YmxpYyBjaGlsZDogQ2hpbGROb2RlO1xuXG4gIGNvbnN0cnVjdG9yKGNoaWxkOiBDaGlsZE5vZGUpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY2hpbGQgPSBjaGlsZDtcbiAgICB0aGlzLmNoaWxkLmluY3JlbWVudExldmVsKCk7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICBzdXBlci5yZXNldCgpO1xuICAgIHRoaXMuY2hpbGQucmVzZXQoKTtcbiAgfVxuXG4gIGluY3JlbWVudExldmVsKCk6IHZvaWQge1xuICAgIHN1cGVyLmluY3JlbWVudExldmVsKCk7XG4gICAgdGhpcy5jaGlsZC5pbmNyZW1lbnRMZXZlbCgpO1xuICB9XG5cbiAgcHJvY2Vzcyhsb2NhbDogQmxhY2tib2FyZCwgd29ybGQ6IEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICB0aGlzLmNoaWxkLnJ1bihsb2NhbCwgd29ybGQpO1xuICAgIHRoaXMuc3RhdHVzID0gdGhpcy5jaGlsZC5zdGF0dXM7XG4gIH1cbn1cbiIsImltcG9ydCBCZWhhdmlvclN0YXR1cyBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL0JlaGF2aW9yU3RhdHVzXCI7XG5pbXBvcnQgQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL2RhdGEvQmxhY2tib2FyZFwiO1xuaW1wb3J0IEJhc2VOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvQmFzZU5vZGVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBbm9ueW1vdXNOb2RlTGFtYmRhPEwgZXh0ZW5kcyBCbGFja2JvYXJkLCBXIGV4dGVuZHMgQmxhY2tib2FyZD4ge1xuICAobG9jYWw6IEwsIHdvcmxkOiBXKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB8IG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFub255bW91c05vZGU8XG4gIExvY2FsQmxhY2tib2FyZCBleHRlbmRzIEJsYWNrYm9hcmQgPSBCbGFja2JvYXJkLFxuICBXb3JsZEJsYWNrYm9hcmQgZXh0ZW5kcyBCbGFja2JvYXJkID0gQmxhY2tib2FyZCxcbj4gZXh0ZW5kcyBCYXNlTm9kZSB7XG4gIHB1YmxpYyBsYW1iZGE6IEFub255bW91c05vZGVMYW1iZGE8TG9jYWxCbGFja2JvYXJkLCBXb3JsZEJsYWNrYm9hcmQ+O1xuXG4gIGNvbnN0cnVjdG9yKGxhbWJkYTogQW5vbnltb3VzTm9kZUxhbWJkYTxMb2NhbEJsYWNrYm9hcmQsIFdvcmxkQmxhY2tib2FyZD4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubGFtYmRhID0gbGFtYmRhO1xuICB9XG5cbiAgcHJvY2Vzcyhsb2NhbDogTG9jYWxCbGFja2JvYXJkLCB3b3JsZDogV29ybGRCbGFja2JvYXJkKTogdm9pZCB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5sYW1iZGEobG9jYWwsIHdvcmxkKTtcblxuICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gQmVoYXZpb3JTdGF0dXMuU1VDQ0VTUztcbiAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gQmVoYXZpb3JTdGF0dXMuRkFJTFVSRTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGF0dXMgPSBCZWhhdmlvclN0YXR1cy5SVU5OSU5HO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IEFub255bW91c05vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9Bbm9ueW1vdXNOb2RlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vT3AgZXh0ZW5kcyBBbm9ueW1vdXNOb2RlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKCkgPT4gbnVsbCk7XG4gIH1cbn1cbiIsImltcG9ydCBCbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2UvZGF0YS9CbGFja2JvYXJkXCI7XG5pbXBvcnQgQmFzZU5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9CYXNlTm9kZVwiO1xuaW1wb3J0IERlY29yYXRvck5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9EZWNvcmF0b3JOb2RlXCI7XG5pbXBvcnQgTm9PcCBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL2xlYXZlcy9Ob09wXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZhaWw8VCBleHRlbmRzIEJhc2VOb2RlID0gQmFzZU5vZGU+IGV4dGVuZHMgRGVjb3JhdG9yTm9kZSB7XG4gIGNvbnN0cnVjdG9yKGNoaWxkPzogVCkge1xuICAgIHN1cGVyKGNoaWxkID8/IG5ldyBOb09wKCkpO1xuICB9XG5cbiAgcHJvY2Vzcyhsb2NhbDogQmxhY2tib2FyZCwgd29ybGQ6IEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICB0aGlzLmNoaWxkLnJ1bihsb2NhbCwgd29ybGQpO1xuICAgIHRoaXMuZmFpbCgpO1xuICB9XG59XG4iLCJpbXBvcnQgQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL2RhdGEvQmxhY2tib2FyZFwiO1xuaW1wb3J0IEJhc2VOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvQmFzZU5vZGVcIjtcbmltcG9ydCBEZWNvcmF0b3JOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvRGVjb3JhdG9yTm9kZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXBlYXQ8VCBleHRlbmRzIEJhc2VOb2RlID0gQmFzZU5vZGU+IGV4dGVuZHMgRGVjb3JhdG9yTm9kZTxUPiB7XG4gIC8vIHB1YmxpYyB0aW1lczogbnVtYmVyO1xuICAvLyBwdWJsaWMgcmVwZWF0ZWQgPSAwO1xuXG4gIC8vIC8vIFJlcGVhdHMgdGhlIGdpdmVuIGNoaWxkIG5vZGUsIGlnbm9yaW5nIHdoZXRoZXIgaXQgc3VjY2VlZHMgb3IgZmFpbHMuIE9uY2VcbiAgLy8gLy8gZmluaXNoZWQsIHRoaXMgbm9kZSB3aWxsIHN1Y2NlZWQuIElmIGEgbnVtYmVyIGB0aW1lc2AgaXMgZ2l2ZW4sIGl0IHdpbGxcbiAgLy8gLy8gcmVwZWF0IHRoZSBjaGlsZCBub2RlIHRoYXQgbWFueSB0aW1lcy4gSWYgbm8gbnVtYmVyIGlzIGdpdmVuLCBpdCB3aWxsXG4gIC8vIC8vIHJlcGVhdCBpbmRlZmluaXRlbHkgYW5kIG5ldmVyIGZpbmlzaC5cbiAgLy8gY29uc3RydWN0b3IoLi4uYXJnczogW3RpbWVzOiBudW1iZXIsIGNoaWxkOiBUXSk7XG4gIC8vIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IFtjaGlsZDogVF0pO1xuICAvLyBjb25zdHJ1Y3RvciguLi5hcmdzOiBbdGltZXM6IG51bWJlciwgY2hpbGQ6IFRdIHwgW2NoaWxkOiBUXSkge1xuICAvLyAgIHN1cGVyKGFyZ3MubGVuZ3RoID09PSAxID8gYXJnc1swXSA6IGFyZ3NbMV0pO1xuXG4gIC8vICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gIC8vICAgICB0aGlzLnRpbWVzID0gLTE7XG4gIC8vICAgICB0aGlzLmNoaWxkID0gYXJnc1swXTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgdGhpcy50aW1lcyA9IGFyZ3NbMF07XG4gIC8vICAgICB0aGlzLmNoaWxkID0gYXJnc1sxXTtcbiAgLy8gICB9XG4gIC8vIH1cblxuICAvLyBwcm9jZXNzKGxvY2FsOiBCbGFja2JvYXJkLCB3b3JsZDogQmxhY2tib2FyZCk6IHZvaWQge1xuICAvLyAgIGlmICh0aGlzLnRpbWVzID49IDAgJiYgdGhpcy5yZXBlYXRlZCA+PSB0aGlzLnRpbWVzKSB7XG4gIC8vICAgICB0aGlzLnN1Y2NlZWQoKTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgdGhpcy5jaGlsZC5yZXNldCgpO1xuICAvLyAgICAgdGhpcy5jaGlsZC5ydW4obG9jYWwsIHdvcmxkKTtcbiAgLy8gICAgIHRoaXMucmVwZWF0ZWQgKz0gMTtcbiAgLy8gICB9XG4gIC8vIH1cblxuICBwcm9jZXNzKGxvY2FsOiBCbGFja2JvYXJkLCB3b3JsZDogQmxhY2tib2FyZCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgICAvLyB0aGlzLmNoaWxkLnJlc2V0KCk7XG4gICAgdGhpcy5jaGlsZC5ydW4obG9jYWwsIHdvcmxkKTtcbiAgICB0aGlzLnN1Y2NlZWQoKTtcbiAgfVxufVxuIiwiaW1wb3J0IEJhc2VOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvQmFzZU5vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGVhZk5vZGUgZXh0ZW5kcyBCYXNlTm9kZSB7fVxuIiwiaW1wb3J0IExlYWZOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvTGVhZk5vZGVcIjtcbmltcG9ydCBNdWRtYW5CbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZG1hbkJsYWNrYm9hcmRcIjtcbmltcG9ydCBNdWR3b3JsZEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkd29ybGRCbGFja2JvYXJkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvbGxvd1BhdGggZXh0ZW5kcyBMZWFmTm9kZSB7XG4gIHByb2Nlc3MobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIF93b3JsZDogTXVkd29ybGRCbGFja2JvYXJkKTogdm9pZCB7XG4gICAgaWYgKCFsb2NhbC5oYXNQYXRoKSB7XG4gICAgICB0aGlzLnN1Y2NlZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2NhbC5mb2xsb3dQYXRoKCk7XG4gICAgaWYgKCFsb2NhbC5oYXNQYXRoKSB0aGlzLnN1Y2NlZWQoKTtcbiAgfVxufVxuIiwiaW1wb3J0IEJhc2VOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvQmFzZU5vZGVcIjtcbmltcG9ydCBNdWRtYW5CbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZG1hbkJsYWNrYm9hcmRcIjtcbmltcG9ydCBNdWR3b3JsZEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkd29ybGRCbGFja2JvYXJkXCI7XG5pbXBvcnQgeyBQYXRoTm9kZSB9IGZyb20gXCJAL3BhdGhmaW5kaW5nL2Jhc2UvUGF0aEZpbmRlclwiO1xuaW1wb3J0IHsgY29vcmRzLCByYW5kb21Qb2ludEluQ2lyY2xlIH0gZnJvbSBcIkAvdXRpbGl0aWVzL2dlb1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcm9jZXNzU2V0UGF0aFRvKGJlaGF2aW9yTm9kZTogQmFzZU5vZGUsIHg6IG51bWJlciwgeTogbnVtYmVyLCBsb2NhbDogTXVkbWFuQmxhY2tib2FyZCwgd29ybGQ6IE11ZHdvcmxkQmxhY2tib2FyZCk6IHZvaWQge1xuICAvLyBJZiB3ZSdyZSBhbHJlYWR5IGF0IHRoZSBsb2NhdGlvbiwgdGhlbiBjbGVhciBhbnkgcGF0aCB3ZSBoYXZlIHNldCBhbmRcbiAgLy8gc3VjY2VlZCwgYmVjYXVzZSB3ZSdyZSBkb25lIVxuICBpZiAobG9jYWwuaXNBdCh4LCB5KSkge1xuICAgIGxvY2FsLmNsZWFyUGF0aCgpO1xuICAgIGJlaGF2aW9yTm9kZS5zdWNjZWVkKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgdGhlIG11ZG1hbiBhbHJlYWR5IGhhcyBhIHBhdGguLi5cbiAgY29uc3QgeyBkZXN0aW5hdGlvbiB9ID0gbG9jYWw7XG4gIGlmIChkZXN0aW5hdGlvbikge1xuICAgIC8vIC4uLmFuZCB0aGUgZGVzdGluYXRpb24gSVMgdGhlIGxvY2F0aW9uLCB0aGVuIHdlJ3JlIGdvb2QgKHdlJ3JlIGFscmVhZHlcbiAgICAvLyBvbiBvdXIgd2F5IHRvIHRoZSBsb2NhdGlvbikuXG4gICAgaWYgKGRlc3RpbmF0aW9uLnggPT09IHggJiYgZGVzdGluYXRpb24ueSA9PT0geSkge1xuICAgICAgYmVoYXZpb3JOb2RlLnN1Y2NlZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgbG9jYXRpb24gaXMgb3V0IG9mIHNpZ2h0IGFuZCB3ZSBzdGlsbCBoYXZlIGEgZGVzdGluYXRpb24sIHRoZW4gd2VcbiAgICAvLyBzaG91bGQgcHJvYmFibHkganVzdCBmb2xsb3cgdGhhdCBwYXRoLiBJdCdzIGxpa2VseSBmcm9tIGEgcHJldmlvdXNcbiAgICAvLyBpdGVyYXRpb24gd2hlcmUgd2UgaGFkIHRvIGRvIGEgcmFuZG9tIHdhbGsuIEFuZCBpZiBub3QsIHRoZW4gaXQnc1xuICAgIC8vIGJldHRlciB0aGFuIGhhdmluZyB0byBkbyBhIHJhbmRvbSB3YWxrLCBhbnl3YXkuXG4gICAgaWYgKCFsb2NhbC5pc1dpdGhpbkV5ZXNpZ2h0KHgsIHkpKSB7XG4gICAgICBiZWhhdmlvck5vZGUuc3VjY2VlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGl0IF9pc18gd2l0aGluIGV5ZXNpZ2h0LCB0aG91Z2gsIHdlIHNob3VsZCBnZXQgcmlkIG9mIG91ciBjdXJyZW50XG4gICAgLy8gcGF0aCBhbmQgZGVzdGluYXRpb24sIGFuZCBpbnN0ZWFkIGZvcmdlIGEgbmV3IHBhdGggdG93YXJkIHRoZSBsb2NhdGlvbi5cbiAgICBsb2NhbC5jbGVhclBhdGgoKTtcbiAgfVxuXG4gIC8vIElmIHdlJ3JlIFNVUEVSIENMT1NFIHRvIHRoZSBsb2NhdGlvbiwganVzdCBtYWtlIGEgc2ltcGxlIHBhdGggdG8gaXQgYW5kXG4gIC8vIHN1Y2NlZWQuXG4gIGlmIChsb2NhbC5pc09uZVN0ZXBBd2F5RnJvbSh4LCB5KSkge1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uTm9kZSA9IG5ldyBQYXRoTm9kZSh4LCB5LCBsb2NhbC5kaXN0YW5jZVRvKHgsIHkpLCAwLCBudWxsKTtcbiAgICBsb2NhbC5kYXRhLnBhdGgucHVzaChkZXN0aW5hdGlvbk5vZGUpO1xuICAgIGJlaGF2aW9yTm9kZS5zdWNjZWVkKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgdGhlIGxvY2F0aW9uIGlzbid0IHdpdGhpbiBvdXIgZXllc2lnaHQsIHRoZW4sIHdlbGwuLi4gd2UnbGwgaGF2ZSB0b1xuICAvLyB3YW5kZXIgYXJvdW5kIGZvciBhIGJpdCB1bnRpbCB3ZSBmaW5kIG9uZS5cbiAgaWYgKCFsb2NhbC5pc1dpdGhpbkV5ZXNpZ2h0KHgsIHkpKSB7XG4gICAgY29uc3QgeyBleWVzaWdodCwgcGF0aCB9ID0gbG9jYWwuZGF0YTtcblxuICAgIC8vIEZpbmQgYSByYW5kb20gcGF0aFxuICAgIGxldCB0cmllcyA9IDA7XG4gICAgd2hpbGUgKCFsb2NhbC5oYXNQYXRoICYmIHRyaWVzIDwgMjUpIHtcbiAgICAgIHRyaWVzICs9IDE7XG4gICAgICBjb25zdCBwb2ludCA9IHJhbmRvbVBvaW50SW5DaXJjbGUobG9jYWwueCwgbG9jYWwueSwgZXllc2lnaHQpO1xuICAgICAgd29ybGQuZGF0YS5tYXAucG9wdWxhdGVQYXRoKHBhdGgsIGxvY2FsLngsIGxvY2FsLnksIHBvaW50WzBdLCBwb2ludFsxXSwgZXllc2lnaHQpO1xuICAgIH1cblxuICAgIC8vIEZvdW5kIGEgcmFuZG9tIHBhdGhcbiAgICBpZiAobG9jYWwuaGFzUGF0aCkge1xuICAgICAgYmVoYXZpb3JOb2RlLnN1Y2NlZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDb3VsZG4ndCBmaW5kIGEgd2Fsa2FibGUgcmFuZG9tIHBhdGguLi4gdGhhdCdzIHdlaXJkLCBidXQgb2ggd2VsbC5cbiAgICAvLyBXZSdsbCBqdXN0IGdpdmUgdXAuXG4gICAgYmVoYXZpb3JOb2RlLmZhaWwoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBPa2F5LCB3ZSBub3cga25vdyB0aGUgZm9sbG93aW5nOlxuICAvL1xuICAvLyAgIDEuIFdlIGFyZSBOT1QgWUVUIGF0IHRoZSBsb2NhdGlvblxuICAvLyAgIDIuIFdlIGFyZSBOT1QgWUVUIG5lYXIgZW5vdWdoIHRvIHRoZSBsb2NhdGlvbiB0byBiZSBvbmUgc3RlcCBhd2F5XG4gIC8vICAgMy4gV2UgRE8gTk9UIFlFVCBoYXZlIGEgcGF0aCB0byB0aGUgbG9jYXRpb25cbiAgLy8gICA0LiBUaGUgdGFyZ2V0IElTIHdpdGhpbiBvdXIgZXllc2lnaHRcbiAgLy9cbiAgLy8gU28sIHdlIHdhbnQgdG8gdHJ5IHRvIGdldCBhIHBhdGggdG8gdGhlIGxvY2F0aW9uLlxuICAvL1xuICB3b3JsZC5kYXRhLm1hcC5wb3B1bGF0ZVBhdGgoXG4gICAgbG9jYWwuZGF0YS5wYXRoLFxuICAgIGxvY2FsLngsXG4gICAgbG9jYWwueSxcbiAgICB4LFxuICAgIHksXG4gICAgbG9jYWwuZGF0YS5leWVzaWdodCxcbiAgKTtcblxuICAvLyBJZiB3ZSBoYXZlIGEgcGF0aCB0byB0aGUgdGFyZ2V0IGFmdGVyIHBvcHVsYXRpbmcsIHRoZW4gd2UncmUgZ29vZCEgSWZcbiAgLy8gbm90LCB3ZSdsbCB3YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhhdCB0YXJnZXQgd2FzIHVucmVhY2hhYmxlIGFuZCBmYWlsIHNvXG4gIC8vIHdlIGNhbiB0cnkgYSBkaWZmZXJlbnQgb25lLlxuICBpZiAobG9jYWwuaGFzUGF0aCkge1xuICAgIGJlaGF2aW9yTm9kZS5zdWNjZWVkKCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVE9ETzogVGhlIHVucmVhY2hhYmxlIGxpc3Qgd2lsbCBncm93IHRvIGV2ZW50dWFsbHkgY29udGFpbiBhbGwgdGhlXG4gICAgLy8gICAgICAgbG9jYXRpb24gcG9zaXRpb25zLiBNZW1vcnkgbGVhayBwb3RlbnRpYWwuIE1heWJlIGFzIGEgbWl0aWdhdGluZ1xuICAgIC8vICAgICAgIG1lYXN1cmUgdGhlIGxpc3Qgc2hvdWxkIGFjdHVhbGx5IHJlZmVyZW5jZSB0aGUgbG9jYXRpb24gKGFzIGFuXG4gICAgLy8gICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhlIGBQb3NpdGlvbmAgaW50ZXJmYWNlKSBzbyB0aGF0IHRoZSBsaXN0XG4gICAgLy8gICAgICAgY2FuIHN0aWxsIGdyb3cgdG8gYSBsYXJnZSBzaXplIGJ1dCBub3QgY3JlYXRlIF9uZXdfIENvb3Jkc1xuICAgIC8vICAgICAgIChJbnQxNkFycmF5KSBvYmplY3RzIGZvciBldmVyeSBzZXQgb2YgKHgseSkgcG9zaXRpb25zPyBJbnN0ZWFkIGl0XG4gICAgLy8gICAgICAgd291bGQgb25seSByZWZlcmVuY2UgZXhpc3Rpbmcgb2JqZWN0cy4gSnVzdCBhIHRob3VnaHQuXG4gICAgLy9cbiAgICBsb2NhbC5kYXRhLnVucmVhY2hhYmxlLnB1c2goY29vcmRzKHgsIHkpKTtcbiAgICBiZWhhdmlvck5vZGUuZmFpbCgpO1xuICB9XG59XG4iLCJpbXBvcnQgTGVhZk5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9MZWFmTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcbmltcG9ydCBwcm9jZXNzU2V0UGF0aFRvIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9wcm9jZXNzZXMvcHJvY2Vzc1NldFBhdGhUb1wiO1xuaW1wb3J0IHsgSXRlbVR5cGUgfSBmcm9tIFwiQC9tb2RlbHMvSXRlbVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXRQYXRoVG9JdGVtIGV4dGVuZHMgTGVhZk5vZGUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHByb2Nlc3MobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtID0gd29ybGQuZGF0YS5pdGVtcy5maW5kQ2xvc2VzdCh0aGlzLml0ZW1UeXBlLCBsb2NhbC54LCBsb2NhbC55LCAoaXRlbSkgPT4ge1xuICAgICAgcmV0dXJuICFsb2NhbC5pc1VucmVhY2hhYmxlKGl0ZW0ueCwgaXRlbS55KTtcbiAgICB9KTtcblxuICAgIGlmICghaXRlbSkge1xuICAgICAgdGhpcy5mYWlsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Nlc3NTZXRQYXRoVG8odGhpcywgaXRlbS54LCBpdGVtLnksIGxvY2FsLCB3b3JsZCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgQmFzZU5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9CYXNlTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcbmltcG9ydCB7IFBhdGhOb2RlIH0gZnJvbSBcIkAvcGF0aGZpbmRpbmcvYmFzZS9QYXRoRmluZGVyXCI7XG5pbXBvcnQgeyBjb29yZHMsIGRpc3RhbmNlQmV0d2VlbiwgcmFuZG9tUG9pbnRJbkNpcmNsZSB9IGZyb20gXCJAL3V0aWxpdGllcy9nZW9cIjtcbmltcG9ydCB7IGMsIGYgfSBmcm9tIFwiQC91dGlsaXRpZXMvbWF0aFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcm9jZXNzU2V0UGF0aFRvTmVhcihiZWhhdmlvck5vZGU6IEJhc2VOb2RlLCB4OiBudW1iZXIsIHk6IG51bWJlciwgbG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgLy8gSWYgd2UncmUgYWxyZWFkeSBuZWFyYnkgdGhlIGxvY2F0aW9uLCB0aGVuIGNsZWFyIGFueSBwYXRoIHdlIGhhdmUgc2V0IGFuZFxuICAvLyBzdWNjZWVkLCBiZWNhdXNlIHdlJ3JlIGRvbmUhXG4gIGlmIChsb2NhbC5pc05lYXIoeCwgeSkpIHtcbiAgICBsb2NhbC5jbGVhclBhdGgoKTtcbiAgICBiZWhhdmlvck5vZGUuc3VjY2VlZCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHRoZSBtdWRtYW4gYWxyZWFkeSBoYXMgYSBwYXRoLi4uXG4gIGNvbnN0IHsgZGVzdGluYXRpb24gfSA9IGxvY2FsO1xuICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAvLyAuLi5hbmQgdGhlIGRlc3RpbmF0aW9uIGlzIG5lYXIgdGhlIGxvY2F0aW9uLCB0aGVuIHdlJ3JlIGdvb2QgKHdlJ3JlXG4gICAgLy8gYWxyZWFkeSBvbiBvdXIgd2F5IHRvIGEgc3BvdCBuZWFyIHRoZSBsb2NhdGlvbikuXG4gICAgaWYgKGRpc3RhbmNlQmV0d2VlbihkZXN0aW5hdGlvbi54LCBkZXN0aW5hdGlvbi55LCB4LCB5KSA8PSBsb2NhbC5uZWFyYnlUaHJlc2hvbGQpIHtcbiAgICAgIGJlaGF2aW9yTm9kZS5zdWNjZWVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGxvY2F0aW9uIGlzIG91dCBvZiBzaWdodCBhbmQgd2Ugc3RpbGwgaGF2ZSBhIGRlc3RpbmF0aW9uLCB0aGVuIHdlXG4gICAgLy8gc2hvdWxkIHByb2JhYmx5IGp1c3QgZm9sbG93IHRoYXQgcGF0aC4gSXQncyBsaWtlbHkgZnJvbSBhIHByZXZpb3VzXG4gICAgLy8gaXRlcmF0aW9uIHdoZXJlIHdlIGhhZCB0byBkbyBhIHJhbmRvbSB3YWxrLiBBbmQgaWYgbm90LCB0aGVuIGl0J3NcbiAgICAvLyBiZXR0ZXIgdGhhbiBoYXZpbmcgdG8gZG8gYSByYW5kb20gd2FsaywgYW55d2F5LlxuICAgIGlmICghbG9jYWwuaXNXaXRoaW5FeWVzaWdodCh4LCB5KSkge1xuICAgICAgYmVoYXZpb3JOb2RlLnN1Y2NlZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBpdCBfaXNfIHdpdGhpbiBleWVzaWdodCwgdGhvdWdoLCB3ZSBzaG91bGQgZ2V0IHJpZCBvZiBvdXIgY3VycmVudFxuICAgIC8vIHBhdGggYW5kIGRlc3RpbmF0aW9uLCBhbmQgaW5zdGVhZCBmb3JnZSBhIG5ldyBwYXRoIHRvd2FyZCB0aGUgbG9jYXRpb24uXG4gICAgbG9jYWwuY2xlYXJQYXRoKCk7XG4gIH1cblxuICAvLyBGaW5kIHRhcmdldCBjb29yZHMgdGhhdCBhcmUgX2FhYWFhbG1vc3RfIGF0IHRoZSBsb2NhdGlvbi5cbiAgY29uc3QgZHggPSB4IC0gbG9jYWwueDtcbiAgY29uc3QgZHkgPSB5IC0gbG9jYWwueTtcbiAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoKGR4ICoqIDIpICsgKGR5ICoqIDIpKTtcbiAgY29uc3QgdGFyZ2V0RGlzdGFuY2UgPSBkaXN0YW5jZSAtIGxvY2FsLm5lYXJieVRocmVzaG9sZDtcbiAgY29uc3QgcmF0aW8gPSB0YXJnZXREaXN0YW5jZSAvIGRpc3RhbmNlO1xuICBsZXQgdGFyZ2V0WCA9IGxvY2FsLnggKyAoZHggPCAwID8gZihyYXRpbyAqIGR4KSA6IGMocmF0aW8gKiBkeCkpO1xuICBsZXQgdGFyZ2V0WSA9IGxvY2FsLnkgKyAoZHkgPCAwID8gZihyYXRpbyAqIGR5KSA6IGMocmF0aW8gKiBkeSkpO1xuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBwaWNrIHRhcmdldCBjb29yZHMgdGhhdCBhcmUgYWN0dWFsbHkgb24gYSB3YWxrYWJsZSBwb2ludC5cbiAgLy8gSWYgdGhlIG9uZXMgd2UgcGlja2VkIF9hcmVuJ3RfIHdhbGthYmxlLCB0aGVuIHdlJ2xsIHBpY2sgcmFuZG9tIHBvaW50c1xuICAvLyBhcm91bmQgdGhlIGxvY2F0aW9uIHVudGlsIHdlIGdldCBvbmUgdGhhdCBfaXNfIHdhbGthYmxlLlxuICBsZXQgdGFyZ2V0VHJpZXMgPSAwO1xuICB3aGlsZSAoIXdvcmxkLmRhdGEubWFwLndhbGthYmxlQXQodGFyZ2V0WCwgdGFyZ2V0WSkpIHtcbiAgICBpZiAodGFyZ2V0VHJpZXMgPiAyNSkge1xuICAgICAgbG9jYWwuZGF0YS51bnJlYWNoYWJsZS5wdXNoKGNvb3Jkcyh4LCB5KSk7XG4gICAgICBiZWhhdmlvck5vZGUuZmFpbCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRhcmdldFRyaWVzICs9IDE7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmFuZG9tUG9pbnRJbkNpcmNsZSh4LCB5LCBsb2NhbC5kYXRhLm1vdmVTcGVlZCwgbG9jYWwubmVhcmJ5VGhyZXNob2xkKTtcbiAgICB0YXJnZXRYID0gdGFyZ2V0WzBdO1xuICAgIHRhcmdldFkgPSB0YXJnZXRbMV07XG4gIH1cblxuICAvLyBJZiB0aGUgdGFyZ2V0IGlzbid0IHdpdGhpbiBvdXIgZXllc2lnaHQsIHRoZW4sIHdlbGwuLi4gd2UnbGwgaGF2ZSB0b1xuICAvLyB3YW5kZXIgYXJvdW5kIGZvciBhIGJpdCB1bnRpbCB3ZSBmaW5kIG9uZS5cbiAgaWYgKCFsb2NhbC5pc1dpdGhpbkV5ZXNpZ2h0KHRhcmdldFgsIHRhcmdldFkpKSB7XG4gICAgY29uc3QgeyBleWVzaWdodCwgcGF0aCB9ID0gbG9jYWwuZGF0YTtcblxuICAgIC8vIEZpbmQgYSByYW5kb20gcGF0aFxuICAgIGxldCBwYXRoVHJpZXMgPSAwO1xuICAgIHdoaWxlICghbG9jYWwuaGFzUGF0aCAmJiBwYXRoVHJpZXMgPCAyNSkge1xuICAgICAgcGF0aFRyaWVzICs9IDE7XG4gICAgICBjb25zdCBwb2ludCA9IHJhbmRvbVBvaW50SW5DaXJjbGUobG9jYWwueCwgbG9jYWwueSwgZXllc2lnaHQpO1xuICAgICAgd29ybGQuZGF0YS5tYXAucG9wdWxhdGVQYXRoKHBhdGgsIGxvY2FsLngsIGxvY2FsLnksIHBvaW50WzBdLCBwb2ludFsxXSwgZXllc2lnaHQpO1xuICAgIH1cblxuICAgIC8vIEZvdW5kIGEgcmFuZG9tIHBhdGhcbiAgICBpZiAobG9jYWwuaGFzUGF0aCkge1xuICAgICAgYmVoYXZpb3JOb2RlLnN1Y2NlZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDb3VsZG4ndCBmaW5kIGEgd2Fsa2FibGUgcmFuZG9tIHBhdGguLi4gdGhhdCdzIHdlaXJkLCBidXQgb2ggd2VsbC5cbiAgICAvLyBXZSdsbCBqdXN0IGdpdmUgdXAuXG4gICAgYmVoYXZpb3JOb2RlLmZhaWwoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBPa2F5LCB3ZSBub3cga25vdyB0aGUgZm9sbG93aW5nOlxuICAvL1xuICAvLyAgIDEuIFdlIGFyZSBOT1QgWUVUIG5lYXIgdGhlIGxvY2F0aW9uXG4gIC8vICAgMi4gV2UgRE8gTk9UIFlFVCBoYXZlIGEgcGF0aCB0byBhIHRhcmdldCBuZWFyIHRoZSBsb2NhdGlvblxuICAvLyAgIDMuIFdlIERPIGhhdmUgdGFyZ2V0IGNvb3JkaW5hdGVzXG4gIC8vICAgNC4gVGhlIHRhcmdldCBJUyB3aXRoaW4gb3VyIGV5ZXNpZ2h0XG4gIC8vXG4gIC8vIFNvLCB3ZSB3YW50IHRvIHRyeSB0byBnZXQgYSBwYXRoIHRvIG91ciB0YXJnZXQuXG4gIC8vXG4gIHdvcmxkLmRhdGEubWFwLnBvcHVsYXRlUGF0aChcbiAgICBsb2NhbC5kYXRhLnBhdGgsXG4gICAgbG9jYWwueCxcbiAgICBsb2NhbC55LFxuICAgIHRhcmdldFgsXG4gICAgdGFyZ2V0WSxcbiAgICBsb2NhbC5kYXRhLmV5ZXNpZ2h0LFxuICApO1xuXG4gIC8vIElmIHdlIGhhdmUgYSBwYXRoIHRvIHRoZSB0YXJnZXQgYWZ0ZXIgcG9wdWxhdGluZywgdGhlbiB3ZSdyZSBnb29kISBJZlxuICAvLyBub3QsIHdlJ2xsIHdhbnQgdG8gcmVtZW1iZXIgdGhhdCB0aGF0IHRhcmdldCB3YXMgdW5yZWFjaGFibGUgYW5kIGZhaWwgc29cbiAgLy8gd2UgY2FuIHRyeSBhIGRpZmZlcmVudCBvbmUuXG4gIGlmIChsb2NhbC5oYXNQYXRoKSB7XG4gICAgYmVoYXZpb3JOb2RlLnN1Y2NlZWQoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUT0RPOiBUaGUgdW5yZWFjaGFibGUgbGlzdCB3aWxsIGdyb3cgdG8gZXZlbnR1YWxseSBjb250YWluIGFsbCB0aGVcbiAgICAvLyAgICAgICBsb2NhdGlvbiBwb3NpdGlvbnMuIE1lbW9yeSBsZWFrIHBvdGVudGlhbC4gTWF5YmUgYXMgYSBtaXRpZ2F0aW5nXG4gICAgLy8gICAgICAgbWVhc3VyZSB0aGUgbGlzdCBzaG91bGQgYWN0dWFsbHkgcmVmZXJlbmNlIHRoZSBsb2NhdGlvbiAoYXMgYW5cbiAgICAvLyAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYFBvc2l0aW9uYCBpbnRlcmZhY2UpIHNvIHRoYXQgdGhlIGxpc3RcbiAgICAvLyAgICAgICBjYW4gc3RpbGwgZ3JvdyB0byBhIGxhcmdlIHNpemUgYnV0IG5vdCBjcmVhdGUgX25ld18gQ29vcmRzXG4gICAgLy8gICAgICAgKEludDE2QXJyYXkpIG9iamVjdHMgZm9yIGV2ZXJ5IHNldCBvZiAoeCx5KSBwb3NpdGlvbnM/IEluc3RlYWQgaXRcbiAgICAvLyAgICAgICB3b3VsZCBvbmx5IHJlZmVyZW5jZSBleGlzdGluZyBvYmplY3RzLiBKdXN0IGEgdGhvdWdodC5cbiAgICAvL1xuICAgIC8vIGxvY2FsLmRhdGEudW5yZWFjaGFibGUucHVzaChjb29yZHModGFyZ2V0WCwgdGFyZ2V0WSkpO1xuICAgIC8vXG4gICAgLy8gV2UgdXNlIGB4YCBhbmQgYHlgIGhlcmUgKGluc3RlYWQgb2YgYHRhcmdldFhgIGFuZCBgdGFyZ2V0WWApXG4gICAgLy8gc28gdGhhdCBpdCdzIHRoZSBfbG9jYXRpb25fIHRoYXQncyBza2lwcGVkLi4uIG5vdCB0aGUgcHNldWRvLXJhbmRvbVxuICAgIC8vIHRhcmdldCBfbmVhcl8gdGhlIGxvY2F0aW9uIHRoYXQncyBza2lwcGVkLlxuICAgIGxvY2FsLmRhdGEudW5yZWFjaGFibGUucHVzaChjb29yZHMoeCwgeSkpO1xuICAgIGJlaGF2aW9yTm9kZS5mYWlsKCk7XG4gIH1cbn1cbiIsImltcG9ydCBMZWFmTm9kZSBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL0xlYWZOb2RlXCI7XG5pbXBvcnQgTXVkbWFuQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWRtYW5CbGFja2JvYXJkXCI7XG5pbXBvcnQgTXVkd29ybGRCbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZHdvcmxkQmxhY2tib2FyZFwiO1xuaW1wb3J0IHByb2Nlc3NTZXRQYXRoVG9OZWFyIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9wcm9jZXNzZXMvcHJvY2Vzc1NldFBhdGhUb05lYXJcIjtcbmltcG9ydCB7IEl0ZW1UeXBlIH0gZnJvbSBcIkAvbW9kZWxzL0l0ZW1cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2V0UGF0aFRvTmVhckl0ZW0gZXh0ZW5kcyBMZWFmTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHJvY2Vzcyhsb2NhbDogTXVkbWFuQmxhY2tib2FyZCwgd29ybGQ6IE11ZHdvcmxkQmxhY2tib2FyZCk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW0gPSB3b3JsZC5kYXRhLml0ZW1zLmZpbmRDbG9zZXN0KHRoaXMuaXRlbVR5cGUsIGxvY2FsLngsIGxvY2FsLnksIChpdGVtKSA9PiB7XG4gICAgICByZXR1cm4gIWxvY2FsLmlzVW5yZWFjaGFibGUoaXRlbS54LCBpdGVtLnkpO1xuICAgIH0pO1xuXG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICB0aGlzLmZhaWwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvY2Vzc1NldFBhdGhUb05lYXIodGhpcywgaXRlbS54LCBpdGVtLnksIGxvY2FsLCB3b3JsZCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgTGVhZk5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9MZWFmTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXNIeWRyYXRlZCBleHRlbmRzIExlYWZOb2RlIHtcbiAgcHJvY2Vzcyhsb2NhbDogTXVkbWFuQmxhY2tib2FyZCwgd29ybGQ6IE11ZHdvcmxkQmxhY2tib2FyZCk6IHZvaWQge1xuICAgIGlmIChsb2NhbC5kYXRhLmh5ZHJhdGlvbiA+IDApIHtcbiAgICAgIHRoaXMuc3VjY2VlZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZhaWwoKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBMZWFmTm9kZSBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL0xlYWZOb2RlXCI7XG5pbXBvcnQgTXVkbWFuQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWRtYW5CbGFja2JvYXJkXCI7XG5pbXBvcnQgTXVkd29ybGRCbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZHdvcmxkQmxhY2tib2FyZFwiO1xuaW1wb3J0IHsgSXRlbVR5cGUgfSBmcm9tIFwiQC9tb2RlbHMvSXRlbVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQaWNrVXBJdGVtIGV4dGVuZHMgTGVhZk5vZGUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHByb2Nlc3MobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtID0gd29ybGQuZGF0YS5pdGVtcy5maW5kT2ZUeXBlKHRoaXMuaXRlbVR5cGUsIChpdGVtKSA9PiB7XG4gICAgICByZXR1cm4gIWl0ZW0udXNlZCAmJiAhaXRlbS5oZWxkICYmIGl0ZW0ueCA9PT0gbG9jYWwueCAmJiBpdGVtLnkgPT09IGxvY2FsLnk7XG4gICAgfSk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgbG9jYWwucGlja1VwKGl0ZW0pO1xuICAgICAgdGhpcy5zdWNjZWVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmFpbCgpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IEJhc2VOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvQmFzZU5vZGVcIjtcbmltcG9ydCBNdWRtYW5CbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZG1hbkJsYWNrYm9hcmRcIjtcbmltcG9ydCBNdWR3b3JsZEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkd29ybGRCbGFja2JvYXJkXCI7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gXCJAL21vZGVscy9JdGVtXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVzZUl0ZW0gZXh0ZW5kcyBCYXNlTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpdGVtVHlwZTogSXRlbVR5cGUpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHJvY2Vzcyhsb2NhbDogTXVkbWFuQmxhY2tib2FyZCwgd29ybGQ6IE11ZHdvcmxkQmxhY2tib2FyZCk6IHZvaWQge1xuICAgIGNvbnN0IGhlbGRJdGVtID0gbG9jYWwudW51c2VkRnJvbUludmVudG9yeSh0aGlzLml0ZW1UeXBlKTtcblxuICAgIGlmIChoZWxkSXRlbSAmJiAhaGVsZEl0ZW0udXNlZCkge1xuICAgICAgaGVsZEl0ZW0udXNlKGxvY2FsLCB3b3JsZCk7XG4gICAgICB0aGlzLnN1Y2NlZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mYWlsKCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgQWxsIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvY29tcG9zaXRlcy9BbGxcIjtcbmltcG9ydCBBbnkgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9jb21wb3NpdGVzL0FueVwiO1xuaW1wb3J0IERlY29yYXRvck5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9EZWNvcmF0b3JOb2RlXCI7XG5pbXBvcnQgSXNIeWRyYXRlZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL0lzSHlkcmF0ZWRcIjtcbmltcG9ydCBQaWNrVXBJdGVtIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvUGlja1VwSXRlbVwiO1xuaW1wb3J0IFVzZUl0ZW0gZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9Vc2VJdGVtXCI7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gXCJAL21vZGVscy9JdGVtXCI7XG5cbi8vIFN1Y2NlZWRzIGlmOlxuLy9cbi8vICAgLSBtdWRtYW4gaXMgYWxyZWFkeSBoeWRyYXRlZFxuLy8gICAtIG11ZG1hbiBoYXMgd2F0ZXIgb24gaGFuZCBhbmQgdXNlcyBpdCBzdWNjZXNzZnVsbHlcbi8vICAgLSBtdWRtYW4gaXMgY3VycmVudGx5IG9uIHRvcCBvZiBhIHdhdGVyIGl0ZW0gYW5kIHBpY2tzIGl0IHVwIGFuZCB1c2VzIGl0XG4vLyAgICAgc3VjY2Vzc2Z1bGx5XG4vL1xuLy8gT3RoZXJ3aXNlLCBpdCBmYWlscy5cbi8vXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF5SHlkcmF0ZWQgZXh0ZW5kcyBEZWNvcmF0b3JOb2RlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIobmV3IEFueShbXG4gICAgICAvLyBhbHJlYWR5IGh5ZHJhdGVkXG4gICAgICBuZXcgSXNIeWRyYXRlZCgpLFxuICAgICAgLy8gaGFzIHdhdGVyIG9uIGhhbmQgYW5kIGNhbiB1c2UgaXRcbiAgICAgIG5ldyBVc2VJdGVtKEl0ZW1UeXBlLkJPVFRMRSksXG4gICAgICAvLyBjdXJyZW50bHkgYXQgd2F0ZXIgdG8gcGljayB1cCBhbmQgdXNlXG4gICAgICBuZXcgQWxsKFtcbiAgICAgICAgbmV3IFBpY2tVcEl0ZW0oSXRlbVR5cGUuQk9UVExFKSxcbiAgICAgICAgbmV3IFVzZUl0ZW0oSXRlbVR5cGUuQk9UVExFKSxcbiAgICAgIF0pLFxuICAgIF0pKTtcbiAgfVxufVxuIiwiaW1wb3J0IExlYWZOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvTGVhZk5vZGVcIjtcbmltcG9ydCBNdWRtYW5CbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZG1hbkJsYWNrYm9hcmRcIjtcbmltcG9ydCBNdWR3b3JsZEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkd29ybGRCbGFja2JvYXJkXCI7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gXCJAL21vZGVscy9JdGVtXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZhY2VJdGVtIGV4dGVuZHMgTGVhZk5vZGUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHByb2Nlc3MobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICBjb25zdCBjbG9zZXN0SXRlbSA9IHdvcmxkLmRhdGEuaXRlbXMuZmluZENsb3Nlc3QodGhpcy5pdGVtVHlwZSwgbG9jYWwueCwgbG9jYWwueSk7XG4gICAgaWYgKGNsb3Nlc3RJdGVtKSB7XG4gICAgICBsb2NhbC5mYWNlKGNsb3Nlc3RJdGVtLngsIGNsb3Nlc3RJdGVtLnkpO1xuICAgICAgdGhpcy5zdWNjZWVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmFpbCgpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERlY29yYXRvck5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9EZWNvcmF0b3JOb2RlXCI7XG5pbXBvcnQgRmFjZUl0ZW0gZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9GYWNlSXRlbVwiO1xuaW1wb3J0IHsgSXRlbVR5cGUgfSBmcm9tIFwiQC9tb2RlbHMvSXRlbVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGYWNlRmlyZSBleHRlbmRzIERlY29yYXRvck5vZGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihuZXcgRmFjZUl0ZW0oSXRlbVR5cGUuRklSRSkpO1xuICB9XG59XG4iLCJpbXBvcnQgTGVhZk5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9MZWFmTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXNEYXkgZXh0ZW5kcyBMZWFmTm9kZSB7XG4gIHByb2Nlc3MobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICBpZiAod29ybGQuaXNEYXkpIHtcbiAgICAgIHRoaXMuc3VjY2VlZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZhaWwoKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBMZWFmTm9kZSBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL0xlYWZOb2RlXCI7XG5pbXBvcnQgTXVkbWFuQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWRtYW5CbGFja2JvYXJkXCI7XG5pbXBvcnQgTXVkd29ybGRCbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZHdvcmxkQmxhY2tib2FyZFwiO1xuaW1wb3J0IHsgSXRlbVR5cGUgfSBmcm9tIFwiQC9tb2RlbHMvSXRlbVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJc05lYXJJdGVtIGV4dGVuZHMgTGVhZk5vZGUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgaXRlbVR5cGU6IEl0ZW1UeXBlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHByb2Nlc3MobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICBjb25zdCBjbG9zZXN0SXRlbSA9IHdvcmxkLmRhdGEuaXRlbXMuZmluZENsb3Nlc3QodGhpcy5pdGVtVHlwZSwgbG9jYWwueCwgbG9jYWwueSk7XG4gICAgaWYgKGNsb3Nlc3RJdGVtICYmIGxvY2FsLmlzTmVhcihjbG9zZXN0SXRlbS54LCBjbG9zZXN0SXRlbS55KSkge1xuICAgICAgdGhpcy5zdWNjZWVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmFpbCgpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERlY29yYXRvck5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9EZWNvcmF0b3JOb2RlXCI7XG5pbXBvcnQgSXNOZWFySXRlbSBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL0lzTmVhckl0ZW1cIjtcbmltcG9ydCB7IEl0ZW1UeXBlIH0gZnJvbSBcIkAvbW9kZWxzL0l0ZW1cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXNOZWFyRmlyZSBleHRlbmRzIERlY29yYXRvck5vZGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihuZXcgSXNOZWFySXRlbShJdGVtVHlwZS5GSVJFKSk7XG4gIH1cbn1cbiIsImltcG9ydCBBbnkgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9jb21wb3NpdGVzL0FueVwiO1xuaW1wb3J0IExlYWZOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvTGVhZk5vZGVcIjtcbmltcG9ydCBNdWRtYW5CbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZG1hbkJsYWNrYm9hcmRcIjtcbmltcG9ydCBNdWR3b3JsZEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkd29ybGRCbGFja2JvYXJkXCI7XG5pbXBvcnQgSXNEYXkgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9Jc0RheVwiO1xuaW1wb3J0IElzTmVhckZpcmUgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9Jc05lYXJGaXJlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElzV2FybSBleHRlbmRzIExlYWZOb2RlIHtcbiAgcHJvY2Vzcyhsb2NhbDogTXVkbWFuQmxhY2tib2FyZCwgd29ybGQ6IE11ZHdvcmxkQmxhY2tib2FyZCk6IHZvaWQge1xuICAgIGlmIChsb2NhbC5wZXJjZW50V2FybSA+IDAuNSkge1xuICAgICAgdGhpcy5zdWNjZWVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmFpbCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNvbnN0cnVjdG9yKCkge1xuICAvLyAgIHN1cGVyKG5ldyBBbnkoW1xuICAvLyAgICAgbmV3IElzRGF5KCksXG4gIC8vICAgICBuZXcgSXNOZWFyRmlyZSgpLFxuICAvLyAgIF0pKTtcbiAgLy8gfVxufVxuIiwiaW1wb3J0IExlYWZOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvTGVhZk5vZGVcIjtcbmltcG9ydCBNdWRtYW5CbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZG1hbkJsYWNrYm9hcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2l0IGV4dGVuZHMgTGVhZk5vZGUge1xuICBwcm9jZXNzKGxvY2FsOiBNdWRtYW5CbGFja2JvYXJkKTogdm9pZCB7XG4gICAgbG9jYWwuY2xlYXJQYXRoKCk7XG4gICAgbG9jYWwuZGF0YS5zaXR0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnN1Y2NlZWQoKTtcbiAgfVxufVxuIiwiaW1wb3J0IExlYWZOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvTGVhZk5vZGVcIjtcbmltcG9ydCBNdWRtYW5CbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZG1hbkJsYWNrYm9hcmRcIjtcbmltcG9ydCBNdWR3b3JsZEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkd29ybGRCbGFja2JvYXJkXCI7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gXCJAL21vZGVscy9JdGVtXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhhc1BlcnNvbmFsU3BhY2UgZXh0ZW5kcyBMZWFmTm9kZSB7XG4gIHByb2Nlc3MobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICBjb25zdCBjbG9zZXN0TXVkbWFuID0gd29ybGQuZmluZENsb3Nlc3RGZWxsb3dNdWRtYW4obG9jYWwpO1xuICAgIGNvbnN0IGNsb3Nlc3RGaXJlID0gd29ybGQuZGF0YS5pdGVtcy5maW5kQ2xvc2VzdChJdGVtVHlwZS5GSVJFLCBsb2NhbC54LCBsb2NhbC55KTtcblxuICAgIGlmICghY2xvc2VzdE11ZG1hbiAmJiAhY2xvc2VzdEZpcmUpIHtcbiAgICAgIC8vIG5vYm9keSBjbG9zZSBieVxuICAgICAgdGhpcy5zdWNjZWVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKGNsb3Nlc3RNdWRtYW4gJiYgbG9jYWwuaXNDcm93ZGluZyhjbG9zZXN0TXVkbWFuLmxvY2FsLngsIGNsb3Nlc3RNdWRtYW4ubG9jYWwueSkpXG4gICAgICB8fCAoY2xvc2VzdEZpcmUgJiYgbG9jYWwuaXNDcm93ZGluZyhjbG9zZXN0RmlyZS54LCBjbG9zZXN0RmlyZS55KSlcbiAgICApIHtcbiAgICAgIC8vIHRvbyBjbG9zZVxuICAgICAgdGhpcy5mYWlsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdWNjZWVkKCk7XG4gIH1cbn1cbiIsImltcG9ydCBMZWFmTm9kZSBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL0xlYWZOb2RlXCI7XG5pbXBvcnQgTXVkbWFuQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWRtYW5CbGFja2JvYXJkXCI7XG5pbXBvcnQgTXVkd29ybGRCbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZHdvcmxkQmxhY2tib2FyZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJc01vdmluZyBleHRlbmRzIExlYWZOb2RlIHtcbiAgcHJvY2Vzcyhsb2NhbDogTXVkbWFuQmxhY2tib2FyZCwgd29ybGQ6IE11ZHdvcmxkQmxhY2tib2FyZCk6IHZvaWQge1xuICAgIGlmIChsb2NhbC5oYXNQYXRoKSB7XG4gICAgICB0aGlzLnN1Y2NlZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mYWlsKCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgTGVhZk5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9MZWFmTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcbmltcG9ydCBwcm9jZXNzU2V0UGF0aFRvIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9wcm9jZXNzZXMvcHJvY2Vzc1NldFBhdGhUb1wiO1xuaW1wb3J0IHByb2Nlc3NTZXRQYXRoVG9OZWFyIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9wcm9jZXNzZXMvcHJvY2Vzc1NldFBhdGhUb05lYXJcIjtcbmltcG9ydCB7IHJhbmRvbVBvaW50SW5DaXJjbGUgfSBmcm9tIFwiQC91dGlsaXRpZXMvZ2VvXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdhbmRlckNsb3NlQnkgZXh0ZW5kcyBMZWFmTm9kZSB7XG4gIHByb2Nlc3MobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICBjb25zdCBzcG90ID0gcmFuZG9tUG9pbnRJbkNpcmNsZShsb2NhbC54LCBsb2NhbC55LCBsb2NhbC5jcm93ZGluZ1RocmVzaG9sZCwgMiAqIGxvY2FsLmNyb3dkaW5nVGhyZXNob2xkKTtcblxuICAgIGxldCB0cmllcyA9IDA7XG4gICAgd2hpbGUgKCFsb2NhbC5oYXNQYXRoKSB7XG4gICAgICBpZiAodHJpZXMgPiAyNSkge1xuICAgICAgICB0aGlzLmZhaWwoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBwcm9jZXNzU2V0UGF0aFRvKHRoaXMsIHNwb3RbMF0sIHNwb3RbMV0sIGxvY2FsLCB3b3JsZCk7XG4gICAgICB0cmllcyArPSAxO1xuICAgIH1cblxuICAgIHRoaXMuc3VjY2VlZCgpO1xuICB9XG59XG4iLCJpbXBvcnQgQW55IGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvY29tcG9zaXRlcy9BbnlcIjtcbmltcG9ydCBEZWNvcmF0b3JOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvRGVjb3JhdG9yTm9kZVwiO1xuaW1wb3J0IEhhc1BlcnNvbmFsU3BhY2UgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9IYXNQZXJzb25hbFNwYWNlXCI7XG5pbXBvcnQgSXNNb3ZpbmcgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9Jc01vdmluZ1wiO1xuaW1wb3J0IFdhbmRlckNsb3NlQnkgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9XYW5kZXJDbG9zZUJ5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ha2VSb29tRm9yT3RoZXJzIGV4dGVuZHMgRGVjb3JhdG9yTm9kZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKG5ldyBBbnkoW1xuICAgICAgLy8gb25seSBkbyB0aGUgcmVzdCBpZiB0aGUgbXVkbWFuIGlzIHN0YW5kaW5nL3NpdHRpbmcgc3RpbGxcbiAgICAgIG5ldyBJc01vdmluZygpLFxuICAgICAgLy8gYWxyZWFkeSBoYXMgcGVyc29uYWwgc3BhY2VcbiAgICAgIG5ldyBIYXNQZXJzb25hbFNwYWNlKCksXG4gICAgICAvLyBjYW4gbW92ZSBhcm91bmQgdG8gbWFrZSByb29tXG4gICAgICBuZXcgV2FuZGVyQ2xvc2VCeSgpLFxuICAgIF0pKTtcbiAgfVxufVxuIiwiaW1wb3J0IEFsbCBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL2NvbXBvc2l0ZXMvQWxsXCI7XG5pbXBvcnQgQW55IGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvY29tcG9zaXRlcy9BbnlcIjtcbmltcG9ydCBEZWNvcmF0b3JOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvRGVjb3JhdG9yTm9kZVwiO1xuaW1wb3J0IEZhY2VGaXJlIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvRmFjZUZpcmVcIjtcbmltcG9ydCBGYWNlSXRlbSBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL0ZhY2VJdGVtXCI7XG5pbXBvcnQgSXNEYXkgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9Jc0RheVwiO1xuaW1wb3J0IElzTmVhckZpcmUgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9Jc05lYXJGaXJlXCI7XG5pbXBvcnQgSXNXYXJtIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvSXNXYXJtXCI7XG5pbXBvcnQgU2l0IGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvU2l0XCI7XG5pbXBvcnQgTWFrZVJvb21Gb3JPdGhlcnMgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL01ha2VSb29tRm9yT3RoZXJzXCI7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gXCJAL21vZGVscy9JdGVtXCI7XG5cbi8vIFN1Y2NlZWRzIGlmOlxuLy9cbi8vICAgLSBpdCdzIGRheXRpbWVcbi8vICAgLSBtdWRtYW4gaXMgbmVhciBhIGZpcmUgYW5kIHNpdHMgbmV4dCB0byBpdCBzdWNjZXNzZnVsbHlcbi8vXG4vLyBPdGhlcndpc2UsIGl0IGZhaWxzLlxuLy9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXlXYXJtIGV4dGVuZHMgRGVjb3JhdG9yTm9kZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKG5ldyBBbnkoW1xuICAgICAgLy8gd2FybSBlbm91Z2hcbiAgICAgIG5ldyBJc1dhcm0oKSxcbiAgICAgIC8vIGl0J3MgZGF5dGltZVxuICAgICAgbmV3IElzRGF5KCksXG4gICAgICAvLyBzaXR0aW5nIG5lYXIgZmlyZVxuICAgICAgbmV3IEFsbChbXG4gICAgICAgIG5ldyBJc05lYXJGaXJlKCksXG4gICAgICAgIG5ldyBNYWtlUm9vbUZvck90aGVycygpLFxuICAgICAgICBuZXcgRmFjZUZpcmUoKSxcbiAgICAgICAgbmV3IFNpdCgpLFxuICAgICAgXSksXG4gICAgXSkpO1xuICB9XG59XG4iLCJpbXBvcnQgTGVhZk5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9MZWFmTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcbmltcG9ydCBwcm9jZXNzU2V0UGF0aFRvIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9wcm9jZXNzZXMvcHJvY2Vzc1NldFBhdGhUb1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXRQYXRoVG9UYXJnZXRlZEl0ZW0gZXh0ZW5kcyBMZWFmTm9kZSB7XG4gIHByb2Nlc3MobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtID0gbG9jYWwuZGF0YS50YXJnZXRlZEl0ZW07XG5cbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHRoaXMuZmFpbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzU2V0UGF0aFRvKHRoaXMsIGl0ZW0ueCwgaXRlbS55LCBsb2NhbCwgd29ybGQpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9kYXRhL0JsYWNrYm9hcmRcIjtcbmltcG9ydCBCYXNlTm9kZSBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL0Jhc2VOb2RlXCI7XG5pbXBvcnQgRGVjb3JhdG9yTm9kZSBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL0RlY29yYXRvck5vZGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW52ZXJ0PFQgZXh0ZW5kcyBCYXNlTm9kZSA9IEJhc2VOb2RlPiBleHRlbmRzIERlY29yYXRvck5vZGU8VD4ge1xuICBwcm9jZXNzKGxvY2FsOiBCbGFja2JvYXJkLCB3b3JsZDogQmxhY2tib2FyZCk6IHZvaWQge1xuICAgIHRoaXMuY2hpbGQucnVuKGxvY2FsLCB3b3JsZCk7XG4gICAgaWYgKHRoaXMuY2hpbGQuZmFpbGVkKSB0aGlzLnN1Y2NlZWQoKTtcbiAgICBlbHNlIGlmICh0aGlzLmNoaWxkLnN1Y2NlZWRlZCkgdGhpcy5mYWlsKCk7XG4gIH1cbn1cbiIsImltcG9ydCBMZWFmTm9kZSBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL0xlYWZOb2RlXCI7XG5pbXBvcnQgTXVkbWFuQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWRtYW5CbGFja2JvYXJkXCI7XG5pbXBvcnQgTXVkd29ybGRCbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZHdvcmxkQmxhY2tib2FyZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIYXNUYXJnZXRlZEl0ZW0gZXh0ZW5kcyBMZWFmTm9kZSB7XG4gIHByb2Nlc3MobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICBpZiAobG9jYWwuZGF0YS50YXJnZXRlZEl0ZW0pIHtcbiAgICAgIHRoaXMuc3VjY2VlZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZhaWwoKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBMZWFmTm9kZSBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL0xlYWZOb2RlXCI7XG5pbXBvcnQgTXVkbWFuQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWRtYW5CbGFja2JvYXJkXCI7XG5pbXBvcnQgTXVkd29ybGRCbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZHdvcmxkQmxhY2tib2FyZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQaWNrVXBUYXJnZXRlZEl0ZW0gZXh0ZW5kcyBMZWFmTm9kZSB7XG4gIHByb2Nlc3MobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtID0gbG9jYWwuZGF0YS50YXJnZXRlZEl0ZW07XG5cbiAgICBpZiAoaXRlbSAmJiBsb2NhbC5pc0F0KGl0ZW0ueCwgaXRlbS55KSAmJiAhaXRlbS5oZWxkKSB7XG4gICAgICBsb2NhbC5waWNrVXAoaXRlbSk7XG4gICAgICB0aGlzLnN1Y2NlZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mYWlsKCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgTGVhZk5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9MZWFmTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXNlVGFyZ2V0ZWRJdGVtIGV4dGVuZHMgTGVhZk5vZGUge1xuICBwcm9jZXNzKGxvY2FsOiBNdWRtYW5CbGFja2JvYXJkLCB3b3JsZDogTXVkd29ybGRCbGFja2JvYXJkKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbSA9IGxvY2FsLmRhdGEudGFyZ2V0ZWRJdGVtO1xuXG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICB0aGlzLmZhaWwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobG9jYWwuaXNIb2xkaW5nSXRlbShpdGVtKSB8fCAoIWl0ZW0uY29sbGVjdGlibGUgJiYgbG9jYWwuaXNOZWFyKGl0ZW0ueCwgaXRlbS55KSkpIHtcbiAgICAgIGlmICghaXRlbS51c2VkKSBpdGVtLnVzZShsb2NhbCwgd29ybGQpO1xuICAgICAgbG9jYWwuZGF0YS50YXJnZXRlZEl0ZW0gPSBudWxsO1xuICAgICAgdGhpcy5zdWNjZWVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmFpbCgpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IEFsbCBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL2NvbXBvc2l0ZXMvQWxsXCI7XG5pbXBvcnQgQW55IGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvY29tcG9zaXRlcy9BbnlcIjtcbmltcG9ydCBEZWNvcmF0b3JOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvRGVjb3JhdG9yTm9kZVwiO1xuaW1wb3J0IEludmVydCBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL2RlY29yYXRvcnMvSW52ZXJ0XCI7XG5pbXBvcnQgSGFzVGFyZ2V0ZWRJdGVtIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvSGFzVGFyZ2V0ZWRJdGVtXCI7XG5pbXBvcnQgUGlja1VwVGFyZ2V0ZWRJdGVtIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvUGlja1VwVGFyZ2V0ZWRJdGVtXCI7XG5pbXBvcnQgVXNlVGFyZ2V0ZWRJdGVtIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvVXNlVGFyZ2V0ZWRJdGVtXCI7XG5cbi8vIFN1Y2NlZWRzIGlmOlxuLy9cbi8vICAgLSBtdWRtYW4gaGFzIG5vIHRhcmdldGVkIGl0ZW1cbi8vICAgLSBtdWRtYW4gaXMgYWxyZWFkeSBob2xkaW5nIHRoZSB0YXJnZXRlZCBpdGVtIGFuZCB1c2VzIGl0IHN1Y2Nlc3NmdWxseVxuLy8gICAtIG11ZG1hbiBpcyBjdXJyZW50bHkgb24gdG9wIG9mIHRoZSB0YXJnZXRlZCBpdGVtIGFuZCBwaWNrcyBpdCB1cCBhbmQgdXNlc1xuLy8gICAgIGl0IHN1Y2Nlc3NmdWxseVxuLy9cbi8vIE90aGVyd2lzZSwgaXQgZmFpbHMuXG4vL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGFuZGxlVGFyZ2V0ZWRJdGVtIGV4dGVuZHMgRGVjb3JhdG9yTm9kZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKG5ldyBBbnkoW1xuICAgICAgLy8gaGFzIG5vIHRhcmdldGVkIGl0ZW1cbiAgICAgIG5ldyBJbnZlcnQobmV3IEhhc1RhcmdldGVkSXRlbSgpKSxcbiAgICAgIC8vIGhhcyB0YXJnZXRlZCBpdGVtIG9uIGhhbmQgYW5kIGNhbiB1c2UgaXRcbiAgICAgIG5ldyBVc2VUYXJnZXRlZEl0ZW0oKSxcbiAgICAgIC8vIGN1cnJlbnRseSBhdCB0YXJnZXRlZCBpdGVtIHRvIHBpY2sgdXAgYW5kIHVzZVxuICAgICAgbmV3IEFsbChbXG4gICAgICAgIG5ldyBQaWNrVXBUYXJnZXRlZEl0ZW0oKSxcbiAgICAgICAgbmV3IFVzZVRhcmdldGVkSXRlbSgpLFxuICAgICAgXSksXG4gICAgXSkpO1xuICB9XG59XG4iLCJpbXBvcnQgTGVhZk5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9MZWFmTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXNUYWxraW5nIGV4dGVuZHMgTGVhZk5vZGUge1xuICBwcm9jZXNzKGxvY2FsOiBNdWRtYW5CbGFja2JvYXJkLCB3b3JsZDogTXVkd29ybGRCbGFja2JvYXJkKTogdm9pZCB7XG4gICAgaWYgKGxvY2FsLmRhdGEudGFsa2luZ1RvKSB7XG4gICAgICB0aGlzLnN1Y2NlZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mYWlsKCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgTGVhZk5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9MZWFmTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFsa1RvTmVhcmJ5TXVkbWFuIGV4dGVuZHMgTGVhZk5vZGUge1xuICBwcm9jZXNzKGxvY2FsOiBNdWRtYW5CbGFja2JvYXJkLCB3b3JsZDogTXVkd29ybGRCbGFja2JvYXJkKTogdm9pZCB7XG4gICAgY29uc3QgbXVkbWFuID0gd29ybGQuZmluZENsb3Nlc3RGZWxsb3dNdWRtYW4obG9jYWwpO1xuXG4gICAgaWYgKCFtdWRtYW4gfHwgIWxvY2FsLmlzTmVhcihtdWRtYW4ubG9jYWwueCwgbXVkbWFuLmxvY2FsLnkpKSB7XG4gICAgICB0aGlzLmZhaWwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsb2NhbC50YWxrVG8obXVkbWFuKTtcbiAgICB0aGlzLnN1Y2NlZWQoKTtcbiAgfVxufVxuIiwiaW1wb3J0IExlYWZOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvTGVhZk5vZGVcIjtcbmltcG9ydCBNdWRtYW5CbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZG1hbkJsYWNrYm9hcmRcIjtcbmltcG9ydCBNdWR3b3JsZEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkd29ybGRCbGFja2JvYXJkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhcmdldE5lYXJieU11ZG1hbiBleHRlbmRzIExlYWZOb2RlIHtcbiAgcHJvY2Vzcyhsb2NhbDogTXVkbWFuQmxhY2tib2FyZCwgd29ybGQ6IE11ZHdvcmxkQmxhY2tib2FyZCk6IHZvaWQge1xuICAgIGNvbnN0IG11ZG1hbiA9IHdvcmxkLmZpbmRDbG9zZXN0RmVsbG93TXVkbWFuKGxvY2FsKTtcblxuICAgIGlmICghbXVkbWFuKSB7XG4gICAgICB0aGlzLmZhaWwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobG9jYWwuaXNOZWFyKG11ZG1hbi5sb2NhbC54LCBtdWRtYW4ubG9jYWwueSkpIHtcbiAgICAgIHRoaXMuc3VjY2VlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvY2FsLmRhdGEubW92aW5nVGFyZ2V0ID0gbXVkbWFuLmxvY2FsO1xuICAgIHRoaXMuc3VjY2VlZCgpO1xuICB9XG59XG4iLCJpbXBvcnQgQW55IGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvY29tcG9zaXRlcy9BbnlcIjtcbmltcG9ydCBEZWNvcmF0b3JOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvRGVjb3JhdG9yTm9kZVwiO1xuaW1wb3J0IElzVGFsa2luZyBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL0lzVGFsa2luZ1wiO1xuaW1wb3J0IFRhbGtUb05lYXJieU11ZG1hbiBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL1RhbGtUb05lYXJieU11ZG1hblwiO1xuaW1wb3J0IFRhcmdldE5lYXJieU11ZG1hbiBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL1RhcmdldE5lYXJieU11ZG1hblwiO1xuXG4vLyBTdWNjZWVkcyBpZjpcbi8vXG4vLyAgIC0gbXVkbWFuIGlzIGFscmVhZHkgaHlkcmF0ZWRcbi8vICAgLSBtdWRtYW4gaGFzIHdhdGVyIG9uIGhhbmQgYW5kIHVzZXMgaXQgc3VjY2Vzc2Z1bGx5XG4vLyAgIC0gbXVkbWFuIGlzIGN1cnJlbnRseSBvbiB0b3Agb2YgYSB3YXRlciBpdGVtIGFuZCBwaWNrcyBpdCB1cCBhbmQgdXNlcyBpdFxuLy8gICAgIHN1Y2Nlc3NmdWxseVxuLy9cbi8vIE90aGVyd2lzZSwgaXQgZmFpbHMuXG4vL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGFuZ091dCBleHRlbmRzIERlY29yYXRvck5vZGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihuZXcgQW55KFtcbiAgICAgIC8vIGFscmVhZHkgdGFsa2luZ1xuICAgICAgbmV3IElzVGFsa2luZygpLFxuICAgICAgLy8gaXMgbmV4dCB0byBzb21lb25lIHRvIHRhbGsgdG8gYW5kIGRvZXMgc28gc3VjY2Vzc2Z1bGx5XG4gICAgICBuZXcgVGFsa1RvTmVhcmJ5TXVkbWFuKCksXG4gICAgICAvLyBmaW5kcyBzb21lb25lIHRvIHRhbGsgdG8gYW5kIHNldHMgaGlzIHNpZ2h0cyBvbiB0aGUgZ3V5XG4gICAgICBuZXcgVGFyZ2V0TmVhcmJ5TXVkbWFuKCksXG4gICAgXSkpO1xuICB9XG59XG4iLCJpbXBvcnQgQ29tcG9zaXRlTm9kZSBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL0NvbXBvc2l0ZU5vZGVcIjtcbmltcG9ydCBCYXNlTm9kZSBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL0Jhc2VOb2RlXCI7XG5pbXBvcnQgQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL2RhdGEvQmxhY2tib2FyZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFYWNoPFQgZXh0ZW5kcyBCYXNlTm9kZT4gZXh0ZW5kcyBDb21wb3NpdGVOb2RlPFQ+IHtcbiAgLy8gVGhpcyBub2RlIHN1Y2NlZWRzIGFuZCBzdG9wcyBvbmNlIGFsbCBjaGlsZHJlbiBlaXRoZXIgc3VjY2VlZCBvciBmYWlsLlxuICAvL1xuICAvLyBUaGlzIG5vZGUgbmV2ZXIgZmFpbHMuXG4gIC8vXG4gIC8vIFRoaXMgbm9kZSBzdG9wcyBhbmQgd2FpdHMgaWYgYSBjaGlsZCBjb250aW51ZXMgcnVubmluZy5cbiAgLy9cbiAgcHJvY2Vzcyhsb2NhbDogQmxhY2tib2FyZCwgd29ybGQ6IEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICB0aGlzLnNodWZmbGVJZk5lY2Vzc2FyeSgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IHRoaXMuY2hpbGRyZW5baV07XG4gICAgICBjaGlsZC5ydW4obG9jYWwsIHdvcmxkKTtcblxuICAgICAgaWYgKGNoaWxkLnJ1bm5pbmcpIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN1Y2NlZWQoKTtcbiAgfVxufVxuIiwiaW1wb3J0IExlYWZOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvTGVhZk5vZGVcIjtcbmltcG9ydCBNdWRtYW5CbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZG1hbkJsYWNrYm9hcmRcIjtcbmltcG9ydCBNdWR3b3JsZEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkd29ybGRCbGFja2JvYXJkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlaHlkcmF0ZSBleHRlbmRzIExlYWZOb2RlIHtcbiAgY29uc3RydWN0b3IocHVibGljIGFtb3VudDogbnVtYmVyKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHByb2Nlc3MobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICBsb2NhbC5kZWh5ZHJhdGUodGhpcy5hbW91bnQpO1xuICAgIHRoaXMuc3VjY2VlZCgpO1xuICB9XG59XG4iLCJpbXBvcnQgTGVhZk5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9MZWFmTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9hc3QgZXh0ZW5kcyBMZWFmTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBhbW91bnQ6IG51bWJlcikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwcm9jZXNzKGxvY2FsOiBNdWRtYW5CbGFja2JvYXJkLCB3b3JsZDogTXVkd29ybGRCbGFja2JvYXJkKTogdm9pZCB7XG4gICAgbG9jYWwudG9hc3QodGhpcy5hbW91bnQpO1xuICAgIHRoaXMuc3VjY2VlZCgpO1xuICB9XG59XG4iLCJpbXBvcnQgTGVhZk5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9MZWFmTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXNOaWdodCBleHRlbmRzIExlYWZOb2RlIHtcbiAgcHJvY2Vzcyhsb2NhbDogTXVkbWFuQmxhY2tib2FyZCwgd29ybGQ6IE11ZHdvcmxkQmxhY2tib2FyZCk6IHZvaWQge1xuICAgIGlmICh3b3JsZC5pc05pZ2h0KSB7XG4gICAgICB0aGlzLnN1Y2NlZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mYWlsKCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgTGVhZk5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9MZWFmTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hpbGwgZXh0ZW5kcyBMZWFmTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBhbW91bnQ6IG51bWJlcikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwcm9jZXNzKGxvY2FsOiBNdWRtYW5CbGFja2JvYXJkLCB3b3JsZDogTXVkd29ybGRCbGFja2JvYXJkKTogdm9pZCB7XG4gICAgbG9jYWwuY2hpbGwodGhpcy5hbW91bnQpO1xuICAgIHRoaXMuc3VjY2VlZCgpO1xuICB9XG59XG4iLCJpbXBvcnQgTGVhZk5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9MZWFmTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXNUYWxraW5nVG9GYXJPZmZNdWRtYW4gZXh0ZW5kcyBMZWFmTm9kZSB7XG4gIHByb2Nlc3MobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICBjb25zdCB7IHRhbGtpbmdUbyB9ID0gbG9jYWwuZGF0YTtcbiAgICBpZiAodGFsa2luZ1RvICYmICFsb2NhbC5pc05lYXIodGFsa2luZ1RvLmxvY2FsLngsIHRhbGtpbmdUby5sb2NhbC55KSkge1xuICAgICAgdGhpcy5zdWNjZWVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmFpbCgpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IExlYWZOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvTGVhZk5vZGVcIjtcbmltcG9ydCBNdWRtYW5CbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZG1hbkJsYWNrYm9hcmRcIjtcbmltcG9ydCBNdWR3b3JsZEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkd29ybGRCbGFja2JvYXJkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0b3BUYWxraW5nIGV4dGVuZHMgTGVhZk5vZGUge1xuICBwcm9jZXNzKGxvY2FsOiBNdWRtYW5CbGFja2JvYXJkLCB3b3JsZDogTXVkd29ybGRCbGFja2JvYXJkKTogdm9pZCB7XG4gICAgbG9jYWwuZGF0YS50YWxraW5nVG8gPSBudWxsO1xuICB9XG59XG4iLCJpbXBvcnQgTGVhZk5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9MZWFmTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcbmltcG9ydCBwcm9jZXNzU2V0UGF0aFRvTmVhciBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvcHJvY2Vzc2VzL3Byb2Nlc3NTZXRQYXRoVG9OZWFyXCI7XG5pbXBvcnQgeyBkaXN0YW5jZUJldHdlZW4gfSBmcm9tIFwiQC91dGlsaXRpZXMvZ2VvXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENoYXNlTW92aW5nVGFyZ2V0IGV4dGVuZHMgTGVhZk5vZGUge1xuICBwcm9jZXNzKGxvY2FsOiBNdWRtYW5CbGFja2JvYXJkLCB3b3JsZDogTXVkd29ybGRCbGFja2JvYXJkKTogdm9pZCB7XG4gICAgY29uc3QgeyBtb3ZpbmdUYXJnZXQgfSA9IGxvY2FsLmRhdGE7XG5cbiAgICBpZiAoIW1vdmluZ1RhcmdldCkge1xuICAgICAgdGhpcy5zdWNjZWVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFsb2NhbC5pc1dpdGhpbkV5ZXNpZ2h0KG1vdmluZ1RhcmdldC54LCBtb3ZpbmdUYXJnZXQueSkpIHtcbiAgICAgIC8vIGxvc3QgJ2VtLi4uIG9oIHdlbGwuXG4gICAgICBsb2NhbC5kYXRhLm1vdmluZ1RhcmdldCA9IG51bGw7XG4gICAgICB0aGlzLnN1Y2NlZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobG9jYWwuaXNOZWFyKG1vdmluZ1RhcmdldC54LCBtb3ZpbmdUYXJnZXQueSkpIHtcbiAgICAgIC8vIGhleSwgd2UgY2F1Z2h0IHVwIVxuICAgICAgbG9jYWwuZGF0YS5tb3ZpbmdUYXJnZXQgPSBudWxsO1xuICAgICAgdGhpcy5zdWNjZWVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBkZXN0aW5hdGlvbiB9ID0gbG9jYWw7XG4gICAgY29uc3Qgb25UYXJnZXQgPSBkZXN0aW5hdGlvbiAmJiBkaXN0YW5jZUJldHdlZW4oZGVzdGluYXRpb24ueCwgZGVzdGluYXRpb24ueSwgbW92aW5nVGFyZ2V0LngsIG1vdmluZ1RhcmdldC55KSA8IGxvY2FsLm5lYXJieVRocmVzaG9sZDtcbiAgICBpZiAob25UYXJnZXQpIHtcbiAgICAgIC8vIGFscmVhZHkgaGVhZGVkIHRoYXQgd2F5XG4gICAgICB0aGlzLnN1Y2NlZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBlaXRoZXIgd2UncmUgbm90IGhlYWRlZCB0aGF0IHdheSB5ZXQsIG9yIHRoZXkndmUgbW92ZWQgYW5kIG91clxuICAgIC8vIGRlc3RpbmF0aW9uIGlzIG91dGRhdGVkLi4uIGVpdGhlciB3YXksIGxldCdzIGZvcmdldCB3aGVyZXZlciB3ZSB3ZXJlXG4gICAgLy8gZ29pbmcgYW5kIGZpbmQgYSBuZXcgcGF0aCB0byB0aGUgdGFyZ2V0XG4gICAgbG9jYWwuY2xlYXJQYXRoKCk7XG4gICAgcHJvY2Vzc1NldFBhdGhUb05lYXIoXG4gICAgICB0aGlzLFxuICAgICAgbW92aW5nVGFyZ2V0LngsXG4gICAgICBtb3ZpbmdUYXJnZXQueSxcbiAgICAgIGxvY2FsLFxuICAgICAgd29ybGQsXG4gICAgKTtcblxuICAgIC8vIGlmIChkZXN0aW5hdGlvbikge1xuICAgIC8vICAgaWYgKGRpc3RhbmNlQmV0d2VlbihkZXN0aW5hdGlvbi54LCBkZXN0aW5hdGlvbi55LCBtb3ZpbmdUYXJnZXQueCwgbW92aW5nVGFyZ2V0LnkpIDwgbG9jYWwubmVhcmJ5VGhyZXNob2xkKSB7XG4gICAgLy8gICAgIC8vIHdlJ3JlIGFscmVhZHkgaGVhZGVkIHRoYXQgd2F5XG4gICAgLy8gICAgIHRoaXMuc3VjY2VlZCgpO1xuICAgIC8vICAgfSBlbHNlIHtcbiAgICAvLyAgICAgbG9jYWwuY2xlYXJQYXRoKCk7XG4gICAgLy8gICAgIHByb2Nlc3NTZXRQYXRoVG9OZWFyKFxuICAgIC8vICAgICAgIHRoaXMsXG4gICAgLy8gICAgICAgbW92aW5nVGFyZ2V0LngsXG4gICAgLy8gICAgICAgbW92aW5nVGFyZ2V0LnksXG4gICAgLy8gICAgICAgbG9jYWwsXG4gICAgLy8gICAgICAgd29ybGQsXG4gICAgLy8gICAgICk7XG4gICAgLy8gICB9XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIHByb2Nlc3NTZXRQYXRoVG9OZWFyKFxuICAgIC8vICAgICB0aGlzLFxuICAgIC8vICAgICBtb3ZpbmdUYXJnZXQueCxcbiAgICAvLyAgICAgbW92aW5nVGFyZ2V0LnksXG4gICAgLy8gICAgIGxvY2FsLFxuICAgIC8vICAgICB3b3JsZCxcbiAgICAvLyAgICk7XG4gICAgLy8gfVxuICB9XG59XG4iLCJpbXBvcnQgTGVhZk5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9MZWFmTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xlYXJNb3ZpbmdUYXJnZXQgZXh0ZW5kcyBMZWFmTm9kZSB7XG4gIHByb2Nlc3MobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICBsb2NhbC5kYXRhLm1vdmluZ1RhcmdldCA9IG51bGw7XG4gICAgdGhpcy5zdWNjZWVkKCk7XG4gIH1cbn1cbiIsImltcG9ydCBMZWFmTm9kZSBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL0xlYWZOb2RlXCI7XG5pbXBvcnQgTXVkbWFuQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWRtYW5CbGFja2JvYXJkXCI7XG5pbXBvcnQgTXVkd29ybGRCbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZHdvcmxkQmxhY2tib2FyZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHZXRVcCBleHRlbmRzIExlYWZOb2RlIHtcbiAgcHJvY2Vzcyhsb2NhbDogTXVkbWFuQmxhY2tib2FyZCwgd29ybGQ6IE11ZHdvcmxkQmxhY2tib2FyZCk6IHZvaWQge1xuICAgIGxvY2FsLmRhdGEuc2l0dGluZyA9IGZhbHNlLFxuICAgIHRoaXMuc3VjY2VlZCgpO1xuICB9XG59XG4iLCJpbXBvcnQgTGVhZk5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9MZWFmTm9kZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IE11ZHdvcmxkQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmVlbFNvY2lhbCBleHRlbmRzIExlYWZOb2RlIHtcbiAgY29uc3RydWN0b3IocHVibGljIGFtb3VudDogbnVtYmVyKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHByb2Nlc3MobG9jYWw6IE11ZG1hbkJsYWNrYm9hcmQsIHdvcmxkOiBNdWR3b3JsZEJsYWNrYm9hcmQpOiB2b2lkIHtcbiAgICBsb2NhbC5mZWVsU29jaWFsKHRoaXMuYW1vdW50KTtcbiAgICB0aGlzLnN1Y2NlZWQoKTtcbiAgfVxufVxuIiwiaW1wb3J0IExlYWZOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvTGVhZk5vZGVcIjtcbmltcG9ydCBNdWRtYW5CbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZG1hbkJsYWNrYm9hcmRcIjtcbmltcG9ydCBNdWR3b3JsZEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkd29ybGRCbGFja2JvYXJkXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlZWxMb25lbHkgZXh0ZW5kcyBMZWFmTm9kZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBhbW91bnQ6IG51bWJlcikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwcm9jZXNzKGxvY2FsOiBNdWRtYW5CbGFja2JvYXJkLCB3b3JsZDogTXVkd29ybGRCbGFja2JvYXJkKTogdm9pZCB7XG4gICAgbG9jYWwuZmVlbExvbmVseSh0aGlzLmFtb3VudCk7XG4gICAgdGhpcy5zdWNjZWVkKCk7XG4gIH1cbn1cbiIsImltcG9ydCBMZWFmTm9kZSBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL0xlYWZOb2RlXCI7XG5pbXBvcnQgTXVkbWFuQmxhY2tib2FyZCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWRtYW5CbGFja2JvYXJkXCI7XG5pbXBvcnQgTXVkd29ybGRCbGFja2JvYXJkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9kYXRhL011ZHdvcmxkQmxhY2tib2FyZFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJc0xvbmVseSBleHRlbmRzIExlYWZOb2RlIHtcbiAgcHJvY2Vzcyhsb2NhbDogTXVkbWFuQmxhY2tib2FyZCwgd29ybGQ6IE11ZHdvcmxkQmxhY2tib2FyZCk6IHZvaWQge1xuICAgIGlmIChsb2NhbC5wZXJjZW50U29jaWFsIDwgMC4yNSkge1xuICAgICAgdGhpcy5zdWNjZWVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmFpbCgpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERlY29yYXRvck5vZGUgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9EZWNvcmF0b3JOb2RlXCI7XG5pbXBvcnQgSW52ZXJ0IGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvZGVjb3JhdG9ycy9JbnZlcnRcIjtcbmltcG9ydCBJc0xvbmVseSBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL0lzTG9uZWx5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElzTm90TG9uZWx5IGV4dGVuZHMgRGVjb3JhdG9yTm9kZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKG5ldyBJbnZlcnQobmV3IElzTG9uZWx5KCkpKTtcbiAgfVxufVxuXG4vLyBleHBvcnQgZGVmYXVsdCBjbGFzcyBJc05vdExvbmVseSBleHRlbmRzIExlYWZOb2RlIHtcbi8vICAgcHJvY2Vzcyhsb2NhbDogTXVkbWFuQmxhY2tib2FyZCwgd29ybGQ6IE11ZHdvcmxkQmxhY2tib2FyZCk6IHZvaWQge1xuLy8gICAgIGlmIChsb2NhbC5wZXJjZW50U29jaWFsID49IDAuNSkge1xuLy8gICAgICAgdGhpcy5zdWNjZWVkKCk7XG4vLyAgICAgfSBlbHNlIHtcbi8vICAgICAgIHRoaXMuZmFpbCgpO1xuLy8gICAgIH1cbi8vICAgfVxuLy8gfVxuIiwiaW1wb3J0IEFsbCBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL2NvbXBvc2l0ZXMvQWxsXCI7XG5pbXBvcnQgQW55IGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvY29tcG9zaXRlcy9BbnlcIjtcbmltcG9ydCBEZWNvcmF0b3JOb2RlIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvRGVjb3JhdG9yTm9kZVwiO1xuaW1wb3J0IEZhaWwgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9kZWNvcmF0b3JzL0ZhaWxcIjtcbmltcG9ydCBSZXBlYXQgZnJvbSBcIkAvYmVoYXZpb3IvYmFzZS9ub2Rlcy9kZWNvcmF0b3JzL1JlcGVhdFwiO1xuaW1wb3J0IEZvbGxvd1BhdGggZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9Gb2xsb3dQYXRoXCI7XG5pbXBvcnQgU2V0UGF0aFRvSXRlbSBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL1NldFBhdGhUb0l0ZW1cIjtcbmltcG9ydCBTZXRQYXRoVG9OZWFySXRlbSBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL1NldFBhdGhUb05lYXJJdGVtXCI7XG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gXCJAL21vZGVscy9JdGVtXCI7XG5pbXBvcnQgU3RheUh5ZHJhdGVkIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9TdGF5SHlkcmF0ZWRcIjtcbmltcG9ydCBTdGF5V2FybSBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvU3RheVdhcm1cIjtcbmltcG9ydCBTZXRQYXRoVG9UYXJnZXRlZEl0ZW0gZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9TZXRQYXRoVG9UYXJnZXRlZEl0ZW1cIjtcbmltcG9ydCBIYW5kbGVUYXJnZXRlZEl0ZW0gZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL0hhbmRsZVRhcmdldGVkSXRlbVwiO1xuaW1wb3J0IEhhbmdPdXQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL0hhbmdPdXRcIjtcbmltcG9ydCBTZXRQYXRoVG9OZWFyQ2xvc2VzdE11ZG1hbiBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL1NldFBhdGhUb05lYXJDbG9zZXN0TXVkbWFuXCI7XG5pbXBvcnQgRWFjaCBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL25vZGVzL2NvbXBvc2l0ZXMvRWFjaFwiO1xuaW1wb3J0IERlaHlkcmF0ZSBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL0RlaHlkcmF0ZVwiO1xuaW1wb3J0IElzTmVhckZpcmUgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9Jc05lYXJGaXJlXCI7XG5pbXBvcnQgVG9hc3QgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9Ub2FzdFwiO1xuaW1wb3J0IElzRGF5IGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvSXNEYXlcIjtcbmltcG9ydCBTdWNjZWVkIGZyb20gXCJAL2JlaGF2aW9yL2Jhc2Uvbm9kZXMvZGVjb3JhdG9ycy9TdWNjZWVkXCI7XG5pbXBvcnQgSXNOaWdodCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL0lzTmlnaHRcIjtcbmltcG9ydCBDaGlsbCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL0NoaWxsXCI7XG5pbXBvcnQgSXNUYWxraW5nIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvSXNUYWxraW5nXCI7XG5pbXBvcnQgSXNUYWxraW5nVG9OZWFyYnlNdWRtYW4gZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9Jc1RhbGtpbmdUb05lYXJieU11ZG1hblwiO1xuaW1wb3J0IElzVGFsa2luZ1RvRmFyT2ZmTXVkbWFuIGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvSXNUYWxraW5nVG9GYXJPZmZNdWRtYW5cIjtcbmltcG9ydCBTdG9wVGFsa2luZyBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL1N0b3BUYWxraW5nXCI7XG5pbXBvcnQgQ2hhc2VNb3ZpbmdUYXJnZXQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL2xlYXZlcy9DaGFzZU1vdmluZ1RhcmdldFwiO1xuaW1wb3J0IENsZWFyTW92aW5nVGFyZ2V0IGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvQ2xlYXJNb3ZpbmdUYXJnZXRcIjtcbmltcG9ydCBHZXRVcCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL0dldFVwXCI7XG5pbXBvcnQgTWFrZVJvb21Gb3JPdGhlcnMgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL25vZGVzL01ha2VSb29tRm9yT3RoZXJzXCI7XG5pbXBvcnQgRmVlbFNvY2lhbCBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvbGVhdmVzL0ZlZWxTb2NpYWxcIjtcbmltcG9ydCBGZWVsTG9uZWx5IGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvRmVlbExvbmVseVwiO1xuaW1wb3J0IElzTm90TG9uZWx5IGZyb20gXCJAL2JlaGF2aW9yL211ZG1hbi9ub2Rlcy9sZWF2ZXMvSXNOb3RMb25lbHlcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXVkbWFuQmVoYXZpb3IgZXh0ZW5kcyBEZWNvcmF0b3JOb2RlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIobmV3IFJlcGVhdChuZXcgQWxsKFtcbiAgICAgIG5ldyBSZXBlYXQobmV3IEVhY2goW1xuICAgICAgICBuZXcgRGVoeWRyYXRlKDAuMSksXG4gICAgICAgIG5ldyBBbGwoW1xuICAgICAgICAgIG5ldyBJc0RheSgpLFxuICAgICAgICAgIG5ldyBUb2FzdCgwLjEpLFxuICAgICAgICBdKSxcbiAgICAgICAgbmV3IEFueShbXG4gICAgICAgICAgbmV3IEFsbChbXG4gICAgICAgICAgICBuZXcgSXNOZWFyRmlyZSgpLFxuICAgICAgICAgICAgbmV3IFRvYXN0KDAuNSksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgbmV3IEFsbChbXG4gICAgICAgICAgICBuZXcgSXNOaWdodCgpLFxuICAgICAgICAgICAgbmV3IENoaWxsKDAuNSksXG4gICAgICAgICAgXSksXG4gICAgICAgIF0pLFxuICAgICAgICBuZXcgQWxsKFtcbiAgICAgICAgICBuZXcgSXNUYWxraW5nKCksXG4gICAgICAgICAgbmV3IEFueShbXG4gICAgICAgICAgICBuZXcgQWxsKFtcbiAgICAgICAgICAgICAgbmV3IElzVGFsa2luZ1RvRmFyT2ZmTXVkbWFuKCksXG4gICAgICAgICAgICAgIG5ldyBTdG9wVGFsa2luZygpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAvLyBuZXcgQWxsKFtcbiAgICAgICAgICAgIC8vICAgbmV3IElzVGFsa2luZ1RvTmVhcmJ5TXVkbWFuKCksXG4gICAgICAgICAgICAvLyAgIG5ldyBLZWVwVGFsa2luZygpLFxuICAgICAgICAgICAgLy8gXSksXG4gICAgICAgICAgXSksXG4gICAgICAgIF0pLFxuICAgICAgICBuZXcgQW55KFtcbiAgICAgICAgICBuZXcgQWxsKFtcbiAgICAgICAgICAgIG5ldyBJc1RhbGtpbmcoKSxcbiAgICAgICAgICAgIG5ldyBGZWVsU29jaWFsKDEpLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIG5ldyBGZWVsTG9uZWx5KDAuMSksXG4gICAgICAgIF0pLFxuICAgICAgICBuZXcgQ2hhc2VNb3ZpbmdUYXJnZXQoKSxcbiAgICAgICAgbmV3IE1ha2VSb29tRm9yT3RoZXJzKCksXG4gICAgICBdKSksXG4gICAgICBuZXcgRm9sbG93UGF0aCgpLFxuICAgICAgbmV3IEFueShbXG4gICAgICAgIG5ldyBBbGwoW1xuICAgICAgICAgIG5ldyBBbnkoW1xuICAgICAgICAgICAgbmV3IEhhbmRsZVRhcmdldGVkSXRlbSgpLFxuICAgICAgICAgICAgLy8gc2V0IGEgcGF0aCB0byB0aGUgdGFyZ2V0ZWQgaXRlbSAoZmFpbCBoZXJlIHNvIGl0IHJldHVybnMgdG8gdGhlIGJlZ2lubmluZylcbiAgICAgICAgICAgIG5ldyBGYWlsKG5ldyBTZXRQYXRoVG9UYXJnZXRlZEl0ZW0oKSksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgbmV3IEFueShbXG4gICAgICAgICAgICBuZXcgU3RheUh5ZHJhdGVkKCksXG4gICAgICAgICAgICAvLyBzZXQgYSBwYXRoIHRvIHNvbWUgd2F0ZXIgKGZhaWwgaGVyZSBzbyBpdCByZXR1cm5zIHRvIHRoZSBiZWdpbm5pbmcpXG4gICAgICAgICAgICBuZXcgRmFpbChuZXcgU2V0UGF0aFRvSXRlbShJdGVtVHlwZS5CT1RUTEUpKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBuZXcgQW55KFtcbiAgICAgICAgICAgIG5ldyBTdGF5V2FybSgpLFxuICAgICAgICAgICAgLy8gc2V0IGEgcGF0aCB0byBORUFSIGZpcmUgKGZhaWwgaGVyZSBzbyBpdCByZXR1cm5zIHRvIHRoZSBiZWdpbm5pbmcpXG4gICAgICAgICAgICBuZXcgRmFpbChuZXcgU2V0UGF0aFRvTmVhckl0ZW0oSXRlbVR5cGUuRklSRSkpLFxuICAgICAgICAgIF0pLFxuICAgICAgICBdKSxcbiAgICAgICAgbmV3IEZhaWwobmV3IEVhY2goW1xuICAgICAgICAgIG5ldyBDbGVhck1vdmluZ1RhcmdldCgpLFxuICAgICAgICAgIG5ldyBTdG9wVGFsa2luZygpLFxuICAgICAgICAgIG5ldyBHZXRVcCgpLFxuICAgICAgICAgIG5ldyBGYWlsKCksXG4gICAgICAgIF0pKSxcbiAgICAgIF0pLFxuICAgICAgbmV3IEFueShbXG4gICAgICAgIG5ldyBJc05vdExvbmVseSgpLFxuICAgICAgICBuZXcgSGFuZ091dCgpLFxuICAgICAgXSksXG4gICAgICAvLyBuZXcgQW55KFtcbiAgICAgIC8vICAgbmV3IEhhbmdPdXQoKSxcbiAgICAgIC8vICAgLy8gc2V0IGEgcGF0aCB0byBORUFSIGZpcmUgKGZhaWwgaGVyZSBzbyBpdCByZXR1cm5zIHRvIHRoZSBiZWdpbm5pbmcpXG4gICAgICAvLyAgIG5ldyBGYWlsKG5ldyBTZXRQYXRoVG9OZWFyQ2xvc2VzdE11ZG1hbigpKSxcbiAgICAgIC8vIF0pLFxuICAgIF0pKSk7XG4gIH1cbn1cbiIsImxldCBsYXN0SWQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2xvYmFsU2VxdWVudGlhbElkKCk6IG51bWJlciB7XG4gIGxhc3RJZCArPSAxO1xuICByZXR1cm4gbGFzdElkO1xufVxuIiwiaW1wb3J0IEJlaGF2aW9yVHJlZSBmcm9tIFwiQC9iZWhhdmlvci9iYXNlL0JlaGF2aW9yVHJlZVwiO1xuaW1wb3J0IE11ZG1hbkJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkbWFuQmxhY2tib2FyZFwiO1xuaW1wb3J0IHsgbXVkd29ybGQgfSBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcbmltcG9ydCBNdWRtYW5CZWhhdmlvciBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vbm9kZXMvTXVkbWFuQmVoYXZpb3JcIjtcbmltcG9ydCB7IGdsb2JhbFNlcXVlbnRpYWxJZCB9IGZyb20gXCJAL3V0aWxpdGllcy9pZGVudGlmaWNhdGlvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE11ZG1hbk9wdGlvbnMge1xuICBpZDogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIGdlbmRlcjogbnVtYmVyLFxuICBuYXR1cmU6IHtcbiAgICBzdHJlbmd0aDogbnVtYmVyLFxuICAgIGludGVsbGlnZW5jZTogbnVtYmVyLFxuICAgIHdpc2RvbTogbnVtYmVyLFxuICAgIGRleHRlcml0eTogbnVtYmVyLFxuICAgIGNvbnN0aXR1dGlvbjogbnVtYmVyLFxuICAgIGNoYXJpc21hOiBudW1iZXIsXG4gIH0sXG4gIG51cnR1cmU6IHtcbiAgICBleHBlcmllbmNlOiBudW1iZXIsIC8vIGdlbmVyaWMgbGV2ZWxpbmdcbiAgICBhZ2U6IG51bWJlciwgLy8gbGl2ZWRcbiAgICBtdXNjbGVzOiBudW1iZXIsIC8vIGdyb3duXG4gICAgZWR1Y2F0aW9uOiBudW1iZXIsIC8vIGxlYXJuZWRcbiAgICBlbmR1cmFuY2U6IG51bWJlciwgLy8gY29yZSBwcmFjdGljZVxuICAgIGNvb3JkaW5hdGlvbjogbnVtYmVyLCAvLyBoYW5kLWV5ZSAodHJhaW5lZClcbiAgICBzb2NpYWJpbGl0eTogbnVtYmVyLCAvLyBzb2NpYWwgYXB0aXR1ZGU7IGZyaWVuZGx5LCBwb2xpdGljLCBpbmZsdWVudGlhbCwgZXRjLlxuICAgIGVtcGF0aHk6IG51bWJlciwgLy8gZ29vZCA8PT4gZXZpbFxuICAgIGR1dHk6IG51bWJlciwgLy8gbGF3ZnVsIDw9PiBjaGFvdGljXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXVkbWFuIHtcbiAgcHVibGljIHJlYWRvbmx5IGlkOiBudW1iZXI7XG5cbiAgcHVibGljIGxvY2FsOiBNdWRtYW5CbGFja2JvYXJkO1xuXG4gIHByaXZhdGUgYmVoYXZpb3JUcmVlOiBCZWhhdmlvclRyZWU7XG5cbiAgY29uc3RydWN0b3IoeD86IG51bWJlciwgeT86IG51bWJlciwgZXllc2lnaHQ/OiBudW1iZXIsIHNpemU/OiBudW1iZXIpIHtcbiAgICB0aGlzLmlkID0gZ2xvYmFsU2VxdWVudGlhbElkKCk7XG4gICAgY29uc3QgYmVoYXZpb3IgPSBuZXcgTXVkbWFuQmVoYXZpb3IoKTtcbiAgICBjb25zdCBkYXRhID0gTXVkbWFuQmxhY2tib2FyZC5kZWZhdWx0cztcbiAgICBpZiAoeCB8fCB4ID09PSAwKSBkYXRhLmN1cnJlbnRYID0geDtcbiAgICBpZiAoeSB8fCB5ID09PSAwKSBkYXRhLmN1cnJlbnRZID0geTtcbiAgICBpZiAoZXllc2lnaHQgfHwgZXllc2lnaHQgPT09IDApIGRhdGEuZXllc2lnaHQgPSBleWVzaWdodDtcbiAgICBpZiAoc2l6ZSkgZGF0YS5zaXplID0gc2l6ZTtcbiAgICB0aGlzLmxvY2FsID0gbmV3IE11ZG1hbkJsYWNrYm9hcmQoZGF0YSk7XG4gICAgdGhpcy5iZWhhdmlvclRyZWUgPSBuZXcgQmVoYXZpb3JUcmVlKGJlaGF2aW9yLCB0aGlzLmxvY2FsLCBtdWR3b3JsZCk7XG4gIH1cblxuICB0aWNrKCk6IHZvaWQge1xuICAgIHRoaXMuYmVoYXZpb3JUcmVlLnRpY2soKTtcbiAgICAvLyB0aGlzLmxvY2FsLmRlaHlkcmF0ZSgwLjEpO1xuICAgIC8vIHRoaXMubG9jYWwuZGVoeWRyYXRlKDAuNSk7XG4gICAgLy8gdGhpcy5sb2NhbC5kZWh5ZHJhdGUoMSk7XG4gIH1cbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgRHJhdyB7XG4gIChjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdGltZXN0YW1wOiBET01IaWdoUmVzVGltZVN0YW1wKTogdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVuZGVyZXIge1xuICBwdWJsaWMgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgcHVibGljIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBwdWJsaWMgZnBzOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBsYXN0RnJhbWVBdCA9IDA7XG5cbiAgY29uc3RydWN0b3IoY2FudmFzRWw6IEhUTUxDYW52YXNFbGVtZW50LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgZnBzID0gMjQpIHtcbiAgICB0aGlzLmNhbnZhcyA9IGNhbnZhc0VsO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICBpZiAoIWN0eCkgdGhyb3cgbmV3IEVycm9yKFwiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIG5vdCBzdXBwb3J0ZWRcIik7XG5cbiAgICB0aGlzLnNldENhbnZhc1NpemUod2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5jdHggPSBjdHg7XG4gICAgdGhpcy5mcHMgPSBmcHM7XG4gIH1cblxuICBnZXQgbXNQZXJGcmFtZSgpOiBudW1iZXIge1xuICAgIHJldHVybiAxMDAwIC8gdGhpcy5mcHM7XG4gIH1cblxuICBnZXQgbmV4dEZyYW1lQXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5sYXN0RnJhbWVBdCArIHRoaXMubXNQZXJGcmFtZTtcbiAgfVxuXG4gIHNldENhbnZhc1NpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICB0aGlzLmNhbnZhcy5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICB0aGlzLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICB9XG5cbiAgZHJhd0xvb3AoZHJhdzogKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB0aW1lc3RhbXA6IERPTUhpZ2hSZXNUaW1lU3RhbXApID0+IHZvaWQpOiB2b2lkIHtcbiAgICBjb25zdCBsb29wID0gKHRpbWVzdGFtcDogRE9NSGlnaFJlc1RpbWVTdGFtcCkgPT4ge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGxvb3ApO1xuICAgICAgaWYgKHRpbWVzdGFtcCA8IHRoaXMubmV4dEZyYW1lQXQpIHJldHVybjtcblxuICAgICAgdGhpcy5sYXN0RnJhbWVBdCA9IHRpbWVzdGFtcDtcbiAgICAgIGRyYXcodGhpcy5jdHgsIHRpbWVzdGFtcCk7XG4gICAgfTtcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTtcbiAgfVxuXG4gIGRyYXdPbmNlKGRyYXc6IChjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdGltZXN0YW1wOiBET01IaWdoUmVzVGltZVN0YW1wKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCh0aW1lc3RhbXApID0+IHtcbiAgICAgIGRyYXcodGhpcy5jdHgsIHRpbWVzdGFtcCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBCUk9XTiA9IFwicmdiKDE2NSwgNDIsIDQyKVwiO1xuZXhwb3J0IGNvbnN0IFNBRERMRV9CUk9XTiA9IFwicmdiKDEzOSwgNjksIDE5KVwiO1xuZXhwb3J0IGNvbnN0IERBUktfQlJPV04gPSBcInJnYigxMjAsIDUwLCAwKVwiO1xuZXhwb3J0IGNvbnN0IFNBTkRZX0JST1dOID0gXCJyZ2IoMjQ0LCAxNjQsIDk2KVwiO1xuZXhwb3J0IGNvbnN0IFBFUlVfQlJPV04gPSBcInJnYigyMDUsIDEzMywgNjMpXCI7XG5leHBvcnQgY29uc3QgREFSS19TTEFURV9HUkFZID0gXCJyZ2IoNDcsIDc5LCA3OSlcIjtcbmV4cG9ydCBjb25zdCBCTFVFID0gXCJyZ2IoMCwgMTAwLCAyMDApXCI7XG5leHBvcnQgY29uc3QgQkxBQ0sgPSBcInJnYigwLCAwLCAwKVwiO1xuZXhwb3J0IGNvbnN0IFBBTEVfVklPTEVUX1JFRCA9IFwicmdiKDIxOSwgMTEyLCAxNDcpXCI7XG5leHBvcnQgY29uc3QgUkVEID0gXCJyZ2IoMjAwLCA1MCwgMClcIjtcbmV4cG9ydCBjb25zdCBHUkVFTiA9IFwicmdiKDAsIDEyOCwgMClcIjtcbmV4cG9ydCBjb25zdCBEQVJLX0dSRUVOID0gXCJyZ2IoMCwgMTAwLCAwKVwiO1xuZXhwb3J0IGNvbnN0IEZPUkVTVF9HUkVFTiA9IFwicmdiKDM0LCAxMzksIDM0KVwiO1xuZXhwb3J0IGNvbnN0IEdPTEQgPSBcInJnYigyNTUsIDIxNSwgMClcIjtcbmV4cG9ydCBjb25zdCBXSElURSA9IFwicmdiKDI1NSwgMjU1LCAyNTUpXCI7XG5leHBvcnQgY29uc3QgR1JBWV9MSUdIVCA9IFwicmdiKDIyNSwgMjI1LCAyMjUpXCI7XG5leHBvcnQgY29uc3QgR1JBWV9NRURJVU1fTElHSFQgPSBcInJnYigxODAsIDE4MCwgMTgwKVwiO1xuZXhwb3J0IGNvbnN0IEdSQVlfTUVESVVNID0gXCJyZ2IoMTUwLCAxNTAsIDE1MClcIjtcbmV4cG9ydCBjb25zdCBHUkFZX01FRElVTV9EQVJLID0gXCJyZ2IoMTIwLCAxMjAsIDEyMClcIjtcbmV4cG9ydCBjb25zdCBHUkFZX0RBUksgPSBcInJnYig5MCwgOTAsIDkwKVwiO1xuZXhwb3J0IGNvbnN0IEdSQVlfQ0hBUkNPQUwgPSBcInJnYig1MCwgNTAsIDUwKVwiO1xuZXhwb3J0IGNvbnN0IFRSQU5TUEFSRU5UID0gXCJ0cmFuc3BhcmVudFwiO1xuLy8gZXhwb3J0IGNvbnN0IEVJR0hUSF9PUEFDSVRZX0JMQUNLID0gXCJyZ2JhKDAsIDAsIDAsIDAuMTI1KVwiO1xuLy8gZXhwb3J0IGNvbnN0IFFVQVJURVJfT1BBQ0lUWV9CTEFDSyA9IFwicmdiYSgwLCAwLCAwLCAwLjI1KVwiO1xuLy8gZXhwb3J0IGNvbnN0IEhBTEZfT1BBQ0lUWV9CTEFDSyA9IFwicmdiYSgwLCAwLCAwLCAwLjUpXCI7XG4vLyBleHBvcnQgY29uc3QgVEhSRUVfUVVBUlRFUlNfT1BBQ0lUWV9CTEFDSyA9IFwicmdiYSgwLCAwLCAwLCAwLjc1KVwiO1xuZXhwb3J0IGNvbnN0IFNIQURPV19FSUdIVEggPSBcInJnYmEoMCwgMCwgMCwgMC4xMjUpXCI7XG5leHBvcnQgY29uc3QgU0hBRE9XX1FVQVJURVIgPSBcInJnYmEoMCwgMCwgMCwgMC4yNSlcIjtcbmV4cG9ydCBjb25zdCBTSEFET1dfSEFMRiA9IFwicmdiYSgwLCAwLCAwLCAwLjUpXCI7XG5leHBvcnQgY29uc3QgU0hBRE9XX1RIUkVFX1FVQVJURVJTID0gXCJyZ2JhKDAsIDAsIDAsIDAuNzUpXCI7XG5leHBvcnQgY29uc3QgTElHSFRfRUlHSFRIID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTI1KVwiO1xuZXhwb3J0IGNvbnN0IExJR0hUX1FVQVJURVIgPSBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSlcIjtcbmV4cG9ydCBjb25zdCBMSUdIVF9IQUxGID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIjtcbmV4cG9ydCBjb25zdCBMSUdIVF9USFJFRV9RVUFSVEVSUyA9IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KVwiO1xuIiwiaW1wb3J0IE11ZHdvcmxkTWFwIGZyb20gXCJAL21hcG1ha2luZy9tdWR3b3JsZC9NdWR3b3JsZE1hcFwiO1xuXG4vLyBUT0RPOiBUaGlzIHNob3VsZCBiZSB1c2VkIHRvIHJlbmRlciBfb24gdG9wIG9mXyBleGlzdGluZyB0aWxlcyBmcm9tIHRoZVxuLy8gICAgICAgcmVuZGVyZWQgd29ybGQsIGp1c3QgaW50byB0aGUgdmlld3BvcnQgZHVyaW5nIHRoZSBub3JtYWwgZ2FtZSBsb29wLCBhbmRcbi8vICAgICAgIG9ubHkgYXQgbGFyZ2VyIHRpbGUgc2l6ZXMuIExpa2UsIHNob3VsZCBrZWVwIGV4aXN0aW5nIGJhY2tncm91bmQgY29sb3JzXG4vLyAgICAgICBhbmQganVzdCBkcmF3IG9uIHRvcCBvZiB0aGVtLlxuLy9cbi8vIFRPRE86IFJlbGF0ZWQgdG8gdGhlIGFib3ZlIFRPRE8sIGJ1dCBhbHNvIHRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3Jcbi8vICAgICAgIG1vcmUgdGhhbiBqdXN0IFwic2hvcmVsaW5lXCIgb24gdGhlIHdhdGVyLi4uIGl0IHNob3VsZCBiZSBhbiBhcHBsaWNhYmxlXG4vLyAgICAgICBkZXNjcmlwdGlvbiBvZiBhbnkgdGlsZSB0aGF0J3MgbG93ZXIgaW4gZWxldmF0aW9uIHRoYW4gaXRzIG5laWdoYm9yc1xuLy8gICAgICAgYW5kIG5lZWRzIHRvIGRlc2NyaWJlIHRoZSBcImxlZGdlc1wiIGFyb3VuZCBpdHNlbGYuXG5cbmV4cG9ydCBjb25zdCBlbnVtIFNob3JlbGluZSB7XG4gIE5PTkUgPSAwYjAwMDAwMDAwLFxuICBUT1BfTEVGVCA9IDBiMTAwMDAwMDAsXG4gIFRPUCA9IDBiMDEwMDAwMDAsXG4gIFRPUF9SSUdIVCA9IDBiMDAxMDAwMDAsXG4gIFJJR0hUID0gMGIwMDAxMDAwMCxcbiAgQk9UVE9NX1JJR0hUID0gMGIwMDAwMTAwMCxcbiAgQk9UVE9NID0gMGIwMDAwMDEwMCxcbiAgQk9UVE9NX0xFRlQgPSAwYjAwMDAwMDEwLFxuICBMRUZUID0gMGIwMDAwMDAwMSxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3JlbGluZUhhc0xhbmQodmFsdWU6IG51bWJlciwgc2hvcmVsaW5lOiBTaG9yZWxpbmUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNob3JlbGluZSA9PT0gU2hvcmVsaW5lLk5PTkVcbiAgICA/IHZhbHVlID09PSBTaG9yZWxpbmUuTk9ORVxuICAgIDogKHZhbHVlICYgc2hvcmVsaW5lKSA9PT0gc2hvcmVsaW5lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvcmVsaW5lQXQoeDogbnVtYmVyLCB5OiBudW1iZXIsIG1hcDogTXVkd29ybGRNYXAsIHRpbGVTaXplOiBudW1iZXIpOiBudW1iZXIge1xuICAvLyB4ID0gTWF0aC5mbG9vcih4KTtcbiAgLy8geSA9IE1hdGguZmxvb3IoeSk7XG5cbiAgbGV0IHNob3JlbGluZSA9IFNob3JlbGluZS5OT05FO1xuICBsZXQgbnk6IG51bWJlcjtcbiAgbGV0IG54OiBudW1iZXI7XG4gIC8vIGNvbnN0IGxlZnRFZGdlID0geCA9PT0gMDtcbiAgLy8gY29uc3QgdG9wRWRnZSA9IHkgPT09IDA7XG5cbiAgLy8gPT09IFRPUCBST1cgPT09XG4gIG55ID0geSAtIHRpbGVTaXplO1xuXG4gIC8vIHRvcCBsZWZ0XG4gIG54ID0geCAtIHRpbGVTaXplO1xuICBpZiAoIW1hcC51bmRlcndhdGVyQXQobngsIG55KSkgc2hvcmVsaW5lIHw9IFNob3JlbGluZS5UT1BfTEVGVDtcblxuICAvLyB0b3BcbiAgbnggPSB4O1xuICBpZiAoIW1hcC51bmRlcndhdGVyQXQobngsIG55KSkgc2hvcmVsaW5lIHw9IFNob3JlbGluZS5UT1A7XG5cbiAgLy8gdG9wIHJpZ2h0XG4gIG54ID0geCArIHRpbGVTaXplO1xuICBpZiAoIW1hcC51bmRlcndhdGVyQXQobngsIG55KSkgc2hvcmVsaW5lIHw9IFNob3JlbGluZS5UT1BfUklHSFQ7XG5cbiAgLy8gPT09IExFRlQgQU5EIFJJR0hUIFNJREVTID09PVxuICBueSA9IHk7XG5cbiAgLy8gbGVmdFxuICBueCA9IHggLSB0aWxlU2l6ZTtcbiAgaWYgKCFtYXAudW5kZXJ3YXRlckF0KG54LCBueSkpIHNob3JlbGluZSB8PSBTaG9yZWxpbmUuTEVGVDtcblxuICAvLyByaWdodFxuICBueCA9IHggKyB0aWxlU2l6ZTtcbiAgaWYgKCFtYXAudW5kZXJ3YXRlckF0KG54LCBueSkpIHNob3JlbGluZSB8PSBTaG9yZWxpbmUuUklHSFQ7XG5cbiAgLy8gPT09IEJPVFRPTSBST1cgPT09XG4gIG55ID0geSArIHRpbGVTaXplO1xuXG4gIC8vIGJvdHRvbSBsZWZ0XG4gIG54ID0geCAtIHRpbGVTaXplO1xuICBpZiAoIW1hcC51bmRlcndhdGVyQXQobngsIG55KSkgc2hvcmVsaW5lIHw9IFNob3JlbGluZS5CT1RUT01fTEVGVDtcblxuICAvLyBib3R0b21cbiAgbnggPSB4O1xuICBpZiAoIW1hcC51bmRlcndhdGVyQXQobngsIG55KSkgc2hvcmVsaW5lIHw9IFNob3JlbGluZS5CT1RUT007XG5cbiAgLy8gYm90dG9tIHJpZ2h0XG4gIG54ID0geCArIHRpbGVTaXplO1xuICBpZiAoIW1hcC51bmRlcndhdGVyQXQobngsIG55KSkgc2hvcmVsaW5lIHw9IFNob3JlbGluZS5CT1RUT01fUklHSFQ7XG5cbiAgcmV0dXJuIHNob3JlbGluZTtcbn1cbiIsImltcG9ydCBSZW5kZXJlciBmcm9tIFwiQC9yZW5kZXJpbmcvYmFzZS9SZW5kZXJlclwiO1xuaW1wb3J0IHsgZiB9IGZyb20gXCJAL3V0aWxpdGllcy9tYXRoXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJhd1Nwcml0ZSB7XG4gIChcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIGNlbnRlclg6IG51bWJlcixcbiAgICBjZW50ZXJZOiBudW1iZXIsXG4gICAgdG9wWTogbnVtYmVyLFxuICAgIHJpZ2h0WDogbnVtYmVyLFxuICAgIGJvdHRvbVk6IG51bWJlcixcbiAgICBsZWZ0WDogbnVtYmVyLFxuICApOiB2b2lkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcHJpdGVSZW5kZXJlciB7XG4gIHByaXZhdGUgc3ByaXRlUmVuZGVyZXJzOiBSZW5kZXJlcltdID0gW107XG5cbiAgY29uc3RydWN0b3IocHVibGljIGRlZmF1bHRTcHJpdGVXaWR0aDogbnVtYmVyLCBwdWJsaWMgZGVmYXVsdFNwcml0ZUhlaWdodDogbnVtYmVyLCBwcml2YXRlIGZwcyA9IDI0KSB7XG4gICAgdGhpcy5kZWZhdWx0U3ByaXRlV2lkdGggPSBmKGRlZmF1bHRTcHJpdGVXaWR0aCk7XG4gICAgdGhpcy5kZWZhdWx0U3ByaXRlSGVpZ2h0ID0gZihkZWZhdWx0U3ByaXRlSGVpZ2h0KTtcbiAgfVxuXG4gIGFkZFNwcml0ZShpZDogbnVtYmVyLCBwYWRkaW5nOiBudW1iZXIsIGRyYXc6IERyYXdTcHJpdGUpOiB2b2lkO1xuICBhZGRTcHJpdGUoaWQ6IG51bWJlciwgcGFkZGluZzogbnVtYmVyLCBzaXplOiBudW1iZXIsIGRyYXc6IERyYXdTcHJpdGUpOiB2b2lkO1xuICBhZGRTcHJpdGUoaWQ6IG51bWJlciwgcGFkZGluZzogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgZHJhdzogRHJhd1Nwcml0ZSk6IHZvaWQ7XG4gIGFkZFNwcml0ZShpZDogbnVtYmVyLCBwYWRkaW5nOiBudW1iZXIsIGRyYXdPcldpZHRoOiBudW1iZXIgfCBEcmF3U3ByaXRlLCBkcmF3T3JIZWlnaHQ/OiBudW1iZXIgfCBEcmF3U3ByaXRlLCBkcmF3U3ByaXRlPzogRHJhd1Nwcml0ZSk6IHZvaWQge1xuICAgIGxldCB3aWR0aDogbnVtYmVyO1xuICAgIGxldCBoZWlnaHQ6IG51bWJlcjtcbiAgICBsZXQgZHJhdzogRHJhd1Nwcml0ZTtcblxuICAgIGlmICh0eXBlb2YgZHJhd09yV2lkdGggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgd2lkdGggPSB0aGlzLmRlZmF1bHRTcHJpdGVXaWR0aDtcbiAgICAgIGhlaWdodCA9IHRoaXMuZGVmYXVsdFNwcml0ZUhlaWdodDtcbiAgICAgIGRyYXcgPSBkcmF3T3JXaWR0aDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkcmF3T3JIZWlnaHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgd2lkdGggPSBmKGRyYXdPcldpZHRoKTtcbiAgICAgIGhlaWdodCA9IHdpZHRoO1xuICAgICAgZHJhdyA9IGRyYXdPckhlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgd2lkdGggPSBmKGRyYXdPcldpZHRoKTtcbiAgICAgIGhlaWdodCA9IGYoZHJhd09ySGVpZ2h0ISk7XG4gICAgICBkcmF3ID0gZHJhd1Nwcml0ZSE7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyZXIgPSBuZXcgUmVuZGVyZXIoXG4gICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLFxuICAgICAgd2lkdGggKyAocGFkZGluZyAqIDIpLFxuICAgICAgaGVpZ2h0ICsgKHBhZGRpbmcgKiAyKSxcbiAgICAgIHRoaXMuZnBzLFxuICAgICk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyc1tpZF0gPSByZW5kZXJlcjtcblxuICAgIHJlbmRlcmVyLmRyYXdPbmNlKChjdHgpID0+IHtcbiAgICAgIGRyYXcoXG4gICAgICAgIGN0eCxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgZih3aWR0aCAvIDIpLFxuICAgICAgICBmKGhlaWdodCAvIDIpLFxuICAgICAgICAwICsgcGFkZGluZyxcbiAgICAgICAgd2lkdGggLSBwYWRkaW5nLFxuICAgICAgICBoZWlnaHQgLSBwYWRkaW5nLFxuICAgICAgICAwICsgcGFkZGluZyxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBtaXJyb3JTcHJpdGUoc291cmNlU3ByaXRlSWQ6IG51bWJlciwgdGFyZ2V0U3ByaXRlSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG9yaWdpbmFsID0gdGhpcy5zcHJpdGVSZW5kZXJlcnNbc291cmNlU3ByaXRlSWRdO1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gb3JpZ2luYWwuY2FudmFzO1xuXG4gICAgY29uc3QgbWlycm9yZWQgPSBuZXcgUmVuZGVyZXIoXG4gICAgICBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBvcmlnaW5hbC5mcHMsXG4gICAgKTtcblxuICAgIHRoaXMuc3ByaXRlUmVuZGVyZXJzW3RhcmdldFNwcml0ZUlkXSA9IG1pcnJvcmVkO1xuXG4gICAgbWlycm9yZWQuZHJhd09uY2UoKGN0eCkgPT4ge1xuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGN0eC5zY2FsZSgtMSwgMSk7XG4gICAgICBjdHguZHJhd0ltYWdlKG9yaWdpbmFsLmNhbnZhcywgMCwgMCwgLTEgKiB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfSk7XG4gIH1cblxuICBkcmF3U3ByaXRlKFxuICAgIHNwcml0ZUlkOiBudW1iZXIsXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgeDogbnVtYmVyLFxuICAgIHk6IG51bWJlcixcbiAgICBzcHJpdGVPZmZzZXRYID0gMCxcbiAgICBzcHJpdGVPZmZzZXRZID0gMCxcbiAgICBzY2FsZSA9IDEsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHNwcml0ZUNhbnZhcyA9IHRoaXMuc3ByaXRlUmVuZGVyZXJzW3Nwcml0ZUlkXS5jYW52YXM7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBzcHJpdGVDYW52YXM7XG4gICAgY29uc3Qgc3ByaXRlTGVmdFggPSBmKHggLSAoMC41ICogd2lkdGgpICsgc3ByaXRlT2Zmc2V0WCk7XG4gICAgY29uc3Qgc3ByaXRlVG9wWSA9IGYoeSAtICgwLjUgKiBoZWlnaHQpICsgc3ByaXRlT2Zmc2V0WSk7XG4gICAgY29uc3QgZmluYWxXaWR0aCA9IGYod2lkdGggKiBzY2FsZSk7XG4gICAgY29uc3QgZmluYWxIZWlnaHQgPSBmKGhlaWdodCAqIHNjYWxlKTtcblxuICAgIGN0eC5kcmF3SW1hZ2UoXG4gICAgICBzcHJpdGVDYW52YXMsXG4gICAgICAwLCAwLFxuICAgICAgd2lkdGgsIGhlaWdodCxcbiAgICAgIHNwcml0ZUxlZnRYLCBzcHJpdGVUb3BZLFxuICAgICAgZmluYWxXaWR0aCwgZmluYWxIZWlnaHQsXG4gICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IE11ZG1hbiBmcm9tIFwiQC9tb2RlbHMvTXVkbWFuXCI7XG5pbXBvcnQgUmVuZGVyZXIgZnJvbSBcIkAvcmVuZGVyaW5nL2Jhc2UvUmVuZGVyZXJcIjtcbmltcG9ydCBTcHJpdGVSZW5kZXJlciwgeyBEcmF3U3ByaXRlIH0gZnJvbSBcIkAvcmVuZGVyaW5nL2Jhc2UvU3ByaXRlUmVuZGVyZXJcIjtcbmltcG9ydCB7IEJMQUNLLCBCUk9XTiwgREFSS19CUk9XTiwgREFSS19TTEFURV9HUkFZLCBHUkFZX0RBUkssIEdSQVlfTUVESVVNLCBSRUQsIFNBRERMRV9CUk9XTiwgU0FORFlfQlJPV04sIFdISVRFIH0gZnJvbSBcIkAvcmVuZGVyaW5nL211ZHN0dWZmL2NvbG9yc1wiO1xuaW1wb3J0IHsgYywgZiB9IGZyb20gXCJAL3V0aWxpdGllcy9tYXRoXCI7XG5cbmV4cG9ydCBjb25zdCBlbnVtIE11ZG1hblNwcml0ZSB7XG4gIC8vIHN0YW5kaW5nXG5cbiAgLy8gZmFjaW5nIHVwL2Rvd25cbiAgU1RBTkRJTkdfRlJPTlQsXG4gIFNUQU5ESU5HX0JBQ0ssXG4gIC8vIGZhY2luZyByaWdodFxuICBTVEFORElOR19SSUdIVF9GUk9OVCxcbiAgU1RBTkRJTkdfUklHSFRfQkFDSyxcbiAgLy8gZmFjaW5nIGxlZnRcbiAgU1RBTkRJTkdfTEVGVF9GUk9OVCxcbiAgU1RBTkRJTkdfTEVGVF9CQUNLLFxuXG4gIC8vIHNpdHRpbmdcblxuICAvLyBmYWNpbmcgdXAvZG93blxuICBTSVRUSU5HX0ZST05ULFxuICBTSVRUSU5HX0JBQ0ssXG4gIC8vIGZhY2luZyByaWdodFxuICBTSVRUSU5HX1JJR0hUX0ZST05ULFxuICBTSVRUSU5HX1JJR0hUX0JBQ0ssXG4gIC8vIGZhY2luZyBsZWZ0XG4gIFNJVFRJTkdfTEVGVF9GUk9OVCxcbiAgU0lUVElOR19MRUZUX0JBQ0ssXG5cbiAgLy8gd2Fsa2luZ1xuXG4gIC8vIGZhY2luZyB1cC9kb3duXG4gIFdBTEtJTkdfMV9GUk9OVCxcbiAgV0FMS0lOR18yX0ZST05ULFxuICBXQUxLSU5HXzNfRlJPTlQsXG4gIFdBTEtJTkdfNF9GUk9OVCxcbiAgV0FMS0lOR18xX0JBQ0ssXG4gIFdBTEtJTkdfMl9CQUNLLFxuICBXQUxLSU5HXzNfQkFDSyxcbiAgV0FMS0lOR180X0JBQ0ssXG4gIC8vIGZhY2luZyByaWdodFxuICBXQUxLSU5HX1JJR0hUXzFfRlJPTlQsXG4gIFdBTEtJTkdfUklHSFRfMl9GUk9OVCxcbiAgV0FMS0lOR19SSUdIVF8zX0ZST05ULFxuICBXQUxLSU5HX1JJR0hUXzRfRlJPTlQsXG4gIFdBTEtJTkdfUklHSFRfMV9CQUNLLFxuICBXQUxLSU5HX1JJR0hUXzJfQkFDSyxcbiAgV0FMS0lOR19SSUdIVF8zX0JBQ0ssXG4gIFdBTEtJTkdfUklHSFRfNF9CQUNLLFxuICAvLyBmYWNpbmcgbGVmdFxuICBXQUxLSU5HX0xFRlRfMV9GUk9OVCxcbiAgV0FMS0lOR19MRUZUXzJfRlJPTlQsXG4gIFdBTEtJTkdfTEVGVF8zX0ZST05ULFxuICBXQUxLSU5HX0xFRlRfNF9GUk9OVCxcbiAgV0FMS0lOR19MRUZUXzFfQkFDSyxcbiAgV0FMS0lOR19MRUZUXzJfQkFDSyxcbiAgV0FMS0lOR19MRUZUXzNfQkFDSyxcbiAgV0FMS0lOR19MRUZUXzRfQkFDSyxcbn1cblxuY29uc3QgV0FMS0lOR19TUFJJVEVTX0ZST05UID0gW1xuICBNdWRtYW5TcHJpdGUuV0FMS0lOR18xX0ZST05ULFxuICBNdWRtYW5TcHJpdGUuV0FMS0lOR18yX0ZST05ULFxuICBNdWRtYW5TcHJpdGUuV0FMS0lOR18zX0ZST05ULFxuICBNdWRtYW5TcHJpdGUuV0FMS0lOR180X0ZST05ULFxuXTtcblxuY29uc3QgV0FMS0lOR19TUFJJVEVTX0JBQ0sgPSBbXG4gIE11ZG1hblNwcml0ZS5XQUxLSU5HXzFfQkFDSyxcbiAgTXVkbWFuU3ByaXRlLldBTEtJTkdfMl9CQUNLLFxuICBNdWRtYW5TcHJpdGUuV0FMS0lOR18zX0JBQ0ssXG4gIE11ZG1hblNwcml0ZS5XQUxLSU5HXzRfQkFDSyxcbl07XG5cbmNvbnN0IFdBTEtJTkdfUklHSFRfU1BSSVRFU19GUk9OVCA9IFtcbiAgTXVkbWFuU3ByaXRlLldBTEtJTkdfUklHSFRfMV9GUk9OVCxcbiAgTXVkbWFuU3ByaXRlLldBTEtJTkdfUklHSFRfMl9GUk9OVCxcbiAgTXVkbWFuU3ByaXRlLldBTEtJTkdfUklHSFRfM19GUk9OVCxcbiAgTXVkbWFuU3ByaXRlLldBTEtJTkdfUklHSFRfNF9GUk9OVCxcbl07XG5cbmNvbnN0IFdBTEtJTkdfUklHSFRfU1BSSVRFU19CQUNLID0gW1xuICBNdWRtYW5TcHJpdGUuV0FMS0lOR19SSUdIVF8xX0JBQ0ssXG4gIE11ZG1hblNwcml0ZS5XQUxLSU5HX1JJR0hUXzJfQkFDSyxcbiAgTXVkbWFuU3ByaXRlLldBTEtJTkdfUklHSFRfM19CQUNLLFxuICBNdWRtYW5TcHJpdGUuV0FMS0lOR19SSUdIVF80X0JBQ0ssXG5dO1xuXG5jb25zdCBXQUxLSU5HX0xFRlRfU1BSSVRFU19GUk9OVCA9IFtcbiAgTXVkbWFuU3ByaXRlLldBTEtJTkdfTEVGVF8xX0ZST05ULFxuICBNdWRtYW5TcHJpdGUuV0FMS0lOR19MRUZUXzJfRlJPTlQsXG4gIE11ZG1hblNwcml0ZS5XQUxLSU5HX0xFRlRfM19GUk9OVCxcbiAgTXVkbWFuU3ByaXRlLldBTEtJTkdfTEVGVF80X0ZST05ULFxuXTtcblxuY29uc3QgV0FMS0lOR19MRUZUX1NQUklURVNfQkFDSyA9IFtcbiAgTXVkbWFuU3ByaXRlLldBTEtJTkdfTEVGVF8xX0JBQ0ssXG4gIE11ZG1hblNwcml0ZS5XQUxLSU5HX0xFRlRfMl9CQUNLLFxuICBNdWRtYW5TcHJpdGUuV0FMS0lOR19MRUZUXzNfQkFDSyxcbiAgTXVkbWFuU3ByaXRlLldBTEtJTkdfTEVGVF80X0JBQ0ssXG5dO1xuXG5leHBvcnQgY29uc3QgZW51bSBDb252b1Nwcml0ZSB7XG4gIEJMQU5LLFxuICBUQUxLSU5HXzEsXG4gIFRBTEtJTkdfMixcbiAgVEFMS0lOR18zLFxuICBUQUxLSU5HXzQsXG4gIFRBTEtJTkdfNSxcbiAgVEFMS0lOR182LFxuICBUQUxLSU5HXzcsXG4gIFRBTEtJTkdfOCxcbiAgVEFMS0lOR185LFxuICBUQUxLSU5HXzEwLFxuICBUQUxLSU5HXzExLFxuICBUQUxLSU5HXzEyLFxufVxuXG5jb25zdCBUQUxLSU5HX1NQUklURVMgPSBbXG4gIENvbnZvU3ByaXRlLlRBTEtJTkdfMSxcbiAgQ29udm9TcHJpdGUuVEFMS0lOR18yLFxuICBDb252b1Nwcml0ZS5UQUxLSU5HXzMsXG4gIENvbnZvU3ByaXRlLlRBTEtJTkdfNCxcbiAgQ29udm9TcHJpdGUuVEFMS0lOR181LFxuICBDb252b1Nwcml0ZS5UQUxLSU5HXzYsXG4gIENvbnZvU3ByaXRlLlRBTEtJTkdfNyxcbiAgQ29udm9TcHJpdGUuVEFMS0lOR184LFxuICBDb252b1Nwcml0ZS5UQUxLSU5HXzksXG4gIENvbnZvU3ByaXRlLlRBTEtJTkdfMTAsXG4gIENvbnZvU3ByaXRlLlRBTEtJTkdfMTEsXG4gIENvbnZvU3ByaXRlLlRBTEtJTkdfMTIsXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNdWRtYW5SZW5kZXJlciB7XG4gIHB1YmxpYyBzcHJpdGVSZW5kZXJlcjogU3ByaXRlUmVuZGVyZXI7XG4gIHB1YmxpYyBjb252b1JlbmRlcmVyOiBTcHJpdGVSZW5kZXJlcjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbXVkbWFuU2l6ZSA9IDIwLCBmcHMgPSAyNCkge1xuICAgIHRoaXMubXVkbWFuU2l6ZSA9IGYobXVkbWFuU2l6ZSk7XG4gICAgdGhpcy5zcHJpdGVSZW5kZXJlciA9IG5ldyBTcHJpdGVSZW5kZXJlcih0aGlzLmNhbnZhc1dpZHRoLCB0aGlzLmNhbnZhc0hlaWdodCwgZnBzKTtcbiAgICB0aGlzLmNvbnZvUmVuZGVyZXIgPSBuZXcgU3ByaXRlUmVuZGVyZXIoZih0aGlzLmNhbnZhc1dpZHRoIC8gMiksIGYodGhpcy5jYW52YXNIZWlnaHQgLyAzKSwgZnBzKTtcblxuICAgIHRoaXMuYWRkU3RhbmRpbmdTcHJpdGVzKCk7XG4gICAgdGhpcy5hZGRTaXR0aW5nU3ByaXRlcygpO1xuICAgIHRoaXMuYWRkV2Fsa2luZ1Nwcml0ZXMoKTtcbiAgICB0aGlzLmFkZENvbnZvU3ByaXRlcygpO1xuICB9XG5cbiAgZ2V0IGNhbnZhc1dpZHRoKCk6IG51bWJlciB7IHJldHVybiB0aGlzLm11ZG1hblNpemUgKiAyIH1cbiAgZ2V0IGNhbnZhc0hlaWdodCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5tdWRtYW5TaXplICogMyB9XG4gIGdldCBib2R5Q2VudGVyWCgpOiBudW1iZXIgeyByZXR1cm4gZih0aGlzLmNhbnZhc1dpZHRoIC8gMikgfVxuICBnZXQgYm9keUNlbnRlclkoKTogbnVtYmVyIHsgcmV0dXJuIGYodGhpcy5jYW52YXNIZWlnaHQgLyAyKSB9XG4gIGdldCBib2R5VG9wWSgpOiBudW1iZXIgeyByZXR1cm4gZih0aGlzLmJvZHlDZW50ZXJZIC0gKHRoaXMuYm9keUhlaWdodCAvIDIpKSB9XG4gIGdldCBib2R5Qm90dG9tWSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5ib2R5VG9wWSArIHRoaXMuYm9keUhlaWdodCB9XG4gIGdldCBib2R5TGVmdFgoKTogbnVtYmVyIHsgcmV0dXJuIGYodGhpcy5ib2R5Q2VudGVyWCAtICh0aGlzLmJvZHlXaWR0aCAvIDIpKSB9XG4gIGdldCBib2R5UmlnaHRYKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmJvZHlMZWZ0WCArIHRoaXMuYm9keVdpZHRoIH1cbiAgZ2V0IGJvZHlXaWR0aCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5tdWRtYW5TaXplIH1cbiAgZ2V0IGJvZHlIZWlnaHQoKTogbnVtYmVyIHsgcmV0dXJuIGYodGhpcy5tdWRtYW5TaXplIC8gMikgfVxuICBnZXQgYnV0dFJhZGl1cygpOiBudW1iZXIgeyByZXR1cm4gZih0aGlzLm11ZG1hblNpemUgLyA0KSB9XG4gIGdldCBidXR0Qm90dG9tWSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5ib2R5Qm90dG9tWSArIHRoaXMuYnV0dFJhZGl1cyB9XG4gIGdldCBidXR0TGVmdElubmVyWCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5ib2R5TGVmdFggKyB0aGlzLmJ1dHRSYWRpdXMgfVxuICBnZXQgYnV0dFJpZ2h0SW5uZXJYKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmJvZHlSaWdodFggLSB0aGlzLmJ1dHRSYWRpdXMgfVxuICBnZXQgbGVnV2lkdGgoKTogbnVtYmVyIHsgcmV0dXJuIGYodGhpcy5tdWRtYW5TaXplIC8gNCkgfVxuICBnZXQgbGVnSGVpZ2h0KCk6IG51bWJlciB7IHJldHVybiBmKHRoaXMubXVkbWFuU2l6ZSAvIDIpIH1cblxuICBkcmF3VXBwZXJCb2R5KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBmYWNpbmdSaWdodDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGJvZHlXaWR0aCxcbiAgICAgIGJvZHlDZW50ZXJYLFxuICAgICAgYm9keVRvcFksXG4gICAgICBib2R5Qm90dG9tWSxcbiAgICAgIGJvZHlMZWZ0WCxcbiAgICAgIGJvZHlSaWdodFgsXG4gICAgICBidXR0UmFkaXVzLFxuICAgICAgYnV0dEJvdHRvbVksXG4gICAgICBidXR0TGVmdElubmVyWCxcbiAgICAgIGJ1dHRSaWdodElubmVyWCxcbiAgICB9ID0gdGhpcztcblxuICAgIGN0eC5maWxsU3R5bGUgPSBCUk9XTjtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG5cbiAgICAvLyBoZWFkXG4gICAgY3R4LmFyYyhib2R5Q2VudGVyWCwgYm9keVRvcFksIGYoYm9keVdpZHRoIC8gMiksIDAsIE1hdGguUEksIHRydWUpO1xuXG4gICAgLy8gbGVmdCBzaWRlIG9mIGJvZHlcbiAgICBjdHgubGluZVRvKGJvZHlMZWZ0WCwgYm9keUJvdHRvbVkpO1xuXG4gICAgLy8gbGVmdC1zaWRlIGJ1dHRcbiAgICBjdHguYXJjVG8oYm9keUxlZnRYLCBidXR0Qm90dG9tWSwgYnV0dExlZnRJbm5lclgsIGJ1dHRCb3R0b21ZLCBidXR0UmFkaXVzKTtcbiAgICBjdHgubGluZVRvKGJ1dHRMZWZ0SW5uZXJYLCBidXR0Qm90dG9tWSk7XG5cbiAgICAvLyB3aGVuIGZhY2luZyByaWdodCwgdGhlIGJvdHRvbSByaWdodCBvZiB0aGUgYm9keSBpcyBhIHNoYXJwIGNvcm5lciwgYnV0XG4gICAgLy8gd2hlbiBmYWNpbmcgdXAvZG93biB0aGVyZSdzIGEgYnV0dCBvbiBib3RoIHNpZGVzXG4gICAgaWYgKGZhY2luZ1JpZ2h0KSB7XG4gICAgICAvLyBib3R0b21cbiAgICAgIGN0eC5saW5lVG8oYm9keVJpZ2h0WCwgYnV0dEJvdHRvbVkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBib3R0b20gYW5kIHJpZ2h0LXNpZGUgYnV0dFxuICAgICAgY3R4LmxpbmVUbyhidXR0UmlnaHRJbm5lclgsIGJ1dHRCb3R0b21ZKTtcbiAgICAgIGN0eC5hcmNUbyhib2R5UmlnaHRYLCBidXR0Qm90dG9tWSwgYm9keVJpZ2h0WCwgYm9keUJvdHRvbVksIGJ1dHRSYWRpdXMpO1xuICAgICAgY3R4LmxpbmVUbyhib2R5UmlnaHRYLCBib2R5Qm90dG9tWSk7XG4gICAgfVxuXG4gICAgLy8gcmlnaHQgc2lkZSBvZiBib2R5XG4gICAgY3R4LmxpbmVUbyhib2R5UmlnaHRYLCBib2R5VG9wWSk7XG5cbiAgICAvLyBmaW5pc2g7IGJhY2sgYXQgcmlnaHQgc2lkZSBvZiBoZWFkXG4gICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgIGN0eC5maWxsKCk7XG4gIH1cblxuICBkcmF3RmFjZShjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGJvZHlXaWR0aCxcbiAgICAgIGJvZHlUb3BZLFxuICAgICAgYm9keVJpZ2h0WCxcbiAgICB9ID0gdGhpcztcblxuICAgIGNvbnN0IGZhY2VSYWRpdXMgPSBmKDAuMzMgKiBib2R5V2lkdGgpO1xuICAgIGNvbnN0IGV5ZWJhbGxSYWRpdXMgPSBmKDAuMyAqIGZhY2VSYWRpdXMpO1xuICAgIGNvbnN0IGZhY2VPZmZzZXRYID0gZigoYm9keVdpZHRoIC0gZmFjZVJhZGl1cykgLyA2KTtcblxuICAgIGNvbnN0IGZhY2VDZW50ZXJYID0gYm9keVJpZ2h0WCAtIGZhY2VSYWRpdXMgLSBmYWNlT2Zmc2V0WDtcbiAgICBjb25zdCBmYWNlQ2VudGVyWSA9IGJvZHlUb3BZO1xuICAgIGNvbnN0IGZhY2VSaWdodFggPSBmYWNlQ2VudGVyWCArIGZhY2VSYWRpdXM7XG4gICAgY29uc3QgZmFjZUxlZnRYID0gZmFjZUNlbnRlclggLSBmYWNlUmFkaXVzO1xuXG4gICAgY29uc3QgbGVmdEV5ZUNlbnRlclggPSBmYWNlTGVmdFggKyAoMiAqIGV5ZWJhbGxSYWRpdXMpO1xuICAgIGNvbnN0IHJpZ2h0RXllQ2VudGVyWCA9IGZhY2VSaWdodFggLSBmKDEuNSAqIGV5ZWJhbGxSYWRpdXMpO1xuXG4gICAgY3R4LmZpbGxTdHlsZSA9IFNBTkRZX0JST1dOO1xuXG4gICAgLy8gZmFjZSBjaXJjbGVcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyhmYWNlQ2VudGVyWCwgZmFjZUNlbnRlclksIGZhY2VSYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgY3R4LmZpbGxTdHlsZSA9IEJST1dOO1xuXG4gICAgLy8gYmFuZ3NcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyhmYWNlQ2VudGVyWCwgZmFjZUNlbnRlclksIGZhY2VSYWRpdXMgKyAxLCAtMC4yICogTWF0aC5QSSwgLTAuOCAqIE1hdGguUEksIHRydWUpO1xuICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgY3R4LmZpbGxTdHlsZSA9IERBUktfU0xBVEVfR1JBWTtcblxuICAgIC8vIGxlZnQgZXllXG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5hcmMobGVmdEV5ZUNlbnRlclgsIGZhY2VDZW50ZXJZLCBleWViYWxsUmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgY3R4LmZpbGwoKTtcblxuICAgIC8vIHJpZ2h0IGV5ZVxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHguYXJjKHJpZ2h0RXllQ2VudGVyWCwgZmFjZUNlbnRlclksIGV5ZWJhbGxSYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICBjdHguZmlsbCgpO1xuXG5cbiAgICBpZiAoYm9keVdpZHRoID4gMjQpIHtcbiAgICAgIGNvbnN0IGV5ZWJyb3dXaWR0aCA9IHJpZ2h0RXllQ2VudGVyWCAtIGxlZnRFeWVDZW50ZXJYICsgKDIgKiBleWViYWxsUmFkaXVzKTtcbiAgICAgIGNvbnN0IGV5ZWJyb3dIZWlnaHQgPSBleWViYWxsUmFkaXVzO1xuICAgICAgY29uc3QgZXllYnJvd0xlZnRYID0gbGVmdEV5ZUNlbnRlclggLSBleWViYWxsUmFkaXVzO1xuICAgICAgY29uc3QgZXllYnJvd1RvcFkgPSBmYWNlQ2VudGVyWSAtIGYoMC43NSAqIGV5ZWJhbGxSYWRpdXMpIC0gZXllYnJvd0hlaWdodDtcblxuICAgICAgY29uc3QgbW91dGhXaWR0aCA9IHJpZ2h0RXllQ2VudGVyWCAtIGxlZnRFeWVDZW50ZXJYIC0gKDMgKiBleWViYWxsUmFkaXVzKTtcbiAgICAgIGNvbnN0IG1vdXRoSGVpZ2h0ID0gZXllYmFsbFJhZGl1cztcbiAgICAgIGNvbnN0IG1vdXRoTGVmdFggPSBmYWNlQ2VudGVyWCAtIGYoMC41ICogbW91dGhXaWR0aCk7XG4gICAgICBjb25zdCBtb3V0aFRvcFkgPSBmYWNlQ2VudGVyWSArIGYoMS41ICogZXllYmFsbFJhZGl1cyk7XG5cbiAgICAgIGN0eC5maWxsU3R5bGUgPSBCUk9XTjtcblxuICAgICAgLy8gZXllYnJvd1xuICAgICAgY3R4LmZpbGxSZWN0KGV5ZWJyb3dMZWZ0WCwgZXllYnJvd1RvcFksIGV5ZWJyb3dXaWR0aCwgZXllYnJvd0hlaWdodCk7XG5cbiAgICAgIGN0eC5maWxsU3R5bGUgPSBSRUQ7XG5cbiAgICAgIC8vIG1vdXRoXG4gICAgICBjdHguZmlsbFJlY3QobW91dGhMZWZ0WCwgbW91dGhUb3BZLCBtb3V0aFdpZHRoLCBtb3V0aEhlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgZHJhd1NpbXBsZUZhY2UoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGZhY2luZ1JpZ2h0OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qge1xuICAgICAgYm9keVdpZHRoLFxuICAgICAgYm9keVRvcFksXG4gICAgICBib2R5UmlnaHRYLFxuICAgICAgYm9keUNlbnRlclgsXG4gICAgfSA9IHRoaXM7XG5cbiAgICBjb25zdCBmYWNlUmFkaXVzID0gZigwLjMzICogYm9keVdpZHRoKTtcbiAgICBjb25zdCBleWViYWxsUmFkaXVzID0gZigwLjMgKiBmYWNlUmFkaXVzKTtcbiAgICBjb25zdCBmYWNlQ2VudGVyWSA9IGJvZHlUb3BZO1xuICAgIGxldCBmYWNlQ2VudGVyWDogbnVtYmVyO1xuXG4gICAgaWYgKGZhY2luZ1JpZ2h0KSB7XG4gICAgICBmYWNlQ2VudGVyWCA9IGJvZHlSaWdodFggLSBmYWNlUmFkaXVzO1xuICAgIH0gZWxzZSB7XG4gICAgICBmYWNlQ2VudGVyWCA9IGJvZHlDZW50ZXJYO1xuICAgIH1cblxuICAgIGNvbnN0IGZhY2VMZWZ0WCA9IGZhY2VDZW50ZXJYIC0gZmFjZVJhZGl1cztcbiAgICBjb25zdCBmYWNlUmlnaHRYID0gZmFjZUNlbnRlclggKyBmYWNlUmFkaXVzO1xuXG4gICAgLy8gbGV0IGxlZnRFeWVDZW50ZXJYOiBudW1iZXI7XG4gICAgLy8gbGV0IHJpZ2h0RXllQ2VudGVyWDogbnVtYmVyO1xuICAgIC8vIGlmIChmYWNpbmdSaWdodCkge1xuICAgIC8vICAgbGVmdEV5ZUNlbnRlclggPSBmYWNlTGVmdFggKyBmKGZhY2VSYWRpdXMgLyAyKTtcbiAgICAvLyAgIHJpZ2h0RXllQ2VudGVyWCA9IGZhY2VSaWdodFggLSBmKGZhY2VSYWRpdXMgLyAzKTtcbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgbGVmdEV5ZUNlbnRlclggPSBmYWNlTGVmdFggKyBmKGZhY2VSYWRpdXMgLyAyKTtcbiAgICAvLyAgIHJpZ2h0RXllQ2VudGVyWCA9IGZhY2VSaWdodFggLSBmKGZhY2VSYWRpdXMgLyAyKTtcbiAgICAvLyB9XG5cbiAgICBjb25zdCBsZWZ0RXllQ2VudGVyWCA9IGZhY2VMZWZ0WCArIGYoZmFjZVJhZGl1cyAvIDIpO1xuICAgIGNvbnN0IHJpZ2h0RXllQ2VudGVyWCA9IGZhY2VSaWdodFggLSBmKGZhY2VSYWRpdXMgLyAyKTtcblxuICAgIC8vIGN0eC5maWxsU3R5bGUgPSBTQU5EWV9CUk9XTjtcbiAgICBjdHguZmlsbFN0eWxlID0gREFSS19TTEFURV9HUkFZO1xuXG4gICAgLy8gbGVmdCBleWVcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyhsZWZ0RXllQ2VudGVyWCwgZmFjZUNlbnRlclksIGV5ZWJhbGxSYWRpdXMsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgLy8gcmlnaHQgZXllXG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5hcmMocmlnaHRFeWVDZW50ZXJYLCBmYWNlQ2VudGVyWSwgZXllYmFsbFJhZGl1cywgMCwgMiAqIE1hdGguUEkpO1xuICAgIGN0eC5maWxsKCk7XG4gIH1cblxuICBkcmF3U3RhbmRpbmcoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGZhY2luZ0Zyb250OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kcmF3VXBwZXJCb2R5KGN0eCwgZmFsc2UpO1xuICAgIGlmIChmYWNpbmdGcm9udCkgdGhpcy5kcmF3U2ltcGxlRmFjZShjdHgsIGZhbHNlKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGJ1dHRMZWZ0SW5uZXJYLFxuICAgICAgYnV0dFJpZ2h0SW5uZXJYLFxuICAgICAgYnV0dFJhZGl1cyxcbiAgICAgIGJvZHlCb3R0b21ZLFxuICAgICAgbGVnV2lkdGgsXG4gICAgICBsZWdIZWlnaHQsXG4gICAgfSA9IHRoaXM7XG5cbiAgICBjdHguZmlsbFN0eWxlID0gQlJPV047XG5cbiAgICAvLyBsZWZ0IGxlZ1xuICAgIGN0eC5maWxsUmVjdChidXR0TGVmdElubmVyWCAtIGYobGVnV2lkdGggLyAyKSwgYm9keUJvdHRvbVksIGxlZ1dpZHRoLCBsZWdIZWlnaHQgKyBidXR0UmFkaXVzKTtcblxuICAgIC8vIHJpZ2h0IGxlZ1xuICAgIGN0eC5maWxsUmVjdChidXR0UmlnaHRJbm5lclggLSBmKGxlZ1dpZHRoIC8gMiksIGJvZHlCb3R0b21ZLCBsZWdXaWR0aCwgbGVnSGVpZ2h0ICsgYnV0dFJhZGl1cyk7XG4gIH1cblxuICBkcmF3U3RhbmRpbmdSaWdodChjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgZmFjaW5nRnJvbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRyYXdVcHBlckJvZHkoY3R4LCB0cnVlKTtcbiAgICBpZiAoZmFjaW5nRnJvbnQpIHRoaXMuZHJhd1NpbXBsZUZhY2UoY3R4LCB0cnVlKTtcblxuICAgIGNvbnN0IHsgYm9keVJpZ2h0WCwgYnV0dExlZnRJbm5lclgsIGJ1dHRCb3R0b21ZLCBsZWdXaWR0aCwgbGVnSGVpZ2h0IH0gPSB0aGlzO1xuICAgIGN0eC5maWxsU3R5bGUgPSBCUk9XTjtcblxuICAgIC8vIGxlZnQgbGVnXG4gICAgY3R4LmZpbGxSZWN0KGJ1dHRMZWZ0SW5uZXJYLCBidXR0Qm90dG9tWSwgbGVnV2lkdGgsIGxlZ0hlaWdodCk7XG5cbiAgICAvLyByaWdodCBsZWdcbiAgICBjdHguZmlsbFJlY3QoYm9keVJpZ2h0WCAtIGxlZ1dpZHRoLCBidXR0Qm90dG9tWSwgbGVnV2lkdGgsIGxlZ0hlaWdodCk7XG4gIH1cblxuICBkcmF3U2l0dGluZyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgZmFjaW5nRnJvbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICBidXR0TGVmdElubmVyWCxcbiAgICAgIGJ1dHRSaWdodElubmVyWCxcbiAgICAgIGJ1dHRCb3R0b21ZLFxuICAgICAgbGVnV2lkdGgsXG4gICAgICBsZWdIZWlnaHQsXG4gICAgfSA9IHRoaXM7XG5cbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC50cmFuc2xhdGUoMCwgbGVnSGVpZ2h0KTtcblxuICAgIHRoaXMuZHJhd1VwcGVyQm9keShjdHgsIGZhbHNlKTtcbiAgICBpZiAoIWZhY2luZ0Zyb250KSByZXR1cm47XG5cbiAgICB0aGlzLmRyYXdTaW1wbGVGYWNlKGN0eCwgZmFsc2UpO1xuXG4gICAgY3R4LmZpbGxTdHlsZSA9IEJST1dOO1xuXG4gICAgY29uc3QgbGVmdExlZ0xlZnRYID0gYnV0dExlZnRJbm5lclggLSBmKGxlZ1dpZHRoIC8gMik7XG4gICAgY29uc3QgbGVmdExlZ0NlbnRlclggPSBidXR0TGVmdElubmVyWDtcbiAgICBjb25zdCByaWdodExlZ0xlZnRYID0gYnV0dFJpZ2h0SW5uZXJYIC0gZihsZWdXaWR0aCAvIDIpO1xuICAgIGNvbnN0IHJpZ2h0TGVnQ2VudGVyWCA9IGJ1dHRSaWdodElubmVyWDtcbiAgICAvLyBjb25zdCBsZWdzVG9wWSA9IGJ1dHRCb3R0b21ZIC0gZihsZWdIZWlnaHQgLyAyKTtcbiAgICBjb25zdCBsZWdzVG9wWSA9IGJ1dHRCb3R0b21ZIC0gZigwLjc1ICogbGVnSGVpZ2h0KTtcbiAgICBjb25zdCBsZWdzQm90dG9tWSA9IGxlZ3NUb3BZICsgbGVnSGVpZ2h0O1xuICAgIGNvbnN0IGZvb3RSYWRpdXMgPSBmKGxlZ1dpZHRoIC8gMik7XG5cbiAgICAvLyBsZWZ0IGxlZ1xuICAgIGN0eC5maWxsUmVjdChsZWZ0TGVnTGVmdFgsIGxlZ3NUb3BZLCBsZWdXaWR0aCwgbGVnSGVpZ2h0KTtcblxuICAgIC8vIGxlZnQgZm9vdCBib3R0b21cbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyhsZWZ0TGVnQ2VudGVyWCwgbGVnc0JvdHRvbVksIGZvb3RSYWRpdXMsIDAsIE1hdGguUEkpO1xuICAgIGN0eC5maWxsKCk7XG5cbiAgICAvLyBsZWZ0IGZvb3QgdG9wXG4gICAgY3R4LmZpbGxTdHlsZSA9IERBUktfQlJPV047XG4gICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgIGN0eC5hcmMobGVmdExlZ0NlbnRlclgsIGxlZ3NCb3R0b21ZLCBmb290UmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgY3R4LmZpbGwoKTtcbiAgICBjdHguZmlsbFN0eWxlID0gQlJPV047XG5cbiAgICAvLyByaWdodCBsZWdcbiAgICBjdHguZmlsbFJlY3QocmlnaHRMZWdMZWZ0WCwgbGVnc1RvcFksIGxlZ1dpZHRoLCBsZWdIZWlnaHQpO1xuXG4gICAgLy8gcmlnaHQgZm9vdCBib3R0b21cbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyhyaWdodExlZ0NlbnRlclgsIGxlZ3NCb3R0b21ZLCBmb290UmFkaXVzLCAwLCBNYXRoLlBJKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgLy8gcmlnaHQgZm9vdCB0b3BcbiAgICBjdHguZmlsbFN0eWxlID0gREFSS19CUk9XTjtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyhyaWdodExlZ0NlbnRlclgsIGxlZ3NCb3R0b21ZLCBmb290UmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgY3R4LmZpbGwoKTtcblxuICAgIGN0eC5yZXN0b3JlKCk7XG4gIH1cblxuICBkcmF3U2l0dGluZ1JpZ2h0KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBmYWNpbmdGcm9udDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGJvZHlDZW50ZXJYLFxuICAgICAgYm9keVJpZ2h0WCxcbiAgICAgIGJ1dHRCb3R0b21ZLFxuICAgICAgbGVnV2lkdGgsXG4gICAgICBsZWdIZWlnaHQsXG4gICAgfSA9IHRoaXM7XG5cbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC50cmFuc2xhdGUoMCwgbGVnSGVpZ2h0KTtcblxuICAgIHRoaXMuZHJhd1VwcGVyQm9keShjdHgsIHRydWUpO1xuICAgIGlmIChmYWNpbmdGcm9udCkgdGhpcy5kcmF3U2ltcGxlRmFjZShjdHgsIHRydWUpO1xuXG4gICAgY3R4LmZpbGxTdHlsZSA9IEJST1dOO1xuXG4gICAgY29uc3QgZm9vdFJhZGl1cyA9IGYobGVnV2lkdGggLyAyKTtcbiAgICBjb25zdCByaWdodExlZ0xlZnRYID0gYm9keVJpZ2h0WCAtIGYobGVnSGVpZ2h0IC8gMik7XG4gICAgY29uc3QgcmlnaHRMZWdSaWdodFggPSByaWdodExlZ0xlZnRYICsgbGVnSGVpZ2h0O1xuICAgIGNvbnN0IHJpZ2h0TGVnVG9wWSA9IGJ1dHRCb3R0b21ZIC0gbGVnV2lkdGg7XG4gICAgY29uc3QgcmlnaHRMZWdCb3R0b21ZID0gYnV0dEJvdHRvbVk7XG4gICAgY29uc3QgcmlnaHRGb290Q2VudGVyWCA9IHJpZ2h0TGVnUmlnaHRYO1xuXG4gICAgLy8gcmlnaHQgbGVnIHN0aWNraW4nIG91dCB0byB0aGUgcmlnaHRcbiAgICBjdHguZmlsbFJlY3QocmlnaHRMZWdMZWZ0WCwgYnV0dEJvdHRvbVkgLSBsZWdXaWR0aCwgbGVnSGVpZ2h0LCBsZWdXaWR0aCk7XG5cbiAgICAvLyByaWdodCBmb290IHRvcFxuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHguYXJjKHJpZ2h0Rm9vdENlbnRlclgsIHJpZ2h0TGVnVG9wWSwgZm9vdFJhZGl1cywgTWF0aC5QSSwgMCk7XG4gICAgY3R4LmxpbmVUbyhyaWdodEZvb3RDZW50ZXJYICsgZm9vdFJhZGl1cywgcmlnaHRMZWdCb3R0b21ZIC0gZm9vdFJhZGl1cyk7XG4gICAgY3R4LmFyYyhyaWdodEZvb3RDZW50ZXJYLCByaWdodExlZ0JvdHRvbVkgLSBmb290UmFkaXVzLCBmb290UmFkaXVzLCAwLCAwLjUgKiBNYXRoLlBJKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgaWYgKCFmYWNpbmdGcm9udCkge1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IERBUktfQlJPV047XG5cbiAgICAgIC8vIGxlZnQgZm9vdCAoYWJvdmUgcmlnaHQgbGVnL2Zvb3QpXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjdHguYXJjKGJvZHlSaWdodFgsIHJpZ2h0TGVnVG9wWSAtIGZvb3RSYWRpdXMsIGZvb3RSYWRpdXMsIDAuNSAqIE1hdGguUEksIDAsIHRydWUpO1xuICAgICAgY3R4LmxpbmVUbyhib2R5UmlnaHRYICsgZm9vdFJhZGl1cywgcmlnaHRMZWdUb3BZIC0gbGVnV2lkdGgpO1xuICAgICAgY3R4LmFyYyhib2R5UmlnaHRYLCByaWdodExlZ1RvcFkgLSBsZWdXaWR0aCwgZm9vdFJhZGl1cywgMCwgLTAuNSAqIE1hdGguUEksIHRydWUpO1xuICAgICAgY3R4LmZpbGwoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlZnRMZWdXaWR0aCA9IGYoMS41ICogbGVnV2lkdGgpO1xuICAgIGNvbnN0IGxlZnRGb290UmFkaXVzID0gZihsZWZ0TGVnV2lkdGggLyAyKTtcbiAgICBjb25zdCBsZWZ0TGVnTGVmdFggPSBib2R5Q2VudGVyWCAtIGYobGVmdExlZ1dpZHRoIC8gMik7XG4gICAgY29uc3QgbGVmdExlZ0NlbnRlclggPSBib2R5Q2VudGVyWDtcbiAgICBjb25zdCBsZWZ0TGVnUmlnaHRYID0gbGVmdExlZ0NlbnRlclggKyBmKGxlZnRMZWdXaWR0aCAvIDIpO1xuICAgIGNvbnN0IGxlZ3NUb3BZID0gYnV0dEJvdHRvbVkgLSBmKDAuNzUgKiBsZWdIZWlnaHQpO1xuICAgIGNvbnN0IGxlZ3NCb3R0b21ZID0gbGVnc1RvcFkgKyBsZWdIZWlnaHQ7XG5cbiAgICAvLyBsZWZ0IGxlZyBzdHJhaWdodCBkb3duXG4gICAgY3R4LmZpbGxSZWN0KGxlZnRMZWdMZWZ0WCwgbGVnc1RvcFksIGxlZnRMZWdXaWR0aCwgbGVnSGVpZ2h0KTtcblxuICAgIC8vIGxlZnQgZm9vdCBib3R0b21cbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyhsZWZ0TGVnQ2VudGVyWCwgbGVnc0JvdHRvbVksIGxlZnRGb290UmFkaXVzLCAwLCBNYXRoLlBJKTtcbiAgICBjdHguZmlsbCgpO1xuXG4gICAgY3R4LmZpbGxTdHlsZSA9IERBUktfQlJPV047XG5cbiAgICAvLyBsZWZ0IGZvb3QgdG9wIGFuZCBraW5kYSBib3R0b21cbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgY3R4LmFyYyhsZWZ0TGVnUmlnaHRYIC0gZm9vdFJhZGl1cywgbGVnc0JvdHRvbVkgKyBsZWZ0Rm9vdFJhZGl1cyAtIGZvb3RSYWRpdXMsIGZvb3RSYWRpdXMsIE1hdGguUEksIDAsIHRydWUpO1xuICAgIGN0eC5saW5lVG8obGVmdExlZ1JpZ2h0WCwgbGVnc0JvdHRvbVkgLSBmKDAuMjUgKiBsZWdXaWR0aCkpO1xuICAgIGN0eC5hcmMobGVmdExlZ1JpZ2h0WCAtIGZvb3RSYWRpdXMsIGxlZ3NCb3R0b21ZIC0gZigwLjI1ICogbGVnV2lkdGgpLCBmb290UmFkaXVzLCAwLCBNYXRoLlBJLCB0cnVlKTtcbiAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgY3R4LmZpbGwoKTtcbiAgfVxuXG4gIGRyYXdXYWxraW5nMShjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgZmFjaW5nRnJvbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICBidXR0TGVmdElubmVyWCxcbiAgICAgIGJ1dHRSaWdodElubmVyWCxcbiAgICAgIGJ1dHRSYWRpdXMsXG4gICAgICBib2R5Qm90dG9tWSxcbiAgICAgIGxlZ1dpZHRoLFxuICAgICAgbGVnSGVpZ2h0LFxuICAgIH0gPSB0aGlzO1xuXG4gICAgLy8gbGVmdCBsZWdcbiAgICBjdHguZmlsbFN0eWxlID0gQlJPV047XG4gICAgY3R4LmZpbGxSZWN0KGJ1dHRMZWZ0SW5uZXJYIC0gZihsZWdXaWR0aCAvIDIpLCBib2R5Qm90dG9tWSwgbGVnV2lkdGgsIGxlZ0hlaWdodCArIGJ1dHRSYWRpdXMpO1xuXG4gICAgLy8gcmlnaHQgbGVnXG4gICAgY3R4LmZpbGxTdHlsZSA9IERBUktfQlJPV047XG4gICAgY3R4LmZpbGxSZWN0KGJ1dHRSaWdodElubmVyWCAtIGYobGVnV2lkdGggLyAyKSwgYm9keUJvdHRvbVkgLSBmKDAuNzUgKiBsZWdIZWlnaHQpLCBsZWdXaWR0aCwgbGVnSGVpZ2h0ICsgYnV0dFJhZGl1cyk7XG5cbiAgICB0aGlzLmRyYXdVcHBlckJvZHkoY3R4LCBmYWxzZSk7XG4gICAgaWYgKGZhY2luZ0Zyb250KSB0aGlzLmRyYXdTaW1wbGVGYWNlKGN0eCwgZmFsc2UpO1xuICB9XG5cbiAgZHJhd1dhbGtpbmcyKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBmYWNpbmdGcm9udDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGJ1dHRMZWZ0SW5uZXJYLFxuICAgICAgYnV0dFJpZ2h0SW5uZXJYLFxuICAgICAgYnV0dFJhZGl1cyxcbiAgICAgIGJvZHlCb3R0b21ZLFxuICAgICAgbGVnV2lkdGgsXG4gICAgICBsZWdIZWlnaHQsXG4gICAgfSA9IHRoaXM7XG5cbiAgICAvLyBsZWZ0IGxlZ1xuICAgIGN0eC5maWxsU3R5bGUgPSBEQVJLX0JST1dOO1xuICAgIGN0eC5maWxsUmVjdChidXR0TGVmdElubmVyWCAtIGYobGVnV2lkdGggLyAyKSwgYm9keUJvdHRvbVkgLSBmKDAuNSAqIGxlZ0hlaWdodCksIGxlZ1dpZHRoLCBsZWdIZWlnaHQgKyBidXR0UmFkaXVzKTtcblxuICAgIC8vIHJpZ2h0IGxlZ1xuICAgIGN0eC5maWxsU3R5bGUgPSBCUk9XTjtcbiAgICBjdHguZmlsbFJlY3QoYnV0dFJpZ2h0SW5uZXJYIC0gZihsZWdXaWR0aCAvIDIpLCBib2R5Qm90dG9tWSAtIGYoMC41ICogbGVnSGVpZ2h0KSwgbGVnV2lkdGgsIGxlZ0hlaWdodCArIGJ1dHRSYWRpdXMpO1xuXG4gICAgdGhpcy5kcmF3VXBwZXJCb2R5KGN0eCwgZmFsc2UpO1xuICAgIGlmIChmYWNpbmdGcm9udCkgdGhpcy5kcmF3U2ltcGxlRmFjZShjdHgsIGZhbHNlKTtcbiAgfVxuXG4gIGRyYXdXYWxraW5nMyhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgZmFjaW5nRnJvbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICBidXR0TGVmdElubmVyWCxcbiAgICAgIGJ1dHRSaWdodElubmVyWCxcbiAgICAgIGJ1dHRSYWRpdXMsXG4gICAgICBib2R5Qm90dG9tWSxcbiAgICAgIGxlZ1dpZHRoLFxuICAgICAgbGVnSGVpZ2h0LFxuICAgIH0gPSB0aGlzO1xuXG4gICAgLy8gbGVmdCBsZWdcbiAgICBjdHguZmlsbFN0eWxlID0gREFSS19CUk9XTjtcbiAgICBjdHguZmlsbFJlY3QoYnV0dExlZnRJbm5lclggLSBmKGxlZ1dpZHRoIC8gMiksIGJvZHlCb3R0b21ZIC0gZigwLjc1ICogbGVnSGVpZ2h0KSwgbGVnV2lkdGgsIGxlZ0hlaWdodCArIGJ1dHRSYWRpdXMpO1xuXG4gICAgLy8gcmlnaHQgbGVnXG4gICAgY3R4LmZpbGxTdHlsZSA9IEJST1dOO1xuICAgIGN0eC5maWxsUmVjdChidXR0UmlnaHRJbm5lclggLSBmKGxlZ1dpZHRoIC8gMiksIGJvZHlCb3R0b21ZLCBsZWdXaWR0aCwgbGVnSGVpZ2h0ICsgYnV0dFJhZGl1cyk7XG5cbiAgICB0aGlzLmRyYXdVcHBlckJvZHkoY3R4LCBmYWxzZSk7XG4gICAgaWYgKGZhY2luZ0Zyb250KSB0aGlzLmRyYXdTaW1wbGVGYWNlKGN0eCwgZmFsc2UpO1xuICB9XG5cbiAgZHJhd1dhbGtpbmc0KGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBmYWNpbmdGcm9udDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIGJ1dHRMZWZ0SW5uZXJYLFxuICAgICAgYnV0dFJpZ2h0SW5uZXJYLFxuICAgICAgYnV0dFJhZGl1cyxcbiAgICAgIGJvZHlCb3R0b21ZLFxuICAgICAgbGVnV2lkdGgsXG4gICAgICBsZWdIZWlnaHQsXG4gICAgfSA9IHRoaXM7XG5cbiAgICAvLyBsZWZ0IGxlZ1xuICAgIGN0eC5maWxsU3R5bGUgPSBCUk9XTjtcbiAgICBjdHguZmlsbFJlY3QoYnV0dExlZnRJbm5lclggLSBmKGxlZ1dpZHRoIC8gMiksIGJvZHlCb3R0b21ZIC0gZigwLjUgKiBsZWdIZWlnaHQpLCBsZWdXaWR0aCwgbGVnSGVpZ2h0ICsgYnV0dFJhZGl1cyk7XG5cbiAgICAvLyByaWdodCBsZWdcbiAgICBjdHguZmlsbFN0eWxlID0gREFSS19CUk9XTjtcbiAgICBjdHguZmlsbFJlY3QoYnV0dFJpZ2h0SW5uZXJYIC0gZihsZWdXaWR0aCAvIDIpLCBib2R5Qm90dG9tWSAtIGYoMC41ICogbGVnSGVpZ2h0KSwgbGVnV2lkdGgsIGxlZ0hlaWdodCArIGJ1dHRSYWRpdXMpO1xuXG4gICAgdGhpcy5kcmF3VXBwZXJCb2R5KGN0eCwgZmFsc2UpO1xuICAgIGlmIChmYWNpbmdGcm9udCkgdGhpcy5kcmF3U2ltcGxlRmFjZShjdHgsIGZhbHNlKTtcbiAgfVxuXG4gIGRyYXdXYWxraW5nUmlnaHQxKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBmYWNpbmdGcm9udDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHsgYm9keVJpZ2h0WCwgYnV0dExlZnRJbm5lclgsIGJ1dHRCb3R0b21ZLCBsZWdXaWR0aCwgbGVnSGVpZ2h0IH0gPSB0aGlzO1xuXG4gICAgLy8gbGVmdCBsZWdcbiAgICBjdHguZmlsbFN0eWxlID0gQlJPV047XG4gICAgY3R4LmZpbGxSZWN0KGJ1dHRMZWZ0SW5uZXJYLCBidXR0Qm90dG9tWSAtIGYobGVnSGVpZ2h0IC8gMiksIGxlZ1dpZHRoLCBsZWdIZWlnaHQpO1xuXG4gICAgLy8gcmlnaHQgbGVnXG4gICAgY3R4LmZpbGxTdHlsZSA9IEJST1dOO1xuICAgIGN0eC5maWxsUmVjdChib2R5UmlnaHRYIC0gbGVnV2lkdGgsIGJ1dHRCb3R0b21ZLCBsZWdXaWR0aCwgbGVnSGVpZ2h0KTtcblxuICAgIHRoaXMuZHJhd1VwcGVyQm9keShjdHgsIHRydWUpO1xuICAgIGlmIChmYWNpbmdGcm9udCkgdGhpcy5kcmF3U2ltcGxlRmFjZShjdHgsIHRydWUpO1xuICB9XG5cbiAgZHJhd1dhbGtpbmdSaWdodDIoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGZhY2luZ0Zyb250OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgeyBidXR0TGVmdElubmVyWCwgYm9keUNlbnRlclgsIGJ1dHRCb3R0b21ZLCBsZWdXaWR0aCwgbGVnSGVpZ2h0IH0gPSB0aGlzO1xuXG4gICAgLy8gbGVmdCBsZWdcbiAgICBjdHguZmlsbFN0eWxlID0gREFSS19CUk9XTjtcbiAgICBjdHguZmlsbFJlY3QoYnV0dExlZnRJbm5lclggKyBmKGxlZ1dpZHRoIC8gMiksIGJ1dHRCb3R0b21ZIC0gZihsZWdIZWlnaHQgKiAwLjc1KSwgbGVnV2lkdGgsIGxlZ0hlaWdodCk7XG5cbiAgICAvLyByaWdodCBsZWdcbiAgICBjdHguZmlsbFN0eWxlID0gQlJPV047XG4gICAgY3R4LmZpbGxSZWN0KGJvZHlDZW50ZXJYICsgZihsZWdXaWR0aCAqIDAuMjUpLCBidXR0Qm90dG9tWSwgbGVnV2lkdGgsIGxlZ0hlaWdodCk7XG5cbiAgICB0aGlzLmRyYXdVcHBlckJvZHkoY3R4LCB0cnVlKTtcbiAgICBpZiAoZmFjaW5nRnJvbnQpIHRoaXMuZHJhd1NpbXBsZUZhY2UoY3R4LCB0cnVlKTtcbiAgfVxuXG4gIGRyYXdXYWxraW5nUmlnaHQzKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBmYWNpbmdGcm9udDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHsgYnV0dExlZnRJbm5lclgsIGJvZHlDZW50ZXJYLCBidXR0Qm90dG9tWSwgbGVnV2lkdGgsIGxlZ0hlaWdodCB9ID0gdGhpcztcblxuICAgIC8vIGxlZnQgbGVnXG4gICAgY3R4LmZpbGxTdHlsZSA9IERBUktfQlJPV047XG4gICAgY3R4LmZpbGxSZWN0KGJvZHlDZW50ZXJYICsgZihsZWdXaWR0aCAqIDAuMjUpLCBidXR0Qm90dG9tWSAtIGYobGVnSGVpZ2h0ICogMC43NSksIGxlZ1dpZHRoLCBsZWdIZWlnaHQpO1xuXG4gICAgLy8gcmlnaHQgbGVnXG4gICAgY3R4LmZpbGxTdHlsZSA9IEJST1dOO1xuICAgIGN0eC5maWxsUmVjdChidXR0TGVmdElubmVyWCArIGYobGVnV2lkdGggLyAyKSwgYnV0dEJvdHRvbVksIGxlZ1dpZHRoLCBsZWdIZWlnaHQpO1xuXG4gICAgdGhpcy5kcmF3VXBwZXJCb2R5KGN0eCwgdHJ1ZSk7XG4gICAgaWYgKGZhY2luZ0Zyb250KSB0aGlzLmRyYXdTaW1wbGVGYWNlKGN0eCwgdHJ1ZSk7XG4gIH1cblxuICBkcmF3V2Fsa2luZ1JpZ2h0NChjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgZmFjaW5nRnJvbnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCB7IGJvZHlSaWdodFgsIGJ1dHRMZWZ0SW5uZXJYLCBidXR0Qm90dG9tWSwgbGVnV2lkdGgsIGxlZ0hlaWdodCB9ID0gdGhpcztcblxuICAgIC8vIGxlZnQgbGVnXG4gICAgY3R4LmZpbGxTdHlsZSA9IEJST1dOO1xuICAgIGN0eC5maWxsUmVjdChidXR0TGVmdElubmVyWCwgYnV0dEJvdHRvbVksIGxlZ1dpZHRoLCBsZWdIZWlnaHQpO1xuXG4gICAgLy8gcmlnaHQgbGVnXG4gICAgY3R4LmZpbGxTdHlsZSA9IEJST1dOO1xuICAgIGN0eC5maWxsUmVjdChib2R5UmlnaHRYIC0gbGVnV2lkdGgsIGJ1dHRCb3R0b21ZIC0gZihsZWdIZWlnaHQgLyAyKSwgbGVnV2lkdGgsIGxlZ0hlaWdodCk7XG5cbiAgICB0aGlzLmRyYXdVcHBlckJvZHkoY3R4LCB0cnVlKTtcbiAgICBpZiAoZmFjaW5nRnJvbnQpIHRoaXMuZHJhd1NpbXBsZUZhY2UoY3R4LCB0cnVlKTtcbiAgfVxuXG4gIGFkZFN0YW5kaW5nU3ByaXRlcygpOiB2b2lkIHtcbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLmFkZFNwcml0ZShNdWRtYW5TcHJpdGUuU1RBTkRJTkdfQkFDSywgMCwgKGN0eCkgPT4ge1xuICAgICAgdGhpcy5kcmF3U3RhbmRpbmcoY3R4LCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLmFkZFNwcml0ZShNdWRtYW5TcHJpdGUuU1RBTkRJTkdfRlJPTlQsIDAsIChjdHgpID0+IHtcbiAgICAgIHRoaXMuZHJhd1N0YW5kaW5nKGN0eCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLmFkZFNwcml0ZShNdWRtYW5TcHJpdGUuU1RBTkRJTkdfUklHSFRfQkFDSywgMCwgKGN0eCkgPT4ge1xuICAgICAgdGhpcy5kcmF3U3RhbmRpbmdSaWdodChjdHgsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc3ByaXRlUmVuZGVyZXIuYWRkU3ByaXRlKE11ZG1hblNwcml0ZS5TVEFORElOR19SSUdIVF9GUk9OVCwgMCwgKGN0eCkgPT4ge1xuICAgICAgdGhpcy5kcmF3U3RhbmRpbmdSaWdodChjdHgsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zcHJpdGVSZW5kZXJlci5taXJyb3JTcHJpdGUoXG4gICAgICBNdWRtYW5TcHJpdGUuU1RBTkRJTkdfUklHSFRfQkFDSyxcbiAgICAgIE11ZG1hblNwcml0ZS5TVEFORElOR19MRUZUX0JBQ0ssXG4gICAgKTtcblxuICAgIHRoaXMuc3ByaXRlUmVuZGVyZXIubWlycm9yU3ByaXRlKFxuICAgICAgTXVkbWFuU3ByaXRlLlNUQU5ESU5HX1JJR0hUX0ZST05ULFxuICAgICAgTXVkbWFuU3ByaXRlLlNUQU5ESU5HX0xFRlRfRlJPTlQsXG4gICAgKTtcbiAgfVxuXG4gIGFkZFNpdHRpbmdTcHJpdGVzKCk6IHZvaWQge1xuICAgIHRoaXMuc3ByaXRlUmVuZGVyZXIuYWRkU3ByaXRlKE11ZG1hblNwcml0ZS5TSVRUSU5HX0JBQ0ssIDAsIChjdHgpID0+IHtcbiAgICAgIHRoaXMuZHJhd1NpdHRpbmcoY3R4LCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLmFkZFNwcml0ZShNdWRtYW5TcHJpdGUuU0lUVElOR19GUk9OVCwgMCwgKGN0eCkgPT4ge1xuICAgICAgdGhpcy5kcmF3U2l0dGluZyhjdHgsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zcHJpdGVSZW5kZXJlci5hZGRTcHJpdGUoTXVkbWFuU3ByaXRlLlNJVFRJTkdfUklHSFRfQkFDSywgMCwgKGN0eCkgPT4ge1xuICAgICAgdGhpcy5kcmF3U2l0dGluZ1JpZ2h0KGN0eCwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zcHJpdGVSZW5kZXJlci5hZGRTcHJpdGUoTXVkbWFuU3ByaXRlLlNJVFRJTkdfUklHSFRfRlJPTlQsIDAsIChjdHgpID0+IHtcbiAgICAgIHRoaXMuZHJhd1NpdHRpbmdSaWdodChjdHgsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zcHJpdGVSZW5kZXJlci5taXJyb3JTcHJpdGUoXG4gICAgICBNdWRtYW5TcHJpdGUuU0lUVElOR19SSUdIVF9CQUNLLFxuICAgICAgTXVkbWFuU3ByaXRlLlNJVFRJTkdfTEVGVF9CQUNLLFxuICAgICk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLm1pcnJvclNwcml0ZShcbiAgICAgIE11ZG1hblNwcml0ZS5TSVRUSU5HX1JJR0hUX0ZST05ULFxuICAgICAgTXVkbWFuU3ByaXRlLlNJVFRJTkdfTEVGVF9GUk9OVCxcbiAgICApO1xuICB9XG5cbiAgYWRkV2Fsa2luZ1Nwcml0ZXMoKTogdm9pZCB7XG4gICAgdGhpcy5zcHJpdGVSZW5kZXJlci5hZGRTcHJpdGUoTXVkbWFuU3ByaXRlLldBTEtJTkdfMV9CQUNLLCAwLCAoY3R4KSA9PiB7XG4gICAgICB0aGlzLmRyYXdXYWxraW5nMShjdHgsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc3ByaXRlUmVuZGVyZXIuYWRkU3ByaXRlKE11ZG1hblNwcml0ZS5XQUxLSU5HXzJfQkFDSywgMCwgKGN0eCkgPT4ge1xuICAgICAgdGhpcy5kcmF3V2Fsa2luZzIoY3R4LCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLmFkZFNwcml0ZShNdWRtYW5TcHJpdGUuV0FMS0lOR18zX0JBQ0ssIDAsIChjdHgpID0+IHtcbiAgICAgIHRoaXMuZHJhd1dhbGtpbmczKGN0eCwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zcHJpdGVSZW5kZXJlci5hZGRTcHJpdGUoTXVkbWFuU3ByaXRlLldBTEtJTkdfNF9CQUNLLCAwLCAoY3R4KSA9PiB7XG4gICAgICB0aGlzLmRyYXdXYWxraW5nNChjdHgsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc3ByaXRlUmVuZGVyZXIuYWRkU3ByaXRlKE11ZG1hblNwcml0ZS5XQUxLSU5HXzFfRlJPTlQsIDAsIChjdHgpID0+IHtcbiAgICAgIHRoaXMuZHJhd1dhbGtpbmcxKGN0eCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLmFkZFNwcml0ZShNdWRtYW5TcHJpdGUuV0FMS0lOR18yX0ZST05ULCAwLCAoY3R4KSA9PiB7XG4gICAgICB0aGlzLmRyYXdXYWxraW5nMihjdHgsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zcHJpdGVSZW5kZXJlci5hZGRTcHJpdGUoTXVkbWFuU3ByaXRlLldBTEtJTkdfM19GUk9OVCwgMCwgKGN0eCkgPT4ge1xuICAgICAgdGhpcy5kcmF3V2Fsa2luZzMoY3R4LCB0cnVlKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc3ByaXRlUmVuZGVyZXIuYWRkU3ByaXRlKE11ZG1hblNwcml0ZS5XQUxLSU5HXzRfRlJPTlQsIDAsIChjdHgpID0+IHtcbiAgICAgIHRoaXMuZHJhd1dhbGtpbmc0KGN0eCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLmFkZFNwcml0ZShNdWRtYW5TcHJpdGUuV0FMS0lOR19SSUdIVF8xX0JBQ0ssIDAsIChjdHgpID0+IHtcbiAgICAgIHRoaXMuZHJhd1dhbGtpbmdSaWdodDEoY3R4LCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLmFkZFNwcml0ZShNdWRtYW5TcHJpdGUuV0FMS0lOR19SSUdIVF8yX0JBQ0ssIDAsIChjdHgpID0+IHtcbiAgICAgIHRoaXMuZHJhd1dhbGtpbmdSaWdodDIoY3R4LCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLmFkZFNwcml0ZShNdWRtYW5TcHJpdGUuV0FMS0lOR19SSUdIVF8zX0JBQ0ssIDAsIChjdHgpID0+IHtcbiAgICAgIHRoaXMuZHJhd1dhbGtpbmdSaWdodDMoY3R4LCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLmFkZFNwcml0ZShNdWRtYW5TcHJpdGUuV0FMS0lOR19SSUdIVF80X0JBQ0ssIDAsIChjdHgpID0+IHtcbiAgICAgIHRoaXMuZHJhd1dhbGtpbmdSaWdodDQoY3R4LCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLmFkZFNwcml0ZShNdWRtYW5TcHJpdGUuV0FMS0lOR19SSUdIVF8xX0ZST05ULCAwLCAoY3R4KSA9PiB7XG4gICAgICB0aGlzLmRyYXdXYWxraW5nUmlnaHQxKGN0eCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLmFkZFNwcml0ZShNdWRtYW5TcHJpdGUuV0FMS0lOR19SSUdIVF8yX0ZST05ULCAwLCAoY3R4KSA9PiB7XG4gICAgICB0aGlzLmRyYXdXYWxraW5nUmlnaHQyKGN0eCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLmFkZFNwcml0ZShNdWRtYW5TcHJpdGUuV0FMS0lOR19SSUdIVF8zX0ZST05ULCAwLCAoY3R4KSA9PiB7XG4gICAgICB0aGlzLmRyYXdXYWxraW5nUmlnaHQzKGN0eCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLmFkZFNwcml0ZShNdWRtYW5TcHJpdGUuV0FMS0lOR19SSUdIVF80X0ZST05ULCAwLCAoY3R4KSA9PiB7XG4gICAgICB0aGlzLmRyYXdXYWxraW5nUmlnaHQ0KGN0eCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLm1pcnJvclNwcml0ZShcbiAgICAgIE11ZG1hblNwcml0ZS5XQUxLSU5HX1JJR0hUXzFfQkFDSyxcbiAgICAgIE11ZG1hblNwcml0ZS5XQUxLSU5HX0xFRlRfMV9CQUNLLFxuICAgICk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLm1pcnJvclNwcml0ZShcbiAgICAgIE11ZG1hblNwcml0ZS5XQUxLSU5HX1JJR0hUXzJfQkFDSyxcbiAgICAgIE11ZG1hblNwcml0ZS5XQUxLSU5HX0xFRlRfMl9CQUNLLFxuICAgICk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLm1pcnJvclNwcml0ZShcbiAgICAgIE11ZG1hblNwcml0ZS5XQUxLSU5HX1JJR0hUXzNfQkFDSyxcbiAgICAgIE11ZG1hblNwcml0ZS5XQUxLSU5HX0xFRlRfM19CQUNLLFxuICAgICk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLm1pcnJvclNwcml0ZShcbiAgICAgIE11ZG1hblNwcml0ZS5XQUxLSU5HX1JJR0hUXzRfQkFDSyxcbiAgICAgIE11ZG1hblNwcml0ZS5XQUxLSU5HX0xFRlRfNF9CQUNLLFxuICAgICk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLm1pcnJvclNwcml0ZShcbiAgICAgIE11ZG1hblNwcml0ZS5XQUxLSU5HX1JJR0hUXzFfRlJPTlQsXG4gICAgICBNdWRtYW5TcHJpdGUuV0FMS0lOR19MRUZUXzFfRlJPTlQsXG4gICAgKTtcblxuICAgIHRoaXMuc3ByaXRlUmVuZGVyZXIubWlycm9yU3ByaXRlKFxuICAgICAgTXVkbWFuU3ByaXRlLldBTEtJTkdfUklHSFRfMl9GUk9OVCxcbiAgICAgIE11ZG1hblNwcml0ZS5XQUxLSU5HX0xFRlRfMl9GUk9OVCxcbiAgICApO1xuXG4gICAgdGhpcy5zcHJpdGVSZW5kZXJlci5taXJyb3JTcHJpdGUoXG4gICAgICBNdWRtYW5TcHJpdGUuV0FMS0lOR19SSUdIVF8zX0ZST05ULFxuICAgICAgTXVkbWFuU3ByaXRlLldBTEtJTkdfTEVGVF8zX0ZST05ULFxuICAgICk7XG5cbiAgICB0aGlzLnNwcml0ZVJlbmRlcmVyLm1pcnJvclNwcml0ZShcbiAgICAgIE11ZG1hblNwcml0ZS5XQUxLSU5HX1JJR0hUXzRfRlJPTlQsXG4gICAgICBNdWRtYW5TcHJpdGUuV0FMS0lOR19MRUZUXzRfRlJPTlQsXG4gICAgKTtcbiAgfVxuXG4gIGFkZENvbnZvU3ByaXRlcygpOiB2b2lkIHtcbiAgICBjb25zdCBkcmF3QnViYmxlOiBEcmF3U3ByaXRlID0gKGN0eCwgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgdG9wWSwgcmlnaHRYLCBib3R0b21ZLCBsZWZ0WCkgPT4ge1xuICAgICAgY29uc3QgYnViYmxlUmFkaXVzID0gZih3aWR0aCAvIDYpO1xuICAgICAgY29uc3QgdGFpbEhlaWdodCA9IDIgKiBidWJibGVSYWRpdXM7XG4gICAgICBjb25zdCB0YWlsQm90dG9tWSA9IGJvdHRvbVk7XG4gICAgICBjb25zdCB0YWlsTGVmdFggPSBsZWZ0WCArIGJ1YmJsZVJhZGl1cztcbiAgICAgIGNvbnN0IGJ1YmJsZUJvdHRvbVkgPSB0YWlsQm90dG9tWSAtIHRhaWxIZWlnaHQ7XG5cbiAgICAgIGN0eC5maWxsU3R5bGUgPSBXSElURTtcbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IEdSQVlfREFSSztcbiAgICAgIGN0eC5saW5lV2lkdGggPSAxO1xuXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjdHgubW92ZVRvKHRhaWxMZWZ0WCwgYnViYmxlQm90dG9tWSk7XG4gICAgICBjdHguYXJjKGxlZnRYICsgYnViYmxlUmFkaXVzLCBidWJibGVCb3R0b21ZIC0gYnViYmxlUmFkaXVzLCBidWJibGVSYWRpdXMsIDAuNSAqIE1hdGguUEksIE1hdGguUEkpO1xuICAgICAgY3R4LmxpbmVUbyhsZWZ0WCwgdG9wWSArIGJ1YmJsZVJhZGl1cyk7XG4gICAgICBjdHguYXJjKGxlZnRYICsgYnViYmxlUmFkaXVzLCB0b3BZICsgYnViYmxlUmFkaXVzLCBidWJibGVSYWRpdXMsIE1hdGguUEksIC0wLjUgKiBNYXRoLlBJKTtcbiAgICAgIGN0eC5saW5lVG8ocmlnaHRYIC0gYnViYmxlUmFkaXVzLCB0b3BZKTtcbiAgICAgIGN0eC5hcmMocmlnaHRYIC0gYnViYmxlUmFkaXVzLCB0b3BZICsgYnViYmxlUmFkaXVzLCBidWJibGVSYWRpdXMsIC0wLjUgKiBNYXRoLlBJLCAwKTtcbiAgICAgIGN0eC5saW5lVG8ocmlnaHRYLCBidWJibGVCb3R0b21ZIC0gYnViYmxlUmFkaXVzKTtcbiAgICAgIGN0eC5hcmMocmlnaHRYIC0gYnViYmxlUmFkaXVzLCBidWJibGVCb3R0b21ZIC0gYnViYmxlUmFkaXVzLCBidWJibGVSYWRpdXMsIDAsIDAuNSAqIE1hdGguUEkpO1xuICAgICAgY3R4LmxpbmVUbyh0YWlsTGVmdFgsIHRhaWxCb3R0b21ZKTtcbiAgICAgIGN0eC5hcmModGFpbExlZnRYLCB0YWlsQm90dG9tWSAtIGJ1YmJsZVJhZGl1cywgYnViYmxlUmFkaXVzLCAwLjUgKiBNYXRoLlBJLCAtMC41ICogTWF0aC5QSSwgdHJ1ZSk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICBjdHguZmlsbCgpO1xuICAgICAgY3R4LnN0cm9rZSgpO1xuICAgIH07XG5cbiAgICB0aGlzLmNvbnZvUmVuZGVyZXIuYWRkU3ByaXRlKENvbnZvU3ByaXRlLkJMQU5LLCAxLCAoY3R4LCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCB0b3BZLCByaWdodFgsIGJvdHRvbVksIGxlZnRYKSA9PiB7XG4gICAgICBkcmF3QnViYmxlKGN0eCwgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgdG9wWSwgcmlnaHRYLCBib3R0b21ZLCBsZWZ0WCk7XG4gICAgfSk7XG5cbiAgICBUQUxLSU5HX1NQUklURVMuZm9yRWFjaCgoc3ByaXRlKSA9PiB7XG4gICAgICB0aGlzLmNvbnZvUmVuZGVyZXIuYWRkU3ByaXRlKHNwcml0ZSwgMSwgKGN0eCwgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgdG9wWSwgcmlnaHRYLCBib3R0b21ZLCBsZWZ0WCkgPT4ge1xuICAgICAgICBkcmF3QnViYmxlKGN0eCwgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgdG9wWSwgcmlnaHRYLCBib3R0b21ZLCBsZWZ0WCk7XG5cbiAgICAgICAgY29uc3QgYnViYmxlUmFkaXVzID0gZih3aWR0aCAvIDYpO1xuICAgICAgICBjb25zdCB0YWlsSGVpZ2h0ID0gMiAqIGJ1YmJsZVJhZGl1cztcbiAgICAgICAgY29uc3QgcHJpbnRhYmxlVG9wWSA9IHRvcFkgKyBidWJibGVSYWRpdXM7XG4gICAgICAgIGNvbnN0IHByaW50YWJsZUxlZnRYID0gbGVmdFggKyBidWJibGVSYWRpdXM7XG4gICAgICAgIGNvbnN0IHByaW50YWJsZUhlaWdodCA9IGhlaWdodCAtIHRhaWxIZWlnaHQgLSAoMiAqIGJ1YmJsZVJhZGl1cykgLSAyO1xuICAgICAgICBjb25zdCBwcmludGFibGVXaWR0aCA9IHdpZHRoIC0gKDIgKiBidWJibGVSYWRpdXMpIC0gMjtcblxuICAgICAgICBjb25zdCBsaW5lQ291bnQgPSBmKE1hdGgucmFuZG9tKCkgKiAzKSArIDE7XG4gICAgICAgIGNvbnN0IGxpbmVXaWR0aCA9IGMocHJpbnRhYmxlSGVpZ2h0IC8gOCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZUNvdW50OyBpKyspIHtcbiAgICAgICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gZihwcmludGFibGVIZWlnaHQgLyBsaW5lQ291bnQpO1xuICAgICAgICAgIGNvbnN0IGxpbmVDZW50ZXJZID0gcHJpbnRhYmxlVG9wWSArIChpICogbGluZUhlaWdodCkgKyBmKGxpbmVIZWlnaHQgLyAyKTtcbiAgICAgICAgICBjb25zdCBsaW5lVG9wWSA9IGxpbmVDZW50ZXJZIC0gZihsaW5lV2lkdGggLyAyKTtcbiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gQkxBQ0s7XG4gICAgICAgICAgY3R4LmZpbGxSZWN0KHByaW50YWJsZUxlZnRYLCBsaW5lVG9wWSwgcHJpbnRhYmxlV2lkdGgsIGxpbmVXaWR0aCk7XG5cbiAgICAgICAgICBjb25zdCBicmVha0NvdW50ID0gZihNYXRoLnJhbmRvbSgpICogMyk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBicmVha0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJyZWFrTGVmdFggPSBwcmludGFibGVMZWZ0WCArIE1hdGgubWF4KDIsIGYoTWF0aC5yYW5kb20oKSAqIChwcmludGFibGVXaWR0aCAtIDIpKSk7XG4gICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gV0hJVEU7XG4gICAgICAgICAgICBjdHguZmlsbFJlY3QoYnJlYWtMZWZ0WCwgbGluZVRvcFksIDIsIGxpbmVXaWR0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG1pcnJvclJlbmRlcmVyKG9yaWdpbmFsOiBSZW5kZXJlcik6IFJlbmRlcmVyIHtcbiAgICBjb25zdCB7IGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQgfSA9IHRoaXM7XG5cbiAgICBjb25zdCBtaXJyb3JlZCA9IG5ldyBSZW5kZXJlcihcbiAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksXG4gICAgICBjYW52YXNXaWR0aCxcbiAgICAgIGNhbnZhc0hlaWdodCxcbiAgICAgIG9yaWdpbmFsLmZwcyxcbiAgICApO1xuXG4gICAgbWlycm9yZWQuZHJhd09uY2UoKGN0eCkgPT4ge1xuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGN0eC5zY2FsZSgtMSwgMSk7XG4gICAgICBjdHguZHJhd0ltYWdlKG9yaWdpbmFsLmNhbnZhcywgMCwgMCwgLTEgKiBjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0KTtcbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWlycm9yZWQ7XG4gIH1cblxuICBkcmF3TXVkbWFuKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBtdWRtYW46IE11ZG1hbiwgeDogbnVtYmVyLCB5OiBudW1iZXIsIHRpbWVzdGFtcDogRE9NSGlnaFJlc1RpbWVTdGFtcCk6IHZvaWQge1xuICAgIGxldCBzcHJpdGVJZDogbnVtYmVyO1xuICAgIGNvbnN0IHsgeERpcmVjdGlvbiwgeURpcmVjdGlvbiB9ID0gbXVkbWFuLmxvY2FsLmRhdGE7XG5cbiAgICBpZiAobXVkbWFuLmxvY2FsLmhhc1BhdGgpIHtcbiAgICAgIGNvbnN0IGN5Y2xlTXMgPSAyMDA7XG4gICAgICBjb25zdCBjeWNsZVBvc2l0aW9uID0gZig0ICogKHRpbWVzdGFtcCAlIGN5Y2xlTXMpIC8gY3ljbGVNcyk7XG4gICAgICBsZXQgc3ByaXRlSWRzOiBudW1iZXJbXTtcblxuICAgICAgaWYgKHhEaXJlY3Rpb24gPT09IDApIHtcbiAgICAgICAgc3ByaXRlSWRzID0geURpcmVjdGlvbiA8IDAgPyBXQUxLSU5HX1NQUklURVNfQkFDSyA6IFdBTEtJTkdfU1BSSVRFU19GUk9OVDtcbiAgICAgIH0gZWxzZSBpZiAoeERpcmVjdGlvbiA8IDApIHtcbiAgICAgICAgc3ByaXRlSWRzID0geURpcmVjdGlvbiA8IDAgPyBXQUxLSU5HX0xFRlRfU1BSSVRFU19CQUNLIDogV0FMS0lOR19MRUZUX1NQUklURVNfRlJPTlQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcHJpdGVJZHMgPSB5RGlyZWN0aW9uIDwgMCA/IFdBTEtJTkdfUklHSFRfU1BSSVRFU19CQUNLIDogV0FMS0lOR19SSUdIVF9TUFJJVEVTX0ZST05UO1xuICAgICAgfVxuXG4gICAgICBzcHJpdGVJZCA9IHNwcml0ZUlkc1tjeWNsZVBvc2l0aW9uXTtcbiAgICB9IGVsc2UgaWYgKG11ZG1hbi5sb2NhbC5kYXRhLnNpdHRpbmcpIHtcbiAgICAgIGlmICh4RGlyZWN0aW9uID09PSAwKSB7XG4gICAgICAgIHNwcml0ZUlkID0geURpcmVjdGlvbiA8IDAgPyBNdWRtYW5TcHJpdGUuU0lUVElOR19CQUNLIDogTXVkbWFuU3ByaXRlLlNJVFRJTkdfRlJPTlQ7XG4gICAgICB9IGVsc2UgaWYgKHhEaXJlY3Rpb24gPCAwKSB7XG4gICAgICAgIHNwcml0ZUlkID0geURpcmVjdGlvbiA8IDAgPyBNdWRtYW5TcHJpdGUuU0lUVElOR19MRUZUX0JBQ0sgOiBNdWRtYW5TcHJpdGUuU0lUVElOR19MRUZUX0ZST05UO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3ByaXRlSWQgPSB5RGlyZWN0aW9uIDwgMCA/IE11ZG1hblNwcml0ZS5TSVRUSU5HX1JJR0hUX0JBQ0sgOiBNdWRtYW5TcHJpdGUuU0lUVElOR19SSUdIVF9GUk9OVDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHhEaXJlY3Rpb24gPT09IDApIHtcbiAgICAgICAgc3ByaXRlSWQgPSB5RGlyZWN0aW9uIDwgMCA/IE11ZG1hblNwcml0ZS5TVEFORElOR19CQUNLIDogTXVkbWFuU3ByaXRlLlNUQU5ESU5HX0ZST05UO1xuICAgICAgfSBlbHNlIGlmICh4RGlyZWN0aW9uIDwgMCkge1xuICAgICAgICBzcHJpdGVJZCA9IHlEaXJlY3Rpb24gPCAwID8gTXVkbWFuU3ByaXRlLlNUQU5ESU5HX0xFRlRfQkFDSyA6IE11ZG1hblNwcml0ZS5TVEFORElOR19MRUZUX0ZST05UO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3ByaXRlSWQgPSB5RGlyZWN0aW9uIDwgMCA/IE11ZG1hblNwcml0ZS5TVEFORElOR19SSUdIVF9CQUNLIDogTXVkbWFuU3ByaXRlLlNUQU5ESU5HX1JJR0hUX0ZST05UO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3ByaXRlUmVuZGVyZXIuZHJhd1Nwcml0ZShzcHJpdGVJZCwgY3R4LCB4LCB5LCAwLCAtMC4yNSAqIHRoaXMubXVkbWFuU2l6ZSk7XG4gIH1cblxuICBkcmF3Q29udm8oY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIG11ZG1hbjogTXVkbWFuLCB4OiBudW1iZXIsIHk6IG51bWJlciwgdGltZXN0YW1wOiBET01IaWdoUmVzVGltZVN0YW1wKTogdm9pZCB7XG4gICAgY29uc3QgeyB0YWxraW5nVG8gfSA9IG11ZG1hbi5sb2NhbC5kYXRhO1xuXG4gICAgLy8gaWYgeW91J3JlIHRhbGtpbmcgdG8gc29tZWJvZHkgYW5kIHRoZXkncmUgbm90IGdvaW5nIHNvbWV3aGVyZS4uLlxuICAgIGlmICh0YWxraW5nVG8gJiYgIXRhbGtpbmdUby5sb2NhbC5oYXNQYXRoKSB7XG4gICAgICBjb25zdCBjeWNsZU1zID0gNDAwMDtcbiAgICAgIGNvbnN0IGN5Y2xlUG9zaXRpb24gPSBmKFRBTEtJTkdfU1BSSVRFUy5sZW5ndGggKiAodGltZXN0YW1wICUgY3ljbGVNcykgLyBjeWNsZU1zKTtcbiAgICAgIGNvbnN0IHRhbGtpbmdTcHJpdGUgPSBUQUxLSU5HX1NQUklURVNbKG11ZG1hbi5pZCArIGN5Y2xlUG9zaXRpb24pICUgVEFMS0lOR19TUFJJVEVTLmxlbmd0aF07XG4gICAgICB0aGlzLmNvbnZvUmVuZGVyZXIuZHJhd1Nwcml0ZSh0YWxraW5nU3ByaXRlLCBjdHgsIHgsIHksIDEgKiB0aGlzLm11ZG1hblNpemUsIC0xICogdGhpcy5tdWRtYW5TaXplKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBCb3R0bGUgZnJvbSBcIkAvbW9kZWxzL2l0ZW1zL2NvbnRhaW5lcnMvQm90dGxlXCI7XG5pbXBvcnQgU3ByaXRlUmVuZGVyZXIgZnJvbSBcIkAvcmVuZGVyaW5nL2Jhc2UvU3ByaXRlUmVuZGVyZXJcIjtcbmltcG9ydCB7IEJMVUUsIFdISVRFIH0gZnJvbSBcIkAvcmVuZGVyaW5nL211ZHN0dWZmL2NvbG9yc1wiO1xuaW1wb3J0IHsgZiB9IGZyb20gXCJAL3V0aWxpdGllcy9tYXRoXCI7XG5cbmV4cG9ydCBjb25zdCBlbnVtIEJvdHRsZVNwcml0ZSB7XG4gIEVNUFRZLFxuICBXQVRFUl9GVUxMLFxuICBXQVRFUl9QQVJUSUFMLFxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb3R0bGVSZW5kZXJlciBleHRlbmRzIFNwcml0ZVJlbmRlcmVyIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRpbGVTaXplOiBudW1iZXIpIHtcbiAgICBzdXBlcih0aWxlU2l6ZSAvIDIuNSwgdGlsZVNpemUgLyAyKTtcblxuICAgIHRoaXMuYWRkU3ByaXRlKEJvdHRsZVNwcml0ZS5FTVBUWSwgMSwgKGN0eCwgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgdG9wWSwgcmlnaHRYLCBib3R0b21ZLCBsZWZ0WCkgPT4ge1xuICAgICAgY29uc3QgYm90dGxlUGF0aCA9IEJvdHRsZVJlbmRlcmVyLmNyZWF0ZUJvdHRsZVBhdGgod2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgdG9wWSwgcmlnaHRYLCBib3R0b21ZLCBsZWZ0WCk7XG5cbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IFdISVRFO1xuICAgICAgY3R4LmxpbmVXaWR0aCA9IDE7XG4gICAgICBjdHguc3Ryb2tlKGJvdHRsZVBhdGgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRTcHJpdGUoQm90dGxlU3ByaXRlLldBVEVSX0ZVTEwsIDEsIChjdHgsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIHRvcFksIHJpZ2h0WCwgYm90dG9tWSwgbGVmdFgpID0+IHtcbiAgICAgIGNvbnN0IGJvdHRsZVBhdGggPSBCb3R0bGVSZW5kZXJlci5jcmVhdGVCb3R0bGVQYXRoKHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIHRvcFksIHJpZ2h0WCwgYm90dG9tWSwgbGVmdFgpO1xuXG4gICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICBjdHguY2xpcChib3R0bGVQYXRoKTtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBCTFVFO1xuICAgICAgY3R4LmZpbGxSZWN0KGxlZnRYLCB0b3BZICsgZihoZWlnaHQgLyA0KSwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAgIGN0eC5yZXN0b3JlKCk7XG5cbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IFdISVRFO1xuICAgICAgY3R4LmxpbmVXaWR0aCA9IDE7XG4gICAgICBjdHguc3Ryb2tlKGJvdHRsZVBhdGgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRTcHJpdGUoQm90dGxlU3ByaXRlLldBVEVSX1BBUlRJQUwsIDEsIChjdHgsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIHRvcFksIHJpZ2h0WCwgYm90dG9tWSwgbGVmdFgpID0+IHtcbiAgICAgIGNvbnN0IGJvdHRsZVBhdGggPSBCb3R0bGVSZW5kZXJlci5jcmVhdGVCb3R0bGVQYXRoKHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIHRvcFksIHJpZ2h0WCwgYm90dG9tWSwgbGVmdFgpO1xuXG4gICAgICBjdHguc2F2ZSgpO1xuXG4gICAgICBjdHguY2xpcChib3R0bGVQYXRoKTtcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBCTFVFO1xuICAgICAgY3R4LmZpbGxSZWN0KGxlZnRYLCBib3R0b21ZIC0gZihoZWlnaHQgLyA0KSwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAgIGN0eC5yZXN0b3JlKCk7XG5cbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IFdISVRFO1xuICAgICAgY3R4LmxpbmVXaWR0aCA9IDE7XG4gICAgICBjdHguc3Ryb2tlKGJvdHRsZVBhdGgpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUJvdHRsZVBhdGgoXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBjZW50ZXJYOiBudW1iZXIsXG4gICAgY2VudGVyWTogbnVtYmVyLFxuICAgIHRvcFk6IG51bWJlcixcbiAgICByaWdodFg6IG51bWJlcixcbiAgICBib3R0b21ZOiBudW1iZXIsXG4gICAgbGVmdFg6IG51bWJlcixcbiAgKTogUGF0aDJEIHtcbiAgICBjb25zdCBuZWNrV2lkdGggPSBmKHdpZHRoIC8gMik7XG4gICAgY29uc3QgbmVja0xlZnRYID0gY2VudGVyWCAtIGYobmVja1dpZHRoIC8gMik7XG4gICAgY29uc3QgbmVja1JpZ2h0WCA9IGNlbnRlclggKyBmKG5lY2tXaWR0aCAvIDIpO1xuICAgIGNvbnN0IGJvdHRvbVJhZGl1cyA9IGYod2lkdGggLyA0KTtcbiAgICBjb25zdCBsaXBCb3R0b21ZID0gdG9wWSArIGYoaGVpZ2h0IC8gOCk7XG4gICAgY29uc3Qgc2hvdWxkZXJZID0gdG9wWSArIGYoaGVpZ2h0IC8gNCk7XG4gICAgY29uc3QgbmVja1JhZGl1cyA9IGYoKHNob3VsZGVyWSAtIGxpcEJvdHRvbVkpIC8gMik7XG5cbiAgICBjb25zdCBib3R0bGVQYXRoID0gbmV3IFBhdGgyRCgpO1xuXG4gICAgYm90dGxlUGF0aC5tb3ZlVG8obmVja0xlZnRYLCB0b3BZKTtcbiAgICBib3R0bGVQYXRoLmxpbmVUbyhuZWNrUmlnaHRYLCB0b3BZKTtcbiAgICBib3R0bGVQYXRoLmxpbmVUbyhuZWNrUmlnaHRYLCBsaXBCb3R0b21ZKTtcbiAgICBib3R0bGVQYXRoLmFyYyhuZWNrUmlnaHRYLCBsaXBCb3R0b21ZICsgbmVja1JhZGl1cywgbmVja1JhZGl1cywgLTAuNSAqIE1hdGguUEksIDAuNSAqIE1hdGguUEksIHRydWUpO1xuICAgIGJvdHRsZVBhdGgubGluZVRvKHJpZ2h0WCwgc2hvdWxkZXJZKTtcbiAgICBib3R0bGVQYXRoLmxpbmVUbyhyaWdodFgsIGJvdHRvbVkgLSBib3R0b21SYWRpdXMpO1xuICAgIGJvdHRsZVBhdGguYXJjKHJpZ2h0WCAtIGJvdHRvbVJhZGl1cywgYm90dG9tWSAtIGJvdHRvbVJhZGl1cywgYm90dG9tUmFkaXVzLCAwLCAwLjUgKiBNYXRoLlBJKTtcbiAgICBib3R0bGVQYXRoLmxpbmVUbyhsZWZ0WCArIGJvdHRvbVJhZGl1cywgYm90dG9tWSk7XG4gICAgYm90dGxlUGF0aC5hcmMobGVmdFggKyBib3R0b21SYWRpdXMsIGJvdHRvbVkgLSBib3R0b21SYWRpdXMsIGJvdHRvbVJhZGl1cywgMC41ICogTWF0aC5QSSwgTWF0aC5QSSk7XG4gICAgYm90dGxlUGF0aC5saW5lVG8obGVmdFgsIHNob3VsZGVyWSk7XG4gICAgYm90dGxlUGF0aC5saW5lVG8obGVmdFggKyBmKCh3aWR0aCAtIG5lY2tXaWR0aCkgLyAyKSwgc2hvdWxkZXJZKTtcbiAgICBib3R0bGVQYXRoLmFyYyhuZWNrTGVmdFgsIGxpcEJvdHRvbVkgKyBuZWNrUmFkaXVzLCBuZWNrUmFkaXVzLCAwLjUgKiBNYXRoLlBJLCAtMC41ICogTWF0aC5QSSwgdHJ1ZSk7XG4gICAgYm90dGxlUGF0aC5saW5lVG8obmVja0xlZnRYLCB0b3BZKTtcbiAgICBib3R0bGVQYXRoLmNsb3NlUGF0aCgpO1xuXG4gICAgcmV0dXJuIGJvdHRsZVBhdGg7XG4gIH1cblxuICBkcmF3Qm90dGxlKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIGJvdHRsZTogQm90dGxlLFxuICAgIHg6IG51bWJlcixcbiAgICB5OiBudW1iZXIsXG4gICAgc3ByaXRlT2Zmc2V0WD86IG51bWJlcixcbiAgICBzcHJpdGVPZmZzZXRZPzogbnVtYmVyLFxuICAgIHNjYWxlPzogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBzcHJpdGVJZCA9IGJvdHRsZS5pc0VtcHR5XG4gICAgICA/IEJvdHRsZVNwcml0ZS5FTVBUWVxuICAgICAgOiAoYm90dGxlLnBlcmNlbnRGdWxsIDwgMC42NyA/IEJvdHRsZVNwcml0ZS5XQVRFUl9QQVJUSUFMIDogQm90dGxlU3ByaXRlLldBVEVSX0ZVTEwpO1xuXG4gICAgdGhpcy5kcmF3U3ByaXRlKHNwcml0ZUlkLCBjdHgsIHgsIHksIHNwcml0ZU9mZnNldFgsIHNwcml0ZU9mZnNldFksIHNjYWxlKTtcbiAgfVxufVxuIiwiaW1wb3J0IFNwcml0ZVJlbmRlcmVyIGZyb20gXCJAL3JlbmRlcmluZy9iYXNlL1Nwcml0ZVJlbmRlcmVyXCI7XG5pbXBvcnQgeyBmLCByYW5kIH0gZnJvbSBcIkAvdXRpbGl0aWVzL21hdGhcIjtcbmltcG9ydCB7IHdlaWdodExvdyB9IGZyb20gXCJAL3V0aWxpdGllcy93ZWlnaHRcIjtcblxuZXhwb3J0IGNvbnN0IGVudW0gRmxhbWVTcHJpdGUge1xuICBGTEFNRV8xLFxuICBGTEFNRV8yLFxuICBGTEFNRV8zLFxuICBGTEFNRV80LFxuICBGTEFNRV81LFxuICBGTEFNRV82LFxuICBGTEFNRV83LFxuICBGTEFNRV84LFxufVxuXG5leHBvcnQgY29uc3QgRkxBTUVfU1BSSVRFUyA9IFtcbiAgRmxhbWVTcHJpdGUuRkxBTUVfMSxcbiAgRmxhbWVTcHJpdGUuRkxBTUVfMixcbiAgRmxhbWVTcHJpdGUuRkxBTUVfMyxcbiAgRmxhbWVTcHJpdGUuRkxBTUVfNCxcbiAgRmxhbWVTcHJpdGUuRkxBTUVfNSxcbiAgRmxhbWVTcHJpdGUuRkxBTUVfNixcbiAgRmxhbWVTcHJpdGUuRkxBTUVfNyxcbiAgRmxhbWVTcHJpdGUuRkxBTUVfOCxcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsYW1lUmVuZGVyZXIgZXh0ZW5kcyBTcHJpdGVSZW5kZXJlciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0aWxlU2l6ZTogbnVtYmVyKSB7XG4gICAgc3VwZXIodGlsZVNpemUsIHRpbGVTaXplICogMik7XG5cbiAgICBGTEFNRV9TUFJJVEVTLmZvckVhY2goKHNwcml0ZSkgPT4ge1xuICAgICAgdGhpcy5hZGRTcHJpdGUoc3ByaXRlLCAwLCAoY3R4LCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCB0b3BZLCByaWdodFgsIGJvdHRvbVksIGxlZnRYKSA9PiB7XG4gICAgICAgIGNvbnN0IGZsYW1lQ2VudGVyWSA9IGNlbnRlclkgLSBmKGhlaWdodCAvIDE2KTtcbiAgICAgICAgRmxhbWVSZW5kZXJlci5kcmF3UmFuZG9tRmxhbWVDb21wb25lbnQoY3R4LCB3aWR0aCwgY2VudGVyWCwgZmxhbWVDZW50ZXJZLCBcInJlZFwiKTtcbiAgICAgICAgRmxhbWVSZW5kZXJlci5kcmF3UmFuZG9tRmxhbWVDb21wb25lbnQoY3R4LCB3aWR0aCwgY2VudGVyWCwgZmxhbWVDZW50ZXJZLCBcInllbGxvd1wiKTtcbiAgICAgICAgRmxhbWVSZW5kZXJlci5kcmF3UmFuZG9tRmxhbWVDb21wb25lbnQoY3R4LCB3aWR0aCwgY2VudGVyWCwgZmxhbWVDZW50ZXJZLCBcIm9yYW5nZVwiKTtcbiAgICAgICAgRmxhbWVSZW5kZXJlci5kcmF3UmFuZG9tRmxhbWVDb21wb25lbnQoY3R4LCB3aWR0aCAvIDIsIGNlbnRlclgsIGZsYW1lQ2VudGVyWSAtIGYoMC4yNSAqIHJhbmQoKSAqIGhlaWdodCksIFwicmVkXCIpO1xuICAgICAgICBGbGFtZVJlbmRlcmVyLmRyYXdSYW5kb21GbGFtZUNvbXBvbmVudChjdHgsIHdpZHRoIC8gMiwgY2VudGVyWCwgZmxhbWVDZW50ZXJZIC0gZigwLjI1ICogcmFuZCgpICogaGVpZ2h0KSwgXCJyZWRcIik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkcmF3UmFuZG9tRmxhbWVDb21wb25lbnQoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBjZW50ZXJYOiBudW1iZXIsXG4gICAgY2VudGVyWTogbnVtYmVyLFxuICAgIGNvbG9yOiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHNpemUgPSBmKCgwLjEgKiB3aWR0aCkgKyAoMC4yNSAqIHJhbmQoKSAqIHdpZHRoKSk7XG4gICAgY29uc3QgaGFsZlNpemUgPSBmKHNpemUgLyAyKTtcbiAgICBjb25zdCB4Sml0dGVyID0gKHJhbmQoKSAtIDAuNSkgKiBzaXplO1xuICAgIGNvbnN0IHlKaXR0ZXIgPSAod2VpZ2h0TG93KHJhbmQoKSkgLSAwLjUpICogc2l6ZTtcbiAgICBjb25zdCBhbmdsZSA9IHJhbmQoKSAqICgyICogTWF0aC5QSSk7XG4gICAgY29uc3QgeCA9IGYoY2VudGVyWCAtIGhhbGZTaXplICsgeEppdHRlcik7XG4gICAgY29uc3QgeSA9IGYoY2VudGVyWSAtIGhhbGZTaXplICsgeUppdHRlcik7XG5cbiAgICBjdHgudHJhbnNsYXRlKGNlbnRlclgsIGNlbnRlclkpO1xuICAgIGN0eC5yb3RhdGUoYW5nbGUpO1xuICAgIGN0eC50cmFuc2xhdGUoLTEgKiBjZW50ZXJYLCAtMSAqIGNlbnRlclkpO1xuICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcbiAgICBjdHguZ2xvYmFsQWxwaGEgPSAwLjI1ICsgKDAuNzUgKiByYW5kKCkpO1xuICAgIGN0eC5maWxsUmVjdCh4LCB5LCBzaXplLCBzaXplKTtcblxuICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7XG4gICAgY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgfVxuXG4gIGRyYXdBbmltYXRlZChcbiAgICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgICB0aW1lc3RhbXA6IG51bWJlcixcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHNwcml0ZU9mZnNldFg/OiBudW1iZXIsXG4gICAgc3ByaXRlT2Zmc2V0WT86IG51bWJlcixcbiAgICBzY2FsZT86IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZmxhbWVTcHJpdGUgPSBGTEFNRV9TUFJJVEVTW2YoRkxBTUVfU1BSSVRFUy5sZW5ndGggKiAoKHRpbWVzdGFtcCAlIDIwMDApIC8gMjAwMCkpXTtcbiAgICB0aGlzLmRyYXdTcHJpdGUoZmxhbWVTcHJpdGUsIGN0eCwgeCwgeSwgc3ByaXRlT2Zmc2V0WCwgc3ByaXRlT2Zmc2V0WSwgc2NhbGUpO1xuICB9XG59XG4iLCJpbXBvcnQgU3ByaXRlUmVuZGVyZXIgZnJvbSBcIkAvcmVuZGVyaW5nL2Jhc2UvU3ByaXRlUmVuZGVyZXJcIjtcbmltcG9ydCB7IERBUktfQlJPV04sIERBUktfR1JFRU4sIEZPUkVTVF9HUkVFTiwgUEVSVV9CUk9XTiwgU0FORFlfQlJPV04gfSBmcm9tIFwiQC9yZW5kZXJpbmcvbXVkc3R1ZmYvY29sb3JzXCI7XG5pbXBvcnQgeyBmLCByYW5kIH0gZnJvbSBcIkAvdXRpbGl0aWVzL21hdGhcIjtcblxuZXhwb3J0IGNvbnN0IGVudW0gVHJlZVNwcml0ZSB7XG4gIFNUVU1QLFxuICBCT1VHSFNfMSxcbiAgQk9VR0hTXzIsXG4gIEJPVUdIU18zLFxuICBCT1VHSFNfNCxcbn1cblxuZXhwb3J0IGNvbnN0IEJPVUdIX1NQUklURVMgPSBbXG4gIFRyZWVTcHJpdGUuQk9VR0hTXzEsXG4gIFRyZWVTcHJpdGUuQk9VR0hTXzIsXG4gIFRyZWVTcHJpdGUuQk9VR0hTXzMsXG4gIFRyZWVTcHJpdGUuQk9VR0hTXzQsXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUcmVlUmVuZGVyZXIgZXh0ZW5kcyBTcHJpdGVSZW5kZXJlciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0aWxlU2l6ZTogbnVtYmVyKSB7XG4gICAgc3VwZXIodGlsZVNpemUgKiA0LCB0aWxlU2l6ZSAqIDQpO1xuXG4gICAgdGhpcy5hZGRTcHJpdGUoXG4gICAgICBUcmVlU3ByaXRlLlNUVU1QLFxuICAgICAgMSxcbiAgICAgIHRpbGVTaXplLFxuICAgICAgdGlsZVNpemUsXG4gICAgICAoY3R4LCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCB0b3BZLCByaWdodFgsIGJvdHRvbVksIGxlZnRYKSA9PiB7XG4gICAgICAgIGNvbnN0IHRydW5rUmFkaXVzID0gZih3aWR0aCAvIDQpO1xuICAgICAgICBjb25zdCB0cnVua0hlaWdodCA9IGYoaGVpZ2h0IC8gMyk7XG4gICAgICAgIGNvbnN0IHNpZGVzQm90dG9tWSA9IGJvdHRvbVkgLSB0cnVua1JhZGl1cztcbiAgICAgICAgY29uc3Qgc2lkZXNUb3BZID0gc2lkZXNCb3R0b21ZIC0gdHJ1bmtIZWlnaHQ7XG5cbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IERBUktfQlJPV047XG4gICAgICAgIGN0eC5saW5lV2lkdGggPSAyO1xuICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSBEQVJLX0JST1dOO1xuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGN0eC5hcmMoY2VudGVyWCwgc2lkZXNCb3R0b21ZLCB0cnVua1JhZGl1cywgMCwgTWF0aC5QSSk7XG4gICAgICAgIGN0eC5saW5lVG8oY2VudGVyWCAtIHRydW5rUmFkaXVzLCBzaWRlc1RvcFkpO1xuICAgICAgICBjdHgubGluZVRvKGNlbnRlclggKyB0cnVua1JhZGl1cywgc2lkZXNUb3BZKTtcbiAgICAgICAgY3R4LmxpbmVUbyhjZW50ZXJYICsgdHJ1bmtSYWRpdXMsIHNpZGVzQm90dG9tWSk7XG4gICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgIGN0eC5zdHJva2UoKTtcblxuICAgICAgICBjdHguZmlsbFN0eWxlID0gU0FORFlfQlJPV047XG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgY3R4LmFyYyhjZW50ZXJYLCBzaWRlc1RvcFksIHRydW5rUmFkaXVzLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgIGN0eC5zdHJva2UoKTtcblxuICAgICAgICBjdHguZmlsbFN0eWxlID0gUEVSVV9CUk9XTjtcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHguYXJjKGNlbnRlclgsIHNpZGVzVG9wWSwgZih0cnVua1JhZGl1cyAvIDIpLCAwLCAyICogTWF0aC5QSSk7XG4gICAgICAgIGN0eC5maWxsKCk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICBCT1VHSF9TUFJJVEVTLmZvckVhY2goKHNwcml0ZSkgPT4ge1xuICAgICAgY29uc3QgeyB0aWxlU2l6ZSB9ID0gdGhpcztcbiAgICAgIHRoaXMuYWRkU3ByaXRlKHNwcml0ZSwgMSwgKGN0eCwgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgdG9wWSwgcmlnaHRYLCBib3R0b21ZLCBsZWZ0WCkgPT4ge1xuICAgICAgICBjb25zdCByb3VnaFN0dW1wQ2VudGVyWSA9IGNlbnRlclkgLSBmKHRpbGVTaXplIC8gOCk7XG4gICAgICAgIGNvbnN0IHJvdWdoU3R1bXBSYWRpdXMgPSBmKHRpbGVTaXplIC8gMyk7XG5cbiAgICAgICAgLy8ga2luZCBvZiBqdXN0IGxpa2UgYSBiYXNlIGdyZWVuIGNlbnRyYWwgYm91Z2ggc28gdGhleSBhbGwgaGF2ZSBzb21lXG4gICAgICAgIC8vIHNoaXQgYXQgdGhlIGNlbnRlclxuICAgICAgICBUcmVlUmVuZGVyZXIuZHJhd1JhbmRvbUJvdWdoQ29tcG9uZW50KFxuICAgICAgICAgIGN0eCxcbiAgICAgICAgICBjZW50ZXJYLFxuICAgICAgICAgIHJvdWdoU3R1bXBDZW50ZXJZLFxuICAgICAgICAgIHJvdWdoU3R1bXBSYWRpdXMsXG4gICAgICAgICAgcm91Z2hTdHVtcFJhZGl1cyxcbiAgICAgICAgICAxLFxuICAgICAgICAgIDEsXG4gICAgICAgICAgREFSS19HUkVFTixcbiAgICAgICAgICAwLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHNvbWUgYmlnZ2VyLCBkYXJrZXIsIG1vcmUgb3BhcXVlLCBncmVlbiBndXlzXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICAgICAgVHJlZVJlbmRlcmVyLmRyYXdSYW5kb21Cb3VnaENvbXBvbmVudChcbiAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgIGNlbnRlclgsXG4gICAgICAgICAgICByb3VnaFN0dW1wQ2VudGVyWSAtIHJvdWdoU3R1bXBSYWRpdXMsXG4gICAgICAgICAgICBmKHRpbGVTaXplIC8gMiksXG4gICAgICAgICAgICBmKHRpbGVTaXplIC8gMS41KSxcbiAgICAgICAgICAgIDAuNSxcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICBEQVJLX0dSRUVOLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc29tZSBzbWFsbGVyLCBsaWdodGVyLCBsZXNzIG9wYXF1ZSwgZ3JlZW4gZ3V5cyAod2l0aCB3aWRlciByYW5nZXMpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICAgICAgVHJlZVJlbmRlcmVyLmRyYXdSYW5kb21Cb3VnaENvbXBvbmVudChcbiAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgIGNlbnRlclgsXG4gICAgICAgICAgICByb3VnaFN0dW1wQ2VudGVyWSAtIHJvdWdoU3R1bXBSYWRpdXMsXG4gICAgICAgICAgICBmKHRpbGVTaXplIC8gMTYpLFxuICAgICAgICAgICAgZih0aWxlU2l6ZSAvIDIpLFxuICAgICAgICAgICAgMC4xLFxuICAgICAgICAgICAgMC41LFxuICAgICAgICAgICAgRk9SRVNUX0dSRUVOLFxuICAgICAgICAgICAgMyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBkcmF3UmFuZG9tQm91Z2hDb21wb25lbnQoXG4gICAgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgY2VudGVyWDogbnVtYmVyLFxuICAgIGNlbnRlclk6IG51bWJlcixcbiAgICBtaW5SYWRpdXM6IG51bWJlcixcbiAgICBtYXhSYWRpdXM6IG51bWJlcixcbiAgICBtaW5PcGFjaXR5OiBudW1iZXIsXG4gICAgbWF4T3BhY2l0eTogbnVtYmVyLFxuICAgIGNvbG9yOiBzdHJpbmcsXG4gICAgc3ByZWFkOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2VSYWRpdXMgPSBmKG1pblJhZGl1cyArIChyYW5kKCkgKiAobWF4UmFkaXVzIC0gbWluUmFkaXVzKSkpO1xuICAgIGNvbnN0IGF2Z1JhZGl1cyA9IChtYXhSYWRpdXMgKyBtaW5SYWRpdXMpIC8gMjtcbiAgICBjb25zdCB4Sml0dGVyID0gZigocmFuZCgpIC0gMC41KSAqIGF2Z1JhZGl1cyAqIHNwcmVhZCk7XG4gICAgY29uc3QgeUppdHRlciA9IGYoKC0wLjUgKiByYW5kKCkpICogYXZnUmFkaXVzICogc3ByZWFkKTtcbiAgICBjb25zdCBvcGFjaXR5ID0gbWluT3BhY2l0eSArIChyYW5kKCkgKiAobWF4T3BhY2l0eSAtIG1pbk9wYWNpdHkpKTtcblxuICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvcjtcbiAgICBjdHguZ2xvYmFsQWxwaGEgPSBvcGFjaXR5O1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBjdHguYXJjKFxuICAgICAgY2VudGVyWCArIHhKaXR0ZXIsXG4gICAgICBjZW50ZXJZICsgeUppdHRlcixcbiAgICAgIGJhc2VSYWRpdXMsXG4gICAgICAwLFxuICAgICAgMiAqIE1hdGguUEksXG4gICAgKTtcbiAgICBjdHguZmlsbCgpO1xuICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7XG4gIH1cbn1cbiIsImltcG9ydCBNdWR3b3JsZEJsYWNrYm9hcmQgZnJvbSBcIkAvYmVoYXZpb3IvbXVkbWFuL2RhdGEvTXVkd29ybGRCbGFja2JvYXJkXCI7XG5pbXBvcnQgc25vd2luZXNzIGZyb20gXCJAL21hcG1ha2luZy9tdWR3b3JsZC9nZW5lcmF0b3JzL3Nub3dpbmVzc1wiO1xuaW1wb3J0IE11ZHdvcmxkTWFwLCB7IFN0cnVjdHVyZSB9IGZyb20gXCJAL21hcG1ha2luZy9tdWR3b3JsZC9NdWR3b3JsZE1hcFwiO1xuaW1wb3J0IEl0ZW0sIHsgSXRlbVR5cGUgfSBmcm9tIFwiQC9tb2RlbHMvSXRlbVwiO1xuaW1wb3J0IEJvdHRsZSBmcm9tIFwiQC9tb2RlbHMvaXRlbXMvY29udGFpbmVycy9Cb3R0bGVcIjtcbmltcG9ydCBNdWRtYW4gZnJvbSBcIkAvbW9kZWxzL011ZG1hblwiO1xuaW1wb3J0IFJlbmRlcmVyIGZyb20gXCJAL3JlbmRlcmluZy9iYXNlL1JlbmRlcmVyXCI7XG5pbXBvcnQgeyBCTEFDSywgQkxVRSwgREFSS19CUk9XTiwgREFSS19TTEFURV9HUkFZLCBHT0xELCBHUkFZX0NIQVJDT0FMLCBHUkFZX0xJR0hULCBHUkFZX01FRElVTSwgTElHSFRfSEFMRiwgTElHSFRfUVVBUlRFUiwgUkVELCBTSEFET1dfUVVBUlRFUiwgVFJBTlNQQVJFTlQsIFdISVRFIH0gZnJvbSBcIkAvcmVuZGVyaW5nL211ZHN0dWZmL2NvbG9yc1wiO1xuaW1wb3J0IGRyYXdTaG9yZWxpbmUgZnJvbSBcIkAvcmVuZGVyaW5nL211ZHN0dWZmL2RyYXdTaG9yZWxpbmVcIjtcbmltcG9ydCBNdWRtYW5SZW5kZXJlciBmcm9tIFwiQC9yZW5kZXJpbmcvbXVkc3R1ZmYvTXVkbWFuUmVuZGVyZXJcIjtcbmltcG9ydCBCb3R0bGVSZW5kZXJlciwgeyBCb3R0bGVTcHJpdGUgfSBmcm9tIFwiQC9yZW5kZXJpbmcvbXVkc3R1ZmYvc3ByaXRlcy9Cb3R0bGVSZW5kZXJlclwiO1xuaW1wb3J0IEZsYW1lUmVuZGVyZXIgZnJvbSBcIkAvcmVuZGVyaW5nL211ZHN0dWZmL3Nwcml0ZXMvRmxhbWVSZW5kZXJlclwiO1xuaW1wb3J0IFRyZWVSZW5kZXJlciwgeyBCT1VHSF9TUFJJVEVTLCBUcmVlU3ByaXRlIH0gZnJvbSBcIkAvcmVuZGVyaW5nL211ZHN0dWZmL3Nwcml0ZXMvVHJlZVJlbmRlcmVyXCI7XG5pbXBvcnQgeyBpbnNpZGVSZWN0IH0gZnJvbSBcIkAvdXRpbGl0aWVzL2dlb1wiO1xuaW1wb3J0IHsgZiwgcmFuZCB9IGZyb20gXCJAL3V0aWxpdGllcy9tYXRoXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE11ZHdvcmxkUmVuZGVyZXIge1xuICBwdWJsaWMgd29ybGRSZW5kZXJlcjogUmVuZGVyZXI7XG4gIHB1YmxpYyB2aWV3cG9ydFJlbmRlcmVyOiBSZW5kZXJlcjtcbiAgcHVibGljIHNwYWNlUmVuZGVyZXI6IFJlbmRlcmVyO1xuICBwdWJsaWMgaHVkUmVuZGVyZXI6IFJlbmRlcmVyO1xuICBwdWJsaWMgbmlnaHRSZW5kZXJlcjogUmVuZGVyZXI7XG4gIHB1YmxpYyBmaXJlbGlnaHRSZW5kZXJlcjogUmVuZGVyZXI7XG4gIHB1YmxpYyBmbGFtZVJlbmRlcmVyOiBGbGFtZVJlbmRlcmVyO1xuICBwdWJsaWMgYm90dGxlUmVuZGVyZXI6IEJvdHRsZVJlbmRlcmVyO1xuICBwdWJsaWMgdHJlZVJlbmRlcmVyOiBUcmVlUmVuZGVyZXI7XG4gIHB1YmxpYyBtdWRtYW5SZW5kZXJlcjogTXVkbWFuUmVuZGVyZXI7XG4gIHB1YmxpYyB3b3JsZDogTXVkd29ybGRCbGFja2JvYXJkO1xuICBwdWJsaWMgb3ZlcmxheUZ1bGxNYXAgPSBmYWxzZTtcblxuICBwcml2YXRlIGhlcm9JbmRleCA9IDA7XG5cbiAgY29uc3RydWN0b3Iodmlld3BvcnRDYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBtdWR3b3JsZEJsYWNrYm9hcmQ6IE11ZHdvcmxkQmxhY2tib2FyZCwgZnBzID0gMjQpIHtcbiAgICB0aGlzLndvcmxkID0gbXVkd29ybGRCbGFja2JvYXJkO1xuXG4gICAgdGhpcy53b3JsZFJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKFxuICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKSxcbiAgICAgIG11ZHdvcmxkQmxhY2tib2FyZC5kYXRhLm1hcC53aWR0aCxcbiAgICAgIG11ZHdvcmxkQmxhY2tib2FyZC5kYXRhLm1hcC5oZWlnaHQsXG4gICAgICBmcHMsXG4gICAgKTtcblxuICAgIHRoaXMuc3BhY2VSZW5kZXJlciA9IG5ldyBSZW5kZXJlcihcbiAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksXG4gICAgICB2aWV3cG9ydENhbnZhcy53aWR0aCxcbiAgICAgIHZpZXdwb3J0Q2FudmFzLmhlaWdodCxcbiAgICAgIGZwcyxcbiAgICApO1xuXG4gICAgdGhpcy52aWV3cG9ydFJlbmRlcmVyID0gbmV3IFJlbmRlcmVyKFxuICAgICAgdmlld3BvcnRDYW52YXMsXG4gICAgICB2aWV3cG9ydENhbnZhcy53aWR0aCxcbiAgICAgIHZpZXdwb3J0Q2FudmFzLmhlaWdodCxcbiAgICAgIGZwcyxcbiAgICApO1xuXG4gICAgdGhpcy5odWRSZW5kZXJlciA9IG5ldyBSZW5kZXJlcihcbiAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksXG4gICAgICB2aWV3cG9ydENhbnZhcy53aWR0aCxcbiAgICAgIHZpZXdwb3J0Q2FudmFzLmhlaWdodCxcbiAgICAgIDYsXG4gICAgKTtcblxuICAgIHRoaXMubmlnaHRSZW5kZXJlciA9IG5ldyBSZW5kZXJlcihcbiAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksXG4gICAgICB2aWV3cG9ydENhbnZhcy53aWR0aCxcbiAgICAgIHZpZXdwb3J0Q2FudmFzLmhlaWdodCxcbiAgICAgIGZwcyxcbiAgICApO1xuXG4gICAgdGhpcy5maXJlbGlnaHRSZW5kZXJlciA9IG5ldyBSZW5kZXJlcihcbiAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIiksXG4gICAgICB0aGlzLmZpcmVsaWdodFNpemUsXG4gICAgICB0aGlzLmZpcmVsaWdodFNpemUsXG4gICAgICAxMixcbiAgICApO1xuXG4gICAgdGhpcy5mbGFtZVJlbmRlcmVyID0gbmV3IEZsYW1lUmVuZGVyZXIodGhpcy50aWxlU2l6ZSk7XG4gICAgdGhpcy5ib3R0bGVSZW5kZXJlciA9IG5ldyBCb3R0bGVSZW5kZXJlcih0aGlzLnRpbGVTaXplKTtcbiAgICB0aGlzLnRyZWVSZW5kZXJlciA9IG5ldyBUcmVlUmVuZGVyZXIodGhpcy50aWxlU2l6ZSk7XG5cbiAgICAvLyBjb25zdCBtdWRtYW5TaXplID0gMTY7XG4gICAgLy8gY29uc3QgbXVkbWFuU2l6ZSA9IDMyO1xuICAgIGNvbnN0IG11ZG1hblNpemUgPSBmKHRoaXMudGlsZVNpemUgLyAyKTtcbiAgICB0aGlzLm11ZG1hblJlbmRlcmVyID0gbmV3IE11ZG1hblJlbmRlcmVyKG11ZG1hblNpemUsIGZwcyk7XG5cbiAgICBjb25zdCBjcmVhdGVNdWRtYW4gPSAoeD86IG51bWJlciwgeT86IG51bWJlcikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB4ICE9PSBcIm51bWJlclwiIHx8IHR5cGVvZiB5ICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGNvbnN0IG11ZG1hbkNvb3JkcyA9IHRoaXMud29ybGQuZGF0YS5tYXAucmFuZG9tV2Fsa2FibGVDb29yZHMoKTtcbiAgICAgICAgeCA9IG11ZG1hbkNvb3Jkc1swXTtcbiAgICAgICAgeSA9IG11ZG1hbkNvb3Jkc1sxXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbXVkbWFuID0gbmV3IE11ZG1hbih4LCB5LCAyMCAqIHRoaXMud29ybGQuZGF0YS5tYXAudGlsZVNpemUsIG11ZG1hblNpemUpO1xuICAgICAgdGhpcy53b3JsZC5kYXRhLm11ZG1lbi5wdXNoKG11ZG1hbik7XG4gICAgfTtcblxuICAgIC8vIGNyZWF0ZU11ZG1hbigzNTAsIDIwMCk7XG4gICAgLy8gY29uc3QgcG9wdWxhdGlvbiA9IDA7XG4gICAgY29uc3QgcG9wdWxhdGlvbiA9IDEwMDA7XG4gICAgLy8gY29uc3QgcG9wdWxhdGlvbiA9IDE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3B1bGF0aW9uOyBpKyspIHtcbiAgICAgIGNyZWF0ZU11ZG1hbigpO1xuICAgIH1cbiAgfVxuXG4gIHNldCBmcHMoZnJhbWVzUGVyU2Vjb25kOiBudW1iZXIpIHsgdGhpcy52aWV3cG9ydFJlbmRlcmVyLmZwcyA9IGZyYW1lc1BlclNlY29uZCB9XG5cbiAgZ2V0IGhlcm8oKTogTXVkbWFuIHsgcmV0dXJuIHRoaXMud29ybGQuZGF0YS5tdWRtZW5bdGhpcy5oZXJvSW5kZXhdIH1cblxuICBnZXQgd29ybGRXaWR0aCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy53b3JsZFJlbmRlcmVyLmNhbnZhcy53aWR0aCB9XG4gIGdldCB3b3JsZEhlaWdodCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy53b3JsZFJlbmRlcmVyLmNhbnZhcy5oZWlnaHQgfVxuXG4gIGdldCBzcGFjZVdpZHRoKCk6IG51bWJlciB7IHJldHVybiB0aGlzLnNwYWNlUmVuZGVyZXIuY2FudmFzLndpZHRoIH1cbiAgZ2V0IHNwYWNlSGVpZ2h0KCk6IG51bWJlciB7IHJldHVybiB0aGlzLnNwYWNlUmVuZGVyZXIuY2FudmFzLmhlaWdodCB9XG5cbiAgZ2V0IHZpZXdwb3J0V2lkdGgoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMudmlld3BvcnRSZW5kZXJlci5jYW52YXMud2lkdGggfVxuICBnZXQgdmlld3BvcnRIZWlnaHQoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMudmlld3BvcnRSZW5kZXJlci5jYW52YXMuaGVpZ2h0IH1cblxuICBnZXQgdGlsZVNpemUoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMud29ybGQuZGF0YS5tYXAudGlsZVNpemUgfVxuXG4gIGdldCBmaXJlbGlnaHRTaXplKCk6IG51bWJlciB7IHJldHVybiA0ICogdGhpcy50aWxlU2l6ZSB9XG5cbiAgZ2V0IG5pZ2h0Q3R4KCk6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB7IHJldHVybiB0aGlzLm5pZ2h0UmVuZGVyZXIuY3R4IH1cblxuICBnZXQgdmlld3BvcnRPcmlnaW5YKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmhlcm8ubG9jYWwueCAtIGYodGhpcy52aWV3cG9ydFdpZHRoIC8gMikgfVxuICBnZXQgdmlld3BvcnRPcmlnaW5ZKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmhlcm8ubG9jYWwueSAtIGYodGhpcy52aWV3cG9ydEhlaWdodCAvIDIpIH1cblxuICBlYWNoSXRlbU9mVHlwZUluVmlld3BvcnQoXG4gICAgaXRlbVR5cGU6IEl0ZW1UeXBlLFxuICAgIHZpZXdwb3J0T3JpZ2luWDogbnVtYmVyLFxuICAgIHZpZXdwb3J0T3JpZ2luWTogbnVtYmVyLFxuICAgIG1hcHBlcjogKGl0ZW06IEl0ZW0sIHZpZXdwb3J0WDogbnVtYmVyLCB2aWV3cG9ydFk6IG51bWJlcikgPT4gdm9pZCxcbiAgICBleHBhbmRUb3BSb3cgPSAwLFxuICAgIGV4cGFuZFJpZ2h0Q29sID0gMCxcbiAgICBleHBhbmRCb3R0b21Sb3cgPSAwLFxuICAgIGV4cGFuZExlZnRDb2wgPSAwLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCB7IHRpbGVTaXplLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodH0gPSB0aGlzO1xuXG4gICAgY29uc3QgbGVmdFggPSB2aWV3cG9ydE9yaWdpblggLSAodGlsZVNpemUgKiBleHBhbmRMZWZ0Q29sKTtcbiAgICBjb25zdCB3aWR0aCA9IHZpZXdwb3J0V2lkdGggKyAodGlsZVNpemUgKiAoZXhwYW5kTGVmdENvbCArIGV4cGFuZFJpZ2h0Q29sKSk7XG4gICAgY29uc3QgdG9wWSA9IHZpZXdwb3J0T3JpZ2luWSAtICh0aWxlU2l6ZSAqIGV4cGFuZFRvcFJvdyk7XG4gICAgY29uc3QgaGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQgKyAodGlsZVNpemUgKiAoZXhwYW5kVG9wUm93ICsgZXhwYW5kQm90dG9tUm93KSk7XG5cbiAgICB0aGlzLndvcmxkLmRhdGEuaXRlbXMuZm9yRWFjaE9mVHlwZShpdGVtVHlwZSwgKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLnVzZWQgfHwgaXRlbS5oZWxkKSByZXR1cm47XG4gICAgICBpZiAoIWluc2lkZVJlY3QoaXRlbS54LCBpdGVtLnksIGxlZnRYLCB0b3BZLCB3aWR0aCwgaGVpZ2h0KSkgcmV0dXJuO1xuXG4gICAgICBtYXBwZXIoaXRlbSwgaXRlbS54IC0gdmlld3BvcnRPcmlnaW5YLCBpdGVtLnkgLSB2aWV3cG9ydE9yaWdpblkpO1xuICAgIH0pO1xuICB9XG5cbiAgZWFjaE11ZG1hbkluVmlld3BvcnQoXG4gICAgdmlld3BvcnRPcmlnaW5YOiBudW1iZXIsXG4gICAgdmlld3BvcnRPcmlnaW5ZOiBudW1iZXIsXG4gICAgbWFwcGVyOiAobXVkbWFuOiBNdWRtYW4sIHZpZXdwb3J0WDogbnVtYmVyLCB2aWV3cG9ydFk6IG51bWJlcikgPT4gdm9pZCxcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qge1xuICAgICAgdmlld3BvcnRXaWR0aCxcbiAgICAgIHZpZXdwb3J0SGVpZ2h0LFxuICAgIH0gPSB0aGlzO1xuXG4gICAgdGhpcy53b3JsZC5kYXRhLm11ZG1lbi5mb3JFYWNoKChtdWRtYW4pID0+IHtcbiAgICAgIGlmICghaW5zaWRlUmVjdChcbiAgICAgICAgbXVkbWFuLmxvY2FsLngsXG4gICAgICAgIG11ZG1hbi5sb2NhbC55LFxuICAgICAgICB2aWV3cG9ydE9yaWdpblgsXG4gICAgICAgIHZpZXdwb3J0T3JpZ2luWSxcbiAgICAgICAgdmlld3BvcnRXaWR0aCxcbiAgICAgICAgdmlld3BvcnRIZWlnaHQsXG4gICAgICApKSByZXR1cm47XG5cbiAgICAgIG1hcHBlcihtdWRtYW4sIG11ZG1hbi5sb2NhbC54IC0gdmlld3BvcnRPcmlnaW5YLCBtdWRtYW4ubG9jYWwueSAtIHZpZXdwb3J0T3JpZ2luWSk7XG4gICAgfSk7XG4gIH1cblxuICBlYWNoVGlsZUluVmlld3BvcnQoXG4gICAgdmlld3BvcnRPcmlnaW5YOiBudW1iZXIsXG4gICAgdmlld3BvcnRPcmlnaW5ZOiBudW1iZXIsXG4gICAgbWFwcGVyOiAoXG4gICAgICByb3c6IG51bWJlcixcbiAgICAgIGNvbDogbnVtYmVyLFxuICAgICAgd29ybGRYOiBudW1iZXIsXG4gICAgICB3b3JsZFk6IG51bWJlcixcbiAgICAgIHZpZXdwb3J0WDogbnVtYmVyLFxuICAgICAgdmlld3BvcnRZOiBudW1iZXIsXG4gICAgICB0aWxlU2l6ZTogbnVtYmVyLFxuICAgICkgPT4gdm9pZCxcbiAgICBleHBhbmRUb3BSb3cgPSAwLFxuICAgIGV4cGFuZFJpZ2h0Q29sID0gMCxcbiAgICBleHBhbmRCb3R0b21Sb3cgPSAwLFxuICAgIGV4cGFuZExlZnRDb2wgPSAwLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCB7IG1hcCB9ID0gdGhpcy53b3JsZC5kYXRhO1xuICAgIGNvbnN0IHsgdGlsZVNpemUgfSA9IHRoaXM7XG4gICAgY29uc3QgbWluQ29sID0gTWF0aC5tYXgoMCwgbWFwLnhUb0NvbCh2aWV3cG9ydE9yaWdpblgpIC0gZXhwYW5kTGVmdENvbCk7XG4gICAgY29uc3QgbWF4Q29sID0gTWF0aC5taW4obWFwLmNvbENvdW50IC0gMSwgbWFwLnhUb0NvbCh2aWV3cG9ydE9yaWdpblggKyB0aGlzLnZpZXdwb3J0V2lkdGgpICsgZXhwYW5kUmlnaHRDb2wpO1xuICAgIGNvbnN0IG1pblJvdyA9IE1hdGgubWF4KDAsIG1hcC55VG9Sb3codmlld3BvcnRPcmlnaW5ZKSAtIGV4cGFuZFRvcFJvdyk7XG4gICAgY29uc3QgbWF4Um93ID0gTWF0aC5taW4obWFwLnJvd0NvdW50IC0gMSwgbWFwLnlUb1Jvdyh2aWV3cG9ydE9yaWdpblkgKyB0aGlzLnZpZXdwb3J0SGVpZ2h0KSArIGV4cGFuZEJvdHRvbVJvdyk7XG5cbiAgICBmb3IgKGxldCBjb2wgPSBtaW5Db2w7IGNvbCA8PSBtYXhDb2w7IGNvbCsrKSB7XG4gICAgICBmb3IgKGxldCByb3cgPSBtaW5Sb3c7IHJvdyA8PSBtYXhSb3c7IHJvdysrKSB7XG4gICAgICAgIGNvbnN0IHdvcmxkWCA9IGNvbCAqIHRpbGVTaXplO1xuICAgICAgICBjb25zdCB3b3JsZFkgPSByb3cgKiB0aWxlU2l6ZTtcbiAgICAgICAgbWFwcGVyKFxuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBjb2wsXG4gICAgICAgICAgd29ybGRYLFxuICAgICAgICAgIHdvcmxkWSxcbiAgICAgICAgICB3b3JsZFggLSB2aWV3cG9ydE9yaWdpblgsXG4gICAgICAgICAgd29ybGRZIC0gdmlld3BvcnRPcmlnaW5ZLFxuICAgICAgICAgIHRpbGVTaXplLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRyYXdUaWxlKFxuICAgIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELFxuICAgIHJvdzogbnVtYmVyLFxuICAgIGNvbDogbnVtYmVyLFxuICAgIHRpbGVTaXplOiBudW1iZXIsXG4gICAgZWxldmF0aW9uOiBudW1iZXIsXG4gICAgbW9pc3R1cmU6IG51bWJlcixcbiAgICBzdHJ1Y3R1cmU6IFN0cnVjdHVyZSxcbiAgICB1bmRlcndhdGVyOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCB4ID0gY29sICogdGlsZVNpemU7XG4gICAgY29uc3QgeSA9IHJvdyAqIHRpbGVTaXplO1xuICAgIGNvbnN0IGJhc2VSZWQgPSBlbGV2YXRpb24gLyAxLjU7XG4gICAgY29uc3QgYmFzZUdyZWVuID0gbW9pc3R1cmU7XG4gICAgY29uc3QgYmFzZUJsdWUgPSBlbGV2YXRpb24gLyAyLjU7XG5cbiAgICBpZiAodW5kZXJ3YXRlcikge1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiKDAsIDEwMCwgMjAwKVwiO1xuICAgICAgY3R4LmZpbGxSZWN0KHgsIHksIHRpbGVTaXplLCB0aWxlU2l6ZSk7XG4gICAgICBkcmF3U2hvcmVsaW5lKGN0eCwgdGhpcy53b3JsZC5kYXRhLm1hcCwgeCwgeSwgeCwgeSwgdGlsZVNpemUsIGJhc2VSZWQsIGJhc2VHcmVlbiwgYmFzZUJsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiBoYXZlIGEgc2V0IG9mIHByZS1kZWZpbmVkIHRpbGUgY29sb3IvaWxsdXN0cmF0aW9ucyB3aGVuIGVhY2hcbiAgICAgIC8vICAgICAgIHZhbHVlIGlzIHdpdGhpbiBhIGNlcnRhaW4gcmFuZ2VcbiAgICAgIGNvbnN0IHdoaXRlID0gc25vd2luZXNzKGVsZXZhdGlvbik7XG4gICAgICBjb25zdCByZWQgPSBmKE1hdGgubWF4KHdoaXRlLCBiYXNlUmVkKSk7XG4gICAgICBjb25zdCBncmVlbiA9IGYoTWF0aC5tYXgod2hpdGUsIGJhc2VHcmVlbikpO1xuICAgICAgY29uc3QgYmx1ZSA9IGYoTWF0aC5tYXgod2hpdGUsIGJhc2VCbHVlKSk7XG4gICAgICBjdHguZmlsbFN0eWxlID0gYHJnYigke3JlZH0sICR7Z3JlZW59LCAke2JsdWV9KWA7XG4gICAgICBjdHguZmlsbFJlY3QoeCwgeSwgdGlsZVNpemUsIHRpbGVTaXplKTtcbiAgICB9XG5cblxuICAgIGN0eC5zdHJva2VTdHlsZSA9IFwicmdiYSgwLCAwLCAwLCAwLjA1KVwiO1xuICAgIGN0eC5zdHJva2VSZWN0KHgsIHksIHRpbGVTaXplLCB0aWxlU2l6ZSk7XG4gIH1cblxuICBkcmF3V29ybGQoKTogdm9pZCB7XG4gICAgdGhpcy53b3JsZFJlbmRlcmVyLmRyYXdPbmNlKChjdHgsIF90aW1lc3RhbXApID0+IHtcbiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy53b3JsZFdpZHRoLCB0aGlzLndvcmxkSGVpZ2h0KTtcbiAgICAgIGNvbnN0IHsgdGlsZVNpemUgfSA9IHRoaXM7XG5cbiAgICAgIHRoaXMud29ybGQuZGF0YS5tYXAuZWFjaFRpbGUoKHJvdywgY29sLCBlbGV2YXRpb24sIG1vaXN0dXJlLCBzdHJ1Y3R1cmUsIHVuZGVyd2F0ZXIpID0+IHtcbiAgICAgICAgdGhpcy5kcmF3VGlsZShjdHgsIHJvdywgY29sLCB0aWxlU2l6ZSwgZWxldmF0aW9uLCBtb2lzdHVyZSwgc3RydWN0dXJlLCB1bmRlcndhdGVyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZHJhd1NwYWNlKCk6IHZvaWQge1xuICAgIHRoaXMuc3BhY2VSZW5kZXJlci5kcmF3T25jZSgoY3R4LCBfdGltZXN0YW1wKSA9PiB7XG4gICAgICBjb25zdCB7IHNwYWNlV2lkdGgsIHNwYWNlSGVpZ2h0IH0gPSB0aGlzO1xuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCBzcGFjZVdpZHRoLCBzcGFjZUhlaWdodCk7XG4gICAgICBjb25zdCBzdGFyQ291bnQgPSAxMDAwO1xuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBzdGFyQ291bnQ7IG4rKykge1xuICAgICAgICBjb25zdCB4ID0gZihyYW5kKCkgKiBzcGFjZVdpZHRoKTtcbiAgICAgICAgY29uc3QgeSA9IGYocmFuZCgpICogc3BhY2VIZWlnaHQpO1xuICAgICAgICBjb25zdCBzaXplID0gZigoMSAtIE1hdGguc3FydChyYW5kKCkpKSAqIDQpO1xuICAgICAgICBjb25zdCBvcGFjaXR5ID0gTWF0aC5zcXJ0KHJhbmQoKSkudG9GaXhlZCgyKTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IGByZ2JhKDI1NSwgMjU1LCAyNTUsICR7b3BhY2l0eX0pYDtcbiAgICAgICAgY3R4LmZpbGxSZWN0KHgsIHksIHNpemUsIHNpemUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ2FyZWZ1bCwgdGhpcyBjcmVhdGVzIGEgbmV3IGBQYXRoMkRgIGV2ZXJ5IHRpbWVcbiAgY3JlYXRlRW1wdHlGaWxsQmFyKGxlZnRYOiBudW1iZXIsIHRvcFk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBQYXRoMkQge1xuICAgIGNvbnN0IGJvdHRvbVkgPSB0b3BZICsgaGVpZ2h0O1xuICAgIGNvbnN0IGNlbnRlclggPSBsZWZ0WCArIGYod2lkdGggLyAyKTtcbiAgICBjb25zdCByaWdodFggPSBjZW50ZXJYICsgZih3aWR0aCAvIDIpO1xuICAgIGNvbnN0IGVuZFJhZGl1cyA9IGYod2lkdGggLyAyKTtcbiAgICBjb25zdCBzaWRlc1RvcFkgPSB0b3BZICsgZW5kUmFkaXVzO1xuICAgIGNvbnN0IHNpZGVzQm90dG9tWSA9IGJvdHRvbVkgLSBlbmRSYWRpdXM7XG5cbiAgICBjb25zdCBmaWxsQmFyID0gbmV3IFBhdGgyRCgpO1xuICAgIGZpbGxCYXIuYXJjKGNlbnRlclgsIHNpZGVzVG9wWSwgZW5kUmFkaXVzLCBNYXRoLlBJLCAwKTtcbiAgICBmaWxsQmFyLmxpbmVUbyhyaWdodFgsIHNpZGVzQm90dG9tWSk7XG4gICAgZmlsbEJhci5hcmMoY2VudGVyWCwgc2lkZXNCb3R0b21ZLCBlbmRSYWRpdXMsIDAsIE1hdGguUEkpO1xuICAgIGZpbGxCYXIubGluZVRvKGxlZnRYLCBzaWRlc1RvcFkpO1xuXG4gICAgcmV0dXJuIGZpbGxCYXI7XG4gIH1cblxuICBkcmF3SHVkKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgdGlsZVNpemUsIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0IH0gPSB0aGlzO1xuICAgIGNvbnN0IGJhcldpZHRoID0gZih0aWxlU2l6ZSAvIDQpO1xuICAgIGNvbnN0IGJhckhlaWdodCA9IGYoMS41ICogdGlsZVNpemUpO1xuICAgIGNvbnN0IGJhclRvcFkgPSBmKHRpbGVTaXplIC8gMik7XG4gICAgY29uc3QgYmFyQm90dG9tWSA9IGJhclRvcFkgKyBiYXJIZWlnaHQ7XG4gICAgY29uc3QgaHlkcmF0aW9uTGVmdFggPSB2aWV3cG9ydFdpZHRoIC0gZih0aWxlU2l6ZSAvIDIpIC0gZihiYXJXaWR0aCAvIDIpO1xuICAgIGNvbnN0IHdhcm10aExlZnRYID0gaHlkcmF0aW9uTGVmdFggLSAoYmFyV2lkdGggKiAyKTtcbiAgICBjb25zdCBzb2NpYWxMZWZ0WCA9IHdhcm10aExlZnRYIC0gKGJhcldpZHRoICogMik7XG5cbiAgICBjb25zdCBiYXJQYXRocyA9IG5ldyBQYXRoMkQoKTtcblxuICAgIGNvbnN0IGh5ZHJhdGlvbkJhciA9IHRoaXMuY3JlYXRlRW1wdHlGaWxsQmFyKGh5ZHJhdGlvbkxlZnRYLCBiYXJUb3BZLCBiYXJXaWR0aCwgYmFySGVpZ2h0KTtcbiAgICBiYXJQYXRocy5hZGRQYXRoKGh5ZHJhdGlvbkJhcik7XG5cbiAgICBjb25zdCB3YXJtdGhCYXIgPSB0aGlzLmNyZWF0ZUVtcHR5RmlsbEJhcih3YXJtdGhMZWZ0WCwgYmFyVG9wWSwgYmFyV2lkdGgsIGJhckhlaWdodCk7XG4gICAgYmFyUGF0aHMuYWRkUGF0aCh3YXJtdGhCYXIpO1xuXG4gICAgY29uc3Qgc29jaWFsQmFyID0gdGhpcy5jcmVhdGVFbXB0eUZpbGxCYXIoc29jaWFsTGVmdFgsIGJhclRvcFksIGJhcldpZHRoLCBiYXJIZWlnaHQpO1xuICAgIGJhclBhdGhzLmFkZFBhdGgoc29jaWFsQmFyKTtcblxuICAgIHRoaXMuaHVkUmVuZGVyZXIuY3R4LmNsaXAoYmFyUGF0aHMpO1xuXG4gICAgdGhpcy5odWRSZW5kZXJlci5kcmF3TG9vcCgoY3R4LCBfdGltZXN0YW1wKSA9PiB7XG4gICAgICBjdHguY2xlYXJSZWN0KDAsIDAsIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0KTtcblxuICAgICAgLy8gYmFja2dyb3VuZCBvZiB0aGUgZmlsbCBiYXJzXG4gICAgICBjdHguZmlsbFN0eWxlID0gU0hBRE9XX1FVQVJURVI7XG4gICAgICBjdHguZmlsbChiYXJQYXRocyk7XG5cbiAgICAgIC8vIGh5ZHJhdGlvbiBiYXIgZmlsbFxuICAgICAgY3R4LmZpbGxTdHlsZSA9IEJMVUU7XG4gICAgICBjb25zdCBoeWRyYXRpb25GaWxsQmFySGVpZ2h0ID0gZih0aGlzLmhlcm8ubG9jYWwucGVyY2VudEh5ZHJhdGVkICogYmFySGVpZ2h0KTtcbiAgICAgIGNvbnN0IGh5ZHJhdGlvbkZpbGxCYXJUb3BZID0gYmFyQm90dG9tWSAtIGh5ZHJhdGlvbkZpbGxCYXJIZWlnaHQ7XG4gICAgICBjdHguZmlsbFJlY3QoaHlkcmF0aW9uTGVmdFgsIGh5ZHJhdGlvbkZpbGxCYXJUb3BZLCBiYXJXaWR0aCwgaHlkcmF0aW9uRmlsbEJhckhlaWdodCk7XG5cbiAgICAgIC8vIHdhcm10aCBiYXIgZmlsbFxuICAgICAgY3R4LmZpbGxTdHlsZSA9IFJFRDtcbiAgICAgIGNvbnN0IHdhcm10aEZpbGxCYXJIZWlnaHQgPSBmKHRoaXMuaGVyby5sb2NhbC5wZXJjZW50V2FybSAqIGJhckhlaWdodCk7XG4gICAgICBjb25zdCB3YXJtdGhGaWxsQmFyVG9wWSA9IGJhckJvdHRvbVkgLSB3YXJtdGhGaWxsQmFySGVpZ2h0O1xuICAgICAgY3R4LmZpbGxSZWN0KHdhcm10aExlZnRYLCB3YXJtdGhGaWxsQmFyVG9wWSwgYmFyV2lkdGgsIHdhcm10aEZpbGxCYXJIZWlnaHQpO1xuXG4gICAgICAvLyBzb2NpYWwgYmFyIGZpbGxcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBHT0xEO1xuICAgICAgY29uc3Qgc29jaWFsRmlsbEJhckhlaWdodCA9IGYodGhpcy5oZXJvLmxvY2FsLnBlcmNlbnRTb2NpYWwgKiBiYXJIZWlnaHQpO1xuICAgICAgY29uc3Qgc29jaWFsRmlsbEJhclRvcFkgPSBiYXJCb3R0b21ZIC0gc29jaWFsRmlsbEJhckhlaWdodDtcbiAgICAgIGN0eC5maWxsUmVjdChzb2NpYWxMZWZ0WCwgc29jaWFsRmlsbEJhclRvcFksIGJhcldpZHRoLCBzb2NpYWxGaWxsQmFySGVpZ2h0KTtcblxuICAgICAgLy8gYm9yZGVyIG9mIHRoZSBmaWxsIGJhcnNcbiAgICAgIC8vIGN0eC5zdHJva2VTdHlsZSA9IFdISVRFO1xuICAgICAgLy8gY3R4LnN0cm9rZVN0eWxlID0gR1JBWV9MSUdIVDtcbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IEdSQVlfQ0hBUkNPQUw7XG4gICAgICBjdHgubGluZVdpZHRoID0gMjtcbiAgICAgIGN0eC5zdHJva2UoYmFyUGF0aHMpO1xuICAgIH0pO1xuICB9XG5cbiAgZHJhd0ZpcmVsaWdodCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGZpcmVsaWdodFNpemUgfSA9IHRoaXM7XG4gICAgY29uc3QgcmFkaXVzID0gZihmaXJlbGlnaHRTaXplIC8gMik7XG4gICAgY29uc3QgY2VudGVyWCA9IHJhZGl1cztcbiAgICBjb25zdCBjZW50ZXJZID0gcmFkaXVzO1xuXG4gICAgdGhpcy5maXJlbGlnaHRSZW5kZXJlci5kcmF3TG9vcCgoY3R4LCB0aW1lc3RhbXApID0+IHtcbiAgICAgIGNvbnN0IHsgZGF5bGlnaHQgfSA9IHRoaXMud29ybGQ7XG4gICAgICBpZiAoZGF5bGlnaHQgPT09IDEpIHJldHVybjtcblxuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCBmaXJlbGlnaHRTaXplLCBmaXJlbGlnaHRTaXplKTtcblxuICAgICAgY29uc3QgZmxpY2tlclJhZGl1cyA9ICgxIC0gZGF5bGlnaHQpICogKHJhZGl1cyAqICgwLjkgKyAoMC4xICogcmFuZCgpKSkpO1xuXG4gICAgICBjb25zdCBmaXJlbGlnaHQgPSBjdHguY3JlYXRlUmFkaWFsR3JhZGllbnQoXG4gICAgICAgIGNlbnRlclgsXG4gICAgICAgIGNlbnRlclksXG4gICAgICAgIGYoZmxpY2tlclJhZGl1cyAvIDUpLFxuICAgICAgICBjZW50ZXJYLFxuICAgICAgICBjZW50ZXJZLFxuICAgICAgICBmbGlja2VyUmFkaXVzLFxuICAgICAgKTtcblxuICAgICAgZmlyZWxpZ2h0LmFkZENvbG9yU3RvcCgwLCBXSElURSk7XG4gICAgICBmaXJlbGlnaHQuYWRkQ29sb3JTdG9wKDAuMiwgV0hJVEUpO1xuICAgICAgZmlyZWxpZ2h0LmFkZENvbG9yU3RvcCgwLjQsIExJR0hUX0hBTEYpO1xuICAgICAgZmlyZWxpZ2h0LmFkZENvbG9yU3RvcCgwLjYsIExJR0hUX0hBTEYpO1xuICAgICAgZmlyZWxpZ2h0LmFkZENvbG9yU3RvcCgwLjc1LCBMSUdIVF9RVUFSVEVSKTtcbiAgICAgIGZpcmVsaWdodC5hZGRDb2xvclN0b3AoMSwgVFJBTlNQQVJFTlQpO1xuXG4gICAgICBjdHguZmlsbFN0eWxlID0gZmlyZWxpZ2h0O1xuICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIGZpcmVsaWdodFNpemUsIGZpcmVsaWdodFNpemUpO1xuICAgIH0pO1xuICB9XG5cbiAgZHJhd05pZ2h0SW50byhjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdGltZXN0YW1wOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB7IGRheWxpZ2h0IH0gPSB0aGlzLndvcmxkO1xuICAgIGlmIChkYXlsaWdodCA9PT0gMSkgcmV0dXJuO1xuXG4gICAgY29uc3Qge1xuICAgICAgbmlnaHRDdHgsXG4gICAgICB2aWV3cG9ydFdpZHRoLFxuICAgICAgdmlld3BvcnRIZWlnaHQsXG4gICAgICB2aWV3cG9ydE9yaWdpblgsXG4gICAgICB2aWV3cG9ydE9yaWdpblksXG4gICAgICBmaXJlbGlnaHRTaXplLFxuICAgIH0gPSB0aGlzO1xuXG4gICAgLy8gY2xlYXIgY3VycmVudCBuaWdodFxuICAgIG5pZ2h0Q3R4LmNsZWFyUmVjdCgwLCAwLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCk7XG5cbiAgICAvLyByZW5kZXIgZGFya25lc3NcbiAgICBuaWdodEN0eC5maWxsU3R5bGUgPSBCTEFDSztcbiAgICBuaWdodEN0eC5maWxsUmVjdCgwLCAwLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCk7XG5cbiAgICAvLyB3ZSdyZSBnb25uYSBjYXJ2ZSBvdXQgZmlyZWxpZ2h0IHNwb3RzXG4gICAgY29uc3Qgb2xkR2NPcCA9IG5pZ2h0Q3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICBuaWdodEN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBcImRlc3RpbmF0aW9uLW91dFwiO1xuXG4gICAgY29uc3QgZmlyZWxpZ2h0Q2FudmFzID0gdGhpcy5maXJlbGlnaHRSZW5kZXJlci5jYW52YXM7XG4gICAgY29uc3QgZmlyZWxpZ2h0UmFkaXVzID0gZihmaXJlbGlnaHRTaXplIC8gMik7XG5cbiAgICB0aGlzLmVhY2hJdGVtT2ZUeXBlSW5WaWV3cG9ydChJdGVtVHlwZS5GSVJFLCB2aWV3cG9ydE9yaWdpblgsIHZpZXdwb3J0T3JpZ2luWSwgKGl0ZW0sIHgsIHkpID0+IHtcbiAgICAgIG5pZ2h0Q3R4LmRyYXdJbWFnZShcbiAgICAgICAgZmlyZWxpZ2h0Q2FudmFzLFxuICAgICAgICAwLCAwLFxuICAgICAgICBmaXJlbGlnaHRTaXplLCBmaXJlbGlnaHRTaXplLFxuICAgICAgICB4IC0gZmlyZWxpZ2h0UmFkaXVzLCB5IC0gZmlyZWxpZ2h0UmFkaXVzLFxuICAgICAgICBmaXJlbGlnaHRTaXplLCBmaXJlbGlnaHRTaXplLFxuICAgICAgKTtcblxuICAgICAgdGhpcy5mbGFtZVJlbmRlcmVyLmRyYXdBbmltYXRlZChjdHgsIHRpbWVzdGFtcCwgeCwgeSk7XG4gICAgfSwgMSwgMSwgMSwgMSk7XG5cbiAgICBuaWdodEN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBvbGRHY09wO1xuXG4gICAgY3R4Lmdsb2JhbEFscGhhID0gMC4zNSAqICgxIC0gZGF5bGlnaHQpO1xuICAgIGN0eC5kcmF3SW1hZ2UoXG4gICAgICB0aGlzLm5pZ2h0UmVuZGVyZXIuY2FudmFzLFxuICAgICAgMCwgMCxcbiAgICAgIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LFxuICAgICAgMCwgMCxcbiAgICAgIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LFxuICAgICk7XG4gICAgY3R4Lmdsb2JhbEFscGhhID0gMTtcbiAgfVxuXG4gIGRyYXdHcm91bmRMZXZlbChjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdGltZXN0YW1wOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICB2aWV3cG9ydFdpZHRoLFxuICAgICAgdmlld3BvcnRIZWlnaHQsXG4gICAgICB3b3JsZFdpZHRoLFxuICAgICAgd29ybGRIZWlnaHQsXG4gICAgICB2aWV3cG9ydE9yaWdpblgsXG4gICAgICB2aWV3cG9ydE9yaWdpblksXG4gICAgfSA9IHRoaXM7XG5cbiAgICBjdHguZmlsbFN0eWxlID0gXCJibGFja1wiO1xuICAgIGN0eC5maWxsUmVjdCgwLCAwLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCk7XG5cbiAgICBpZiAoXG4gICAgICB2aWV3cG9ydE9yaWdpblggPCAwXG4gICAgICB8fCB2aWV3cG9ydE9yaWdpblkgPCAwXG4gICAgICB8fCB2aWV3cG9ydE9yaWdpblggKyB2aWV3cG9ydFdpZHRoID4gd29ybGRXaWR0aFxuICAgICAgfHwgdmlld3BvcnRPcmlnaW5ZICsgdmlld3BvcnRIZWlnaHQgPiB3b3JsZEhlaWdodFxuICAgICkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzcGFjZVdpZHRoLFxuICAgICAgICBzcGFjZUhlaWdodCxcbiAgICAgIH0gPSB0aGlzO1xuXG4gICAgICAvLyBzcGFjZSAmIHN0YXJzXG4gICAgICBjdHguZHJhd0ltYWdlKFxuICAgICAgICB0aGlzLnNwYWNlUmVuZGVyZXIuY2FudmFzLFxuICAgICAgICAwLCAwLFxuICAgICAgICBzcGFjZVdpZHRoLCBzcGFjZUhlaWdodCxcbiAgICAgICAgMCwgMCxcbiAgICAgICAgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQsXG4gICAgICApO1xuXG4gICAgICAvLyBtdWR3b3JsZCdzIHNoYWRvd1xuICAgICAgY29uc3Qgc2hhZG93WCA9IHZpZXdwb3J0T3JpZ2luWCA8IDAgPyBNYXRoLmFicyh2aWV3cG9ydE9yaWdpblgpIDogMDtcbiAgICAgIGNvbnN0IHNoYWRvd1kgPSB2aWV3cG9ydE9yaWdpblkgPCAwID8gTWF0aC5hYnModmlld3BvcnRPcmlnaW5ZKSA6IDA7XG4gICAgICBjb25zdCBzaGFkb3dXaWR0aCA9IHZpZXdwb3J0T3JpZ2luWCArIHZpZXdwb3J0V2lkdGggPiB3b3JsZFdpZHRoID8gKHdvcmxkV2lkdGggLSB2aWV3cG9ydE9yaWdpblgpIDogdmlld3BvcnRXaWR0aDtcbiAgICAgIGNvbnN0IHNoYWRvd0hlaWdodCA9IHZpZXdwb3J0T3JpZ2luWSArIHZpZXdwb3J0SGVpZ2h0ID4gd29ybGRIZWlnaHQgPyAod29ybGRIZWlnaHQgLSB2aWV3cG9ydE9yaWdpblkpIDogdmlld3BvcnRIZWlnaHQ7XG4gICAgICBjb25zdCBzaGFkb3dHaXJ0aCA9IGYodmlld3BvcnRXaWR0aCAvIDQwKTtcblxuICAgICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiYSgwLCAwLCAwLCAwLjUpXCI7XG5cbiAgICAgIC8vIGZpcnN0IGxheWVyIG9mIHNoYWRvd1xuICAgICAgY3R4LmZpbGxSZWN0KFxuICAgICAgICBzaGFkb3dYIC0gKHNoYWRvd0dpcnRoIC8gMiksXG4gICAgICAgIHNoYWRvd1kgLSAoc2hhZG93R2lydGggLyAyKSxcbiAgICAgICAgc2hhZG93V2lkdGggKyBzaGFkb3dHaXJ0aCxcbiAgICAgICAgc2hhZG93SGVpZ2h0ICsgc2hhZG93R2lydGgsXG4gICAgICApO1xuXG4gICAgICAvLyBzZWNvbmQgbGF5ZXIgb2Ygc2hhZG93XG4gICAgICBjdHguZmlsbFJlY3QoXG4gICAgICAgIHNoYWRvd1ggLSBzaGFkb3dHaXJ0aCxcbiAgICAgICAgc2hhZG93WSAtIHNoYWRvd0dpcnRoLFxuICAgICAgICBzaGFkb3dXaWR0aCArIChzaGFkb3dHaXJ0aCAqIDIpLFxuICAgICAgICBzaGFkb3dIZWlnaHQgKyAoc2hhZG93R2lydGggKiAyKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIGF0bW9zcGhlcmVcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRYID0gMDtcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMDtcbiAgICAgIGN0eC5zaGFkb3dDb2xvciA9IFwicmdiKDAsIDAsIDI1NSlcIjtcbiAgICAgIGN0eC5zaGFkb3dCbHVyID0gNTA7XG4gICAgICBjdHguZmlsbFN0eWxlID0gXCJyZ2IoMCwgMCwgMjU1KVwiO1xuICAgICAgY3R4LmZpbGxSZWN0KHNoYWRvd1ggLSAwLjUsIHNoYWRvd1kgLSAwLjUsIHNoYWRvd1dpZHRoICsgMSwgc2hhZG93SGVpZ2h0ICsgMSk7XG4gICAgICBjdHguc2hhZG93T2Zmc2V0WCA9IDA7XG4gICAgICBjdHguc2hhZG93T2Zmc2V0WSA9IDA7XG4gICAgICBjdHguc2hhZG93Q29sb3IgPSBcInRyYW5zcGFyZW50XCI7XG4gICAgICBjdHguc2hhZG93Qmx1ciA9IDA7XG4gICAgfVxuXG4gICAgLy8gdGhlIHBsYW5ldFxuICAgIGN0eC5kcmF3SW1hZ2UoXG4gICAgICB0aGlzLndvcmxkUmVuZGVyZXIuY2FudmFzLFxuICAgICAgdmlld3BvcnRPcmlnaW5YLCB2aWV3cG9ydE9yaWdpblksXG4gICAgICB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCxcbiAgICAgIDAsIDAsXG4gICAgICB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCxcbiAgICApO1xuICB9XG5cbiAgZHJhd0tuZWVMZXZlbChjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdGltZXN0YW1wOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICB2aWV3cG9ydFdpZHRoLFxuICAgICAgdmlld3BvcnRIZWlnaHQsXG4gICAgICB2aWV3cG9ydE9yaWdpblgsXG4gICAgICB2aWV3cG9ydE9yaWdpblksXG4gICAgICB0aWxlU2l6ZSxcbiAgICB9ID0gdGhpcztcblxuICAgIC8vIGl0ZW1zICh3YXRlcilcbiAgICB0aGlzLmVhY2hJdGVtT2ZUeXBlSW5WaWV3cG9ydChJdGVtVHlwZS5CT1RUTEUsIHZpZXdwb3J0T3JpZ2luWCwgdmlld3BvcnRPcmlnaW5ZLCAoYm90dGxlLCB4LCB5KSA9PiB7XG4gICAgICB0aGlzLmJvdHRsZVJlbmRlcmVyLmRyYXdCb3R0bGUoY3R4LCBib3R0bGUgYXMgQm90dGxlLCB4LCB5KTtcbiAgICB9KTtcblxuICAgIC8vIGl0ZW1zIChmaXJlKVxuICAgIHRoaXMuZWFjaEl0ZW1PZlR5cGVJblZpZXdwb3J0KEl0ZW1UeXBlLkZJUkUsIHZpZXdwb3J0T3JpZ2luWCwgdmlld3BvcnRPcmlnaW5ZLCAoaXRlbSwgeCwgeSkgPT4ge1xuICAgICAgLy8gVE9ETzogdGhpcyBuZWVkcyBhIHNwcml0ZVxuICAgICAgY3R4LmZpbGxTdHlsZSA9IERBUktfQlJPV047XG4gICAgICBjdHguZmlsbFJlY3QoeCAtIDUsIHkgLSA1LCAxMCwgMTApO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IFwib3JhbmdlcmVkXCI7XG4gICAgICBjdHguZmlsbFJlY3QoeCAtIDQsIHkgLSA1LCA4LCA2KTtcbiAgICB9KTtcblxuICAgIC8vIHRyZWUgdHJ1bmtzXG4gICAgY29uc3QgeyBtYXAgfSA9IHRoaXMud29ybGQuZGF0YTtcbiAgICBjb25zdCBoYWxmVGlsZSA9IGYodGlsZVNpemUgLyAyKTtcbiAgICB0aGlzLmVhY2hUaWxlSW5WaWV3cG9ydCh2aWV3cG9ydE9yaWdpblgsIHZpZXdwb3J0T3JpZ2luWSwgKHJvdywgY29sLCB3b3JsZFgsIHdvcmxkWSwgdmlld3BvcnRYLCB2aWV3cG9ydFkpID0+IHtcbiAgICAgIC8vIFRPRE86IHZhbHVlcyBmb3IgZWFjaCB0aWxlIGluIHZpZXdwb3J0IHNob3VsZCBiZSByb2xsZWQgdXAgaW50byBhIGdyaWRcbiAgICAgIC8vICAgICAgIHRoYXQgdXBkYXRlcyBlYWNoIGZyYW1lLCBiZWNhdXNlIGRvaW5nIHRoaXMgbG9vcCBtdWx0aXBsZSB0aW1lcyBhXG4gICAgICAvLyAgICAgICBmcmFtZSBpcyB1bmFjY2VwdGFibGUuXG4gICAgICBjb25zdCB0aWxlVmFsdWUgPSBtYXAudmFsdWVBdFRpbGUocm93LCBjb2wpO1xuICAgICAgY29uc3Qgc3RydWN0dXJlID0gTXVkd29ybGRNYXAuc3RydWN0dXJlRnJvbVRpbGVWYWx1ZSh0aWxlVmFsdWUpO1xuXG4gICAgICAvLyBUT0RPOiB0aGlzIG5lZWRzIGEgc3ByaXRlXG4gICAgICBzd2l0Y2ggKHN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIFN0cnVjdHVyZS5OT05FOiBicmVhaztcbiAgICAgICAgY2FzZSBTdHJ1Y3R1cmUuVFJFRToge1xuICAgICAgICAgIHRoaXMudHJlZVJlbmRlcmVyLmRyYXdTcHJpdGUoVHJlZVNwcml0ZS5TVFVNUCwgY3R4LCB2aWV3cG9ydFggKyBoYWxmVGlsZSwgdmlld3BvcnRZICsgaGFsZlRpbGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZHJhd0V5ZUxldmVsKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB0aW1lc3RhbXA6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIHZpZXdwb3J0T3JpZ2luWCxcbiAgICAgIHZpZXdwb3J0T3JpZ2luWSxcbiAgICB9ID0gdGhpcztcblxuICAgIC8vIHBvcHVsYXRpb25cbiAgICB0aGlzLmVhY2hNdWRtYW5JblZpZXdwb3J0KHZpZXdwb3J0T3JpZ2luWCwgdmlld3BvcnRPcmlnaW5ZLCAobXVkbWFuLCB4LCB5KSA9PiB7XG4gICAgICB0aGlzLm11ZG1hblJlbmRlcmVyLmRyYXdNdWRtYW4oY3R4LCBtdWRtYW4sIHgsIHksIHRpbWVzdGFtcCk7XG4gICAgfSk7XG4gIH1cblxuICBkcmF3Q2Fub3B5TGV2ZWwoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHRpbWVzdGFtcDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgeyBtYXAgfSA9IHRoaXMud29ybGQuZGF0YTtcbiAgICBjb25zdCB7XG4gICAgICB0aWxlU2l6ZSxcbiAgICAgIHZpZXdwb3J0T3JpZ2luWCxcbiAgICAgIHZpZXdwb3J0T3JpZ2luWSxcbiAgICB9ID0gdGhpcztcblxuICAgIGNvbnN0IGhhbGZUaWxlID0gZih0aWxlU2l6ZSAvIDIpO1xuICAgIGNvbnN0IGJvdWdoQ291bnQgPSBCT1VHSF9TUFJJVEVTLmxlbmd0aDtcbiAgICB0aGlzLmVhY2hUaWxlSW5WaWV3cG9ydCh2aWV3cG9ydE9yaWdpblgsIHZpZXdwb3J0T3JpZ2luWSwgKHJvdywgY29sLCB3b3JsZFgsIHdvcmxkWSwgdmlld3BvcnRYLCB2aWV3cG9ydFkpID0+IHtcbiAgICAgIC8vIFRPRE86IHZhbHVlcyBmb3IgZWFjaCB0aWxlIGluIHZpZXdwb3J0IHNob3VsZCBiZSByb2xsZWQgdXAgaW50byBhIGdyaWRcbiAgICAgIC8vICAgICAgIHRoYXQgdXBkYXRlcyBlYWNoIGZyYW1lLCBiZWNhdXNlIGRvaW5nIHRoaXMgbG9vcCBtdWx0aXBsZSB0aW1lcyBhXG4gICAgICAvLyAgICAgICBmcmFtZSBpcyB1bmFjY2VwdGFibGUuXG4gICAgICBjb25zdCB0aWxlVmFsdWUgPSBtYXAudmFsdWVBdFRpbGUocm93LCBjb2wpO1xuICAgICAgY29uc3Qgc3RydWN0dXJlID0gTXVkd29ybGRNYXAuc3RydWN0dXJlRnJvbVRpbGVWYWx1ZSh0aWxlVmFsdWUpO1xuXG4gICAgICBzd2l0Y2ggKHN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIFN0cnVjdHVyZS5OT05FOiBicmVhaztcbiAgICAgICAgY2FzZSBTdHJ1Y3R1cmUuVFJFRToge1xuICAgICAgICAgIHRoaXMudHJlZVJlbmRlcmVyLmRyYXdTcHJpdGUoXG4gICAgICAgICAgICBCT1VHSF9TUFJJVEVTWyhyb3cgKyAoMyAqIGNvbCkpICUgYm91Z2hDb3VudF0sXG4gICAgICAgICAgICBjdHgsXG4gICAgICAgICAgICB2aWV3cG9ydFggKyBoYWxmVGlsZSxcbiAgICAgICAgICAgIHZpZXdwb3J0WSArIGhhbGZUaWxlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDogYnJlYWs7XG4gICAgICB9XG4gICAgfSwgMCwgMSwgMSwgMSk7XG5cbiAgICB0aGlzLmVhY2hNdWRtYW5JblZpZXdwb3J0KHZpZXdwb3J0T3JpZ2luWCwgdmlld3BvcnRPcmlnaW5ZLCAobXVkbWFuLCB4LCB5KSA9PiB7XG4gICAgICB0aGlzLm11ZG1hblJlbmRlcmVyLmRyYXdDb252byhjdHgsIG11ZG1hbiwgeCwgeSwgdGltZXN0YW1wKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRyYXdCaXJkTGV2ZWwoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHRpbWVzdGFtcDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gVE9ETzogYmlyZHMhIGFuZCBvdGhlciBmbHlpbmcvc2t5IG9iamVjdHNcbiAgfVxuXG4gIGRyYXdDbG91ZExldmVsKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCB0aW1lc3RhbXA6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIGRheS9uaWdodDsgYXQgbmlnaHQsIGRhcmtuZXNzIGZhbGxzLCBmaXJlbGlnaHQgY3V0cyB0aHJvdWdoIHRoZVxuICAgIC8vIGRhcmtuZXNzLCBhbmQgZmxhbWVzIGFwcGVhciBhYm92ZSBmaXJlc1xuICAgIHRoaXMuZHJhd05pZ2h0SW50byhjdHgsIHRpbWVzdGFtcCk7XG4gIH1cblxuICBkcmF3T3JiaXRMZXZlbChjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgdGltZXN0YW1wOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB7XG4gICAgICB2aWV3cG9ydE9yaWdpblgsXG4gICAgICB2aWV3cG9ydE9yaWdpblksXG4gICAgICB2aWV3cG9ydFdpZHRoLFxuICAgICAgdmlld3BvcnRIZWlnaHQsXG4gICAgfSA9IHRoaXM7XG5cbiAgICBjb25zdCB7IG1vdmluZ1RhcmdldCB9ID0gdGhpcy5oZXJvLmxvY2FsLmRhdGE7XG4gICAgY29uc3QgeyBkZXN0aW5hdGlvbiB9ID0gdGhpcy5oZXJvLmxvY2FsO1xuXG4gICAgaWYgKG1vdmluZ1RhcmdldCkge1xuICAgICAgLy8gaW5kaWNhdG9yIHNob3dpbmcgbW92aW5nIHRhcmdldFxuICAgICAgY29uc3QgY3ljbGVQZXJjZW50ID0gKHRpbWVzdGFtcCAlIDUwMCkgLyA1MDA7XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBSRUQ7XG4gICAgICBjdHguZ2xvYmFsQWxwaGEgPSAxIC0gY3ljbGVQZXJjZW50O1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY3R4LmFyYyhcbiAgICAgICAgbW92aW5nVGFyZ2V0LnggLSB2aWV3cG9ydE9yaWdpblgsXG4gICAgICAgIG1vdmluZ1RhcmdldC55IC0gdmlld3BvcnRPcmlnaW5ZLFxuICAgICAgICBmKCgwLjUgKiB0aGlzLnRpbGVTaXplKSAqIGN5Y2xlUGVyY2VudCksXG4gICAgICAgIDAsXG4gICAgICAgIDIgKiBNYXRoLlBJLFxuICAgICAgKTtcbiAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7XG4gICAgfSBlbHNlIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgLy8gaW5kaWNhdG9yIHNob3dpbmcgZGVzdGluYXRpb25cbiAgICAgIGNvbnN0IGN5Y2xlUGVyY2VudCA9ICh0aW1lc3RhbXAgJSA1MDApIC8gNTAwO1xuICAgICAgY3R4LnN0cm9rZVN0eWxlID0gREFSS19TTEFURV9HUkFZO1xuICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMSAtIGN5Y2xlUGVyY2VudDtcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGN0eC5hcmMoXG4gICAgICAgIGRlc3RpbmF0aW9uLnggLSB2aWV3cG9ydE9yaWdpblgsXG4gICAgICAgIGRlc3RpbmF0aW9uLnkgLSB2aWV3cG9ydE9yaWdpblksXG4gICAgICAgIGYoKDAuNSAqIHRoaXMudGlsZVNpemUpICogY3ljbGVQZXJjZW50KSxcbiAgICAgICAgMCxcbiAgICAgICAgMiAqIE1hdGguUEksXG4gICAgICApO1xuICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMTtcbiAgICB9XG5cbiAgICAvLyBkcmF3IEhVRCAoaHlkcmF0aW9uIGJhcilcbiAgICBjdHguZHJhd0ltYWdlKFxuICAgICAgdGhpcy5odWRSZW5kZXJlci5jYW52YXMsXG4gICAgICAwLCAwLFxuICAgICAgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQsXG4gICAgICAwLCAwLFxuICAgICAgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQsXG4gICAgKTtcbiAgfVxuXG4gIGRyYXdMb29wKCk6IHZvaWQge1xuICAgIGNvbnN0IHtcbiAgICAgIHZpZXdwb3J0V2lkdGgsXG4gICAgICB2aWV3cG9ydEhlaWdodCxcbiAgICAgIHdvcmxkV2lkdGgsXG4gICAgICB3b3JsZEhlaWdodCxcbiAgICB9ID0gdGhpcztcblxuICAgIHRoaXMudmlld3BvcnRSZW5kZXJlci5kcmF3TG9vcCgoY3R4LCB0aW1lc3RhbXApID0+IHtcbiAgICAgIHRoaXMud29ybGQuZGF0YS50aW1lc3RhbXAgPSB0aW1lc3RhbXA7XG5cbiAgICAgIGlmICh0aGlzLm92ZXJsYXlGdWxsTWFwKSB7XG4gICAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQpO1xuICAgICAgICBjdHguZHJhd0ltYWdlKFxuICAgICAgICAgIHRoaXMud29ybGRSZW5kZXJlci5jYW52YXMsXG4gICAgICAgICAgMCwgMCxcbiAgICAgICAgICB3b3JsZFdpZHRoLCB3b3JsZEhlaWdodCxcbiAgICAgICAgICAwLCAwLFxuICAgICAgICAgIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0LFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kcmF3R3JvdW5kTGV2ZWwoY3R4LCB0aW1lc3RhbXApO1xuICAgICAgdGhpcy5kcmF3S25lZUxldmVsKGN0eCwgdGltZXN0YW1wKTtcbiAgICAgIHRoaXMuZHJhd0V5ZUxldmVsKGN0eCwgdGltZXN0YW1wKTtcbiAgICAgIHRoaXMuZHJhd0Nhbm9weUxldmVsKGN0eCwgdGltZXN0YW1wKTtcbiAgICAgIHRoaXMuZHJhd0JpcmRMZXZlbChjdHgsIHRpbWVzdGFtcCk7XG4gICAgICB0aGlzLmRyYXdDbG91ZExldmVsKGN0eCwgdGltZXN0YW1wKTtcbiAgICAgIHRoaXMuZHJhd09yYml0TGV2ZWwoY3R4LCB0aW1lc3RhbXApO1xuXG4gICAgICB0aGlzLmVhY2hNdWRtYW5JblZpZXdwb3J0KHRoaXMudmlld3BvcnRPcmlnaW5YLCB0aGlzLnZpZXdwb3J0T3JpZ2luWSwgKG11ZG1hbiwgeCwgeSkgPT4ge1xuICAgICAgICBtdWRtYW4udGljaygpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYXdXb3JsZCgpO1xuICAgIHRoaXMuZHJhd1NwYWNlKCk7XG4gICAgdGhpcy5kcmF3SHVkKCk7XG4gICAgdGhpcy5kcmF3RmlyZWxpZ2h0KCk7XG4gICAgdGhpcy5kcmF3TG9vcCgpO1xuICB9XG5cbiAgbmV4dEhlcm8oKTogdm9pZCB7XG4gICAgdGhpcy5oZXJvSW5kZXggPSAodGhpcy5oZXJvSW5kZXggKyAxKSAlIHRoaXMud29ybGQuZGF0YS5tdWRtZW4ubGVuZ3RoO1xuICB9XG5cbiAgcHJldkhlcm8oKTogdm9pZCB7XG4gICAgdGhpcy5oZXJvSW5kZXggPSB0aGlzLmhlcm9JbmRleCA9PT0gMFxuICAgICAgPyB0aGlzLndvcmxkLmRhdGEubXVkbWVuLmxlbmd0aCAtIDFcbiAgICAgIDogdGhpcy5oZXJvSW5kZXggLSAxO1xuICB9XG59XG4iLCJpbXBvcnQgTXVkd29ybGRNYXAgZnJvbSBcIkAvbWFwbWFraW5nL211ZHdvcmxkL011ZHdvcmxkTWFwXCI7XG5pbXBvcnQgeyBTaG9yZWxpbmUsIHNob3JlbGluZUF0LCBzaG9yZWxpbmVIYXNMYW5kIH0gZnJvbSBcIkAvcmVuZGVyaW5nL211ZHN0dWZmL1Nob3JlbGluZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkcmF3U2hvcmVsaW5lKFxuICBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgbWFwOiBNdWR3b3JsZE1hcCxcbiAgd29ybGRYOiBudW1iZXIsXG4gIHdvcmxkWTogbnVtYmVyLFxuICBkcmF3WDogbnVtYmVyLFxuICBkcmF3WTogbnVtYmVyLFxuICB0aWxlU2l6ZTogbnVtYmVyLFxuICBsYW5kUmVkID0gMCxcbiAgbGFuZEdyZWVuID0gMjAwLFxuICBsYW5kQmx1ZSA9IDAsXG4pOiB2b2lkIHtcbiAgY29uc3Qgc2hvcmVsaW5lID0gc2hvcmVsaW5lQXQod29ybGRYLCB3b3JsZFksIG1hcCwgdGlsZVNpemUpO1xuXG4gIGlmIChzaG9yZWxpbmVIYXNMYW5kKHNob3JlbGluZSwgU2hvcmVsaW5lLk5PTkUpKSByZXR1cm47XG5cbiAgY29uc3QgaGFsZlRpbGVTaXplID0gdGlsZVNpemUgLyAyO1xuICBjb25zdCB0aWxlTGVmdFggPSBkcmF3WDtcbiAgY29uc3QgdGlsZVJpZ2h0WCA9IHRpbGVMZWZ0WCArIHRpbGVTaXplO1xuICBjb25zdCB0aWxlVG9wWSA9IGRyYXdZO1xuICBjb25zdCB0aWxlQm90dG9tWSA9IGRyYXdZICsgdGlsZVNpemU7XG4gIGNvbnN0IHRpbGVDZW50ZXJYID0gdGlsZUxlZnRYICsgaGFsZlRpbGVTaXplO1xuICBjb25zdCB0aWxlQ2VudGVyWSA9IGRyYXdZICsgaGFsZlRpbGVTaXplO1xuXG4gIGNvbnN0IHNob3JlU2l6ZSA9IHRpbGVTaXplIC8gNDtcbiAgY29uc3Qgc2hvcmVUb3BZID0gdGlsZVRvcFkgKyBzaG9yZVNpemU7XG4gIGNvbnN0IHNob3JlQm90dG9tWSA9IHRpbGVUb3BZICsgKHRpbGVTaXplIC0gc2hvcmVTaXplKTtcbiAgY29uc3Qgc2hvcmVMZWZ0WCA9IHRpbGVMZWZ0WCArIHNob3JlU2l6ZTtcbiAgY29uc3Qgc2hvcmVSaWdodFggPSB0aWxlTGVmdFggKyAodGlsZVNpemUgLSBzaG9yZVNpemUpO1xuXG4gIC8vIEFsd2F5cyBnb2luZyB0byBuZWVkIHRvIGJlIGNoZWNrZWRcbiAgY29uc3QgbGFuZFRvcCA9IHNob3JlbGluZUhhc0xhbmQoc2hvcmVsaW5lLCBTaG9yZWxpbmUuVE9QKTtcbiAgY29uc3QgbGFuZFJpZ2h0ID0gc2hvcmVsaW5lSGFzTGFuZChzaG9yZWxpbmUsIFNob3JlbGluZS5SSUdIVCk7XG4gIGNvbnN0IGxhbmRCb3R0b20gPSBzaG9yZWxpbmVIYXNMYW5kKHNob3JlbGluZSwgU2hvcmVsaW5lLkJPVFRPTSk7XG4gIGNvbnN0IGxhbmRMZWZ0ID0gc2hvcmVsaW5lSGFzTGFuZChzaG9yZWxpbmUsIFNob3JlbGluZS5MRUZUKTtcblxuICAvLyBNaWdodCBub3QgbmVlZCB0byBiZSBjaGVja2VkXG4gIGxldCBsYW5kVG9wTGVmdDogYm9vbGVhbjtcbiAgbGV0IGxhbmRUb3BSaWdodDogYm9vbGVhbjtcbiAgbGV0IGxhbmRCb3R0b21SaWdodDogYm9vbGVhbjtcbiAgbGV0IGxhbmRCb3R0b21MZWZ0OiBib29sZWFuO1xuXG4gIGN0eC5maWxsU3R5bGUgPSBgcmdiKCR7bGFuZFJlZH0sICR7bGFuZEdyZWVufSwgJHtsYW5kQmx1ZX0pYDtcblxuICAvLyAuLS0tLS0tLS0uXG4gIC8vIHw/Pz8/Pz8/P3xcbiAgLy8gfD8gICAgICA/fFxuICAvLyB8Pz8/Pz8/Pz98XG4gIC8vICctLS0tLS0tLSdcbiAgaWYgKGxhbmRUb3ApIHtcbiAgICAvLyAuLS0tLS0tLS0uXG4gICAgLy8gfCMjIyMjIyMjfFxuICAgIC8vIHw/ICAgICAgP3xcbiAgICAvLyB8Pz8/Pz8/Pz98XG4gICAgLy8gJy0tLS0tLS0tJ1xuICAgIGN0eC5maWxsUmVjdCh0aWxlTGVmdFgsIHRpbGVUb3BZLCB0aWxlU2l6ZSwgc2hvcmVTaXplKTtcblxuICAgIGlmIChsYW5kQm90dG9tKSB7XG4gICAgICAvLyAuLS0tLS0tLS0uXG4gICAgICAvLyB8IyMjIyMjIyN8XG4gICAgICAvLyB8PyAgICAgID98XG4gICAgICAvLyB8IyMjIyMjIyN8XG4gICAgICAvLyAnLS0tLS0tLS0nXG4gICAgICBjdHguZmlsbFJlY3QodGlsZUxlZnRYLCBzaG9yZUJvdHRvbVksIHRpbGVTaXplLCBzaG9yZVNpemUpO1xuXG4gICAgICBpZiAobGFuZFJpZ2h0IHx8IGxhbmRMZWZ0KSB7XG4gICAgICAgIGlmIChsYW5kUmlnaHQpIGN0eC5maWxsUmVjdCh0aWxlQ2VudGVyWCwgdGlsZVRvcFksIGhhbGZUaWxlU2l6ZSwgdGlsZVNpemUpO1xuICAgICAgICBpZiAobGFuZExlZnQpIGN0eC5maWxsUmVjdCh0aWxlTGVmdFgsIHRpbGVUb3BZLCBoYWxmVGlsZVNpemUsIHRpbGVTaXplKTtcblxuICAgICAgICAvLyBjYXJ2ZSBvdXQgYSBjZW50ZXIgY2lyY2xlXG4gICAgICAgIGNvbnN0IG9sZFN0eWxlID0gY3R4LmZpbGxTdHlsZTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IFwicmdiKDAsIDEwMCwgMjAwKVwiO1xuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGN0eC5hcmModGlsZUNlbnRlclgsIHRpbGVDZW50ZXJZLCBzaG9yZVNpemUsIDAsIDIgKiBNYXRoLlBJKTtcbiAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgY3R4LmZpbGxTdHlsZSA9IG9sZFN0eWxlO1xuICAgICAgfVxuICAgICAgLy8gLi0tLS0tLS0tLiB8IC4tLS0tLS0tLS4gfCAuLS0tLS0tLS0uIHwgLi0tLS0tLS0tLlxuICAgICAgLy8gfCMjIyMjIyMjfCB8IHwjIyMjIyMjI3wgfCB8IyMjIyMjIyN8IHwgfCMjIyMjIyMjfFxuICAgICAgLy8gfHggICAgICB4fCB8IHwjICAgICAgeHwgfCB8eCAgICAgICN8IHwgfCMgICAgICAjfFxuICAgICAgLy8gfCMjIyMjIyMjfCB8IHwjIyMjIyMjI3wgfCB8IyMjIyMjIyN8IHwgfCMjIyMjIyMjfFxuICAgICAgLy8gJy0tLS0tLS0tJyB8ICctLS0tLS0tLScgfCAnLS0tLS0tLS0nIHwgJy0tLS0tLS0tJ1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIC4tLS0tLS0tLS5cbiAgICAvLyB8IyMjIyMjIyN8XG4gICAgLy8gfD8gICAgICA/fFxuICAgIC8vIHw/eHh4eHh4P3xcbiAgICAvLyAnLS0tLS0tLS0nXG5cbiAgICBpZiAobGFuZFJpZ2h0KSB7XG4gICAgICAvLyAuLS0tLS0tLS0uXG4gICAgICAvLyB8IyMjIyMjIyN8XG4gICAgICAvLyB8PyAgICAgICN8XG4gICAgICAvLyB8P3h4eHh4eCN8XG4gICAgICAvLyAnLS0tLS0tLS0nXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjdHgubW92ZVRvKHRpbGVDZW50ZXJYLCB0aWxlVG9wWSk7XG4gICAgICBjdHgubGluZVRvKHRpbGVDZW50ZXJYLCBzaG9yZVRvcFkpO1xuICAgICAgY3R4LmFyY1RvKHNob3JlUmlnaHRYLCBzaG9yZVRvcFksIHNob3JlUmlnaHRYLCB0aWxlQm90dG9tWSwgc2hvcmVTaXplKTtcbiAgICAgIGN0eC5saW5lVG8oc2hvcmVSaWdodFgsIHRpbGVCb3R0b21ZKTtcbiAgICAgIGN0eC5saW5lVG8odGlsZVJpZ2h0WCwgdGlsZUJvdHRvbVkpO1xuICAgICAgY3R4LmxpbmVUbyh0aWxlUmlnaHRYLCB0aWxlVG9wWSk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICBjdHguZmlsbCgpO1xuXG4gICAgICBpZiAobGFuZExlZnQpIHtcbiAgICAgICAgLy8gLi0tLS0tLS0tLlxuICAgICAgICAvLyB8IyMjIyMjIyN8XG4gICAgICAgIC8vIHwjICAgICAgI3xcbiAgICAgICAgLy8gfCN4eHh4eHgjfFxuICAgICAgICAvLyAnLS0tLS0tLS0nXG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgY3R4Lm1vdmVUbyh0aWxlQ2VudGVyWCwgdGlsZVRvcFkpO1xuICAgICAgICBjdHgubGluZVRvKHRpbGVDZW50ZXJYLCBzaG9yZVRvcFkpO1xuICAgICAgICBjdHguYXJjVG8oc2hvcmVMZWZ0WCwgc2hvcmVUb3BZLCBzaG9yZUxlZnRYLCB0aWxlQm90dG9tWSwgc2hvcmVTaXplKTtcbiAgICAgICAgY3R4LmxpbmVUbyhzaG9yZUxlZnRYLCB0aWxlQm90dG9tWSk7XG4gICAgICAgIGN0eC5saW5lVG8odGlsZUxlZnRYLCB0aWxlQm90dG9tWSk7XG4gICAgICAgIGN0eC5saW5lVG8odGlsZUxlZnRYLCB0aWxlVG9wWSk7XG4gICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4LmZpbGwoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyAuLS0tLS0tLS0uXG4gICAgICAvLyB8IyMjIyMjIyN8XG4gICAgICAvLyB8eCAgICAgICN8XG4gICAgICAvLyB8P3h4eHh4eCN8XG4gICAgICAvLyAnLS0tLS0tLS0nXG5cbiAgICAgIGxhbmRCb3R0b21MZWZ0ID8/PSBzaG9yZWxpbmVIYXNMYW5kKHNob3JlbGluZSwgU2hvcmVsaW5lLkJPVFRPTV9MRUZUKTtcbiAgICAgIGlmIChsYW5kQm90dG9tTGVmdCkge1xuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGN0eC5hcmModGlsZUxlZnRYLCB0aWxlQm90dG9tWSwgc2hvcmVTaXplLCAtMC41ICogTWF0aC5QSSwgMCk7XG4gICAgICAgIGN0eC5saW5lVG8odGlsZUxlZnRYLCB0aWxlQm90dG9tWSk7XG4gICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgIH1cbiAgICAgIC8vIC4tLS0tLS0tLS4gfCAuLS0tLS0tLS0uXG4gICAgICAvLyB8IyMjIyMjIyN8IHwgfCMjIyMjIyMjfFxuICAgICAgLy8gfHggICAgICAjfCB8IHx4ICAgICAgI3xcbiAgICAgIC8vIHwjeHh4eHh4I3wgfCB8eHh4eHh4eCN8XG4gICAgICAvLyAnLS0tLS0tLS0nIHwgJy0tLS0tLS0tJ1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIC4tLS0tLS0tLS5cbiAgICAvLyB8IyMjIyMjIyN8XG4gICAgLy8gfD8gICAgICB4fFxuICAgIC8vIHw/eHh4eHh4P3xcbiAgICAvLyAnLS0tLS0tLS0nXG5cbiAgICBpZiAobGFuZExlZnQpIHtcbiAgICAgIC8vIC4tLS0tLS0tLS5cbiAgICAgIC8vIHwjIyMjIyMjI3xcbiAgICAgIC8vIHwjICAgICAgeHxcbiAgICAgIC8vIHwjeHh4eHh4P3xcbiAgICAgIC8vICctLS0tLS0tLSdcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGN0eC5tb3ZlVG8odGlsZUNlbnRlclgsIHRpbGVUb3BZKTtcbiAgICAgIGN0eC5saW5lVG8odGlsZUNlbnRlclgsIHNob3JlVG9wWSk7XG4gICAgICBjdHguYXJjVG8oc2hvcmVMZWZ0WCwgc2hvcmVUb3BZLCBzaG9yZUxlZnRYLCB0aWxlQm90dG9tWSwgc2hvcmVTaXplKTtcbiAgICAgIGN0eC5saW5lVG8oc2hvcmVMZWZ0WCwgdGlsZUJvdHRvbVkpO1xuICAgICAgY3R4LmxpbmVUbyh0aWxlTGVmdFgsIHRpbGVCb3R0b21ZKTtcbiAgICAgIGN0eC5saW5lVG8odGlsZUxlZnRYLCB0aWxlVG9wWSk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICBjdHguZmlsbCgpO1xuXG4gICAgICBsYW5kQm90dG9tUmlnaHQgPz89IHNob3JlbGluZUhhc0xhbmQoc2hvcmVsaW5lLCBTaG9yZWxpbmUuQk9UVE9NX1JJR0hUKTtcbiAgICAgIGlmIChsYW5kQm90dG9tUmlnaHQpIHtcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICBjdHguYXJjKHRpbGVSaWdodFgsIHRpbGVCb3R0b21ZLCBzaG9yZVNpemUsIE1hdGguUEksIC0wLjUgKiBNYXRoLlBJKTtcbiAgICAgICAgY3R4LmxpbmVUbyh0aWxlUmlnaHRYLCB0aWxlQm90dG9tWSk7XG4gICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgIH1cbiAgICAgIC8vIC4tLS0tLS0tLS4gfCAuLS0tLS0tLS0uXG4gICAgICAvLyB8IyMjIyMjIyN8IHwgfCMjIyMjIyMjfFxuICAgICAgLy8gfCMgICAgICB4fCB8IHwjICAgICAgeHxcbiAgICAgIC8vIHwjeHh4eHh4eHwgfCB8I3h4eHh4eCN8XG4gICAgICAvLyAnLS0tLS0tLS0nIHwgJy0tLS0tLS0tJ1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIC4tLS0tLS0tLS5cbiAgICAvLyB8IyMjIyMjIyN8XG4gICAgLy8gfHggICAgICB4fFxuICAgIC8vIHw/eHh4eHh4P3xcbiAgICAvLyAnLS0tLS0tLS0nXG5cbiAgICBsYW5kQm90dG9tTGVmdCA/Pz0gc2hvcmVsaW5lSGFzTGFuZChzaG9yZWxpbmUsIFNob3JlbGluZS5CT1RUT01fTEVGVCk7XG4gICAgbGFuZEJvdHRvbVJpZ2h0ID8/PSBzaG9yZWxpbmVIYXNMYW5kKHNob3JlbGluZSwgU2hvcmVsaW5lLkJPVFRPTV9SSUdIVCk7XG4gICAgaWYgKGxhbmRCb3R0b21MZWZ0KSB7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjdHguYXJjKHRpbGVMZWZ0WCwgdGlsZUJvdHRvbVksIHNob3JlU2l6ZSwgLTAuNSAqIE1hdGguUEksIDApO1xuICAgICAgY3R4LmxpbmVUbyh0aWxlTGVmdFgsIHRpbGVCb3R0b21ZKTtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgIGN0eC5maWxsKCk7XG4gICAgfVxuICAgIGlmIChsYW5kQm90dG9tUmlnaHQpIHtcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGN0eC5hcmModGlsZVJpZ2h0WCwgdGlsZUJvdHRvbVksIHNob3JlU2l6ZSwgTWF0aC5QSSwgLTAuNSAqIE1hdGguUEkpO1xuICAgICAgY3R4LmxpbmVUbyh0aWxlUmlnaHRYLCB0aWxlQm90dG9tWSk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICBjdHguZmlsbCgpO1xuICAgIH1cbiAgICAvLyAuLS0tLS0tLS0uIHwgLi0tLS0tLS0tLiB8IC4tLS0tLS0tLS4gfCAuLS0tLS0tLS0uXG4gICAgLy8gfCMjIyMjIyMjfCB8IHwjIyMjIyMjI3wgfCB8IyMjIyMjIyN8IHwgfCMjIyMjIyMjfFxuICAgIC8vIHx4ICAgICAgeHwgfCB8eCAgICAgIHh8IHwgfHggICAgICB4fCB8IHx4ICAgICAgeHxcbiAgICAvLyB8eHh4eHh4eHh8IHwgfHh4eHh4eHgjfCB8IHwjeHh4eHh4eHwgfCB8I3h4eHh4eCN8XG4gICAgLy8gJy0tLS0tLS0tJyB8ICctLS0tLS0tLScgfCAnLS0tLS0tLS0nIHwgJy0tLS0tLS0tJ1xuICB9IGVsc2UgaWYgKGxhbmRCb3R0b20pIHtcbiAgICAvLyAuLS0tLS0tLS0uXG4gICAgLy8gfD94eHh4eHg/fFxuICAgIC8vIHw/ICAgICAgP3xcbiAgICAvLyB8IyMjIyMjIyN8XG4gICAgLy8gJy0tLS0tLS0tJ1xuICAgIGN0eC5maWxsUmVjdCh0aWxlTGVmdFgsIHNob3JlQm90dG9tWSwgdGlsZVNpemUsIHNob3JlU2l6ZSk7XG5cbiAgICBpZiAobGFuZExlZnQpIHtcbiAgICAgIC8vIC4tLS0tLS0tLS5cbiAgICAgIC8vIHwjeHh4eHh4P3xcbiAgICAgIC8vIHwjICAgICAgP3xcbiAgICAgIC8vIHwjIyMjIyMjI3xcbiAgICAgIC8vICctLS0tLS0tLSdcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGN0eC5tb3ZlVG8odGlsZUNlbnRlclgsIHRpbGVCb3R0b21ZKTtcbiAgICAgIGN0eC5saW5lVG8odGlsZUNlbnRlclgsIHNob3JlQm90dG9tWSk7XG4gICAgICBjdHguYXJjVG8oc2hvcmVMZWZ0WCwgc2hvcmVCb3R0b21ZLCBzaG9yZUxlZnRYLCB0aWxlVG9wWSwgc2hvcmVTaXplKTtcbiAgICAgIGN0eC5saW5lVG8oc2hvcmVMZWZ0WCwgdGlsZVRvcFkpO1xuICAgICAgY3R4LmxpbmVUbyh0aWxlTGVmdFgsIHRpbGVUb3BZKTtcbiAgICAgIGN0eC5saW5lVG8odGlsZUxlZnRYLCB0aWxlQm90dG9tWSk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICBjdHguZmlsbCgpO1xuXG4gICAgICBpZiAobGFuZFJpZ2h0KSB7XG4gICAgICAgIC8vIC4tLS0tLS0tLS5cbiAgICAgICAgLy8gfCN4eHh4eHgjfFxuICAgICAgICAvLyB8IyAgICAgICN8XG4gICAgICAgIC8vIHwjIyMjIyMjI3xcbiAgICAgICAgLy8gJy0tLS0tLS0tJ1xuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGN0eC5tb3ZlVG8odGlsZUNlbnRlclgsIHRpbGVCb3R0b21ZKTtcbiAgICAgICAgY3R4LmxpbmVUbyh0aWxlQ2VudGVyWCwgc2hvcmVCb3R0b21ZKTtcbiAgICAgICAgY3R4LmFyY1RvKHNob3JlUmlnaHRYLCBzaG9yZUJvdHRvbVksIHNob3JlUmlnaHRYLCB0aWxlVG9wWSwgc2hvcmVTaXplKTtcbiAgICAgICAgY3R4LmxpbmVUbyhzaG9yZVJpZ2h0WCwgdGlsZVRvcFkpO1xuICAgICAgICBjdHgubGluZVRvKHRpbGVSaWdodFgsIHRpbGVUb3BZKTtcbiAgICAgICAgY3R4LmxpbmVUbyh0aWxlUmlnaHRYLCB0aWxlQm90dG9tWSk7XG4gICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgY3R4LmZpbGwoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyAuLS0tLS0tLS0uXG4gICAgICAvLyB8I3h4eHh4eD98XG4gICAgICAvLyB8IyAgICAgIHh8XG4gICAgICAvLyB8IyMjIyMjIyN8XG4gICAgICAvLyAnLS0tLS0tLS0nXG5cbiAgICAgIGxhbmRUb3BSaWdodCA/Pz0gc2hvcmVsaW5lSGFzTGFuZChzaG9yZWxpbmUsIFNob3JlbGluZS5UT1BfUklHSFQpO1xuICAgICAgaWYgKGxhbmRUb3BSaWdodCkge1xuICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgIGN0eC5hcmModGlsZVJpZ2h0WCwgdGlsZVRvcFksIHNob3JlU2l6ZSwgMC41ICogTWF0aC5QSSwgTWF0aC5QSSk7XG4gICAgICAgIGN0eC5saW5lVG8odGlsZVJpZ2h0WCwgdGlsZVRvcFkpO1xuICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIGN0eC5maWxsKCk7XG4gICAgICB9XG4gICAgICAvLyAuLS0tLS0tLS0uIHwgLi0tLS0tLS0tLlxuICAgICAgLy8gfCN4eHh4eHh4fCB8IHwjeHh4eHh4I3xcbiAgICAgIC8vIHwjICAgICAgeHwgfCB8IyAgICAgIHh8XG4gICAgICAvLyB8IyMjIyMjIyN8IHwgfCMjIyMjIyMjfFxuICAgICAgLy8gJy0tLS0tLS0tJyB8ICctLS0tLS0tLSdcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyAuLS0tLS0tLS0uXG4gICAgLy8gfD94eHh4eHg/fFxuICAgIC8vIHx4ICAgICAgP3xcbiAgICAvLyB8IyMjIyMjIyN8XG4gICAgLy8gJy0tLS0tLS0tJ1xuXG4gICAgaWYgKGxhbmRSaWdodCkge1xuICAgICAgLy8gLi0tLS0tLS0tLlxuICAgICAgLy8gfD94eHh4eHgjfFxuICAgICAgLy8gfHggICAgICAjfFxuICAgICAgLy8gfCMjIyMjIyMjfFxuICAgICAgLy8gJy0tLS0tLS0tJ1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY3R4Lm1vdmVUbyh0aWxlQ2VudGVyWCwgdGlsZUJvdHRvbVkpO1xuICAgICAgY3R4LmxpbmVUbyh0aWxlQ2VudGVyWCwgc2hvcmVCb3R0b21ZKTtcbiAgICAgIGN0eC5hcmNUbyhzaG9yZVJpZ2h0WCwgc2hvcmVCb3R0b21ZLCBzaG9yZVJpZ2h0WCwgdGlsZVRvcFksIHNob3JlU2l6ZSk7XG4gICAgICBjdHgubGluZVRvKHNob3JlUmlnaHRYLCB0aWxlVG9wWSk7XG4gICAgICBjdHgubGluZVRvKHRpbGVSaWdodFgsIHRpbGVUb3BZKTtcbiAgICAgIGN0eC5saW5lVG8odGlsZVJpZ2h0WCwgdGlsZUJvdHRvbVkpO1xuICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgY3R4LmZpbGwoKTtcblxuICAgICAgbGFuZFRvcExlZnQgPz89IHNob3JlbGluZUhhc0xhbmQoc2hvcmVsaW5lLCBTaG9yZWxpbmUuVE9QX0xFRlQpO1xuICAgICAgaWYgKGxhbmRUb3BMZWZ0KSB7XG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgY3R4LmFyYyh0aWxlTGVmdFgsIHRpbGVUb3BZLCBzaG9yZVNpemUsIDAsIDAuNSAqIE1hdGguUEkpO1xuICAgICAgICBjdHgubGluZVRvKHRpbGVMZWZ0WCwgdGlsZVRvcFkpO1xuICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIGN0eC5maWxsKCk7XG4gICAgICB9XG4gICAgICAvLyAuLS0tLS0tLS0uIHwgLi0tLS0tLS0tLlxuICAgICAgLy8gfHh4eHh4eHgjfCB8IHwjeHh4eHh4I3xcbiAgICAgIC8vIHx4ICAgICAgI3wgfCB8eCAgICAgICN8XG4gICAgICAvLyB8IyMjIyMjIyN8IHwgfCMjIyMjIyMjfFxuICAgICAgLy8gJy0tLS0tLS0tJyB8ICctLS0tLS0tLSdcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyAuLS0tLS0tLS0uXG4gICAgLy8gfD94eHh4eHg/fFxuICAgIC8vIHx4ICAgICAgeHxcbiAgICAvLyB8IyMjIyMjIyN8XG4gICAgLy8gJy0tLS0tLS0tJ1xuXG4gICAgbGFuZFRvcExlZnQgPz89IHNob3JlbGluZUhhc0xhbmQoc2hvcmVsaW5lLCBTaG9yZWxpbmUuVE9QX0xFRlQpO1xuICAgIGxhbmRUb3BSaWdodCA/Pz0gc2hvcmVsaW5lSGFzTGFuZChzaG9yZWxpbmUsIFNob3JlbGluZS5UT1BfUklHSFQpO1xuICAgIGlmIChsYW5kVG9wTGVmdCkge1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY3R4LmFyYyh0aWxlTGVmdFgsIHRpbGVUb3BZLCBzaG9yZVNpemUsIDAsIDAuNSAqIE1hdGguUEkpO1xuICAgICAgY3R4LmxpbmVUbyh0aWxlTGVmdFgsIHRpbGVUb3BZKTtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgIGN0eC5maWxsKCk7XG4gICAgfVxuICAgIGlmIChsYW5kVG9wUmlnaHQpIHtcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGN0eC5hcmModGlsZVJpZ2h0WCwgdGlsZVRvcFksIHNob3JlU2l6ZSwgMC41ICogTWF0aC5QSSwgTWF0aC5QSSk7XG4gICAgICBjdHgubGluZVRvKHRpbGVSaWdodFgsIHRpbGVUb3BZKTtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgIGN0eC5maWxsKCk7XG4gICAgfVxuICAgIC8vIC4tLS0tLS0tLS4gfCAuLS0tLS0tLS0uIHwgLi0tLS0tLS0tLiB8IC4tLS0tLS0tLS5cbiAgICAvLyB8eHh4eHh4eHh8IHwgfCN4eHh4eHh4fCB8IHwjeHh4eHh4I3wgfCB8eHh4eHh4eCN8XG4gICAgLy8gfHggICAgICB4fCB8IHx4ICAgICAgeHwgfCB8eCAgICAgIHh8IHwgfHggICAgICB4fFxuICAgIC8vIHwjIyMjIyMjI3wgfCB8IyMjIyMjIyN8IHwgfCMjIyMjIyMjfCB8IHwjIyMjIyMjI3xcbiAgICAvLyAnLS0tLS0tLS0nIHwgJy0tLS0tLS0tJyB8ICctLS0tLS0tLScgfCAnLS0tLS0tLS0nXG4gIH0gZWxzZSBpZiAobGFuZExlZnQpIHtcbiAgICAvLyAuLS0tLS0tLS0uXG4gICAgLy8gfCN4eHh4eHg/fFxuICAgIC8vIHwjICAgICAgP3xcbiAgICAvLyB8I3h4eHh4eD98XG4gICAgLy8gJy0tLS0tLS0tJ1xuICAgIGN0eC5maWxsUmVjdCh0aWxlTGVmdFgsIHRpbGVUb3BZLCBzaG9yZVNpemUsIHRpbGVTaXplKTtcblxuICAgIGlmIChsYW5kUmlnaHQpIHtcbiAgICAgIC8vIC4tLS0tLS0tLS5cbiAgICAgIC8vIHwjeHh4eHh4I3xcbiAgICAgIC8vIHwjICAgICAgI3xcbiAgICAgIC8vIHwjeHh4eHh4I3xcbiAgICAgIC8vICctLS0tLS0tLSdcbiAgICAgIGN0eC5maWxsUmVjdChzaG9yZVJpZ2h0WCwgdGlsZVRvcFksIHNob3JlU2l6ZSwgdGlsZVNpemUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIC4tLS0tLS0tLS5cbiAgICAvLyB8I3h4eHh4eD98XG4gICAgLy8gfCMgICAgICB4fFxuICAgIC8vIHwjeHh4eHh4P3xcbiAgICAvLyAnLS0tLS0tLS0nXG5cbiAgICBsYW5kVG9wUmlnaHQgPz89IHNob3JlbGluZUhhc0xhbmQoc2hvcmVsaW5lLCBTaG9yZWxpbmUuVE9QX1JJR0hUKTtcbiAgICBsYW5kQm90dG9tUmlnaHQgPz89IHNob3JlbGluZUhhc0xhbmQoc2hvcmVsaW5lLCBTaG9yZWxpbmUuQk9UVE9NX1JJR0hUKTtcbiAgICBpZiAobGFuZFRvcFJpZ2h0KSB7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjdHguYXJjKHRpbGVSaWdodFgsIHRpbGVUb3BZLCBzaG9yZVNpemUsIDAuNSAqIE1hdGguUEksIE1hdGguUEkpO1xuICAgICAgY3R4LmxpbmVUbyh0aWxlUmlnaHRYLCB0aWxlVG9wWSk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICBjdHguZmlsbCgpO1xuICAgIH1cbiAgICBpZiAobGFuZEJvdHRvbVJpZ2h0KSB7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjdHguYXJjKHRpbGVSaWdodFgsIHRpbGVCb3R0b21ZLCBzaG9yZVNpemUsIE1hdGguUEksIC0wLjUgKiBNYXRoLlBJKTtcbiAgICAgIGN0eC5saW5lVG8odGlsZVJpZ2h0WCwgdGlsZUJvdHRvbVkpO1xuICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgY3R4LmZpbGwoKTtcbiAgICB9XG4gICAgLy8gLi0tLS0tLS0tLiB8IC4tLS0tLS0tLS4gfCAuLS0tLS0tLS0uIHwgLi0tLS0tLS0tLlxuICAgIC8vIHwjeHh4eHh4eHwgfCB8I3h4eHh4eHh8IHwgfCN4eHh4eHgjfCB8IHwjeHh4eHh4I3xcbiAgICAvLyB8IyAgICAgIHh8IHwgfCMgICAgICB4fCB8IHwjICAgICAgeHwgfCB8IyAgICAgIHh8XG4gICAgLy8gfCN4eHh4eHh4fCB8IHwjeHh4eHh4I3wgfCB8I3h4eHh4eHh8IHwgfCN4eHh4eHgjfFxuICAgIC8vICctLS0tLS0tLScgfCAnLS0tLS0tLS0nIHwgJy0tLS0tLS0tJyB8ICctLS0tLS0tLSdcbiAgfSBlbHNlIGlmIChsYW5kUmlnaHQpIHtcbiAgICAvLyAuLS0tLS0tLS0uXG4gICAgLy8gfD94eHh4eHgjfFxuICAgIC8vIHx4ICAgICAgI3xcbiAgICAvLyB8P3h4eHh4eCN8XG4gICAgLy8gJy0tLS0tLS0tJ1xuICAgIGN0eC5maWxsUmVjdChzaG9yZVJpZ2h0WCwgdGlsZVRvcFksIHNob3JlU2l6ZSwgdGlsZVNpemUpO1xuXG4gICAgbGFuZFRvcExlZnQgPz89IHNob3JlbGluZUhhc0xhbmQoc2hvcmVsaW5lLCBTaG9yZWxpbmUuVE9QX0xFRlQpO1xuICAgIGxhbmRCb3R0b21MZWZ0ID8/PSBzaG9yZWxpbmVIYXNMYW5kKHNob3JlbGluZSwgU2hvcmVsaW5lLkJPVFRPTV9MRUZUKTtcbiAgICBpZiAobGFuZFRvcExlZnQpIHtcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGN0eC5hcmModGlsZUxlZnRYLCB0aWxlVG9wWSwgc2hvcmVTaXplLCAwLCAwLjUgKiBNYXRoLlBJKTtcbiAgICAgIGN0eC5saW5lVG8odGlsZUxlZnRYLCB0aWxlVG9wWSk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICBjdHguZmlsbCgpO1xuICAgIH1cbiAgICBpZiAobGFuZEJvdHRvbUxlZnQpIHtcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGN0eC5hcmModGlsZUxlZnRYLCB0aWxlQm90dG9tWSwgc2hvcmVTaXplLCAtMC41ICogTWF0aC5QSSwgMCk7XG4gICAgICBjdHgubGluZVRvKHRpbGVMZWZ0WCwgdGlsZUJvdHRvbVkpO1xuICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgY3R4LmZpbGwoKTtcbiAgICB9XG4gICAgLy8gLi0tLS0tLS0tLiB8IC4tLS0tLS0tLS4gfCAuLS0tLS0tLS0uIHwgLi0tLS0tLS0tLlxuICAgIC8vIHx4eHh4eHh4I3wgfCB8eHh4eHh4eCN8IHwgfCN4eHh4eHgjfCB8IHwjeHh4eHh4I3xcbiAgICAvLyB8eCAgICAgICN8IHwgfHggICAgICAjfCB8IHx4ICAgICAgI3wgfCB8eCAgICAgICN8XG4gICAgLy8gfHh4eHh4eHgjfCB8IHwjeHh4eHh4I3wgfCB8eHh4eHh4eCN8IHwgfCN4eHh4eHgjfFxuICAgIC8vICctLS0tLS0tLScgfCAnLS0tLS0tLS0nIHwgJy0tLS0tLS0tJyB8ICctLS0tLS0tLSdcbiAgfSBlbHNlIHtcbiAgICAvLyAuLS0tLS0tLS0uXG4gICAgLy8gfD94eHh4eHg/fFxuICAgIC8vIHx4ICAgICAgeHxcbiAgICAvLyB8P3h4eHh4eD98XG4gICAgLy8gJy0tLS0tLS0tJ1xuXG4gICAgbGFuZFRvcExlZnQgPz89IHNob3JlbGluZUhhc0xhbmQoc2hvcmVsaW5lLCBTaG9yZWxpbmUuVE9QX0xFRlQpO1xuICAgIGxhbmRCb3R0b21MZWZ0ID8/PSBzaG9yZWxpbmVIYXNMYW5kKHNob3JlbGluZSwgU2hvcmVsaW5lLkJPVFRPTV9MRUZUKTtcbiAgICBsYW5kVG9wUmlnaHQgPz89IHNob3JlbGluZUhhc0xhbmQoc2hvcmVsaW5lLCBTaG9yZWxpbmUuVE9QX1JJR0hUKTtcbiAgICBsYW5kQm90dG9tUmlnaHQgPz89IHNob3JlbGluZUhhc0xhbmQoc2hvcmVsaW5lLCBTaG9yZWxpbmUuQk9UVE9NX1JJR0hUKTtcbiAgICBpZiAobGFuZFRvcExlZnQpIHtcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGN0eC5hcmModGlsZUxlZnRYLCB0aWxlVG9wWSwgc2hvcmVTaXplLCAwLCAwLjUgKiBNYXRoLlBJKTtcbiAgICAgIGN0eC5saW5lVG8odGlsZUxlZnRYLCB0aWxlVG9wWSk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICBjdHguZmlsbCgpO1xuICAgIH1cbiAgICBpZiAobGFuZFRvcFJpZ2h0KSB7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjdHguYXJjKHRpbGVSaWdodFgsIHRpbGVUb3BZLCBzaG9yZVNpemUsIDAuNSAqIE1hdGguUEksIE1hdGguUEkpO1xuICAgICAgY3R4LmxpbmVUbyh0aWxlUmlnaHRYLCB0aWxlVG9wWSk7XG4gICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICBjdHguZmlsbCgpO1xuICAgIH1cbiAgICBpZiAobGFuZEJvdHRvbVJpZ2h0KSB7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjdHguYXJjKHRpbGVSaWdodFgsIHRpbGVCb3R0b21ZLCBzaG9yZVNpemUsIE1hdGguUEksIC0wLjUgKiBNYXRoLlBJKTtcbiAgICAgIGN0eC5saW5lVG8odGlsZVJpZ2h0WCwgdGlsZUJvdHRvbVkpO1xuICAgICAgY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgY3R4LmZpbGwoKTtcbiAgICB9XG4gICAgaWYgKGxhbmRCb3R0b21MZWZ0KSB7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBjdHguYXJjKHRpbGVMZWZ0WCwgdGlsZUJvdHRvbVksIHNob3JlU2l6ZSwgLTAuNSAqIE1hdGguUEksIDApO1xuICAgICAgY3R4LmxpbmVUbyh0aWxlTGVmdFgsIHRpbGVCb3R0b21ZKTtcbiAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgIGN0eC5maWxsKCk7XG4gICAgfVxuICAgIC8vICwtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLlxuICAgIC8vIHwgLi0tLS0tLS0tLiB8IC4tLS0tLS0tLS4gfFxuICAgIC8vIHwgfHh4eHh4eHh4fCB8IHwjeHh4eHh4I3wgfFxuICAgIC8vIHwgfHggICAgICB4fCB8IHx4ICAgICAgeHwgfFxuICAgIC8vIHwgfHh4eHh4eHh4fCB8IHwjeHh4eHh4I3wgfFxuICAgIC8vIHwgJy0tLS0tLS0tJyB8ICctLS0tLS0tLScgfFxuICAgIC8vIDstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0uXG4gICAgLy8gfCAuLS0tLS0tLS0uIHwgLi0tLS0tLS0tLiB8IC4tLS0tLS0tLS4gfCAuLS0tLS0tLS0uIHxcbiAgICAvLyB8IHx4eHh4eHh4I3wgfCB8I3h4eHh4eHh8IHwgfCN4eHh4eHgjfCB8IHwjeHh4eHh4I3wgfFxuICAgIC8vIHwgfHggICAgICB4fCB8IHx4ICAgICAgeHwgfCB8eCAgICAgIHh8IHwgfHggICAgICB4fCB8XG4gICAgLy8gfCB8I3h4eHh4eCN8IHwgfCN4eHh4eHgjfCB8IHwjeHh4eHh4eHwgfCB8eHh4eHh4eCN8IHxcbiAgICAvLyB8ICctLS0tLS0tLScgfCAnLS0tLS0tLS0nIHwgJy0tLS0tLS0tJyB8ICctLS0tLS0tLScgfFxuICAgIC8vIDstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS5cbiAgICAvLyB8IC4tLS0tLS0tLS4gfCAuLS0tLS0tLS0uIHwgLi0tLS0tLS0tLiB8IC4tLS0tLS0tLS4gfCAuLS0tLS0tLS0uIHwgLi0tLS0tLS0tLiB8XG4gICAgLy8gfCB8eHh4eHh4eHh8IHwgfHh4eHh4eHgjfCB8IHx4eHh4eHh4I3wgfCB8I3h4eHh4eHh8IHwgfCN4eHh4eHh4fCB8IHwjeHh4eHh4I3wgfFxuICAgIC8vIHwgfHggICAgICB4fCB8IHx4ICAgICAgeHwgfCB8eCAgICAgIHh8IHwgfHggICAgICB4fCB8IHx4ICAgICAgeHwgfCB8eCAgICAgIHh8IHxcbiAgICAvLyB8IHwjeHh4eHh4I3wgfCB8I3h4eHh4eHh8IHwgfHh4eHh4eHgjfCB8IHx4eHh4eHh4I3wgfCB8I3h4eHh4eHh8IHwgfHh4eHh4eHh4fCB8XG4gICAgLy8gfCAnLS0tLS0tLS0nIHwgJy0tLS0tLS0tJyB8ICctLS0tLS0tLScgfCAnLS0tLS0tLS0nIHwgJy0tLS0tLS0tJyB8ICctLS0tLS0tLScgfFxuICAgIC8vIDstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSdcbiAgICAvLyB8IC4tLS0tLS0tLS4gfCAuLS0tLS0tLS0uIHwgLi0tLS0tLS0tLiB8IC4tLS0tLS0tLS4gfFxuICAgIC8vIHwgfCN4eHh4eHh4fCB8IHx4eHh4eHh4I3wgfCB8eHh4eHh4eHh8IHwgfHh4eHh4eHh4fCB8XG4gICAgLy8gfCB8eCAgICAgIHh8IHwgfHggICAgICB4fCB8IHx4ICAgICAgeHwgfCB8eCAgICAgIHh8IHxcbiAgICAvLyB8IHx4eHh4eHh4eHwgfCB8eHh4eHh4eHh8IHwgfHh4eHh4eHgjfCB8IHwjeHh4eHh4eHwgfFxuICAgIC8vIHwgJy0tLS0tLS0tJyB8ICctLS0tLS0tLScgfCAnLS0tLS0tLS0nIHwgJy0tLS0tLS0tJyB8XG4gICAgLy8gJy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSdcbiAgfVxufVxuIiwiaW1wb3J0IHsgbXVkd29ybGQgfSBmcm9tIFwiQC9iZWhhdmlvci9tdWRtYW4vZGF0YS9NdWR3b3JsZEJsYWNrYm9hcmRcIjtcbmltcG9ydCBNdWR3b3JsZFJlbmRlcmVyIGZyb20gXCJAL3JlbmRlcmluZy9tdWRzdHVmZi9NdWR3b3JsZFJlbmRlcmVyXCI7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCAoKSA9PiB7XG4gIGNvbnN0IHZpZXdwb3J0Q2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ2aWV3cG9ydFwiKSBhcyBIVE1MQ2FudmFzRWxlbWVudDtcbiAgY29uc3QgcmVuZGVyZXIgPSBuZXcgTXVkd29ybGRSZW5kZXJlcih2aWV3cG9ydENhbnZhcywgbXVkd29ybGQsIDI0KTtcbiAgcmVuZGVyZXIuc3RhcnQoKTtcblxuICAvLyByZW5kZXJlci5vdmVybGF5RnVsbE1hcCA9IHRydWU7XG5cbiAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZXZlbnQpID0+IHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSBcIkFycm93UmlnaHRcIjogcmVuZGVyZXIubmV4dEhlcm8oKTsgYnJlYWs7XG4gICAgICBjYXNlIFwiQXJyb3dMZWZ0XCI6IHJlbmRlcmVyLnByZXZIZXJvKCk7IGJyZWFrO1xuICAgICAgY2FzZSBcIm1cIjogcmVuZGVyZXIub3ZlcmxheUZ1bGxNYXAgPSAhcmVuZGVyZXIub3ZlcmxheUZ1bGxNYXA7IGJyZWFrO1xuICAgICAgY2FzZSBcImRcIjogcmVuZGVyZXIud29ybGQubGV0SXRCZURheSgpOyBicmVhaztcbiAgICAgIGNhc2UgXCJuXCI6IHJlbmRlcmVyLndvcmxkLmxldEl0QmVOaWdodCgpOyBicmVhaztcbiAgICAgIC8vIGRlZmF1bHQ6IGNvbnNvbGUubG9nKGV2ZW50LmtleSk7XG4gICAgfVxuICB9KTtcblxuICB2aWV3cG9ydENhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgeyB4LCB5LCBkYXRhIH0gPSByZW5kZXJlci5oZXJvLmxvY2FsO1xuICAgIGNvbnN0IHZpZXdwb3J0T3JpZ2luWCA9IHggLSAocmVuZGVyZXIudmlld3BvcnRXaWR0aCAvIDIpO1xuICAgIGNvbnN0IHZpZXdwb3J0T3JpZ2luWSA9IHkgLSAocmVuZGVyZXIudmlld3BvcnRIZWlnaHQgLyAyKTtcbiAgICBjb25zdCBkZXN0WCA9IHZpZXdwb3J0T3JpZ2luWCArIGV2ZW50Lm9mZnNldFg7XG4gICAgY29uc3QgZGVzdFkgPSB2aWV3cG9ydE9yaWdpblkgKyBldmVudC5vZmZzZXRZO1xuXG4gICAgcmVuZGVyZXIud29ybGQuZGF0YS5tYXAucG9wdWxhdGVQYXRoKFxuICAgICAgZGF0YS5wYXRoLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBkZXN0WCxcbiAgICAgIGRlc3RZLFxuICAgICAgZGF0YS5leWVzaWdodCxcbiAgICApO1xuXG4gICAgY29uc3QgaXRlbSA9IHJlbmRlcmVyLndvcmxkLmRhdGEuaXRlbXMuaXRlbUF0KGRlc3RYLCBkZXN0WSwgcmVuZGVyZXIudGlsZVNpemUpO1xuICAgIGlmIChpdGVtKSByZW5kZXJlci5oZXJvLmxvY2FsLmRhdGEudGFyZ2V0ZWRJdGVtID0gaXRlbTtcbiAgfSk7XG5cbiAgLy8gVE9ETzogcmVtb3ZlXG4gICh3aW5kb3cgYXMgYW55KS5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAod2luZG93IGFzIGFueSkucGF0aEZpbmRlciA9IHJlbmRlcmVyLndvcmxkLmRhdGEubWFwLnBhdGhGaW5kZXI7XG59KTtcblxuIl0sIm5hbWVzIjpbImRhdGEiLCJ0aGlzIiwiSXRlbVR5cGUiLCJ0eXBlIiwieCIsInkiLCJjb2xsZWN0aWJsZSIsImlkIiwiU3ltYm9sIiwiaGVsZCIsInVzZWQiLCJ1c2UiLCJsb2NhbCIsIndvcmxkIiwiZHJvcCIsIm1vdmVUbyIsInJlZnVyYmlzaCIsIkZsdWlkVHlwZSIsImYiLCJNYXRoIiwiZmxvb3IiLCJjIiwiY2VpbCIsInJhbmQiLCJyYW5kb20iLCJmaWxsZWRXaXRoIiwidm9sdW1lIiwiY29udGVudCIsIkJPVFRMRSIsIl9jb250ZW50IiwidmFsdWUiLCJtaW4iLCJtYXgiLCJib3VuZCIsIkFJUiIsImlzRW1wdHkiLCJjYW5BZGQiLCJpdGVtVHlwZSIsImlzRnVsbCIsImZpbGxXaXRoIiwiYW1vdW50IiwiZHVtcCIsImluaXRpYWxDb250ZW50IiwiY29udGVudFRvQWRkIiwicmVzaXplIiwiV0FURVIiLCJvbGRIeWRyYXRpb24iLCJoeWRyYXRpb24iLCJoeWRyYXRlIiwiaHlkcmF0aW9uQW1vdW50IiwiRklSRSIsInNpdHRpbmciLCJmYWNlIiwicmV2ZXJzZUZpbmQiLCJsaXN0IiwibWFwcGVyIiwiaSIsImxlbmd0aCIsIm1hcHBlZFNldEZvciIsIm1hcCIsImtleSIsInZhbHVlcyIsImdldCIsIlNldCIsInNldCIsImNvb3JkcyIsIkludDE2QXJyYXkiLCJkaXN0YW5jZUJldHdlZW4iLCJvcmlnaW5YIiwib3JpZ2luWSIsInRhcmdldFgiLCJ0YXJnZXRZIiwiZHgiLCJkeSIsInNxcnQiLCJpbnNpZGVSZWN0IiwiaGVpZ2h0Iiwid2lkdGgiLCJyYW5kb21Qb2ludEluQ2lyY2xlIiwibWluUmFkaXVzIiwibWF4UmFkaXVzIiwicmFuZEFuZ2xlIiwiUEkiLCJtaW5SYWRpdXNQZXJjZW50IiwicmFuZFJhZGl1cyIsImNvcyIsInNpbiIsIml0ZW1zQnlJZCIsIk1hcCIsImlkc0J5VHlwZSIsImdyYXZleWFyZCIsImFkZCIsIml0ZW0iLCJpZHNGb3IiLCJkZWxldGUiLCJraWxsIiwiZ3JhdmV5YXJkRm9yIiwiY29uc3RydWN0b3IiLCJwdXNoIiwicmVzdXJyZWN0IiwiaXRlbUNsYXNzIiwiem9tYmllIiwicG9wIiwiY3JlYXRlQm90dGxlIiwiYm90dGxlIiwiY3JlYXRlRmlyZSIsImZpcmUiLCJmaW5kIiwiRXJyb3IiLCJmb3JFYWNoT2ZUeXBlIiwiZm9yRWFjaCIsImZpbmRPZlR5cGUiLCJ0ZXN0IiwiaWRJdGVyYXRvciIsImVudHJ5IiwibmV4dCIsImRvbmUiLCJmaW5kSW5BbGxJdGVtcyIsIml0ZW1JdGVyYXRvciIsImZpbmRDbG9zZXN0IiwiZmlsdGVyIiwiY2xvc2VzdERpc3RhbmNlIiwiY2xvc2VzdEl0ZW0iLCJ1bmRlZmluZWQiLCJpdGVtT25TcG90IiwiZGlzdGFuY2UiLCJpdGVtQXQiLCJyYWRpdXMiLCJyb3dDb3VudCIsImNvbENvdW50IiwiVHlwZWRBcnJheUNvbnN0cnVjdG9yIiwiY29sUG93ZXIiLCJsb2cyIiwicGFkZGVkQ29sQ291bnQiLCJjZWxsQ291bnQiLCJjZWxscyIsInJvd0F0SW5kZXgiLCJpbmRleCIsImNvbEF0SW5kZXgiLCJpbmRleEF0Iiwicm93IiwiY29sIiwidmFsdWVBdCIsInNldFZhbHVlQXQiLCJ2YWwiLCJkZWxWYWx1ZUF0IiwiY2xlYXJWYWx1ZXMiLCJmaWxsIiwiaW5jVmFsdWVBdCIsImRlY1ZhbHVlQXQiLCJlYWNoIiwiRjIiLCJHMiIsIkczIiwiRjQiLCJHNCIsImdyYWQzIiwiRmxvYXQzMkFycmF5IiwiZ3JhZDQiLCJyYW5kb21PclNlZWQiLCJzZWVkIiwiczAiLCJzMSIsInMyIiwibWFzaCIsIm4iLCJ0b1N0cmluZyIsImNoYXJDb2RlQXQiLCJoIiwibWFzaGVyIiwidCIsImFsZWEiLCJwIiwiVWludDhBcnJheSIsInIiLCJhdXgiLCJidWlsZFBlcm11dGF0aW9uVGFibGUiLCJwZXJtIiwicGVybU1vZDEyIiwibm9pc2UyRCIsIm4wIiwibjEiLCJuMiIsInMiLCJqIiwieDAiLCJ5MCIsImkxIiwiajEiLCJ4MSIsInkxIiwieDIiLCJ5MiIsImlpIiwiamoiLCJ0MCIsImdpMCIsInQxIiwiZ2kxIiwidDIiLCJnaTIiLCJub2lzZTNEIiwieiIsIm4zIiwiayIsInowIiwiazEiLCJpMiIsImoyIiwiazIiLCJ6MSIsInoyIiwieDMiLCJ5MyIsInozIiwia2siLCJ0MyIsImdpMyIsIm5vaXNlNEQiLCJ3IiwibjQiLCJsIiwidzAiLCJyYW5reCIsInJhbmt5IiwicmFua3oiLCJyYW5rdyIsImwxIiwibDIiLCJpMyIsImozIiwiazMiLCJsMyIsIncxIiwidzIiLCJ3MyIsIng0IiwieTQiLCJ6NCIsInc0IiwibGwiLCJ0NCIsImdpNCIsImNvbnRpbmVudFNpbXBsZXgiLCJsYW5kU2ltcGxleCIsImxvY2FsU2ltcGxleCIsImxvY2FsRWxldmF0aW9uTm9pc2UiLCJlbGV2YXRpb25Ob2lzZSIsImNvbnRpbmVudEVsZXZhdGlvbk5vaXNlIiwibGFuZEVsZXZhdGlvbk5vaXNlIiwiQ09OVElORU5UX1dFSUdIVCIsIm1vaXN0dXJlU2ltcGxleCIsIm1vaXN0dXJlTm9pc2UiLCJ3ZWlnaHRIaWdoIiwicGVyY2VudCIsInBvd2VyIiwiZXhwb25lbnQiLCJUUkVFX0xJTkUiLCJmbG9yYVNpbXBsZXgiLCJkaXN0YW5jZVRyYXZlbGVkIiwiZGlzdGFuY2VUb0VuZCIsInBhcmVudCIsImNvc3QiLCJjZWxsQmxvY2tlZCIsIm5vZGVzVG9XYWxrIiwid2Fsa2VkTm9kZXMiLCJyZXNldCIsInBvcHVsYXRlUGF0aCIsInBhdGgiLCJzdGFydFgiLCJzdGFydFkiLCJkZXN0WCIsImRlc3RZIiwiZXllc2lnaHQiLCJzdGVwRGlzdGFuY2UiLCJjdXJyZW50IiwidG90YWxEaXN0YW5jZSIsIlBhdGhOb2RlIiwicG9wTG93ZXN0Q29zdFVud2Fsa2VkTm9kZSIsImRlc3RpbmF0aW9uIiwidW5jaGFpbkludG9QYXRoIiwiZm9yRWFjaE5laWdoYm9yT2YiLCJkaXN0YW5jZVRvVHJhdmVsIiwid2Fsa2VkIiwidW53YWxrZWROb2RlIiwidW53YWxrZWQiLCJsb3dlc3RJbmRleCIsImxvd2VzdCIsInNwbGljZSIsIm5vZGUiLCJueSIsImNhcmRpbmFsV2VpZ2h0IiwiZGlhZ29uYWxXZWlnaHQiLCJTdHJ1Y3R1cmUiLCJ0bzMyQml0cyIsInBsYWNlIiwiYml0cyIsImZyb20zMkJpdHMiLCJvZmZzZXQiLCJ0aWxlU2l6ZSIsImdyaWQiLCJVaW50MzJBcnJheSIsInBhdGhGaW5kZXIiLCJ3YWxrYWJsZUF0IiwiZmlsbFdpdGhUZXJyYWluIiwiX3ZhbCIsImVsZXZhdGlvbiIsIm5vaXNlVG9CeXRlIiwidW5kZXJ3YXRlciIsImRyeW5lc3MiLCJ3ZXRuZXNzIiwiYWJzIiwibW9pc3R1cmUiLCJmbG9yYWxpdHkiLCJFTEVWQVRJT05fV0VJR0hUIiwiZmxvcmFOb2lzZSIsInN0cnVjdHVyZSIsIlRSRUUiLCJOT05FIiwidGlsZVZhbHVlIiwiZWFjaFRpbGUiLCJlbGV2YXRpb25Gcm9tVGlsZVZhbHVlIiwibW9pc3R1cmVGcm9tVGlsZVZhbHVlIiwic3RydWN0dXJlRnJvbVRpbGVWYWx1ZSIsInVuZGVyd2F0ZXJGcm9tVGlsZVZhbHVlIiwiZmVlZE1hcHBlciIsImVhY2hOZWlnaGJvcmluZ1RpbGUiLCJuUm93IiwibkNvbCIsIk11ZHdvcmxkTWFwIiwibm9pc2VNb2RpZmllciIsIkJvb2xlYW4iLCJ3YWxrYWJsZUZyb21UaWxlVmFsdWUiLCJ4VG9Db2wiLCJ5VG9Sb3ciLCJyYW5kb21Db29yZHNPbkxhbmQiLCJyYW5kb21XYWxrYWJsZUNvb3JkcyIsIndhbGthYmxlIiwicmFuZG9tV2Fsa2FibGVUaWxlQ29vcmRzIiwid29ybGRDb29yZHMiLCJ2YWx1ZUF0VGlsZSIsImluQm91bmRzIiwidW5kZXJ3YXRlckF0IiwidGlsZUlzVG91Y2hlZCIsImxlZnRYIiwicmlnaHRYIiwidG9wWSIsImJvdHRvbVkiLCJkaXN0YW5jZVRvVG9wTGVmdCIsImRpc3RhbmNlVG9Cb3R0b21SaWdodCIsImRpc3RhbmNlVG9Ub3BSaWdodCIsImVhY2hUaWxlQXREaXN0YW5jZUZyb20iLCJjZW50ZXJDb2wiLCJjZW50ZXJSb3ciLCJzdGFydENvbCIsInN0YXJ0Um93Iiwic3RhcnRlZCIsImlzRGF3biIsImRheUVsYXBzZWQiLCJpc0RheSIsImlzRHVzayIsImlzTmlnaHQiLCJNdWR3b3JsZEJsYWNrYm9hcmQiLCJ0aW1lc3RhbXAiLCJkYXlMZW5ndGgiLCJyb3RhdGVXb3JsZCIsInBlcmNlbnRPZkRheSIsImRheU9mZnNldCIsImxldEl0QmVEYXkiLCJzZXRUaW1lT2ZEYXkiLCJsZXRJdEJlTmlnaHQiLCJ0YXJnZXREYXlNcyIsImN1cnJlbnREYXlNcyIsImZpbmRDbG9zZXN0TXVkbWFuIiwibXVkbWVuIiwicG9wdWxhdGlvbiIsIm11ZG1hbiIsImNsb3Nlc3RNdWRtYW4iLCJmaW5kQ2xvc2VzdEZlbGxvd011ZG1hbiIsIm11ZHdvcmxkSXRlbXMiLCJtdWR3b3JsZE1hcCIsIm11ZHdvcmxkIiwiaXRlbXMiLCJyb290IiwidGljayIsInJ1biIsIk11ZG1hbkJsYWNrYm9hcmQiLCJkZWZhdWx0cyIsImN1cnJlbnRYIiwiY3VycmVudFkiLCJ1bnJlYWNoYWJsZSIsInNpemUiLCJtb3ZlU3BlZWQiLCJ3YXJtdGgiLCJzb2NpYWwiLCJpbnZlbnRvcnkiLCJ4RGlyZWN0aW9uIiwieURpcmVjdGlvbiIsInRhcmdldGVkSXRlbSIsInRhbGtpbmdUbyIsIm1vdmluZ1RhcmdldCIsImlzTmVhciIsImNsZWFyUGF0aCIsInNldEN1cnJlbnRQb3NpdGlvbiIsIm1vdmVUb3dhcmQiLCJzcGVlZCIsInZlY3RvciIsInZlY3RvclgiLCJ2ZWN0b3JZIiwic2NhbGUiLCJmb2xsb3dQYXRoIiwic3BlZWRMaW1pdCIsIm5leHRQYXRoTm9kZSIsImRpc3RhbmNlVG9Ob2RlIiwiZGVoeWRyYXRlIiwiY2hpbGwiLCJ0b2FzdCIsImZlZWxMb25lbHkiLCJmZWVsU29jaWFsIiwiaW52ZW50b3J5T2YiLCJpc0hvbGRpbmdJdGVtIiwiaGFzIiwicGlja1VwIiwidW51c2VkRnJvbUludmVudG9yeSIsIml0ZW1zSXRlcmF0b3IiLCJpc1VucmVhY2hhYmxlIiwiaXNXaXRoaW5FeWVzaWdodCIsIm5lYXJieVRocmVzaG9sZCIsImlzQ3Jvd2RpbmciLCJjcm93ZGluZ1RocmVzaG9sZCIsImlzQXQiLCJpc09uZVN0ZXBBd2F5RnJvbSIsImRpc3RhbmNlVG8iLCJ0YWxrVG8iLCJjb21wYXRyaW90IiwiY29tcGF0cmlvdFRhbGtpbmdUbyIsIkJlaGF2aW9yU3RhdHVzIiwic3RhdHVzIiwibGV2ZWwiLCJpbml0IiwicHJvY2VzcyIsIl9sb2NhbCIsIl93b3JsZCIsIkJhc2VOb2RlIiwiZGVidWciLCJpbmRlbnQiLCJyZXBlYXQiLCJjb25zb2xlIiwibG9nIiwibmFtZSIsImluY3JlbWVudExldmVsIiwicnVubmluZyIsInN1Y2NlZWQiLCJmYWlsIiwic2h1ZmZsZSIsImFyZ3MiLCJjaGlsZHJlbiIsImNoaWxkIiwic2h1ZmZsZUlmTmVjZXNzYXJ5Iiwic2h1ZmZsZUluUGxhY2UiLCJmYWlsZWQiLCJzdWNjZWVkZWQiLCJsYW1iZGEiLCJyZXN1bHQiLCJoYXNQYXRoIiwicHJvY2Vzc1NldFBhdGhUbyIsImJlaGF2aW9yTm9kZSIsImRlc3RpbmF0aW9uTm9kZSIsInRyaWVzIiwicG9pbnQiLCJwcm9jZXNzU2V0UGF0aFRvTmVhciIsInJhdGlvIiwidGFyZ2V0VHJpZXMiLCJ0YXJnZXQiLCJwYXRoVHJpZXMiLCJoZWxkSXRlbSIsInBlcmNlbnRXYXJtIiwiY2xvc2VzdEZpcmUiLCJzcG90IiwicGVyY2VudFNvY2lhbCIsImxhc3RJZCIsImJlaGF2aW9yIiwiYmVoYXZpb3JUcmVlIiwiY2FudmFzRWwiLCJmcHMiLCJsYXN0RnJhbWVBdCIsImNhbnZhcyIsImN0eCIsImdldENvbnRleHQiLCJzZXRDYW52YXNTaXplIiwibXNQZXJGcmFtZSIsInN0eWxlIiwiZHJhd0xvb3AiLCJkcmF3IiwibG9vcCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIm5leHRGcmFtZUF0IiwiZHJhd09uY2UiLCJTaG9yZWxpbmUiLCJCUk9XTiIsIkRBUktfQlJPV04iLCJTQU5EWV9CUk9XTiIsIkRBUktfU0xBVEVfR1JBWSIsIkJMVUUiLCJCTEFDSyIsIlJFRCIsIkRBUktfR1JFRU4iLCJXSElURSIsIkxJR0hUX0hBTEYiLCJzaG9yZWxpbmVIYXNMYW5kIiwic2hvcmVsaW5lIiwiZGVmYXVsdFNwcml0ZVdpZHRoIiwiZGVmYXVsdFNwcml0ZUhlaWdodCIsInNwcml0ZVJlbmRlcmVycyIsImFkZFNwcml0ZSIsInBhZGRpbmciLCJkcmF3T3JXaWR0aCIsImRyYXdPckhlaWdodCIsImRyYXdTcHJpdGUiLCJyZW5kZXJlciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIm1pcnJvclNwcml0ZSIsInNvdXJjZVNwcml0ZUlkIiwidGFyZ2V0U3ByaXRlSWQiLCJvcmlnaW5hbCIsIm1pcnJvcmVkIiwic2F2ZSIsImRyYXdJbWFnZSIsInJlc3RvcmUiLCJzcHJpdGVJZCIsInNwcml0ZU9mZnNldFgiLCJzcHJpdGVPZmZzZXRZIiwic3ByaXRlQ2FudmFzIiwic3ByaXRlTGVmdFgiLCJzcHJpdGVUb3BZIiwiZmluYWxXaWR0aCIsImZpbmFsSGVpZ2h0IiwiTXVkbWFuU3ByaXRlIiwiQ29udm9TcHJpdGUiLCJXQUxLSU5HX1NQUklURVNfRlJPTlQiLCJXQUxLSU5HXzFfRlJPTlQiLCJXQUxLSU5HXzJfRlJPTlQiLCJXQUxLSU5HXzNfRlJPTlQiLCJXQUxLSU5HXzRfRlJPTlQiLCJXQUxLSU5HX1NQUklURVNfQkFDSyIsIldBTEtJTkdfMV9CQUNLIiwiV0FMS0lOR18yX0JBQ0siLCJXQUxLSU5HXzNfQkFDSyIsIldBTEtJTkdfNF9CQUNLIiwiV0FMS0lOR19SSUdIVF9TUFJJVEVTX0ZST05UIiwiV0FMS0lOR19SSUdIVF8xX0ZST05UIiwiV0FMS0lOR19SSUdIVF8yX0ZST05UIiwiV0FMS0lOR19SSUdIVF8zX0ZST05UIiwiV0FMS0lOR19SSUdIVF80X0ZST05UIiwiV0FMS0lOR19SSUdIVF9TUFJJVEVTX0JBQ0siLCJXQUxLSU5HX1JJR0hUXzFfQkFDSyIsIldBTEtJTkdfUklHSFRfMl9CQUNLIiwiV0FMS0lOR19SSUdIVF8zX0JBQ0siLCJXQUxLSU5HX1JJR0hUXzRfQkFDSyIsIldBTEtJTkdfTEVGVF9TUFJJVEVTX0ZST05UIiwiV0FMS0lOR19MRUZUXzFfRlJPTlQiLCJXQUxLSU5HX0xFRlRfMl9GUk9OVCIsIldBTEtJTkdfTEVGVF8zX0ZST05UIiwiV0FMS0lOR19MRUZUXzRfRlJPTlQiLCJXQUxLSU5HX0xFRlRfU1BSSVRFU19CQUNLIiwiV0FMS0lOR19MRUZUXzFfQkFDSyIsIldBTEtJTkdfTEVGVF8yX0JBQ0siLCJXQUxLSU5HX0xFRlRfM19CQUNLIiwiV0FMS0lOR19MRUZUXzRfQkFDSyIsIlRBTEtJTkdfU1BSSVRFUyIsIlRBTEtJTkdfMSIsIlRBTEtJTkdfMiIsIlRBTEtJTkdfMyIsIlRBTEtJTkdfNCIsIlRBTEtJTkdfNSIsIlRBTEtJTkdfNiIsIlRBTEtJTkdfNyIsIlRBTEtJTkdfOCIsIlRBTEtJTkdfOSIsIlRBTEtJTkdfMTAiLCJUQUxLSU5HXzExIiwiVEFMS0lOR18xMiIsIm11ZG1hblNpemUiLCJzcHJpdGVSZW5kZXJlciIsImNhbnZhc1dpZHRoIiwiY2FudmFzSGVpZ2h0IiwiY29udm9SZW5kZXJlciIsImFkZFN0YW5kaW5nU3ByaXRlcyIsImFkZFNpdHRpbmdTcHJpdGVzIiwiYWRkV2Fsa2luZ1Nwcml0ZXMiLCJhZGRDb252b1Nwcml0ZXMiLCJib2R5Q2VudGVyWSIsImJvZHlIZWlnaHQiLCJib2R5VG9wWSIsImJvZHlDZW50ZXJYIiwiYm9keVdpZHRoIiwiYm9keUxlZnRYIiwiYm9keUJvdHRvbVkiLCJidXR0UmFkaXVzIiwiYm9keVJpZ2h0WCIsImRyYXdVcHBlckJvZHkiLCJmYWNpbmdSaWdodCIsImJ1dHRCb3R0b21ZIiwiYnV0dExlZnRJbm5lclgiLCJidXR0UmlnaHRJbm5lclgiLCJmaWxsU3R5bGUiLCJiZWdpblBhdGgiLCJhcmMiLCJsaW5lVG8iLCJhcmNUbyIsImNsb3NlUGF0aCIsImRyYXdGYWNlIiwiZmFjZVJhZGl1cyIsImV5ZWJhbGxSYWRpdXMiLCJmYWNlQ2VudGVyWCIsImZhY2VDZW50ZXJZIiwibGVmdEV5ZUNlbnRlclgiLCJyaWdodEV5ZUNlbnRlclgiLCJleWVicm93V2lkdGgiLCJleWVicm93SGVpZ2h0IiwiZXllYnJvd0xlZnRYIiwiZXllYnJvd1RvcFkiLCJtb3V0aFdpZHRoIiwibW91dGhIZWlnaHQiLCJtb3V0aExlZnRYIiwibW91dGhUb3BZIiwiZmlsbFJlY3QiLCJkcmF3U2ltcGxlRmFjZSIsImZhY2VSaWdodFgiLCJkcmF3U3RhbmRpbmciLCJmYWNpbmdGcm9udCIsImxlZ1dpZHRoIiwibGVnSGVpZ2h0IiwiZHJhd1N0YW5kaW5nUmlnaHQiLCJkcmF3U2l0dGluZyIsInRyYW5zbGF0ZSIsImxlZnRMZWdMZWZ0WCIsImxlZnRMZWdDZW50ZXJYIiwicmlnaHRMZWdMZWZ0WCIsInJpZ2h0TGVnQ2VudGVyWCIsImxlZ3NUb3BZIiwibGVnc0JvdHRvbVkiLCJmb290UmFkaXVzIiwiZHJhd1NpdHRpbmdSaWdodCIsInJpZ2h0TGVnVG9wWSIsInJpZ2h0TGVnQm90dG9tWSIsInJpZ2h0Rm9vdENlbnRlclgiLCJsZWZ0TGVnV2lkdGgiLCJsZWZ0Rm9vdFJhZGl1cyIsImxlZnRMZWdSaWdodFgiLCJkcmF3V2Fsa2luZzEiLCJkcmF3V2Fsa2luZzIiLCJkcmF3V2Fsa2luZzMiLCJkcmF3V2Fsa2luZzQiLCJkcmF3V2Fsa2luZ1JpZ2h0MSIsImRyYXdXYWxraW5nUmlnaHQyIiwiZHJhd1dhbGtpbmdSaWdodDMiLCJkcmF3V2Fsa2luZ1JpZ2h0NCIsIlNUQU5ESU5HX0JBQ0siLCJTVEFORElOR19GUk9OVCIsIlNUQU5ESU5HX1JJR0hUX0JBQ0siLCJTVEFORElOR19SSUdIVF9GUk9OVCIsIlNUQU5ESU5HX0xFRlRfQkFDSyIsIlNUQU5ESU5HX0xFRlRfRlJPTlQiLCJTSVRUSU5HX0JBQ0siLCJTSVRUSU5HX0ZST05UIiwiU0lUVElOR19SSUdIVF9CQUNLIiwiU0lUVElOR19SSUdIVF9GUk9OVCIsIlNJVFRJTkdfTEVGVF9CQUNLIiwiU0lUVElOR19MRUZUX0ZST05UIiwiZHJhd0J1YmJsZSIsImNlbnRlclgiLCJjZW50ZXJZIiwiYnViYmxlUmFkaXVzIiwidGFpbEJvdHRvbVkiLCJ0YWlsTGVmdFgiLCJidWJibGVCb3R0b21ZIiwic3Ryb2tlU3R5bGUiLCJsaW5lV2lkdGgiLCJzdHJva2UiLCJCTEFOSyIsInNwcml0ZSIsInByaW50YWJsZVRvcFkiLCJwcmludGFibGVMZWZ0WCIsInByaW50YWJsZUhlaWdodCIsInByaW50YWJsZVdpZHRoIiwibGluZUNvdW50IiwibGluZUhlaWdodCIsImxpbmVUb3BZIiwiYnJlYWtDb3VudCIsImJyZWFrTGVmdFgiLCJtaXJyb3JSZW5kZXJlciIsImRyYXdNdWRtYW4iLCJjeWNsZVBvc2l0aW9uIiwiZHJhd0NvbnZvIiwidGFsa2luZ1Nwcml0ZSIsIkJvdHRsZVNwcml0ZSIsIkVNUFRZIiwiYm90dGxlUGF0aCIsIkJvdHRsZVJlbmRlcmVyIiwiY3JlYXRlQm90dGxlUGF0aCIsIldBVEVSX0ZVTEwiLCJjbGlwIiwiV0FURVJfUEFSVElBTCIsIm5lY2tXaWR0aCIsIm5lY2tMZWZ0WCIsIm5lY2tSaWdodFgiLCJib3R0b21SYWRpdXMiLCJsaXBCb3R0b21ZIiwic2hvdWxkZXJZIiwibmVja1JhZGl1cyIsIlBhdGgyRCIsImRyYXdCb3R0bGUiLCJwZXJjZW50RnVsbCIsIkZsYW1lU3ByaXRlIiwiRkxBTUVfU1BSSVRFUyIsIkZMQU1FXzEiLCJGTEFNRV8yIiwiRkxBTUVfMyIsIkZMQU1FXzQiLCJGTEFNRV81IiwiRkxBTUVfNiIsIkZMQU1FXzciLCJGTEFNRV84IiwiZmxhbWVDZW50ZXJZIiwiRmxhbWVSZW5kZXJlciIsImRyYXdSYW5kb21GbGFtZUNvbXBvbmVudCIsImNvbG9yIiwiaGFsZlNpemUiLCJ4Sml0dGVyIiwieUppdHRlciIsImFuZ2xlIiwicm90YXRlIiwiZ2xvYmFsQWxwaGEiLCJzZXRUcmFuc2Zvcm0iLCJkcmF3QW5pbWF0ZWQiLCJmbGFtZVNwcml0ZSIsIlRyZWVTcHJpdGUiLCJCT1VHSF9TUFJJVEVTIiwiQk9VR0hTXzEiLCJCT1VHSFNfMiIsIkJPVUdIU18zIiwiQk9VR0hTXzQiLCJTVFVNUCIsInRydW5rUmFkaXVzIiwic2lkZXNCb3R0b21ZIiwic2lkZXNUb3BZIiwicm91Z2hTdHVtcENlbnRlclkiLCJyb3VnaFN0dW1wUmFkaXVzIiwiVHJlZVJlbmRlcmVyIiwiZHJhd1JhbmRvbUJvdWdoQ29tcG9uZW50IiwibWluT3BhY2l0eSIsIm1heE9wYWNpdHkiLCJzcHJlYWQiLCJiYXNlUmFkaXVzIiwiYXZnUmFkaXVzIiwib3BhY2l0eSIsInZpZXdwb3J0Q2FudmFzIiwibXVkd29ybGRCbGFja2JvYXJkIiwib3ZlcmxheUZ1bGxNYXAiLCJoZXJvSW5kZXgiLCJ3b3JsZFJlbmRlcmVyIiwic3BhY2VSZW5kZXJlciIsInZpZXdwb3J0UmVuZGVyZXIiLCJodWRSZW5kZXJlciIsIm5pZ2h0UmVuZGVyZXIiLCJmaXJlbGlnaHRSZW5kZXJlciIsImZpcmVsaWdodFNpemUiLCJmbGFtZVJlbmRlcmVyIiwiYm90dGxlUmVuZGVyZXIiLCJ0cmVlUmVuZGVyZXIiLCJtdWRtYW5SZW5kZXJlciIsImNyZWF0ZU11ZG1hbiIsIm11ZG1hbkNvb3JkcyIsImZyYW1lc1BlclNlY29uZCIsImhlcm8iLCJ2aWV3cG9ydFdpZHRoIiwidmlld3BvcnRIZWlnaHQiLCJlYWNoSXRlbU9mVHlwZUluVmlld3BvcnQiLCJ2aWV3cG9ydE9yaWdpblgiLCJ2aWV3cG9ydE9yaWdpblkiLCJleHBhbmRUb3BSb3ciLCJleHBhbmRSaWdodENvbCIsImV4cGFuZEJvdHRvbVJvdyIsImV4cGFuZExlZnRDb2wiLCJlYWNoTXVkbWFuSW5WaWV3cG9ydCIsImVhY2hUaWxlSW5WaWV3cG9ydCIsIm1pbkNvbCIsIm1heENvbCIsIm1pblJvdyIsIm1heFJvdyIsIndvcmxkWCIsIndvcmxkWSIsImRyYXdUaWxlIiwiYmFzZVJlZCIsImJhc2VHcmVlbiIsImJhc2VCbHVlIiwiZHJhd1giLCJkcmF3WSIsImxhbmRSZWQiLCJsYW5kR3JlZW4iLCJsYW5kQmx1ZSIsIm54IiwiVE9QX0xFRlQiLCJUT1AiLCJUT1BfUklHSFQiLCJMRUZUIiwiUklHSFQiLCJCT1RUT01fTEVGVCIsIkJPVFRPTSIsIkJPVFRPTV9SSUdIVCIsInNob3JlbGluZUF0IiwibGFuZFRvcExlZnQiLCJsYW5kVG9wUmlnaHQiLCJsYW5kQm90dG9tUmlnaHQiLCJsYW5kQm90dG9tTGVmdCIsImhhbGZUaWxlU2l6ZSIsInRpbGVMZWZ0WCIsInRpbGVSaWdodFgiLCJ0aWxlVG9wWSIsInRpbGVCb3R0b21ZIiwidGlsZUNlbnRlclgiLCJ0aWxlQ2VudGVyWSIsInNob3JlU2l6ZSIsInNob3JlVG9wWSIsInNob3JlQm90dG9tWSIsInNob3JlTGVmdFgiLCJzaG9yZVJpZ2h0WCIsImxhbmRUb3AiLCJsYW5kUmlnaHQiLCJsYW5kQm90dG9tIiwibGFuZExlZnQiLCJvbGRTdHlsZSIsImRyYXdTaG9yZWxpbmUiLCJ3aGl0ZSIsInNub3dpbmVzcyIsInJlZCIsImdyZWVuIiwiYmx1ZSIsInN0cm9rZVJlY3QiLCJkcmF3V29ybGQiLCJfdGltZXN0YW1wIiwiY2xlYXJSZWN0Iiwid29ybGRXaWR0aCIsIndvcmxkSGVpZ2h0IiwiZHJhd1NwYWNlIiwic3BhY2VXaWR0aCIsInNwYWNlSGVpZ2h0IiwidG9GaXhlZCIsImNyZWF0ZUVtcHR5RmlsbEJhciIsImVuZFJhZGl1cyIsImZpbGxCYXIiLCJkcmF3SHVkIiwiYmFyV2lkdGgiLCJiYXJIZWlnaHQiLCJiYXJUb3BZIiwiYmFyQm90dG9tWSIsImh5ZHJhdGlvbkxlZnRYIiwid2FybXRoTGVmdFgiLCJzb2NpYWxMZWZ0WCIsImJhclBhdGhzIiwiaHlkcmF0aW9uQmFyIiwiYWRkUGF0aCIsIndhcm10aEJhciIsInNvY2lhbEJhciIsImh5ZHJhdGlvbkZpbGxCYXJIZWlnaHQiLCJwZXJjZW50SHlkcmF0ZWQiLCJoeWRyYXRpb25GaWxsQmFyVG9wWSIsIndhcm10aEZpbGxCYXJIZWlnaHQiLCJ3YXJtdGhGaWxsQmFyVG9wWSIsInNvY2lhbEZpbGxCYXJIZWlnaHQiLCJzb2NpYWxGaWxsQmFyVG9wWSIsImRyYXdGaXJlbGlnaHQiLCJkYXlsaWdodCIsImZsaWNrZXJSYWRpdXMiLCJmaXJlbGlnaHQiLCJjcmVhdGVSYWRpYWxHcmFkaWVudCIsImFkZENvbG9yU3RvcCIsImRyYXdOaWdodEludG8iLCJuaWdodEN0eCIsIm9sZEdjT3AiLCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCJmaXJlbGlnaHRDYW52YXMiLCJmaXJlbGlnaHRSYWRpdXMiLCJkcmF3R3JvdW5kTGV2ZWwiLCJzaGFkb3dYIiwic2hhZG93WSIsInNoYWRvd1dpZHRoIiwic2hhZG93SGVpZ2h0Iiwic2hhZG93R2lydGgiLCJzaGFkb3dPZmZzZXRYIiwic2hhZG93T2Zmc2V0WSIsInNoYWRvd0NvbG9yIiwic2hhZG93Qmx1ciIsImRyYXdLbmVlTGV2ZWwiLCJoYWxmVGlsZSIsInZpZXdwb3J0WCIsInZpZXdwb3J0WSIsImRyYXdFeWVMZXZlbCIsImRyYXdDYW5vcHlMZXZlbCIsImJvdWdoQ291bnQiLCJkcmF3QmlyZExldmVsIiwiZHJhd0Nsb3VkTGV2ZWwiLCJkcmF3T3JiaXRMZXZlbCIsImN5Y2xlUGVyY2VudCIsInN0YXJ0IiwibmV4dEhlcm8iLCJwcmV2SGVybyIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJnZXRFbGVtZW50QnlJZCIsImJvZHkiLCJldmVudCIsIm9mZnNldFgiLCJvZmZzZXRZIl0sInNvdXJjZVJvb3QiOiIifQ==